Řešení alert(1) to win
Školení, která pořádám
Soutěž v hledání XSS alert(1) to win patří mezi to nejlepší, co jsem v poslední době viděl. Příklady jsou velmi těžké a ukazují hodně z toho, na co si při psaní klientského kódu dát pozor. U některých ukázek kódu jsem měl na první pohled pocit, že jsou neprůstřelné a že se příliš neliší od toho, jak bych kód napsal sám. Přesto obsahovaly závažnou chybu, která aplikaci kompromituje. Pokud máte dost času a myslíte si, že o XSS něco víte, tak doporučuji se příklady potrápit. Já jsem tím strávil několik hodin a musím přiznat, že u některých jsem se nakonec neobešel bez nápovědy. Až si nebudete vědět rady, tak se můžete podívat na řešení, které je v mnoha případech velmi poučné. Otázky se otevřou do nového okna, řešení se zobrazí na této stránce.
Diskuse
Drobný bug - otevírání řešení nefunguje, když čtu článek z homepage (chybí skript). Také mi to nejelo v Chrome na Androidu.
Jinak díky za řešení, rád si počkám na #8, kde jsem docílil patrně nejhoršího řešení vůbec (1253 chars) opsáním příkladu z jsfuck.com :-)
Milsa:
Príde mi to také, ako keby sa bezpečný kód ani napísať nedal.
Martin R.:
U prvního úkolu je možné použít i následující a dostat se tak na 12 znaků, kterého dosáhli téměř všichni.
"+alert(1)+"
Vladimír Pilný:
nebo též na 12:
");alert(1,"
Adam:
0: s = '");alert("1'
1: s = '\\\");alert(1);//'
Marek Vavrečan:
14. je riešenie pomocou <!--<script>.. ktorý sa vo vnútri hlavného <script> vyparsuje prvé... a potom už len stačí dosadiť začiatok aby všetko sedelo ako má:
alert(1);if(a/*<!--<script>
15. rovnaký trik s <!--<script> a zvyšok je už jednoduchý:
<!--<script>#)-->/;alert(1)<!--/*
Jakub Vrana :
Díky, to má pro mě opravdu velkou hodnotu, protože to skutečně odhaluje reálné chyby v aplikacích, které mohu opravit.
v6ak :
Ještě jsem to pořádně nepročetl, ale vychází mi z toho, že by toto mělo být OK, pokud chci Javascript alert({$alert}):
<?php
"<script type='text/javascript'>alert(".str_replace(array("<", ">"), array("\\u003c", "\\u003e"), json_encode($alert)).");</script>"
?>
Jakub Vrana :
Přibyl příklad 16, byť ještě není dokončený.
Trestná smradlavice:
Řešení u levelu 2, zdá se, nefunguje. Ale jde použít řešení z levelu 11.
Trestná smradlavice:
U levelu 13… nemělo by místo youWin být youWon?
Jakub Vrána :
Ano, děkuji za upozornění. Opravil jsem to.
Boris:
Už je tam aj príklad 17, ale príde mi, že na novších prehliadačoch sa to nedá hacknúť. Skúšali ste to niekto?
Jakub Vrána :
Ještě to nehacknul ani autor, tak bych se o to asi ani nepokoušel.
osoba prdelnatá:
- jde se někomu v tuto chvíli dostat na další levely?
- dá se říct, že Level 17 je "nedobytný" a tedy bezpečný proti XSS?
Diskuse je zrušena z důvodu spamu.