文件上传技术总结
XMindChEPTpEere4pPp3.8h2试用要式Sa44十年.听元汽狂节产方生左车析上传ItaorFSs改文件解行方式方利!xP打统学/麻x绿部成I足让tAD.coENLRCoiD中国汽的折时语言特性+系统特性+中间件化析漏逅CVE-2015-444.ter1.jpo1寄户端文件上传漏洞绕过MIME过3083省rd0文大小个服务端Pirdows下ADs艺特.上irdow下SRCIU电29L一大小上都雨
语言可解析的后缀
(前提:在Apache httpd.conf 配置文件中有特殊语言的配置
AddHandler application/x-httpd-php .php
搭配大小写、双重、空格来进行
其中:
phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀
常见的MIME类型
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .jpeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
windows特性
Windows下文件名不区分大小写,Linux下文件名区分大写欧西;
Windows下ADS流特性,导致上传文件xxx.php::$DATA = xxx.php;
Windows下文件名结尾加入.,空格,<,·>,>>>,0x81-0xff等字符,最终生成的文件均被windows忽略。
00截断
0x00截断是将上传文件名或路径名中使用ascll码值为0的字符(也就是null)来进行截断,%00一般用在URL中用于截断url来进行文件包含,两者原理都一样,都是ascll为0的字符,只是形式不同
使用%00截断,需要两个条件 (1)php版本小于5.3.4(2)php的magic_quotes_gpc为OFF状态
例如:1.asp%00.jpg
post型:post不会像get对%00进行自动解码,所以先添加一个+号,
然后找到2b
使用0x00截断
先在文件尾添加一个空格,点开hex,将其对应的20改成00即可,就可以绕过后缀名的过滤
文件头检查
改后缀为php上传,还是失败
合成图片马,再修改后缀php再上传
如果是检测gif的话,可以在内容前添加GIF89a,例如
二次渲染
上传的图片会被修改部分内容,此时要对比未上传和已上传的图片对比出没有被修改的部分,在未修改的部分插入一句马子
例如上传前,把马子插入gif图片的底部
上传后,发现马子不见了
需要找到渲染前后没有变化的位置,然后将php代码写进去 例如:
.htaccess绕过
.htaccess(apache的配置文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。)
前提是:httpd.conf,启用AllowOverride(将该值改为all)
上传一个.htaccess内容如下的文件
<FilesMatch "2.jpg">
SetHandler application/x-httpd-php
.htaccess文件的内容的意思是 对2.jpg使用php重新解析
如果只是单纯如下语句,它会把所有上传文件当成php来解析
SetHandler application/x-httpd-php
Apache解析漏洞
一:
其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过
例如:
正常上传.php文件上传不成功,burp抓包后发送到Repeater然后hex在置右键-Insert byte,在0d、0a前加一个0a,然后send,即可绕过上传
在页面访问http://192.168.0.99:8080/feng.php%0a
二:
Apache多后缀解析
如果运维人员给.php后缀增加了处理器:
AddHandler application/x-httpd-php .php
那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
三
影响版本Apache 1.x和Apache 2.x
Apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后面向前解析,直到碰到认识的扩展名为止。
例如feng.php.QWE.ABC
Apache在处理时,先读取最后一个后缀,为ABC不认识,继续往左读取QWE不认识,读到php能识别这个后缀,于是就把feng.php.QWE.ABC当成是feng.php文件来解析,若是所有后缀都看完了没有一个认识怎么办?此时就会把该文件当做默认类型进行处理了,一般来说,默认类型是text/plain。
phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀
IIS 解析漏洞
目录解析
/xx.asp/xx.jpg
若文件夹的名字后缀为 .asp、.asa,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
例如创建目录 abc.asp,那么
/abc.asp/1.jpg
1.jpg将被当作1.asp文件来执行。不管你上传后你的图片改不改名都能拿shell了。
文件解析
在IIS6.0下,分号后面的不被解析,例如
abc.asp;.jpg
会被服务器看成是abc.asp
原理大抵是IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个"."后,便进入了一种截断状态,在该状态下遇到特殊符号 "/"和";",都会进行截断,只保留特殊符号前的部分,即".asp",从而认为文件后缀为".asp"。
默认解析
IIS6.0 默认的可执行文件除了asp还包含这三种默认解析:/xx.asa /xx.cer /xx.cdx
原因:由于在 IIS 默认配置中,这几个后缀默认由 asp.dll 来解析,所以执行权限和 .asp 一摸一样,你可在配置中自行删除该后缀,以防止安全隐患
此处可联系利用目录解析漏洞 /xx.asa/xx.jpg 或 /xx.cer/xx.jpg 或 xx.asa;.jpg
IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞
前提:默认Fast-CGI开启状况下,在一个文件路径(/xx.jpg)后面加上/xx.php会将
/xx.jpg/xx.php 解析为 php 文件。
在某些使用有漏洞的网站中,访问http://xxx.xxx.xxx/1.jpg/1.php,此时的1.jpg会被当作PHP脚本来解析,但是1.php是不存在的。
这就意味着攻击者可以上传合法的"图片"(图片木马)然后在URL后面加上"/1.php",就可以获得网站的WebShell,菜刀连接:http://xxx.xxx.xxx/1.jpg/1.php
java的空字节截断
\u0000.jpg