web渗透安全
凌晨两点,透安某甲方运维打来电话,透安声音发颤:“我们官网被挂了个赌博页面,透安后台登录不上了。透安”我远程看了一眼流量日志——攻击者从昨天下午就开始扫描,透安用的透安是最老套的SQL注入探测,但对方运气好,透安碰上了他们三个月没打补丁的透安旧版CMS。这活儿不复杂,透安但每次都能撞见类似的透安场景,让人忍不住想骂一句:漏洞从来不是透安新技术,是透安懒。
渗透测试干久了,透安你会形成一种直觉。透安拿到一个目标,透安先不看什么高科技,就翻它的登录框、上传点、参数拼接处。百分之六十的突破口,都藏在开发者“想当然”的代码里。比如某个搜索功能,前端限制了输入长度,后端却没校验,你塞一段闭合引号的payload进去,数据库就吐了。再比如文件上传,只查了后缀名,没查文件头,换了个图片马就绕过去了。这些手法在教科书里躺了十几年,可现实里依然好用,因为人的惰性比漏洞更稳定。
真正的麻烦在于逻辑漏洞。技术型漏洞有扫描器帮你兜底,但“越权访问”这种靠脑子的活儿,机器干不了。我印象很深的一次,测某电商平台,注册个普通账号,把订单接口里的用户ID改成别人的,居然能直接拉出对方的收货地址和手机号。开发觉得“登录了就能查自己的订单”是天经地义,却忘了校验“这个订单是不是属于当前登录者”。你问他,他还一脸无辜:“我没想到有人会这么改参数。”——可攻击者每天的工作,就是想尽办法改参数。
说句得罪人的话,现在很多企业做安全,纯粹是应付检查。买台WAF往前面一放,扫个等保就算完事。可WAF的规则库更新速度,永远追不上手工构造的变形payload。你拿个编码绕过的脚本试一下,多半能穿过去。更别提内网渗透了——外网打得跟铁桶一样,结果运维把数据库密码写在TXT里放在跳板机的桌面上,文件名就叫“密码.txt”。你说这种安全怎么做?拿什么做?
但渗透测试最迷人的地方,恰恰是这种博弈感。你永远在猜对方埋了什么坑,对方也永远在猜你会从哪条路摸进来。有一次我测一个金融系统,绕了半天没进展,最后蹲在厕所里抽烟,突然瞥见机房门口贴着张便签,写着“WiFi密码:admin@123”。我连上WiFi,直接进内网段,不到二十分钟就拿到了核心服务器的权限。那个瞬间我甚至有点同情防守方——他们防住了所有数字世界的攻击,却败给了一张物理世界的便利贴。
所以别把渗透想得太玄乎。它不全是0day和APT,更多时候是耐心活,是跟人性的弱点较劲。一个合格的渗透测试报告,不应该只列漏洞清单,还得告诉对方:“你这里不是技术漏洞,是管理漏洞——下次别把密码贴显示器上了。”安全这东西,说到底就是一场猫鼠游戏,而老鼠永远比猫更熟悉下水道的每一条岔路。