怎样反制红队“硬件“攻击
前言
隨著紅藍(lán)對(duì)抗日益激烈,而紅隊(duì)的攻擊點(diǎn)從原有的Web方法,也涉及到了很多的方向,例如硬件攻擊。
而硬件攻擊最顯著的就是Badusb。說起這個(gè)玩意兒。想必大家都知道,網(wǎng)上一搜一大堆制作文章。
【查看學(xué)習(xí)資料】
另一種燒錄BadUsb
網(wǎng)上的確有大多數(shù)BadUsb的燒錄方法,但都是基于arduino界面的燒錄,但經(jīng)過本人研究
arduino也是可以通過命令行參數(shù)進(jìn)行燒錄的,具體如下:
C:\Users\Administrator\Desktop\Arduino\arduino_debug.exe --port COM端口 --upload 燒錄的內(nèi)容文件文件路徑的話,可以看如下圖,當(dāng)對(duì)內(nèi)容進(jìn)行保存的時(shí)候,給出了詳細(xì)信息,后綴名為ino,經(jīng)過筆者用命令行編譯試驗(yàn),路徑要為:
C:\\xxx\\sketch_apr01a\sketch_apr01a.inosketch_apr01a為項(xiàng)目文件,而在上層還要有一個(gè)sketch_apr01a名字的目錄
代碼分析流程
Windows sdk開發(fā)中,任何一個(gè)窗口都能接收消息并響應(yīng)。同理 BadUSB或U盤插入或拔出也會(huì)有相應(yīng)的消息與響應(yīng)。
用到的消息為:WM_DEVICECHANGE
(通知應(yīng)用程序?qū)υO(shè)備或計(jì)算機(jī)的硬件配置進(jìn)行更改,通過WindowProc函數(shù)接收消息)
函數(shù)原型如下:
LRESULT CALLBACK WindowProc ( HWND hWnd, UINT message,WPARAM wParam, LParam);WindowProc中第三個(gè)參數(shù)wParam,指向發(fā)生的事件,該參數(shù)Dbt.h頭文件找那個(gè)的值。說說我們要用到的宏吧,Dbt.h中:
DBT_DEVICEARRIVAL //設(shè)備插入會(huì)進(jìn)行響應(yīng) DBT_DEVICEREMOVECOMPLETE //設(shè)備拔出時(shí)響應(yīng)代碼實(shí)現(xiàn)消息響應(yīng)
首先來看WndProc函數(shù)。具體實(shí)現(xiàn)就是通過一個(gè)case來進(jìn)行消息響應(yīng)的
添加自己的消息響應(yīng),以下代碼當(dāng)BadUSB插入之后,會(huì)彈窗顯示設(shè)備插入。
這里當(dāng)我插入BadUSB之后,成功捕獲到消息并彈窗。
核心代碼實(shí)現(xiàn)
既然當(dāng)BadUSB插入之后,會(huì)響應(yīng)消息函數(shù),那讓消息函數(shù)執(zhí)行arduino命令行并進(jìn)行自動(dòng)燒錄。當(dāng)紅隊(duì)后期做更改BadUSB的時(shí)候,就會(huì)執(zhí)行我們燒錄的代碼
BadUSB將要燒錄的內(nèi)容如下,setup函數(shù)為初始化函數(shù)。當(dāng)BadUSB插入之后,打開記事本并輸入 By:Met32這串字符。這里可自行更改…我這里為了演示方便就這樣寫的。
void setup() {// put your setup code here, to run once:Keyboard.begin();//開始鍵盤通信delay(1000);//延時(shí)1000毫秒,不要太短,因?yàn)槊刻祀娔X的運(yùn)行速度都不一樣 Keyboard.press(KEY_CAPS_LOCK); //按下大寫鍵 這里我們最好這樣寫 不然大多數(shù)電腦在中文輸入的情況下就會(huì)出現(xiàn)問題Keyboard.release(KEY_CAPS_LOCK); //釋放大寫鍵delay(500);Keyboard.press(KEY_LEFT_GUI);//按下徽標(biāo)鍵 也就是win鍵 delay(500); Keyboard.press('r');//按下r鍵 delay(500); Keyboard.release(KEY_LEFT_GUI);//松掉win鍵 Keyboard.release('r');//松掉r鍵 delay(500); Keyboard.println("notepad");//輸入notepad 打開記事本delay(500); Keyboard.press(KEY_RETURN); //按下回車鍵Keyboard.release(KEY_RETURN); //釋放回車鍵delay(500); Keyboard.println(" By:Met32");//輸入我們想顯示的信息Keyboard.press(KEY_RETURN); //按下回車鍵Keyboard.release(KEY_RETURN); //釋放回車鍵delay(500);Keyboard.press(KEY_CAPS_LOCK); //按下大寫鍵Keyboard.release(KEY_CAPS_LOCK); //釋放大寫鍵 我們?cè)俅侮P(guān)閉開啟的大寫鍵delay(500);Keyboard.end();//結(jié)束鍵盤通訊 }void loop() {// put your main code here, to run repeatedly:}WndProc全部實(shí)現(xiàn)代碼如下。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜單選擇: switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意繪圖代碼...EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;case WM_DEVICECHANGE:switch (wParam){//代碼在這case DBT_DEVICEARRIVAL:system("C:\\Users\\Arduino\\arduino_debug.exe --port COM5 --upload C:\\Users\\Administrator\\Desktop\\sketch_apr01a\\sketch_apr02a\\sketch_apr02a.ino");break;case DBT_DEVICEREMOVECOMPLETE:MessageBoxA(NULL, "設(shè)備拔出", "test", NULL);break;}break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0; }使用過程
現(xiàn)在來看一下效果,當(dāng)BadUSB插入之后,自行拷貝燒錄內(nèi)容到對(duì)方的BadUSB。
之后把程序退出,BadUSB從新插入一下,成功顯示,證明我們成功燒錄到對(duì)方的BadUSB
結(jié)尾注意點(diǎn)
Arduino路徑方面的問題不必?fù)?dān)心,因?yàn)槎际亲约罕緳C(jī),寫死即可,問題就在COM端口這,當(dāng)BadUSB插入之后,我們是不確定使用的哪個(gè)端口的。因此可以通過一個(gè)循環(huán)將常用的COM端口號(hào)全部執(zhí)行一遍即可。
如果想更加完善一點(diǎn),可以檢測(cè)當(dāng)BadUSB插入之后禁用鍵盤(禁止對(duì)方代碼操作),之后在執(zhí)行我們的system命令。
最后
點(diǎn)擊查看【網(wǎng)絡(luò)安全學(xué)習(xí)資料·攻略】
總結(jié)
以上是生活随笔為你收集整理的怎样反制红队“硬件“攻击的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑客零基础入门 | 网络安全
- 下一篇: 教怎样写好一份“漏洞报告”