知乎上有个老问题,渗透问“渗透测试到底是测试不是黑客”。底下有个高赞回答,知乎贴了张截图——某甲方运维在工单系统里怒吼:“你们这些搞渗透的渗透,跟黑客有什么区别?测试昨天把我服务器搞宕机了!”下面跟帖一片欢乐,知乎有人回:“区别大了,渗透黑客搞宕机是测试免费的,我们搞宕机是知乎要收费的。”
这话糙,渗透但理不糙。测试我干这行五年,知乎见过太多甲方把渗透测试当成“花钱买心安”的渗透仪式。合同签了,测试授权书盖了章,知乎然后丢过来一个IP段,附带一句“随便测,别搞坏就行”。你当真随便测?真把核心业务库翻个底朝天,对方安全负责人能当场心肌梗塞。
有一次去某银行做项目,对方技术总监全程站在我身后,像监考老师盯学生作弊。我每敲一条命令,他就咳嗽一声。测到第三个小时,他忍不住了:“兄弟,你能不能别用SQLmap?我们这系统是Oracle,你用工具跑,日志刷屏,我们SOC那边报警跟过年放鞭炮似的。”
我说行,那我手工注入。他脸色更难看:“手工?那更吓人,你一个请求一个请求试,我们的WAF会误判成暴力破解。”
最后我干脆关掉电脑,跟他聊了四十分钟业务逻辑。聊完发现,他们有个“密码找回”功能,验证码是4位数字,而且没有尝试次数限制。这比什么SQL注入都实在——我只需要写个小脚本,最多一万次穷举,就能进任意账号。整个过程一个HTTP请求都没发到他们WAF关注的路径上,SOC那边安静得像凌晨三点的机房。
这事儿让我琢磨出个道理:渗透测试这活儿,技术占三成,人情世故占七成。你以为是跟代码较劲,其实是在跟人较劲。甲方怕你搞出事,又盼你搞出事——搞不出事觉得钱白花了,搞出大事又怕担责任。这中间的平衡,比找漏洞难多了。
知乎上还有人问“渗透测试工程师是不是青春饭”。下面答案五花八门,有个说法我特认同:这行不是青春饭,是“体力饭”。你以为高级渗透工程师天天在挖0day?扯淡。大部分时间在写报告,在跟甲方解释“为什么这个漏洞危害是高危而不是严重”,在应付“你能不能顺便帮我们测测这个新上线的H5页面”。
我认识个前辈,四十多了,头发还茂密,但腰椎间盘突出。他去年接了个政府项目,对方要求“所有测试行为必须在工作日9点到18点之间进行,且每次操作前需提前半小时邮件报备”。结果他每天实际能测的时间不到三小时,剩下的时间全在写邮件、等审批、改测试方案。项目拖了两个月,最后交付的报告里,漏洞数量还没他自己发现的“甲方流程漏洞”多。
但你说这行没意思?也不是。当你真的通过一个刁钻的角度打进内网,拿到域控权限的那一刻,那种快感是会上瘾的。就像玩解谜游戏,你绕过了所有常规路径,用了一个连开发者自己都没想到的逻辑缺陷——这感觉,比打游戏通关爽十倍。
只是这种时刻太少。大部分时候,你面对的是已经被人测烂了的系统,是打了补丁的Struts2,是上了WAF的PHP站点。你得像考古学家一样,在代码堆里扒拉那些被人遗忘的角落——某个老接口没鉴权,某个测试账号没禁用,某个备份文件能直接下载。
知乎那个问题下面,还有个回答让我印象深刻。那人说:“渗透测试的本质,是帮甲方验证他们的安全预算有没有白花。”底下有人回复:“那要是测出来没漏洞呢?”答主回:“那你就得反思,是不是自己水平不行。”
这话虽然损,但真实。真没漏洞的系统我见过,极少。绝大多数情况是——你测了半天,只挖出几个低危,然后甲方安全团队洋洋得意:“看吧,我们防护做得不错。”你心里清楚,不是他们做得好,是你没找到对的切入点。那种挫败感,比被甲方骂还难受。
所以你看,这行当压根不是什么神秘的黑客江湖,它更像一场甲方和乙方之间的心理博弈。技术是武器,但真正决定成败的,是你对人性的理解——对开发人员偷懒习惯的理解,对运维人员侥幸心理的理解,对管理层“既要又要还要”心态的理解。
最后说个真事。去年有个甲方,测完以后问我:“你们是不是有那种……就是那种,能模拟黑客攻击的工具?给我留一份呗。”我说不行,那是内部工具。他一脸遗憾:“那算了,我们自己拿Nessus扫扫得了。”
我差点没忍住告诉他:你拿Nessus扫出来的漏洞,我拿浏览器就能复现。但想了想,还是没说。毕竟人家花钱请我来,就是为了让我告诉他们“你们很安全”——至少在他们自己心里,是这么想的。