前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python3实现ICMP远控后门(中)之“嗅探”黑科技

Python3实现ICMP远控后门(中)之“嗅探”黑科技

作者头像
七夜安全博客
发布于 2018-06-26 05:40:31
发布于 2018-06-26 05:40:31
1.4K0
举报
文章被收录于专栏:七夜安全博客七夜安全博客

ICMP后门

前言

在上两篇文章中,详细讲解了ICMP协议,同时实现了一个具备完整功能的ping工具,完整的代码发布在https://github.com/qiyeboy/LuLunZi/blob/master/NetWork/ping.py中。本次讲的是嗅探,为什么要讲嗅探呢?和ICMP后门有什么关系呢?本篇的干货有点多。。。

第一节

ICMP后门结构

设计的ICMP后门采用的是典型的C/S结构,分为客户端和服务端,根据客户端和服务端的位置又分为正向连接和反向连接。对于TCPUDP后门来说,正向和反向连接是有很大区别的,反向连接的目的之一就是为了规避正向连接时防火墙拦截端口绑定的问题。下面先讲一下正向连接和反向连接的概念。早期采用的是正向连接,现在更常见的是反向连接。

正向连接

正向连接时,server位于受控端,拥有公网ip,同时监听端口,等待连接。正向连接为什么逐渐被淘汰了呢?有几点原因,首先受控端的server程序需要绑定端口,容易被主机上的防火墙拦截发现,例如下图的情景。

接着是由于随着连接的控制端增多,受控端负载过大,易被发现,而且不适合大规模控制。最后是假如受控端是在内网中,正向连接就失去作用。

反向连接

反向连接就很好的规避了正向连接中的问题,受控端可以有公网ip,也可以没有,需要控制端拥有一个公网的主机即可,一般都是用VPS

ICMP协议和TCP,UDP协议有很大的区别,ICMP没有端口的概念,就是说它不是通过端口来识别ICMP发送与接收进程的,也就没有端口绑定被拦截的问题,也避开了通过端口反查进程的检测手段

正是ICMP协议没有端口的概念,也就无法直接建立两台主机上ICMP应用程序的通信,记住我说的是应用程序。大家肯定会疑问ping不就可以吗?其实ping本质上是位于系统内核。下面通过一张图来说明操作系统对icmp的处理。

假如用我写的ping.py程序,在受控端ping控制端,ICMP请求包通过网络传到控制端,在控制端的系统内核中,就直接生成ICMP响应返回给受控端的ping.py,根本不会由控制端的ping.py响应。也就是说ping.py本质上是ICMP协议的客户端,而不是服务端,服务端始终是主机的系统内核来完成了。

为难的地方也就出现了?服务端不受控制,那我们如何完成受控端应用程序和控制端应用程序的通信呢?其实不一定让两者直接通信,可以间接通信,只要受控端和控制端知道互相发送的内容不就可以了,这就是下一节的知识点

第二节

“嗅探”黑科技

嗅探不知道大家熟不熟悉?大家肯定用过wireshark抓包吧,这就是嗅探的典型应用。虽然受控端发来的ping包,无法直接发给控制端的ping.py,但是控制端可以通过嗅探的方式抓取传输过来的ping包,获取里面的内容,然后主动发响应包给受控端,同理受控端也是如此。ICMP后门的通信结构就变成了下图所示的样子。

windows和linux平台嗅探ICMP的方式和编程内容差距有点大,linux相对简单。

windows平台嗅探ICMP

以嗅探ICMP数据包为例,代码如下,请详细看注释哈。

HOST="10.170.19.126"

# 创建原始套接字,然后绑定在公开接口上。在windows上使用ip协议

if os.name == "nt":

socket_protocol = socket.IPPROTO_IP

else:

socket_protocol = socket.IPPROTO_ICMP

rawSocket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)

# 该选项可以让多个socket对象绑定到相同的地址和端口上

rawSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

我们调用bind方法,来绑定socket

rawSocket.bind((HOST, 0))

#通过setsockopt函数来设置数据保护IP头部,IP头部我们就可以接收到

rawSocket.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# 在WIN平台上,需要设置IOCTL以启用混杂模式

if os.name == "nt":

rawSocket.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

在上述代码中,我们主要说的是bind,bind HOST其实绑定的是HOST所对应的网卡,一台电脑其实可以多个网卡的,包括虚拟的。在windows中,需要我们将网卡设置为混杂模式,这样就可以接受到所有经过本网卡的数据包。至于混杂模式的解释,百度百科中有。

经过上面的设置,raw socket就可以嗅探了,下面把嗅探的内容打印出来,代码如下:

while True:

pkt = rawSocket.recvfrom(2048)

print(pkt)

通过管理员权限运行这个程序,ping一下自己的ip,看到ICMP报文被抓住了。

Linux平台嗅探 ICMP

嗅探ICMP数据包,代码如下,请详细看注释哈。

#设置监听ICMP数据包

rawSocket = socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_ICMP)

#通过setsockopt函数来设置数据保护IP头部,IP头部我们就可以接收到

rawSocket.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

while True:

pkt= rawSocket.recvfrom(2048)

print(pkt)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七夜安全博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Web前端教程-HTML及标签的使用
1. HTML简介 HTML由标签和属性构成的 1.1. HTML文档基本结构 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>网页标题</title> </head> <body> 网页显示内容 </body> </html> 2. 标签 学习html语言就是学习标签的用法 2.1. 标签语法 长在尖号后面第一个单词就是标签(标记,元素) 一组告诉浏览器如何处理一些内容的标签,通过关键字来识别, <body>, <title>, <m
用户1289394
2021/10/26
1.1K0
HTML标签学习
h1到h6:会将其中的数据加粗显示,并且显示依次减弱,标题标签自带换行功能(块级标签)
全栈程序员站长
2021/04/21
1.1K0
HTML标签学习
前端学习(2)~html标签讲解(二)
<dl>英文单词:definition list,没有属性。dl的子元素只能是dt和dd。
Vincent-yuan
2020/02/23
2.5K0
【Web世界探险家】HTML5 探索与实践
学习任何一门语言,首先要掌握它的基本格式,就像写信需要符合书信的格式要求一样。学习 HTML ,同样需要掌握 HTML 的基本格式。
爱敲代码的小杨.
2024/05/07
1640
【Web世界探险家】HTML5 探索与实践
前端 — HTML
标签之间的结构关系, 构成了一个 DOM 树 D: Document 文档 O: Object 对象 M: Model 模型
全栈程序员站长
2022/08/22
2.7K0
前端 — HTML
HTML标签(二)
表格是用来显示数据的,那么列表就是用来布局的。 列表最大的特点就是整齐、整洁、有序,它作为布局会更加自由和方便。 根据使用情景不同,列表可以分为三大类:无序列表、有序列表和自定义列表。
P_M_P
2024/01/25
4360
HTML标签(二)
HTML(2)
一丶标签的使用 1.a标签的补充     (1)超链接       href:超链接的地址       target; _self 默认在当前页面中打开链接地址         _blank 在空白页中打开链接地址 <!DOCTYPE html> <html> <head> <title>a标签</title> </head> <body> <a href="http://img5.imgtn.bdimg.com/it/u=415293130,2419074865&fm=27&gp=
py3study
2020/01/19
3.7K0
HTML(2)
html标签详解
<!DOCTYPE> 标签 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前。 <!DOCTYPE> 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。 <!DOCTYPE html> <head>内的标签 标签意义 <title></title> 定义网页标题 <style></style> 定义内部样式表 <script></script> 定义JS代码或引入外部JS文件 <link/> 引入外部
人生不如戏
2018/04/12
2.8K0
【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)
<table>标签包含<tr>标签,<tr>标签包含<td>标签或者<th>标签。
枫叶丹
2024/08/06
2560
【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)
【前端基础篇】HTML零基础速通
在 IDEA 中创建文件 xxx.html , 直接输入 ! , 按 tab 键, 此时能自动生成代码的主体框架.
半截诗
2024/10/09
2010
【前端基础篇】HTML零基础速通
【Python3】HTML基础
BS(Browser-Server)模式:顾名思义为浏览器-服务器的意思,对比的话类似我们PC上面浏览器使用的产品即为BS模式产品,例如google doc、各类网站等。
py3study
2020/01/06
9100
前端HTML万字血书大总结,来看看你入门了吗?
    网页主要由文字、图像和超链接等元素构成。当然,除了这些元素,网页中还可以包含音频、视频以及Flash等。
上分如喝水
2021/08/16
1.6K0
前端HTML万字血书大总结,来看看你入门了吗?
初识HTML之基础篇
前端认知 ---- 一、公司开发流程 1、 产品需求(产品经理给需求文档) 2、项目设计(视觉设计师给PSD文件,交互设计师配合) 3、前端开发 4、后端开发 5、测试 6、上线运营 二、前端开发的核心语言 HTML 超文本标记语言 (负责页面结构) CSS 层叠样式表 (负责页面样式) JS 脚本语言 (负责页面行为) ---- HTML的基本结构 <!DOCTYPE html> /*文档头声明*/<html lang="en"> /*HTML中的根元素*
用户1667431
2018/04/18
1.9K0
【Java Web_01】HTML
一、浏览器介绍 1. 浏览器内核 ① 五大浏览器 Edge(IE)【微软】 Firefox【火狐】 Chrome【谷歌】 Safari【苹果】 Opera【欧鹏】 ② 内核 Trident ---> Edge(IE) Gecko ---> Firefox【火狐】 Bink ---> Chrome【谷歌】 webkit ---> Safari Presto ---> Opera【欧鹏】 2. 浏览器标准 * Web标准不是某一
用户8250147
2021/02/04
2.5K0
十分钟学会 HTML
   HTML 是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言,这种语言由一个个的标签组成,用这种语言制作的文件保存的是一个文本文件,文件的扩展名为 .html 或者 .htm。
Demo_Null
2020/09/28
1.6K0
十分钟学会 HTML
HTML页面
HTML5是用来描述网页的一种语言,被称为超文本标记语言。用HTML5编写的文件,后缀以.html结尾
用户9645905
2023/10/23
9980
HTML结构
在 IDEA 中创建文件 xxx.html , 直接输入 ! , 按 tab 键, 此时能自动生成代码的主体框架.
半截诗
2025/03/08
2210
前端开发学习──初识Html
type:disc默认 实心小圆圈;square 小方块;circle 空心小圆圈
用户3106371
2018/09/12
1.9K0
前端开发学习──初识Html
【web前端】web前端设计入门到实战第一弹——html基础精华
同级路径: 直接写图片名 或者./+图片名 下级路径: 写文件夹名字 + 图片名 上级路径: 先到上一文件夹 到上一级目录 …/ 当看到目标文件时再进入再找图片名 属性名:title 属性值:提示文本 当鼠标悬停是才显示的文本
洁洁
2023/10/19
3180
Web前端开发HTML笔记
HTML称为超文本标记语言,CSS全称层叠样式,CSS可以让简单的HTML页面变得漂亮起来,通常会将HTML与CSS结合起来使用.
王 瑞
2022/12/28
2.5K0
相关推荐
Web前端教程-HTML及标签的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档