2
0
Fork 0
mirror of https://github.com/carlospolop/hacktricks synced 2025-02-20 16:08:27 +00:00

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

This commit is contained in:
Translator 2024-09-25 16:49:02 +00:00
parent 4484f81050
commit de4acd044b

View file

@ -21,7 +21,7 @@ Katika C **`printf`** ni kazi inayoweza kutumika **kuchapisha** maandiko fulani.
Wakazi wengine walio hatarini ni **`sprintf()`** na **`fprintf()`**.
Ukatili unatokea wakati **maandishi ya mshambuliaji yanapotumika kama hoja ya kwanza** kwa kazi hii. Mshambuliaji ataweza kuunda **ingizo maalum linalotumia** uwezo wa **printf format** kusoma na **kuandika data yoyote katika anwani yoyote (inasomeka/inaweza kuandikwa)**. Kuwa na uwezo huu wa **kutekeleza msimbo wowote**.
Ukatili unatokea wakati **maandishi ya mshambuliaji yanapotumika kama hoja ya kwanza** kwa kazi hii. Mshambuliaji ataweza kuunda **ingizo maalum linalotumia** uwezo wa **printf format** kusoma na **kuandika data yoyote katika anwani yoyote (inasomeka/inaandikwa)**. Kuwa na uwezo wa namna hii **kutekeleza msimbo wowote**.
#### Formatters:
```bash
@ -66,11 +66,11 @@ return 0;
```
### **Kupata Viashiria**
Muundo **`%<n>$x`**, ambapo `n` ni nambari, unaruhusu kuashiria kwa printf kuchagua parameter ya n (kutoka kwenye stack). Hivyo ikiwa unataka kusoma parameter ya 4 kutoka kwenye stack ukitumia printf unaweza kufanya:
Muundo **`%<n>$x`**, ambapo `n` ni nambari, unaruhusu kuonyesha kwa printf kuchagua parameter ya n (kutoka kwenye stack). Hivyo ikiwa unataka kusoma parameter ya 4 kutoka kwenye stack ukitumia printf unaweza kufanya:
```c
printf("%x %x %x %x")
```
na unaweza kusoma kutoka kwa param ya kwanza hadi ya nne.
na ungeweza kusoma kutoka kwa param ya kwanza hadi ya nne.
Au unaweza kufanya:
```c
@ -78,7 +78,7 @@ printf("%4$x")
```
na kusoma moja kwa moja ya nne.
Kumbuka kwamba mshambuliaji anadhibiti `pr`**`intf` parameter, ambayo kimsingi inamaanisha kwamba** ingizo lake litakuwa kwenye stack wakati `printf` inaitwa, ambayo inamaanisha kwamba anaweza kuandika anwani maalum za kumbukumbu kwenye stack.
Kumbuka kwamba mshambuliaji anadhibiti `printf` **parameta, ambayo kimsingi inamaanisha kwamba** ingizo lake litakuwa kwenye stack wakati `printf` inaitwa, ambayo inamaanisha kwamba anaweza kuandika anwani maalum za kumbukumbu kwenye stack.
{% hint style="danger" %}
Mshambuliaji anayekontrol ingizo hili, ataweza **kuongeza anwani yoyote kwenye stack na kufanya `printf` iwasiliane nazo**. Katika sehemu inayofuata itafafanuliwa jinsi ya kutumia tabia hii.
@ -142,16 +142,16 @@ p.close()
### Jinsi inavyofaa
Kusoma bila mpangilio kunaweza kuwa na manufaa kwa:
Kusoma kwa bahati kunaweza kuwa na manufaa kwa:
* **Kutoa** **binary** kutoka kwenye kumbukumbu
* **Kufikia sehemu maalum za kumbukumbu ambapo** **info** nyeti inahifadhiwa (kama vile canaries, funguo za usimbaji au nywila za kawaida kama katika hii [**CTF challenge**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
## **Kuandika Bila Mpangilio**
## **Kuandika kwa Bahati**
Formatter **`$<num>%n`** **inaandika** **idadi ya bytes zilizandika** katika **anwani iliyoonyeshwa** katika param ya \<num> kwenye stack. Ikiwa mshambuliaji anaweza kuandika herufi nyingi kadri atakavyo kwa printf, atakuwa na uwezo wa kufanya **`$<num>%n`** kuandika nambari isiyo na mpangilio katika anwani isiyo na mpangilio.
Formatter **`%<num>$n`** **inaandika** **idadi ya bytes zilizandikwa** katika **anwani iliyoonyeshwa** katika param ya \<num> kwenye stack. Ikiwa mshambuliaji anaweza kuandika herufi nyingi kadri atakavyo kwa printf, ataweza kufanya **`%<num>$n`** kuandika nambari isiyo na mipaka katika anwani isiyo na mipaka.
Kwa bahati nzuri, kuandika nambari 9999, si lazima kuongeza "A" 9999 kwenye ingizo, ili kufanya hivyo inawezekana kutumia formatter **`%.<num-write>%<num>$n`** kuandika nambari **`<num-write>`** katika **anwani inayotolewa na nafasi ya `num`**.
Kwa bahati, kuandika nambari 9999, si lazima kuongeza 9999 "A"s kwenye ingizo, ili kufanya hivyo inawezekana kutumia formatter **`%.<num-write>%<num>$n`** kuandika nambari **`<num-write>`** katika **anwani inayotolewa na nafasi ya `num`**.
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
@ -160,13 +160,13 @@ Hata hivyo, kumbuka kwamba kawaida ili kuandika anwani kama `0x08049724` (ambayo
Kwa hivyo, udhaifu huu unaruhusu **kuandika chochote katika anwani yoyote (kuandika bila mpangilio).**
Katika mfano huu, lengo litakuwa **kufuta** **anwani** ya **kazi** katika jedwali la **GOT** ambalo litaitwa baadaye. Ingawa hii inaweza kutumia mbinu nyingine za kuandika bila mpangilio ili kutekeleza:
Katika mfano huu, lengo litakuwa **kuandika upya** **anwani** ya **kazi** katika jedwali la **GOT** ambalo litaitwa baadaye. Ingawa hii inaweza kutumia mbinu nyingine za kuandika bila mpangilio ili kutekeleza:
{% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %}
Tuta **futa** **kazi** ambayo **inapokea** **hoja** zake kutoka kwa **mtumiaji** na **kuielekeza** kwa **`system`** **kazi**.\
Tutakuwa **tukiandika upya** **kazi** ambayo **inapokea** **hoja** zake kutoka kwa **mtumiaji** na **kuielekeza** kwa **`system`** **kazi**.\
Kama ilivyotajwa, kuandika anwani, kawaida hatua 2 zinahitajika: Unap **andika kwanza Bytes 2** za anwani na kisha zile nyingine 2. Ili kufanya hivyo **`$hn`** inatumika.
* **HOB** inaitwa kwa Bytes 2 za juu za anwani
@ -190,7 +190,7 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "
### Pwntools Template
Unaweza kupata **templeti** ya kuandaa exploit kwa aina hii ya udhaifu katika:
Unaweza kupata **templat** ya kuandaa exploit kwa aina hii ya udhaifu katika:
{% content-ref url="format-strings-template.md" %}
[format-strings-template.md](format-strings-template.md)
@ -229,7 +229,7 @@ Inawezekana kutumia vitendo vya kuandika vya udhaifu wa format string ili **kuan
* [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, no canary, nx, no pie, format string kuandika anwani `fflush` na kazi ya ushindi (ret2win)
* [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, no canary, nx, no pie, format string kuandika anwani ndani ya main katika `.fini_array` (ili mtiririko urudi nyuma mara moja zaidi) na kuandika anwani kwa `system` katika jedwali la GOT linaloelekeza kwa `strlen`. Wakati mtiririko unaporudi kwenye main, `strlen` inatekelezwa kwa pembejeo ya mtumiaji na kuelekeza kwa `system`, itatekeleza amri zilizopitishwa.
* 32 bit, relro, no canary, nx, no pie, format string kuandika anwani ndani ya main katika `.fini_array` (ili mtiririko urudi nyuma mara moja zaidi) na kuandika anwani kwa `system` katika meza ya GOT ikielekeza kwa `strlen`. Wakati mtiririko unaporudi kwenye main, `strlen` inatekelezwa kwa pembejeo ya mtumiaji na ikielekeza kwa `system`, itatekeleza amri zilizopitishwa.
{% 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">\