
你是否曾在电影中见过这样的场景:黑客将一个看似普通的U盘插入电脑,瞬间窃取数据?今天,你将亲手打造一个能够实现同样功能的设备。
⚠️ 声明:
本项目中的所有内容仅供安全研究目的使用。
2022年夏天,我开始着手构建一个能从目标电脑中提取数据的设备。但究竟如何部署恶意软件并窃取信息呢?在以下章节中,我将逐步讲解创建自定义击键注入工具所涉及的关键步骤、基本概念以及技术细节。虽然本项目专门针对WiFi凭证,但你可以轻松修改负载以实现更高级或更恶意的目的——真正的限制只在于你的创造力和技术专长。
随着时间的推移,该项目已发展壮大,包含了多种脚本和工具。它最初是为了演示Rubber Ducky的能力而创建的——具体来说,是使用树莓派Pico(RPi Pico)的经济型版本。目前,该项目的主要两部分是:
物理接触目标已解锁的电脑。
电脑必须能够访问互联网,以便通过SMTP通过网络介质发送被盗数据。
对于Linux漏洞利用,需要知道受害者电脑的密码。
创建pico-ducky后,你只需将修改后的负载(针对Windows漏洞利用调整了你的SMTP信息,以及/或者针对Linux漏洞利用调整了密码和U盘名称)复制到RPi Pico上。
[!NOTE]
你也可以使用Rubber Ducky来构建此工具,但请注意,RPi Pico售价约4美元,而Rubber Ducky售价80美元。
然而,虽然pico-ducky是一个经济实惠的解决方案,但Rubber Ducky在隐蔽性和使用最新版DuckyScript方面更具优势。
为了在RPi Pico上使用Ducky Script编写负载,你需要先将其转换为pico-ducky。请按照这些简单步骤来创建pico-ducky。
击键注入工具一旦连接到主机,就会通过运行模拟用户输入的击键代码来执行恶意命令。它看起来像是一个U盘,但实际上就像一个键盘,会自动输入预编程的负载。像Rubber Ducky这样的工具每分钟可以输入超过1000个单词。一旦创建,任何拥有物理接触的人都可以轻松部署该负载。
负载使用STRING命令来处理注入的击键。它接受一个或多个字母数字/标点符号字符,并按原样将剩余的行输入到目标机器中。ENTER/SPACE将模拟键盘按键的按下操作。
我们使用DELAY命令来暂时暂停负载的执行。当负载需要等待某个元素(如命令行)加载完成时,这非常有用。在刚开始时,当新的USB设备连接到目标电脑时,使用延迟尤其重要。最初,电脑必须完成一系列操作后才能开始接受输入命令。对于HID设备而言,设置时间非常短。大多数情况下,只需几分之一秒,因为驱动程序是内置的。但在某些情况下,较慢的PC可能需要更长时间才能识别pico-ducky。一般建议根据你的目标调整延迟时间。
数据窃取是指未经授权将数据从电脑/设备中转移出去。一旦数据被收集,攻击者可以将其打包,通过加密或压缩等方式避免在通过网络发送数据时被检测到。两种最常见的数据窃取方式是:
要使用Windows负载(payload1.dd),你无需在引脚之间连接杜邦线。
一旦密码被导出到.txt文件,负载将使用Yahoo SMTP将数据发送到指定的电子邮件。有关更详细的说明,请访问以下链接。此外,负载模板需要更新你的SMTP信息,即需要更新RECEIVER_EMAIL、SENDER_EMAIL以及你的电子邮件PASSWORD。此外,你也可以更新邮件的正文和主题。
[!NOTE]
通过电子邮件发送数据后,
.txt文件会被删除。你也可以使用其他邮件提供商的SMTP,但需要注意在负载中写入正确的SMTP服务器和端口号。
请注意,某些网络可能会在防火墙中阻止未知SMTP的使用。
要使用Linux负载(payload2.dd),你需要在GND和GPIO5之间连接一根杜邦线,以符合RPi Pico上code.py中的代码。关于如何在RPi Pico上设置多个负载的更多信息,请访问此链接。
图1:Linux上的漏洞利用
一旦密码从电脑中导出,数据将保存到指定的U盘中。为了使此负载正常工作,需要更新U盘的正确名称,即在两个位置将USBSTICK替换为你的U盘名称。
此外,你还需要在负载中更新Linux的PASSWORD,共有三处。如上所述,要使此漏洞利用成功,你需要知道受害者Linux机器的密码,这降低了攻击的可行性。
要运行wifi_passwords_print.sh脚本,你需要用正确的U盘名称更新该脚本,之后可以在终端中输入以下命令:
echo PASSWORD | sudo -S sh wifi_passwords_print.sh USBSTICK
其中PASSWORD是你的账户密码,USBSTICK是你的USB设备名称。
NetworkManager基于连接配置文件的概念,并使用插件来读写数据。它采用.ini风格的keyfile格式并存储网络配置配置文件。keyfile是一个支持NetworkManager所有连接类型和功能的插件。这些文件位于/etc/NetworkManager/system-connections/。基于keyfile格式,负载使用grep命令配合正则表达式来提取感兴趣的数据。对于文件过滤,使用了修改过的正向预查断言((?<=keyword))。正向预查断言会在字符串的特定位置进行匹配,即紧跟在keyword之后的位置,而不将该文本本身作为匹配的一部分,而正则表达式(?<=keyword).*将匹配keyword之后的任何文本。这使得负载能够匹配SSID和psk(预共享密钥)关键字之后的值。
关于NetworkManager的更多信息,这里有一些有用的链接: