CTF中file_get_contents的绕过技巧

9 人参与

CTF竞赛中,file_get_contents函数常被用于读取文件内容,但参赛者总能找到巧妙的方法绕过限制。这个看似简单的函数,实际上隐藏着不少安全漏洞。

协议处理器的妙用

PHP的file_get_contents支持多种协议,这为绕过提供了可能。当目标服务器配置不当,允许使用php://filter协议时,攻击者可以读取base64编码后的文件内容。比如使用php://filter/convert.base64-encode/resource=index.php,就能获取到经过编码的源代码。

更隐蔽的是data协议,它允许直接在URL中嵌入数据。构造data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+这样的payload,就能执行任意代码。去年DEF CON CTF中,就有队伍利用这个技巧成功读取了配置文件。

路径遍历的艺术

当目标系统使用相对路径时,路径遍历攻击往往奏效。通过构造../../../etc/passwd这样的路径,可以突破目录限制。记得有次比赛,选手用....//....//....//etc/passwd成功绕过了简单的过滤机制。

有些题目会限制文件扩展名,这时候就要发挥创造力了。利用空字节截断、URL编码或者大小写混合,往往能出奇制胜。比如把config.php写成config.PHP,或者使用config.php%00.txt,都可能绕过检测。

SSRF攻击的延伸

file_get_contents不仅能读取本地文件,还能发起网络请求。这就为SSRF攻击打开了大门。通过控制参数,可以让服务器访问内部服务,比如http://127.0.0.1:8080/admin,从而探测内网信息。

在去年的Hack the Box比赛中,有个题目就是利用file_get_contents访问内网Redis服务,通过构造特定的payload实现了远程代码执行。这种攻击手法的关键在于对协议和端口号的精准把握。

绕过file_get_contents限制就像是在和安全机制玩捉迷藏,每次发现新的技巧都让人兴奋不已。这些技巧不仅适用于CTF赛场,在真实渗透测试中同样有效。

参与讨论

9 条评论
  • 幽灵审判

    data协议上次比赛试过,直接绕过了waf

    回复
  • 布丁熊

    路径遍历老套路了,现在还能用吗🤔

    回复
  • 零壹黑客

    ….//这种写法第一次见,学到了

    回复
  • 狐妖

    这个php://filter确实好用,比赛经常用

    回复
  • 乒乓乓

    空字节截断现在还能用?php7不是修复了

    回复
  • 苍穹射手

    感觉ssrf这块讲得不够细啊

    回复
  • 刺猬厨师

    去年hackthebox那道题确实经典

    回复
  • 飞鹰科技

    这些技巧实战也好用

    回复
  • 篆香阁

    data协议那个例子挺实用

    回复