怎样反制红队“硬件“攻击
前言
隨著紅藍對抗日益激烈,而紅隊的攻擊點從原有的Web方法,也涉及到了很多的方向,例如硬件攻擊。
而硬件攻擊最顯著的就是Badusb。說起這個玩意兒。想必大家都知道,網上一搜一大堆制作文章。
【查看學習資料】
另一種燒錄BadUsb
網上的確有大多數BadUsb的燒錄方法,但都是基于arduino界面的燒錄,但經過本人研究
arduino也是可以通過命令行參數進行燒錄的,具體如下:
C:\Users\Administrator\Desktop\Arduino\arduino_debug.exe --port COM端口 --upload 燒錄的內容文件文件路徑的話,可以看如下圖,當對內容進行保存的時候,給出了詳細信息,后綴名為ino,經過筆者用命令行編譯試驗,路徑要為:
C:\\xxx\\sketch_apr01a\sketch_apr01a.inosketch_apr01a為項目文件,而在上層還要有一個sketch_apr01a名字的目錄
代碼分析流程
Windows sdk開發中,任何一個窗口都能接收消息并響應。同理 BadUSB或U盤插入或拔出也會有相應的消息與響應。
用到的消息為:WM_DEVICECHANGE
(通知應用程序對設備或計算機的硬件配置進行更改,通過WindowProc函數接收消息)
函數原型如下:
LRESULT CALLBACK WindowProc ( HWND hWnd, UINT message,WPARAM wParam, LParam);WindowProc中第三個參數wParam,指向發生的事件,該參數Dbt.h頭文件找那個的值。說說我們要用到的宏吧,Dbt.h中:
DBT_DEVICEARRIVAL //設備插入會進行響應 DBT_DEVICEREMOVECOMPLETE //設備拔出時響應代碼實現消息響應
首先來看WndProc函數。具體實現就是通過一個case來進行消息響應的
添加自己的消息響應,以下代碼當BadUSB插入之后,會彈窗顯示設備插入。
這里當我插入BadUSB之后,成功捕獲到消息并彈窗。
核心代碼實現
既然當BadUSB插入之后,會響應消息函數,那讓消息函數執行arduino命令行并進行自動燒錄。當紅隊后期做更改BadUSB的時候,就會執行我們燒錄的代碼
BadUSB將要燒錄的內容如下,setup函數為初始化函數。當BadUSB插入之后,打開記事本并輸入 By:Met32這串字符。這里可自行更改…我這里為了演示方便就這樣寫的。
void setup() {// put your setup code here, to run once:Keyboard.begin();//開始鍵盤通信delay(1000);//延時1000毫秒,不要太短,因為每天電腦的運行速度都不一樣 Keyboard.press(KEY_CAPS_LOCK); //按下大寫鍵 這里我們最好這樣寫 不然大多數電腦在中文輸入的情況下就會出現問題Keyboard.release(KEY_CAPS_LOCK); //釋放大寫鍵delay(500);Keyboard.press(KEY_LEFT_GUI);//按下徽標鍵 也就是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); //釋放大寫鍵 我們再次關閉開啟的大寫鍵delay(500);Keyboard.end();//結束鍵盤通訊 }void loop() {// put your main code here, to run repeatedly:}WndProc全部實現代碼如下。
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, "設備拔出", "test", NULL);break;}break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0; }使用過程
現在來看一下效果,當BadUSB插入之后,自行拷貝燒錄內容到對方的BadUSB。
之后把程序退出,BadUSB從新插入一下,成功顯示,證明我們成功燒錄到對方的BadUSB
結尾注意點
Arduino路徑方面的問題不必擔心,因為都是自己本機,寫死即可,問題就在COM端口這,當BadUSB插入之后,我們是不確定使用的哪個端口的。因此可以通過一個循環將常用的COM端口號全部執行一遍即可。
如果想更加完善一點,可以檢測當BadUSB插入之后禁用鍵盤(禁止對方代碼操作),之后在執行我們的system命令。
最后
點擊查看【網絡安全學習資料·攻略】
總結
以上是生活随笔為你收集整理的怎样反制红队“硬件“攻击的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑客零基础入门 | 网络安全
- 下一篇: 【WEB安全】In0ri:基于深度学习的