Exploiting Tools
Μάθετε & εξασκηθείτε στο Hacking του AWS:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: HackTricks Training GCP Red Team Expert (GRTE)
Metasploit
Shellcodes
{% κώδικας υπερχείλισης = "τυλίγει" %}
GDB
Εγκατάσταση
Παράμετροι
Οδηγίες
Μπορείτε προαιρετικά να χρησιμοποιήσετε αυτό το fork του GEF που περιέχει πιο ενδιαφέρουσες οδηγίες.
Κόλπα
Ίδιες διευθύνσεις στο GDB
Κατά την εντοπισμό σφαλμάτων στο GDB θα έχει ελαφρώς διαφορετικές διευθύνσεις από αυτές που χρησιμοποιούνται από το δυαδικό όταν εκτελείται. Μπορείτε να κάνετε το GDB να έχει τις ίδιες διευθύνσεις κάνοντας:
unset env LINES
unset env COLUMNS
set env _=<διαδρομή>
Βάλτε την απόλυτη διαδρομή προς το δυαδικόΕκμεταλλευτείτε το δυαδικό χρησιμοποιώντας την ίδια απόλυτη διαδρομή
Τα
PWD
καιOLDPWD
πρέπει να είναι τα ίδια κατά τη χρήση του GDB και κατά την εκμετάλλευση του δυαδικοϋ
Ανίχνευση συναρτήσεων που καλούνται με backtrace
Όταν έχετε ένα δυαδικό που έχει συνδεθεί στατικά, όλες οι συναρτήσεις θα ανήκουν στο δυαδικό (και όχι σε εξωτερικές βιβλιοθήκες). Σε αυτήν την περίπτωση θα είναι δύσκολο να αναγνωρίσετε τη ροή που ακολουθεί το δυαδικό για παράδειγμα για να ζητήσει είσοδο από τον χρήστη.
Μπορείτε εύκολα να αναγνωρίσετε αυτήν τη ροή τρέχοντας το δυαδικό με το gdb μέχρι να σας ζητηθεί είσοδος. Στη συνέχεια, σταματήστε το με CTRL+C και χρησιμοποιήστε την εντολή bt
(backtrace) για να δείτε τις κληθείσες συναρτήσεις:
Εξυπηρετητής GDB
gdbserver --multi 0.0.0.0:23947
(στο IDA πρέπει να συμπληρώσετε τον απόλυτο δρόμο του εκτελέσιμου στη μηχανή Linux και στη μηχανή Windows)
Ghidra
Εύρεση μετατόπισης στοίβας
Το Ghidra είναι πολύ χρήσιμο για να βρείτε τη μετατόπιση για ένα υπερχείλιση buffer χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.
Για παράδειγμα, στο παρακάτω παράδειγμα, μια υπερχείλιση buffer στο local_bc
υποδηλώνει ότι χρειάζεστε μια μετατόπιση του 0xbc
. Επιπλέον, αν το local_10
είναι ένα canary cookie υποδηλώνει ότι για να το αντικαταστήσετε από το local_bc
υπάρχει μια μετατόπιση του 0xac
.
Να θυμάστε ότι τα πρώτα 0x08 από όπου αποθηκεύεται το RIP ανήκουν στο RBP.
qtool
Αποκτήστε κάθε opcode που εκτελείται στο πρόγραμμα.
GCC
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Μεταγλώττιση χωρίς προστασίες -o --> Έξοδος -g --> Αποθήκευση κώδικα (το GDB θα μπορεί να τον δει) echo 0 > /proc/sys/kernel/randomize_va_space --> Απενεργοποίηση του ASLR στο Linux
Για να μεταγλωττίσετε ένα shellcode: nasm -f elf assembly.asm --> επιστρέφει ένα ".o" ld assembly.o -o shellcodeout --> Εκτελέσιμο
Objdump
-d --> Αποσυναρμολόγηση εκτελέσιμων τμημάτων (δείτε τα opcodes ενός μεταγλωττισμένου shellcode, βρείτε ROP Gadgets, βρείτε διεύθυνση συνάρτησης...) -Mintel --> Σύνταξη Intel -t --> Πίνακας συμβόλων -D --> Αποσυναρμολόγηση όλων (διεύθυνση στατικής μεταβλητής) -s -j .dtors --> τμήμα dtors -s -j .got --> τμήμα got -D -s -j .plt --> τμήμα plt αποσυναρμολογημένο -TR --> Ανακατευθύνσεις ojdump -t --dynamic-relo ./exec | grep puts --> Διεύθυνση του "puts" για τροποποίηση στο GOT objdump -D ./exec | grep "VAR_NAME" --> Διεύθυνση μιας στατικής μεταβλητής (αυτές αποθηκεύονται στο τμήμα DATA).
Core dumps
Εκτελέστε
ulimit -c unlimited
πριν ξεκινήσετε το πρόγραμμά μουΕκτελέστε
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
Περισσότερα
ldd executable | grep libc.so.6 --> Διεύθυνση (αν υπάρχει ASLR, τότε αλλάζει κάθε φορά) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> Επανάληψη για να δείτε αν η διεύθυνση αλλάζει πολύ readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> Offset του "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Offset του "/bin/sh"
strace executable --> Συναρτήσεις που καλούνται από το εκτελέσιμο rabin2 -i ejecutable --> Διεύθυνση όλων των συναρτήσεων
Inmunity debugger
IDA
Αποσφαλμάτωση σε απομακρυσμένο σύστημα Linux
Μέσα στον φάκελο του IDA μπορείτε να βρείτε δυαδικά αρχεία που μπορούν να χρησιμοποιηθούν για την αποσφαλμάτωση ενός δυαδικού αρχείου σε ένα σύστημα Linux. Για να το κάνετε αυτό, μετακινήστε το δυαδικό αρχείο linux_server
ή linux_server64
μέσα στον διακομιστή Linux και εκτελέστε το μέσα στον φάκελο που περιέχει το δυαδικό αρχείο:
Στη συνέχεια, ρυθμίστε τον εντοπιστή σφαλμάτων: Εντοπιστής (απομακρυσμένος linux) --> Επιλογές διεργασίας...:
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Last updated