淘先锋技术网

首页 1 2 3 4 5 6 7

Web中间件常见漏洞

一、IIS中间组件

1、PUT漏洞

我们常见的中间件有apache,tomcat,IIS,weblogic(其实就是web容器),这些中间件可以设置支持的HTTP方法。每一个HTTP方法都有其对应的功能,在这些方法中,PUT可以直接从客户机上传文件到服务器。如果中间件开放了HTTP中的PUT方法,那么恶意攻击者就可以直接上传webshell到对应的服务器上。

原理:IIS Server在Web服务扩展中开启WebDAV ,配置写入权限时,会导致HTTP支持PUT相关方法,导致IIS上传漏洞,用户可以向指定目录上传任意文件。

漏洞复现:开启WebDAV和写入权限;利用BurpSute测试:BurpSute抓包,将GET请求改为OPTIONS;利用写入权限:成功上传;再上传一句话木马,然后用菜刀连接,获取getshell。

验证漏洞是否存在:使用HTTP协议中的OPTIONS请求方法,会在返回的 Allow 消息头中,包含 PUT,MOVE,COPY 可能存在IIS PUT上传漏洞。

PUT漏洞修复:关闭WebDAV和写入权限.

2、短文件名猜解

原理:IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。

成因:为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3短文件名。
在Windows下查看对应的短文件名,可以使用命令dir /x

利用:此漏洞可以得到网站每个目录下文件的前 6 位字符,其利用价值体现在:

  1. 猜解网站的后台地址。

  2. 猜解敏感文件,例如网站备份的.rar、.zip、.bak、.sql 文件等。

  3. 获取很多爬虫爬不到的未授权访问页面、获取 WebService 接口地址,从这些未授权访问页面中进而发现更多漏洞,如 SQL 注入漏洞、上传漏洞等。

漏洞复现:使用python脚本直接猜解

修复:1.首先,在计算机中使用组合键“win+R”运行“Regedit”,打开注册表;

2.进入到注册表页面后,在列表中依次打开以下目录的FileSystem文件;

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

3.FileSystem文件打开后,将文件的NtfsDisable8dot3NameCreation值修改为1;

4.最后,NtfsDisable8dot3NameCreation修改好后,重启计算机即可;

3、远程代码执行

原理:在IIS6.0处理PROPFIND指令的时候,调用memcpy函数时,由于对url的长度没有进行有效的长度控制和检查,引发栈溢出,从而导致远程代码执行。

利用:Windows server 2003 R2版本IIS6.0的WebDAV服务中的ScStorgPathFromUrl函数存在缓冲区溢出漏洞,远程攻击者通过以“if:<http://"开头的长header PROPFIND请求,执行任意代码。

4、解析漏洞

原理:IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。

(1)当建立*.asa、*.asp格式的文件夹时,其目录下的任意文件都将被IIS当做asp文件解析。

(2)当文件*.asp:1.jpg IIS6.0同样会将文件当做asp文件解析。

验证漏洞是否存在:使用HTTP协议中的OPTIONS请求方法,会在返回的 Allow 消息头中,包含 PUT,MOVE,COPY 可能存在IIS PUT上传漏洞。

  1. IIS 6.0

    利用方式:①/test.asp/test.jpg②test.asp;.jpg

    漏洞复现:

    • 利用方式1:第一种是新建名为 “test.asp”目录,该目录中的任何文件都被IIS当作asp程序执行,特殊符号是 “/”:

    • 利用方式2:第二种是上传名为 “test.asp;.jpg” 的文件,虽然该文件真正的后缀名是 “.jpg”, 但由于含有特殊符号 “;” ,仍会被 IIS 当做asp程序执行

    修复:限制上传目录执行权限,不允许执行脚本。不允许新建目录。上传的文件经过重命名

  2. IIS7.5 文件解析漏洞

    原理:在Fast-CGI运行模式下,会将/xx.jpg/xx.php 解析为 php 文件。

    利用方式:test.jpg/.php

    文件解析漏洞修复:①配置cgi.pathinfo(php.ini中)为0并重启php-cgi程序;②在”Handler Mapping”勾选php-cgi.exe程序的”Invoke handler only if request is mapped to”;③重新配置iis,使用ISAPI的方式(注意:PHP5.3.1已经不支持ISAPI方式)。

二、Apache中间组件:

1、解析漏洞

原理:Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别,则继续向左识别。直到遇到合法后缀。

成因:为了使apache服务器能解析php,添加了AddType,将给定的文件扩展名映射到指定的内容类型,为了让apache把php文件交给php_module解析。

修复:将AddHandler application/x-httpd-php .php配置文件删除.

2、目录遍历

原理:没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。这里的目录跳转符可以是../,也可是../ASCII编码或者unicode编码等。

目录遍历的标志Index of /

修复:修改apache配置文件httpd.conf,找到Options+Indexes+FollowSymLinks +ExecCGI并修改成 Options-Indexes+FollowSymLinks +ExecCGI 并保存

三、Nginx中间组件:

1、文件解析

原理:Nginx实际上是PHP CGI解析漏洞,在PHP配置文件中有一个关键选项cgi.fi:x_pathinfo,一般是默认开启的,所以解析到不存在的文件时,PHP会向前递归解析,于是造成了解析漏洞。

利用:对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加test.jpg/x.php进行解析攻击

漏洞复现:在网站根目录下新建一个i.gif的文件,在里面写入phpinfo(),在浏览器中打开测试;利用文件解析漏洞,输入192.168.139.129:100/i.gif.2.php,发现无法解析;将/etc/php5/fpm/pool.d/www.conf中security.limit_extensions = .php中.php删除,再次在浏览器中打开,成功解析。

漏洞修复:①将php.ini文件中的cgi.fix_pathinfo的值设为0.这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404;②将/etc/php5/fpm/pool.d/www.conf中security.limit_ectensions后面的值设为.php.

2、目录遍历

原理:Nginx目录遍历与Apache一样,属于配置方面的问题,错误的配置可到导致目录遍历与源码泄露

漏洞复现:打开test目录,发现无法打开;修改/etc/nginx/sites-avaliable/default,添加autoindex on/;再次访问;

目录漏洞修复:将/etc/nginx/sites-avaliable/default里的autoindex on改为autoindex off.

3、CRLF注入

原理:CRLF是“回车+换行”(\r\n)键的简称,HTTP Header与HTTP Body时用两个CRLF分隔的,浏览器根据两个CRLF来取出HTTP内容并显示出来,通过控制HTTP消息头中的字符,注入恶意换行,就能注入一些会话cookie或者html代码

成因:由于Nginx配置不正确,导致注入的代码会被执行,

漏洞复现:访问页面,Brup抓包,请求加上:/%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>,由于页面重定向,并没有弹窗

漏洞修复:Nginx的配置文件/etc/nginx/conf.d/error1.conf修改为使用不解码的url跳转.

4、目录穿越

原理:Nginx反向代理,静态文件存储在/home/下,而访问时需要在url中输入files,配置文件中/files没有用/闭合,导致可以穿越至上层目录。

漏洞复现:访问:http://192.168.139.128:8081/files/,目录穿越漏洞,访问:http://192.168.139.128:8081/files…/,成功实现目录穿越。

目录穿越漏洞修复:Nginx配置文件/etc/nginx/conf.d/error2.conf的/files使用/闭合。

四、Tomcat中间组件:

1、远程代码执行

原理:当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生。(需要允许put请求)

利用:Tomcat运行在Windows主机上,且启用了 HTTP PUT请求方法,可通过构造的攻击请求向服务器上传包含任意代码JSP文件,造成任意代码执行。

漏洞复现:配置漏洞,开启put方法可上传文件功能,Tomcat文件夹下的/conf/web.xml文件插入:

<init-param>
   <param-name>readonly</param-name>
   <param-value>false</param-value>
</init-param>

重启Tomcat服务;访问127.0.0.1:8080,BurpSute抓包,send to Repeater选项重放模块,将请求方式改为PUT,创建一个122.jsp,并用%20转义空格字符,123.jsp代码:

<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>

返回201(请求成功并且服务器创建了新的资源),说明创建成功;访问127.0.0.1:8080/122.jsp?cmd=calc,弹出计算器。

远程代码执行漏洞修复:1.检测当前版本是否在影响范围内,并禁用PUT方法;2.更新并升级至最新版.

2、war后门文件部署

成因:Tomcat支持在后台部署war文件,可以直接将webshell部署到web目录下。若后台管理页面存在弱口令,则可以通过爆破获取密码,然后进入后台部署war包。

漏洞复现:爆破获取密码;访问后台,登陆,上传一个war包jsp后门;成功上传并解析,打开;可执行系统命令。

漏洞修复:①在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限,例如不允许远程登录;②增加对于本地和基于证书的身份验证,部署账户锁定机制,对于集中式认证,目录服务也要做相应配置,在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制;③以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制;④后台管理避免弱口令.

五、jBoss中间组件:

1、反序列化漏洞

原理:Java序列化,简而言之就是把java对象转化为字节序列的过程。而反序列话则是再把字节序列恢复为java对象的过程,然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现。

漏洞复现:靶机启动jboss,攻击机访问靶机服务:访问/invoker/readonly,返回500,说明页面存在,此页面有反序列化漏洞;BrupSute抓包,改包,修改POST payload.bin中数据;查看靶机,弹出计算器。

漏洞修复:1.不需要http-invoker.sar 组件的用户可直接删除此组件;2.用于对httpinvoker组件进行访问控制.

2、war后门文件部署

原理:存在弱口令,Jboss 5.x/6.x admin-console和web-console的账号密码是一样的。因此当web-console无法部署war包时,可以使用admin-console来部署。前提是先得到账号密码。

漏洞复现:先创建jsp木马的war包:建一个shell.jsp,在此打开cmd输入命令:jar cvf shell.warshell.jsp。爆破密码进入后台,在Web Application (WAR)->Add New Web Application (WAR)直接上传后门文件。上传后进入war包,点击start,显示status为success说明成功。访问war包页面,进入后台,可进行文件管理和系统命令执行。

漏洞修复:设置高强度口令。(密码保存在jboss/server/default/conf/props/jmx-console-users.properties

六、WebLogic中间组件:

1、反序列化漏洞

补充:T3、IIOP 协议用于在 WebLogic 和其他 Java 程序之间传输数据。Weblogic控制台开启的情况下默认开启 T3 协议,而Weblogic默认安装会自动开启控制台。IIOP 协议以 Java 接口的形式对远程对象进行访问,默认是在启用状态。

  1. XMLDecoder(CVE-2017-10271)
  • 原理:Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
  • 漏洞验证:访问 /wls-wsat/CoordinatorPortType ,看回显页面;在wls-wsat包中,web.xml文件里的url均受影响
  • 复现:burp抓包,改包(包头得加上Content-type:text/xml);改成一句话木马(由于<和&在xml是非法的,所以得加上<![CDATA[ ]]>)<![CDATA[<% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>]]>。访问/xd1.jsp?pwd=023&i=whoami
  • 防御:官网打补丁(补丁过滤了new,method标签,且void后面只能跟index,array后面只能跟byte类型的class)
  1. XMLDecoder(CVE-2017-3506)
  • 与CVE-2017-3506原理一样,防御后增加了验证函数,验证Payload中的节点是否存在object Tag。CVE-2017-3506绕过了此函数。
  • 补丁过滤了object
  1. wls-wsat远程代码执行漏洞(CVE-2019-2725)
  • 分析:此漏洞实际上是CVE-2017-10271的又一入口,CVE-2017-3506的补丁过滤了object;CVE-2017-10271的补丁过滤了new,method标签,且void后面只能跟index,array后面只能跟byte类型的class;CVE-2019-2725的补丁过滤了class,限制了array标签中的byte长度。
  • 漏洞验证:访问 /_async/AsyncResponseService(/wls-wsat),返回200则存在。
  1. T3协议命令执行实现反序列化(CVE-2018-2628)
  • 原理:T3协议缺陷实现了Java虚拟机的远程方法调用(RMI),能够在本地虚拟机上调用远端代码。通过 JRMP 协议达到执行任意反序列化 payload 的目的。

    T3协议:
    用于在Weblogic服务器和其他类型的Java程序之间传输信息的协议。Weblogic会跟踪连接到应用程序的每个Java虚拟机,要将流量传输到Java虚拟机,Weblogic会创建一个T3连接。该链接会通过消除在网络之间的多个协议来最大化效率,从而使用较少的操作系统资源。用于T3连接的协议还可以最大限度减少数据包大小,提高传输速度。
    RMI:
    远程方法调用,除了该对象本身的虚拟机,其它的虚拟机也可以调用该对象的方法。(对象的虚拟化和反序列化广泛应用到RMI和网络传输中)
    JRMP:
    Java远程消息交换协议JRMP
    
  • 利用/验证
    poc、exp:https://github.com/jas502n/CVE-2018-2628
    python CVE-2018-2628-poc.py 192.168.50.167 7001(py2)

  • 防御:过滤T3协议,选择安全->筛选器,填入weblogic.security.net.ConnectionFilterImpl,最后保存重启即可。

  1. IIOP(CVE-2020-2551)
  • 原理:类似于RMI反序列化漏洞(CVE-2017-3241),和之前的T3协议所引发的一系列反序列化漏洞也很相似,都是由于调用远程对象的实现存在缺陷,导致序列化对象可以任意构造,并没有进行安全检查所导致的。

    IIOP: CORBA对象之间交流的协议,传输层为TCP/IP。它提供了CORBA客户端和服务端之间通信的标准。

    CORBA: (公共对象请求代理体系结构)是由OMG(Object Management Group)组织制定的一种标准分布式对象结构。使用平台无关的语言IDL(interface definition language)描述连接到远程对象的接口,然后将其映射到制定的语言实现。

  • 利用分析:JtaTransactionManager类是不在黑名单列表里面的,它的父类才在黑名单列表里面,这样就可以反序列化JtaTransactionManager类了,而JtaTransactionManager类是存在jndi注入的。

2、SSRF

原理:比如有一个jsp页面,我们可以利用它进行攻击,未经授权通过weblogic server连接任意主机的任意TCP 端口,可以能冗长的响应来推断在此端口上是否有服务在监听此端口,进而攻击内网中redis、fastcgi等

成因:weblogic既可以被外部主机访问,同时也允许访问内部主机。

利用:Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。

漏洞验证:访问该路径存在则说明有漏洞 /uddiexplorer/SearchPublicRegistries.jsp

漏洞修复:1.将SearchPublicRegistries.jsp直接删除;2.删除uddiexplorer文件夹、限制uddiexplorer应用只能内网访问;3.将weblogic安装目录wlserver_10.3/server/lib/uddiexplorer.war做好备份、将weblogic安装目录下的server/lib/uddiexplorer.war下载、用winrar等工具打开uddiexplorer.war、将其下的SearchPublicRegistries.jsp重命名为SearchPublicRegistries.jspx、保存后上传回服务端替换原先的uddiexplorer.war、对于多台主机组成的集群,针对每台主机都要做这样的操作、由于每个server的tmp目录下都有缓存所以修改后要彻底重启weblogic(即停应用–停server–停控制台–启控制台–启server–启应用).

3、任意文件上传

原理:Weblogic管理端未授权的两个页面存在任意文件上传漏洞,通过这两个页面可以获取到服务器权限。这两个页面分别是/ws_utc/begin.do,/ws_utc/config.do。利用这两个页面可以上传任意jsp文件,从而获取到服务器权限。

分析:weblogic如果设定了新的工作目录,那么程序会自动拷贝所有旧目录下的子目录和文件到新的设定目里,并且设定新的目录作为工作目录。如果攻击者通过begin.do上传的话,Weblogic在服务端会判断有没有upload目录,如果不存在会自动创建,再接着在upload目录下创建Rs_Upload_格式化后的作为目录名,紧接着获取到import_file_name字段名作为后续的文件名拼接的一部分;如果通过config.do上传的话就获取GET请求中的timestamp参数作为后续webshell的文件名中的一部分。

复现:首先访问一下 http://IP/ws_utc/config.do 并且将默认的目录WSTestPageWorkDir修改了为 user_projects\domains\base_domain\tmp\sd\,点击安全进行上传。上传一个一句话木马文件;使用burpsuite抓包,上传,得到返回的数据包中的时间戳;连接路径为http://you-ip/ws_utc/css/config/keystore/[时间戳]_[文件名] ,访问文件成功;使用蚁剑连接php文件,连接成功。

4、war后门文件部署

漏洞原理:后台存在弱口令或默认用户名/口令

利用:爆破密码进入后台,部署安装,上传war包。