凌晨两点,网络我盯着屏幕上那个跳动的渗透光标。目标服务器的测试80端口开着,443端口也开着,步骤但真正让我感兴趣的网络是那个不起眼的8080端口——它跑着一个旧版本的Apache Tomcat,管理后台的渗透弱口令是admin/admin。这不是测试电影情节,是步骤我上周做的一次真实渗透测试。网络渗透测试说白了就是网络模拟黑客攻击,在坏人得手之前,渗透先找出系统能被攻破的测试地方。
第一步永远是步骤信息收集,这一步决定你后面是网络事半功倍还是事倍功半。别急着扫端口,渗透先打开浏览器,测试把目标网站翻个底朝天。看它的网页源码,找注释里泄露的邮箱和用户名;看它用的什么CMS,版本号是多少;去搜一下这个版本有没有公开的漏洞。我习惯用Shodan搜目标关联的公网IP,再用theHarvester收集子域名和邮箱。有一次,我在一个政府网站的robots.txt里发现了一个隐藏的备份目录,里面躺着整个数据库的dump文件——那一次,我连扫描器都没打开就拿到了最高权限。
信息够了,才轮到扫描和枚举。Nmap是必备工具,但别只会跑默认的-sV。我通常先用-sS做TCP SYN扫描,确认开放的端口,再用-sC跑默认脚本,顺带检测常见漏洞。记得加-p-扫全端口,很多管理员习惯把敏感服务放在高位端口上。扫描结果出来后,逐一验证每个服务的版本,去Exploit-DB或CVE列表里查对应漏洞。这个阶段别贪多,重点盯住web应用——SQL注入点、XSS反射点、文件上传接口,这些往往是突破口。我碰到过一个电商网站,它的搜索框直接把参数拼进SQL查询,单引号一提交,数据库就报错了——典型的注入点,后面的路就顺了。
拿到初步立足点后,真正的考验才开始——漏洞利用和权限提升。低权限shell只是入场券,你得想办法拿到root或SYSTEM权限。Linux上查sudo -l看有没有配置不当的提权命令,找内核版本对应的提权exp;Windows上查补丁安装情况,跑个Windows-Exploit-Suggester脚本。我印象最深的一次,目标是个内网运维机,我用一个普通的web应用用户进去,发现/tmp目录下有个可写的cron脚本,root每五分钟执行一次。往里塞了条反弹shell的命令,不到十分钟,我就拿到了root。那种感觉,比解出高数题还爽。
别忘了内网横向移动。很多新手拿到一台机器就收工,其实内网才是宝藏。读取本地的/etc/passwd和shadow文件,尝试密码复用;抓取内存中的明文凭据,用mimikatz导出哈希;查看ARP缓存和路由表,找出存活的内网段。用fscan或MSF的psexec模块批量尝试,往往能连穿好几台机器。去年一个客户的内网,我从一台OA服务器进去,用administrator的密码哈希直接登录了域控——那台OA服务器上存着域管的明文密码,写在配置文件里,连加密都懒得做。
最后一步,清理痕迹和写报告。别学电影里的黑客删日志删得干干净净,真实测试要留证据,但也要把后门清掉。删除你上传的工具,恢复被你改过的配置,把添加的账号移除。然后,把每一步操作、每个漏洞、每段利用过程,写成一篇能让客户CTO看懂的报告。报告别只列技术细节,要说明这个漏洞能被谁利用、会造成什么损失、怎么修复。有一次我报告里写了句“你们的支付接口可以直接改金额参数”,第二天客户技术总监就打电话来问细节——那才是报告该有的效果。
渗透测试不是炫技,是帮人堵漏洞的活儿。每次测试结束,我都会问自己一句:如果我是真正的攻击者,我会不会做得更狠?答案通常是会。所以别迷信工具,多想想人的疏忽——弱密码、默认配置、忘了关的测试接口,这些才是系统最脆弱的地方。