那些年我踩过的坑,今天全抖给你们听!
嘿,各位网安圈的兄弟姐妹们,老规矩,先点根烟,咱们坐下来慢慢聊。

说实话,干我们这行的,谁没跟“解析漏洞”这几个字打过架?尤其是那些藏在URL里的“常用参数”,简直是又爱又恨,爱它是因为一旦挖通,那成就感比夏天灌一瓶冰可乐还爽;恨它是因为,有时候你明明把漏洞都堵死了,结果对方换个参数,嘿,又给绕过去了!你说气不气人?
今天我不念PPT,也不整那些枯燥的技术文档,就纯粹以我一个“老油条”的视角,带大伙儿复盘一下那些年我亲身踩过的、看别人踩过的“解析漏洞常用参数”的深坑。温馨提示:本文所有内容均为技术讨论,请务必在授权测试环境下操作,别手欠去搞公网啊,不然进去了我可捞不了你!
先聊聊“解析漏洞”到底是个啥玩意儿?
咱打个比方啊,服务器就像一个安保严格的物业,它收到一个请求,给我把这个文件读出来”,这“解析漏洞”呢,就是物业里的“内鬼”保安,这哥们儿对文件后缀名或者路径参数认死理,只要看到特定的“暗号”(也就是咱们说的常用参数),它就放行了,哪怕这个文件本质是个病毒。
而我们要找的,就是那些能让“内鬼”启动的“暗号”。重点来了啊,下面这些参数,考试要考的!
Nginx解析漏洞的“三板斧”:%00、.php、以及那个该死的CVE
Nginx这家伙,性能是强,但脾气也怪,我最早接触到的,就是那个经典的 cgi.fix_pathinfo 问题,你传一个 shell.jpg/.php 上去,按理说这应该是个图片吧?但Nginx一看,哎哟,路径里带.php,好嘞,直接把前面的图片当PHP给解析了!你说离不离谱? 这就像你去餐厅点了个“宫保鸡丁面”,结果厨师看到“面”字,就把宫保鸡丁扔了,给你上了一碗白面条,气不气?
还有那个 %00 截断,老古董了,以前PHP版本低的时候,你传个 shell.php%00.jpg,服务器一看,嗯,.jpg安全!但实际上,%00 在底层直接变成字符串结束符,后面的 .jpg 被“咔嚓”一刀切了,实际执行的是 shell.php。哎呀妈呀,这简直是把“后门”两个字写在脸上了,但当时就是能骗过不少人!
这儿得提一句 常用参数 里的 is_pathinfo 或者某些框架的路由参数,很多二次开发的小白站点,就是栽在这上面,如果你在代码里看到类似 pathinfo() 函数,却没做严格过滤,恭喜你,漏洞+1。
IIS的经典“;”分号与“畸形短文件名”
说完Nginx,咱再唠唠老前辈IIS,IIS的解析漏洞那真是“祖传手艺”了,最出名的就是 shell.asp;.jpg,这招儿绝了,服务器收到后,看到分号,心想:“哟,后面跟着个.jpg,应该是个图片吧?行,放行!”结果ASP引擎一执行,直接跑到分号前面去了,把 shell.asp 给执行了。你说这上哪儿说理去? 这好比快递员看到地址是“XX路100号(旁边是厕所)”,结果他只看括号里的“厕所”,把正经地址给忘了!
还有那个IIS6.0的畸形文件夹解析,比如创建一个 xxx.asp 的文件夹,里面放个 jpg,IIS直接把这个当ASP脚本给跑了,这真是把人当傻子糊弄,但在当年,真的是屡试不爽,虽然现在Win2008以上的版本默认修了,但保不齐有哪个运维偷懒没打补丁呢?所以啊,老司机也得时刻复习!
Apache的“多后缀解析”与.htaccess 的“魔法攻击”
Apache这位老兄,脾气比较“憨”,它的解析规则是,从右往左看后缀,只要碰见它认识的后缀,就用对应的语言解析。shell.php.txt,它一看,.txt不认,继续看,.php,认了!好,执行!这就像你给老外看名字“汤姆·克鲁斯”,他只看最后一个单词“克鲁斯”,前面的全都是前缀。
这时候 常用参数 就经常出现在一些伪静态规则里了,很多站长为了好看,把URL弄成 http://xxx.com/index.php/user/id/1.html 这种,如果Apache配置不当,开启了 MultiViews 选项,那你传个 shell.php.rar 都能给你解析了。
更别提那个 .htaccess 文件了,只要允许覆盖,上传一个 AddType application/x-httpd-php .jpg 的规则,所有jpg图片瞬间变身PHP木马。这绝对是“魔法攻击”啊兄弟们! 此时你需要猜解或者利用文件上传功能去构造这个文件,而常用的参数就是 filename 和文件内容了。
敲黑板,划重点:实战里常用参数怎么找?
光知道这些漏洞种类不够,我们得知道在抓包的时候,重点盯哪些参数,我给你们总结一下,记好笔记:
- URL路径参数:看着像
/uploads/2024/11/avatar.jpg这样的,你就试着在后面加 .php`,或者改后缀,尤其是那些文件名是时间戳+随机数的,改起来更刺激。 - 文件包含参数:看到
?page=index或?file=readme.txt之类的,脑子里的弦就要绷紧了!这就是典型的文件包含点,试试?page=php://filter/convert.base64-encode/resource=index.php,如果返回Base64乱码,恭喜你,源码到手,解析漏洞的基础有了! - 上传接口的参数:这是重灾区,抓个上传包,看看
filename="evil.php.jpg"这种格式,然后手动改成evil.php%00.jpg、evil.asp;.jpg、或者干脆直接evil.phtml、evil.pht,多试试总没错。
这里必须得说个我的真实感受: 现在纯靠后缀绕过的机会越来越少了,因为WAF(Web防火墙)也不傻,但解析漏洞的核心在于“服务器配置”和“中间件版本”,你要是不去指纹识别一下中间件,就瞎试参数,那跟大海捞针有什么区别?磨刀不误砍柴工啊朋友们! 先扫出来是Nginx、Apache还是IIS,再看版本,最后有的放矢,这才是正道!
写在最后,几句掏心窝子的话
技术这东西,日新月异,今天我说这些,可能明天就全被修复了,但思路是永恒的,解析漏洞的本质,用户输入的数据与服务器解析规则之间的认知偏差”,我们做测试的,就是要不断放大这种偏差。
好了,今天的分享就到这儿,我突然想起来,我之前有个项目就是因为一个 .user.ini 文件没处理好,导致整个站点的图片都被当成PHP执行了,那场面,简直是“满城尽带黄金甲”啊……唉,不说了,都是泪。各位如果也在测试中遇到过啥奇葩的解析参数,欢迎评论区留言,咱们一起开开眼!
PS: 记得,测试完一定要清理痕迹,别留后门,这不仅是职业操守,更是保护自己,不然被溯源到,可真就是“人在家中坐,锅从天上来”咯!下期见!