Web中间件漏洞总结

Web中间件常见漏洞总结

一、IIS中间组件:

IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

IIS的安全脆弱性曾长时间被业内诟病,一旦IIS出现远程执行漏洞威胁将会非常严重。远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以导致IIS服务器所在机器蓝屏或读取其内存中的机密数据

1、PUT漏洞

漏洞介绍及成因

IIS Server 在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,造成任意文件上传。

版本: IIS6.0

漏洞复现

1) 开启WebDAV 和写权限

在这里插入图片描述

在这里插入图片描述

2) 利用burp测试

抓包,将GET请求改为OPTIONS

在这里插入图片描述

修复建议
关闭WebDAV 和 写权限

2、短文件名猜解

漏洞介绍及成因

Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。在cmd下输入"dir /x"即可看到短文件名的效果。

在这里插入图片描述

IIS短文件名产生:

1.当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。

2.当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。

目前IIS支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六种。 IIS 8.0之后的版本只能通过OPTIONS和TRACE方法被猜测成功。

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

漏洞复现

IIS8.0以下版本需要开启ASP.NET支持,IIS大于等于8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功。 以下通过开启IIS6.0 ASP.NET后进行复现。

1)、在网站根目录下添加aaaaaaaaaa.html文件

在这里插入图片描述

2) 进行猜解

在这里插入图片描述

IIS短文件漏洞局限性:

  1. 如果文件名本身太短也是无法猜解的;

  2. 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解;

  3. 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;

  4. 如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报;

  5. 不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测。

IIS短文件利用工具:https://github.com/irsdl/IIS-ShortName-Scanner

修复建议

1)从CMD命令关闭NTFS 8.3文件格式的支持
Windows Server 2003: (1代表关闭,0代表开启) 关闭该功能:fsutil behavior set disable8dot3 1

Windows Server 2008 R2:查询是否开启短文件名功能:fsutil 8dot3name query

关闭该功能:fsutil 8dot3name set 1
不同系统关闭命令稍有区别,该功能默认是开启的.
2)或从修改注册表关闭NTFS 8.3文件格式的支持
快捷键Win+R打开命令窗口,输入regedit打开注册表窗口
找到路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,1代表不创建短文件名格式

以上两种方式修改完成后,均需要重启系统生效。
Note:此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失。 例:将web文件夹的内容拷贝到另一个位置,如c:\www到c:\ww,然后删除原文件夹,再重命名c:\ww到c:\www。

3、远程代码执行

IIS6.0 远程代码执行漏洞 CVE-2017-7269

漏洞介绍及成因

在Windows Server 2003的IIS6.0的WebDAV服务的ScStoragePathFromUrl函数存在缓存区溢出漏洞,攻击者通过一个以"If: <http://"开始的较长header头的PROPFIND请求执行任意代码,控制目标主机。

漏洞复现

IIS6.0开启WebDAV服务扩展:

在这里插入图片描述

使用IISPutScanner工具扫描目标地址:

在这里插入图片描述

发现目标存在WebDAV远程代码执行漏洞,使用网上公开的利用工具复现漏洞

批量检测脚本: https://github.com/admintony/Windows-Exploit/tree/master/IIS6_WebDAV_Scanner

修复方案

关闭WebDAV服务扩展

4、解析漏洞

4.1、IIS6.0 解析漏洞

漏洞介绍及成因

基于文件名

IIS6.0默认不解析;号后面的内容,例如1.asp;.jpg会当成1.asp解析,相当于分号截断。

基于文件夹

IIS6.0会将/*.asp/文件夹下的文件当成asp解析。

另外,IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp,从网站属性->主目录->配置 可以看出,他们都是调用了asp.dll进行的解析。

修复方案

由于微软并不认为这是一个漏洞,也没有推出相关的修复补丁,因此我们需要自己设置:

  1. 取消网站目录脚本执行权限

  2. 禁止创建文件夹

  3. 重命名上传文件为时间戳+.jpg或随机数+.jpg等

4.2、IIS7.0/7.5 解析漏洞

漏洞介绍及成因

IIS7.*在FastCGI运行php的情况下,php默认配置cgi.fix_pathinfo=1,导致在任意文件后面添加/.php,服务器就会解析成php。

IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。

修复建议

配置cgi.fix_pathinfo(php.ini中)为0并重启php-cgi程序

二、Apache中间组件:

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

1、解析漏洞

1.1、未知扩展名解析漏洞

漏洞介绍及成因

Apache的解析漏洞依赖于一个特性: Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在mime.types文件),则继续向左识别,直到识别到合法后缀才进行解析

漏洞复现

使用phpstudy进行复现

创建文件phpinfo.php.xxx

在这里插入图片描述

修改后缀名为.php.txt

在这里插入图片描述

实战中可以上传rar,owf等文件进行利用,如果上传phpinfo.php.jpg,即使文件名中有.php,也会直接解析为jpg。因为Apache认识.jpg,停止继续向左识别。

1.2、AddHandler导致的解析漏洞

漏洞介绍及成因

如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀。 利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

漏洞复现

在这里插入图片描述

即使最右边的文件格式是在mime.types文件内,只要文件名中出现.php,就直接被解析为php。

修复建议

将AddHandler application/x-httpd-php .php的配置文件删除。

1.3、Apache HTTPD 换行解析漏洞

漏洞介绍及成因

影响范围:2.4.0~2.4.29版本

环境:phpstudy2014 Apache + PHP5.4n
此漏洞形成的根本原因,在于 , 正 则 表 达 式 中 , 正则表达式中 ,不仅匹配字符串结尾位置,也可以匹配\n 或 \r
在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

漏洞复现

<FilesMatch \.php$>
    SetHandler application/x-httpd-php 
</FilesMatch>

测试代码:

<html>
 <body>
    <form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="text" name="name" />
    <input type="submit" value="上传文件" />
    </form>
 </body> 
</html>

<?php 
if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file'); 
   } 
echo "ok"; 
   move_uploaded_file($_FILES['file']['tmp_name'], './' . $name); 
}
 ?>

在这里插入图片描述

在这里插入图片描述

点击Go后,测试成功。

限制:获取文件名时不能用$_FILES[‘file’][‘name’],因为它会自动把换行去掉。

修复建议

  1. 升级到最新版本

  2. 或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限

2、目录遍历

漏洞介绍及成因

由于配置错误导致的目录遍历

漏洞复现

在这里插入图片描述

修复建议

修改apache配置文件httpd.conf

找到Options+Indexes+FollowSymLinks +ExecCGI并修改成 Options-Indexes+FollowSymLinks +ExecCGI 并保存;

三、Nginx中间组件:

Nginx 是一款 轻量级的 Web 服务器、 反向代理 服务器及 电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少, 并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

1、文件解析

漏洞介绍及成因

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

漏洞复现

在网站根目录下新建一个n.jpg的文件,在里面写入<?php phpinfo();?>

在浏览器中打开

在这里插入图片描述

利用文件解析漏洞,输入192.168.220.129/n.jpg/2.php,解析成功

在这里插入图片描述

修复建议

将php.ini文件中的cgi.fix_pathinfo的值设为0.这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404;

2、目录遍历

漏洞简介及成因

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

当Nginx配置文件中,autoindex 的值为on时,将造成一个目录遍历漏洞。

漏洞复现

在这里插入图片描述

在这里插入图片描述

修复建议

将autoindex 的值为置为off。

3、CRLF注入

漏洞简介及成因

CRLF时“回车+换行”(\r\n)的简称。

HTTP Header与HTTP Body时用两个CRLF分隔的,浏览器根据两个CRLF来取出HTTP内容并显示出来。

通过控制HTTP消息头中的字符,注入一些恶意的换行,就能注入一些会话cookie或者html代码,由于Nginx配置不正确,导致注入的代码会被执行。

漏洞复现

访问页面,抓包

请求加上/%0d%0a%0d%0a<img src=1 οnerrοr=alert(/xss/)>

出现弹窗

修复建议

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

4、目录穿越

漏洞简介及成因

Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。
错误的配置文件示例(原本的目的是为了让用户访问到C:/WWW/home/目录下的文件):

漏洞复现

location /files {
    autoindex on;
    alias c:/WWW/home/;
 }

访问:http://127.0.0.1/file../

在这里插入图片描述

修复建议

只需要保证location和alias的值都有后缀/或都没有/这个后缀。

四、Tomcat中间组件:

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用 服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应 HTML ( 标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

1、远程代码执行

漏洞简介及成因

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

影响版本: Apache Tomcat 7.0.0 – 7.0.81

漏洞复现

配置漏洞,开启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,burp抓包,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、弱口令 && 后台getshell漏洞

漏洞简介及成因

Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下。

若后台管理页面存在弱口令,则可以通过爆破获取密码。

漏洞修复

1)在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。

2)增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。

3)以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。

4)后台管理避免弱口令。

五、jBoss中间组件:

jBoss是一个基于J2EE的开发源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

1、反序列化漏洞

漏洞介绍及成因

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

漏洞复现

靶机启动jboss。

攻击机访问靶机服务,访问url/invoker/readonly

返回500,说明页面存在,此页面有反序列化漏洞:

可以使用burpsuite抓包进行反序列化攻击

漏洞修复

有效解决方案:升级到JBOSS AS7版本临时解决方案:

1)不需要http-invoker.sar 组件的用户可直接删除此组件;

2)用于对 httpinvoker 组件进行访问控制。

2、war后门文件部署

漏洞介绍及成因

jBoss后台管理页面存在弱口令,通过爆破获得账号密码。登陆后台上传包含后门的war包。

3、JMX Console未授权访问

漏洞介绍及成因

JMX Console默认存在未授权访问,直接点击JBoss主页中的JMX Console链接进入JMX Console页面

漏洞修复

1、增加密码措施,防止未授权访问。

2、或删除JMX Console,后重启JBoss

C:\jboss-6.1.0.Final\common\deploy\jmx-console.war

六、WebLogic中间组件:

WebLogic是美国Oracle公司出品的一个applicationserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

1、反序列化漏洞

漏洞简介及成因

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

漏洞复现

使用vulhub实验环境,启动实验环境,访问靶机,抓包,修改数据包。

在这里插入图片描述

Kali启动监听。

发送数据包成功后,拿到shell。

漏洞修复

1)升级Oracle 10月份补丁。

2)对访问wls-wsat的资源进行访问控制。

2、SSRF

漏洞简介及成因

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

漏洞复现

使用vulhub实验环境,启动环境。

访问http://192.168.139.129:7001/uddiexplorer/SearchPublicRegistries.jsp

用burp抓包,修改请求。

启动nc监听端口。拿到shell。

漏洞修复

方法一:

以修复的直接方法是将SearchPublicRegistries.jsp直接删除就好了;

方法二:

1)删除uddiexplorer文件夹

2)限制uddiexplorer应用只能内网访问

方法三:(常用)

Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),更准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp。方法二采用的是改后辍的方式,修复步骤如下:

1)将weblogic安装目录下的wlserver_10.3/server/lib/uddiexplorer.war做好备份

2)将weblogic安装目录下的server/lib/uddiexplorer.war下载

3)用winrar等工具打开uddiexplorer.war

4)将其下的SearchPublicRegistries.jsp重命名为SearchPublicRegistries.jspx

5)保存后上传回服务端替换原先的uddiexplorer.war

6)对于多台主机组成的集群,针对每台主机都要做这样的操作

7)由于每个server的tmp目录下都有缓存所以修改后要彻底重启weblogic(即停应用–停server–停控制台–启控制台–启server–启应用)

3、任意文件上传

漏洞简介及成因

通过访问config.do配置页面,先更改Work Home工作目录,用有效的已部署的Web应用目录替换默认的存储JKS Keystores文件的目录,之后使用”添加Keystore设置”的功能,可上传恶意的JSP脚本文件。

漏洞复现

访问http://192.168.139.129:7001/ws_utc/config.do

设置Work Home Dir为/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css

然后点击安全 -> 增加,然后上传 webshell ,这里我上传一个 jsp 大马。

上传后,查看返回的数据包,其中有时间戳:

可以看到时间戳为1543145154632。

访问http://192.168.139.129:7001/ws_utc/css/config/keystore/1543145154632_lele.jsp

可以进行文件管理、文件上传、系统命令执行等。

漏洞修复

方案1:使用Oracle官方通告中的补丁链接

方案2:

1)进入Weblogic Server管理控制台;

2)domain设置中,启用”生产模式”。

4、弱口令&& 后台getshell

漏洞简介及成因

由于WebLogic后台存在弱口令,可直接登陆后台上传包含后门的war包。

漏洞修复

防火墙设置端口过滤,也可以设置只允许访问后台的IP列表,避免后台弱口令。

七、其它中间件相关漏洞

1、FastCGI未授权访问、任意命令执行

漏洞简介及成因

服务端使用fastcgi协议并对外网开放9000端口,可以构造fastcgi协议包内容,实现未授权访问服务端.php文件以及执行任意命令。

漏洞复现

使用vulhub实验环境,启动实验环境。

在攻击机使用命令python fpm.py 192.168.237.136 /etc/passwd,观察返回结果。

由于访问非*.PHP文件,所以返回结果403。

使用命令执行一个默认存在的 php 文件。

python fpm.py 192.168.237.136 /usr/local/lib/php/PEAR.php

利用命令进行任意命令执行复现。

python fpm.py 192.168.139.129 /usr/local/lib/php/PEAR.php-c '<?php echo `pwd`; ?>'

漏洞修复

更改默认端口

2、PHPCGI远程代码执行

漏洞简介及成因

在apache调用php解释器解释.php文件时,会将url参数传我给php解释器,如果在url后加传命令行开关(例如-s、-d 、-c或-dauto_prepend_file%3d/etc/passwd±n)等参数时,会导致源代码泄露和任意代码执行。

此漏洞影响php-5.3.12以前的版本,mod方式、fpm方式不受影响。

漏洞复现

使用vulhub实验环境,启动环境。

访问http://192.168.139.129:8080/index.php

抓包,修改包。

在这里插入图片描述

漏洞修复

三种方法:

1)升级php版本;(php-5.3.12以上版本);

2)在apache上做文章,开启url过滤,把危险的命令行参数给过滤掉,由于这种方法修补比较简单,采用比较多吧。

具体做法:

修改http.conf文件,找到增加以下三行

RewriteEngine on

RewriteCond %{QUERY_STRING} (%2d|-)[=]+$ [NC]

RewriteRule ^(.*) $1? [L]

重启一下apache即可,但是要考虑到,相当于每次request就要进行一次url过滤,如果访问量大的话,可能会增加apache的负担。

end_file%3d/etc/passwd±n)等参数时,会导致源代码泄露和任意代码执行。

此漏洞影响php-5.3.12以前的版本,mod方式、fpm方式不受影响。

posted @ 2022-07-06 18:24  爱吃_白菜  阅读(373)  评论(0编辑  收藏  举报