CTF中file_get_contents的绕过技巧
新版NewBugKu-Web1-对方不想和你说话并扔了一段代码Writeup
在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赛场,在真实渗透测试中同样有效。

参与讨论
data协议上次比赛试过,直接绕过了waf
路径遍历老套路了,现在还能用吗🤔
….//这种写法第一次见,学到了
这个php://filter确实好用,比赛经常用
空字节截断现在还能用?php7不是修复了
感觉ssrf这块讲得不够细啊
去年hackthebox那道题确实经典
这些技巧实战也好用
data协议那个例子挺实用