扫描漏洞工具
去年冬天,扫描一个朋友把公司内网测试环境的漏洞IP段发给我,说“你随便扫,工具扫出问题我请你吃饭”。扫描我用Nmap跑了一遍全端口扫描,漏洞发现8080端口上挂着一个Jenkins服务,工具版本号是扫描2.138。这个版本存在CVE-2018-1000861远程代码执行漏洞。漏洞从扫描到拿到服务器权限,工具前后不到二十分钟。扫描他后来请我吃了顿火锅,漏洞但脸色不太好看。工具 扫描漏洞这件事,扫描本质上就是漏洞信息收集。你得先知道目标开了哪些端口、工具跑了什么服务、用了什么版本,才能判断有没有已知漏洞可以利用。这个过程听起来简单,但实际操作中坑不少。 端口扫描是最基础的环节。Nmap是绕不开的工具,但很多人只会敲一个 服务识别比端口扫描更关键。同样是80端口,可能是Apache、Nginx、Tomcat,甚至是一个自定义的HTTP服务。版本号差一个小版本,漏洞情况可能完全不同。有一次我扫到一个开放了6379端口的Redis服务, 漏洞扫描器是另一类工具。Nessus、OpenVAS、AWVS这些商业化产品有自己的漏洞库和检测逻辑,适合做合规性检查。但它们的误报率不低。我曾经用Nessus扫出一台服务器存在“Apache Struts2远程代码执行漏洞”,结果手动验证发现只是返回包里带了某个特征字符串,实际版本并不受影响。扫描器的报告只能作为线索,不能当作结论。 开源工具里,nuclei这两年被用得很多。它基于YAML模板做检测,速度快,误报相对可控。你可以自己写模板,也可以从社区拉取。我一般用它来快速过一遍常见漏洞,比如Log4j2的JNDI注入、Spring Boot Actuator未授权、各种未授权访问。但nuclei的模板质量参差不齐,有些模板只是发一个请求看返回状态码,这种检测逻辑很容易被WAF或者自定义错误页面骗过去。 扫描过程中最容易被忽略的是时间因素。很多漏洞利用窗口很短,比如某个服务在重启后会有几秒钟的未授权状态。定时扫描和持续监控比一次性扫描更有价值。我见过一个案例,某公司的测试环境每天凌晨三点会重置数据库,重置后的五分钟内,管理后台是没有密码的。这个信息靠单次扫描根本拿不到。 还有个现实问题:扫描行为本身会被记录。目标服务器上的WAF、IDS、日志系统都会留下你的IP和请求特征。如果是授权测试,提前报备IP白名单是基本操作。如果是非授权环境,扫描本身就可能触犯法律。这一点没什么好含糊的。 工具终究是工具。Nmap、nuclei、Nessus,用哪个不重要,重要的是你知道自己在找什么,以及找到之后怎么验证。扫描报告上的一行“可能存在漏洞”,和实际拿到shell之间的距离,往往比想象中大得多。nmap -sS target就完事。实际上扫描策略要根据场景调整。比如在内网环境里,防火墙可能屏蔽了ICMP,这时候需要用-Pn跳过主机存活检测。如果目标做了端口过滤,TCP全连接扫描-sT比SYN半开扫描-sS更容易拿到结果,虽然慢一些。我习惯先跑一遍nmap -sS -p- --min-rate 5000快速过一遍全端口,锁定开放端口后再用-sV -sC做版本探测和默认脚本扫描。-sV显示版本是3.2.0。这个版本存在未授权访问漏洞,直接连上去执行config set dir和config set dbfilename就能写文件。但如果对方跑的是6.0以上版本,默认配置已经绑定了本地回环地址,这条路就走不通了。
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-