Merge branch 'main' into mitigation
This commit is contained in:
commit
7f7b7a24e0
53
README.md
Normal file
53
README.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# Description XSS
|
||||||
|
XSS, cross-site scripting, is een methode waarmee je remote code execution
|
||||||
|
kan behalen in een browser. Dit bereik je door een vertrouwde server kwaadaardige content te laten serveren.
|
||||||
|
|
||||||
|
In dit project is één vorm hiervan opgenomen, namelijk een directe `echo`.
|
||||||
|
Dit is het meest makkelijke voorbeeld, maar niet altijd de realiteit.
|
||||||
|
Vaak zal je toch wel wat beveiliging moeten omzeilen. Om deze reden zijn
|
||||||
|
er dan ook honderden verschillende manieren van XSS, ook wel attack vectors
|
||||||
|
genoemd. [Hier is een gist met een lijst van ideeën.](https://gist.github.com/freb/967398bdb89314350fe3e890552d23f1)
|
||||||
|
|
||||||
|
# In practice
|
||||||
|
Als voorbeeld bevat deze repository een docker-compose project die alles opzet.
|
||||||
|
Dit project biedt twee websites aan, geserveerd door een nginx reverse proxy.
|
||||||
|
|
||||||
|
De applicatie die je probeert te benaderen staat op [http://localhost:8080](http://localhost:8080).
|
||||||
|
Een exploit van deze applicatie, de phishing site, staat op [http://localhost:8081](http://localhost:8081).
|
||||||
|
|
||||||
|
## Setting up
|
||||||
|
Dit project maakt gebruik van docker-compose. Met het volgende commando kan je de docker omgeving opzetten:
|
||||||
|
```sh
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Wanneer je klaar bent, kan je met het volgende commando alles stoppen:
|
||||||
|
```sh
|
||||||
|
docker-compose stop
|
||||||
|
```
|
||||||
|
|
||||||
|
Als je alles weer wilt verwijderen, dan kan je het volgende draaien:
|
||||||
|
```sh
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
Navigeer naar [de login pagina](http://localhost:8080/login.php). Hier kan je een gebruikersnaam invoeren
|
||||||
|
een ingelogde sessie met de server starten. Als dit gelukt is, wordt je gelijk naar de home pagina gestuurd.
|
||||||
|
Hier zie je nu onderaan staan dat je ingelogd bent. Het doel is om deze sessie over te nemen in een nieuwe browser
|
||||||
|
(tip: om te testen, gebruik een privé-venster of andere browser voor deze tweede sessie, zodat cookies anders zijn).
|
||||||
|
|
||||||
|
## Attacking
|
||||||
|
De [kwaadaardige website](http://localhost:8081) heeft een link staan. Als de gebruiker deze aanklikt, wordt deze
|
||||||
|
naar de applicatie gebracht, maar niet voordat de sessie cookies uitgelezen worden en opgestuurd worden naar de kwaadaardige website.
|
||||||
|
|
||||||
|
# Mitigation
|
||||||
|
Dit voorbeeld is geschreven in PHP. De oplossing voor het invoegen van HTML op deze manier is om gebruik te maken
|
||||||
|
van een functie `htmlspecialchars()`. Maar dat lost alleen dit probleem op. Er zijn nog honderden manieren om op deze
|
||||||
|
manier aan te vallen (zie inleiding). Iedere taal zal zijn eigen eisen hebben om dit netjes op te lossen. Je zal altijd
|
||||||
|
een vector missen, ga daar maar van uit.
|
||||||
|
|
||||||
|
Zelfs Google, op haar searchengine, had recentelijk nog een XSS probleem. [Lees de commit met de fix.](https://github.com/google/closure-library/commit/c79ab48e8e962fee57e68739c00e16b9934c0ffa).
|
||||||
|
|
||||||
|
Loop niet al te radeloos weg, er is namelijk wel een oplossing die je mee kan nemen. Deze oplossing dekt nog altijd niet volledig, maar werkt beter dan alles wat je zelf zal doen: gebruik een framework.
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user