渗透测试不是渗透坐在办公室里翻文档,而是测试像小偷一样去撬自己家的锁。区别在于,主干这个小偷是渗透主人雇来的,撬完还得写份报告告诉主人哪扇窗没关严。测试我见过一家电商平台,主干安全团队自查了三个月没发现问题,渗透结果外聘的测试渗透测试员用一个弱口令进了后台,五分钟拿到了全部用户订单数据。主干这就是渗透渗透测试干的事——用攻击者的思路,找防守者的测试漏洞。
具体怎么干?主干先得踩点。不是渗透随便扫扫端口就完事。测试员会去查目标公司的测试域名注册信息、员工在社交平台晒的主干工牌照片、甚至招聘网站上的技术栈描述。有次我给一家公司做测试,从他们HR发的团建合照里认出了办公室门禁的品牌,顺着这个品牌默认密码没改的漏洞,直接进了内网。信息收集这一步,拼的是耐心和联想能力,跟侦探破案差不多。
然后才是技术活。扫端口、识别服务、找已知漏洞、尝试弱口令、构造恶意请求。听起来像流水线,实际上每一步都在做判断。比如扫到一台服务器开着8080端口,跑的是Tomcat,版本号是7.0.81。这个版本有反序列化漏洞,但目标系统有没有用存在漏洞的库?防火墙会不会拦?测试员得手动发几个请求验证,不能光靠扫描器报个“可能存在”就写进报告。扫描器会撒谎,人得学会分辨。
拿到权限之后的事,才是渗透测试和普通漏洞扫描的分水岭。扫描器告诉你门没锁,渗透测试员推开门走进去,看看能拿什么。能不能读数据库?能不能跳到另一台机器?能不能从普通用户提权到管理员?我见过最离谱的一次,测试员通过一个SQL注入点拿到了数据库的sa权限,然后利用数据库的xp_cmdshell执行系统命令,最后把域控密码抓了下来。整个过程像多米诺骨牌,一张倒了全倒。
但渗透测试不是搞破坏。测试员有一条铁律:不能影响业务正常运行。删库、改数据、留后门,这些事不能干。发现漏洞要截图、录屏、保存请求响应,作为证据。有时候为了证明一个漏洞能导致数据泄露,得小心翼翼地只读一条测试数据,然后立刻清理现场。这行干久了,人会变得特别谨慎,跟外科医生似的。
报告是最后一步,也是最容易被忽略的一步。很多测试员技术很强,写出来的报告却像天书。客户要的不是“存在CVE-2017-12615漏洞”,而是“攻击者可以利用这个漏洞上传木马,进而控制服务器,建议升级Tomcat到9.0.31以上,或者禁用PUT方法”。把技术语言翻译成业务风险,这才是渗透测试的终点。我见过一份好报告,每个漏洞都配了攻击路径图和修复优先级,客户的安全负责人看完直接说:“这比我们内部审计清楚多了。”
渗透测试也有边界。不能对未授权的目标下手,不能超出合同约定的范围。有次客户要求测试一个子域名,测试员发现这个子域名托管在第三方云服务商那里,按照规则必须先拿到云服务商的书面授权。客户嫌麻烦,说“你偷偷测一下没人知道”。测试员拒绝了。这行干久了就知道,技术再牛,越了界就是犯罪。合法授权是渗透测试和黑客行为的唯一分界线。
说到底,渗透测试是门手艺活。工具会更新,漏洞会修补,但攻击者的思维不会变——找最薄弱的环节,用最省力的方式突破。防守方要做的,就是比攻击者更早发现那个薄弱环节。雇人來撬自己的锁,总比哪天被真小偷撬了强。