文件包含漏洞-文件包含截断


文件包含截断

利用%00截断

%00截断受限于GPCaddslashes()等函数。也就是说在开启GPC或者使用过滤函数过滤的情况下不能使用,在PHP 5.3之后的版本全面修复了文件名%00截断的问题。

<?php
include $_GET['url'].'.php';
?>

image-20210505100907925

当url参数被过滤时

%00被转义成了0 0两个单体字符,不再具有截断功能

image-20210505101258523

利用./截断

利用多个./来截断,这种方式不受限于GPC,但是同样在PHP 5.3版本之后被修复。

在windows下使用240个点(.)连接可以截断

<?php
$str = '';
for($i = 0; $i <= 240, $i++){
    $str .= '.';
}
$str = '2.txt'.$str;
echo $str;
include $str.'.php';
?>

image-20210505104813141

在windows下,./共240个能够截断。

<?php
$str = '';
for($i = 0; $i <= 118, $i++){
    $str .= './';
}
$str = '2.txt'.$str;
echo $str;
include $str.'.php';
?>

image-20210505105544640

linux下需要2038个./组合才能截断。

利用?伪截断

远程包含时利用问号?来截断,不受GPC和PHP版本的影响,只要能够返回代码给包含函数,它就能执行。

在HTTP协议中,访问http://remotehost/1.txt和访问httpL://remotehost/1.txt?.php的返回结果是一样的,因为这时候WebServer把?之后的内容当作是请求参数,而txt不在WebServer里面解析,参数对访问1.txt返回的内容不影响,于是就实现了伪截断。

<?php
echo $_GET['url'].'.php';
include $_GET['url'].'.php';
?>

image-20210505110633801


文章作者: Sheng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sheng !
  目录