一、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. Eclipse GBK批量转UTF-8插件(转)

    最近需要把Android项目转Android Studio,由于之前是eclipse开发,而且坑爹的是编码还是GBK的,转到Android Studio中文都是乱码,如果一个文件一个文件ctrl+c的 ...

  2. js将数组根据条件分组

    //将数组根据条件分组 function getTreeDateByParam(list, param, fun){ var data = {}; if(list && list.le ...

  3. python模块:xml.dom.minidom

    """Simple implementation of the Level 1 DOM. Namespaces and other minor Level 2 featu ...

  4. pyhon_day1 格式化输出

    格式化输出 我们在写Python的在很多时候输出的内容需要规定格式的,这样就引入到了格式化输出 定义: 盗用下大咖的例子: ------------ info of alex ----------- ...

  5. 杭州某知名xxxx公司急招大量java以及大数据开发工程师

    因公司战略以及业务拓展,收大量java攻城狮以及大数据开发攻城狮. 职位信息: java攻城狮: https://job.cnblogs.com/offer/56032 大数据开发攻城狮: https ...

  6. 任务调度及远端管理(基于Quartz.net)

    这篇文章我们来了解一些项目中的一个很重要的功能:任务调度 可能有些同学还不了解这个,其实简单点说任务调度与数据库中的Job是很相似的东西 只不过是运行的物理位置与管理方式有点不一样,从功能上来说我觉得 ...

  7. sql-向已有数据的表添加约束

    语法: alter table 表名 with nocheck add constraint 约束名 约束类型 具体的约束说明 对表中现有的数据不做检查, 只对添加约束后再录入的数据进行检查. 例子: ...

  8. JavaScript实现HTML页面集成QQ空间分享功能

    <!DOCTYPE HTML> <html> <head> <title>QQ空间分享</title> <meta http-equi ...

  9. Linux - 查看进程状态

    ps命令 report a snapshot of the current processes. 能提供一份当前进程的快照,以列表的形式显示正在运行的进程. 列出进程的数量取决于命令所附加的参数,例如 ...

  10. getResourceAsStream的3种路径配置

    getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’ ...