Translated ['binary-exploitation/rop-return-oriented-programing/ret2csu.

This commit is contained in:
Translator 2024-09-25 16:50:29 +00:00
parent 7388fb60ac
commit 98bd18ab3e

View file

@ -27,7 +27,7 @@ Kada program koristi određene biblioteke (kao što je libc), ima neke ugrađene
U **`__libc_csu_init`**, postoje dve sekvence instrukcija (gadgets) koje treba istaknuti:
1. Prva sekvenca nam omogućava da postavimo vrednosti u nekoliko registara (rbx, rbp, r12, r13, r14, r15). Ovo su kao slotovi gde možemo da čuvamo brojeve ili adrese koje želimo da koristimo kasnije.
1. Prva sekvenca nam omogućava da postavimo vrednosti u nekoliko registara (rbx, rbp, r12, r13, r14, r15). Ovo su kao mesta gde možemo da čuvamo brojeve ili adrese koje želimo da koristimo kasnije.
```armasm
pop rbx;
pop rbp;
@ -37,7 +37,7 @@ pop r14;
pop r15;
ret;
```
Ovaj uređaj nam omogućava da kontrolišemo ove registre tako što izbacujemo vrednosti sa steka u njih.
Ovaj uređaj nam omogućava da kontrolišemo ove registre tako što izvlačimo vrednosti sa steka u njih.
2. Druga sekvenca koristi vrednosti koje smo postavili da uradi nekoliko stvari:
* **Premesti specifične vrednosti u druge registre**, pripremajući ih za korišćenje kao parametre u funkcijama.
@ -48,7 +48,7 @@ mov rsi, r14;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Možda ne znate nijednu adresu na koju biste mogli da pišete i **potrebna vam je `ret` instrukcija**. Imajte na umu da će drugi gadget takođe **završiti sa `ret`**, ali ćete morati da ispunite neke **uslove** da biste do njega došli:
3. Možda ne znate nijednu adresu na koju biste mogli da pišete i **potrebna vam je `ret` instrukcija**. Imajte na umu da će drugi gadget takođe **završiti sa `ret`**, ali ćete morati da ispunite neke **uslove** da biste do njega došli:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -90,7 +90,7 @@ Proverite ovu stranicu za više informacija:
## Primer
### Korišćenje poziva
### Koristeći poziv
Zamislite da želite da izvršite syscall ili pozovete funkciju kao što je `write()`, ali su vam potrebne specifične vrednosti u registrima `rdx` i `rsi` kao parametri. Obično biste tražili gadgete koji direktno postavljaju te registre, ali ne možete pronaći nijedan.
@ -181,4 +181,4 @@ target.interactive()
```
### Zašto ne koristiti libc direktno?
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, `write()` funkcija zahteva tri parametra, i **pronalazak gadgeta za postavljanje svih ovih direktno možda neće biti moguć**.
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, `write()` funkcija zahteva tri parametra, i **pronaći gadgete za postavljanje svih ovih direktno možda neće biti moguće**.