我踩过的坑和总结出的实战套路
嘿,朋友们!今天想跟大家聊聊一个渗透测试里特别常见、但很多人又容易忽略细节的话题——任意文件读取几种方法,说实话,我自己刚开始学安全的时候,对这块儿真是一头雾水,踩了不少坑,后来慢慢摸索才有点心得,今天就当是跟大家唠嗑,把我理解的任意文件读取几种方法掰开揉碎了讲一讲,希望能帮到正在摸索的你。

先说个我自己的糗事
记得第一次遇到文件读取漏洞的时候,我兴奋得不行,结果一顿操作猛如虎,一看输出全是 404……后来才发现,路径编码没处理好,白白折腾一下午,所以啊,任意文件读取几种方法这东西,光知道原理没用,细节才是魔鬼!
路径穿越,最经典也最实在
第一个要说的当然是路径穿越(Path Traversal),这个原理其实不复杂,就是利用 这种相对路径往上跳目录,比如一个下载接口是 download?file=report.pdf,你试试 download?file=../../../../etc/passwd,搞不好就直接把系统文件读出来了,哎,听起来是不是挺简单?但实际测试中,很多站点会过滤 ,这时候就得动动脑子了——双写绕过 、URL 编码 %2e%2e%2f、甚至用 ..%252f 双重编码,都是常见的变形手法,真的,每次绕过成功那一刻,成就感爆棚!
绝对路径直接怼
有时候服务器配置疏忽,参数直接接受绝对路径,你传个 /etc/passwd 或者 C:\Windows\win.ini 进去,它居然老老实实给你返回了,这种情况虽然现在少了,但在一些老系统或者内部工具里还是能碰到,我上次就遇到一个后台日志查看功能,直接传绝对路径就能读任意文件,简直离谱到家了。
利用伪协议和封装器
这个就有点意思了,PHP 环境下,php://filter 可是神器啊!php://filter/convert.base64-encode/resource=index.php,能把源码 Base64 编码后读出来,完美绕过一些内容过滤,还有 file://、data:// 这些封装器,配合文件包含漏洞,能玩出花来,不过要注意,这类方法依赖具体语言环境,Java 里就是 file:、jar: 这些,思路是相通的。
日志文件和临时文件"曲线救国"
有时候直接读目标文件读不到,怎么办?换个思路嘛!比如通过文件包含去读 Apache 的 access.log,或者利用上传的临时文件,我之前做过一个靶场,就是先把 PHP 代码写进日志,再包含日志文件执行——虽然不是纯粹的"读取",但本质上是同一套逻辑的延伸,这种"曲线救国"的思路,我觉得特别值得琢磨。
API 和参数污染
现在前后端分离的项目多了,很多 API 接口会带 path、file、filename 这类参数,有时候一个接口过滤严,另一个接口就松得跟筛子似的,还有参数污染,?file=a&file=../../etc/passwd,后端取哪个值就看运气了,这种"广撒网"的方式,虽然土,但真管用。
最后唠叨两句
说真的,任意文件读取几种方法远不止我上面列的这些,还有软链接、压缩包解压路径穿越、XXE 读文件等等,每一种都有它的适用场景,关键是要理解原理,然后根据实际情况灵活变通,我建议大家多去靶场练练手,DVWA、Pikachu,光看文章是学不会的,动手才是王道!
好了,今天就唠到这儿,如果你也在研究任意文件读取几种方法,欢迎一起交流,咱们下回见!