跳转到帖子

Kali 渗透工具实战:通过 SSH SOCKS 跳板使用 Nmap 验证内网暴露面

精选回复

发布于

背景

在授权内网渗透中,测试机通常无法直接访问服务器网段,只能登录一台受控跳板机。此时不建议在跳板机上随意安装扫描器,更稳妥的做法是在 Kali 上通过 SSH 动态转发建立 SOCKS 通道,再使用 Nmap 的 TCP Connect 模式完成低速、可审计的服务验证。

本文场景假设已取得书面授权:Kali 地址为 192.0.2.20,SSH 跳板机为 192.0.2.10,允许测试的目标仅为 10.20.30.11、10.20.30.12 和 10.20.30.15。示例不包含口令猜测、漏洞利用和持久化操作。

通过 SOCKS 扫描时,目标看到的连接来源通常是跳板机,而不是 Kali。测试前应将跳板机地址加入临时扫描白名单,并明确时间窗口和速率上限。

工具安装与环境确认

Kali 官方仓库中的 nmap、proxychains4 和 OpenSSH 客户端已经足够。尽量使用 apt 安装,不要从不明网盘下载二进制文件。

sudo apt update
sudo apt install --yes nmap proxychains4 openssh-client

nmap --version
proxychains4 -h 2>&1 | head
ssh -V

# 保存已安装软件版本,便于报告复现
dpkg-query -W nmap proxychains4 openssh-client | tee tool-versions.txt
sha256sum tool-versions.txt

如果必须离线传递 deb 包,可在联网的同版本 Kali 上执行 apt download,并同时传递 SHA-256 清单。不要直接混用不同 Debian/Kali 发行版本的软件包,否则容易出现库依赖和行为差异。

问题定位:先确认链路,而不是直接全网扫描

常见误判包括:SSH 动态转发没有成功、ProxyChains 配置仍指向默认端口、目标网段被跳板机防火墙阻断,以及把 SOCKS 环境下的主机发现失败误认为目标离线。

  • SSH 只负责建立 TCP 转发,不会自动提供 ICMP、ARP 或二层发现能力。
  • Nmap 的 SYN 扫描依赖原始套接字,不能直接穿过普通 SOCKS 代理。
  • UDP 扫描、操作系统识别和大部分 traceroute 功能不适合经此链路执行。
  • 经 SOCKS 使用 Nmap 时,应采用 -sT,并根据已批准的目标使用 -Pn。
  • -Pn 只表示跳过主机发现,不代表目标一定在线;最终结论应结合端口状态和服务响应。

操作步骤一:建立仅监听本机的 SOCKS 通道

使用专用审计账号登录跳板机。-N 表示不执行远端命令,-D 建立动态转发,ExitOnForwardFailure 可避免转发失败后 SSH 仍保持一个看似正常的会话。

ssh -N -D 127.0.0.1:1080 \
  -o ExitOnForwardFailure=yes \
  -o ServerAliveInterval=30 \
  -o ServerAliveCountMax=3 \
  [email protected]

另开终端检查监听地址。必须看到 127.0.0.1:1080,而不是 0.0.0.0:1080,后者可能把代理端口暴露给同网段其他主机。

ss -lntp | grep ':1080'
ssh -G [email protected] | grep -E 'hostname|user|proxy|forward'

操作步骤二:为本次任务建立独立 ProxyChains 配置

不建议直接修改全局 /etc/proxychains4.conf。复制一份任务配置,便于留档和避免影响其他终端。

mkdir -p case-2025-001/{config,logs,output}
cp /etc/proxychains4.conf case-2025-001/config/proxychains.conf
sed -i 's/^dynamic_chain/# dynamic_chain/' case-2025-001/config/proxychains.conf
sed -i 's/^#strict_chain/strict_chain/' case-2025-001/config/proxychains.conf
sed -i 's/^socks4[[:space:]]\+127.0.0.1[[:space:]]\+9050/# &/' case-2025-001/config/proxychains.conf
cat >> case-2025-001/config/proxychains.conf <<'EOF'
socks5 127.0.0.1 1080
EOF

grep -E '^(strict_chain|proxy_dns|socks)' case-2025-001/config/proxychains.conf

strict_chain 可以确保流量必须经过指定代理;proxy_dns 可减少域名查询从 Kali 本地网络泄漏。不过本次范围使用 IP 地址,扫描命令同时加 -n,避免不必要的反向解析。

操作步骤三:建立明确的授权目标清单

不要把整个 RFC1918 网段直接交给扫描器。将审批单中的目标逐行写入文件,并在执行前复核。

cat > case-2025-001/config/scope.txt <<'EOF'
10.20.30.11
10.20.30.12
10.20.30.15
EOF

nl -ba case-2025-001/config/scope.txt
sha256sum case-2025-001/config/scope.txt | tee case-2025-001/config/scope.sha256

如果范围以网段形式下发,建议先让资产负责人提供有效地址清单。必须扫描网段时,应通过防火墙出口规则再次限制跳板机只能访问获批网段,不能只依赖操作人员输入正确命令。

操作步骤四:小范围验证代理链路

先选择一个已知开放的管理端口做单点验证,确认路径正常后再扩大端口范围。ProxyChains 输出出现 chain OK 只代表代理连接建立成功,仍需关注 Nmap 返回的 open、closed 或 filtered。

proxychains4 -q -f case-2025-001/config/proxychains.conf \
  nmap -sT -Pn -n -p 22 --reason \
  --connect-timeout 3s --max-retries 1 \
  10.20.30.11
状态通常含义后续动作
open完成 TCP 三次握手,服务接受连接执行最小化服务识别
closed收到 RST,主机通常可达但端口未监听记录即可,不应反复重试
filtered超时或收到过滤类响应检查跳板机路由、防火墙和访问控制

操作步骤五:低速枚举常见服务

通过 SOCKS 执行 -sT 时,每个探测都建立完整 TCP 连接,服务端日志量通常高于半开扫描。因此应限制端口、并发和重试次数,不建议直接使用 -p-、-T5。

UTC=$(date -u +%Y%m%dT%H%M%SZ)

script -q -f case-2025-001/logs/session-$UTC.txt -c \
'proxychains4 -q -f case-2025-001/config/proxychains.conf \
 nmap -sT -Pn -n \
 -p 22,80,443,445,3389,5432,6379,8080,8443 \
 --reason --version-light \
 --max-rate 20 --max-retries 1 --host-timeout 90s \
 -iL case-2025-001/config/scope.txt \
 -oA case-2025-001/output/service-check'

sha256sum case-2025-001/output/service-check.* \
  case-2025-001/logs/session-$UTC.txt \
  | tee case-2025-001/output/evidence.sha256

-oA 会同时生成普通文本、XML 和 grepable 格式。报告取证优先保留 XML,因为其中包含扫描参数、时间、端口原因和服务指纹;普通文本适合人工快速阅读。

漏洞验证:只使用非破坏性脚本确认配置问题

发现开放端口后,不要立即运行 vuln 脚本集合。先针对具体服务使用 banner、证书和安全配置类脚本,避免触发登录、写入或高负载行为。

proxychains4 -q -f case-2025-001/config/proxychains.conf \
  nmap -sT -Pn -n -p 22,80,443,445 \
  --script banner,http-title,http-headers,ssl-cert,ssl-enum-ciphers,ssh-hostkey,smb2-security-mode \
  --script-timeout 20s --max-retries 1 --max-rate 10 \
  -iL case-2025-001/config/scope.txt \
  -oA case-2025-001/output/config-validation

脚本结果需要人工复核。例如 ssl-enum-ciphers 报告支持旧协议,只能说明该监听端口接受相应握手;还应确认前端负载均衡、SNI 和实际业务域名。HTTP Host 不正确时,默认站点返回的标题和响应头也可能与目标业务无关。

对于 HTTPS 虚拟主机,可在已知业务域名的前提下单独验证 SNI。域名应来自授权资产清单,不能通过撞库式枚举获取。

proxychains4 -q -f case-2025-001/config/proxychains.conf \
  curl --socks5-hostname 127.0.0.1:1080 \
  --connect-timeout 5 --max-time 15 \
  --resolve app.internal.example:443:10.20.30.12 \
  -D case-2025-001/output/app-headers.txt \
  -o /dev/null  端:保存终端会话、Nmap XML、任务配置和 SHA-256 清单。
  • 跳板机端:Debian 系通常检查 /var/log/auth.log,也可使用 journalctl -u ssh 核对登录和断开时间。
  • 目标端:核对主机防火墙、Web 访问日志、SSH 日志及 Windows 安全日志。由于扫描经过 SSH 隧道,目标侧源地址通常记录为跳板机内网地址。
  • 时间基准:各节点应同步 NTP,并在报告中明确使用 UTC 或本地时区。
  • # 在跳板机上由管理员执行,按 UTC 时间窗口核对 SSH 会话
    sudo journalctl -u ssh \
      --since '2025-03-01 02:00:00 UTC' \
      --until '2025-03-01 03:00:00 UTC'
    
    # 检查输出是否被修改
    sha256sum -c case-2025-001/output/evidence.sha256

    常见故障排查

    现象可能原因排查方法
    ProxyChains 提示 socket errorSSH 隧道退出或端口配置错误用 ss 检查 127.0.0.1:1080,并查看 SSH 终端错误
    所有端口均 filtered跳板机没有目标路由,或出口 ACL 拒绝由跳板机管理员检查 ip route、nftables 和边界防火墙日志
    扫描非常慢目标丢包、重试过多或脚本等待超时缩小端口范围,设置 max-retries、host-timeout 和 script-timeout
    服务版本结果不稳定代理延迟、负载均衡或服务主动断开使用 version-light,并通过协议级客户端做一次定向复核
    域名解析到错误地址本地 DNS 泄漏或内外网分裂解析使用 -n、proxy_dns,或按资产清单使用 curl --resolve

    权限边界与跳板机加固

    动态转发本质上给测试人员提供了从跳板机发起任意 TCP 连接的能力,不能仅靠口头约束。建议使用专用短期账号、密钥认证、来源地址限制和跳板机出口 ACL。测试结束后立即撤销密钥和临时规则。

    # sshd_config 中针对专用账号的示例基线
    Match User auditor
        AuthenticationMethods publickey
        AllowTcpForwarding local
        GatewayPorts no
        X11Forwarding no
        PermitTTY no
        MaxSessions 1
    

    AllowTcpForwarding local 仍然允许该账号建立动态转发,并不会限制 SOCKS 最终访问的目标。真正的目标范围应由跳板机 nftables、云安全组或上游防火墙实施白名单。修改 sshd_config 前先执行 sshd -t 校验,并保持现有管理会话,避免配置错误导致失联。

    风险与修复建议

    • 若发现管理端口对普通办公网开放,应通过主机防火墙或网络 ACL 限制到运维网和指定跳板机。
    • 若 SSH 暴露弱算法,应升级 OpenSSH,并在兼容性验证后禁用旧版密钥交换、CBC 和 SHA-1 类算法。
    • 若 TLS 支持过时协议或弱密码套件,应在实际终止 TLS 的负载均衡器、反向代理或应用服务器上修复,不能只修改后端节点。
    • 若 SMB 签名未强制,应评估旧系统兼容性后,通过域策略逐步启用客户端和服务器端签名要求。
    • 若数据库、Redis 等中间件直接暴露在跨区网络,应同时落实监听地址、网络隔离和应用层认证,避免只依赖端口隐藏。
    • 跳板机应记录 SSH 登录、配置变更和出口连接日志,并为授权扫描设置独立时间窗口,避免与真实入侵告警混淆。

    总结

    SSH SOCKS、ProxyChains 和 Nmap 的组合适合在无法直接路由到目标网段时进行受控的 TCP 服务验证。关键不是扩大扫描能力,而是明确其限制:只能可靠承载 TCP Connect 类探测,目标侧看到的是跳板机地址,且每个探测都可能形成完整连接和日志。

    实际执行时应坚持精确目标清单、小端口集、低速率、原始结果留存和双侧日志核对。发现问题后再使用协议级工具做最小化复核,比直接运行大范围漏洞脚本更容易控制风险,也更便于给出可验证的修复建议。

    服务器与云环境安全示意图
    服务器、云资产与权限边界梳理示意
    安全工具参数与流程示意图
    工具配置、参数调优与结果校验示意

    这里有个容易踩坑的点:SSH -D 提供的是 SOCKS TCP 转发,不能透传 Nmap 的 SYN、UDP、ICMP 或 ARP 探测。因此不要用默认扫描方式,建议明确指定 -sT -Pn -n,让 Nmap 走系统 connect(),再由 proxychains 接管。

    先建立只监听本机的 SOCKS5:

    ssh -N \
      -D 127.0.0.1:1080 \
      -o ExitOnForwardFailure=yes \
      -o ServerAliveInterval=30 \
      -o ServerAliveCountMax=3 \
      user@jump-host

    /etc/proxychains4.conf 可做最小配置:

    strict_chain
    proxy_dns
    tcp_connect_time_out 8000
    tcp_read_time_out 15000
    
    [ProxyList]
    socks5 127.0.0.1 1080

    建议先验证目标端口确实能从跳板侧访问,而不是直接扫整个网段:

    proxychains4 -q nc -vz 10.20.30.10 443
    
    proxychains4 -q curl --connect-timeout 5 \
      
    
    

    确认链路正常后再用 Nmap 做 TCP Connect 扫描:

    proxychains4 -q nmap \
      -sT -Pn -n --open \
      -T3 --max-retries 2 --host-timeout 2m \
      -p 22,80,443,445,3389 \
      10.20.30.10

    扩大到网段时最好先限定业务相关端口,避免 SOCKS 链路因大量并发连接变得不稳定:

    proxychains4 -q nmap \
      -sT -Pn -n --open \
      --max-rate 30 --max-retries 1 \
      -p 22,80,443,445,3389 \
      10.20.30.0/24

    几个结果解释上的注意点:

    • -Pn 是必要的,因为主机发现阶段的 ICMP/SYN 探测通常无法通过 SOCKS;但这也意味着每个地址都会进入端口探测。
    • -n 可避免本地 DNS 查询泄漏,也减少无意义的解析等待;若目标依赖内网域名,先单独确认 DNS 解析路径。
    • -sS、-sU、OS 指纹识别和部分依赖原始报文的 NSE 脚本不适用于这种链路。
    • 超时不一定代表端口被过滤,也可能是跳板路由、防火墙策略、SOCKS 握手超时或 SSH 通道拥塞。最好在跳板机上用 nc -vz 交叉验证。
    • 不要假设 Nmap 的 --proxies 能代理完整扫描流程;通过 SOCKS 做基础端口验证时,proxychains 配合 -sT 更直观。

    如果目的是持续、完整地验证较大内网暴露面,与其长期套 SOCKS,不如在授权范围内使用 SSH 路由转发或在跳板侧直接运行扫描器,再把结果文件传回。这样对 UDP、主机发现和指纹识别的支持会更可靠。

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

    最近浏览 0

    • 没有会员查看此页面。

    SiteMap HACKHAT © 2026 All rights reserved.