老陈把U盘塞进我手心时,渗透手册指尖是渗透手册凉的。他说,渗透手册这里面是渗透手册三次渗透测试的完整记录,够你少走两年弯路。渗透手册然后他补了一句:别指望看完就能黑进五角大楼,渗透手册那玩意儿靠的渗透手册是耐心,不是渗透手册教程。
我后来才明白他说的渗透手册耐心是什么意思。第一次实战是渗透手册给一家本地电商做安全评估,目标是渗透手册一个后台登录页。我翻遍了OWASP Top 10,渗透手册把SQL注入payload试了个遍,渗透手册WAF纹丝不动。渗透手册折腾到凌晨三点,渗透手册我瘫在椅子上随手敲了个 ' OR 1=1--,页面居然跳转了。不是注入成功,是开发把单引号过滤写反了——只拦了双引号。这种漏洞不在任何手册里,它藏在代码的褶皱里,得用手去摸。
渗透测试和看电影是两码事。电影里黑客敲几下键盘,进度条一跑,防火墙就绿了。现实是你得对着Burp Suite的拦截记录一行行看,看cookie怎么生成的,看token有没有过期校验,看那个 debug=true 的参数删掉之后服务器会不会多吐点东西出来。我见过一个系统,登录处做了防暴力破解,失败五次锁账号。但密码找回接口没做频率限制,拿手机号枚举一轮,能试出哪些号码注册过。这种边角料逻辑,扫描器扫不出来,得靠人蹲在那儿想:开发者写这段代码的时候,是不是急着下班?
信息收集比漏洞利用重要得多。老陈教我的第一课是逛GitHub。有个目标公司的程序员把内网IP写进了开源项目的配置文件里,还带了测试环境的数据库密码。我们没碰生产环境,用那组密码登进了他们的Jira,看到了所有未修复的漏洞工单。渗透的本质是找薄弱点,而人永远是最薄的那一环。一个离职员工没删的VPN账号,比十个CVE都管用。
工具这东西,够用就行。nmap扫端口,dirsearch跑目录,sqlmap对付已知注入点。但别指望工具能替你思考。有次我用sqlmap跑一个注入点,跑了四十分钟没出数据,换成手工构造盲注payload,五分钟就确认了。工具的快是建立在规则上的,而规则之外的东西,得用手指头去敲键盘试。就像开锁,电钻快,但有时候一把锉刀更管用。
报告是另一回事。客户要的不是你拿了几个shell,是你怎么进来的,能造成什么影响,怎么修。我写第一份报告时列了二十个漏洞,老陈删到剩三个。他说,你把一个高危漏洞讲清楚,比堆二十个低危有用。后来我学会了在报告里写:这个注入点能读到用户表,用户表里有手机号和加密后的密码,加密方式是MD5没加盐,彩虹表跑三小时能出八成。客户看完当天就发了补丁。
这行干久了会得一种病,看什么都想按F12。有次在便利店买水,自助结账机卡住了,我盯着屏幕上的报错信息看了半天,发现它把数据库路径直接吐在了前端。我什么都没做,但那种“我看到了不该看的东西”的感觉,像在别人家做客时瞥见了没关好的抽屉。渗透测试的边界感就在这儿——你可以推开那扇门,但别走进去。
老陈后来转行了,去做了安全开发。他说攻防这玩意儿,攻到最后都是拼谁更了解系统。我还在做渗透,每次拿到新目标,还是像第一次那样,先泡杯茶,打开代理,慢慢看。漏洞就在那儿,跑不掉,你得有耐心等它自己露出来。