Máme prostor pro zadání doby trvání časovače. Toho využijeme.
Podíváme se do zdrojového kódu.
V souboru timer.html vidíme tento řádek
<img src="https://medium.com/static/loading.gif" onload="startTimer('{{ timer }}');" />
Musíme využít ve výrazu {{ timer }}
Ten je ale umístěn uvnitř funkce startTimer('');
, která je obsluhou události k události onload
. Hlavně je třeba si uvědomit, že atribut obsluhy události v HTML přijímá více funkcí zpětného volání.
Takže musíme funkci uzavřít a provést v ní naše upozornění. Všimněte si, že, hodnota nebyla předána prostřednictvím funkce parseInt
místo toho jsou použita surová data. Můžeme tedy funkci uzavřít přidáním ');
a pak do ní vložit náš alert
. Protože je použita jako inline, nemůžeme tam injektovat alert();
, protože by se to rozbilo. Z příkazu se stane onload="startTimer('3'); alert();')"
a nebude to fungovat.
Takže musíme přidat vzor, který udrží vzor neporušený. Přidáme alert('
a to stačí.
Takže náš payload bude
3');alert('
Kliknutím na tlačítko start timer se spustí upozornění a tím jsme tuto úroveň dokončili.
Přejděte na další úlohu.
Úloha 5 : Prolomení protokolu
Na úvodní stránce nemáme možnost nic injektovat. Máme pouze odkaz. Takže na něj klikneme.
Tady vidíme 2 místa, kam můžeme injektovat náš payload. jedno na samotnou url adresu a druhé na vstupní pole. Vstupní pole je místem pro zadání e-mailu a doufáme, že se neprojeví někde jinde. Přejděme tedy k prvnímu z nich. Na url.
Prohlédněte si zdrojový kód aktuální stránky, tedy signup.html, a uvidíme řádek
<a href="{{ next }}">Next >></a>
Skvělé místo pro injektování payloadu. Naše užitečné zatížení bude nastaveno jako hodnota atributu href
v tagu a
. Pokud se nám podaří přidat javascript:alert()
, můžeme náš payload spustit. Nyní se podíváme, jaká je hodnota atributu next
. Ve stránce žádnou nenajdeme. Kde ji máme hledat?
Kód Pythonu na pomoc. Podívejte se do souboru level.py a uvidíme
if "signup" in self.request.path: self.render_template('signup.html', {'next': self.request.get('next')})
Takže se použije hodnota next
v url.
Změňte hodnotu next
v url z confirm
na javascript:alert()
a výsledná url bude vypadat takto
Now clicking on Next >> in the page will trigger our payload.
We now completed level 5. And 1 level remains.
Task 6 : Follow the 🐇
There is a path to a js file in the url.
Let’s inspect the source code. In page index.html, you can see a function includeGadget
a uvnitř těla funkce uvidíte následující kód.
var scriptEl = document.createElement('script');
Takže můžeme načíst externí js soubor, ale ne z url http
nebo https
.
Zkusíme tedy data
url.
Data url jsou ve tvaru data:{type},content
Změníme tedy hodnotu za #
na
data:application/javascript,alert()
nebo na
data:text/plain,alert()
a můžeme spustit alert
.
Tady je video s řešením hry.
.