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.
Pentru a îmbunătăți cursul de IOCLA, componentele sale și modul de desfășurare, ne sunt foarte utile opiniile voastre. Pentru aceasta, vă rugăm să accesați și completați formularul de feedback de pe site-ul curs.upb.ro. Trebuie să fiți autentificați și înrolați în cadrul cursului.
Formularul este anonim și este activ în perioada 21 mai 2022 - 03 iunie 2022. Rezultatele vor fi vizibile în cadrul echipei cursului doar după încheierea sesiunii. Puteți accesa formularul de feedback începând cu 21 mai 2022. Este accesibil la link-ul “Formular feedback” a paginii principale a cursului de IOCLA al seriei voastre. Nu este în meta-cursul disponibil tuturor seriilor.
Vă invităm să evaluați activitatea echipei de IOCLA și să precizați punctele tari și punctele slabe și sugestiile voastre de îmbunătățire a disciplinei. Feedback-ul vostru ne ajută să creștem calitatea materiei în anii următori și să îmbunătățim disciplinele pe care le veți face în continuare.
Vom publica la începutul semestrului viitor analiza feedback-ului vostru.
Ne interesează în special:
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
.
Dacă ne oferiți feedback, ne ajutați să îl facem pe Lunk mai puternic îmbunătățim materia. Mergeți la secțiunea feedback pentru detalii.
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"
.