Generează sarcini utile pentru metasploitul, devenind în el

În timpul dezvoltării exploatării, este probabil necesar să generați codul shell utilizat în exploatare. Metasploitpayloads pot fi generate din cadrul msfconsole. Când folosiți un anumit încărcătură utilă. Metasploit adaugă comenzile "generate", "pry" și "reload". Generați va deveni punctul central al acestui articol, explorând utilizarea Metasploit.







Să începem prin examinarea diferitelor opțiuni pentru comanda "ganerate", să o executați cu "-h".

Pentru a genera codul shell fără opțiuni, pur și simplu emite comanda "generare".

Desigur, probabilitatea de a genera un cod shell fără defecte este destul de scăzută. Destul de des, vor fi folosite caractere proaste și tipuri specifice de codificatoare, în funcție de mașina țintă.

Exemplul de cod de mai sus conține un caracter aproape universal rău, un octet nul (\ x00). Unele dintre exploatările oferite permit să fie folosite, dar nu foarte multe. Să generăm același cod shell, dar de data aceasta vom da instrucțiuni Metasploit pentru a elimina acest byte nedorit.

Pentru a realiza acest lucru, am setat comanda "ganerate" urmată de "-b" cu octeții însoțitori pe care vrem să le refuzăm în procesul de generare.

Privind acest cod de shell, puteți observa cu ușurință faptul că în comparație cu shell-ul generat anterior. zero octeți au fost șterse cu succes. Acest lucru ne oferă o sarcină utilă zero la zero. De asemenea, vedem și alte diferențe semnificative legate de schimbarea forțată a generației.

O diferență este dimensiunea obișnuită a octeților codurilor shell. În integrarea anterioară, dimensiunea a fost de 328 octeți. în shell-ul nou este de 27 octeți mai mare.

În timpul generării, octeții inițiali nula sau folosiți în cod trebuie să fie înlocuiți sau codificați pentru a se acoperi, numai în memoria shell-ului shell asociat.

O altă schimbare importantă este adăugarea codificatorului folosit. În mod implicit, Metasploit selectează cel mai bun encoder pentru a finaliza sarcina la îndemână. Codificatorul este responsabil pentru eliminarea caracterelor nedorite (printre altele) introduse când se utilizează "-b". Vom discuta encoderele în detaliu mai târziu.

Când se specifică caracterele nedorite, cadrul va folosi cel mai bun encoder pentru a lucra cu. A fost folosit un encoder x86 / shikata_ga_nai. când octetul zero a fost limitat, în timpul generării codului. Dacă adăugăm mai multe caractere nedorite, putem folosi un personaj diferit pentru a efectua aceeași sarcină. Să adăugăm câțiva octeți în listă și să vedem ce se întâmplă.

Vedem că codificatorul este diferit de cel care a șters cu succes pe lângă octeții nedoriți. Shikata_ga_nai. probabil nu a fost capabil să codifice sarcina utilă folosind lista noastră de limite octet. Cu toate acestea, Fnstenv_mov a reușit să realizeze acest lucru.

Generarea sarcinii generate nu a reușit

Având capacitatea de a genera codul shell fără a utiliza anumite caractere este una dintre marile posibilități oferite de acest cadru. Aceasta nu înseamnă că acestea sunt nelimitate.

Nu se pot executa prea mulți octeți limitați de codor. Într-o astfel de perioadă, Metasploit va reflecta următorul mesaj.







Acest lucru este similar cu modul de a elimina o mulțime de litere din alfabet și de a cere pe cineva să scrie o propoziție completă. Uneori nu poate să o facă.

Utilizând un codificator în timp ce generează sarcini utile

După cum am menționat mai devreme, cadrul va selecta cel mai bun encoder disponibil atunci când generează sarcină utilă. Cu toate acestea, există momente când este necesar să se utilizeze un anumit tip de codificator, indiferent de ce gândește Metasploit. Imaginați-vă că un exploit va reuși numai dacă nu conține caractere alfanumerice. Encoderul "shikata_ga_nai" în acest caz este inutil, deoarece folosește destul de multe simboluri pentru codificare. După ce ne uităm la lista de codificatoare, vedem că este prezent codificatorul "x86 / nonalpha".

Să reintroducem încărcătura utilă, dar de data aceasta să spunem că cadrul utilizează codificatorul "nonalpha". Facem acest lucru comutând cu '-e' și numele codificatorului ulterior, așa cum se arată în lista de mai jos.

Dacă totul merge conform planului, atunci sarcina utilă nu va conține niciun caracter alfanumeric. Dar trebuie să fim atenți atunci când folosim un codificator diferit decât cel implicit. De obicei, acest lucru ne va da o sarcină mai mare. De exemplu, cel care a emis acest codificator este mult mai mult decât în ​​exemplele anterioare.

Următoarea noastră opțiune din listă este comutatorul -f. Aceasta ne permite să salvăm rezultatul încărcării utile generate în fișier în loc să îl afișăm pe ecran. Ca întotdeauna, el urmărește comanda 'generate' cu calea fișierului.

Folosind comanda "cat", putem vedea sarcina utilă salvată în fișierul nostru. După cum vedem, putem folosi și mai multe opțiuni atunci când generăm codul shell.

Generarea încărcăturii utile cu fire multiple

Următorul comutator din lista de opțiuni este comutatorul de iterație "-i". Pe scurt, el spune cadrul. câte coduri trebuie să treacă înainte de a produce sarcina utilă finală. Unul dintre motive poate fi evaziunea stealth sau anti-virus. Evaziunea antivirus mai amănunțită o voi examina într-o altă secțiune a MSFU.

Deci, haideți să comparați sarcina utilă shell-ului generată folosind o iterație în comparație cu același shell shell cu 2 iterații.

Comparând cele două ieșiri, vedem efectul evident al celei de a doua iterații a încărcăturii noastre utile. Mai întâi, mărimea octeților este mai mare decât prima. Cele mai multe iterații fac sarcină utilă. cu cât va fi mai mult. În al doilea rând, comparăm concluziile octeților și vedem că ele diferă de asemenea. Aceasta se datorează celei de-a doua iterații sau a celei de-a doua treceri de codificare. Codifică încărcătura utilă o dată, apoi ia sarcina utilă și codifică din nou. Să luăm codul shell și să vedem ce este diferența în cinci iterații.

Modificările sunt semnificative în comparație cu toate concluziile anterioare. Este ceva mai mare și nu există octeți similare în apropierea acestuia. Ceea ce face teoretic această versiune a sarcinii noastre utile, cea mai puțin predispusă la detectare.

Am petrecut mult timp generând codul shell de la început de la valoarea implicită. În cazul unei legări, shell-ul ascultă implicit portul 4444. Adesea, acest lucru trebuie schimbat. Putem face acest lucru cu comutatorul "-o" înainte de valoarea pe care dorim să o schimbăm. Să vedem ce opțiuni putem schimba pentru această sarcină utilă. Din msfconsole specificăm comanda "Show options".

Implicit, shell-ul nostru ascultă pe portul '4444' și scoate funcția 'proces'. Vom schimba acest port la '1234' și vom scoate funcția 'seh' folosind '-o'. Variabila sintaxa = valoare separată de o virgulă între fiecare opțiune. În acest caz, ambele porturi sunt monitorizate și ieșirea funcției este modificată de următoarea sintaxă "LPORT = 1234, EXITFUNC = seh".

Volumul util este generat folosind NOP Sled

În cele din urmă, să aruncăm o privire asupra opțiunilor pentru lungimea saniei NOP și pentru formatul de ieșire. Atunci când se generează sarcini utile în mod implicit, formatul de ieșire este dat în "ruby". Deși limba rubinică este extrem de puternică și populară, nu toate codurile. Avem oportunitatea de a raporta cadrul. pentru a da încărcătura noastră în diferite formate de codificare, cum ar fi Perl. C și Java. de exemplu. Adăugarea saniei NOP este posibilă și la începutul generării codului shell.

Mai întâi, să examinăm mai multe formate de ieșire diferite și să vedem cum se folosește comutatorul -t. Ca toate celelalte opțiuni, tot ce trebuie să faceți este să introduceți un comutator cu următorul nume de format, așa cum se arată în meniul de ajutor.

Adăugarea saniei NOP (nici o operație sau o operație următoare) se face cu comutatorul "-s", înainte de numărul de NOP-uri. Aceasta va adăuga sanie la începutul încărcăturii dvs. utile. Rețineți că, cu cât mai multă sanie, cu atât mai mult va fi codul shell. Prin urmare, adăugarea a 14 NOP va adăuga 14 octeți la dimensiunea totală.

În galben, sopa noastră NOP este evidențiată la începutul sarcinii utile. Comparând următoarele linii din codul shell de mai sus, vedem că ele sunt exact aceleași. În total, după cum era de așteptat, a devenit mai mare cu 14 octeți.







Trimiteți-le prietenilor: