Każdy #programista15k…

Każdy #programista15k przynajmniej raz w swoim życiu spotkał się z terminem XSS – czyli wykonaniem kodu #javascript w przeglądarce.
Ale czy można przeprowadzić taki atak bez użycia tagu html?
O tym w dzisiejszym odcinku #od0dopentestera

< ?php
$s = str_replace('<', '<', $ _GET['s']);
echo str_replace('>', '>', $s);
?>

Przy pomocy funkcji #php str_replace zamieniam tutaj wszystkie znaki większości oraz mniejszości na odpowiadające im encję.
Symuluje zatem wykonanie funkcji htmlspecialchars.
Dzięki temu nie można stworzyć nowego tagu html.
Przeglądarka bowiem napotykając encję nie interpretuje jej a wyświetla jako zwykły znak.

Jak zatem doprowadzić do wykonania kodu #js ?
W przykładzie znajduje się również linijka, w której używam #angular
Jeśli wasza strona również korzysta z tego frameworka zasady zabezpieczania przed XSS nieco się zmieniają.

Tutaj bowiem podobnie jak w atakach server side template injection można używać specjalnych poleceń – zawartych pomiędzy podwójnymi cudzysłowami.
Najprostszą metodą sprawdzenia czy nasza strona jest podatna na ten atak to skorzystanie z matematyki: ?s={{5-2}}
Jeżeli strona jest podatna – otrzymamy wynik odejmowania.
Przedstawiany atak nazywa się: Client Side Template Injection.

Od wersji 1.6 do wykonywania kodu można używać:
?s={{constructor.constructor('alert(1)')()}}

W przypadku innych wersji warto skorzystać z tej tabelki.

Jak ochronić się przed tym atakiem?
W miejscu gdzie dane są podawane i wyświetlane przez użytkownika należy dodać specjalny argument:

Teraz przekazywany przez nas parametr jest wyświetlany jako tekst.

#hacking #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki

Comments are closed.