【网络安全】怎样反制红队 “硬件“ 攻击

前言

随着红蓝对抗日益激烈,而红队的攻击点从原有的 Web 方法,也涉及到了很多的方向,例如硬件攻击。

而硬件攻击最显著的就是 Badusb。说起这个玩意儿。想必大家都知道,网上一搜一大堆制作文章。

另一种烧录 BadUsb

网上的确有大多数 BadUsb 的烧录方法,但都是基于 arduino 界面的烧录,但经过本人研究

arduino 也是可以通过命令行参数进行烧录的,具体如下:

C:\Users\Administrator\Desktop\Arduino\arduino_debug.exe --port COM端口 --upload 烧录的内容文件

文件路径的话,可以看如下图,当对内容进行保存的时候,给出了详细信息,后缀名为 ino,经过笔者用命令行编译试验,路径要为:

C:\xxx\sketch_apr01a\sketch_apr01a.ino

sketch_apr01a 为项目文件,而在上层还要有一个 sketch_apr01a 名字的目录

代码分析流程

Windows sdk 开发中,任何一个窗口都能接收消息并响应。同理 BadUSB 或 U 盘插入或拔出也会有相应的消息与响应。

用到的消息为:WM_DEVICECHANGE

(通知应用程序对设备或计算机的硬件配置进行更改,通过 WindowProc 函数接收消息)

函数原型如下:

LRESULT CALLBACK WindowProc ( HWND hWnd, 
                              UINT message,
                                WPARAM wParam, 
                                LParam);

WindowProc 中第三个参数 wParam,指向发生的事件,该参数 Dbt.h 头文件找那个的值。说说我们要用到的宏吧,Dbt.h 中:

DBT_DEVICEARRIVAL //设备插入会进行响应
DBT_DEVICEREMOVECOMPLETE //设备拔出时响应

代码实现消息响应

首先来看 WndProc 函数。具体实现就是通过一个 case 来进行消息响应的

添加自己的消息响应,以下代码当 BadUSB 插入之后,会弹窗显示设备插入。

case WM_DEVICECHANGE://捕获设备更改时的消息
    switch (wParam){
    case DBT_DEVICEARRIVAL://捕获设备插入
      MessageBoxA(NULL, "设备插入", "test", NULL);
      break;
    case DBT_DEVICEREMOVECOMPLETE://捕获设备弹出
      MessageBoxA(NULL, "设备拔出", "test", NULL);
      break;
    }

这里当我插入 BadUSB 之后,成功捕获到消息并弹窗。

核心代码实现

既然当 BadUSB 插入之后,会响应消息函数,那让消息函数执行 arduino 命令行并进行自动烧录。当红队后期做更改 BadUSB 的时候,就会执行我们烧录的代码

BadUSB 将要烧录的内容如下,setup 函数为初始化函数。当 BadUSB 插入之后,打开记事本并输入 By:Met32 这串字符。这里可自行更改… 我这里为了演示方便就这样写的。

void setup() {
  // put your setup code here, to run once:

Keyboard.begin();//开始键盘通信
 
delay(1000);//延时1000毫秒,不要太短,因为每天电脑的运行速度都不一样 
 
Keyboard.press(KEY_CAPS_LOCK); //按下大写键 这里我们最好这样写 不然大多数电脑在中文输入的情况下就会出现问题
 
Keyboard.release(KEY_CAPS_LOCK); //释放大写键
 
delay(500);
 
 
Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键 
 
delay(500); 
 
Keyboard.press('r');//按下r键 
 
delay(500); 
 
Keyboard.release(KEY_LEFT_GUI);//松掉win键 
 
Keyboard.release('r');//松掉r键 
 
delay(500); 
 
Keyboard.println("notepad");//输入notepad 打开记事本
 
delay(500); 
 
Keyboard.press(KEY_RETURN); //按下回车键
 
Keyboard.release(KEY_RETURN); //释放回车键
 
delay(500); 
 
Keyboard.println(" By:Met32");//输入我们想显示的信息
 
Keyboard.press(KEY_RETURN); //按下回车键
 
Keyboard.release(KEY_RETURN); //释放回车键
 
delay(500);
 
Keyboard.press(KEY_CAPS_LOCK); //按下大写键
 
Keyboard.release(KEY_CAPS_LOCK); //释放大写键 我们再次关闭开启的大写键
 
delay(500);
 
Keyboard.end();//结束键盘通讯 

}

void loop() {
  // put your main code here, to run repeatedly:

}

WndProc 全部实现代码如下。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  int wmId, wmEvent;
  PAINTSTRUCT ps;
  HDC hdc;

  switch (message)
  {
  case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // 分析菜单选择: 
    switch (wmId)
    {
    case IDM_ABOUT:
      DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
      break;
    case IDM_EXIT:
      DestroyWindow(hWnd);
      break;
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
  case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    // TODO:  在此添加任意绘图代码...
    EndPaint(hWnd, &ps);
    break;
  case WM_DESTROY:
    PostQuitMessage(0);
    break;
  case WM_DEVICECHANGE:
    switch (wParam){
    //代码在这
    case DBT_DEVICEARRIVAL:
      system("C:\Users\Arduino\arduino_debug.exe --port COM5 --upload C:\Users\Administrator\Desktop\sketch_apr01a\sketch_apr02a\sketch_apr02a.ino");
      break;
    case DBT_DEVICEREMOVECOMPLETE:
      MessageBoxA(NULL, "设备拔出", "test", NULL);
      break;
    }
    break;
  default:
    return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

使用过程

现在来看一下效果,当 BadUSB 插入之后,自行拷贝烧录内容到对方的 BadUSB。

之后把程序退出,BadUSB 从新插入一下,成功显示,证明我们成功烧录到对方的 BadUSB

结尾注意点

Arduino 路径方面的问题不必担心,因为都是自己本机,写死即可,问题就在 COM 端口这,当 BadUSB 插入之后,我们是不确定使用的哪个端口的。因此可以通过一个循环将常用的 COM 端口号全部执行一遍即可。

如果想更加完善一点,可以检测当 BadUSB 插入之后禁用键盘 (禁止对方代码操作),之后在执行我们的 system 命令。

​最后

为了帮助大家更好的学习网络安全,小编给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

因篇幅有限,仅展示部分资料

2️⃣视频配套资料&国内外网安书籍、文档

① 文档和书籍资料

② 黑客技术

因篇幅有限,仅展示部分资料

👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)👈

3️⃣网络安全源码合集+工具包

4️⃣网络安全面试题

5️⃣汇总

所有资料 ⚡️ ,朋友们如果有需要全套 《网络安全入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)👈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值