云计算百科
云计算领域专业知识百科平台

从零构建三层网络攻防实验环境(含NAT、防火墙、SSTI完整实战)

从零构建三层网络攻防实验环境

写在前面

在真实企业环境中,攻击者往往不可能直接进入核心内网,而是需要经过多个网络分层,逐步突破隔离机制,最终实现横向移动与权限提升。

为了更深入理解这一过程,我搭建了一个完整的三层网络攻防实验环境,模拟如下攻击路径:

外网攻击者 → 跳板机突破 → 内网渗透 → 获取Flag

本文将完整记录该实验环境的设计思路、网络隔离实现方式以及漏洞利用过程。

注意

📌 完整项目已整理到 GitHub,包含:

  • 虚拟机镜像
  • 网络配置文档
  • 漏洞源码
  • 攻击链流程说明

项目地址: 👉 https://github.com/see286/Three-Tier-Network-Attack-Lab

欢迎大家访问、交流和改进!


一、整体架构设计思路

本实验采用三虚拟机结构:

  • 攻击机(Kali)—— 外网模拟攻击者
  • 代理机(Kali)—— 跳板机 / NAT网关
  • 内网机(Kali)—— 目标靶机

网络结构如下:

Attacker (192.168.36.x)
|
|
Proxy (192.168.2.10)
|
|
Internal (192.168.3.10)

设计目标:

  • 攻击机不能直接访问内网
  • 内网不能直接访问外网
  • 代理机作为唯一中间节点
  • 所有跨网段流量必须经过代理机
  • 代理机承担 NAT + 防火墙功能
  • 这其实就是一个简化版企业 DMZ + 内网结构。


    二、网络隔离与路由设计

    本实验的核心难点不在漏洞,而在网络隔离。

    (1) 静态 IP 规划

    • 代理机:192.168.2.10 + 192.168.3.2
    • 内网机:192.168.3.10
    • 攻击机:NAT 网络(192.168.36.x)

    使用 nmcli 进行静态IP持久化配置。


    (2) IP 转发开启

    Linux 默认不能转发数据包,因此需要在代理机开启:

    sudo sysctl -w net.ipv4.ip_forward=1

    并写入 /etc/sysctl.conf 实现持久化。

    如果不启用 IP 转发,跨网段通信无法实现。


    (3) NAT 设计(SNAT)

    为了让内网通过代理访问外网,需要在代理机开启 NAT:

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    这里使用的是 SNAT。

    核心作用:

    • 内网源地址替换为代理机外网IP
    • 内网可访问互联网
    • 外部不能直接访问内网

    (4) iptables 防火墙隔离

    这是整个实验的关键。

    我采用默认拒绝策略:

    sudo iptables -P INPUT DROP
    sudo iptables -P FORWARD DROP
    sudo iptables -P OUTPUT ACCEPT

    然后精细化放行:

    • 允许攻击机访问代理机
    • 允许代理机访问内网
    • 禁止攻击机直接访问内网

    关键阻断规则:

    sudo iptables -A FORWARD -s 192.168.36.0/24 -d 192.168.3.0/24 -j DROP

    只有加入这条规则后,整个三层隔离模型才真正稳定。


    三、实验中踩过的坑

    最开始我发现攻击机竟然可以 ping 通内网。

    排查了很久。

    后来发现是 VMware 虚拟网络的优化转发机制导致流量绕过了预期路径。

    解决办法是:

    在攻击机上强制添加路由,让所有目标流量必须经过代理机:

    sudo ip route add 192.168.2.0/24 via 192.168.36.133
    sudo ip route add 192.168.3.0/24 via 192.168.36.133

    这一点如果忽略,整个隔离模型会失效。

    这是本次实验最花时间的地方。


    四、漏洞设计

    为了模拟真实渗透路径,我在两个节点分别设计漏洞。


    (1) 代理机漏洞

    弱口令 SSH

    用户名:student 密码:students

    攻击者可通过暴力破解获取跳板权限。


    Redis 未授权访问

    Redis 默认监听 0.0.0.0 且未设置密码。

    攻击者可直接连接:

    redis-cli -h 192.168.2.10

    可读取或写入敏感数据。


    (2) 内网机漏洞 —— Flask SSTI

    这是本实验的核心漏洞。

    构造了一个存在模板注入的 Flask 服务:

    tmpl = f"<h1>{name} is sb</h1>"
    return render_template_string(tmpl)

    用户输入直接拼接到模板中,导致 SSTI。


    五、攻击链完整复现

    完整攻击路径如下:

  • SSH 登录代理机
  • 利用 Redis 未授权访问
  • 使用 socat 端口转发暴露内网服务
  • 访问 Flask 应用
  • 构造 SSTI payload
  • 通过 RCE 读取 flag
  • SSTI payload 示例(URL 编码前):

    {{url_for.__globals__.__builtins__['eval']("__import__('os').popen('cat /home/kali/vuln_flask/flag.txt').read()")}}

    最终成功获取内网 flag。


    六、本实验的技术收获

    通过本次实验,我深入理解了:

    • Linux 路由机制
    • NAT 工作原理
    • iptables FORWARD 链逻辑
    • 网络分层隔离模型
    • Redis 配置风险
    • Flask SSTI 利用链
    • 从 Web 漏洞到系统级 RCE 的过程

    相比单纯做 CTF 题目,这种完整环境搭建更接近真实企业攻防。


    结语

    这次实验让我意识到:

    真正困难的不是漏洞利用,而是环境设计。

    网络隔离模型如果设计不好,后续攻击链就失去了现实意义。

    希望这篇文章对正在学习内网渗透与网络隔离的同学有所帮助。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 从零构建三层网络攻防实验环境(含NAT、防火墙、SSTI完整实战)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!