文章总结: 本文分享了渗透测试中通过切换HTTP请求方法发现任意文件读取漏洞的实战经验。在常规基于key的下载接口测试无效后,尝试GET请求发现逻辑差异,通过fileName参数成功进行路径遍历读取敏感文件。漏洞源于遗留接口未清理,建议测试时不要忽略不同请求协议可能带来的差异。
综合评分: 88
文章分类: 渗透测试,WEB安全,实战经验
渗透测试中任意文件读取小技巧
原创
进击的hack
进击的HACK
2025年12月29日 07:50
江苏
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。
前言
最近的一次渗透测试中,遇到一处文件下载。
文件不是直接从 /img/xxx 这样的路径下载,而是通过数据库,将key和文件的路径对应。
后端根据前端传来的key,从数据库中寻找文件路径,然后读取文件返回。
一般来说,这种读取办法基本没有办法能进行任意文件读取,但发现这个系统,因为适配的原因,替换了一个请求协议,发现了漏洞。
任意文件读取
测试过程中,遇到下面的文件下载
96cc235c1a7b48a68204d15eb0fca1f6.png
- • key和文件存在映射关系,具体的关系在数据库中
- • filename传入后端的作用是设置返回的文件的文件名
一般在测试到这里的时候,就可能不会再测了,因为没办法传入路径。后端只从key读取文件。
我测量key能不能传入相对路径,不成功,就放弃了。
随后,我开始收集API批量测试有没有越权的时候,发现这个API /dev-api/common/download 在请求参数为GET的时候,返回还是200,而不是405。
而他返回的信息是,缺少参数fileName
965d70b5c3283c6a0e3f9aa898410bd1.png
提示的是fileName,而不是key?
我重新构造参数
fileName=../../../../../etc/passwd
5a895e84af3f51e83c7b4874a4bcb725.png
后续,和开发交流了一下。
是他们这个系统是老系统的改的。GET请求是原本的,改造后,为了适配老环境,就保留了。
总结
遇到API,几个请求协议都不能放过,尝试一下。没准就有新收获。
文件读取的技巧:
- 技巧分享 | 文件读取漏洞后的深入利用姿势(建议收藏) https://mp.weixin.qq.com/s/7prdLc9ml6q2chrRxdsdEQ
- 文件读取漏洞实战利用 https://mp.weixin.qq.com/s/JsYXhN1TJf0pA45Xm_ThjQ
- 记一次任意文件读取漏洞的挖掘 https://mp.weixin.qq.com/s/4TAFGKZ25dmhXoQAHpdDIQ
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:进击的HACK 进击的hack《渗透测试中任意文件读取小技巧》