本文作者:xiaowuyi,来自FreeBuf.COM(MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇)

  0引言

  从2014年BADUSB出现以后,USB-HID攻击就这一直被关注,且具争议。争议的焦点是USB-HID的实战效果过于“鸡肋”,无论从早期的BADUSB,还是到后来的各种USB-HID设备,对于目标机来说,都要通过弹出“运行框”来实现payload的植入,由于弹框过于明显,所以实战中效果就大打折扣。于是,围绕着如何提升实战效果,很多人提出了不同的想法,我也做过多次尝试,比如通过改善payload的存储位置,通过加入BLE模块等方法,目的只有两个,一是尽可能减少payload植入过程中的code字符数,二是控制payload的植入时间。再到后来,我也开始尝试引入wifi模块,通过wifi进行控制,如2017年5月,我在freebuf上发表了《利用micropython快速实现Badusb及手机摇控扩展》,当时第一次通过wifi来控制usb-hid,实现与演示了远程关机的操作。

  WIFI与HID相结合国外有个更专业的名字就是WHID。WHID在当前的众多文章和应用中,多是把它作为一个控制模块,通过伪装,控制HID攻击的效果,更多呈现的是手机或者其它wifi下设备如何利用WHID对目标机进行攻击控制。但实际上,WHID完全可以在目标机上形成一个自定义的通道实现目标机与手机或者wifi下其它攻击设备的通讯,相当于给目标机安装了一个自定义网卡。这一方法,对于隔离主机的信息获取具有一定的应用效果。

  1WHID及其构成

  一个传统的USB-HID设备,常常是用来虚拟或者仿真键盘、鼠标等usb外设来完成恶意代码的植入。最常见的就是通过仿真键盘来完成,主要流程是当USB-HID设备插入PC后,会仿真出一个虚拟键盘,然后通过输入win+R,调出系统的运行框,在运行框内输入code。这里常用的方法是,输入cmd等命令,调出最小布局的cmd(也可以改变颜色,目的就是让这个cmd不易察觉),再通过上下键把cmd拖出窗外,让被攻击者无法看到。这时,开始在cmd里输入code。如遍历磁盘,找到payload的存储位置,植入payload。

  在植入的这个过程中,又会面临权限、免杀、过UAC等工作,如果你有足够的时间,都可以通过这个仿真键盘事前写好代码或者批处理命令,逐个解决。从这一点看,USB-HID还是很实用的,但是实际上,在插入后需要输入的code量过大,这期间如果被攻击机器的键盘操作过,或者鼠标动过,就会影响到仿真键盘的工作,从而使实现效果不尽人意。于是,有人通过在目标机器上启动Empire或Meterpreter会话,将输入的2670个字符压缩到116个字符,输入时间从38秒压缩到3秒。还有人通过修改padload存储位置,如存储在A盘,可以将输入的字符压缩到8个(如a:\m.exe),输入时间压缩到不足1秒,但这些方法都无法控制弹出运行框的时间,WHID可以说是解决了这个问题。

  WHID就是在USB-HID上加入了wifi模块。你可以把wifi配置成AP,也可以配置成STA,然后利用你的PC或者手机来控制USB-HID的动作及动作时间。例如,我在《利用micropython快速实现Badusb及手机摇控扩展》一文中写到的,通过手机遥控关机。

  那么WHID由哪几部分构成呢?

  第一,易于使用的USB-HID攻击模块,我们常见的就是teensy、arduino等。这里我选用的是支持micropython的模块TpyboardV102,其采用python来进行硬件控制,代码写起来比较简单、方便,而且这个模块有6个串口,足够我们进行扩展与使用。其缺点也很明显,体积略大,不易伪装,不像arduinonano、arduinopro、teensy、arduinolenorado那样可以很容易的伪装为U盘。对我来说,我觉得这不是大的缺点,因为TPYBoard也属开源硬件,原理图都是开放的,完全可以自己再画成适合伪装的形态。

  第二,合适的WIFI模块。我最初在尝试时,使用的是MT7681模块,具体可见《利用micropython快速实现Badusb及手机摇控扩展》一文。后来,在学习micropython的过程中,发现利用TPYBoardv202(ESP8266芯片)更加方便,可以直接形成一个AP,并建立一个WEB服务器。于是,选定用这个模块来完成。

  第三,WIFI与USB-HID的连接。连接的接口也有很多种,可以通过I2C、SPI等接口。这里我选用的是串口,只需要将TPYBoardV102与TPYBoardV202两个板子上的TX、RX相互交叉接线就可以了,操作非常简单。

  WHID示意图如下:

  利用micropython完成WHID的简易拼装:

  利用WHID为隔离主机建立隐秘通道

  2WHID通道搭建原理

  对于一个WHID来说,由于其带有的WIFI模块,构建了一个无线网络,所以我们完全可以考虑利用这个WIFI网络实现与PC之间的隐蔽通讯,从而建立一套自定义的无线网卡。如果说,对于互联网主机,USB-HID可以实现payload的植入,利用payload反弹一个shell的话,那么对于隔离主机,WHID一样可以反弹一个shell给攻击者,实现对隔离主机的攻击。从原理来说,就是WHID通过HID在隔离主机内植入一个payload,也可以认为是WHID自定义网卡的驱动,然后隔离主机会通过串口等接口与WHID进行交互,WHID再将交互内容通过WIFI模块传递给远端的控制者。

  第一,实现USB-HID设备与隔离主机的通讯。其实,USB-HID负责与PC进行通讯的就是一个单片机,其与PC的通讯方式有很多种,最为常见的就是串口通讯,往往在单片机与pc之间会有一个TTL转USB的芯片,如CH340等。一般串口通讯的最大速度为115200bps,约相当于每秒14KB。如果在通讯中觉得这个速度过于有限,那也可以尝试使用SPI转USB,这样速度可以达到每秒10MB以上。TPYBoardv102开发板自带了TTL转USB模块,所以本文中的研究过程全部采用串口通讯。

  第二,实现USB-HID与WIFI模块之前的通讯,由于TPYBoardv102本身带有SD卡存储,可以作为缓存存放,这样在速度上要求不是很高,所以TPYBoardv102与TPYBoardv202(ESP8266)之间完全可以采用串口通讯,连接简单,操控方便。

  第三,实现WIFI模块与控制终端之间的通讯,这一点对于WIFI来说一定是通过无线网络。本研究中,利用TPYBoardv202建立了一个AP及web服务器,提供WEB网页服务做为控制平台。

  于是,WHID与隔离主机之间的通道传输如下图所识:

  3利用隔离主机WHID通道读取文件

  为了说明如何利用WHID从隔离主机中获取信息,这里我们以获取文件为例进行讲解。命题为获取D盘根目录下test.txt的内容。具体步骤为:

  (1)准备一套可供使用的Payload代码。根据命题,payload需要解决两个问题,一是类似上位机,获取WHID所在串口,并通过握手包来确认其工作正常;二是读取D盘下的test.txt文件内容,并通过串口向WHID进行传送。

  (2)利用WHID完成payload植入。植入是打通通道的最关键一步,第一步中准备的payload相当于给WHID安装了驱动,从而保障PC与WHID的通讯畅通。这里的植入过程,依然还是依赖于HID。常见的使用方法为将Payload存在特定存储位置,HID仿真键盘运行payload。

  (3)payload运行后,查找WHID所在的串口,与WHID进行握手,确认通讯正常,然后读取D盘根目录下的test.txt文件,将内容通过串口传送给WHID设备。

  (4)WHID实现一个AP,并建立一个WEB服务器,将获取到的串口数据在自身实现的web上进行呈现。此时手机或者其它终端连接到这个AP上,通过Web就能查看结果。

  实现的攻击效果为,通过手机连入WHID建立的无线网络,然后输入WHID预定的web地址,会呈现上图中的WEB控制页面,当点击“植入”后,电脑中会闪过“运行”框,从而完成payload植入,然后点击“查看”,就能获取到文件内容。如下图:

  如果攻击者,把WHID与一个USB设备进行伪装,其攻击就很具有迷惑性。如与USB小音箱封装到一个盒子里,从外表看,就是一个略大点的USB音箱,但实际上已经可以进行WHID攻击了。当然攻击者也完成可以通过payload从隔离主机中反弹出一个shell,从而再进行进一步的渗透。

  【效果视频】

  【部分代码】

  仅包含硬件固件,未包含Payload。

  http://pan.baidu.com/s/1qXVhfWg

  【免责声明】

  请不要在非合法情况下利用TPYboard实施攻击,这种行为将会被视作非法活动。由本软件所造成的任何不良后果,作者将不承担任何责任,请各位谨慎使用。

  

TPYBoard实例之利用WHID为隔离主机建立隐秘通道的更多相关文章

  1. 利用WHID为隔离主机建立隐秘通道

    0 引言 从2014年BADUSB出现以后,USB-HID攻击就这一直被关注,且具争议.争议的焦点是USB-HID的实战效果过于“鸡肋”,无论从早期的BADUSB,还是到后来的各种USB-HID设备, ...

  2. 利用Ossim系统进行主机漏洞扫描

    利用Ossim系统进行主机漏洞扫描 企业中查找漏洞要付出很大的努力,不能简单的在服务器上安装一个漏洞扫描软件那么简单,那样起不了多大作用.这并不是因为企业中拥有大量服务器和主机设备,这些服务器和设备又 ...

  3. windows环境利用apache 配置虚拟主机

    windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...

  4. Docker容器利用weave实现跨主机互联

    Docker容器利用weave实现跨主机互联 环境: 实现目的:实现主机A中容器1与主机B中容器1的网络互联 主机A步骤: ①下载复制weave二进制执行文件(需要internet)[root@192 ...

  5. 基于Wi-Fi的HID注射器,利用WHID攻击实验

    WHID代表基于 Wi-Fi 的 HID 注射器,即对 HID 攻击进行无线化攻击的一种注入工具. 实验攻击原理如下图: 攻击者使用ESP8266作为AP,在自己的电脑创建客户端连接AP.在客户端键入 ...

  6. 如何利用webmin在Linux主机中添加网站

    Linux系统因其高效稳定而受到广大用户的推崇与青睐,然后其管理的复杂性也使很多用户望而却步,动弹不得.为了降低 Linux系统的管理难度,更有效方便的使用该系统,我司所有Linux主机或VPS系统均 ...

  7. 在Apache中利用ServerAlias设置虚拟主机接收多个域名和设置域名泛解析

    ServerAlias:服务器别名,在Apache中可以用于设置虚拟主机接收到个域名,也可以用于接收泛解析的域名.具体的设置方法如下: 一.用于设置虚拟主机接收多个域名 一个虚拟主机常常会接收多个域名 ...

  8. Nagios利用NSClient++监控Windows主机

    在Nagios的libexec下有check_nt这个插件,它就是用来检查windows机器的服务的.其功能类似于check_nrpe.不过还需要搭配另外一个软件NSClient++,它则类似于NRP ...

  9. 爬虫入门实例:利用requests库爬取笔趣小说网

    w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/, 爬取<凡人修仙传仙界篇>的所有章节 1.利用requests访问目标网址,使用了get方法 ...

随机推荐

  1. huangwenlong and hanqihong开光的dijkstra

    #include<iostream> #include<vector> #include<queue> #include<cstring> #inclu ...

  2. AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  3. SQL-删除重复记录

    前几日工作的时候,有个小需求,是要求删除一个表table_A里的重复记录(保留一条),假设以字段COL_PK重复来判断记录重复,那么有几种写法: 在Oracle里,可以利用rowid来删除,这是非常高 ...

  4. Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效)

    Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效) 前言 今天在使用Spring cache的Cacheable注解的过程中遇见了一个Cacheable注解失效的问题, ...

  5. android.app.Activity 的介绍

    发现当前Android的资料不是非常多,并且对于Activity的介绍也非常少.所以把官方文档的android.app.Activity的介绍翻译了一下,增加了一些自己的理解.各位假设认为我自己理解的 ...

  6. 二.java下使用RabbitMQ实现hello world

    上一篇文章介绍了windows环境下的安装和配置rabbitMQ,具体戳这边,一.windows环境下rabbit的的安装和配置. 现在我们可以着手编写hello world程序了,一窥RabbitM ...

  7. Eclipse Maven构建WebApp项目资源目录显示不全的原因与解决方式

    一.问题展示 1.Eclipse在使用Maven构建WebApp项目的时候,首先Maven的安装和配置都没有问题的,但是构建项目之后,Maven项目要求的几个必须要有的资源目录显示不了: 问题如下图: ...

  8. 《深入理解计算机系统》【PDF】下载

    <深入理解计算机系统>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382303 内容提要 本书主要介绍了计算机系统的基本概念,包 ...

  9. adobe acrobat x pro破解版

    adobe acrobat x pro破解版是Adobe官方出品的PDF文档全能解决方案套件. PDF文件格式是Adobe公司设计的,用其公司开发的Adobe Acrobat X Pro来创建.编辑. ...

  10. Struts2学习---简单的数据校验、访问Web元素

    1.简单的数据校验 在action里面我们已经给出了一个数据校验: public String execute() { if(user.getUsername().equals("usern ...