一、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. 【转】C#单元测试,带你快速入门

    [转]C#单元测试,带你快速入门 注:本文示例环境 VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.1 ...

  2. 【转】nc 使用说明

    netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据.通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它.使用netcat命令所能完成的事情令人惊讶. netcat所做的 ...

  3. C++获取工程路径、exe路径

    编码过程中有时候会用到获取工程所在路径或者exe所在的路径信息,这里稍微记录下. 获取工程路径 char pBuf[MAX_PATH]; //存放路径的变量 GetCurrentDirectory(M ...

  4. A股、B股区别

    A股也称为人民币普通股票.流通股.社会公众股.普通股.是指那些在中国大陆注册.在中国大陆上市的普通股票.以人民币认购和交易. A股不是实物股票,以无纸化电子记帐,实行“T+1”交割制度,有涨跌幅(10 ...

  5. 执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误

    使用get-executionpolicy查看当前的脚本执行策略, 默认是Restricted, 也就是不允许任何脚本运行. 此时应该使用set-executionpolicy remotesigne ...

  6. 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件

    [源码下载] 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebVi ...

  7. Django _VIEW视图_源码分析

    Django _VIEW视图: 1. 点击as_view方法. 第二步: as_view () 为VIEW 类里定义的,到时候我们定义业务逻辑的类就继承这个VIEW类. view方法内返回的是disp ...

  8. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  9. Django orm 实现批量插入数据

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...

  10. Behavior Tree 用 Lua 实现一个最简行为树

    local function Traverse(node, ...) local t = node.type if t == SELECTOR then , #node do if Traverse( ...