elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: 1 [2]
11  Seguridad Informática / Bugs y Exploits / ¿me echais una mano? es un programa en assembler muy fácil. en: 9 Febrero 2011, 01:06 am
a ver si alguien me puede echar una mano con este programa en assembler (pensado para generar una shellcode).
Más simple no puede ser, quiero llamar a winexec para que ejecute la calculadora: (no hace nada). Cuando lo depuro con olly, por pasos, al llegar a la llamada a la dirección de winexec me dá un error de modo que esa dirección no puede ser leída.
La dirección de winexec la obtengo con el típico programa que utiliza la función getprocadress, y en principio debería ser correcta.

.386
.model flat, stdcall
option casemap:none

.data
.code
start:
sub esp, 9h
mov byte ptr [ebp-11h],63h 
mov byte ptr [ebp-10h],61h   
mov byte ptr [ebp-0fh],6Ch
mov byte ptr [ebp-0eh],63h
mov byte ptr [ebp-0dh],2Eh
mov byte ptr [ebp-0ch],65h
mov byte ptr [ebp-0bh],78h
mov byte ptr [ebp-0ah],65h
mov byte ptr [ebp-09h],00h
push 5
lea eax, [ebp-11h]   ;cargamos la direccion que apunta a nuestra cadena
push eax     
mov eax,71c326d3h   ;winexec
call eax
push 1     
mov eax,772e2aefh   ;exit process
call eax
end start


no hace nada, lo intento depurar con ollydbg pero no entiendo muy bien si hace lo correcto o no.

lo primero que hago es reservar espacio en la pila para 9 bytes. Luego inserto la cadena pero me salto unos bytes que había antes en la pila, por eso empieza en ebp-11h.

una vez insertada la cadena en la pila, "calc.exe/0", meto el parametro 5 (que equivale a SW_SHOW, y que es otro parámetro de winexec).

y finalmente llamo a winexec.
12  Seguridad Informática / Bugs y Exploits / duda acerca de cómo obtener la dirección de una función en una dll. en: 7 Febrero 2011, 13:18 pm
hola estoy peleandome con una shellcode basica, sólo con fines didácticos, (en windows7) y he observado que a la hora de obtener la dirección (hardcodeada) de una función de una dll hay dos formas de hacerlo (pero me dá que en realidad son cosas distintas):

- Una (que es la que utilizo yo y he comprobado que funciona) es obtentiendo la dirección de la función, con un programa que llame a getprocadress y me devuelva la dirección. Esta dirección es la que utilizo en la shellcode (y funciona, sólo que hay que volver a calcularla cada vez que se reinicia el sistema).

- La otra no la he probado sólo la he visto, y consiste en utilizar un programa que me muestre las dependencias de un ejecutable, como por ejemplo dumpbin o dependencyWalker. Con estos lo que se obtiene es la dirección base de la dll y luego la dirección de la función en dicha dll y se suman ambas para obtener la dirección absoluta de la función, y así utillizarla en la shellcode. He observado que con este método siempre dá los mismos valores, aunque se reinicie el sistema. Además me dá los mismos valores aún analizando dos programas diferentes.

entonces llegados a este punto me surge la duda de qué es lo que estoy obteniendo realmente en ambos casos ya que parece que estoy obteniendo la dirección de una función en ambos, pero obtengo resultados distintos en uno y en otro.

un saludo. ;D
13  Programación / Programación C/C++ / duda con getprocadress y kernel32. en: 4 Febrero 2011, 00:07 am
hola, estoy intentando conseguir una shellcode basica para windows, y me encuentro con el siguiente problema, que no sé por qué sucede:

Tengo una shellcode que hace algo simple: llama a sleep y sale del proceso.
La cargo mediante una aplicación en c también simple que no hace otra cosa que cargarse y llamar ejecutar la shellcode.

Para obtener las direcciones de las funciones Sleep y ExitProcess lo he hecho mediante un programa en c que llama a getprocadress de esta forma:
GetProcAddress(LoadLibrary("kernel32.dll"),"ExitProcess")

y me devuelve la dirección de ExitProcess y lo mismo con sleep. Lo pongo en la shellcode y todo parece funcionar, pero el problema es que al reiniciar el ordenador GetProcAdress para la misma función me dá un valor distinto. De manera que tengo que obtener dicha dirección cada vez que apago o reinicio la máquina.

Por lo que vengo leyendo no parece muy normal. He visto que el programa sólo funcionaría en mi máquina pero no había visto en ningún sitio que tuviese que actualicar la dirección de las funciones cada vez que reinicio el sistema.

¿es eso normal? El sistema operativo que utilizo es windos7.

un saludo.
14  Seguridad Informática / Bugs y Exploits / shellcode básica para windows. en: 29 Enero 2011, 15:43 pm
hola, no se si es aquí donde debería ir el post,
lo que quiero es hacer una shellcode muy muy básica:
tengo el programa asm que lo que hace es ejecutarse,dormir,y descargarse (poca cosa):

.386
.model flat, stdcall
option casemap:none

.data
.code
start:
push 9999          
mov eax,77b6ef66h   ;sleep
call eax    
mov eax,77b72aefh   ;exit process
call eax
end start


para ello utilizo direcciones absolutas o harcodeades (me parece que ese es el término) de manera que cada vez que arranco el sitema cambian, pero eso no es problema.

el problema es que quiero, primero pasarla a opcodes y luego ejecutarla con cualquier apllicación lo más sencilla posible.

Para pasarla a opcodes no sé como hacerlo por eso me gustaría saber si hay algún programa que lo pueda hacer por mí. El programa está ensamblado con masm.

Y para ejecutarla no sé muy bien sin esto sería correcto:
He leído algo de que hay que hacer buffer overflow para ejecutarla, pero por otro lado también he visto que se ejecutaba de forma "manual" con este programita:

#include <stdio.h>
#include <string.h>

 
char shellcode[] = "aquí deberían ir los opcodes";
  
void main()
{
   int *ret;
   ret=(int *)&ret+2;
   (*ret) = (int)shellcode;
}



Un saludo.
15  Seguridad Informática / Análisis y Diseño de Malware / una duda, intentando comunicar mu con mk. en: 8 Diciembre 2010, 12:59 pm
hola, estaba siguiendo el pdf de hendrix para comunicar el modo usuario con el modo kernell y tengo algunas dudas basicas. Yo lo estoy haciendo en windows 7 y utilizo para compilar el x86 free build environment, del windows 7, del ddk. El código del driver es este (faltan las rutinas de unload, y de control que no las pongo porque no importan en esta duda):

Código
  1. #include <ntddk.h>
  2.  
  3. const WCHAR Device[]=L"\\Device\\bananas";   //modo kernell
  4. const WCHAR sLink[]=L"\\DosDevices";   //modo usuario
  5. UNICODE_STRING Dev,lnk;
  6.  
  7. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
  8. {   NTSTATUS s;
  9. unsigned int i;
  10.    //DriverObject->DriverUnload=Salir;
  11.    for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
  12.    {
  13.       // DriverObject->MajorFunction[i]=Control;
  14.    }
  15.    RtlInitUnicodeString(&Dev,Device);
  16.    RtlInitUnicodeString(&lnk,sLink);
  17.    s=IoCreateDevice(DriverObject,0,&Dev,FILE_DEVICE_UNKNOWN,0,0,&DriverObject->DeviceObject);
  18.    if (NT_SUCCESS(s))
  19.    {
  20.        s=IoCreateSymbolicLink(&lnk,&Dev);
  21.        if(!NT_SUCCESS(s))
  22.        {
  23.            IoDeleteDevice(DriverObject->DeviceObject);
  24.            DbgPrint("Linking Error");
  25.        }
  26.        else
  27.        {
  28.            DbgPrint("Cargado");
  29.        }
  30.    }
  31.    else
  32.    {
  33.        DbgPrint("Error IoCreate");
  34.    }
  35.    return STATUS_SUCCESS;
  36. }

Con este codigo me da "Linking Error", con lo cual el DeviceObject debería estar creado y llamarse "bananas", pero he buscado con el WinObject dentro del directorio "Device" y no he visto el objeto creado.

¿No debería de haberse creado el objeto "bananas" dentro del directorio "Device"?

Además tampoco he visto por ningún sitio el directorio DosDevices.

Un saludo.
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines