钓鱼WiFi——wifipumpkin3

发布于 2021-12-14  1739 次阅读


写在前面

  之前有些过一篇攻防演练项目的心路历程,其中有提到钓鱼WiFi的这样一个场景,当时没有详细说明,在这里具体讲解一下这个场景的一些技术细节及工具的使用,我尽量贴合实际情况去进行。

安装

下载地址:git clone https://github.com/P0cL4bs/wifipumpkin.git

检查是否安装了PyQt5

  新版的kali中已经默认安装了PyQt5,可以使用以下命令进行检查:

python3 -c “from PyQt5.QtCore import QSettings; print(‘hello’)”

  以下为安装了PyQt5的命令执行结果——输出了"hello"

image-20211206155202057

安装PyQt5

  为了防止有些同学没有PyQt5框架,这边安装也写在这里。

PyQt5 的官网链接如下:

http://www.riverbankcomputing.co.uk/news

当然也可以在 Python 这里查看教程。

https://pythonspot.com/pyqt5/

  以下是Windows平台的安装,当然Linux也是一样的。PyQt5 有两种安装方式,一种是从官网下载源码安装,另外一种是使用 pip 安装。
  推荐使用pip安装,它会自动根据你的Python 版本来选择合适的 PyQt5 版本

pip3 install PyQt5 

  还有一个是PyQt5-tools的安装,不过这个对于这片文章并没有太多的作用,这里就不叙述了。安装成功的验证也可以使用上面的命令。

安装本体

  安装了PyQt5后接下来开始安装wifipumpkin,在git资源后保存的目录中键入以下命令,然后等待安装完成。

sudo python3 setup.py install

检查依赖安装

  这是这篇文章一个坑,正式进行攻击之前确定好依赖是否安装完善。

# 可以加"-y",遇到判断是否安装某些分支时,默认输入"y"并进行确认
apt-get install hostapd  
apt-get install libssl-dev libffi-dev build-essential
apt-get install python3-pyqt5

  安装完成后我比较喜欢用whereis这个命令来验证是否安装,以下为安装完成的验证截图

image-20211206163413193

启动WiFipympkin3

# 终端输入
wifipumpkin

image-20211206160842036

  之后就是工具的使用。

开始你的攻击——创建一个WiFi

  注意,创建钓鱼WiFi需要一个无线WiFi发射器,这个硬件的话需要自己购买,能力足够的话还可以自行制作,我这里使用的下图中的这样的硬件。

image-20211206161914723

命令创建

  插上硬件之后,在网络信息中就会看到相应的wlan网络,然后使用wifipumpkin利用此网卡创建钓鱼WiFi。

image-20211206162101460

  使用以下命令创建WiFi网络,这里我并没有设置钓鱼页面,也就是设置插件的选项选择了noproxy,在真正的攻击中,记得设置相应的页面进行钓鱼,插件这个会放在下面进行叙述。

# 设置无线网卡
set interface wlan0
# 设置无线网络名称
set ssid test
# 设置插件
set proxy noproxy
#开启dns转发
ignore pydns_server
#开始攻击
start

  完成后如下图:

image-20211206164040263

  而在WiFi列表中也出现了相应的无线网络,只是不知道怎么回事我的电脑启动这些之后性能占用猛增。

小插曲——钓鱼WiFi启用后,我电脑的键盘就不能用了,也不知道是因为什么,看来上苍不让我这么玩啊hhhh

image-20211206164134635

  还有一个问题就是我中间断了一次连接之后,再次去启动的时候会提示地址被占用,所以退出之前记得及时停止,或者重新键入sessionid重新进入回话,因为之前并没有记录所以没能重新回去,除了停止之外,可以试试用kill命令干掉相应的进程。
  后面也看了一下官方的使用手册,在后台输入jobs命令就可以查看所有的进程,然后再使用-s SESSION进入相应的会话。
  在后续的使用中其实wifipumpkin3相对来说并不是很稳定,比如说有些情况下终端连入之后退出钓鱼WiFi就不能再次连接,再比如wifipumpkin3在某些情况下会莫名其妙自动终止钓鱼WiFi进程,再再比如某些情况下钓鱼WiFi信号会莫名消失,但wifipumpkin3上的进程却是正常的。这些问题我也没有找到解决办法,看来之后看以后作者的更新情况了。

image-20211206171049442

  现在测试一下连接效果。

image-20211206172409866

image-20211206171443157

  可以看到我的测试机的连接和断开,这样就没有问题了
  至于怎么结束,键入stop命令结束钓鱼WiFi进程。

image-20211206172548914

配置文件创建

  除了使用命令的创建钓鱼WiFi的方式,还有更简便的方法——编写配置文件。
  将原本键入的命令保存到*.pulp文件。

image-20211206173436701

  使用以下命令直接读取,注意文件路径,这里我就不展示这个方式的效果了,感兴趣的可以做一下。

wifipumpkin --pulp *.pulp

使用插件——利用captiveflask强制用户登录

拦截HTTP流量

  顾名思义,钓鱼WiFi,不钓鱼怎么能叫钓鱼WiFi呢,钓鱼所用到的就是captiveflask插件功能了,这个插件功能是在代理功能中进行设置,使用proxies可以查看代理设置,也可以查看钓鱼页面设置,set proxy captiveflask即可启用相应功能。

image-20211206174733940

  wifipumpkin内置有默认登录页面,登录页面保存在../wifipumpkin/plugins/captiveflask/因为我还在研究当中,自定义登录网页会写在后面,可以继续学习一下。

image-20211206175521283

  使用set proxy captiveflask.* true命令设置登录页面。

image-20211206180224914

  设置完成后就可以启动WiFi测试效果了。连接WiFi之后会自动弹出连接页面。

image-20211207200725347

  在这里里面输入内容之后会被后台监听抓取到,这个页面可以进行自定义,比如说更改成使用邮箱或者某些账号登录,就可以实施钓鱼了。
  在未登录之前,所有的http网站都是无法访问的,但是要注意的是,这个插件无法拦截https流量。

image-20211207200525869

拦截HTTPS流量

  拦截HTTPS流量需要进行一定的配置,在../wifipumpkin/core/servers/proxy/captiveflask.py中进行修改,在Initialize()函数中添加以下内容

print(display_messages("redirecting HTTPS traffic", info=True))
        self.add_default_rules(
            "{iptables} -t nat -A PREROUTING -i {iface} -p tcp --dport 443 -j DNAT --to-destination {ip}:443".format(
                iptables=self.getIptablesPath, iface=IFACE, ip=IP_ADDRESS, port=PORT
            )
        ) 

image-20211209111552247

  重新更新wifipumpkin

python3 setup.py install

  最后经过测试,确实HTTPS流量在登录之前被拦截不转发,但是登录后依旧没能转发,可以说并没有完成它原本可以上网的功能,这里最为主要的就是没有添加ip_forward


临时设置

使用sysctl指令配置

  sysctl 命令的 -w 参数可以实时修改Linux的内核参数,并生效。所以使用如下命令可以开发Linux的路由转发功能。

sysctl -w net.ipv4.ip_forward=1

修改内核参数的映射文件:/proc/sys/net/ipv4/ip_forward

  内核参数在Linux文件系统中的映射出的文件:/proc/sys/net/ipv4/ip_forward中记录了Linux系统当前对路由转发功能的支持情况。文件中的值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开。可使用vi编辑器修改文件的内容,也可以使用如下指令修改文件内容:

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

永久配置

修改/etc/sysctl.conf 配置文件

  在sysctl.conf配置文件中有一项名为net.ipv4.ip_forward的配置项,用于配置Linux内核中的net.ipv4.ip_forward参数。其值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开。需要注意的是,修改sysctl.conf文件后需要执行指令sysctl -p 后新的配置才会生效。


  设置完成ip_forward后理论上是可以正常访问网页了,这个时候我测试了微信发送消息,就可以成功发送了。但是访问百度依然不可以。在查找日志之后确定了问题。

image-20211209190418889

  通过日志发现,DNS解析出现问题,并没有正常解析域名导致网站并不能正常访问。这个应该和我自己的系统没有配置DNS地址有关系。这个我就不再继续深究了,如果感兴趣自己可以挖一下。

自定义钓鱼页面

  按官方手册来说,有点不太好理解,我这看到了一个比较直接的方式。
  首先在wifipumpkin/wifipumpkin/plugins/captiveflask目录添加一个模板,这里可以直接复制一份DarkLogin.py复制一份,重命名为自己想要的名称,比如test.py,然后编辑复制的文件将所有的Darklogin全部替换成文件名。

image-20211214192152994

  修改配置文件wifipumpkin/config/app/captive-portal.ini

image-20211214200555609

  接着把前端模板按照flask的目录格式放到wifipumpkin/config/templates/test文件夹下

image-20211214201216625

  这里一定要重新进行编译,不然进行的设置不会加载。
  最后,测试效果,设置这里已经出现了相关的选项。

image-20211214201959860

  启动钓鱼WiFi看看访问登录页面查看一下,不过在这里有一个问题,就是我重新编译了之后再次启动,选项什么都是OK的,但是钓鱼页面迟迟没有更新,一气之下重启了kali-linux,然后就惊喜的发现页面正常了。莫名其妙的原因。

image-20211214210444678

取消身份攻击

  钓鱼WiFi在时间上是部署在正常WiFi之后的,不能只等待受害者去被动连接,我们要主动出击,让他们不得不连接我们部署的钓鱼WiFi,这就需要用到wifipumpkin取消身份验证攻击
  那么,什么是WiFi取消身份验证攻击?WiFi取消身份验证攻击是一种拒绝服务攻击,它以用户和WiFi接入点之间的通信为目标。攻击者可以随时模拟带有身份验证对象的地址,将利用假地址生成的取消身份验证帧发送到无线访问点,让对象掉线。具体操作如下:


  在wifipumpkin命令行界面输入以下命令,并等待扫描结果。

wp3 > use WiFi.WiFideauth
wp3 : WiFideauth > set interface wlan0
wp3 : WiFideauth > scan

image-20211214212340748

  图中CH一栏代表信道,你需要对哪个WiFi进行攻击就需要将自己的钓鱼WiFi信道切换至对应信道上。

image-20211214212557342

  选择自己想要攻击的WiFi的BSSID,设置完成后输入start开始运行,这里我就不展示具体效果了。

image-20211214212814673

  如果放在实际环境中,需要用到取消身份认证攻击与钓鱼热点结合使用时,需要准备两个网卡硬件。

写在最后

  这篇文章是针对之前攻防演练项目中用到的场景——WIFI钓鱼+钓鱼邮件的组合场景中钓鱼WiFi技术要点的记录,钓鱼邮件这方面因为这次使用的是宏病毒钓鱼,所以说这段时间就不再对宏病毒文件这个点位再更新文章了,等后续接触到钓鱼邮件其他内容(值得一写的内容)的时候在继续更新钓鱼邮件方面的内容吧。

参考材料

讲解文章:wifipumpkin3 WiFi钓鱼工具
官方手册:Wifipumpkin3