User Tools

Site Tools


laboratoare:laborator-10

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator-10 [2015/12/18 19:07]
razvan.deaconescu
laboratoare:laborator-10 [2016/01/09 13:39] (current)
razvan.deaconescu [[3p] BONUS Graceful exit]
Line 35: Line 35:
 Dacă reușim să suprascriem adresa de retur cu adresa la care se găsește începutul bufferului pe stivă, atunci am putea să executăm un cod pe care-l **injectăm** prin intermediul bufferului. Din motive istorice, acest cod poartă numele generic de **shellcode**,​ deoarece de cele mai multe ori când un atacator exploatează o aplicație sau un serviciu, dorește să dobândească un shell prin care să poată interacționa cu sistemul respectiv. Dacă reușim să suprascriem adresa de retur cu adresa la care se găsește începutul bufferului pe stivă, atunci am putea să executăm un cod pe care-l **injectăm** prin intermediul bufferului. Din motive istorice, acest cod poartă numele generic de **shellcode**,​ deoarece de cele mai multe ori când un atacator exploatează o aplicație sau un serviciu, dorește să dobândească un shell prin care să poată interacționa cu sistemul respectiv.
  
-<​note ​tip>+<​note>​
 Dacă într-o aplicație se descoperă un buffer overflow, nu înseamnă (neapărat) că acest lucru este o vulnerabilitate. Dacă un atacator nu poate **controla** buffer-ul respectiv, atunci rămâne doar un bug în cadrul aplicației respective. Dacă într-o aplicație se descoperă un buffer overflow, nu înseamnă (neapărat) că acest lucru este o vulnerabilitate. Dacă un atacator nu poate **controla** buffer-ul respectiv, atunci rămâne doar un bug în cadrul aplicației respective.
 </​note>​ </​note>​
Line 41: Line 41:
 ===== Setup ===== ===== Setup =====
  
-Recomandăm să faceți următorul setup după ce porniți ​''​cmd.exe'':​ +Pentru a putea rula ''​python'',​ ''​gdb''​ și ''​objdump''​ de oriunde (în cadrul acelei console) recomandăm să faceți următorul setup în ''​Command Prompt'':​<​code>​ 
- +set PATH=%PATH%;"​C:​\Program Files (x86)\SASM\MinGW\bin";"​C:​\Python27"​ 
-''​set PATH=%PATH%;"​C:​\Program Files (x86)\SASM\MinGW\bin";"​C:​\Python27"​''​ +</​code>​
- +
-În felul acesta, veți putea rula ''​python'',​ ''​gdb''​ și ''​objdump''​ de oriunde (în cadrul acelui terminal).+
  
 ===== Exerciții ===== ===== Exerciții =====
  
-În cadrul acestui laborator, vom folosi ​{{:​laboratoare:lab-10-tasks.zip|arhiva de sarcini a laboratorului}}.+În cadrul acestui laborator, vom folosi ​[[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/lab-10-tasks.zip|arhiva de sarcini a laboratorului]].
  
 <note tip> <note tip>
Line 56: Line 54:
  
 <​note>​ <​note>​
-Puteți folosi orice fel de consolă vi se pare adecvat.+Puteți folosi orice fel de consolă vi se pare adecvată.
 </​note>​ </​note>​
  
 ==== [2p] Tutorial: Găsire offset și suprascrierea adresei de retur ==== ==== [2p] Tutorial: Găsire offset și suprascrierea adresei de retur ====
  
-Accesați subdirectorul ''​tutorial''​ din arhiva de sarcini a laboratorului.+Accesați subdirectorul ''​tutorial/''​ din [[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-10-tasks.zip|arhiva de sarcini a laboratorului]].
  
 Inspectați sursa ''​tutorial.asm''​ și rulați comanda ''​build_tutorial''​. Inspectați sursa ''​tutorial.asm''​ și rulați comanda ''​build_tutorial''​.
Line 184: Line 182:
 ==== [2p] 1. Recon ==== ==== [2p] 1. Recon ====
  
-Accesați subdirectorul ''​tutorial''​ din arhiva de sarcini a laboratorului.+Accesați subdirectorul ''​shellcode''​ din [[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-10-tasks.zip|arhiva de sarcini a laboratorului]].
  
 Identificați vulnerabilitatea de tip buffer overflow din programul ''​shellcode.asm''​. Faceți programul să crape suprascriind prin buffer overflow o adresă de retur corespunzătoare. Identificați vulnerabilitatea de tip buffer overflow din programul ''​shellcode.asm''​. Faceți programul să crape suprascriind prin buffer overflow o adresă de retur corespunzătoare.
Line 196: Line 194:
 </​note>​ </​note>​
  
-Generați un payload (in afara GDB-ului) folosind comanda<​code>​+Generați un payload ​în consola de Windows ​(adică nu în consola ​GDB) folosind comanda<​code>​
 python gen_payload.py python gen_payload.py
 </​code>​ </​code>​
Line 212: Line 210:
 </​note>​ </​note>​
  
-<​note>​+<​note ​tip>
 Pentru a adăuga adresa funcției ''​flag1''​ la sfârșitul payload-ului va trebui să convertiți acea adresă dintr-o valoarea întreagă (pe 4 octeți) într-un șir de octeți. Pentru aceasta folosiți-vă de funcția ''​dw''​ care exact acest lucru îl face: trece o valoare pe 4 octeți într-un șir de octeți în format little endian. Puteți urmări modul în care este folosită funcția ''​dw''​ în fișierul ''​tutorial_payload.py''​ din cadrul tutorialului de mai devreme. Pentru a adăuga adresa funcției ''​flag1''​ la sfârșitul payload-ului va trebui să convertiți acea adresă dintr-o valoarea întreagă (pe 4 octeți) într-un șir de octeți. Pentru aceasta folosiți-vă de funcția ''​dw''​ care exact acest lucru îl face: trece o valoare pe 4 octeți într-un șir de octeți în format little endian. Puteți urmări modul în care este folosită funcția ''​dw''​ în fișierul ''​tutorial_payload.py''​ din cadrul tutorialului de mai devreme.
 </​note>​ </​note>​
Line 269: Line 267:
 ni ni
 </​code>​ În acest moment veți face jump la adresa stocată în vârful stivei adică acolo unde programul așteaptă adresa de retur. Dacă totul e în regulă, veți face jump în funcția ''​flag1''​. </​code>​ În acest moment veți face jump la adresa stocată în vârful stivei adică acolo unde programul așteaptă adresa de retur. Dacă totul e în regulă, veți face jump în funcția ''​flag1''​.
 +</​note>​
 +
 +<note important>​
 +Dacă ați completat corect payload-ul, la transmiterea payload-ului către programul ''​shellcode.exe''​ veți avea afișat mesajul dat de variabila ''​honeypot''​ din fișierul ''​shellcode.asm'',​ anume //You shouldn'​t be here!//.
 </​note>​ </​note>​
  
Line 275: Line 277:
 Modificați sursa ''​gen_payload.py''​ astfel încât să genereze un payload care să aducă programul să apeleze funcția ''​flag2''​. Modificați sursa ''​gen_payload.py''​ astfel încât să genereze un payload care să aducă programul să apeleze funcția ''​flag2''​.
  
-<​note>​ +<​note ​tip
-**Hints**: ​Câte argumente are funcția?+Câte argumente are funcția?
 Pentru ce valori ale argumentelor ajunge funcția să treacă testele? Pentru ce valori ale argumentelor ajunge funcția să treacă testele?
 Cum trebuie să arate bufferul de intrare astfel încât atunci când se ajunge în funcție parametrii să se găsească pe pozițiile corespunzătoare pe stivă? Cum trebuie să arate bufferul de intrare astfel încât atunci când se ajunge în funcție parametrii să se găsească pe pozițiile corespunzătoare pe stivă?
Line 283: Line 285:
 Scrieți modificările necesare în ''​gen_payload.py''​ și generați un nou payload. Scrieți modificările necesare în ''​gen_payload.py''​ și generați un nou payload.
  
-==== [3p] BONUS Graceful ​exits ====+<note important>​ 
 +Dacă ați completat corect payload-ul, la transmiterea payload-ului către programul ''​shellcode.exe''​ veți avea afișat mesajul dat de variabila ''​great''​ din fișierul ''​shellcode.asm'',​ anume //Mad skills, yo!//. 
 +</​note>​ 
 +==== [3p] BONUS Graceful ​exit ==== 
 + 
 +Ați observat că, pentru payload-ul anterior, în care apelați funcția ''​flag2()''​ deși se execută codul dorit de noi, programul în continuare crapă. De ce? Corectați acest lucru. Generați noi payload-uri prin care după ce se execută codul dorit, programul să se termine cu succes. 
 + 
 +===== Soluții ===== 
 + 
 +[[http://​elf.cs.pub.ro/​asm/​res/​laboratoare/​lab-10-sol.zip|Soluții de referință pentru exercițiile de laborator]]
  
-Ați observat că deși se execută codul dorit de noi, programul în continuare crapă. De ce? Corectați acest lucru. Generați noi payload-uri prin care după ce se execută codul dorit, programul să se termine cu succes. 
laboratoare/laborator-10.1450458474.txt.gz · Last modified: 2015/12/18 19:07 by razvan.deaconescu