前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Python黑帽子》:原始套接字和流量嗅探

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

作者头像
博文视点Broadview
发布2020-06-11 15:08:47
1.3K0
发布2020-06-11 15:08:47
举报

通过网络嗅探,我们可以捕获目标机器接收和发送的数据包。因此,流量嗅探在渗透攻击之前或之后的各个阶段都有许多实际用途。在某些情况下,你可能会使用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 黑帽子:黑客与渗透测试编程之道》

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

本文分享自 博文视点Broadview 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 小试牛刀
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档