shell打开usb网络共享_在线揭秘badUSB(具有多种、多重隐藏功能的可启动USB闪存驱动器)...

背景

通常,USB是非常通用的接口。只需考虑一下我们连接了多少台设备,以及它属于什么设备!鼠标,键盘,打印机,扫描仪,游戏板,调制解调器,访问点,网络摄像头,电话等。等等,我们会毫不犹豫地将连接器插入所需的连接器,操作系统会自动检测设备类型并加载必要的驱动程序。

但是它是怎么做到的呢?

91e848064594ac497728142dea448b82.png

随身碟装置

实际上,操作系统对所连接的设备一无所知。它必须等到设备本身告诉它属于哪一类设备。如果以最简单的示例为例,当我们将USB闪存驱动器插入USB连接器时,USB闪存驱动器不仅告诉操作系统它是什么驱动器,还告诉它的体积。

e00afac58f15db69f6d38fd6900830f9.png

USB设备初始化算法

USB设备的用途由传递给USB主机以加载必要驱动程序的类代码确定。使用类别代码,您可以统一使用不同制造商的相似设备。一台设备可以支持一个或多个类,其数量由端点(USB端点)的数量确定。在连接时,主机会向设备询问一系列标准化信息(描述符),并根据这些信息来决定如何使用此设备。描述符包含有关制造商和设备类型的信息,主机可根据这些信息选择软件驱动程序。

常规的可引导USB闪存驱动器将具有类代码(大容量存储设备-MSD),而配备麦克风的网络摄像头将具有两个功能:(音频)和(视频设备类)。

635f54383a41cdff26b874817c22bff1.png

连接USB设备后,它会注册,接收地址并发送一个或多个描述符,以便操作系统加载必要的驱动程序并发回必要的配置。此后,开始与设备直接交互。工作完成后,设备将被注销。这里需要注意的重要一点:设备可以具有多个描述符,也可以注销并注册为另一设备。

如果您打开闪存盒的外壳,除了用户可以看到的大容量存储设备(大容量存储)之外,板上还将有一个控制器负责上述操作。

4bfe4581cdaa0d74c5c1062b4daefb18.png

USB错误或某些历史记录

因此,在去年的Black Hat会议上,两名研究人员(Karsten Nohl和Jakob Lell)与公众分享了如何使用固件刷新闪存控制器的经验。一段时间后,此类闪存驱动器被注册为键盘并键入了给定的命令。由于问题的严重性,这些人没有发布漏洞利用代码。但是,过了一段时间,在Derbycon会议上的另外两名研究人员(Adam Caudill和Brandon Wilson)向世界展示了可行的PoC,并在Phison 2251-03微控制器下得到了改进。该代码可在github上找到。 

变革正如您所了解的那样,今天我们将尝试将普通的闪存驱动器转变成黑客的秘密武器!首先,我们需要一个合适的设备。由于代码仅针对特定的微控制器进行布局,因此我们有两种选择:找到受该控制器控制的USB闪存驱动器,或者进行非常困难的研究和闪存其他微控制器的工作。这次,我们将选择一种更简单的方法,并尝试找到合适的闪存驱动器(这是可识别的设备的列表)。该控制器非常普遍,因此即使有些奇迹,我在家里十几个闪存驱动器中找到了一个合适的控制器。

入门

找到了合适的设备(如果发生故障,这不会太可惜),您可以继续进行其转换。首先,我们需要下载这些家伙发布的资源。原则上,内容会绘制在其官方Wiki上,但以防万一,我想提醒您他们在github上发布的内容:•DriveCom-一种基于Phison控制器与闪存驱动器进行交互的应用程序;•EmbedPayload-旨在将Rubber.Ducky脚本inject.bin嵌入自定义固件中的应用程序,目的是在连接闪存驱动器时随后执行它们;•注入器-一种从固件中提取地址并将补丁代码嵌入到固件中的应用程序;•固件-用C编写的自定义8051固件;•补丁-用C编写的8051补丁的集合。

准备系统

从github上下载了各种存档文件后,您会发现大多数文件都是用C#编写的,需要编译,因此没有工作室就无法做。您将需要的另一个工具是小型设备C编译器或SDCC。它需要安装在C:Program FilesSDCC中,需要它来编译固件和补丁。编译了归档文件中包含的所有工具后,可以再次检查此闪存驱动器是否适合闪存:

DriveCom.exe /drive=F /action=GetInfo

其中F分别是驱动器号。

获取燃烧器图像

接下来的重要步骤是选择适当的刻录机映像(8051二进制文件,负责将固件转储并上传到设备)。通常,它们的名称如下所示:

BNxxVyyyz.BIN

其中xx是控制器版本号(例如,对于PS2251-03,它将为03),yyy是版本号(不重要),并且z反映了内存页面大小,并且可以如下所示:•2KM-2K NAND芯片;•4KM-用于4K NAND芯片;•M-8K NAND芯片。

DUMP原始固件

强烈建议您无论如何都要转储原始固件,以免破坏可启动的USB闪存驱动器,然后再尝试执行此操作,以恢复设备的性能。首先,将设备置于启动模式:

toolsDriveCom.exe /drive=F /action=SetBootMode

之后,再次需要使用DriveCom实用程序,它将需要传输我们的闪存驱动器号,刻录机映像的路径以及原始虚拟固件将保存到的文件的路径。它看起来像这样:

toolsDriveCom.exe /drive=F /action=DumpFirmware/burner=BN03V104M.BIN /firmware=fw.bin

如果正确执行所有操作,则原始固件将保存到fw.bin文件中。

准备有效载荷

现在是时候考虑我们要从闪存驱动器中获得什么功能了。如果您还记得Teensy,对他来说,还有一个单独的工具包Kautilya,它使您可以自动创建有效载荷。这里有USB Rubber Ducky 的整个网站,可让您通过直接在线的便捷Web界面根据自己的喜好为设备创建脚本。这是该项目github上的现成脚本列表的补充。对我们来说幸运的是,Ducky脚本可以转换为二进制形式,因此可以将其嵌入固件中。为此,Duck Encoder实用程序对我们很有用。至于脚本本身,这里有几个选项:•您可以自己绘制所需的脚本,因为所使用的语法并不难学(请参阅项目的官方网站);•利用github上的现成选项,因为那里有一个反向shell和其他包子-剩下的就是调整并转换为二进制文件;•使用上述站点,该站点将逐步完成所有设置,并允许您以Ducky脚本的形式(或已转换为二进制形式)下载完成的脚本。为了将脚本翻译成二进制文件,必须运行以下命令:

java -jar duckencoder.java -i keys.txt -o inject.bin

其中keys.txt是Ducky脚本,而inject.bin是输出二进制文件。

填写固件

一旦准备就绪的有效负载出现在我们手上,就该在固件中实现它了。这可以通过以下两个命令来完成:

copy CFW.bin hid.bin
toolsEmbedPayload.exe inject.bin hid.bin

请注意,固件首先被复制到hid.bin,然后才被刷新。这样做是因为有效载荷只能在固件中嵌入一次,因此原始CFW.bin必须保持完整。经过这样的操作后,我们将具有包含有效负载的hid.bin自定义固件文件。仅保留将固件上传到USB闪存驱动器:

toolsDriveCom.exe /drive=F /action=SendFirmware/burner=BN03V104M.BIN /firmware=hid.bin

F再次是驱动器号。

除了使用闪存驱动器的HID特性并将其变成输入有效载荷的键盘外,您还可以创建其他一些技巧。例如,您可以在设备上创建隐藏分区,以减少操作系统将看到的空间。为此,您首先需要以逻辑块的形式获取设备的大小:

toolsDriveCom.exe /drive=E /action=GetNumLBAs

然后,在补丁文件夹中,您需要找到base.c文件,取消注释#define FEATURE_EXPOSE_HIDDEN_PARTITION行,并添加另一个define指令,以设置新的LBA编号:#define NUM_LBAS 0xE6C980UL(该数字应该是偶数,因此,如果在上一步中得到该数字,0xE6C981,则可以将数字减少为0xE6C940)。

编辑源代码后,需要将要修补的固件放入名称为fw.bin的修补程序文件夹中,然后运行build.bat,这将在patchbin中创建修改后的固件fw.bin文件。它仅会填充闪存驱动器。

密码路径和无启动模式补丁以类似的方式完成,您可以在项目github上更详细地了解它。我的主要目标是教闪存驱动器执行您和我已经实现的指定操作。

提示如果实验出错,但可启动的USB闪存驱动器发生了奇怪的事情,那么您可以尝试通过手动将其置于启动模式并使用该实用工具还原原始固件来使其恢复活力。为此,在连接前,请关闭与该点成对角线的控制器触点的1和2(有时为2和3)(有关更多详细信息,请参见相应的图)。之后,您可以尝试使用官方的MPAL实用程序还原设备。

7c3464df3fe960b6acd12b30ad083edc.png

我们已经实现了目标。此外:我认为您现在已经意识到,闪存驱动器(和其他USB设备)不能再被视为仅存储您的信息的抽象驱动器。实际上,这几乎是一台可以被教导执行某些动作的计算机。因此,在连接USB设备时请务必保持睁大眼睛。为了检查闪存驱动器安装在哪个控制器上,可以使用usbflashinfo实用程序。

特别感谢

丹尼斯·马特维耶夫(Denis Matveev)网络安全专家。他曾在从事保护和分析计算机威胁的领先公司中工作。

ad10a2505a0337a59e946787dc751219.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值