Autor Zpráva
Peet
Profil
Dobrý den, chci se zeptat. znám program jako je havij, apod..

ale i útok přes adresu pomocí sql injection..

například přes proměné GET v odkazu. (napriklad pres id)..

ve svém skriptu je kontroluji jako $id=mysql_real_escape_string(strip_tags($_GET['id']));

ale i přesto se tam dá dostat do té databáze a jelikož je šifrování md5 prolomeno je jednoduché získat které koliv heslo, cokoliv. chci se zeptat jak se dá ještě escapovat a předejít těmto útokům popříadě šifrovat jinak.? Předem díky za odpovědi
Majkl578
Profil
Peet:
ve svém skriptu je kontroluji jako $id=mysql_real_escape_string(strip_tags($_GET['id']));
To je plně postačující obrana vůči SQL injection. Používat strip_tags je podle mého názoru nesmysl, pokud jde o číslo, vhodnější by bylo přímo přetypování na integer před použitím v SQL dotazu.

jelikož je šifrování md5 prolomeno
MD5 není šifrování, je to hashovací algoritmus. Nebyl prolomen, jen na něj lze (stejně jako např. na SHA-512) aplikovat narozeninový útok.

je jednoduché získat které koliv heslo
Opravdu? Můžeš uvést příklad?

jak se dá ještě escapovat
Nijak smysluplně. Použití mysql_real_escape_string je dostačující.
Peet
Profil
jo děkuji.. no kamarád se prostě dostane přes určitý program do mé databáze a tam vidí všechna data tudíž jsouli tam údaje o uživatelích vezme jednoduše hash heslo a dá si ho do online decript a ví heslo..

jojo strip_tags je zbytečné ale udělám funkci kterou využiji poté u všech get promenych a myslím že na tom nic nezkazím.. přetypovat.? jak to myslíte a proč.? popřípadě příklad zápisu..

jojo někdo mi doporučoval SHA-512 je lepší.?


už jsem pochopil proč přetypovat.. můřu poprosit o způsob zápisu.? ještě jsem v php nepřetypovával.. pouze v c++ předem díky :) a zdá se mi to jako dobrá volba :)
panther
Profil
Peet:
no kamarád se prostě dostane přes určitý program do mé databáze
... tak zná heslo k ní

a dá si ho do online decript a ví heslo
můžeš nějaký takový „online decript“ odkázat?

přetypovat.? jak to myslíte a proč.?
mylsí to tak, jak to píše. Pokud nevíš, co ten pojem znamená, mazej hledat.
whoami
Profil
V případě že se bojíš o hesla je možné použít sůl uloženou někde jinde než jsou hesla.. bez možnosti se z úložiště hesel nabourat do úložiště solí. Plus používat něco jako hash('sha512', md5($password).md5($salt).hash('sha256', $salt.$password)); A pokud chceš fw na escapování tak PDO je obstojný.

panther:
https://www.google.cz/search?q=md5+decrypter
http://demd5.com/
panther
Profil
whoami:
https://www.google.cz/search?q=md5+decrypter
to není odpověď.

Peet, whoami:
Mám tento md5 hash - 77bfc6a36ba90d4822d77257c69c0115. Najděte mi alespoň jeden kolizní řetězec k němu. O tom, že původní heslo dohledat nemůžete, nemluvím. Pořád tvrdím, že budete neúspěšní.
Peet
Profil
před uzložením hesla např z formuláře udělám:

$heslo=md5($_POST['heslo']); //třeba

a ano vím co je přetypování.

ten skript na hash co tu uvádíte o tom nemám ani tucha co znamená :D

a ta nejhlavnější věc je že to heslo do db neví.. prostě mu vyjedou všechny tabulky, záznamy prostě všechno.. nevím jak je to možné ikdyž nyní když budu escapovat to snad možné nebude..


zde je decrypt na něco funguje a na něco ne..

http://www.md5decrypt.org/

na ten váš hash zrovna ne ale už hodněkrát dokázal decryptovat.
LukasK
Profil
Pokud jde o celé číslo, pak je třeba vždy přetypovat (int)$cislo a pokud vkládáme číslo do sql dotazu, tak mysql_real_escape_string. Jinak na řetězce strip_tags není nejvhodnější, lepší je určitě htmlspecialchars.
panther
Profil
LukasK:
lepší je určitě htmlspecialchars.
opravdu?

Ono to nejde jednoznačně určit, záleží, co se bude s obsahem dál dělat. Co když budu chtít uložené HTML zpracovat? O strip_tags pro tento účel samozřejmě nemluvím.
LukasK
Profil
Ošetřovat by se mělo ideálně na výstupu, tedy až v moment, kdy chci s daty pracovat. Do db tak můžu html tagy klidně uložit.
whoami
Profil
panther:
Pokud se dnes dostanu domů před půlnocí tak ten md5 hash prohrčím na GPU.. zde na NTB bych strávil několik let.. BTW.. odkaz na google není odpověď.. ok ale hned pod ním je direct link..;-) A doufám že to není hash souboru.. u hesla počítáme tak okolo 10-ti znaků.
Majkl578
Profil
whoami:
Plus používat něco jako hash('sha512', md5($password).md5($salt).hash('sha256', $salt.$password));
V čem to bude lepší než když použiji vhodně dlouhou salt část?

Řekněme, že použijeme statickou sůl přímo ve scriptu:
hash('sha512', $password . str_repeat('5tx&7St.EHDhRA~XU^LTp_7FB', 20));
Pro heslo djpw bude hash: 84154a19881612b2302733de95371084333748850500b7769485465fe6c6071c8fe0340b6bbef9c59e09a3e7e0a1d62755b49b9c0a2714287a6b2dcc088e67a7

Dokázal bys z uvedeného hashe zjistit původní heslo, pokud bys neznal sůl?

LukasK:
Do db tak můžu html tagy klidně uložit.
K tomu ovšem htmlspecialchars určitě nepoužiji.
whoami
Profil
Majkl578:
Pokud bych neznal sůl tak bych to za pár století dokázal.. ale pokud bych ji znal.. tak o hodně dřív.. tím že provedu něco složitého jako algo. pro hash hesla.. sice bude přihlášení trvat déle (neznatelně) ale louskání brutalforce bude trvat několikanásobně déle..

Protože když se dostanu do db.. a využiju funkcí pro čtení souborů které jako root (skrz exploit) používat můžu tak je jednoduché stáhnout si i funci která heslo zakóduje.

Když mám i funkci.. i salt.. protože vše je v jednom souboru tak bez problému heslo zjistím.. pomocí brutalforce na GPU.. a to za pár minut..

Pokud je funkce složitá tak to bude logicky trvat mnohokrát déle.. a somozdřejmě když bude salt pro každého uživatele jiná tak bude muset spustit brutalforce pro každého zvlášť..
Peet
Profil
prostě nevím.. už jsem id i přetypoval na int a všechny GETY osteruju mysql_real_escape_string ale nevím..

stáhnul jsem si tento program Havij 1.6

a kdyz tam poté zadám jako url tuto:
http://aumo.cz/moto/?page=inzerat&id=170

a poté si jen dám get Tables, get Columns apod..

a nevím proč to jde.. píše že se tam dostane přes hodnotu id ale jak kdž ji přetypuji na int..
Davex
Profil
Peet:
už jsem id i přetypoval na int
To je možné, ale do SQL dotazu vstupuje nepřetypovaná hodnota. Možná parametr přetypuješ, ale přetypovanou proměnnou nepoužiješ v dotazu. Třeba tam je víc dotazů a v každém používáš jinou proměnnou.
Peet
Profil
ikdyž jsem přímo do dotazu dal (int)$id

tak je tam pořád díra..


ten program píše:

Analyzing http://aumo.cz/moto/?page=inzerat&id=170 with 2 input parameter(s)
Test parameter: id
Host IP: 46.28.105.72
Web Server: Apache
Keyword Found: Stingray
Injection type is String (')
Keyword corrected: Výfuk
DB Server: MySQL >=5
Davex
Profil
Dle mého názoru se neprovádí pouze jeden dotaz do databáze nebo upravuješ jiný skript.
Peet
Profil
no to sice neprovádí jen jeden dotaz.. ale na tom přeci nezáleží ne.?

když na začátku souboru prostě přetypuju id tak to platí pro každý dotaz kde použiji id ne.?


Už jsem to našel.. stačí za ten odkaz vložit ' a on Vám napíše kde je díra byla uplně v jinym souboru než kde jsem ji ošetřoval.. díky moc všem za rady :)

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: