一、ICMP隧道

背景:已经通过某种手段拿到了园区网A主机的控制权,但是边界防火墙只放行该主机向外的ICMP流量,此时怎样才能让A主机和公网主机C建立TCP连接呢?

方案:将TCP包内容包裹在ICMP中进行传递

工具: ptunnel

工作原理:A主机通过周期性向渗透测试工程师发送ICMP请求以建立ICMP连接。在本地侦听一个空闲端口并与指定IP的指定端口(C主机)建立映射。此时访问侦听的这个端口就相当于访问公网指定IP的指定端口了(C主机)

隧道建立命令:

渗透测试工程师端(开启这个程序后本地不会侦听任何端口,因为它用的是ICMP,既不属于TCP也不属于UDP):
ptunnel -x passwd

参数说明:
-x:密码

A主机端:
ptunnel -p 120.1.1.1 -lp 8000 -da 180.1.1.1 -dp 80 -x passwd

参数说明:
-p:渗透测试工程师IP地址
-lp:本地侦听端口
-da:C主机
-dp:C主机端口
-x:密码

验证:此时在A主机将侦听8000端口,A、B主机此时连接A主机8000端口的TCP流量均被导入C主机的80端口

缺点:唯一的缺点是运行此程序需要root权限

提醒:如果觉得每个隧道只能映射一个公网地址有局限性,可以配合SSH动态端口使用。通过此方法建立ICMP隧道后,再在此隧道内建立一条SSH动态端口转发隧道就可以访问公网任意地址了

二、http隧道

背景:已经通过某种手段拿到了园区网内A主机的控制权,但是边界防火墙只放行代理服务器的出向流量,可是又想用A主机与外面的PC建立ssh连接时该怎么办?

方案:让http代理服务器代替A主机与PC建立ssh连接

工作原理:在本地侦听一个空闲端口,并将PC的22端口映射至该侦听端口,然后将通往PC22端口的流量包裹进代理服务器的http包中,代理服务器将代替A主机与PC建立ssh连接,然后将回包通过http反还给A主机。此时园区网内所有设备只要sshA主机侦听的端口,流量就会被导入PC的22端口。(另外该方案还支持代理链,即通过代理服务器连接至外网的某一代理服务器,再通过该代理服务器与PC建立ssh连接)

隧道建立命令:proxytunnel -a 2222 -p 10.1.1.1:3128 -r 180.1.1.1:80 -d 120.1.1.1:22

-a:本地侦听端口
-p: 本地官方的代理服务器
-r: 墙外的代理服务器
-d: 最终要访问的目标

验证:A主机将在0.0.0.0侦听2222端口,此时园区网内任意一主机ssh主机A的2222端口都将连到PC的22端口

三、UDP隧道

背景:通过某种手段拿到了园区网A主机的控制权,却发现边界防火墙只放行向外的DNS请求流量,此时想要ssh公网上的B主机该怎么办?

方案:将ssh流量包裹在DNS请求报文中

工作原理:搭建一个DNS服务器(B主机),申请域名,并确保上级DNS服务器能将该域名解析至自己的DNS服务器。A主机向公网发出DNS请求(因为A记录长度有限,故可以请求txt这种记录,请求的txt内容就为ssh流量),经过根DNS将流量解析至自己的DNS服务器(B主机),这样公网的主机B就收到了A主机发来的ssh协商请求,然后B主机通过将协商内容写入DNS应答包返回给主机A,这样一来一回就达成了建立ssh连接的网络环境。

由于这种隧道搭建需要一定成本(要让根DNS解析至自己主机),所以就没有做实验验证了。

需要提醒一点:大家都知道DNS会用到UDP的53端口和TCP的53端口,但需要注意的是UDP的53端口是用来做DNS查询使用,TCP的53端口是用用于同一区域冗余DNS之间同步信息,并非这俩端口都是用来做DNS查询的,所以网络管理员一般在边界防火墙只需放开UDP的53端口即可。

总结:归根结底,每种隧道的实现其实都是将协商数据封装至可以放行的流量中。(即:防火墙放行什么协议就将隧道协商流量封装至什么协议)

绕过边界防火墙之ICMP隧道、HTTP隧道、UDP隧道的更多相关文章

  1. Kcptun 是一个非常简单和快速的,基于KCP 协议的UDP 隧道,它可以将TCP 流转换为KCP+UDP 流

    本博客曾经发布了通过 Finalspeed 加速 Shadowsocks 的教程,大家普遍反映能达到一个非常不错的速度.Finalspeed 虽好,就是内存占用稍高,不适合服务器内存本来就小的用户:而 ...

  2. labview中的移位寄存器、循环隧道,自动索引隧道的区别

    对于循环结构(For 循环.while循环)而言,循环体内的数据域外部数据的传递是通过以下三种方式: 1.移位寄存器2.循环隧道3.自动索引隧道 第一.各自的区别.作用 循环隧道,就是把数据传入传出循 ...

  3. 华三F100系列防火墙 、华为USG6300系列防火 GRE 隧道配置

    GRE概述: 通用路由封装(GRE: Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPV4网络中传输 ...

  4. 利用ICMP进行命令控制和隧道传输

    目录 使用ICMP进行命令控制 使用ICMP搭建隧道 使用ICMP进行命令控制 攻击机:Kali  192.168.10.11 靶机:Windows 192.168.10.1 使用的工具:icmpsh ...

  5. Firewalld防火墙与ICMP攻击

    原文地址:http://www.excelib.com/article/293/show 提到ICMP大家应该都很熟悉,可能有人会说:不就是ping吗?但是说到ICMP攻击以及相关防御措施可能就有的人 ...

  6. 使用 connect http proxy 绕过 ssh 防火墙限制

    1.安装 connect brew install connect 2.配置 ~/.ssh/config Host * ProxyCommand connect -H your.proxy.serve ...

  7. DNS隧道工具:iodine使用

      iodine可以通过一台dns服务器制造一个IPv4数据通道,特别适合在目标主机只能发送dns请求的网络中环境中使用.iodine是基于C语言开发的,分为服务端程序iodined和客户端程序iod ...

  8. Linux/Unix System Level Attack、Privilege Escalation(undone)

    目录 . How To Start A System Level Attack . Remote Access Attack . Local Access Attack . After Get Roo ...

  9. 小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

    三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议 ...

随机推荐

  1. RNQOJ 4 数列

    把N化成二进制是关键,比如把序号10化成二进制就是1010,对于K=2来说第10个数就是2^3+2^1,对于k=3来说第10个数就是3^3+3^1;这里只需要把K替代一下就可以解决了 #include ...

  2. bootstrap添加遮罩层loadingmask

    转自:https://blog.csdn.net/baidu_30809315/article/details/83900255 gif动态图下载地址:http://blog.sina.com.cn/ ...

  3. s5 Docker的持久化存储和数据共享

    数据库容器的数据如何才能不会丢失?Docker的持久化存储技术.Docker的数据共享技术能极大提高开发人员的开发效率,边写代码,边看运行结果. 数据持久化之Data Volume Docker持久化 ...

  4. JAVA核心问题(一)反射之引言 构造函数

    反射,简单来说,就是在运行时获取Class对象的所有属性和方法,无论公有私有.虽然是一个基础问题,在这里还是全面的记录一下,认真对待! 获取构造函数 构造函数大致分为两种,public和非public ...

  5. 卷积在图像处理中的应用(转自https://medium.com/@irhumshafkat/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1)

    直观理解深度学习的卷积 探索使他们工作的强大视觉层次   近年来强大且多功能的深度学习框架的出现使得可以将卷积层应用到深度学习模型中,这是一项非常简单的任务,通常可以在一行代码中实现. 然而,理解卷积 ...

  6. Python学习第2章

    1.字符串: python中创建字符串我们可以使用引号''或"'. python访问子字符串,可以使用方括号来截取字符串: var="hello world!" var2 ...

  7. Python自动化开发 - MySQL(一)

    本节内容 一.概述 二.下载安装 三.数据库操作 四.数据表操作 五.表内容操作 一.概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么 ...

  8. Delphi控件cxGrid 如何动态创建列?

    方法一: var i: Integer; Column: TcxGridDBColumn; cxView: TcxGridDBTableView; begin cxView := Self.Level ...

  9. 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素

    [源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...

  10. Spring Data Solr的分组查询 for 搜索面板的商品分类

    private List searchCategoryList(Map searchMap) { SimpleQuery query = new SimpleQuery(new Criteria(&q ...