制作Wi-Fi Ducky远程HID攻击设备
1、介绍WIFI DUCKY
它是一个Wi-Fi控制的BadUSB设备来远程执行Ducky Scripts。
使用充当键盘的USB设备来注入攻击,Hak5 的 USB Rubber Ducky 是这种攻击的黑客小工具。它引入了一个简单的脚本语言,称为Ducky Script,这个项目也是这样使用的。
该设备使用 ESP8266 + ATMEGA32U4 创建WIFI信号,进行远程上传、保存和运行脚本进行攻击
但是为什么要添加Wi-Fi,你可能会问。
使用Wi-Fi,您可以远程上传并运行Ducky Script。
只需将设备插入,连接到其Wi-Fi网络,即可完全控制目标机器。
它还给你一个比其他BadUSB更大的优势,你可以测试你的脚本!您不需要将它们复制到micro-sd卡或编译它们。您可以通过web界面直接运行它们,这使得它非常容易测试和改进脚本。
它还为不同的攻击增加了很多可能性。您可以使目标从Wi-Fi网络下载可执行文件,而不是互联网。或者执行不同的攻击并将结果发回。或者打开ESP8266s Wi-Fi上的反向Shell。
等等...有这么多的可能性,赶快动手做起来吧!
2、所需材料:
1.CJMCU-Beetle Leonardo USB ATMEGA32U4
2.ESP8266-12F
3.AMS1117-3.3V电源模块
3、所需软件:
ARDUINO IDE 下载地址:https://www.arduino.cc/en/Main/Software
NodeMCU Flasher 下载地址:https://github.com/nodemcu/nodemcu-flasher
4、接线图:
5、写入固件到ESP8266
首先,然后将下列代码上传到Arduino:
int program_pin = 12; int enable_pin = 13;void setup() {Serial1.begin(115200);Serial.begin(115200);pinMode(enable_pin, OUTPUT);pinMode(program_pin, OUTPUT);digitalWrite(program_pin, LOW);digitalWrite(enable_pin,HIGH); }void loop() {while(Serial1.available()){Serial.write((uint8_t)Serial1.read());}if(Serial.available()){while(Serial.available()){Serial1.write((uint8_t)Serial.read());}} }
将设备连接PC,打开Arduino IDE,选择开发板和端口
然后点击 上传 将代码写入Arduino
写入成功后,前往https://github.com/spacehuhn/wifi_ducky/releases 下载esp8266_wifi_duck_4mb.bin 固件
我编译的中文web界面固件 点击下载
然后打开 NodeMCU Flasher 写入软件
将参数设置如下
然后选择固件
选择端口,点击 Flash 开始写入固件
写入完成后需要将 GPIO0 的线断开,变成如下的接线,即可进行下一步写入代码
6、写入代码到ATMEGA32U4
#include <Keyboard.h> #define BAUD_RATE 57200#define ExternSerial Serial1String bufferStr = ""; String last = "";int defaultDelay = 0;void Line(String _line) {int firstSpace = _line.indexOf(" ");if(firstSpace == -1) Press(_line);else if(_line.substring(0,firstSpace) == "STRING"){for(int i=firstSpace+1;i<_line.length();i++) Keyboard.write(_line[i]);}else if(_line.substring(0,firstSpace) == "DELAY"){int delaytime = _line.substring(firstSpace + 1).toInt();delay(delaytime);}else if(_line.substring(0,firstSpace) == "DEFAULTDELAY") defaultDelay = _line.substring(firstSpace + 1).toInt();else if(_line.substring(0,firstSpace) == "REM"){} //nothing :/else if(_line.substring(0,firstSpace) == "REPLAY") {int replaynum = _line.substring(firstSpace + 1).toInt();while(replaynum){Line(last);--replaynum;}} else{String remain = _line;while(remain.length() > 0){int latest_space = remain.indexOf(" ");if (latest_space == -1){Press(remain);remain = "";}else{Press(remain.substring(0, latest_space));remain = remain.substring(latest_space + 1);}delay(5);}}Keyboard.releaseAll();delay(defaultDelay); }void Press(String b){if(b.length() == 1) Keyboard.press(char(b[0]));else if (b.equals("ENTER")) Keyboard.press(KEY_RETURN);else if (b.equals("CTRL")) Keyboard.press(KEY_LEFT_CTRL);else if (b.equals("SHIFT")) Keyboard.press(KEY_LEFT_SHIFT);else if (b.equals("ALT")) Keyboard.press(KEY_LEFT_ALT);else if (b.equals("GUI")) Keyboard.press(KEY_LEFT_GUI);else if (b.equals("UP") || b.equals("UPARROW")) Keyboard.press(KEY_UP_ARROW);else if (b.equals("DOWN") || b.equals("DOWNARROW")) Keyboard.press(KEY_DOWN_ARROW);else if (b.equals("LEFT") || b.equals("LEFTARROW")) Keyboard.press(KEY_LEFT_ARROW);else if (b.equals("RIGHT") || b.equals("RIGHTARROW")) Keyboard.press(KEY_RIGHT_ARROW);else if (b.equals("DELETE")) Keyboard.press(KEY_DELETE);else if (b.equals("PAGEUP")) Keyboard.press(KEY_PAGE_UP);else if (b.equals("PAGEDOWN")) Keyboard.press(KEY_PAGE_DOWN);else if (b.equals("HOME")) Keyboard.press(KEY_HOME);else if (b.equals("ESC")) Keyboard.press(KEY_ESC);else if (b.equals("BACKSPACE")) Keyboard.press(KEY_BACKSPACE);else if (b.equals("INSERT")) Keyboard.press(KEY_INSERT);else if (b.equals("TAB")) Keyboard.press(KEY_TAB);else if (b.equals("END")) Keyboard.press(KEY_END);else if (b.equals("CAPSLOCK")) Keyboard.press(KEY_CAPS_LOCK);else if (b.equals("F1")) Keyboard.press(KEY_F1);else if (b.equals("F2")) Keyboard.press(KEY_F2);else if (b.equals("F3")) Keyboard.press(KEY_F3);else if (b.equals("F4")) Keyboard.press(KEY_F4);else if (b.equals("F5")) Keyboard.press(KEY_F5);else if (b.equals("F6")) Keyboard.press(KEY_F6);else if (b.equals("F7")) Keyboard.press(KEY_F7);else if (b.equals("F8")) Keyboard.press(KEY_F8);else if (b.equals("F9")) Keyboard.press(KEY_F9);else if (b.equals("F10")) Keyboard.press(KEY_F10);else if (b.equals("F11")) Keyboard.press(KEY_F11);else if (b.equals("F12")) Keyboard.press(KEY_F12);else if (b.equals("SPACE")) Keyboard.press(' ');//else Serial.println("not found :'"+b+"'("+String(b.length())+")"); }void setup() {Serial.begin(BAUD_RATE);ExternSerial.begin(BAUD_RATE);pinMode(13,OUTPUT);digitalWrite(13,HIGH);Keyboard.begin(); }void loop() {if(ExternSerial.available()) {bufferStr = ExternSerial.readStringUntil("END");Serial.println(bufferStr);}if(bufferStr.length() > 0){bufferStr.replace("\r","\n");bufferStr.replace("\n\n","\n");while(bufferStr.length() > 0){int latest_return = bufferStr.indexOf("\n");if(latest_return == -1){Serial.println("run: "+bufferStr);Line(bufferStr);bufferStr = "";} else{Serial.println("run: '"+bufferStr.substring(0, latest_return)+"'");Line(bufferStr.substring(0, latest_return));last=bufferStr.substring(0, latest_return);bufferStr = bufferStr.substring(latest_return + 1);}}bufferStr = "";ExternSerial.write(0x99);Serial.println("done");} }
等提示 写入成功,把设备拔出,重新连接PC
7、如何使用它
这时用手机搜索WIFI会找到
WIFI:WIFI DUCK PASSWD:quackquack
打开浏览器,输入 http://192.168.4.1 进入管理地址
在这里,你可以上传,查看,删除和运行新的Ducky Scripts。
请注意,脚本的每行最大长度为600个字符。
如何写Ducky Scripts:https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Duckyscript
8、通过Web界面更新ESP8266固件
如想更新固件,可以通过Web界面进行更新。
转到192.168.4.1/info并上传新的.bin文件
9、编译自定义固件
安装Arduino库
ESP8266 SDK
ESPAsyncWebServer
ESPAsyncTCP
打开Arduino点击 文件->首选线
http://arduino.esp8266.com/stable/package_esp8266com_index.json
添加上列代码到 附加开发板管理网址,然后点击 工具->开发板->开发板管理器 搜索 ESP 点击安装
然后下载 ESPAsyncWebServer 和 ESPAsyncTCP 在Arduino中点击 项目->加载库->添加一个.zip库
修改esp8266_wifi_duck\html\files下的文件,然后打开 minifier.html点击 "minify + byte-ify"转换格式,并替换掉 data.h 里面的内容(这里提供下我汉化的中文WEB界面:点击下载)
然后在Arduino IDE中打开 esp8266_wifi_duck.ino 开发板选择:Generic ESP8266 Module Flash大小选择:4M (1M SPIFFS)然后点击 项目->验证/编译 再点击 项目->导出已编译的二进制文件
10、制作过程视频(生肉)
11、参考资料
https://github.com/spacehuhn/wifi_ducky
https://github.com/basic4/WiDucky
http://www.cnblogs.com/k1two2/p/6849941.html(文章末尾有网友"g0ttl"的演示作品)
制作Wi-Fi Ducky远程HID攻击设备相关推荐
- wifi频率和zigbee干扰_浅谈ZigBee和Wi—Fi的共存和干扰
龙源期刊网 http://www.qikan.com.cn 浅谈 ZigBee 和 Wi - Fi 的共存和干扰 作者:姜伟 朱凯 刘童 来源:<科技视界> 2013 年第 16 期 [摘 ...
- 比较802.11ac(Wi‑Fi 5)和802.11ax(Wi‑Fi 6)
MIMO 802.11ac仅在下行模式下,支持多用户MIMO. 802.11ax不仅下行链路:也在上行链路支持MIMO功能,因此多个用户可以同时上传视频. 调制方法 802.11ax具有更高的调制方案 ...
- 从零开始学USB(二十四、USB接口HID类设备(六)_物理描述符)
物理描述符也称作实体描述符.被用来描述设备的行为特性. 物理描述符是一种数据结构,它提供有关激活控件或控件的人体特定部分的信息. 例如,物理描述符可能指示右手拇指用于激活按钮5.应用程序可以使用此信息 ...
- Typora远程解绑设备的方法
Typora远程解绑设备的方法 Typora远程解绑设备的方法 重装了一下电脑又要重新激活typora,但是提示了设备超过3台,所以就要去解绑设备.但是由于电脑已经重装了,所以没有办法在软件上进行解绑 ...
- ctf ddos数据包 杂项 流量_抗DDoS攻击设备化解危机于无形
攻击手法翻新 DDoS攻击已经存在发展了很多年,近来这类攻击方式发生了一些新的变化. 传统的DDoS攻击是黑客通过大量僵尸主机针对目标发送海量伪造数据,阻塞用户网络或应用,这种大流量的.伪造数据包攻击 ...
- IE无法上网,远程计算机或设备将不接受连接,其他浏览器可用
IE浏览器突然不能上网了,但是其他浏览器可以,QQ什么的也都正常,只有IE是出现:远程计算机或设备将不接受连接 这个问题,网上找了很多答案都没用,什么设置WINS,允许远程访问,取消internet代 ...
- 远程计算机或设备将不接受连接 解决方案
问题场景 某天早上过来打开电脑谷歌浏览器突然不能联网了,但是电脑本身是有网的,QQ啥的都能登,运行网络诊断后显示:远程计算机或设备将不接受连接 解决方案 我这里是由于上次关闭电脑时kxsw软件没有正常 ...
- 显示远程计算机或设备将不接受连接的解决办法
当你的电脑浏览器不能正常上网时,显示 点击网络诊断,显示远程计算机或设备将不接受连接 此时,不要慌. 解决办法: 1.点击左下角开始,点击运行,输入inetcpl.cpl,点击确定,打开Interne ...
- WIN7 | 网络正常,但网页打不开 | 远程计算机或设备不接受连接
1. 远程计算机或设备不接受连接-太平洋IT百科手机版 我的电脑网络问题是靠这个博客解决的: 2. win7不能打开网页怎么办_win7系统中浏览器无法打开网页怎么解决-win7之家 3. 网络连接 ...
最新文章
- Dalvik与JVM区别
- Python-技术篇-使用logging模块打印详细报错日志,获取报错信息位置行数方法
- UA MATH636 信息论8 纠错码简介
- Oracle日期相关
- mysql加入用户_Mysql 添加用户
- 企鹅java游戏下载安装_企鹅企鹅生活安卓版游戏下载|企鹅企鹅生活手游下载v1.6.1-乐游网安卓下载...
- Linux NTP服务配置 for Oracle RAC
- linux下iostat命令无效,linux iostat命令详解
- 如何在服务器上使用宝塔面板?
- 微pe添加网络组件_Nature子刊 | 微塑料影响微生物群落和氮循环
- 迅为IMX6ULL开发板Linux系统移植-NXP官方Linux源码编译
- 问题:找不到该项目,该项目不在指定目录下.......请确认位置......
- 黑苹果10.14版本n卡安装以及声卡驱动
- linux中 . .bash_profile是什么意思
- unbuntu 安装vscode
- 操作系统—PV操作解决和尚打水问题
- MobileNetV2: Inverted Residuals and Linear Bottlenecks(MobileNetV2)-论文阅读笔记
- 用Python批量下载视频
- Python读取zip文件中的图片(无需解压)
- ARP欺骗数据帧转发之MAC修改