diff --git a/binary-exploitation/format-strings/README.md b/binary-exploitation/format-strings/README.md index 91e5b177c..45c04a023 100644 --- a/binary-exploitation/format-strings/README.md +++ b/binary-exploitation/format-strings/README.md @@ -21,7 +21,7 @@ In C **`printf`** is 'n funksie wat gebruik kan word om **te druk** 'n string. D Ander kwesbare funksies is **`sprintf()`** en **`fprintf()`**. -Die kwesbaarheid verskyn wanneer 'n **aanvaller teks as die eerste argument** vir hierdie funksie gebruik word. Die aanvaller sal in staat wees om 'n **spesiale invoer te vervaardig wat** die **printf formaat** string vermoëns misbruik om te lees en **skryf enige data in enige adres (leesbaar/skryfbaar)**. Op hierdie manier in staat om **arbitraire kode uit te voer**. +Die kwesbaarheid verskyn wanneer 'n **aanvallers teks as die eerste argument** aan hierdie funksie gebruik word. Die aanvaller sal in staat wees om 'n **spesiale invoer te vervaardig wat** die **printf formaat** string vermoëns misbruik om te lees en **skryf enige data in enige adres (leesbaar/skryfbaar)**. Op hierdie manier in staat om **arbitraire kode uit te voer**. #### Formateerders: ```bash @@ -47,7 +47,7 @@ printf(buffer); // If buffer contains "%x", it reads from the stack. int value = 1205; printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 ``` -* Met Ontbrekende Argumente: +* Met ontbrekende argumente: ```c printf("%x %x %x", value); // Unexpected output: reads random values from the stack. ``` @@ -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; } @@ -70,18 +70,18 @@ Die formaat **`%$x`**, waar `n` 'n getal is, laat toe om aan printf aan te du ```c printf("%x %x %x %x") ``` -en jy sou van die eerste tot die vierde param lees. +en jy sou van die eerste tot die vierde parameter lees. Of jy kan doen: ```c printf("$4%x") ``` -and lees direk die vierde. +en lees direk die vierde. Let op dat die aanvaller die `pr`**`intf`-parameter beheer, wat basies beteken dat** sy invoer in die stapel gaan wees wanneer `printf` aangeroep word, wat beteken dat hy spesifieke geheue adresse in die stapel kan skryf. {% hint style="danger" %} -'n Aanvaller wat hierdie invoer beheer, sal in staat wees om **arbitraire adresse in die stapel by te voeg en `printf` toegang tot hulle te laat kry**. In die volgende afdeling sal verduidelik word hoe om hierdie gedrag te gebruik. +'n Aanvaller wat hierdie invoer beheer, sal in staat wees om **arbitraire adresse in die stapel by te voeg en `printf` te laat toegang tot hulle**. In die volgende afdeling sal verduidelik word hoe om hierdie gedrag te gebruik. {% endhint %} ## **Arbitraire Lees** @@ -144,8 +144,8 @@ p.close() Arbitraire lees kan nuttig wees om: -* **Dump** die **binaire** uit geheue -* **Toegang te verkry tot spesifieke dele van geheue waar sensitiewe** **inligting** gestoor word (soos kanaries, versleuteling sleutels of paswoorde soos in hierdie [**CTF-uitdaging**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) +* **Dump** die **binarie** uit geheue +* **Toegang tot spesifieke dele van geheue waar sensitiewe** **inligting** gestoor word (soos kanaries, versleuteling sleutels of paswoorde soos in hierdie [**CTF-uitdaging**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) ## **Arbitraire Skrywe** @@ -181,6 +181,8 @@ If HOB > LOB\ `[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]` HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB + +{% code overflow="wrap" %} ```bash python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"' ``` @@ -227,7 +229,7 @@ Dit is moontlik om die skryf aksies van 'n formaat string kwesbaarheid te misbru * [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html) * 32 bit, relro, geen canary, nx, geen pie, formaat string om die adres `fflush` met die win funksie (ret2win) te oorskryf * [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html) -* 32 bit, relro, geen canary, nx, geen pie, formaat string om 'n adres binne main in `.fini_array` te skryf (sodat die vloei een keer meer terugloop) en die adres na `system` in die GOT tabel te skryf wat na `strlen` wys. Wanneer die vloei terug na main gaan, word `strlen` uitgevoer met gebruikersinvoer en wys na `system`, dit sal die oorgedraagde opdragte uitvoer. +* 32 bit, relro, geen canary, nx, geen pie, formaat string om 'n adres binne main in `.fini_array` te skryf (sodat die vloei een keer terug draai) en die adres na `system` in die GOT tabel te skryf wat na `strlen` wys. Wanneer die vloei terug na main gaan, word `strlen` uitgevoer met gebruikersinvoer en wys na `system`, dit sal die oorgedraagde opdragte uitvoer. {% hint style="success" %} Leer & oefen AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\