This is an old revision of the document!
În acest laborator veți interacționa cu majoritatea noțiunilor prezentate pe parcursul semestrului prin intermediul unor taskuri de tip Capture-The-Flag
. Acestea vor testa înțelegerea și stăpânirea metodelor și toolurilor specifice de analiză statică și dinamică, înțelegerea procesului de compilare, a limbajului de asamblare - sintaxă, regiștri, lucru cu memoria, funcții - dar și capacitatea de identificare și exploatare a unor vulnerabilități simple de tip buffer overflow.
iocla_{<string>}
get_flag()
. Scopul exercițiilor nu implică a face reverse-engineering pe această funcție sau apel direct din cadrul debuggerului; se recomandă tratarea ei ca și Black Box.
python -c 'import sys; sys.stdout.write("A"\*10 + b"\x00\x00\x00\x00" + ...)' | ./exec
.
Binarul 1-1-hidden-in-plain-sight/link
expune tot ce aveți nevoie. Găsiți un mod de a-l folosi.
Investigați binarul 1-2-hidden-in-plain-sight/link2
. Modul în care poate fi executat nu mai este un mister, dar va fi puțin mai dificil să ajungeți la flag.
Binarul 2-look-at-him-go/dynamic
este de data aceasta executabil și are ca unic scop obținerea flagului și plasarea lui undeva in memorie. No tricks here.
Binarul 3-playing-god/dynamic2
vă cere să ghiciți un număr între 1 și 100000. Găsiți o cale mai bună de a-l afla.
Binarul 4-indirect-business/buff-ovf
conține o vulnerabilitate clasică. Folosiți inputul pentru a modifica datele în favoarea voastră.
Binarul 5-rip-my-buffers-off/buff-ovf2
nu folosește funcția get_flag(), dar oferă o oportunitate de a o apela.
Urmăriți șirul de operații din funcțiile binarului 6-feeling-chained/buff-ovf3
. Identificați-le pe cele necesare și… deja știți cum se apelează.
7-rop/rop
este un binar pe 64 de biți cu un simplu buffer overflow.
ret
. Aceste bucăți de cod se numesc gadgeturi
.
pwndbg
, puteți folosi o comandă de tipul rop --grep "pop rsi"
.