文件包含是指使用include、require等一些包含文件的函数,所产生的漏洞。分为本地文件包含、远程文件包含
本地文件包含:是调用的是服务器本地的文件:如下:
远程文件包含:是调用其他服务器的文件:如下:
下面开始复现:
<!DOCTYPE html>
<html>
<head>
<title>index.php</title>
</head>
<body>
<form action="index.php" method="GET">
<input type="text" name="file">
<input type="submit" name="load" value="load">
</form>
</body>
</html>
<?php
$file = $_GET['file'];
if (isset($file)&&($file!=null)) {
include "$file";
}else{
echo "请指定文件";
}
?>
下面是页面
通过这个漏洞可以访问一些用户不应该访问的文件,如果服务器中有木马的话,攻击者可以利用这个漏洞直接访问并执行木马文件,从而拿到shell。
下面通过更改网页浏览日志文件来进行漏洞利用:
使用burp拦截网页并在url中输入一句话木马:
然后我们会在access.log文件中发现,
使用中国蚁剑(或菜刀)连接access.log文件利用成功
http://127.0.0.1/include/index.php?file=..\..\Extensions\Nginx1.15.11\logs\access.log&load=load
access.log的路径不同的Web服务器软件会有所区别,请自行百度
防御方法:建议使用黑名单或白名单对url进行过滤