跳转到帖子

Kali 渗透工具实战:用 Nmap、proxychains 与 CrackMapExec 做授权内网资产验证

精选回复

发布于
ip route resolvectl status 2>/dev/null || cat /etc/resolv.conf ss -tunlp

重点看三项:

  • tun0 或 ppp0 是否存在;
  • 是否有到 10.10.20.0/24 的路由;
  • DNS 是否能解析内网域名,例如 dc01.corp.local。

2. 配置 proxychains4 仅用于需要走代理的工具

如果客户提供了 SOCKS5 跳板,例如 127.0.0.1:1080,可以修改 /etc/proxychains4.conf。建议使用 strict_chain,避免代理不可用时工具直接走本地出口。

sudo cp /etc/proxychains4.conf /etc/proxychains4.conf.bak
sudo sed -i 's/^dynamic_chain/#dynamic_chain/' /etc/proxychains4.conf
sudo sed -i 's/^#strict_chain/strict_chain/' /etc/proxychains4.conf

sudo tee -a /etc/proxychains4.conf >/dev/null <<'EOF'
socks5  127.0.0.1 1080
EOF

proxychains4 -q curl -I  --connect-timeout 5

如果这个测试失败,不要直接扩大扫描,应先确认跳板可达性、代理类型和目标 ACL。

3. Nmap 做低噪声资产发现

先做 Ping 探测和常见端口确认,不建议一上来 -A -p-。在内网蓝队有告警的环境里,大规模全端口扫描很容易产生误会。

mkdir -p ~/pentest-10.10.20/recon
cd ~/pentest-10.10.20/recon

# 存活探测:输出三种格式,便于后续处理
sudo nmap -sn 10.10.20.0/24 -oA alive_10.10.20

# 提取存活 IP
awk '/Nmap scan report/{print $NF}' alive_10.10.20.gnmap | tr -d '()' > alive_hosts.txt

# 常见端口快速识别
sudo nmap -sS -Pn --top-ports 100 --open -iL alive_hosts.txt -oA top100_open

# 对重点端口做服务识别
sudo nmap -sV -sC -Pn -p 22,80,135,139,389,443,445,3389,5985,5986 -iL alive_hosts.txt -oA svc_detail

这里的关键点:

  • -sn 仅做主机发现,适合第一轮摸底;
  • --top-ports 100 控制探测规模;
  • -sV -sC 只对重点端口做,减少噪声;
  • -oA 同时保存 normal、grepable、XML,方便报告和复盘。

代码/命令示例:从 Nmap 结果提取 SMB 目标

拿到服务识别结果后,可以从 grepable 文件里提取开放 445 的主机,作为 SMB 权限边界验证目标。

awk '/445\\/open/{print $2}' svc_detail.gnmap | sort -u > smb_hosts.txt
wc -l smb_hosts.txt
cat smb_hosts.txt

如果需要更稳一点,可以直接从 XML 转换,但在现场临时排查时,上面的方式足够快速。

使用 CrackMapExec 验证 SMB 凭据边界

假设客户提供了一个普通域账号 CORP\\audit.user,目标是验证它是否被错误加入本地管理员组,或是否能访问不该访问的共享。不要用大字典爆破生产域账号,这通常会触发锁定策略。

mkdir -p ~/pentest-10.10.20/cme
cd ~/pentest-10.10.20/cme

# 使用客户提供的授权账号做 SMB 登录验证
crackmapexec smb ../recon/smb_hosts.txt \\
  -d CORP \\
  -u audit.user \\
  -p 'ExamplePassword123!' \\
  --shares \\
  --continue-on-success \\
  | tee cme_smb_shares.log

# 检查是否具备本地管理员权限,注意仅做权限判断
crackmapexec smb ../recon/smb_hosts.txt \\
  -d CORP \\
  -u audit.user \\
  -p 'ExamplePassword123!' \\
  --local-auth \\
  | tee cme_smb_auth.log

结果里需要重点关注:

  • Pwn3d!:通常表示具备本地管理员权限,需要确认是否符合授权账号定位;
  • READ、WRITE:共享目录读写权限,特别是 SYSVOL、部门共享、备份目录;
  • 主机名、域名、操作系统版本:用于后续资产归属确认。

如果只需要检查共享权限,不建议加 --sam、--lsa、--ntds 这类高敏操作参数,除非授权文件明确允许。

日志留痕与排查方法

授权测试最好从一开始就保留命令输出。除了工具自身输出,还可以用 script 记录终端会话。

mkdir -p ~/pentest-10.10.20/logs
script -af ~/pentest-10.10.20/logs/session_$(date +%F_%H%M).log

# 测试完成后输入 exit 结束录制
exit

Windows 侧常见可关联日志:

  • 4624:成功登录,关注 Logon Type 3,来源 IP 为 Kali 或跳板;
  • 4625:失败登录,若数量过多说明认证验证策略不当;
  • 5140:访问网络共享;
  • 7045:服务创建,本文流程不应产生该类事件;
  • SMB 服务日志、EDR 网络连接日志:用于确认扫描和认证时间线。

Linux/Kali 侧建议保留:

  • nmap 的 -oA 原始结果;
  • crackmapexec 的 tee 输出;
  • script 终端录屏文本;
  • 测试窗口时间、出口 IP、VPN 地址。

风险与修复建议

发现项判断方法风险修复建议
普通账号具备本地管理员权限CME 返回 Pwn3d!可能被用于横向移动、远程执行清理本地 Administrators 组,使用 GPO 限制本地管理员成员
共享目录可写--shares 显示 WRITE可能被投放恶意文件或覆盖业务文件按最小权限重设 ACL,区分读写组
SMB 暴露范围过大Nmap 发现大量 445 开放扩大认证攻击面通过防火墙限制 SMB 访问源,仅允许管理网段访问
失败登录过多事件 4625 激增可能触发账号锁定或蓝队误报降低验证频率,禁止字典爆破,使用授权账号单点验证

总结

在 Kali 上做授权内网渗透,工具链不需要复杂,关键是控制范围、保留证据、把每一步和修复建议对应起来。本文的流程适合做内网第一轮资产与权限边界验证:先用 Nmap 低噪声识别资产,再用 proxychains 控制代理链路,最后用 CrackMapExec 验证 SMB 凭据和共享权限。真正有价值的不是扫出多少端口,而是能说明“哪个账号在什么主机上拥有了不该有的权限”,并给出可执行的收敛方案。

"}
服务器与云环境安全示意图
服务器、云资产与权限边界梳理示意
补充几个实战里容易踩坑的点,尤其是把 Nmap、proxychains 和 CME 串起来做内网验证时: 1. **Nmap 走代理要注意扫描类型** `proxychains` 只适合 TCP connect 这类基于系统 socket 的连接,`-sS` 半开扫描通常不会按预期走代理。内网跳板场景建议明确使用:
proxychains4 -q nmap -sT -Pn -n --max-retries 2 --host-timeout 60s -p 445,135,139,3389,5985 10.10.10.0/24
如果只是验证 SMB/WinRM/RDP 这些常见服务,不建议一上来扫全端口,容易慢且噪声大。 2. **proxychains 配置建议用 dynamic_chain** 授权测试里代理链经常不稳定,`strict_chain` 断一个节点就全断。一般我会这样配:
dynamic_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
socks5 127.0.0.1 1080
如果目标内网 DNS 无法解析,优先用 IP 段验证;需要域名解析时再确认 `proxy_dns` 是否生效,避免本机 DNS 泄露。 3. **CME 验证账户时控制并发和范围** CME 很方便,但并发过高会触发域控日志和账户锁定策略。建议先确认密码策略:
crackmapexec smb 10.10.10.10 -u user -p 'Passw0rd!' --pass-pol
然后再做小范围验证:
crackmapexec smb 10.10.10.0/24 -u users.txt -p 'Passw0rd!' --continue-on-success --rate 5
如果是授权的“资产验证”,不建议直接大规模喷密码,更适合用已授权凭据确认哪些主机可访问、哪些权限可用。 4. **区分“可达”和“有权限”** Nmap 发现 445 开放,只能说明服务可达;CME 显示 `Pwn3d!` 才能说明当前凭据具备本地管理员级别权限。常见输出可以这样看: - `STATUS_LOGON_FAILURE`:凭据错误 - `STATUS_ACCOUNT_LOCKED_OUT`:账户已锁,立即停 - `STATUS_PASSWORD_EXPIRED`:密码过期 - `Pwn3d!`:通常表示本地管理员权限 - `STATUS_ACCESS_DENIED`:认证成功但权限不足 5. **建议保留可复现记录** 授权内网验证最后交付时,最好把命令、时间、源地址、目标范围、凭据类型、关键结果留清楚,避免后面复盘时说不清楚:
date
ip a | grep -E "inet "
proxychains4 -q crackmapexec smb 10.10.10.0/24 -u user -p '***' --shares | tee cme_smb_shares_$(date +%F).log
整体思路可以是:先用低噪声 Nmap 确认关键端口,再用 CME 做协议级认证和权限判断,最后只对明确授权范围内的主机做进一步验证。这样效率和风险都比较可控。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。