Tomcat-Ajp协议漏洞分析

iso60001  1488天前

一、漏洞描述

Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。

Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码等。

二、漏洞危害等级

        高

三、影响版本

该文件包含漏洞影响以下版本:

  • 7.*分支7.0.100之前版本,建议更新到7.0.100版本;

  • 8.*分支8.5.51之前版本,建议更新到8.5.51版本;

  • 9.*分支9.0.31之前版本,建议更新到9.0.31版本。

四、漏洞原理

tomcat默认的conf/server.xm l中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。

如下图:


aa.png

tomcat在接收ajp请求的时候调用org.apache.coyote.ajp.AjpProcessor来处理ajp消息,prepareRequest将ajp里面的内容取出来设置成request对象的Attribute属性

如下图:


bb.png

因此可以通过此种特性从而可以控制request对象的下面三个Attribute属性

javax.servlet.include.request_uri

javax.servlet.include.path_info

javax.servlet.include.servlet_path

 

然后封装成对应的request之后,继续走servlet的映射流程如下图所示:


cc.png

其中具体的映射方式就简略了,具体可以自己查看代码.

五、两种利用方式:

1、利用DefaultServlet实现任意文件下载

当url请求未在映射的url列表里面则会通过tomcat默认的DefaultServlet会根据上面的三个属性来读取文件,如下图

dd.png

通过serveResource方法来获取资源文件

ee.png

通过getRelativePath来获取资源文件路径

ff.png

然后再通过控制ajp控制的上述三个属性来读取文件,通过操控上述三个属性从而可以读取到/WEB-INF下面的所有敏感文件,不限于class、xm l、jar等文件。

2、通过jspservlet实现任意后缀文件包含

当url(比如http://xxx/xxx/xxx.jsp)请求映射在org.apache.jasper.servlet.JspServlet这个servlet的时候也可通过上述三个属性来控制访问的jsp文件如下图:


gg.png

控制路径之后就可以以jsp解析该文件 所以只需要一个可控文件内容的文件即可实现rce.

六、利用成功截图


hh.png

七、解决方案

1、临时禁用AJP协议端口,在conf/server.xm l配置文件中注释掉<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />

2、配置ajp配置中的secretRequired跟secret属性来限制认证

3、官方下载最新版下载地址:

https://tomcat.apache.org/download-70.cgi

https://tomcat.apache.org/download-80.cgi

https://tomcat.apache.org/download-90.cgi

或Github下载:https://github.com/apache/tomcat/releases


八、AJP协议规范

详见https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html


◆来源:安恒信息安全研究院

◆本文版权归原作者所有,如有侵权请联系我们及时删除

最新评论

Jainh  :  2、配置ajp配置中的secretRequired跟secret属**来**认证&nbsp; &nbsp; &nbsp; 在server.xm l中配置之外,网站程序要处理吗? 还有请问下如何判断网站是否使用了Tomcat AJP协议?
1487天前 回复
LubyRuffy  :  默认会开8009端口
1487天前 回复
yuchengye  :  回复 @ LubyRuffy &nbsp;:&nbsp;&nbsp; **了这2个属**,但是apache转发不了了。报403
1487天前 回复
top_86  :  回复 @ yuchengye &nbsp;:&nbsp; &nbsp;配置了上面两个属**后,但是apache转发不了了。报403错误,问题解决了吗,我也遇到这样的问题,不知道怎么解决
1487天前 回复
小码农  :  回复 @ top_86 &nbsp;:&nbsp;&nbsp; 你们解决了没有啊
1485天前 回复
top_86  :  回复 @ 小**农 &nbsp;:&nbsp; &nbsp;我已经解决了。
1485天前 回复
小码农  :  回复 @ top_86 &nbsp;:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;您好,能不能告诉我怎么修改的呢,谢谢!
1485天前 回复
小码农  :  回复 @ top_86 &nbsp;:&nbsp; &nbsp;你好 你们是转**协议 还是修改apache配置的,apache 配置怎么修改呢
1485天前 回复
小码农  :  回复 @ top_86 &nbsp;:&nbsp; &nbsp;你好 你们是转**协议 还是修改apache配置的,apache 配置怎么修改呢
1485天前 回复
top_86  :  回复 @ 小**农 &nbsp;: 修改apache的workers.properties配置,详见**s://tomcat.apache.org/connectors-doc/reference/workers.html中secret的配置说明。配置举例:worker.router.secret=YOUR_TOMCAT_AJP_SECRET,跟tomcat中&lt;Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_**_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/&gt;
1485天前 回复
小码农  :  回复 @ top_86 &nbsp;:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;你好是在&nbsp;BalancerMember 连接后面添加这个吗?worker.router.secret=YOUR_TOMCAT_AJP_SECRE,菜鸟不懂 ,谢谢大神指教
1485天前 回复
top_86  :  回复 @ 小**农 &nbsp;:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如果是lb类型的配置到router上即可,否则要配置到具体的BalancerMember成员上。
1485天前 回复
小码农  :  回复 @ top_86 &nbsp;:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;我这么配置的报参数错误&nbsp;BalancerMember ajp://127.0.0.1:8080 load**ctor=1 route=tomcat-6-60-8087&nbsp; worker.router.secret=YOUR_TOMCAT_AJP_SECRE
1485天前 回复
消逝云散  :  回复 @ 小**农 &nbsp;: &nbsp; 有解决吗,我也配置不了
1482天前 回复
小码农  :  回复 @ 消逝云散 &nbsp;:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 上面大神指教修改修改apache的workers.properties配置,我没有这个配置文件,我妥协了,改成**了
1482天前 回复
消逝云散  :  回复 @ 小**农 &nbsp;: &nbsp; 能邮件联系下吗?603810224@qq.com ajp不行了吗?
1482天前 回复
小码农  :  回复 @ 消逝云散 &nbsp;:&nbsp; &nbsp;我放弃ajp了 我们修改为**协议了
1474天前 回复
小码农  :  回复 @ 消逝云散 &nbsp;:&nbsp; &nbsp;我放弃ajp了 我们修改为**协议了
1474天前 回复
fishboy  :  对sp**ngboot的内置tomcat有影响吗 怎么解决
1485天前 回复
小码农  :  无影响,
1485天前 回复
昵称
邮箱
提交评论