Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
slipstream — NAT Slipstreaming 允许攻击者远程访问绑定到受害者机器的任何 TCP/UDP 服务,绕过受害者的 NAT/防火墙,只需受害者网络上的任何人访问一个网站即可。 | Kitploit
工具/GitHubGitHub/samyk/slipstream
侦察漏洞利用Web安全网络安全渗透测试
GitHubsamyk/slipstream

slipstream

NAT Slipstreaming 允许攻击者远程访问绑定到受害者机器的任何 TCP/UDP 服务,绕过受害者的 NAT/防火墙,只需受害者网络上的任何人访问一个网站即可。

查看仓库
2.0k214213年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

NAT Slipstreaming

NAT 滑流攻击 允许攻击者远程访问受害者 NAT 后方 任意系统 上的任何 TCP/UDP 服务,只需受害者访问一个网站即可绕过受害者的 NAT/防火墙(远程任意防火墙端口控制)。

v1 开发者:@SamyKamkar // https://samy.pl
v2 开发者:Samy Kamkar && (Ben Seri && Gregory Vishnipolsky of Armis)。

阅读 Ben 和 Gregory 关于 v2 的优秀技术文章,其中深入介绍了他们对 v2 的更新以及大量额外细节。

v1 发布日期:2020年10月31日 👻
v2 发布日期:2021年1月26日

源代码:https://github.com/samyk/slipstream

NAT 滑流攻击架构 此处为动画版本,使用 我的 fork 版本的 draw.io 生成,支持导出边缘上下文流动和动画控制

目录

  • 摘要
  • 详解
    • 网络地址转换 (NAT)
      • 连接跟踪
      • 应用层网关
    • 路由器调查 / 固件转储
    • 固件逆向工程
      • 寻找感兴趣的文件
      • 探索有趣的函数
      • 需要调查的端口/服务
      • 逆向内核对象
    • 连接跟踪 / 应用层网关调查
      • Linux Netfilter
    • 数据包边界 / 分片控制
    • TCP 时序攻击 / 内部子网与 IP 发现
      • 时序攻击
    • 浏览器协议混淆
      • 实时浏览器数据包篡改
  • 其他发现
  • 下载
  • 联系方式

摘要

NAT 滑流攻击通过利用用户的浏览器以及 NAT、路由器和防火墙内置的应用层网关(ALG)连接跟踪机制,结合通过时序攻击或 WebRTC 提取内部 IP、自动远程 MTU 与 IP 分片发现、TCP 数据包大小调整、TURN 认证滥用、精确数据包边界控制以及浏览器协议滥用等手段实现。由于是 NAT 或防火墙开启了目标端口,因此可以绕过任何基于浏览器的端口限制。

这种攻击利用了在 不包含 HTTP 或其他头部的情况下对某些 TCP 和 UDP 数据包数据部分的任意控制;该攻击在所有主流现代(及旧版)浏览器中执行这种新的数据包注入技术,是我最初于 2010 年提出的 NAT 固定技术(在 DEFCON 18 和 Black Hat 2010 上展示)的现代化版本。此外,还包括了本地 IP 地址发现的新技术。

该攻击要求 NAT/防火墙支持 ALG(应用层网关),而 ALG 对于使用多端口(控制通道 + 数据通道)的协议(如 SIP 和 H323(VoIP 协议)、FTP、IRC DCC 等)是必需的。

在高层面上,NAT 滑流攻击的工作原理如下:

  • 受害者访问恶意网站(或带有恶意广告的网站)
  • 首先必须通过浏览器提取受害者的内部 IP 并发送给服务器
    • 通过 WebRTC 数据通道(通过 HTTPS)尝试提取内部 IP
      • 某些浏览器(如 Chrome)仅通过 HTTPS 的 WebRTC 泄露本地 IP,但我们的一些攻击需要 HTTP,因此首先重定向到攻击软件的 HTTPS 版本以提取本地 IP
      • 如果能够获取到本地 IP,我们将其包含在 URL 中重定向到 HTTP 版本,以绕过其他跨域保护机制(提供的 .local mDNS/Bonjour 地址对攻击无效)
    • 如果 WebRTC 未泄露内部 IP(如 Safari)或没有 WebRTC(IE11 及更早版本),则执行 基于 Web 的 TCP 时序攻击
      • 在后台加载针对所有常见网关的隐藏 img 标签(例如 192.168.0.1)
      • 为 img 标签附加 onerror/onsuccess 事件
      • 如果网关返回任何 TCP RST(或 SYN + HTTP 响应),则检测到有效子网
      • 在检测到的子网(/24)上对所有 IP 重新执行时序攻击,测量 onerror/onsuccess 触发的时间
      • 最快的响应很可能是内部 IP,但所有响应均被视为受害者内部 IP 候选并受到攻击
  • 通过隐藏表单和自动 HTTP POST 向攻击者的“HTTP 服务器”(绑定到非标准端口)发送大型 TCP 信标,强制 TCP 分段并发现受害者 IP 栈的最大 MTU 大小
    • 攻击者 TCP 服务器发送 最大分段大小 TCP 选项,以调整受害者出站数据包大小(RFC 793 x3.1),从而控制浏览器 TCP 数据包的大小
  • 通过 WebRTC TURN 认证机制从浏览器向攻击者服务器的非标准端口发送大型 UDP 信标,强制 IP 分片,并填充 TURN username 字段
    • 我们执行与 TCP 分段类似的攻击,但基于 UDP,因为 IP 分片会提供与 TCP 分段不同的值
    • 服务器检测到受害者 MTU 大小、IP 头部大小、IP 数据包大小、TCP 头部大小、TCP 分段大小,并将其发送回受害者浏览器,用于后续的数据包填充
  • (v1)生成包含内部 IP 的“SIP 数据包”到新的隐藏表单,触发应用层网关连接跟踪
    • 向 TCP 端口 5060(SIP 端口)上的服务器发起“HTTP POST”,避开受限浏览器端口
    • POST 数据被“填充”到精确的 TCP 分段大小/数据包边界,然后通过 Web 表单附加并提交“SIP 数据包”
    • 受害者 IP 栈将 POST 分割成多个 TCP 数据包,使得“SIP 数据包”(作为 POST 数据的一部分)单独出现在一个不包含任何 HTTP 头部的 TCP 数据包中
    • 如果浏览器更改了 multipart/form 边界的大小(Firefox)或由于其他原因导致数据包大小改变,大小变化会传达给客户端,客户端自动以新大小重新发送
    • 打开 UDP 端口时,SIP 数据包通过 TURN 协议在特制的 username 字段中发送,强制 IP 分片并实现精确边界控制
  • (v2)生成“H.323 数据包”(使用基于 TCP 的 STUN,绕过 v1 的补丁和浏览器端口限制)包含内部 IP,触发应用层网关连接跟踪,但强制重定向到网络上的 任何其他主机,作为一个“呼叫转接”数据包
    • 向 TCP 端口 1720(H.323 端口)上的服务器发起“H.323 呼叫转接”,避开受限浏览器端口,尽管该端口被阻止——通过使用 WebRTC STUN 功能实现端口规避,该功能不遵守受限端口列表
    • username 字段被“填充”到精确的 TCP 分段大小/数据包边界,然后通过 Web 表单附加并提交“H.323 数据包”
    • 受害者 IP 栈将 POST 分割成多个 TCP 数据包,使得“H.323 数据包”(作为 STUN 数据的一部分)单独出现在一个不包含任何 HTTP 头部的 TCP 数据包中
    • 如果浏览器更改了 multipart/form 边界的大小(Firefox)或由于其他原因导致数据包大小改变,大小变化会传达给客户端,客户端自动以新大小重新发送
  • 受害者 NAT 看到 SIP 端口上正确的 SIP REGISTER 数据包或正确的 H.323 呼叫转接数据包(不含 HTTP 数据),触发 ALG 打开数据包中定义的任何 TCP/UDP 端口到网络上任何受害者主机
    • 受害者 NAT 重写 SIP 或 H.323 数据包,将内部 IP 替换为公共 IP,向攻击者提示攻击成功
    • (v2)由于 H.323 呼叫转接可以定向到任何其他 IP,数据包可以包含受害者网络上任何其他主机的任何内部 IP,从而触发 NAT 将端口转发到网络上的任何系统
    • 即使受害者 NAT 通常重写源端口,ALG 仍会被迫将端口转发到攻击者选择的端口,因为它认为受害机器(或网络上的其他机器,完全由攻击者决定)打开了该端口,攻击者可以在到达的 SIP/H.323 数据包中看到新的源端口
    • 攻击者现在可以绕过受害者 NAT 并直接连接回网络上任何机器的任何端口,从而暴露之前受保护/隐藏的服务和系统
  • 有待研究……也许由你来探索?
    • 非恶意用途:这种技术基本上为浏览器提供了完整的 TCP 和 UDP 套接字能力,可以与系统上的任何协议进行本地通信;连接可以通过云服务器抽象进行回连,但浏览器仅与云服务器通信,就像它是一个套接字一样,使浏览器能够在非 Web 友好协议上进行通信
    • 如果在虚拟机(VM)中使用共享网络(用于通过主机路由来保护主机免受攻击,不让它直接进入网络)进行测试,如果数据包能够出去,端口将在父宿主主机上打开,而不是在 VM 上 ;)
    • IP 分片允许完全控制 IP 数据部分中的所有数据,这意味着完全控制 UDP 头部,包括溢出数据包中的源/目标端口……这还能被用来滥用什么呢?

成功分割为有效 SIP 数据包的数据包

详解

网络地址转换 (NAT)

我们使用 NAT(网络地址转换)有几个原因。NAT 最有用的特性是允许单个公共 IP 地址被多个系统共享。它通过创建一个本地网络,为所有连接的机器提供本地 IP 地址,当其中一个系统访问互联网时,它会重写出站数据包以使用公共 IP,以便响应返回 NAT,反之亦然,重写目标 IP 为特定客户端的 IP。

NAT 需要区分来自内部主机的连接到相同地址/端口(google.com:443),因为最终它们的外出端口、目标 IP 和源 IP 都是相同的。如果两个不同的内部对等体尝试从相同的源端口连接,现代 NAT 会更改其中一个源端口(有些网络对所有 TCP/UDP 源端口都这样做)。

NAT

连接跟踪

来自 Wikipedia 通过 Wikiwand:``` One of the important features built on top of the Netfilter framework is connection tracking. Connection tracking allows the kernel to keep track of all logical network connections or sessions, and thereby relate all of the packets which may make up that connection. NAT relies on this information to translate all related packets in the same way, and iptables can use this information to act as a stateful firewall.

如果你的 NAT 后面的某台机器向外出站一个数据包,你的路由器预期远程主机可能会响应,于是它会记录相关信息,特别是源端口、目标端口、源 IP 地址、目标 IP 地址以及你的内部 IP,然后将任何匹配的数据包返回给你的内部 IP。

如果你的局域网中的另一台主机尝试使用相同的源端口、目标端口及 IP 发起同样的连接,你的 NAT 将无法区分它们(它们在局域网内的源 IP 不同,但在广域网侧都被改写为相同的公网 IP),因此它会修改源端口,但在回传给你时再将其改回。

### 应用层网关

ALG 允许 NAT 跟踪像 FTP 这样的多端口协议,使其从你的系统出去到 FTP 服务器,然后跟踪当你请求将某个文件发送到你的内部 IP 的特定端口时的情况,ALG 可以改写数据包,使其包含你的公网 IP,然后将 FTP 服务器的连接转发回给你。如果它没有改写你的 IP,FTP 服务器将会尝试通过你的内部 IP 回连给你(或者如果它期望源 IP 与信令连接的 IP 相同,则根本不会尝试)。
下载工具