专栏首页博文视点Broadview《Python黑帽子》:原始套接字和流量嗅探

《Python黑帽子》:原始套接字和流量嗅探

通过网络嗅探,我们可以捕获目标机器接收和发送的数据包。因此,流量嗅探在渗透攻击之前或之后的各个阶段都有许多实际用途。在某些情况下,你可能会使用Wireshark(http://wireshark.org)监听流量,也可能会使用基于Python的解决方案如Scapy。尽管如此,了解和掌握如何快速地编写自己的嗅探器,从而显示和解码网络流量,仍是一件很酷炫的事情。编写这样的工具也能加深你对那些能妥善处理各种细节、让你使用起来不费吹灰之力的成熟工具的敬意。你还很可能从中学到一些新的Python 编程技术,加深对底层网络工作方式的理解。

通过TCP 和UDP 发送和接收数据包,按理说,这应该是我们与绝大部分网络服务进行交互的方式,但在这些高层协议之下,网络数据包的发送和接收还涉及一些底层的知识。在本文中,我们将使用原始套接字来访问诸如IP 和ICMP 头等底层的网络信息。在下面的例子中,我们只对IP 层和更高层感兴趣,因此我们不会去解码以太网头中的信息。当然,如果你打算实施底层的攻击如ARP 投毒或开发无线安全评估工具的话,就需要对以太网头的架构和它们的利用方法非常熟悉了。

下面我们就从如何发现网段中的存活主机开始吧。

开发UDP 主机发现工具

嗅探工具的主要目标是基于UDP 发现目标网络中的存活主机。攻击者需要了解网络中所有潜在的目标以便他们开展侦察和漏洞攻击尝试。

绝大部分操作系统在处理UDP 闭合端口时,存在一种共性行为,我们可以通过这种行为来确定某个IP 地址上是否有主机存活。当你发送一个UDP 数据包到主机的某个关闭的UDP 端口上时,目标主机通常会返回一个ICMP 包指示目标端口不可达。这样的ICMP 信息意味着目标主机是存活的,因为我们可以假设如果没有接收到发送的UDP 数据的任何响应,目标主机应该不存在。挑选一个不太可能被使用的UDP 端口来确保这种方式的有效性是必要的,为了达到最大范围的覆盖度,我们可以查探多个端口以避免正好将数据发送到活动的UDP 服务上。

为什么使用UDP 呢?因为用UDP 对整个子网发送信息,然后等待相应的ICMP 响应返回,这个过程不需要什么开销。比起解码和分析各种不同的网络协议头,这个扫描器是非常简单的了。我们的主机扫描器将兼容Windows 和Linux 系统,以便最大化其适用于企业内部环境的可能性。

我们还应该在扫描器中添加额外的功能,在程序中调用Nmap 对发现的任何主机进行完整的端口扫描,以判断对它们进行网络攻击是否可行。这个过程就留给读者来完成了,我非常期待你们能使用创造性的方法对扫描器进行扩展。下面我们开始吧。

Windows 和Linux 上的包嗅探

在Windows 和Linux 上访问原始套接字有些许不同,但我们更中意于在多平台部署同样的嗅探器以实现更大的灵活性。我们将先创建套接字对象,然后再判断程序在哪个平台上运行。在Windows 平台上,我们需要通过套接字输入/输出控制(IOCTL)1设置一些额外的标志,它允许在网络接口上启用混杂模式。在第一个例子中,我们只需设置原始套接字嗅探器,读取一个数据包,然后退出即可。

首先,我们通过构建套接字对象对网络接口上的数据包嗅探进行必要的参数设置①。Windows 和Linux 的区别是Windows 允许我们嗅探所有协议的所有数据包,但Linux 只能嗅探到ICMP 数据。我们使用了混杂模式,这在Windows上需要管理员权限,在Linux 上需要root 权限。混杂模式允许我们嗅探网卡上流经的所有数据包,即使数据的目的地址不是本机。然后,我们通过设置套接字选项②设置在捕获的数据包中包含IP 头。下一步③,我们判断程序是否运行在Windows 上,如果是,那么我们发送IOCTL 信号到网卡驱动上以启用混杂模式。如果你是在虚拟机上运行Windows,那么你可能会得到在客户机系统上是否启用混杂模式的通知,当然,你需要允许启用。现在,我们可以进行实际的包嗅探了,在这个例子中我们只是输出了整个原始数据包④而没有解码。目的是测试一下,以确保我们的嗅探代码能正常工作。捕获到单个数据包之后,我们重新检测Windows 平台,然后在退出脚本之前关闭混杂模式。

小试牛刀

在Windows 系统上打开一个新的终端或cmd 窗口,然后运行脚本:

在另外的终端或shell 窗口中ping 某个主机,这里,我们ping nostarch.com:

在运行嗅探器的第一个窗口中,你会看到类似于下面的输出:

可以看到,我们捕获到的是发送到nostarch.com 的ICMP ping 请求包(基于数据中的nostarch.com 字符串)。如果你是在Linux 上运行的这段代码,那么你将接收到nostarch.com 的ICMP 响应包。仅嗅探一个数据包并没有多少实际用处,因此,我们将添加一些功能来处理更多的数据包并解码其中的内容。

————本文节选自《Python 黑帽子:黑客与渗透测试编程之道》

本文分享自微信公众号 - 博文视点Broadview(bvbooks)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【本周重磅】构建优雅高水准的JavaScript应用

    值得所有前端人员细细品读的经典,来自一线实践经验总结,提升JavaScript性能立竿见影

    博文视点Broadview
  • 今年最值得期待的JavaScript传奇绿皮书登场!

    它就是有着 JavaScript 传奇绿皮书美名的《JavaScript语言精髓与编程实践》!在经过了两个版本的积累和三年的全面重写后,我们迎来了它的第三版的问...

    博文视点Broadview
  • 下一代构建工具:Gradle

    今天,大多数项目都包含有多而杂的技术栈、混合的多种编程语言,并使用多种测试策略。随着敏捷实践的崛起,构建不得不更早地支持代码集成,以及频繁和简单地交付软件到测试...

    博文视点Broadview
  • 抄笔记:尤雨溪在Vue3.0 Beta直播里聊到了这些…

    在 4 月 21 日晚,Vue 作者尤雨溪在哔哩哔哩直播分享了Vue.js 3.0 Beta最新进展。以下是直播内容整理

    前端劝退师
  • eclipse:找到项目所在路径

    桑鱼
  • 腾讯安全团队深入解析wannacry蠕虫病毒

    ? 作者:腾讯电脑管家 来源: http://www.freebuf.com/articles/system/134578.html 背景: 2017年5...

    小小科
  • 腾讯安全团队深入解析wannacry蠕虫病毒

    前言 原文作者:腾讯电脑管家 来源:http://www.freebuf.com/articles/system/134578.html 我只是知识的搬运...

    若与
  • WannaCry 蠕虫详细分析

    2017 年 5 月 12 日,WannaCry 蠕虫通过 MS17-010 漏洞在全球范围大爆发,感染了大量的计算机,该蠕虫感染计算机后会向计算机中植入敲诈者...

    杜成法
  • 学界 | 语音合成领域的首个完全端到端模型,百度提出并行音频波形生成模型ClariNet

    最近,百度硅谷人工智能实验室的研究员提出了 ClariNet,一种全新的基于 WaveNet 的并行音频波形(raw audio waveform)生成模型。W...

    机器之心
  • 【OCP最新题库解析(052)--题28】Which action is automatically perfo

    A. gathering metadata from the Automatic Diagnostic Repository(ADR)

    小麦苗DBA宝典

扫码关注云+社区

领取腾讯云代金券