Ř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.

Jakub Vrána, Řešení problému, 14.10.2013, on-line

Diskuse

ikona Ondra:

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

ikona Jakub Vrána:

Díky za upozornění, už jsem to opravil.
14.10.2013 18:52:01

Milsa:

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

Marek Vavrečan:

k 15.
https://communities.coverity.com/blogs/security/…-escapers-3
15.10.2013 20:37:23

ikona 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)<!--/*
16.10.2013 00:31:06

ikona 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.
16.10.2013 04:55:41

ikona 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>"
?>
10.11.2013 17:03:46

ikona Jakub Vrana:

Přibyl příklad 16, byť ještě není dokončený.
16.10.2013 10:31:41

ikona v6ak:

Já dodám svoje řešení pro 8: https://gist.github.com/v6ak/a982241c220c244b3311
A pro 9 (v principu totéž, jen trochu obskurnější): https://gist.github.com/v6ak/cd3b1e0679f1e3d259e8
16.10.2013 14:27:38

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

ikona Jakub Vrána:

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

ikona Jakub Vrána:

Ještě to nehacknul ani autor, tak bych se o to asi ani nepokoušel.
24.11.2013 20:36:17

děložní prádlo:

btw. další zdroje:
- https://vwzq.net/papers/Alert%281%29ToWin.pdf (1 až 15)
- http://www.pwntester.com/blog/2014/01/08/…-ups-part-257/ (9 až 16)
3.8.2019 13:32:12

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
avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.