martes, 28 de mayo de 2019

Wechall-transposition1

Seguimos con los retos, esta vez desde la pagina wechall, nos encontramos en la categoría de criptografia, con el siguiente reto llamado transposition; 


bueno vamos al reto; 

oWdnreuf.LY -> Wonderful, descubrimos que el cifrado esta desordenado en dos espacios, bueno para hacerlo mas cómodo, vi una pagina que nos ordenaba esta gran oración; 





y walaaaaaaaaaaa; 

domingo, 26 de mayo de 2019

Select Statement Sql Injection-Parte 5

Seguimos con la Parte 5 de Sql Injection; esta vez con la instruccion SELECT; 

Considere la siguiente consulta: 

Cuando el testeador intenta un valor valido ( por ejemplo 10 en este caso), la aplicacion devuelve la descripcion de un producto. Una buena manera de testear si la aplicacion es vulnerable en este escenario es jugar con la logica, usando los operadores AND y OR.

En este caso, es probable que la aplicacion devuelva algun mensaje diciendonos que no hay contenido disponible o una pagina en blanco.

Entonces el testeador puede enviar una declaracion verdadera y comprobar si hay un resultado valido:

CONSULTAS APILADAS: 

Dependiendo de la API que utilice la aplicacion web y del DBMS, por ejemplo, PHP + PostgreSQL, ASP+ SQL SERVER, puede ser posible ejecutar multiples consultas en una sola llamada.

Considere la siguiente consulta: 
Una manera de explotar lo  anterior seria: 
De esta manera es posible ejecutar muchas consultas en una fila e independientemente de la primera consulta.


PD: La Parte 6, se llamara , Fingerprinting the Database

jueves, 23 de mayo de 2019

CRLF-Rootme

Seguimos con los retos de la pagina rootme, de la categoria web server, este reto es llamado CRLF Injection;

"El termino CRLF se refiere al retorno de carro (ascii 13, \r) salto de linea (ascii 10,\n).

Sin embargo, se usan para notar la terminacion de una linea, que se trata de una manera diferente en los  sistemas operativos populares de hoy en dia. 

Por ejemplo: En windows se requiere tanto un CR como un LF para anotar el final de una linea, mientras que en Linux/Unix solo se requiere un LF.

En el protocolo HTTP, la secuencia CR-LF siempre se utiliza para terminar una linea.

Un ataque de inyeccion CRLF ocurre cuando un usuario logra enviar un CRLF a una aplicacion.

Esto se hace mas comunmente modificando un parametro HTTP o URL.

esta vulnerabilidad ocurre cuando un atacante es capaz de inyectar datos en una peticion a un servidor.

Esto puede ser un problema menor o un fallo de seguridad bastante grave."

La imagen que nos dan es la siguiente;



La pista que nos dan es inyectar un dato falso en el log y vemos abajo que esta autenticado el admin; osea que vamos a usar admin como username para poder inyectar un dato falso y asi autenticar con otro username, usaremos burp suite para testear;




Tras varias pruebas con burp suite di con el clavo;




y walaaaa;

miércoles, 22 de mayo de 2019

Standard SQL Injection Testing-Parte 4

Ejemplo 1 ( SQL Injection clásico)

Considere la siguiente consulta de SQL:


Generalmente se utiliza una consulta similar desde la aplicación web para autenticar a un usuario. si la consulta devuelve un valor, significa que dentro de la base de datos existe un usuario con ese conjunto de credenciales, entonces se le permite al usuario iniciar sesión en el sistema, de lo contrario se le niega el acceso.

Supongamos que insertamos los siguientes valores de nombre de usuario y contraseña;


La consulta en sql seria la siguiente; 


Si suponemos que los valores de los parámetros son enviados al servidor a través del método GET, y si el dominio del sitio web vulnerable es www.example.com, la petición que llevaremos a cabo sera;


Observamos que la consulta devuelve un valor ( o un conjunto de valores) por que la condición es siempre verdadera ( OR 1=1).

De esta manera el sistema ha autenticado al usuario sin conocer el nombre de usuario y contraseña; En algunos sistemas la primera fila de una tabla de usuario seria un usuario administrador.

Este puede ser el perfil devuelto en algunos casos. Otro ejemplo de consulta es el siguiente;

Hay dos problemas, uno debido al uso de los paréntesis y otro debido al uso de la función hash MD5, primero resolveremos el problema de los paréntesis, eso simplemente consiste en añadir un numero de paréntesis de cierre hasta que obtengamos una consulta corregida. Para resolver el segundo problema tratamos de eludir la segunda condición.

Añadimos a nuestra consulta un símbolo final que significa que esta comenzando un comentario, de esta manera, todo lo que sigue a tal símbolo se considera un comentario.

Cada DBMS tiene su propia sintaxis para comentarios , sin embargo, un símbolo común de las bases de datos es /*. En oracle el símbolo es el --, dicho esto, los valores que usaremos como nombre de usuario y contraseña son;


La consulta SQL quedaría de la siguiente manera;


La solicitud de URL sera: 


esto puede devolver una serie de valores, a veces, el código de autenticacion verifica que el numero de registros/resultados devueltos es exactamente igual a 1.

En los ejemplos anteriores, esta situación seria difícil ( en la base de datos solo hay un valor por usuario). Para evitar este problema, basta con insertar un comando SQL que imponga la condición de que el numero de resultados devueltos sea uno.

Para alcanzar este objetivo, utilizamos el operador "LIMIT <num>", donde <num> es el numero de resultados / registros que queremos que se devuelvan. Con respecto al ejemplo anterior, el valor de los campos quedaría así; 

La solicitud en URL sera; 


PD: Parte 5, Select Statement, continuara..