Forum » Informacijska varnost » sql injection [PHP + mysql]
sql injection [PHP + mysql]
Bojevnik ::
Za seminorsko nalogo moram demonstrirati sql injection napad, ki pa mi nikakor ne uspe.
Imamo preprost login obrazec. Ki lahko poslje podatke preko "post" ali preko "get". spremnljivka $post pove na kakšen način pošljam.
Toda nikakor mi pa ne uspe izvesti napada.
Uporabljam Apache 2.2, PHP 5.2.5 in mySQL 5.1
Tukaj je koda:
Ima kdo kakšno idejo zakaj napadi ne uspevajo?
Imamo preprost login obrazec. Ki lahko poslje podatke preko "post" ali preko "get". spremnljivka $post pove na kakšen način pošljam.
Toda nikakor mi pa ne uspe izvesti napada.
Uporabljam Apache 2.2, PHP 5.2.5 in mySQL 5.1
Tukaj je koda:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h1>test</h1> <?php $post=isset($_POST['id']); if($post) { $id = $_POST['id']; } if(!$post) { $id = $_GET['id']; } $con = mysql_connect("localhost","username","geslo"); if(!$con) { die("could not connect". mysql_error()); } mysql_select_db("demonstracija",$con) or die(mysql_error()); $result = mysql_query("SELECT password FROM user WHERE id ='$id'"); if (!$result) { die('Invalid query: ' . mysql_error()); } echo "result je :".$result; mysql_close($con); ?> </body> </html>
Ima kdo kakšno idejo zakaj napadi ne uspevajo?
- spremenilo: Bojevnik ()
techfreak :) ::
koda.php?id=' OR 1 = 1 bi moralo delovati ...
Zgodovina sprememb…
- spremenil: techfreak :) ()
Ziga Dolhar ::
Je možno, da ima kako magic_quotes sranje vklopljeno na strežniku?
(Ne vem, se že zelo dolgo nisem ukvarjal s programiranjem ...)
(Ne vem, se že zelo dolgo nisem ukvarjal s programiranjem ...)
https://dolhar.si/
denial ::
Hitri SQLi test:
koda.php?id='
-> here be syntax errors
koda.php?id=''
-> here be no syntax errors
Predvidevam da imaš zadeve poštimane (db 'demonstracija' exist, tabela 'user' exist itd.)
koda.php?id='
-> here be syntax errors
koda.php?id=''
-> here be no syntax errors
Predvidevam da imaš zadeve poštimane (db 'demonstracija' exist, tabela 'user' exist itd.)
SELECT finger FROM hand WHERE id=3;
Zgodovina sprememb…
- spremenil: denial ()
schtr4jh ::
$post=isset($_POST['id']); if($post) { $id = $_POST['id']; } if(!$post) { $id = $_GET['id']; }
to lahko zamenjaš z
$id = $_REQUEST['id'];
in izpostaviš še nevarnost pri uporabi $_REQUEST namesto $_POST ali $_GET
Bojevnik ::
nastavitve php-ja ne bo smele bit problem, imam nastavljeno safe_mode = off , magic_quotes_gpc = off
ene par querijev ki sem jih uporabil :
ene par querijev ki sem jih uporabil :
test.php?id=5' //(vrne napako kot bi jo moralo) test.php?id=5 union select 1-- //(bi moralo vrniti napako, toda jo ne) test.php?id=5 order by 12/* //(stevilo stolpcev v bazi je samo 3, tako da bi moralo vržt ven napako, toda mi jo ne). test.php?id=1234âEUR? //(ne vrne napaka, čeprav bi jo moralo) test.php?id=5';delete from user;# //(vrne napako in ne zbriše zapisov, kot bi moralo)
iggy ::
Verjetno bo lažje če si najdeš en tutorial o mysql injectionih, pa si malo prekopiraš primere.
Hey, you're fat!
overlord_tm ::
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.
To kar ti prikazujes je torej samo resource ki ga vrne baza. Vsaj vcasih je bilo tako, pa pomoje da je v PHP5 se vedno isto. Torej ce hoces videti kaj ti je query vrnil rabis se mysql_fetch_array ipd...
Drgac pa, ne dela ti zarad narekovajev ... ko vrines noter nekaj za id, ti ostane tist narekovaj, ki je prej zakljuceval id.
test.php?id=1' OR 'a'='a
Lion29 ::
sicer pa za debug
namesto
uporabi drugic:
Tak bos videl dejansko query
sicer si pa ze ugotovil, da so navednice ble krive
namesto
$result = mysql_query("SELECT password FROM user WHERE id ='$id'");
uporabi drugic:
$query = "SELECT password FROM user WHERE id='$id'"; echo $query; $result = mysql_query($query);
Tak bos videl dejansko query
sicer si pa ze ugotovil, da so navednice ble krive
Founder and CTO @ Article-Factory.ai
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | HTML in SQL pomoč (strani: 1 2 )Oddelek: Programiranje | 7560 (6438) | def0r |
» | Branje slik jpg iz MySQL z PHPOddelek: Izdelava spletišč | 2381 (1999) | a-ptuj1 |
» | [JS / PHP] miniajax postOddelek: Programiranje | 1025 (759) | cobrica |
» | MySQL Query VprašanjeOddelek: Izdelava spletišč | 3194 (2959) | overlord_tm |
» | [php-seje]Ali kdo pozna rešitev!Oddelek: Programiranje | 1374 (1200) | diovc |