Translated ['binary-exploitation/format-strings/README.md'] to rs

This commit is contained in:
Translator 2024-09-25 16:29:47 +00:00
parent 1064ab9381
commit 47a812d53e

View file

@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## Basic Information
U C **`printf`** je funkcija koja se može koristiti za **štampanje** nekog stringa. **Prvi parametar** koji ova funkcija očekuje je **sirovi tekst sa formatima**. **Sledeći parametri** koji se očekuju su **vrednosti** za **zamenu** **formatera** iz sirovog teksta.
U C **`printf`** je funkcija koja se može koristiti za **štampanje** nekog stringa. **Prvi parametar** koji ova funkcija očekuje je **sirovi tekst sa formatima**. **Sledeći parametri** koji se očekuju su **vrednosti** koje će **zameniti** **formate** iz sirovog teksta.
Druge ranjive funkcije su **`sprintf()`** i **`fprintf()`**.
@ -59,7 +59,7 @@ int main(int argc, char *argv[]) {
char *user_input;
user_input = argv[1];
FILE *output_file = fopen("output.txt", "w");
fprintf(output_file, user_input); // The user input cna include formatters!
fprintf(output_file, user_input); // The user input can include formatters!
fclose(output_file);
return 0;
}
@ -76,9 +76,9 @@ printf("%x %x %x %x")
```c
printf("$4%x")
```
и читајте директно четврту.
и директно прочитати четврту.
Обратите пажњу да нападач контролише параметар `pr`**`intf`**, што у основи значи да ће његов унос бити у стеку када се позове `printf`, што значи да би могао да упише специфичне адресе у меморији у стек.
Обратите пажњу да нападач контролише параметар `pr`**`intf`**, што у основи значи да ће његов унос бити у стеку када се позове `printf`, што значи да може написати специфичне адресе у меморији у стеку.
{% hint style="danger" %}
Нападач који контролише овај унос, моћи ће да **дода произвољну адресу у стек и натера `printf` да им приступи**. У следећем одељку биће објашњено како користити ово понашање.
@ -105,7 +105,7 @@ Napomena da ne možete staviti adresu 0x8048000 na početak ulaza jer će string
### Pronađi offset
Da biste pronašli offset do vašeg ulaza, možete poslati 4 ili 8 bajtova (`0x41414141`) praćenih **`%1$x`** i **povećavati** vrednost dok ne dobijete `A's`.
Da biste pronašli offset do vašeg ulaza, možete poslati 4 ili 8 bajtova (`0x41414141`) praćeno sa **`%1$x`** i **povećavati** vrednost dok ne dobijete `A's`.
<details>
@ -149,16 +149,16 @@ Arbitrarna čitanja mogu biti korisna za:
## **Arbitrarno Pisanje**
Formatirac **`$<num>%n`** **piše** **broj napisanih bajtova** u **naznačenu adresu** u \<num> parametru na steku. Ako napadač može da piše onoliko karaktera koliko želi sa printf, moći će da napravi da **`$<num>%n`** piše proizvoljan broj na proizvoljnu adresu.
Formatirac **`$<num>%n`** **piše** **broj napisnih bajtova** u **naznačenu adresu** u \<num> parametru na steku. Ako napadač može da piše onoliko karaktera koliko želi sa printf, moći će da napravi da **`$<num>%n`** upiše proizvoljan broj na proizvoljnu adresu.
Srećom, da bi se napisao broj 9999, nije potrebno dodavati 9999 "A" u ulaz, da bi se to postiglo moguće je koristiti formatirac **`%.<num-write>%<num>$n`** da bi se napisao broj **`<num-write>`** u **adresu koju pokazuje `num` pozicija**.
Srećom, da bi se napisao broj 9999, nije potrebno dodavati 9999 "A" u ulaz, da bi se to postiglo moguće je koristiti formatirac **`%.<num-write>%<num>$n`** da bi se napisao broj **`<num-write>`** u **adresu na koju ukazuje pozicija `num`**.
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
```
Međutim, imajte na umu da se obično za pisanje adrese kao što je `0x08049724` (što je OGROMAN broj za pisanje odjednom), **koristi `$hn`** umesto `$n`. Ovo omogućava da **se napiše samo 2 Bajte**. Stoga se ova operacija vrši dva puta, jednom za najviših 2B adrese i drugi put za najniže.
Međutim, imajte na umu da se obično za pisanje adrese kao što je `0x08049724` (što je OGROMAN broj za pisanje odjednom), **koristi `$hn`** umesto `$n`. To omogućava da **se napiše samo 2 Bajte**. Stoga se ova operacija vrši dva puta, jednom za najviših 2B adrese i drugi put za najniže.
Stoga, ova ranjivost omogućava **pisanje bilo čega na bilo kojoj adresi (arbitrarno pisanje).**
Zbog toga, ova ranjivost omogućava **pisanje bilo čega na bilo kojoj adresi (arbitrarno pisanje).**
U ovom primeru, cilj će biti da se **prepiše** **adresa** **funkcije** u **GOT** tabeli koja će biti pozvana kasnije. Iako bi ovo moglo zloupotrebiti druge tehnike arbitrarno pisanje za izvršavanje:
@ -229,7 +229,7 @@ Moguće je zloupotrebiti akcije pisanja ranjivosti format string-a da se **piše
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
* 32 bita, relro, bez kanarija, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32 bita, relro, bez kanarija, nx, bez pie, format string za pisanje adrese unutar main u `.fini_array` (tako da se tok vraća još jednom) i pisanje adrese u `system` u GOT tabeli koja pokazuje na `strlen`. Kada se tok vrati u main, `strlen` se izvršava sa korisničkim unosom i pokazuje na `system`, izvršiće prosleđene komande.
* 32 bita, relro, bez kanarija, nx, bez pie, format string za pisanje adrese unutar main u `.fini_array` (tako da se tok ponovo vrati još jednom) i pisanje adrese u `system` u GOT tabeli koja pokazuje na `strlen`. Kada se tok vrati u main, `strlen` se izvršava sa korisničkim unosom i pokazuje na `system`, izvršiće prosleđene komande.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\