一、IIS 5.x/6.0解析漏洞(03)
IIS 6.0解析利用方法有两种
1.目录解析
/xx.asp/xx.jpg
在网站下简历文件夹为.asp、.asa的文件夹,其目录内的任何文件扩展名的文件都会被IIS当做asp文件来执行
例如目录 hahaha.asp,那么/hahaha.asp/1.jpg 一个jpg格式的文件就会被当做asp脚本文件来解析执行,假设黑客可以控制问上传文件的文件夹路径,就可以绕过上传格式拿到shell
一般目录解析漏洞跟编辑器搭配利用,比如ckfinder,fck编辑器,都是可以创建目录的。
2.文件解析(;)
hahaha.asp;.jpg
在IIS6.0下,分号后面的不被解析,也就是说hahaha.asp;.jpg会被服务器看成是hahaha.asp
3.畸形后缀名解析
IIS6.0 默认的可执行文件除了asp还包含这三种(特定的情况下被解析):
二、IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞
Nginx解析漏洞这个伟大的漏洞是我国安全组织80sec发现的…
在默认Fast-CGI开启状况下,黑阔上传一个名字为hahaha.jpg,内容为: ');?>的文件,然后访问hahaha.jpg/.php,在这个目录下就会生成一句话木马 shell.php。(这个漏洞貌似不是容器的漏洞,而是php的漏洞,因为不止IIS7,0/7.5才有,甚至10.0也有出现)
三、Nginx <8.03 空字节代码执行漏洞
影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
Nginx在图片中嵌入PHP代码然后通过访问
xxx.jpg.php
来执行其中的代码
四、Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
比如 hahaha.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把hahaha.php.owf.rar解析成php.
如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个hahaha.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀
五、其他
在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell。
如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
SetHandler application/x-httpd-php
然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
原因:
1 对于上传文件的后缀名(扩展名)没有做较为严格的限制
2 对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查
3 权限上没有对于上传的文件目录设置不可执行权限,(尤其是对于shebang类型的文件)
4 对于web server对于上传文件或者指定目录的行为没有做限制
if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif'){
return true;
}else{
alert("不允许的文件类型!")
当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名。
绕过方式:
1.绕过前台脚本检测扩展名,就是将所要上传文件的扩展名更改为符合脚本检测规则的扩展名,通过BurpSuite工具,截取数据包,并将数据包中文件扩展名更改回原来的,达到绕过的目的。
例如:文件名本来为【evil.jpg】,上传时,用BurpSuite截包后,将数据包中的名字改为【evil.php】(或其它脚本类型)即可。
2.如果是JS脚本检测,在本地浏览器客户端禁用JS即可。可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现。
if($postfix=='php'||$postfix=='asp'||$postfix=='sh'){
echo "invalid file type";
return;
}
在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传
绕过方式:
上面提到的解析漏洞进行绕过
HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的,服务端可以检查此类型不过这仍然是不安全的,因为HTTP header可以被发出者或者中间人任意的修改,不过加上一层防护也是可以有一定效果的
绕过方式:
用工具抓包修改http头绕过
这种检查方法是最变态的,你突破层层艰难险阻终于上传上去了,但是他竟然检查你的文件头,这里的文件头不是名字,而是每个类型的文件都有不同的头信息,每一个特定类型的文件都会有不太一样的开头或者标志位。
JPEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
绕过方式:
给上传脚本加上相应的幻数头字节就可以,php引擎会将 (一般不限制图片文件格式的时候使用GIF的头比较方便,因为全都是文本可打印字符。)