简介

由于“Bad USB漏洞”的存在,USB闪存驱动器也成了常见的攻击目标。Bad-USB让黑客可以重新编程微控器作为一个“人机界面装置”(HID)或键盘,然后在目标机器上执行自定义键盘敲击。这种情况通常被称为“HID Payload攻击”,由于你需要向BadUSB上交你的脚本用于执行(稍后我们还会有更为详细的讨论)。尽管几乎所有的USB闪存驱动器都可以执行漏洞利用,但是重新编程“群联(Phison)”微控制器的唯一方式已经公开了。

本教程中我们将改造USB闪存驱动器的微控制器,使用发布于github上面的源代码进行编译,并构建一个带有内置HID负载的自定义固件,然后把我们无邪的USB变成一个用于我们入侵受害者设备的恶意键盘。

整个过程有点像对你的安卓设备进行编译和清除。:P

准备工作

· 我们需要在win环境下工作
· 我们需要一个带有Phison (-)微处理器的USB .0闪存驱动器
 教程中,我会使用“Toshiba TransMemory-MX USB 3.0 8GB”,东芝,8GB。
· 确定你能在不损害USB的情况下打开它。我的一个朋友由于太草率,完全按照字面意思锯断了他的USB。详情可以阅读“将我们设备设置为手动‘启动模式’”。

小笔记:

·你能够在github找到可支持的设备名单。
 有时候拥有一台名单中的可支持设备,并不意味着一定使用了PS2251-。即使是同一台设备模型,制造商也可能使用不同的控制器。
·请你继续自己的冒险,尽管并没有办法保证你的设备之后仍然可以工作。理论上,出现任何问题都是不科学的。

改造U盘的微控制器

开始之前,先确定一下我们的U盘使用的是可支持控制器。我们可以用一个叫做“闪存驱动器信息提取器”的程序,收集关于U盘的必要信息。

并不需要任何安装。只要将Upan插到电脑上,然后打开工具点击“获取U盘信息”按钮。如果你的驱动器使用的是Phison2303(2251-03)控制器,输出应该如下:

但是,如果你的U盘不同,它便非常有可能无法使用exp重新编程为HID设备。我建议在github上找到可支持设备,然后再购买一个即可。

开始构建环境

代码开发者推荐我们使用任意版本或者更高级的“Microsoft Visual Studio 2012”来编译工具,SDCC用于构建自定义固件。

Visual Studio 下载可能需要好几个小时,中间不能停顿,因此你需要保证自己加油足够的时间。令人略烦的一点是,它会在你的主要驱动器上占据好几个G的空间,在我的SSD上占了约10GB。

下载及编译源代码

为了定制U盘,我们需要构建与之交互的工具。可以使用adamcaudill发表于Github上的源代码

实际上,Visual Studio(简称VS)提供了一个简洁的功能,让我们复制了整个储存库。你甚至可能从github站点与VS进行交互:

在复制和打开存储库之后,你很可能看到三个解决方案:

· DriveCom
· EmbedPayload
· Injector

我们只需要“DriveCom”和“EmbedPayload”,如果你能够通过以下进行编译:

Ctrl + Shift + B
或者
Menu bar - Build - Build Solution

如果你无法通过VS复制存储库,从github下载.zip文件并打开每个解决方案中的.sln文件。

现在,DriveCom和EmbedPayload应该在…\Psychson\tools目录中。

E:\Documents\Bad_USB\Psychson\tools
DriveCom and EmbedPayload should be in the ...\Psychson\tools directory now: E:\Documents\Bad_USB\Psychson\tools

获取一个Burner Image

一个“Burner Image”是在你的设备上倾倒与刷新固件所需。它们通常使用“BNxxVyyyz.BIN”规则来命名。用于Phison控制器的Burner Image可以在这里找到。

即使这个网站仅仅在俄罗斯可用也不要紧,如果你扫描“BN03”站点,你便会找到下载链接。BN意味着“Burner Image”,而03与PS2251-03对应。下面便是我提取的文件:

E:\Documents\BadUSB\Burner_Image\。

每个Burner Image应该完成这个工作,但你能够使用最新版本——由名称的一部分“Vyyy”来表示的。

下载Duck Encoder

“Duck Encoder”是基于Java平台的工具,可以将脚本转化为HID负载。这个是建立于黑客Hak5发开的、被称为“Rubber Ducky”的Bad-USD。你可以从这里下载到(不要忘记安装Java)。我将其保存在 E:\Documents\Bad_USB\DuckEncoder\。

建立自定义固件

目前,我们所有的准备工作已经完成,现在我们可以开始使用工具了。在这一步我们只需要进入我们的…\Psychson\firmware\存储库然后运行build.bat。如果一切顺利,你便可以看到一个里面带许多不同文件的新文件夹。

fw.bin是我们接下来会用到的文件。

写一个脚本

你可能会问自己我们需要使用哪种语言写脚本。由于DuckEncoder是基于“Rubber Ducky”的,因此我们使用“Duckyscript”语音。语法很简单,更详细的说明在这里

我们需要在我们喜欢的目录中创建一个.txt文件:

E:\Documents\Bad_USB\DuckEncoder\script.txt

我在这里为你们展示一个比“Hello World”还要有趣的脚本:

你可能在想,Bad U盘会“按下”windows + r,然后这个脚本造成windows立即关闭。此外,你可以很清楚的发现我写的是“/”而不是“-”。这是因为我们的“键盘”Bad-U盘有一个美国版本,而且在这里windows被设置为德语。记住这点,我们必须变更windows布局为美式,然后我们就可以平时一样地写脚本,而不需要为输入方式而困惑。

你甚至可以使用自定义脚本,然后在这里进行一些逆向工程。

转换为HID负载

现在是时候开始使用windows终端-cmd。

java -jar "PATH to \duckencode.jar" -i "PATH to \script.txt"-o "\payload.bin Path"

例如:

java -jar E:\Documents\BadUSB\DuckEncoder\duckencode.jar -i
E:\Documents\Bad_USB\DuckEncoder\script.txt -o
E:\Documents\Bad_USB\DuckEncoder\inject.bin

我们并不会得到任何输出,但是在我的示例当中应当在"E:\Documents\Bad_USB\DuckEncoder\" 中创建一个inject.bin

将有效负载嵌入固件

现在,我们需要使用之前与VS一起构建的工具。显然EmbedPayload用于嵌入有效负载。我们只需要在cmd中执行它即可:

"Path to EmbedPayload.exe" "PATH to payload" "PATH to the firmware we built"

我的示例当中:

E:\Documents\BadUSB\Psychson\tools\EmbedPayload.exe
E:\Documents\Bad_USB\DuckEncoder\inject.bin
E:\Documents\Bad_USB\Psychson\firmware\bin\fw.bin

这里需要注意现在fw.bin中包含了有效负载。你也可以通过再次执行build.bat覆盖固件。

清除当前U盘固件

我强烈建议你复制当前U盘中的固件,以防你今后想要恢复它。如果我们想要采取任何行动来控制我们的U盘,可以使用“tools”工具文件夹中的DriveCom

"PATH to DriveCom.exe" /drive="Drive Letter of our USB" /action=DumpFirmware /burner="PATH to our burner image" /firmware="PATH of the output.bin"

我的示例当中:

E:\Documents\Bad_USB\Psychson-master\tools\DriveCom.exe
/drive=F /action=DumpFirmware
/burner=E:\Documents\Bad_USB\Firmware\BN03V117M.BIN
/firmware=E:\Documents\Bad_USB\originalfw.bin

刷新固件

最后我们可以将非常恶意的关闭负载嵌入我们的U盘固件当中:

"PATH to DriveCom.exe" /drive="Drive Letter" /action=SendFirmware /burner="PATH to our burner image" /firmware="PATH to the firmware"

我的示例当中:

E:\Documents\BadUSB\Psychson\tools\DriveCom.exe
/drive=F /action=SendFirmware
/burner=E:\Documents\Bad_USB\Firmware\BN03V117M.BIN
/firmware=E:\Documents\Bad_USB\Psychson\firmware\bin\fw.bin

一个成功的输出应该是这个样子:

DriveCom将我们U盘切换成固件刷新自动启动模式。现在我们的U盘变成了我们无法切换模式的键盘,同时我们也无法访问内存,但这仅仅是个小问题。在下一节中,我将着重讲述如何解决这个问题。

将设备设置为手动“启动模式”

如果你想用U盘采取进一步的行动,你会发现无论是DriveCom还是Windows,任何操作系统都无法访问它,毕竟它只是一个键盘。我们需要打开U盘,然后当我们把U盘插在电脑的时候连接到两个微控制器的插针上。从上面这个角度看起来,我需要连接底部左边的两个插针:

我通常使用U盘链接器的边缘来连接这两个插针。在这种情况下,另一个U盘延长线可以会非常有用。看起来或许很难,但是你会习惯的。使用任何你喜欢的工具,只要不伤害你的U盘即可。如果你做得正确,驱动便会再次出现在windows中:

然后我们可以再次修改我们的驱动或者清除原始固件。

如果很不幸,你的电脑关闭了,下次再努力试一下吧!

注释:

·Bad-USB不一定在每个windows电脑上都适用,因为它可能无法加载驱动程序。

·请记住,当你的U盘假装成HID设备时,你是无法访问内存的。

最后的想法

如果你拥有访问受害者电脑的权限,Bad-USB会是一个非常有用的工具,即使windows会在加载U盘的时候崩溃。此外,由于它是一个“键盘”而不是病毒,因此它逃过了AV检测。

如果你正在考虑找一个简单的借口将U盘插入您选择的电脑,请注意最好准备一个正常的U盘,万一你被抓住了,也可以轻松解围。

此外,感谢各位的阅读和提供的建设性反馈。如果发现任何问题,请及时让我知道。

参考

https://github.com/adamcaudill/Psychson

https://github.com/hak5darren/USB-Rubber-Ducky/wiki

极客DIY:打造你的专属黑客U盘的更多相关文章

  1. 极客DIY:如何用Siri与树莓派“交互”

    苹果在2014年推出的HomeKit智能家居平台的确给人眼前一亮的感觉.随着时间的推移,国外的黑客对HomeKit该逆向的逆向,结果也都汇总到了git.本着折腾到死的极客心态,从网上淘了一块树莓派进行 ...

  2. 极客DIY:RFID飞贼打造一款远距离渗透利器

    本文使用最新的渗透工具RFID飞贼(Tastic RFID Thief)和RFID感应破解技术来获取一些拥有安防的建筑物的访问权限. Tastic RFID Thief是一个无声远距离RFID读卡器, ...

  3. 极客DIY:打造属于自己的无线移动渗透测试箱

    本文中介绍的工具.技术带有一定的攻击性,请合理合法使用. 你想不想拥有一款属于自己的移动无线渗透测试箱,如果你感兴趣,下面介绍的设备将会对你很有帮助.这个箱子被称为“MiTM(中间人攻击)WiFi箱” ...

  4. 极客DIY:廉价电视棒玩转GNSS-SDR,实现GPS实时定位

    0×00 前言 GNSS是Global Navigation Satellite System的缩写.中文称作:全球卫星导航系统.全球导航卫星系统. GNSS泛指所有的卫星导航系统,包括全球的.区域的 ...

  5. 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”

    原创作者:HackLiu 0×00 前言 ‍ ‍ 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司做了这个事情 ...

  6. 极客DIY:使用树莓派制作一架四轴无人机

    如果你想DIY一台属于自己的无人机,那么接下来可以阅读这篇文章,阅读完毕之后也许对你会有启发. 这个项目主要用到的零件主要来自Erle Robotics(一个使用Linux系统的开源四轴飞行器项目). ...

  7. 极客DIY:制作一个可以面部、自主规划路径及语音识别的无人机

    引言 现在大部分无人机厂商都会为第三方开发者提供无人机API接口,让他们更容易地开发无人机飞行控制应用程序,让无人机想怎么玩就怎么玩.有的API接口可以帮助开发者开发基于Web版的APP.手机APP甚 ...

  8. 极客DIY:如何构建一台属于自己的基站

    写在前面(原文作者) 上周我去特拉维夫(Tel Aviv)探望我的朋友结果有了一些收获,一块崭新的BladeRF(x40),即一个支持USB3.0的SDR平台,这就意味着可以同时发送和接收信息了.而H ...

  9. 极客DIY:开源WiFi智能手表制作

    如果你喜欢拥有一款属于自己的无线手表,那么请不要错过,相信阅读完这篇文章对你会很有帮助. 硬件规格 ESP8266(32Mbit闪存) MPU-9250(陀螺仪传感器)以及 AK8963(内置磁力计) ...

随机推荐

  1. 【原创】SQL分页查询存储过程

    ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...

  2. Linux tree命令

    Linux tree命令用于以树状图列出目录的内容. 执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件. 语法 tree [-aACdDfFgilnNpqstux][-I <范 ...

  3. Https网站搭建——通过https://localhost:8443访问tomcat首页

    图片大致介绍了Https浏览器与服务器握手的过程,涉及到的名词:证书.Hash算法.随机数密码.公钥加密.私钥解密.握手消息.hash验证.摘要 tomcat服务器配置可以实现https双向认证,简单 ...

  4. 删掉SQL Server登录时登录名下拉列表框中的选项

    问题: 我以前创建了一个登录名如kpi,之后在"安全性-登录名" 里删掉了,但是每次登录时,登录名的下拉框中总是能显示登录名kpi,怎么把它删掉呢? 解决方案: 1).SQL Se ...

  5. CSS3与页面布局学习笔记(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)

    CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...

  6. Tomcat的下载和配置

    目录结构: // contents structure [-] 下载Tomcat 配置Tomcat 运行Tomcat 参考文章 下载Tomcat 读者可以到apache官网下载Tomcat.笔者下载的 ...

  7. 【模块化编程】理解requireJS-实现一个简单的模块加载器

    在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ..... ...

  8. hexo博客进阶-相册和独立域名

    之前我已经写了一篇文章详细的讲述了如何使用hexo搭建github博客.如果还没有看的可以去看看,hexo搭建博客 其实,根据这篇文章的过程我们就能够搭建一个专属于自己,并且非常美观的博客了.但是如果 ...

  9. [DOM Event Learning] Section 1 DOM Event 处理器绑定的几种方法

    [DOM Event Learning] Section 1 DOM Event处理器绑定的几种方法   网页中经常需要处理各种事件,通常的做法是绑定listener对事件进行监听,当事件发生后进行一 ...

  10. Android源码分析之Handler

    接上一篇分析,正如Android doc所说,Handler主要有2方面用处: 1. delay执行同一线程中的某个操作,也就是schedule message.runnable在未来的某一时刻执行: ...