
1. 从一次内网横向的困境说起很多做内网安全评估的朋友都遇到过这种局面好不容易拿下一台边界机器结果发现目标内网被切成了好几个网段防火墙策略卡得死死的只有特定端口能通。你手里这台机器既不能直接访问数据库网段也够不着域控甚至连个像样的出网通道都没有。这时候如果只会用最基础的端口转发那基本就是寸步难行。Venom 就是在这种场景下被频繁提起的一个工具。它本质上是一个多级内网代理工具用 Go 写的核心能力是把一台台被控机器串成一条链路让流量像走隧道一样一层层穿透进去。和传统的单级端口转发不同Venom 支持多级级联也就是说你可以让 A 机器连 BB 连 CC 连 D最后从 D 的视角去访问它所在的网段。这个特性在复杂内网里非常关键因为很多时候你没法一步到位只能一跳一跳地往里摸。这篇文章适合谁看如果你已经会基本的反弹 shell、会配简单的端口转发但对多级代理的链路管理、流量走向、稳定性调优还比较模糊那这篇内容应该能帮到你。我会从设计思路讲到具体操作再到踩过的坑尽量把每个环节的“为什么”说清楚。需要提前说明的是下面涉及的所有操作都应在合法授权的安全评估场景中进行未经授权的测试是违规的。2. Venom 的整体设计与链路思路拆解2.1 为什么选多级代理而不是单级转发单级端口转发工具比如常见的本地转发、远程转发解决的是“一台机器到另一台机器”的连通问题。但内网渗透的真实情况往往是链式的你控制的机器 A 只能访问 BB 只能访问 CC 才能碰到最终目标。如果只有单级转发你就得在每一跳上手动搭一套转发规则链路一长管理成本爆炸而且任何一跳断了你都很难快速定位。Venom 的设计思路是把每一台被控机器抽象成一个“节点”节点之间通过一条控制通道连接形成一个树状或链状的结构。你只需要在每台机器上运行一个 agent然后在本地通过 admin 端去管理整个拓扑。流量的转发规则由 admin 统一下发agent 负责执行。这样一来多级链路的管理就变成了“加节点、连节点、开监听”三个动作清晰很多。另一个关键点是 Venom 支持多种监听类型包括正向连接、反向连接以及基于不同协议的传输。这意味着你可以根据目标网络的出站策略灵活选择如果目标能出网就用反向连接把 agent 连回来如果只能内网互通就用正向连接逐级跳。这种灵活性是它在实战中被反复使用的原因。2.2 节点、监听与链路的关系理解 Venom 要先理解三个概念节点node、监听listen、链路link。节点就是一台运行了 agent 的机器每个节点有唯一的 ID。监听是节点上开放的一个入口等待其他节点或 admin 连接。链路则是两个节点之间实际建立的连接。你可以把节点想成车站监听想成站台链路想成铁轨。admin 端就是调度中心它决定哪趟车从哪个站台出发走哪条铁轨到下一个站。这里有个容易混淆的地方一个节点可以开多个监听也可以连多个上级。但实际使用中为了链路清晰和稳定通常建议保持树状结构避免形成环路。环路会导致流量绕圈轻则变慢重则直接卡死。我在早期测试时就因为不小心让两个节点互相连接结果整个链路响应变得极慢排查了半天才发现是拓扑成了环。2.3 传输协议的选择逻辑Venom 的 agent 和 admin 之间、节点和节点之间需要传输数据传输协议的选择直接影响稳定性和隐蔽性。常见的选项包括 TCP、TLS 等。TCP 最直接速度快但流量特征明显TLS 多了加密层能对抗简单的流量识别但会带来额外的握手开销。选择逻辑其实不复杂如果目标网络有较严格的流量审计优先考虑带加密的传输方式如果只是内网互通、追求速度TCP 就够了。另外要注意某些内网环境对长连接有超时限制这时候需要调整心跳间隔让链路保持活跃。心跳太频繁会增加流量特征太慢又容易被中间设备断开这个平衡需要根据实际网络环境去试。3. 核心细节解析与实操要点3.1 环境准备与基础概念确认在动手之前先把环境理清楚。你需要准备三类机器一台作为 admin 的控制端通常是你自己的评估机若干台作为跳板的被控机器以及最终要访问的目标网段。每台跳板机器上需要能执行对应架构的 agent 二进制文件。Venom 的 agent 是静态编译的依赖很少这点对实战很友好。但要注意目标机器的架构x86、x64、ARM 的 agent 不通用。我遇到过几次在 ARM 设备上直接扔了 x64 的 agent结果报格式错误浪费了不少时间。所以第一步永远是确认目标架构用uname -m或者看系统信息。另外agent 的运行权限会影响它能监听的端口范围。普通用户只能监听 1024 以上的端口如果要监听低位端口需要相应权限。实战中一般用高位端口就够了没必要追求低位端口反而容易引起注意。3.2 节点添加与监听的建立整个流程的第一步是在第一台跳板机器上运行 agent让它连回 admin。假设 admin 监听在某个端口agent 用反向连接的方式连回来。命令大致是这样的结构./agent -r admin_ip:admin_port连上之后admin 端会显示一个新的节点并分配一个 ID。这时候你可以在 admin 里对这个节点操作比如让它开一个监听listen 节点ID 监听端口这个监听的作用是给下一级节点提供入口。下一台机器上的 agent 就连到这个监听端口上形成第二级。如此反复就能一层层往里延伸。这里有个细节值得说监听的绑定地址。默认可能绑定在 0.0.0.0也就是所有网卡都监听。如果跳板机器有多张网卡分别对应不同网段你最好明确绑定到能通向下一级的那张网卡的地址上。否则可能出现下一级连不上或者流量走了错误的网卡。我一般会先用ip addr看清楚网卡和网段再决定绑定哪个地址。3.3 链路建立后的流量走向链路建好之后流量是怎么走的假设拓扑是 admin - A - B - C你想从 admin 访问 C 所在网段的某台机器。实际路径是admin 把请求发给 AA 转发给 BB 转发给 CC 再发到目标。返回的流量原路返回。理解这个走向很重要因为它决定了瓶颈在哪。每一跳都会增加延迟链路越长延迟越明显。如果中间某一跳的网络质量差整个链路都会受影响。所以实战中要尽量选择网络质量好的机器作为跳板比如同机房、同网段的机器优先。还有一个容易忽略的点MTU 和分片。多级隧道叠加后有效 MTU 会变小大包可能被分片甚至丢弃。如果发现某些操作比如传大文件、跑扫描特别慢或者失败可以尝试调小 MTU 或者用分片友好的工具。这个坑我在传工具包的时候踩过后来把包拆小就正常了。3.4 注意事项与操作禁忌有几个禁忌必须强调。第一不要在未授权的环境里使用这是底线。第二不要在生产环境的高峰期做大规模扫描流量突增很容易触发告警。第三链路建好后要及时记录拓扑节点一多很容易搞混哪个 ID 对应哪台机器。我习惯用一个简单的表格记录节点 ID、IP、角色和上级节点后面排查问题时非常有用。另外agent 进程的隐藏和持久化要谨慎处理。有些评估场景允许留后门做持久化有些不允许。一定要在授权范围内操作并且评估结束后清理干净。留下未清理的 agent 既不负责任也可能带来后续风险。4. 完整实操过程与关键环节实现4.1 第一级节点的建立与验证假设你已经通过某种方式在边界机器 A 上获得了执行权限。第一步是把对应架构的 agent 传上去并运行。传文件的方式有很多这里不展开重点说运行和验证。运行 agent 连回 admin 后admin 端应该能看到新节点。这时候先别急着往下走先验证链路是否稳定。可以做一个简单的测试在 admin 里对 A 节点执行一个命令看返回是否正常。如果返回慢或者丢包说明这条链路质量有问题需要先解决。验证通过后在 A 上开一个监听准备迎接第二级。监听端口的选择有讲究尽量选不常见的端口避免和现有服务冲突也降低被扫描发现的概率。开完监听后可以用netstat确认端口确实在监听状态。4.2 第二级、第三级节点的接入第二台机器 B 需要能访问 A 的监听端口。在 B 上运行 agent连接到 A 的监听地址。连上后admin 里会出现 B 节点并且能看到它的上级是 A。这时候链路就是 admin - A - B。重复这个过程在 B 上开监听让 C 连上来就形成了三级链路。每加一级都要验证一次连通性。我通常会在每一级都做一个到上级的 ping 或者简单请求确认这一跳是通的再继续往下。这样一旦出问题能立刻定位是哪一跳断了。这里有个实操技巧逐级验证而不是最后一起验。很多人喜欢把所有节点都连上再统一测试结果出问题时不知道是哪一级的配置错了。逐级验证虽然麻烦一点但排查成本低得多。4.3 通过多级链路访问目标网段链路建好后最终目的是访问目标。假设 C 能访问目标网段 10.0.0.0/24你想从 admin 直接访问 10.0.0.5 的某个服务。这时候需要在 admin 端配置一个转发规则把本地的某个端口映射到目标地址和端口上。配置完成后你在本地访问 127.0.0.1:本地端口流量就会沿着 admin - A - B - C - 10.0.0.5 的路径走。可以用 curl 或者浏览器验证是否通。如果通说明整条链路工作正常。这个环节的关键是端口映射的对应关系要清楚。本地端口、目标地址、目标端口三者要一一对应配错了就会连到错误的地方。我习惯在配置前先画一个简单的映射表配完再对照检查一遍。4.4 链路稳定性调优与参数选择链路跑起来之后稳定性是下一个要解决的问题。影响稳定性的因素主要有三个心跳间隔、超时设置、传输协议。心跳间隔决定了节点之间多久通信一次。太短会增加流量太长会被中间设备判定为空闲连接而断开。一般内网环境可以设得稍长一些跨网络环境要短一些。具体数值没有标准答案需要根据实际网络设备的超时策略去试。我的经验是从中等间隔开始观察一段时间如果频繁断连就缩短如果流量特征太明显就适当延长。超时设置影响的是连接断开后的重连行为。设置合理的话短暂网络抖动后能自动恢复设置不当则可能一直重连不上。传输协议方面前面说过有审计压力就用加密传输追求速度就用 TCP。还有一个调优点是并发连接数。如果通过链路做扫描或者大量请求并发太高会把链路压垮太低又慢。建议从小并发开始逐步增加观察链路延迟和丢包情况找到那个“刚好不卡”的点。5. 常见问题与排查技巧实录5.1 节点连不上上级的排查顺序节点连不上是最常见的问题。排查顺序建议从下往上先确认 agent 进程是否在运行再确认目标监听端口是否可达然后确认防火墙策略最后看 admin 端是否有报错。具体来说在跳板机器上用ps确认 agent 进程存在用telnet或者nc测试到上级监听端口的连通性如果连不通检查中间是否有防火墙拦截如果都通但 admin 看不到节点可能是 agent 版本和 admin 版本不匹配或者连接参数写错了。我遇到过一种情况agent 进程在端口也通但就是连不上。最后发现是目标机器的系统时间偏差太大导致 TLS 握手失败。所以如果用了加密传输时间同步也要检查。5.2 链路时通时断的典型原因链路时通时断通常有几个原因网络抖动、心跳设置不当、中间设备主动断开空闲连接、或者链路中存在环路。排查时先看断开的规律是固定时间断还是随机断固定时间断多半是中间设备的超时策略需要调整心跳随机断可能是网络质量问题。如果是加了新节点后才出现重点检查新节点是否引入了环路。环路的问题前面提过这里再强调一次加节点前先想清楚拓扑确保是树状而不是环状。如果不小心形成了环最快的解决办法是断开其中一个连接重新规划。5.3 流量异常与性能瓶颈定位流量异常表现为速度突然变慢、大量重传、或者某些请求超时。定位思路是先确定瓶颈在哪一跳可以在每一级节点上做简单的流量统计看哪一级的流量明显异常。常见瓶颈包括某一跳的网络带宽不足、某一跳的机器性能太差CPU 或内存吃紧、MTU 不匹配导致分片。带宽和性能问题只能通过换跳板或者减少并发来解决MTU 问题可以尝试调小 MTU 或者用分片友好的传输方式。还有一个隐蔽的瓶颈是agent 本身的处理能力。如果 agent 所在机器负载很高它的转发能力会下降。这时候可以考虑把 agent 的优先级调高或者换一台负载低的机器。5.4 常见问题速查表问题现象可能原因排查动作解决方向节点连不上上级进程未运行/端口不通/防火墙拦截查进程、测端口、看策略启动进程、放通端口、调整策略admin 看不到节点版本不匹配/参数错误/时间偏差核对版本、检查参数、对时统一版本、修正参数、同步时间链路时通时断心跳不当/网络抖动/环路观察断开规律、检查拓扑调整心跳、换跳板、消除环路速度突然变慢带宽不足/性能瓶颈/MTU 问题逐跳统计流量、看负载换跳板、降并发、调 MTU大文件传输失败MTU 分片/超时测试小包、看分片拆小包、调 MTU、延长超时5.5 独家避坑经验最后分享几个文档里不会写的经验。第一节点 ID 一定要记最好用表格不然节点一多你根本分不清谁是谁。第二每加一级都验证不要攒着一起验排查成本差很多。第三心跳和超时要根据环境调没有万能参数抄别人的配置不一定适合你的网络。第四评估结束要清理把 agent 进程停掉把添加的监听关掉把传上去的文件删掉这是职业素养。还有一点关于工具选型的体会Venom 适合链路清晰、需要多级穿透的场景。如果只是简单的单级转发用系统自带的转发功能或者更轻量的工具就够了没必要上 Venom。工具是拿来解决问题的不是拿来炫技的选最合适的而不是最复杂的。我在实际使用中最大的体会是多级代理的难点不在工具本身而在对网络拓扑的理解和链路的规划。工具的命令就那么几条但什么时候该加节点、加在哪、怎么绑地址、怎么调参数这些才是真正考验经验的地方。多画图、多记录、多验证比死记命令有用得多。