去年帮一个做电商的朋友看他的后台,登录框没验证码,洞挖我随手试了 admin' or 透漏'1'='1,直接进了订单管理页。洞挖他脸都白了。透漏这不是洞挖段子,是透漏很多中小型Web应用的日常。渗透测试和漏洞挖掘,洞挖说到底就是透漏跟开发者的疏忽较劲。
很多人觉得这行神秘,洞挖其实工具就那么几样:Burp Suite 抓包改包,透漏sqlmap 跑注入,洞挖nmap 扫端口。透漏但工具是洞挖死的,思路才是透漏活的。我见过有人拿着 AWVS 扫完报告就交差,也见过有人手工测一个上传点,绕了三种后缀、两种 MIME 类型,最后用 .phtml 配合 Content-Type: image/gif 拿下 shell。差别在哪?前者在完成流程,后者在理解逻辑。
Web 渗透的核心是“信任边界”。浏览器传过来的任何东西——URL 参数、Cookie、Referer、甚至 User-Agent——都可能是攻击载荷。有个经典案例:某网站用 X-Forwarded-For 做 IP 白名单,结果攻击者直接伪造这个头就进了内网管理面板。开发觉得 HTTP 头是“协议层面”的东西,不会有人改,可 Burp 里改一下只要两秒。
漏洞挖掘比渗透测试更偏“找未知”。渗透是带着授权去模拟攻击,漏洞挖掘则可能是在 SRC、众测平台,甚至自己对着某个 CMS 死磕。我挖到过最有意思的一个洞,是一个二手交易平台的“收藏”功能。它把商品 ID 做了 base64 编码,但解码后直接拼进 SQL 查询。没有单引号过滤,没有预编译。我写了个脚本遍历 ID,把全站用户的收货地址全拉下来了。厂商一开始不信,我发了前十个地址,他们十分钟内就修了。
这类逻辑漏洞比 SQL 注入更隐蔽。注入有 WAF 挡,有参数化查询防,但“越权”往往藏在业务流里。比如修改密码时,请求体里带个 user_id,后端不校验这个 ID 是否属于当前会话,那你就能改任意用户的密码。这种洞扫描器扫不出来,得靠人去看请求和响应的对应关系。
再说说文件上传。黑名单禁了 .php,那就试 .php5、.pht、.phar;禁了后缀,就试 .php.jpg,或者 .php%00.jpg(老版本 PHP 的截断)。Windows 下还能用 .php: 或者 .php (末尾空格)。这些绕过手法网上都有,但真到实战,你得先判断目标是什么中间件、什么版本、有没有解析漏洞。IIS 6.0 的 /test.asp/1.jpg 解析成 asp,Nginx 的 /1.jpg/1.php 在某些配置下也会当 PHP 执行。不知道这些,你连门都摸不到。
工具用得好不好,看的是会不会改。sqlmap 的 --tamper 脚本能绕过不少 WAF,但有时候得自己写。比如某次遇到一个 WAF 把 union select 里的空格全吃了,我写了个 tamper 把空格换成 /**/,再配合大小写混写 UnIoN SeLeCt,就过去了。这些细节,教程里不会讲,得自己踩坑。
最后说个心态问题。别觉得挖到洞就牛了。我见过有人拿扫描器结果去勒索厂商,也见过有人把未授权的测试数据发到群里炫耀。这行底线比技术重要。你手里的 payload 能进别人数据库,也能进监狱。授权、范围、报告,一个都不能少。
Web 渗透和漏洞挖掘,本质是跟代码逻辑对话。你比开发者多想一步,就能多找到一个洞。但别忘了,你是在帮人修墙,不是拆家。
—— 一个还在挖洞的人
```