Întregii sunt folosiți pe parcursul programelor și pot fi cauze de probleme. Atunci când facem comparații sau atribuiri între întregi de diferite tipuri pot apărea probleme exploatabile. Mai mult, operațiile de adunare sau înmulțire de întregi sunt cauzatoare de integer overflows, alte surse de probleme.
Arhiva de suport pentru exerciții se găsește aici. Descărcați arhiva și apoi decomprimați-o folosind comenzile:
wget http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/07-intregi-skel.zip unzip 07-intregi-skel.zip cd 07-intregi-skel/
Accesăm directorul integer-types/
din arhiva de suport.
Urmăriți conținutul fișierului prog.c
și rulați executabilul prog
. Urmăriți în program și în rezultatul rulării sale valorile tipurilor de date întregi și dimensiunea lor (sizeof
).
Accesăm directorul input-number/
din arhiva de suport.
Urmăriți conținutul fișierului prog.c
și rulați executabilul prog
. Urmăriți valoarea unui număr întreg în funcție de interpretarea sa cu semn sau fără semn.
Accesăm directorul sts2/
din arhiva de suport. Este nivelul 2 din wargame-ul IO Netgarage (fost IO Smash the Stack).
Urmăriți conținutul fișierului level02.c
și rulați executabilul level02
. Obiectivul este să apelați handler-ul de semnal catcher()
prin declanșarea unui semnal de tipul FPE
(Floating Point Exception).
Accesăm directorul sts7/
din arhiva de suport. Este nivelul 7 din wargame-ul IO Netgarage (fost IO Smash the Stack).
Urmăriți conținutul fișierului level07.c
și rulați executabilul level07
. Obiectivul este să folosiți un buffer overflow și operații cu întregi ca să obțineți un shell, adică să fie satisfăcută condiția count == 0x574f4c46
.