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短文件漏洞局限性:
-
如果文件名本身太短也是无法猜解的;
-
此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解;
-
如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配;
-
如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报;
-
不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过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进行的解析。
修复方案
由于微软并不认为这是一个漏洞,也没有推出相关的修复补丁,因此我们需要自己设置:
-
取消网站目录脚本执行权限
-
禁止创建文件夹
-
重命名上传文件为时间戳+.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’],因为它会自动把换行去掉。
修复建议
-
升级到最新版本
-
或将上传的文件重命名为为时间戳+随机数+.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方式不受影响。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义