Introducere
în articolele anterioare, am discutat despre funcțiile de imprimare, șirurile de format și vulnerabilitățile șirului de format. Acest articol oferă o prezentare generală a modului în care pot fi exploatate vulnerabilitățile șirului de Format. În acest articol, vom începe prin rezolvarea unei simple provocări de a scurge un secret din memorie. În articolul următor, vom discuta un alt exemplu, în care vom înlănțui o vulnerabilitate a șirului de format și o vulnerabilitate a depășirii tamponului pentru a crea un impact mai bun.
Cum pot fi exploatate vulnerabilitățile șirului de format?
după cum sa menționat în articolul precedent, în urma sunt unele dintre atacurile posibile folosind vulnerabilități șir format.
- Scurgeri secrete
- negarea serviciului
- Scurgeri adrese de memorie
- suprascrierea adrese de memorie
în acest articol, să ne discuta primele două elemente.
Scurgeri secrete din stivă
în urma este programul vulnerabil vom folosi pentru a înțelege abordarea de a exploata o vulnerabilitate șir de format simplu pentru a putea citi datele din memorie.
#include < stdio.h >
int main (int argc, char *argv){
char * secret = „p @ ssw0rD”;
printf(argv);
}
după cum putem observa, programul este vulnerabil la vulnerabilitatea șirurilor de format, deoarece funcția printf primește intrarea utilizatorului și o imprimă. Trebuie remarcat faptul că nu există un specificator de format utilizat în funcția printf, lăsând astfel programul vulnerabil.
să rulăm programul folosind gdb, să verificăm dezasamblarea funcției principale și să configurăm un punct de întrerupere la adresa apelului printf.
$ gdb ./vulnerabile
gef➤ disass principal
Basculante de cod de asamblare pentru funcția principală:
0x0000000000401136 <+0>: endbr64
0x000000000040113a <+4>: push rbp
0x000000000040113b <+5>: mov rbp,rsp
0x000000000040113e <+8>: sub rsp,0x20
0x0000000000401142 <+12>: mov DWORD PTR ,edi
0x0000000000401145 <+15>: mov QWORD PTR ,rsi
0x0000000000401149 <+19>: lea rax, # 0x402004
0x0000000000401150 <+26>: mov QWORD PTR ,rax
0x0000000000401154 <+30>: mov rax,QWORD (Read more…)