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