Common Exploiting Problems
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 μόλις εκτελείται.
Παράδειγμα εκμετάλλευσης από εδώ:
Socat & pty
Σημειώστε ότι το socat ήδη μεταφέρει stdin
και stdout
στο socket. Ωστόσο, η λειτουργία pty
περιλαμβάνει χαρακτήρες DELETE. Έτσι, αν στείλετε ένα \x7f
( DELETE
-) θα διαγράψει τον προηγούμενο χαρακτήρα της εκμετάλλευσής σας.
Για να παρακαμφθεί αυτό, το χαρακτήρα διαφυγής \x16
πρέπει να προστεθεί πριν από οποιοδήποτε \x7f
σταλεί.
Εδώ μπορείτε να βρείτε ένα παράδειγμα αυτής της συμπεριφοράς.
Last updated