O exploata care se poate scrie fiecare
O exploata care se poate scrie fiecare
În general, o mare parte din capcane nu este aici, Python este inclus cu toate distribuțiile peste tot, dar apoi folosite dintr-o dată un pic cunoscut mmh3 bibliotecă (aproximativ podlyane ea pune voi scrie în continuare).
Din păcate, în distribuție Ubuntu nu, prin urmare, stabilit de la sursa
Ca rezultat, descărcat și compilat codul sursă al modulului, și apoi puteți începe echipa de server
În plus față de erori de funcționare a serverului de care aveți nevoie pentru a pune în fișierul flag.txt directorul de lucru și directorul de mai sus plug-in. /file_handler.py.
În general, scopul misiuni în această competiție - pentru a găsi unele „steaguri“. Astfel, scopul de a rupe server.py - citit fișierul flag.txt, care se află în același director ca executabil server de conținut.
Analiza script-ul și căutarea de vulnerabilități
Acum, deschide script-ul și se gândească la codul său. protocol de comunicare de rețea, care este implementat aici ciudat. Dar ce să facă, acest hacker astfel de prostii nu se oprește. Deci, cum funcționează algoritmul.
În general, algoritmul poate fi descris ca un server de procesare un fișier care urmează să fie transmis de către client. Server ascultă anumit port (pentru 1234) și este în așteptare atunci când el va da un nume de fișier și conținutul său. Serverul apoi „incitarea“ să-l handler pe același piton. Dar cât de ciudat el o face!
Preparate pentru tratarea dosarului
Pentru noi este important ca fișier flag.txt, care este necesară în / tmp /% s / server și ajunge să-l deja vizibil mai ușor.
Descrierile de preparare (antet) la informațiile transmise
Aici ciudățenie continuă. Deoarece serverul din titlu așteaptă exact 1024 bytes, nici mai mult nici mai puțin. De ce? Pentru a scrie un exploit a fost interesant!
În continuare, procedați în felul următor:
În continuare există un fișier de procesare, și stranietatea algoritmului continuă. cod Bucurându-
Serverul primește conținutul piton fișier l o sumă de control folosind mmh3 bibliotecă (aceeași cu cea pe care o avem atât de mult și atât de dureros stabilit în prima parte) consideră. Funcția calculează lungimea sumei de control de 31 de octeți, iar apoi se execută la trecerea de biți din stânga cu 16 poziții, ceea ce ne dă reseta inferior de control 16-byte. După aceea, programul intră într-un criteriu: superioare 16 biți de control ar trebui să fie egală cu -30772. De ce? Oricare ar fi.
Ceea ce este important este faptul că „push“ orice prelucrare server de fișiere nu este posibil, aveți nevoie de un fișier cu proprietăți specifice de control.
Înscris de secvență de octeți „rău“? Apelați numele și serverul se oprește.
Dacă fișierul a fost un miracol, serverul ar trebui să fie făcut cu ei ceva interesant.
Efectuează un cod de terță parte, care este de asemenea situate în același folder! Bine, bine.
Scrierea unui exploata
Ideea exploit
Evidentă. Deoarece serverul efectuează codul terță parte, este necesar să se înlocuiască pe cel care este pe el, și „alunecările“ nostru. Vedem că, atunci când verificarea datelor de server doar se asigură că expresia „server“ nu este conținut în numele fișierului. O protecție împotriva vulnerabilităților cunoscute, „../“ nr. Ce vom să-l exploateze.
Dă ca numele fișierului „../file_handler.py“. Apoi, (în cazul în care cursul va fi capabil să treacă de protecție, referitoare la verificarea checksum) manipulant fișier modificat și va exploata!
Permiteți-mi să vă reamintesc că scopul hacking - flag.txt obține conținutul fișierului. Pentru că am ataca un server de la distanță, atunci transmisia este în mod evident necesară pentru a utiliza o conexiune de rețea.
Ce ar trebui să fac? Citiți conținutul flag.txt fișierului pentru a conecta prin rețea pentru a ataca un computer și să transfere datele. Deoarece server.py scrisă în Python, un fișier exploit ar trebui să fie pus pe ea, deși.
În prima aproximarea va fi ceva de genul:
Interceptor informații confidențiale
Pentru a exploata ar putea transmite informații de interes pentru noi, pentru a ataca computerul pe care doriți să rulați un server care va asculta portul 5005 și a imprima la consola sau stoca informațiile.
Scrie-l (pentru o schimbare a PHP)
Punerea în aplicare trimiterea exploit server.py
Acum trebuie să scrie un mic fragment de cod care va da serverul nostru de fișiere. Pentru a face acest lucru:
Deschideți o conexiune la o mașină de la distanță pe portul 1234
Să-i dea titlul de 1024 octeți în lungime
Treceți dimensiunea fișierului care urmează să fie trimise la server
Trimite fișierul în sine
Sper că totul merge așa cum trebuie, și vom ajunge pe conținutul rețelei flag.txt
Deci, ușor de a trimite acest cod (din nou pe PHP), un cod Python este stocat într-un fișier send.py
În general, în cazul în care în server.py lipsă de verificare de control (pentru un algoritm foarte non-standard), problema va fi rezolvată. Dar ne confruntăm cu mai multe obstacole - pentru a trimite fișierul corespunzător criteriilor de a alege de control.
Exploit și probleme de performanță
Deci, pregateste-te pentru a sparge codul de aplicația server specificat. Conducerea activitatea sa, după cum urmează:
- Rulați scriptul care este în așteptare pentru mesajele de pe serverul atacat pe portul 5005
- Rulați scriptul pentru a trimite exploit în considerare busting de control
- de așteptare pentru
- PROFIT
Trebuie remarcat faptul că, dacă tu a alerga prea mult prea repede (de exemplu, nici o întârziere între posturi), serverul nu are timp să se pregătească mediul în directorul temporar din cauza a ceea ce consola se rostogoli mesaje, cum ar fi cele ce urmează. Pentru a depăși funcționarea greșită poate întârzia Mezhuyev de instalare a trimite un fișier (folosind usleep echipa).
Ca rezultat, sortarea fișierelor, în scopul de a satisface condiția a fost destul de multe resurse ca și mi-a luat aproximativ 21 minute 5 secunde.
Asta e tot. Desigur, puteți efectua orice altă comandă arbitrar, în plus față de furtul steagului. Toate. Vă mulțumesc tuturor pentru atenție.