一、文件上传漏洞
1、文件上传检测:
(1)js检测(前端校验):查看源码!禁用js或burp抓包修改
(2)mime类型检测: 是描述消息内容类型的因特网标准。
-
Content-Type(如下):
Content-Type.jpeg 测试方式
上传正常的文件绕过方法
上传正常的文件,然后burp抓包修改文件内容
上传恶意的文件,然后burp抓包修改MIME类型
(3)文件后缀名检测:黑名单或者白名单
- 黑名单检测?
上传文件合法性校验使用黑名单的方式,判断上传文件后缀,由于黑名单不全被攻击者绕过导致上传漏洞。
黑名单(绕过):内置解析配置、服务器特殊配置
服务器特殊配置
如果在Apache中.htaccess的配置有效。且可被上传。
那可以尝试在.htaccess中写入:
<FilesMatch “sec.jpg”>
SetHandler application/x-httpd-php
</FilesMatch>
sec.jpg 即可以php脚本解析
- 白名单(解析漏洞:中间件 先判断服务器中间件)
(4)内容检测
二、文件包含漏洞
1、原理:php文件包含函数(四个)过滤不严:require、require_once、include、include_once。
include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
2、文件包含漏洞的常见使用方法
1)php包含上传文件
<?php
$file = $_GET['page'];
include $file;
?>
url?page=../../file.txt
2)php包含读文件
- 将php源码以base64编码的形式读出来
http://192.168.5.79/index.php?url=php://filter/read=convert.base64-encode/resource=flag
3)php包含写文件
要是想利用包含写文件,必须开启PHP的url_allow_include远程URL功能,但是这个功能经过测试在5.3.0的时候已经用不了了,5.4.0直接废除了,因此在PHP 5.3.0一下版本才能实现。
url?page=php://input
post提交我们要执行的代码
4)php包含日志
5)截断包含
当PHP源码对于文件包含做出一定过滤的时候:
<?php
if(isset($_GET['page'])){
include $_GET['page'].'.php';
}else{
include 'index.php';
}
?>
可以利用%00截断来绕过过滤
6)其他绕过
目录跳转的过滤我们可以构造….//….//xxx.php,方式绕过,由于他只过滤一次,我们可以利用他的过滤动态拼接目录跳转,从而绕过过滤。