web渗透技术

凌晨两点,渗术某甲方服务器的透技日志文件里突然多了一条不起眼的POST请求。请求路径是渗术/admin/upload,参数里藏着一串base64编码的透技字符串。解码后是渗术../../../../tmp/shell.php——攻击者试了三次路径穿越,第四次成功了。透技整个过程不到四十秒,渗术日志里没有留下任何爆破痕迹。透技

这就是渗术web渗透的常态。它不是透技电影里黑客对着键盘噼里啪啦敲几下就黑进五角大楼,而是渗术大量重复的、枯燥的透技、甚至有点笨拙的渗术试探。真正的透技渗透测试,七成时间花在信息收集上。渗术子域名枚举、端口扫描、指纹识别、目录爆破,这些工具跑出来的结果堆成一座小山,而你要做的,是从这座山里找到那条能钻进去的缝。

我见过最经典的案例,是一个电商站点的登录接口。开发者觉得加了验证码就安全了,结果验证码的生成逻辑里带了时间戳。攻击者把时间戳往前调了五分钟,验证码就直接失效——不是校验失败,是校验逻辑压根没跑。这种漏洞,工具扫不出来,全靠人肉看代码。

sql注入早就不流行了?别信这话。去年某银行的分站,一个搜索框直接把参数拼进oracle查询里,连预编译都没做。攻击者用union select把整张用户表拖了出来,里面有身份证号和手机号。修复方案很简单,换成PreparedStatement就行,但开发团队愣是拖了三周——因为那个接口是外包写的,没人愿意碰别人的代码。

xss倒是越来越难打了。现在主流框架默认转义,存储型xss基本绝迹,但反射型xss依然活在各种jsonp接口里。有个有趣的细节:很多开发者知道要过滤<script>,却忘了<img src=x onerror=alert(1)>也能执行。这类问题往往出现在搜索建议、自动补全这类不起眼的功能上。

文件上传永远是重灾区。你以为检查了后缀名就安全了?攻击者上传一个.php.jpg,服务器如果用的是nginx,且配置了cgi.fix_pathinfo=1,就能直接解析成php执行。这种老掉牙的漏洞,现在依然在大量生产环境里活得好好的。

渗透测试做到最后,拼的不是技术,是思路。同样的目标,新手拿着nuclei扫一堆cve,老手可能只翻一下js文件,从里面找出一个硬编码的api密钥,直接调管理后台的接口。前者像拿大锤砸墙,后者像用钥匙开门。

说句实话,这行当有点脏。你每天做的事情,本质上是找别人的疏忽,然后利用它。但换个角度想,如果你不找,总有别人会找——区别在于,你找到了会写报告告诉对方怎么补,别人找到了会直接把数据拖走挂到暗网上卖。所以这活儿干久了,人会有种奇怪的道德感:破坏不是目的,让对方知道“你挡不住我”才是。

最后说个实操细节。很多人问,从哪里开始学?别急着上靶场,先把http协议吃透。请求头、响应头、cookie的httponly属性、同源策略的边界——这些基础概念搞不明白,你连burp suite的intercept都看不懂。等你能徒手构造一个合法的multipart/form-data请求时,再谈什么漏洞不漏洞的。

工具会过时,但思路不会。你手里那把sqlmap,明年可能就被waf拦得死死的,可如果你知道怎么手工注入,waf规则再严也有绕过的余地。这行当的真相是:永远有人在犯错,也永远有人在想办法利用这些错误。你只能选择站在哪一边。