Řešení alert(1) to win
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 :-)
14.10.2013 09:42:43
Díky za upozornění, už jsem to opravil.
14.10.2013 18:52:01
Príde mi to také, ako keby sa bezpečný kód ani napísať nedal.
14.10.2013 13:59:58
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)+"
14.10.2013 16:54:09
Vladimír Pilný:
nebo též na 12:
");alert(1,"
14.10.2013 17:15:32
Adam:
0: s = '");alert("1'
1: s = '\\\");alert(1);//'
14.10.2013 18:20:14
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)<!--/*
16.10.2013 00:31:06
Díky, to má pro mě opravdu velkou hodnotu, protože to skutečně odhaluje reálné chyby v aplikacích, které mohu opravit.
16.10.2013 04:55:41
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>"
?>
10.11.2013 17:03:46
Přibyl příklad 16, byť ještě není dokončený.
16.10.2013 10:31:41
Trestná smradlavice:
Řešení u levelu 2, zdá se, nefunguje. Ale jde použít řešení z levelu 11.
4.11.2013 12:00:35
Trestná smradlavice:
U levelu 13… nemělo by místo youWin být youWon?
4.11.2013 18:48:19
Ano, děkuji za upozornění. Opravil jsem to.
4.11.2013 19:06:28
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?
18.11.2013 21:39:52
Ještě to nehacknul ani autor, tak bych se o to asi ani nepokoušel.
24.11.2013 20:36:17
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?
3.8.2019 13:33:39