本文将探讨无线接入点(AP)和BSSID(MAC地址AP)。我们不借助文件系统加密和文件系统中(仅内存中)的硬编码Payload即可获得后门Payload,通过该方法可绕过所有的杀软,可以不使用Payload加密而在网络流量(本文中是无线流量)中传输Meterpreter Payload。
攻击者可通过为伪造AP更改BSSID(循环更改)执行此攻击,这意味着通过更改BSSID和将后门Payload逐步注入BSSID(伪造AP的MAC地址)就可以实现这一点。在客户端受感染系统(后门系统),可以在不经用户密码连接到伪造AP的情况下通过扫描AIR上的接入点MAC地址(BSSID)来转储这些Payload。因此,Payload的传输是由Wifi设备进行的,比如wlan(无线流量),在我们的例子中,通过扫描AIR上的BSSID而转储Payload后,是由Ethernet网络建立的Meterpreter会话进行(不使用Wifi /无线设备)。
因此结果是,恶意软件代码或本文中所述的简单的后门代码能以静默方式(本文中为Wlan)使用你的WIFI设备传输/转储Payload,最后可以用简单的C#代码获得meterpreter会话。
在我们的方案中,我们只在传输Payload(第1步)时使用Wifi设备,然后通过扫描Wifi设备MAC地址(BSSID)来转储这些Payload,然后我们的后门将通过eth0或以太网卡建立Meterpreter会话,因此在这个阶段(第2步),我们使用不借助WIFI设备的网络流量来建立Meterpreter会话。
注意:如果你想只通过WIFI设备实现这些(第1步和第2步),我们认为这在技术上是可行的,我们尚未对此进行测试,所以尚不确定。
这一方法的重点是什么?
重点是:恶意软件或后门Payload注入到WiFi设备的BSSID并通过无线流量传输是可以实现的。
扫描从伪造AP注入到BSSID的Payload,步骤:
比如,我们要传输以下Payload:
“fec8b00011ddc00945f1”
第1步:攻击者系统伪造一个名为“Fake”的接入点,MAC地址为00:fe:c8:b0:00:11
l 注意:Mac地址00:fe:c8:b0:00:11是我们注入的Payload,因此我们的Payload是“fec8b00011”
l 这部分的Payload是“fec8b00011ddc00945f1”
第2步:后门系统扫描Essid“Fake”并转储BSSID
l 注意:你的后门代码应该转储这些部分的BSSID或Mac地址fe:c8:b0:00:11 ==> fec8b00011
第3步:攻击者系统伪造一个名为Fake”的接入点和Mac地址00:dd:c0:09:45:f1
l 注意:Mac地址00:dd:c0:09:45:f1是我们注入的Payload,因此我们的Payload是“ddc00945f1”
l 这部分的Payload是“fec8b00011ddc00945f1”
第4步:后门系统扫描Essid “Fake”并转储BSSID
l 注意:你的后门代码应该转储这些部分的BSSID或Mac地址dd:c0:09:45:f1 ==> ddc00945f1
经过这两步的扫描后,你将在被感染系统(后门系统)中获得Payload fec8b00011ddc00945f1。
现在你可能已了解了该方法的工作原理,下面我们将通过linux端命令作进一步说明(第1步和第3步)。
接下来是通过命令伪造AP。
可选命令:在创建Wlan0mon之前更改无线网卡的TXPower,这些命令可以帮助你伪造更好的AP信号,所以如果需要你可以手动使用该命令。
l 注意:在通过airmon-ng创建Wlan0Mon之前应该使用这些命令,这些命令是可选的(不是必需的)
创建无线网卡的监视模式是伪造AP的重要步骤:
使用命令“airmon-ng start wlan0”,你可以为Wlan0创建“Wlan0Mon”(监视模式)。
注意:你可以手动运行此命令仅一次,或者可以在script1.sh文件中使用此命令一次,如步骤(cmd 1-1)所示。我们是在攻击者端手动使用。
第1步:攻击者系统伪造一个名为“Fake”的接入点和Mac地址00:fe:c8:b0:00:11
l 注意:Mac地址00:fe:c8:b0:00:11是我们注入的Payload,因此我们的Payload是“fec8b00011”
cmd1-1: airmon-ng start wlan0
l 注意:创建Wlan0Mon(监视模式)
cmd1-2: airbase-ng -a 00:fe:c8:b0:00:11 –essid “Fake”-I 10 -0 wlan0mon
l 注意:你需要让该伪造AP保持15秒,这样你可在15秒后通过killall命令在(cmd 1-2)中杀死这个命令
cmd1-3: sleep 15
cmd1-4: killall airbase-ng
第2步:(无关紧要,所以作者省略了第2步)。
第3步:攻击者系统伪造一个名为“Fake”的接入点和Mac地址00:dd:c0:09:45:f1
注意:Mac地址00:dd:c0:09:45:f1是我们注入的Payload,因此我们的Payload是“ddc00945f1”
cmd3-1: airbase-ng -a 00:dd:c0:09:45:f1 –essid “Fake”-I 10 -0 wlan0mon
注意:你需要让该伪造AP保持15秒,这样你可在15秒后通过killall命令在(cmd 3-1)中杀死这个命令
cmd3-2: sleep 15
cmd3-3: killall airbase-ng
从这些步骤可以看到,我们应该使用这些命令,但对于airbase-ng我们有很大的问题。
哪里有问题?
步骤(cmd 1-2)到(cmd 1-3)有问题
在步骤(cmd 1-2)后,你不能停止该airbase-ng命令,只是使用ctrl + c或杀死这个命令,你可以将其停止。所以在我们杀死该进程一次前我们的bash脚本总是停在步骤:(cmd 1-2)。
为解决该问题,我们的解决方案是为这些步骤使用2个bash脚本文件:
l 第一个是用于步骤(cmd1-2和cmd 3-1)的bash脚本文件“Script1.sh”
注意:你可以在此bash脚本的第一行中添加一次步骤(cmd 1-1)或手动完成一次。我们是手动执行了(cmd 1-1)一次。
l 第二个bash脚本是步骤(cmd 1-3&cmd 1-4&cmd 3-2&cmd 3-3)的“Script2.sh”
所以我们应该首先运行bash脚本“Script1.sh”,然后应该立即或2-3秒后运行bash脚本“Script2.sh”。
所以我们拥有的文件是:
Script1.sh文件:
Script2.sh文件:
注意:你可以在bash脚本“Script2.sh”文件中使用循环命令,比如( for )。
如图A所示,我们有用于将Meterpreter Payload注入到BSSID的script1.sh文件。
图A
从图A中可以看到,我们的MeterpreterPayload从第3行开始。我们的Meterpreter Payload是510字节。
在这种情况下,使用airbase-ng命令,你可以向我们的名为“Fake”的伪接入的BSSID注入5字节的Payload。
因此我们应该有102行用于通过airbase-ng命令将所有Payload注入BSSID。
102 * 5= 510字节
注意:每个BSSID包含5个字节的Payload。
在这种情况下,应将两个BSSID MAC地址添加到该script1.sh文件。
从图A中可以看到,我们的脚本的第2行有MAC地址00:ff:ff:ff:ff:ff,这个Mac地址或BSSID是启动攻击和向感染系统传输流量的标志,从图B中可以看到,该文件的结尾应该是BSSID {00:ff:00:ff:00:ff}。
BSSID注入循环:更改BSSID(102 + 2)= 104次。
图B
你还可以看到第二个脚本script2.sh文件,如图C所示。在这个文件中,你可以使用循环命令,比如(For),或者如图C所示操作。
图C
在文件“script2.sh”中,你应该杀死airbase-ng至少104次。
接下来我们通过工具NativePayload_BSSID.exe逐步解释这一方法:
步骤:
第0步:创建Wlan0mon(监视模式)。
语法:airmon-ng startwlan0
第1步:你可以用这个命令为你的后门创建一个Payload:
第2步:在该步骤中,你应该在payload.txt文件中将Payload的格式从“xfcx48x83xe4”替换为“fc4883e4”。
你可以使用该工具的 “帮助”来显示所有语法,如图1所示:
图1
现在你应该复制你的Payload字符串,并通过切换NativePayload_BSSID的NULL粘贴,如图1-1所示:
图1-1
现在你应该将所有这些行复制到一个bash脚本,比如“script1.sh”文件。
注意:仅将airbase-ng命令行复制并粘贴到script1.sh文件
在这种情况下,这些行应该是102行+2 = 104行
如图A所示,你应该在脚本的第一行手动添加“#!/bin/bash”,因此该文件中应该有105行。
第3步:在这一步,你应该在Linux端运行此Script1.sh。
更改chmod并运行此脚本,如图2所示:
图2
第4步:在这一步,你应该创建script2.sh并更改该脚本的chmod,但不需要在这一步运行该脚本,如图3所示。
图3
l 注意:你应该如图C所示手动创建该bash脚本。
第5步:在这一步,你应该运行你的后门,即NativePayload_BSSID.exe工具,从图4可以看到,我们为IP地址192-168-1-50在kali linux中创建了Meterpreter监听器,“script1.sh”成功执行。
因此第5步中的步骤有:
步骤AA:Meterpreter监听器执行(linux)
步骤BB:运行script1.sh(linux)
步骤CC:运行后门“NativePayload_BSSID.exe”(Windows)
步骤DD:运行script2.sh(linux)
步骤CC:这时候应该使用如图4所示的语法执行后门NativePayload_BSSID
我们在script1.sh中的ESSID是“Fake”,因此正确的语法是:
如图4所示,步骤AA、BB及CC获得执行
图4
从图4可以看到,后门被用户“u1”执行,然后应该运行“script2.sh” (步骤DD),如图4所示。
此时后门代码尝试扫描AIR上的ESSID“Fake”,然后转储“Fake” 接入点的BSSID,因此,从图4可以看到,我们的代码转储了BSSID “00:ff:ff:ff:ff:ff”四次,该BSSID是启动攻击和传输Payload的标志。
因此我们在AIR上的步骤如下:
接下来应该运行script2.sh(步骤DD)
每运行Script2.sh 15秒后,该脚本将从Script1.sh文件中杀掉一个Airbase-ng命令。
因此,在这一步的AIR上,在运行Script2.sh后,我们有以下步骤:
如图5所示,我们的后门在运行“script2.sh”文件后尝试转储BSSID
图5:通过BSSID和无线流量传输后门Payload
如图6所示,你将在30分钟后获得meterpreter会话。
图6
可以看到,通过我们的C#代码创建了Meterpreter会话,2017版卡巴斯基杀毒软件一次又一次绕过了该方法,最终meterpreter会话成功创建。
注意:从图7可以看到,我们的代码在15秒的延迟后创建了Meterpreter会话,该延迟是由我们的代码导致的。所以,通过我们的代码检查该方法后可知,在转储所有payload后,你应该等15秒,然后你将获得Meterpreter会话。
图7
总结:
你的无线设备总有漏洞,因此你应该考虑以下威胁:
1. 恶意软件或后门Payload注入到WiFi设备的BSSID并通过无线流量传输是可以实现的。
2. 如果你想为你的客户端和网络基础设施使用WIFI设备,你应该考虑这些威胁。
3. 在该方法中,在开启无线网卡之前你的受感染的系统总是脆弱的,即使开启了无线网卡,攻击者也可能通过手机或伪造AP攻破你的客户端。
4. 在我们的例子中,我们的后门尝试扫描用于转储BSSID的ESSID(比如“Fake”),因此,该流量将以非常缓慢且静默的方式工作。
5. 你的防病毒软件无法检测到,你的LAN/WAN中的防火墙也绕过了这个,因为没有任何流量通过这些基础设施,在我们的例子中,流量是受感染系统无线网卡和AIR上攻击者系统无线网卡之间的直接流量。另外,由后门转储Payload后,我们将有从受感染系统向攻击者系统的经由LAN/WAN的Reverse_tcp Meterpreter会话(不用无线网卡),因此,我们有从后门系统向互联网或局域网中的攻击者系统的传出流量,该流量在大多数情况下不会被windows防火墙等阻止。
C#源代码:https://github.com/DamonMohammadbagher/NativePayload_BSSID
演示视频:https://youtu.be/W0dJGln3tls
咨询作者后的回复:
*本文作者:华为未然实验室,转载请注明来自Freebuf.COM