CTF之文件包含
一.file_include1
按F12查看代码,index.php表明网站使用language
参数来动态包含语言文件。由于未正确验证输入,存在文件包含漏洞。攻击者可以通过操纵language
参数来包含任意文件。
(1)利用php://filter协议,将文件内容转换为Base64编码,从而读取源代码。具体Payload为:language=php://filter/convert.base64-encode/resource=flag。
(2)构造HTTP请求,通过HTTP请求中的Cookie字段设置language
参数为上述Payload。
服务器返回HTTP 200响应,其中包含一段Base64编码的字符串;使用Base64解码工具对上述字符串进行解码,得到flag.php
的源代码。
二.file_include2
代码由于未正确验证输入,存在文件包含漏洞。攻击者可以通过操纵file1和file2参数来包含任意文件。利用php://filter
协议将flag.php文件内容转换为Base64编码,从而读取源代码;利用data协议让将数据直接作为“文件内容”传递给这些函数,而无需创建一个真实的物理文件。具体Payload为:
?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data:text/plain,hello%20ctf
最后得到flag.php的内容,最后转码得到flag。
三.file_include3
代码由于未正确验证输入,存在文件包含漏洞。攻击者可以通过操纵filename参数来包含任意文件。看到一个检查文件,猜测可能有限制,就构造Playload来查看一下check.php的内容,但是页面没反应。Payload为:?filename=php://filter/convert.base64-encode/resource=check.php
可能过滤器选的不对,经过一系列的尝试,check.php内容就显示出来了,果然有限制。
Payload为:?filename=php://filter/convert.iconv.UTF-8.UTF-16/resource=check.php;可以用UTF-8编码格式转为UTF-16编码格式将资源流显示出来
那我就用Payload为:?filename=php://filter/convert.iconv.UTF-8.UTF-16/resource=flag.php;得到flag。