大纲:文件解析漏洞
上传本地验证绕过
上传服务器验证绕过
文件解析漏洞
解析漏洞主要说的是一些特殊文件被IIS、Apache、Nginx在某些情况下解释成脚本文件格式的漏洞。
IIS 5.x/6.0解析漏洞
一般是配合编辑器使用(CKFinder、fck这两个编辑器是可以创建目录的)
IIS6.0解析漏洞利用方法有两种:
1、目录解析
/xx.asp/xx.jpg
在网站下建立文件夹的名字为.asp、.asa的文件夹,启母路内的任何扩展名的文件都会被IIS解析成asp文件来解析并执行。
例如创建目录xx.asp,那么/xx.asp/1.jpg将会被当做一个asp文件来执行,假设hacker可以控制上传文件夹的路径,就可以不管你上传后的文件改不改名字都可以得到shell
2、文件解析
前提是上传后的文件名不被改变
xx.asp;.jpg (分号解析,分号前是一个文件,分号后是另一个文件)
第二种,在IIS6.0下,分号后面的不被解析,也就是说xx.asp;.jpg会被服务器看成是xx.asp,还有IIS6.0默认的是可执行文件除了asp还有以下三种:
/xx.asa
/xx.cer
/xx.cdx
Apache解析漏洞
Apache是从右到左开始判断解析,如果为不可识别的解析,就在往左判断(可以使用x.php.、x.php_)
比如xx.php.owf.rar,“.awf”和“.rar”这两种后缀是Apache不可识别的解析,Apache就会把后缀上述的文件解析成php文件
如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个xx.php.rar.jpg.png…….将所知的所有文件后缀名都列举出来,去测试是不是合法的。任意不识别的后缀,逐级向上识别。
IIS7.0/IIS7.5/Nginx<8.03畸形解析漏洞
在默认的Fast-CGI开启的状况下,hacker上传一个名字为x.jpg,内容是’);?>的文件,然后访问x.jpg/.php,在这个路径下就会生成一句话木马shell.php。
www.xx.com/logo.gif/*.php触发漏洞,漏洞姐会把勤勉的文件当做php文件执行
x.asp00jieduan%jpg
a.asp.a;.x.aspx.jpg..jpg 第二种解析漏洞
或者直接上传x.asp
IIS+PHP的都可以在图片的后面=/.php,看是否可以以php执行,比如:a.jpg/.php
Nginx<8.03空字节代码执行漏洞
影响版:0.5,0.6,0.7<=0.7.65,0.8<=0.8.37
Nginx在图片中嵌入php代码然后通过访问x.jpg%00.php来执行其中的代码(在URL中)
htaccess文件解析
如果在Apache中.htaccess可被执行,且可被上传,纳闷就可以尝试在.htaccess中写入:
上传本地验证绕过
上传检测流程概述:
通常一个文件以http协议进行上传时,将以POST请求发送至Web服务器web服务器接收大请求后并同意,用户与web服务器将建立连接并传输data
服务器命名规则
第一种类型:上传文件名和服务器命名一致
第二种类型:上传文件名和服务器命名不一致(随机、时间戳、、)
常见的上传检测
1、客户端JavaScript检测(通常为检测文件扩展名)(不多见)
2、服务端MIME类型检测(检测Content-Type内容)
3、服务端目录路径检测(检测跟path参数相关的内容)
4、服务端文件扩展名检测(检测跟文件extension相关的内容)(与黑名单白名单做匹配)
5、服务端文件内容检测(检测内容是否合法或含有恶意代码)
客户端检测绕过(JavaScript检测)
首先判断JS本地验证;通常可以根据他的验证警告弹框的速度可以判断,如果电脑的速度够快,那么可以用burp抓包,在点击提交的时候burp是没有抓到包的,就已经单框了,说明这个就是本地js验证。
绕过方法:
1、使用burp抓包改名
2、使用firebug直接删除掉本地验证的js代码
3、添加js验证的白名单
客户端白名单绕过:修改允许上传类型,在本地的HTML中
上传服务器端验证绕过
服务端检测绕过(MIME类型检测)
MIME的作用:是客户端软件,区分不同种类的数据,例如,web浏览器就是通过MIME类型来判断问价是GIF图片,还是可打印的postscript文件。
web服务器使用MIME来说明发送数据的种类,web客户端使用MIME来说明希望接受到的数据种类。
Tomcat的安装目录\conf\web.xml中就是定义了胆量的MIME类型。
绕过方法:
直接使用burp抓包,得到post上传数据后,将Content-Type:text/plain改为Content-Type/gif就可以成功绕过。
服务端检测绕过(目录路径检测)
目录路径检测,一般就是检测路径是否合法,但稍微特殊一点的都没有防御,比如比较新的fckeditor php<=2.6.4任意文件上传传漏洞,当POST如下的URL时;/fckeditor264/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image&CurrentFolder=fuck.php%00.gif HTTP/1.0
currentFolder这个变量的值就会传到ServerMapFolder($resourceType,$folderPath,$sCommand)中的形参$folder里,而$folder在这个函数中并没有任何检测,就被CombinePaths()执行了。
修改文件上传路径
http://www.xx.com/tcnet/Admin_login.asp
filepath路径修改绕过
可以突破自动命名规则xx.gif
一、改变文件上传后的路径
/a.asp/ 需要一定的权限
成功创建后
/a.asp/xx.gif
二、直接改变文件名称
/a.asp;.
修改后为
/a.asp;.xx.gif
服务端检测绕过(文件扩展名检测)
黑名单检测
黑名单的安全性比白名单的安全性低很多,攻击手法自然也比白名单多,一般有专门的blacklist文件,里面会包含常见的危险脚本文件,例如fckeditor2.4.3或之前版本的黑名单。
白名单检测
白名单相对来说比黑名单安全一些,但也并不是说就是绝对安全的。
绕过黑名单
1、文件名大小写绕过
用像Asp、pHp之类的文件名进行绕过检测。
2、名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有的asa或cer、、、
3、特殊文件名绕过
比如发送的http包里把文件名改成test.asp.或.asp_(下划线就是空格),这种的命令方式在Windows系统里是不被允许的,所有需要在burp里面进行修改,然后绕过验证后,会被Windows自动去除后面的点和空格,但要注意的是Unix/Linux系统没有这个特性。
4、0x00截断绕过
在扩展名检测中,在asp的程序中有这种漏洞,各个简单的伪代码
name=getname(http request)//加入这个时候获取到的文件名是test.asp.jpg(asp后面为0x00)
type=gettype(name)//而在gettype()函数里处理方式是从后往前扫描扩展名,所以判断为jpg
if(type=jpg)
5、.htaccess文件攻击配合名单列表绕过
上传一个自定义的.htaccess,就可以轻松绕过各种文件检测。
6、解析调用漏洞
绕过这类漏洞直接配合上传一个代码注入过的非法黑名单即可,再利用解析调用漏洞。
绕过白名单
1、0x00截断绕过
用像test.asp%00.jpg的方式进行截断,属于白名单的文件,再利用服务端代码检测逻辑漏洞进行攻击,目前在asp的程序中存在这种漏洞。
2、解析调用漏洞绕过
绕过这类漏洞直接配合上传一个代码注入过的非法黑名单即可,再利用解析调用漏洞。
3、.htaccess文件攻击
通过一个.htaccess文件调用php的解析器去解析一个文件名中只要包含“haha”这个字符串中的任意文件,所以无论文件名是什么样子,只要包含“haha”这个字符串都可以被以php的方式来解析,一个自定义的.htaccess文件就可以以各种各样的方式去绕过很多上传验证机制,建一个.htaccess文件,里面的内容如下:
SetHandler application/x-httpd-php
同目录有个我们上传一个只有文件名并包含“haha”,但是去污任何扩展名的文件里面的内容就是php的一句话木马
双文件上传
南方、良精、动易、、、
抓包,将文件内容在复制一遍,改一下复制后的文件名称防止重复,GO以下
服务端检测绕过(文件内容检测)
如果文件内容检测设置的比较严格,那么上传攻击将变得非常困难,也可以说他是代码层检测的最后一关,如果他被突破了,九岁没有代码层漏洞也可以给后面的利用应用层的解析漏洞带来机会。
绕过检测文件头
主要是检测文件的内容开始处的文件头,比如图片类型的文件头如下,要绕过jpg文件头检测就要在文件开头写上以下的值:
value=FF D8 FF E0 00 10 4A 46 49 46
要绕过GIF文件头检测就要在文件头写上下面的值
value=47 49 46 38 39 61
要绕过png文件头检测就要在文件开头加上下面的值
value=89 50 4E 47
然后在文件头的后面加上自己的一句话木马就可以了。
文件相关信息检测
图像文件相关信息检测常用的是getimagesize()函数,只需要把文件头部分伪造好就ok了,就是在头部的基础上还加了一些文件信息:
GIF89a
(…some bingary data for image..)
(…skipping the rest of binary data..)
这是最终形态的检测,一般是条用API或函数去进行文件加载检测,常见的是图像渲染测试,在变态点的甚至进行二次渲染,对渲染加载测试的攻击方式是代码注入绕过,对二次渲染的攻击方式是攻击文件加载器自身。
对渲染加载测试攻击注入:可以用图像处理软件对一张图片进行代码注入,用winhex看数据可以分析出这类工具的与阿尼是不在破坏文件本身的渲染情况下找一个空白区域进行填充代码,一般会在文件的注释去,对于渲染测试基本上都能绕过,毕竟文件本身是完整的。
绕过二次渲染(保留图片的正常内容,去掉其他代码)
通过上传不完整的图片让其渲染函数暴露,然后进行攻击。
第二种方法
对文件加载器进行溢出攻击
表单提交按钮
有时候扫出的上传页面,只存在浏览选项,条件按钮没有的,这时候就可以自己写一个。
在HTML编辑中写入以下的代码:
然后上传。
2019-05-11 15:17:45