Translated ['', 'src/welcome/hacktricks-values-and-faq.md'] to el

This commit is contained in:
Translator 2025-10-04 09:05:12 +00:00
parent 50763eb8d9
commit bc55cc5f48
2 changed files with 278 additions and 243 deletions

View File

@ -2,56 +2,56 @@
{{#include ../banners/hacktricks-training.md}}
## Αξίες HackTricks
## HackTricks Values
> [!TIP]
> Αυτές είναι οι **αξίες του έργου HackTricks**:
>
> - Να παρέχει **ΔΩΡΕΑΝ** πρόσβαση σε **ΕΚΠΑΙΔΕΥΤΙΚΟ hacking** πόρους σε **ΟΛΟ** το Διαδίκτυο.
> - Το hacking αφορά τη μάθηση, και η μάθηση πρέπει να είναι όσο το δυνατόν πιο ΔΩΡΕΑΝ.
> - Ο σκοπός αυτού του βιβλίου είναι να χρησιμεύσει ως ολοκληρωμένος **εκπαιδευτικός πόρος**.
> - **ΑΠΟΘΗΚΕΥΣΗ** φοβερών **hacking** τεχνικών που δημοσιεύει η κοινότητα δίνοντας στους **ΑΡΧΙΚΟΥΣ** **ΣΥΓΓΡΑΦΕΙΣ** όλα τα **credits**.
> - Το hacking έχει να κάνει με τη μάθηση, και η μάθηση πρέπει να είναι όσο το δυνατόν πιο δωρεάν.
> - Ο σκοπός αυτού του βιβλίου είναι να λειτουργήσει ως μια ολοκληρωμένη **εκπαιδευτική πηγή**.
> - **ΑΠΟΘΗΚΕΥΣΗ** φοβερών τεχνικών **hacking** που δημοσιεύει η κοινότητα δίνοντας στους **ΑΡΧΙΚΟΥΣ** **ΣΥΓΓΡΑΦΕΙΣ** όλα τα **credits**.
> - **Δεν θέλουμε την αναγνώριση από άλλους ανθρώπους**, απλώς θέλουμε να αποθηκεύσουμε ωραία κόλπα για όλους.
> - Επίσης γράφουμε **τις δικές μας έρευνες** στο HackTricks.
> - Σε αρκετές περιπτώσεις θα γράψουμε απλώς **στο HackTricks μια σύνοψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφτεί την αρχική ανάρτηση** για περισσότερες λεπτομέρειες.
> - **ΟΡΓΑΝΩΣΗ** όλων των hacking τεχνικών στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΒΑΣΙΜΟ**
> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να μπορούν να **μαθαίνουν γρηγορότερα**
> - Σε αρκετές περιπτώσεις θα γράψουμε απλώς **στο HackTricks μια περίληψη των σημαντικών σημείων** της τεχνικής και θα **ενθαρρύνουμε τον αναγνώστη να επισκεφθεί το αρχικό άρθρο** για περισσότερες λεπτομέρειες.
> - **ΟΡΓΑΝΩΣΗ** όλων των τεχνικών hacking στο βιβλίο ώστε να είναι **ΠΙΟ ΠΡΟΣΒΑΣΙΜΟ**
> - Η ομάδα HackTricks έχει αφιερώσει χιλιάδες ώρες δωρεάν **μόνο για να οργανώσει το περιεχόμενο** ώστε οι άνθρωποι να μπορούν να **μαθαίνουν πιο γρήγορα**
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
## Συχνές Ερωτήσεις HackTricks
## HackTricks faq
> [!TIP]
>
> - **Thank you so much for these resources, how can I thank you?**
Μπορείτε να ευχαριστήσετε δημόσια τις ομάδες HackTricks για τη συγκέντρωση όλων αυτών των πόρων κάνοντας ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Μπορείτε να ευχαριστήσετε δημόσια τις ομάδες HackTricks για τη συγκέντρωση όλων αυτών των πόρων δημοσιεύοντας ένα tweet αναφέροντας [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
Αν είστε ιδιαίτερα ευγνώμονες μπορείτε επίσης να [**χορηγήσετε το project εδώ**](https://github.com/sponsors/carlospolop).\
Και μην ξεχάσετε να **δώσετε ένα αστέρι στα Github projects!** (Βρείτε τους συνδέσμους παρακάτω).
Και μην ξεχάσετε να **δώσετε ένα star στα έργα του Github!** (Βρείτε τους συνδέσμους παρακάτω).
> [!TIP]
>
> - **How can I contribute to the project?**
Μπορείτε να **μοιραστείτε νέες συμβουλές και τεχνάσματα με την κοινότητα ή να διορθώσετε σφάλματα** που βρίσκετε στα βιβλία στέλνοντας ένα **Pull Request** στις αντίστοιχες σελίδες Github:
Μπορείτε να **μοιραστείτε νέες συμβουλές και κόλπα με την κοινότητα ή να διορθώσετε σφάλματα** που βρίσκετε στα βιβλία στέλνοντας ένα **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)
Μην ξεχάσετε να **δώσετε ένα αστέρι στα Github projects!**
Μην ξεχάσετε να **δώσετε ένα star στα έργα του Github!**
> [!TIP]
>
> - **Can I copy some content from HackTricks and put it in my blog?**
Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τους συγκεκριμένους συνδέσμους** από όπου ελήφθη το περιεχόμενο.
Ναι, μπορείτε, αλλά **μην ξεχάσετε να αναφέρετε τον/τους συγκεκριμένο(ύς) σύνδεσμο(ους)** από όπου ελήφθη το περιεχόμενο.
> [!TIP]
>
> - **How can I cite a page of HackTricks?**
> - **How can I reference a page of HackTricks?**
Εφόσον εμφανίζεται ο σύνδεσμος της σελίδας(ων) από τις οποίες πήρατε την πληροφορία, αυτό είναι αρκετό.\
Αν χρειάζεστε bibtex μπορείτε να χρησιμοποιήσετε κάτι σαν:
Εφόσον εμφανίζεται ο σύνδεσμος της σελίδας/των σελίδων από όπου πήρατε την πληροφορία, αυτό είναι αρκετό.\
Εάν χρειάζεστε ένα bibtex μπορείτε να χρησιμοποιήσετε κάτι σαν:
```latex
@misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -63,83 +63,81 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
> [!WARNING]
>
> - **Μπορώ να αντιγράψω όλα τα HackTricks στο blog μου;**
**Καλύτερα όχι**. Αυτό **δεν θα ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη δημόσια διαθέσιμο** στα επίσημα βιβλία HackTricks δωρεάν.
Αν φοβάσαι ότι θα εξαφανιστεί, απλώς κάνε fork στο Github ή κατέβασέ το, όπως είπα είναι ήδη δωρεάν.
>
> **Καλύτερα να μην το κάνετε**. Αυτό **δεν πρόκειται να ωφελήσει κανέναν** καθώς όλο το **περιεχόμενο είναι ήδη διαθέσιμο δημόσια** στα επίσημα βιβλία HackTricks δωρεάν.
>
> Αν φοβάστε ότι θα εξαφανιστεί, απλώς κάντε fork στο Github ή κατεβάστε το — όπως είπα, είναι ήδη δωρεάν.
>
> [!WARNING]
>
> - **Γιατί έχετε χορηγούς; Είναι τα βιβλία HackTricks για εμπορικούς σκοπούς;**
Η πρώτη **αξία** του HackTricks είναι να προσφέρει **ΔΩΡΕΑΝ** εκπαιδευτικούς πόρους για hacking σε **ΟΛΟΝ** τον κόσμο. Η ομάδα HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **ΔΩΡΕΑΝ**.
Αν πιστεύεις ότι τα βιβλία HackTricks έχουν γίνει για **εμπορικούς σκοπούς**, είσαι **ΕΝΤΕΛΩΣ ΛΑΘΟΣ**.
Έχουμε χορηγούς επειδή, ακόμη και αν όλο το περιεχόμενο είναι ΔΩΡΕΑΝ, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω [**Github sponsors**](https://github.com/sponsors/carlospolop), και **σχετικές εταιρείες κυβερνοασφάλειας** να χορηγήσουν το HackTricks και να **έχουν μερικές διαφημίσεις** στο βιβλίο, με τις **διαφημίσεις** πάντα τοποθετημένες σε σημεία όπου είναι **ορατές** αλλά **δεν διαταράσσουν τη διαδικασία μάθησης** αν κάποιος επικεντρωθεί στο περιεχόμενο.
Δεν θα βρεις το HackTricks γεμάτο με ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, επειδή το HackTricks δεν έχει γίνει για εμπορικούς σκοπούς.
> - **Γιατί έχετε χορηγούς; Είναι τα HackTricks βιβλία για εμπορικούς σκοπούς;**
>
> Η πρώτη **HackTricks** **αξία** είναι να προσφέρει **FREE** εκπαιδευτικούς πόρους για το hacking σε **ΟΛΟ** τον κόσμο. Η ομάδα του HackTricks έχει **αφιερώσει χιλιάδες ώρες** για να προσφέρει αυτό το περιεχόμενο, ξανά, **ΔΩΡΕΑΝ**.
>
> Αν νομίζετε ότι τα βιβλία HackTricks έχουν δημιουργηθεί για **εμπορικούς σκοπούς**, είστε **ΣΥΝΤΟΜΑ ΛΑΘΟΣ**.
>
> Έχουμε χορηγούς επειδή, ακόμα κι αν όλο το περιεχόμενο είναι ΔΩΡΕΑΝ, θέλουμε να **δώσουμε στην κοινότητα τη δυνατότητα να εκτιμήσει τη δουλειά μας** αν το επιθυμεί. Επομένως, προσφέρουμε στους ανθρώπους την επιλογή να δωρίσουν στο HackTricks μέσω των [**Github sponsors**](https://github.com/sponsors/carlospolop), καθώς και σε **σχετικές εταιρείες cybersecurity** να χορηγήσουν το HackTricks και να **έχουν κάποιες διαφημίσεις** στο βιβλίο, με τις **διαφημίσεις** πάντα τοποθετημένες σε σημεία όπου είναι **ορατές** αλλά **δεν ενοχλούν** τη μαθησιακή διαδικασία αν κάποιος εστιάσει στο περιεχόμενο.
>
> Δεν θα βρείτε το HackTricks γεμάτο ενοχλητικές διαφημίσεις όπως άλλα blogs με πολύ λιγότερο περιεχόμενο από το HackTricks, γιατί το HackTricks δεν είναι φτιαγμένο για εμπορικούς σκοπούς.
>
> [!CAUTION]
>
> - **Τι πρέπει να κάνω αν κάποια σελίδα του HackTricks βασίζεται σε ανάρτησή μου αλλά δεν αναφέρεται;**
**Λυπούμαστε πολύ. Αυτό δεν θα έπρεπε να έχει συμβεί**. Παρακαλούμε, ενημερώστε μας μέσω Github issues, Twitter, Discord... τον σύνδεσμο της σελίδας HackTricks με το περιεχόμενο και τον σύνδεσμο του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατό**.
> - **Τι πρέπει να κάνω αν κάποια σελίδα του HackTricks βασίζεται σε δημοσίευσή μου αλλά δεν αναφέρεται η πηγή;**
>
> **Λυπούμαστε πολύ. Αυτό δεν θα έπρεπε να είχε συμβεί**. Παρακαλώ ενημερώστε μας μέσω Github issues, Twitter, Discord... δώστε το link της σελίδας HackTricks με το περιεχόμενο και το link του blog σας και **θα το ελέγξουμε και θα το προσθέσουμε το συντομότερο δυνατό**.
>
> [!CAUTION]
>
> - **Τι πρέπει να κάνω αν υπάρχει περιεχόμενο από το blog μου στο HackTricks και δεν θέλω να είναι εκεί;**
Σημειώστε ότι η ύπαρξη συνδέσμων προς τη σελίδα σας στο HackTricks:
- Βελτιώνει το **SEO**
- Το περιεχόμενο **μεταφράζεται σε περισσότερες από 15 γλώσσες**, καθιστώντας δυνατή την πρόσβαση περισσότερων ανθρώπων σε αυτό το περιεχόμενο
- Το **HackTricks ενθαρρύνει** τους ανθρώπους να **επισκεφτούν τη σελίδα σας** (πολλοί μας έχουν αναφέρει ότι από τη στιγμή που κάποια σελίδα τους βρίσκεται στο HackTricks λαμβάνουν περισσότερες επισκέψεις)
Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλώς ενημερώστε μας και θα **αφαιρέσουμε σίγουρα κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό.
>
> Σημειώστε ότι η ύπαρξη συνδέσμων προς τη σελίδα σας στο HackTricks:
>
> - Βελτιώνει το **SEO**
> - Το περιεχόμενο **μεταφράζεται σε πάνω από 15 γλώσσες**, καθιστώντας το προσβάσιμο σε περισσότερους ανθρώπους
> - Το **HackTricks ενθαρρύνει** τους ανθρώπους να **ελέγξουν τη σελίδα σας** (πολλοί μας έχουν αναφέρει ότι από τότε που κάποια σελίδα τους βρίσκεται στο HackTricks λαμβάνουν περισσότερες επισκέψεις)
>
> Ωστόσο, αν εξακολουθείτε να θέλετε το περιεχόμενο του blog σας να αφαιρεθεί από το HackTricks, απλώς ενημερώστε μας και θα **αφαιρέσουμε κάθε σύνδεσμο προς το blog σας**, και οποιοδήποτε περιεχόμενο βασίζεται σε αυτό.
>
> [!CAUTION]
>
> - **Τι πρέπει να κάνω αν εντοπίσω αντιγραμμένο περιεχόμενο στο HackTricks;**
Πάντα **αποδίδουμε πλήρως την αναγνώριση στους αρχικούς συγγραφείς**. Αν βρείτε μία σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφορά στην αρχική πηγή, ενημερώστε μας και είτε θα **τη αφαιρέσουμε**, είτε θα **προσθέσουμε τον σύνδεσμο πριν το κείμενο**, είτε θα **την ξαναγράψουμε προσθέτοντας τον σύνδεσμο**.
## LICENSE
Πνευματικά δικαιώματα © Όλα τα δικαιώματα διατηρούνται εκτός αν αναφέρεται διαφορετικά.
#### Περίληψη Άδειας:
- Απόδοση: Έχετε το δικαίωμα να:
- Κοινοποιήσετε — αντιγράψετε και αναδιανείμετε το υλικό σε οποιοδήποτε μέσο ή μορφή.
- Τροποποιήσετε — αναμείξετε, μετασχηματίσετε και να βασιστείτε στο υλικό.
#### Πρόσθετοι Όροι:
- Περιεχόμενο τρίτων: Μερικά μέρη αυτού του blog/βιβλίου ενδέχεται να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή δημοσιεύσεις. Η χρήση τέτοιου περιεχομένου γίνεται βάσει των αρχών του fair use ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλούμε ανατρέξτε στις αρχικές πηγές για συγκεκριμένες πληροφορίες αδειοδότησης σχετικά με περιεχόμενο τρίτων.
- Συγγραφή: Το πρωτότυπο περιεχόμενο που δημιουργήθηκε από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδίδετε αυτό το έργο στον συγγραφέα όταν το μοιράζεστε ή το προσαρμόζετε.
#### Εξαιρέσεις:
- Εμπορική Χρήση: Για ερωτήσεις σχετικά με την εμπορική χρήση αυτού του περιεχομένου, παρακαλώ επικοινωνήστε μαζί μου.
Αυτή η άδεια δεν παραχωρεί κανένα δικαίωμα σε εμπορικά σήματα ή δικαιώματα branding σε σχέση με το περιεχόμενο. Όλα τα εμπορικά σήματα και τα branding που εμφανίζονται σε αυτό το blog/βιβλίο ανήκουν στους αντίστοιχους ιδιοκτήτες τους.
**Με την πρόσβαση ή χρήση του HackTricks, συμφωνείτε να συμμορφώνεστε με τους όρους αυτής της άδειας. Εάν δεν συμφωνείτε με αυτούς τους όρους, παρακαλώ μην επισκέπτεστε αυτόν τον ιστότοπο.**
## **Αποποίηση ευθυνών**
> - **Τι πρέπει να κάνω αν βρω αντιγραμμένο περιεχόμενο στο HackTricks;**
>
> Πάντα **δίνουμε στους αρχικούς συγγραφείς όλα τα credits**. Αν βρείτε μια σελίδα με αντιγραμμένο περιεχόμενο χωρίς αναφερόμενη την αρχική πηγή, ενημερώστε μας και είτε θα **το αφαιρέσουμε**, είτε θα **προσθέσουμε τον σύνδεσμο πριν το κείμενο**, είτε θα **το ξαναγράψουμε προσθέτοντας τον σύνδεσμο**.
>
> ## ΑΔΕΙΑ
>
> Copyright © All rights reserved unless otherwise specified.
>
> #### Περίληψη Άδειας:
>
> - Attribution: You are free to:
> - Share — copy and redistribute the material in any medium or format.
> - Adapt — remix, transform, and build upon the material.
>
> #### Επιπλέον Όροι:
>
> - Third-Party Content: Μερικά τμήματα αυτού του blog/book ενδέχεται να περιλαμβάνουν περιεχόμενο από άλλες πηγές, όπως αποσπάσματα από άλλα blogs ή δημοσιεύσεις. Η χρήση τέτοιου περιεχομένου γίνεται υπό τις αρχές του fair use ή με ρητή άδεια από τους αντίστοιχους κατόχους πνευματικών δικαιωμάτων. Παρακαλούμε ανατρέξτε στις αρχικές πηγές για συγκεκριμένες πληροφορίες αδειοδότησης όσον αφορά το περιεχόμενο τρίτων.
> - Authorship: Το πρωτότυπο περιεχόμενο που έχει συγγραφεί από το HackTricks υπόκειται στους όρους αυτής της άδειας. Σας ενθαρρύνουμε να αποδώσετε αυτό το έργο στον συγγραφέα όταν το μοιράζεστε ή το προσαρμόζετε.
>
> #### Εξαιρέσεις:
>
> - Commercial Use: Για ερωτήματα σχετικά με εμπορική χρήση αυτού του περιεχομένου, παρακαλώ επικοινωνήστε μαζί μου.
>
> Αυτή η άδεια δεν παραχωρεί δικαιώματα σε σχέση με εμπορικά σήματα ή δικαιώματα branding σχετικά με το περιεχόμενο. Όλα τα εμπορικά σήματα και branding που εμφανίζονται σε αυτό το blog/book είναι ιδιοκτησία των αντίστοιχων κατόχων τους.
>
> **Με την πρόσβαση ή τη χρήση του HackTricks, συμφωνείτε να τηρείτε τους όρους αυτής της άδειας. Αν δεν συμφωνείτε με αυτούς τους όρους, παρακαλώ, μην έχετε πρόσβαση σε αυτήν την ιστοσελίδα.**
>
> ## **ΑΠΟΠΟΙΗΣΗ ΕΥΘΥΝΩΝ**
>
> [!CAUTION]
> Αυτό το βιβλίο, 'HackTricks,' προορίζεται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς.
> Αυτό το βιβλίο, 'HackTricks,' προορίζεται μόνο για εκπαιδευτικούς και πληροφοριακούς σκοπούς. Το περιεχόμενο μέσα σε αυτό το βιβλίο παρέχεται "ως έχει", και οι συγγραφείς και οι εκδότες δεν κάνουν δηλώσεις ή εγγυήσεις οποιουδήποτε είδους, ρητές ή σιωπηρές, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιέχονται σε αυτό το βιβλίο. Οποιαδήποτε εμπιστοσύνη τοποθετείτε σε τέτοιου είδους πληροφορίες είναι αποκλειστικά και μόνο δική σας ευθύνη.
>
> Το περιεχόμενο αυτού του βιβλίου παρέχεται 'ως έχει', και οι συγγραφείς και εκδότες δεν παρέχουν καμία δήλωση ή εγγύηση οποιουδήποτε είδους, ρητή ή σιωπηρή, σχετικά με την πληρότητα, ακρίβεια, αξιοπιστία, καταλληλότητα ή διαθεσιμότητα των πληροφοριών, προϊόντων, υπηρεσιών ή σχετικών γραφικών που περιλαμβάνονται σε αυτό το βιβλίο. Οποιαδήποτε εμπιστοσύνη τοποθετήσετε σε τέτοιες πληροφορίες είναι επομένως αυστηρά με δικό σας ρίσκο.
> Οι συγγραφείς και οι εκδότες δεν θα ευθύνονται σε καμία περίπτωση για οποιαδήποτε απώλεια ή ζημία, περιλαμβανομένων ενδεικτικά και όχι περιοριστικά, έμμεσων ή επακόλουθων απωλειών ή ζημιών, ή οποιασδήποτε απώλειας ή ζημίας προκύψει από απώλεια δεδομένων ή κερδών που απορρέουν από ή σε σχέση με τη χρήση αυτού του βιβλίου.
>
> Οι συγγραφείς και εκδότες δεν θα είναι σε καμία περίπτωση υπεύθυνοι για οποιαδήποτε απώλεια ή ζημία, συμπεριλαμβανομένων χωρίς περιορισμό, έμμεσων ή επακόλουθων απωλειών ή ζημιών, ή οποιασδήποτε απώλειας ή ζημίας που προκύπτει από απώλεια δεδομένων ή κερδών που προκύπτουν από ή σε σχέση με τη χρήση αυτού του βιβλίου.
> Επιπλέον, οι τεχνικές και οι συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται για εκπαιδευτικούς και πληροφοριακούς σκοπούς μόνο και δεν πρέπει να χρησιμοποιούνται για οποιεσδήποτε παράνομες ή κακόβουλες ενέργειες. Οι συγγραφείς και οι εκδότες δεν εγκρίνουν ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με αποκλειστική ευθύνη και διακριτική ευχέρεια του χρήστη.
>
> Επιπλέον, οι τεχνικές και συμβουλές που περιγράφονται σε αυτό το βιβλίο παρέχονται μόνο για εκπαιδευτικούς και ενημερωτικούς σκοπούς, και δεν πρέπει να χρησιμοποιούνται για παράνομες ή κακόβουλες ενέργειες. Οι συγγραφείς και εκδότες δεν εγκρίνουν ούτε υποστηρίζουν οποιεσδήποτε παράνομες ή ανήθικες δραστηριότητες, και οποιαδήποτε χρήση των πληροφοριών που περιέχονται σε αυτό το βιβλίο γίνεται με δική σας ευθύνη και διακριτική ευχέρεια.
> Ο χρήστης είναι ο μόνος υπεύθυνος για οποιεσδήποτε ενέργειες ληφθούν με βάση τις πληροφορίες που περιέχονται σε αυτό το βιβλίο και θα πρέπει πάντα να ζητά επαγγελματικές συμβουλές και βοήθεια όταν επιχειρεί να εφαρμόσει οποιεσδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται εδώ.
>
> Ο χρήστης είναι αποκλειστικά υπεύθυνος για οποιεσδήποτε ενέργειες ληφθούν βάσει των πληροφοριών που περιέχονται σε αυτό το βιβλίο, και θα πρέπει πάντοτε να ζητά επαγγελματική συμβουλή και βοήθεια όταν επιχειρεί να εφαρμόσει οποιαδήποτε από τις τεχνικές ή συμβουλές που περιγράφονται εδώ.
> Με τη χρήση αυτού του βιβλίου, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και τους εκδότες από οποιαδήποτε και όλες τις ευθύνες και υποχρεώσεις για οποιεσδήποτε ζημίες, απώλειες ή βλάβες που ενδέχεται να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό.
>
> Με τη χρήση αυτού του βιβλίου, ο χρήστης συμφωνεί να απαλλάσσει τους συγγραφείς και τους εκδότες από οποιαδήποτε και συνολική ευθύνη και υπευθυνότητα για τυχόν ζημίες, απώλειες ή βλάβες που ενδέχεται να προκύψουν από τη χρήση αυτού του βιβλίου ή οποιασδήποτε από τις πληροφορίες που περιέχονται σε αυτό.
{{#include ../banners/hacktricks-training.md}}
> {{#include ../banners/hacktricks-training.md}}

View File

@ -6,34 +6,63 @@
*/
(() => {
"use strict";
"use strict";
/* ───────────── 0. helpers (main thread) ───────────── */
const clear = el => { while (el.firstChild) el.removeChild(el.firstChild); };
/* ───────────── 1. WebWorker code ─────────────────── */
const workerCode = `
self.window = self;
self.search = self.search || {};
const abs = p => location.origin + p;
/* 1 — elasticlunr */
try { importScripts('https://cdn.jsdelivr.net/npm/elasticlunr@0.9.5/elasticlunr.min.js'); }
catch { importScripts(abs('/elasticlunr.min.js')); }
/* 2 — decompress gzip data */
async function decompressGzip(arrayBuffer){
if(typeof DecompressionStream !== 'undefined'){
/* Modern browsers: use native DecompressionStream */
const stream = new Response(arrayBuffer).body.pipeThrough(new DecompressionStream('gzip'));
const decompressed = await new Response(stream).arrayBuffer();
return new TextDecoder().decode(decompressed);
} else {
/* Fallback: use pako library */
if(typeof pako === 'undefined'){
try { importScripts('https://cdn.jsdelivr.net/npm/pako@2.1.0/dist/pako.min.js'); }
catch(e){ throw new Error('pako library required for decompression: '+e); }
}
const uint8Array = new Uint8Array(arrayBuffer);
const decompressed = pako.ungzip(uint8Array, {to: 'string'});
return decompressed;
}
}
/* ───────────── 0. helpers (main thread) ───────────── */
const clear = el => { while (el.firstChild) el.removeChild(el.firstChild); };
/* ───────────── 1. WebWorker code ─────────────────── */
const workerCode = `
self.window = self;
self.search = self.search || {};
const abs = p => location.origin + p;
/* 1 — elasticlunr */
try { importScripts('https://cdn.jsdelivr.net/npm/elasticlunr@0.9.5/elasticlunr.min.js'); }
catch { importScripts(abs('/elasticlunr.min.js')); }
/* 2 — load a single index (remote → local) */
/* 3 — load a single index (remote → local) */
async function loadIndex(remote, local, isCloud=false){
let rawLoaded = false;
if(remote){
/* Try ONLY compressed version from GitHub (remote already includes .js.gz) */
try {
const r = await fetch(remote,{mode:'cors'});
if (!r.ok) throw new Error('HTTP '+r.status);
importScripts(URL.createObjectURL(new Blob([await r.text()],{type:'application/javascript'})));
rawLoaded = true;
} catch(e){ console.warn('remote',remote,'failed →',e); }
if (r.ok) {
const compressed = await r.arrayBuffer();
const text = await decompressGzip(compressed);
importScripts(URL.createObjectURL(new Blob([text],{type:'application/javascript'})));
rawLoaded = true;
console.log('Loaded compressed from GitHub:',remote);
}
} catch(e){ console.warn('compressed GitHub',remote,'failed →',e); }
}
/* If remote (GitHub) failed, fall back to local uncompressed file */
if(!rawLoaded && local){
try { importScripts(abs(local)); rawLoaded = true; }
try {
importScripts(abs(local));
rawLoaded = true;
console.log('Loaded local fallback:',local);
}
catch(e){ console.error('local',local,'failed →',e); }
}
if(!rawLoaded) return null; /* give up on this index */
@ -61,151 +90,159 @@
return local ? loadIndex(null, local, isCloud) : null;
}
let built = [];
const MAX = 30, opts = {bool:'AND', expand:true};
self.onmessage = async ({data}) => {
if(data.type === 'init'){
const lang = data.lang || 'en';
const searchindexBase = 'https://raw.githubusercontent.com/HackTricks-wiki/hacktricks-searchindex/master';
(async () => {
const htmlLang = (document.documentElement.lang || 'en').toLowerCase();
const lang = htmlLang.split('-')[0];
const mainReleaseBase = 'https://github.com/HackTricks-wiki/hacktricks/releases/download';
const cloudReleaseBase = 'https://github.com/HackTricks-wiki/hacktricks-cloud/releases/download';
/* Remote sources are .js.gz (compressed), local fallback is .js (uncompressed) */
const mainFilenames = Array.from(new Set(['searchindex-' + lang + '.js.gz', 'searchindex-en.js.gz']));
const cloudFilenames = Array.from(new Set(['searchindex-cloud-' + lang + '.js.gz', 'searchindex-cloud-en.js.gz']));
const mainTags = Array.from(new Set([\`searchindex-\${lang}\`, 'searchindex-en', 'searchindex-master']));
const cloudTags = Array.from(new Set([\`searchindex-\${lang}\`, 'searchindex-en', 'searchindex-master']));
const MAIN_REMOTE_SOURCES = mainFilenames.map(function(filename) { return searchindexBase + '/' + filename; });
const CLOUD_REMOTE_SOURCES = cloudFilenames.map(function(filename) { return searchindexBase + '/' + filename; });
const MAIN_REMOTE_SOURCES = mainTags.map(tag => \`\${mainReleaseBase}/\${tag}/searchindex.js\`);
const CLOUD_REMOTE_SOURCES = cloudTags.map(tag => \`\${cloudReleaseBase}/\${tag}/searchindex.js\`);
const indices = [];
const main = await loadWithFallback(MAIN_REMOTE_SOURCES , '/searchindex.js', false); if(main) indices.push(main);
const cloud= await loadWithFallback(CLOUD_REMOTE_SOURCES, '/searchindex-cloud.js', true ); if(cloud) indices.push(cloud);
if(!indices.length){ postMessage({ready:false, error:'no-index'}); return; }
/* build index objects */
const built = indices.map(d => ({
idx : elasticlunr.Index.load(d.json),
urls: d.urls,
cloud: d.cloud,
base: d.cloud ? 'https://cloud.hacktricks.wiki/' : ''
}));
postMessage({ready:true});
const MAX = 30, opts = {bool:'AND', expand:true};
self.onmessage = ({data:q}) => {
if(!q){ postMessage([]); return; }
const all = [];
for(const s of built){
const res = s.idx.search(q,opts);
if(!res.length) continue;
const max = res[0].score || 1;
res.forEach(r => {
const doc = s.idx.documentStore.getDoc(r.ref);
all.push({
norm : r.score / max,
title: doc.title,
body : doc.body,
breadcrumbs: doc.breadcrumbs,
url : s.base + s.urls[r.ref],
cloud: s.cloud
const indices = [];
const main = await loadWithFallback(MAIN_REMOTE_SOURCES , '/searchindex-book.js', false); if(main) indices.push(main);
const cloud= await loadWithFallback(CLOUD_REMOTE_SOURCES, '/searchindex.js', true ); if(cloud) indices.push(cloud);
if(!indices.length){ postMessage({ready:false, error:'no-index'}); return; }
/* build index objects */
built = indices.map(d => ({
idx : elasticlunr.Index.load(d.json),
urls: d.urls,
cloud: d.cloud,
base: d.cloud ? 'https://cloud.hacktricks.wiki/' : ''
}));
postMessage({ready:true});
return;
}
const q = data.query || data;
if(!q){ postMessage([]); return; }
const all = [];
for(const s of built){
const res = s.idx.search(q,opts);
if(!res.length) continue;
const max = res[0].score || 1;
res.forEach(r => {
const doc = s.idx.documentStore.getDoc(r.ref);
all.push({
norm : r.score / max,
title: doc.title,
body : doc.body,
breadcrumbs: doc.breadcrumbs,
url : s.base + s.urls[r.ref],
cloud: s.cloud
});
});
});
}
all.sort((a,b)=>b.norm-a.norm);
postMessage(all.slice(0,MAX));
};
})();
`;
}
all.sort((a,b)=>b.norm-a.norm);
postMessage(all.slice(0,MAX));
};
`;
/* ───────────── 2. spawn worker ───────────── */
const worker = new Worker(URL.createObjectURL(new Blob([workerCode],{type:'application/javascript'})));
/* ───────────── 2.1. initialize worker with language ───────────── */
const htmlLang = (document.documentElement.lang || 'en').toLowerCase();
const lang = htmlLang.split('-')[0];
worker.postMessage({type: 'init', lang: lang});
/* ───────────── 3. DOM refs ─────────────── */
const wrap = document.getElementById('search-wrapper');
const bar = document.getElementById('searchbar');
const list = document.getElementById('searchresults');
const listOut = document.getElementById('searchresults-outer');
const header = document.getElementById('searchresults-header');
const icon = document.getElementById('search-toggle');
const READY_ICON = icon.innerHTML;
icon.textContent = '⏳';
icon.setAttribute('aria-label','Loading search …');
icon.setAttribute('title','Search is loading, please wait...');
/* ───────────── 2. spawn worker ───────────── */
const worker = new Worker(URL.createObjectURL(new Blob([workerCode],{type:'application/javascript'})));
/* ───────────── 3. DOM refs ─────────────── */
const wrap = document.getElementById('search-wrapper');
const bar = document.getElementById('searchbar');
const list = document.getElementById('searchresults');
const listOut = document.getElementById('searchresults-outer');
const header = document.getElementById('searchresults-header');
const icon = document.getElementById('search-toggle');
const READY_ICON = icon.innerHTML;
icon.textContent = '⏳';
icon.setAttribute('aria-label','Loading search …');
icon.setAttribute('title','Search is loading, please wait...');
const HOT=83, ESC=27, DOWN=40, UP=38, ENTER=13;
let debounce, teaserCount=0;
/* ───────────── helpers (teaser, metric) ───────────── */
const escapeHTML = (()=>{const M={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&#34;','\'':'&#39;'};return s=>s.replace(/[&<>'"]/g,c=>M[c]);})();
const URL_MARK='highlight';
function metric(c,t){return c?`${c} search result${c>1?'s':''} for '${t}':`:`No search results for '${t}'.`;}
function makeTeaser(body,terms){
const stem=w=>elasticlunr.stemmer(w.toLowerCase());
const T=terms.map(stem),W_S=40,W_F=8,W_N=2,WIN=30;
const W=[],sents=body.toLowerCase().split('. ');
let i=0,v=W_F,found=false;
sents.forEach(s=>{v=W_F; s.split(' ').forEach(w=>{ if(w){ if(T.some(t=>stem(w).startsWith(t))){v=W_S;found=true;} W.push([w,v,i]); v=W_N;} i+=w.length+1; }); i++;});
if(!W.length) return body;
const win=Math.min(W.length,WIN);
const sums=[W.slice(0,win).reduce((a,[,wt])=>a+wt,0)];
for(let k=1;k<=W.length-win;k++) sums[k]=sums[k-1]-W[k-1][1]+W[k+win-1][1];
const best=found?sums.lastIndexOf(Math.max(...sums)):0;
const out=[]; i=W[best][2];
for(let k=best;k<best+win;k++){const [w,wt,pos]=W[k]; if(i<pos){out.push(body.substring(i,pos)); i=pos;} if(wt===W_S) out.push('<em>'); out.push(body.substr(pos,w.length)); if(wt===W_S) out.push('</em>'); i=pos+w.length;}
return out.join('');
}
function format(d,terms){
const teaser=makeTeaser(escapeHTML(d.body),terms);
teaserCount++;
const enc=encodeURIComponent(terms.join(' ')).replace(/'/g,'%27');
const parts=d.url.split('#'); if(parts.length===1) parts.push('');
const abs=d.url.startsWith('http');
const href=`${abs?'':path_to_root}${parts[0]}?${URL_MARK}=${enc}#${parts[1]}`;
const style=d.cloud?" style=\"color:#1e88e5\"":"";
const isCloud=d.cloud?" [Cloud]":" [Book]";
return `<a href="${href}" aria-details="teaser_${teaserCount}"${style}>`+
`${d.breadcrumbs}${isCloud}<span class="teaser" id="teaser_${teaserCount}" aria-label="Search Result Teaser">${teaser}</span></a>`;
}
/* ───────────── UI control ───────────── */
function showUI(s){wrap.classList.toggle('hidden',!s); icon.setAttribute('aria-expanded',s); if(s){window.scrollTo(0,0); bar.focus(); bar.select();} else {listOut.classList.add('hidden'); [...list.children].forEach(li=>li.classList.remove('focus'));}}
function blur(){const t=document.createElement('input'); t.style.cssText='position:absolute;opacity:0;'; icon.appendChild(t); t.focus(); t.remove();}
icon.addEventListener('click',()=>showUI(wrap.classList.contains('hidden')));
document.addEventListener('keydown',e=>{
if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey) return;
const f=/^(?:input|select|textarea)$/i.test(e.target.nodeName);
if(e.keyCode===HOT && !f){e.preventDefault(); showUI(true);} else if(e.keyCode===ESC){e.preventDefault(); showUI(false); blur();}
else if(e.keyCode===DOWN && document.activeElement===bar){e.preventDefault(); const first=list.firstElementChild; if(first){blur(); first.classList.add('focus');}}
else if([DOWN,UP,ENTER].includes(e.keyCode) && document.activeElement!==bar){const cur=list.querySelector('li.focus'); if(!cur) return; e.preventDefault(); if(e.keyCode===DOWN){const nxt=cur.nextElementSibling; if(nxt){cur.classList.remove('focus'); nxt.classList.add('focus');}} else if(e.keyCode===UP){const prv=cur.previousElementSibling; cur.classList.remove('focus'); if(prv){prv.classList.add('focus');} else {bar.focus();}} else {const a=cur.querySelector('a'); if(a) window.location.assign(a.href);}}
});
bar.addEventListener('input',e=>{ clearTimeout(debounce); debounce=setTimeout(()=>worker.postMessage(e.target.value.trim()),120); });
/* ───────────── worker messages ───────────── */
worker.onmessage = ({data}) => {
if(data && data.ready!==undefined){
if(data.ready){
icon.innerHTML=READY_ICON;
icon.setAttribute('aria-label','Open search (S)');
icon.removeAttribute('title');
}
else {
icon.textContent='❌';
icon.setAttribute('aria-label','Search unavailable');
icon.setAttribute('title','Search is unavailable');
}
return;
const HOT=83, ESC=27, DOWN=40, UP=38, ENTER=13;
let debounce, teaserCount=0;
/* ───────────── helpers (teaser, metric) ───────────── */
const escapeHTML = (()=>{const M={'&':'&amp;','<':'&lt;','>':'&gt;','"':'&#34;','\'':'&#39;'};return s=>s.replace(/[&<>'"]/g,c=>M[c]);})();
const URL_MARK='highlight';
function metric(c,t){return c?`${c} search result${c>1?'s':''} for '${t}':`:`No search results for '${t}'.`;}
function makeTeaser(body,terms){
const stem=w=>elasticlunr.stemmer(w.toLowerCase());
const T=terms.map(stem),W_S=40,W_F=8,W_N=2,WIN=30;
const W=[],sents=body.toLowerCase().split('. ');
let i=0,v=W_F,found=false;
sents.forEach(s=>{v=W_F; s.split(' ').forEach(w=>{ if(w){ if(T.some(t=>stem(w).startsWith(t))){v=W_S;found=true;} W.push([w,v,i]); v=W_N;} i+=w.length+1; }); i++;});
if(!W.length) return body;
const win=Math.min(W.length,WIN);
const sums=[W.slice(0,win).reduce((a,[,wt])=>a+wt,0)];
for(let k=1;k<=W.length-win;k++) sums[k]=sums[k-1]-W[k-1][1]+W[k+win-1][1];
const best=found?sums.lastIndexOf(Math.max(...sums)):0;
const out=[]; i=W[best][2];
for(let k=best;k<best+win;k++){const [w,wt,pos]=W[k]; if(i<pos){out.push(body.substring(i,pos)); i=pos;} if(wt===W_S) out.push('<em>'); out.push(body.substr(pos,w.length)); if(wt===W_S) out.push('</em>'); i=pos+w.length;}
return out.join('');
}
const docs=data, q=bar.value.trim(), terms=q.split(/\s+/).filter(Boolean);
header.textContent=metric(docs.length,q);
clear(list);
docs.forEach(d=>{const li=document.createElement('li'); li.innerHTML=format(d,terms); list.appendChild(li);});
listOut.classList.toggle('hidden',!docs.length);
};
})();
function format(d,terms){
const teaser=makeTeaser(escapeHTML(d.body),terms);
teaserCount++;
const enc=encodeURIComponent(terms.join(' ')).replace(/'/g,'%27');
const parts=d.url.split('#'); if(parts.length===1) parts.push('');
const abs=d.url.startsWith('http');
const href=`${abs?'':path_to_root}${parts[0]}?${URL_MARK}=${enc}#${parts[1]}`;
const style=d.cloud?" style=\"color:#1e88e5\"":"";
const isCloud=d.cloud?" [Cloud]":" [Book]";
return `<a href="${href}" aria-details="teaser_${teaserCount}"${style}>`+
`${d.breadcrumbs}${isCloud}<span class="teaser" id="teaser_${teaserCount}" aria-label="Search Result Teaser">${teaser}</span></a>`;
}
/* ───────────── UI control ───────────── */
function showUI(s){wrap.classList.toggle('hidden',!s); icon.setAttribute('aria-expanded',s); if(s){window.scrollTo(0,0); bar.focus(); bar.select();} else {listOut.classList.add('hidden'); [...list.children].forEach(li=>li.classList.remove('focus'));}}
function blur(){const t=document.createElement('input'); t.style.cssText='position:absolute;opacity:0;'; icon.appendChild(t); t.focus(); t.remove();}
icon.addEventListener('click',()=>showUI(wrap.classList.contains('hidden')));
document.addEventListener('keydown',e=>{
if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey) return;
const f=/^(?:input|select|textarea)$/i.test(e.target.nodeName);
if(e.keyCode===HOT && !f){e.preventDefault(); showUI(true);} else if(e.keyCode===ESC){e.preventDefault(); showUI(false); blur();}
else if(e.keyCode===DOWN && document.activeElement===bar){e.preventDefault(); const first=list.firstElementChild; if(first){blur(); first.classList.add('focus');}}
else if([DOWN,UP,ENTER].includes(e.keyCode) && document.activeElement!==bar){const cur=list.querySelector('li.focus'); if(!cur) return; e.preventDefault(); if(e.keyCode===DOWN){const nxt=cur.nextElementSibling; if(nxt){cur.classList.remove('focus'); nxt.classList.add('focus');}} else if(e.keyCode===UP){const prv=cur.previousElementSibling; cur.classList.remove('focus'); if(prv){prv.classList.add('focus');} else {bar.focus();}} else {const a=cur.querySelector('a'); if(a) window.location.assign(a.href);}}
});
bar.addEventListener('input',e=>{ clearTimeout(debounce); debounce=setTimeout(()=>worker.postMessage({query: e.target.value.trim()}),120); });
/* ───────────── worker messages ───────────── */
worker.onmessage = ({data}) => {
if(data && data.ready!==undefined){
if(data.ready){
icon.innerHTML=READY_ICON;
icon.setAttribute('aria-label','Open search (S)');
icon.removeAttribute('title');
}
else {
icon.textContent='❌';
icon.setAttribute('aria-label','Search unavailable');
icon.setAttribute('title','Search is unavailable');
}
return;
}
const docs=data, q=bar.value.trim(), terms=q.split(/\s+/).filter(Boolean);
header.textContent=metric(docs.length,q);
clear(list);
docs.forEach(d=>{const li=document.createElement('li'); li.innerHTML=format(d,terms); list.appendChild(li);});
listOut.classList.toggle('hidden',!docs.length);
};
})();