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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1]
1  Seguridad Informática / Bugs y Exploits / Reverse DNS lookup for buffer overflow attack en: 14 Septiembre 2012, 13:41 pm
Hola, estoy "auditando" (como diría Anelkaos) la seguridad de un web server, el cual corre una versión vulnerable (o eso creo yo) de Webalizer (v2.01). Después de buscar vulnerabilidades y bajarme el código fuente (sólo por si acaso), vi que se hablaba de un "stack based buffer overflow" al realizar una búsqueda DNS inversa.

Aunque al final resulte que la versión de Webalizer no sea vulnerable, me gustaría saber como sería posible explotar este tipo de vulnerabilidades (dejando a un lado NX, ASLR, stack canaries y otras lindeces).

Nota: lo primero que se me ocurrio es hacer que el tráfico de esa maquina pase por mí vía ARP poisoning, rogue AP, o algo así,... pero esto hacia un servidor no creo que sea aplicable.

Saludos
2  Seguridad Informática / Análisis y Diseño de Malware / ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT en: 4 Junio 2012, 19:21 pm
Bueeeno, he intentado ser lo más explícito posible con el tema de este post. Primero una introducción (para los que no lo sepan ya):

<INTRO>
A partir de Windows Vista se puede "elegir" el proceso padre para un nuevo proceso (siempre que se tenga permisos para abrir el proceso).
</INTRO>

Corta,ehh? xD El caso es que lo he estado probando en Windows 7 x64 y me funciona con la versión ANSI (CreateProcessA) pero no con CreateProcessW. El código que uso es éste:

Código:
       /* ... */
if(SysGetVersion() < OSV_WIN_VISTA)
{
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}

if(!pwzExePath || lstrlenW(pwzExePath) > MAX_PATH)
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}

STARTUPINFOEXW st = { sizeof(STARTUPINFOEXW) };
GetStartupInfoW(&st.StartupInfo);

PROCESS_INFORMATION pci;

SIZE_T cbList = 0;
InitializeProcThreadAttributeList(NULL, 1, 0, &cbList);
st.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(SYS_HEAP, 0, cbList);
DBG_ASSERT(st.lpAttributeList);
InitializeProcThreadAttributeList(st.lpAttributeList, 1, 0, &cbList);
UpdateProcThreadAttribute(st.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, &hParent, sizeof(HANDLE),
NULL, NULL);

DBG_MSGBOX_TRACE_W(pwzExePath);

BOOL bRet = CreateProcessW(NULL, L"C:\\Windows\\system32\\cmd.exe" /*pwzExePath*/, NULL, NULL, FALSE, EXTENDED_STARTUPINFO_PRESENT,
                                         NULL, NULL, &st.StartupInfo, &pci);

DeleteProcThreadAttributeList(st.lpAttributeList);
HeapFree(SYS_HEAP, 0, st.lpAttributeList);

if(bRet)
{
DBG_MSGBOX_TRACE("No error");
CloseHandle(pci.hProcess);
CloseHandle(pci.hThread);
}
else
DBG_MSGBOX_TRACE("Error");

return bRet;

Nota: supongo que debe de ser algo relacionado con la especificacion del tamaño de las estructuras, pero como todavía no hay un ollydbg para x64 y no me aclaro con el windbg (y se cuelga mucho, no se si solo me pasa a mi), no he podido debuggearlo
3  Seguridad Informática / Hacking / PHRACK #68 is out there! en: 13 Abril 2012, 23:03 pm
Hola, bueno pues nada, lo dicho, que Phrack #68 está ya disponible desde Abril 2012 y aprovecho para recomendarla a todos los que no la conozcan:

Link: http://www.phrack.com/
Descarga: http://www.phrack.com/archives/tgz/phrack68.tar.gz

Nota: Acabo de darme cuenta de que el archivo está "simpáticamente corrupto", quien lo abra en un editor de texto se llevará una sorpresa xD (siempre tan cachondos estos de phrack)

Todavía habrá que esperar (pero es bueno ver que dan señales de vida, ya solo falta que vuelva SET)
4  Seguridad Informática / Análisis y Diseño de Malware / Borrar ejecutable en ejecucion en: 20 Marzo 2012, 01:10 am
Hola, soy nts94 y me gustaría saber si en windows es posible modificar un binario mientras se está ejecutando (con lo facil que es en linux!).

Vereis: estoy trabajando en un virus (como siempre, solo una POC, no lo vereis pululando por ahí) el cual quiero que al llegar el momento de activar su payload (algo original, que abrir la disquetera ya esta muy visto  :D) se desinfecte a sí mismo SOLO DEL BINARIO ACTUAL (es decir, el virus lleva un contador del numero de infecciones, y llegado a un punto solo uno de ellos se activara, y ese es el unico que quiero que se desactive de todo el sistema).

La idea es que cuando al usuario le salte una pantallita en plan "TONTO, TE HAS INFECTADO", pues como que le va a dar click a "Mandar a analizar" y nos va a joder el invento. Por todo lo que he dicho, no me vale usar CopyFileEx con MOVEFILE_DELAY_UNTIL_REBOOT.

PD: se me había ocurrido que tal vez podia inyectar parte del codigo (el que desinfecta) en otro proceso, y desde ahí desinfectarme, pero en Windows Vista/7 la inyeccion de codigo esta más complicada (por lo de los "Procesos Protegidos", sesiones, etc)

Bueno, gracias por adelantado
5  Seguridad Informática / Análisis y Diseño de Malware / El programa rompe al llegar a LoadLibrary en: 14 Marzo 2012, 01:05 am
Hola a todos, estoy haciendo un pequeño virus (sin ánimo de soltarlo, claro, solo como POC) y tras mucho debuggear con el Olly resulta que me lanza una ACCESS_VIOLATION tras llamar a LoadLibraryA en una función que realiza el mismo trabajo que GetProcAddress pero pasándole en su lugar un CRC32, alguien puede ayudarme? Las pruebas las he hecho en un Win 7 x64. Aquí adjunto el código de la función:

Código:
@@get_proc:
; [OnEntry]
; edx => crc32
; ebx => hModule
; [OnExit]
; eax => lpfnApi / NULL (OnError)
assume ebx:ptr IMAGE_DOS_HEADER
push edi
push esi
 push ebp
  mov edi,ebx
  add edi,[ebx].e_lfanew
  assume edi:ptr IMAGE_NT_HEADERS
  mov edi,[edi].OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
  add edi,ebx
   assume edi:ptr IMAGE_EXPORT_DIRECTORY
   xor ecx,ecx
   mov esi,[edi].AddressOfNames
   add esi,ebx
   mov ebp,[edi].NumberOfNames
    @@apiname_loop:
     lodsd
     add eax,ebx
     xchg eax,esi
     push eax ; save AddressOfNames
      push ecx
       call @@strlen
       xchg eax,ecx
       push edx
        call @@crc32
       pop edx
      pop ecx
     pop esi
     cmp eax,edx
     jnz @@not_api_hash
      mov esi,[edi].AddressOfNameOrdinals
      add esi,ebx
      shl ecx,1h
      add esi,ecx
      movzx ecx,word ptr [esi]
      shl ecx,2h
      mov esi,[edi].AddressOfFunctions
      add esi,ebx
      add esi,ecx
      mov eax,dword ptr [esi]
      ; code here to check whether we are being forwarded (does the RVA fall into the .edata?)
      mov ebp,ebx
      add ebp,[ebx].e_lfanew
      assume ebp:ptr IMAGE_NT_HEADERS
      mov ecx,[ebp].OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress ; thanks to Matt Pietrek
      cmp eax,ecx
       jb @@not_forwarded
      add ecx,[ebp].OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].isize
      cmp eax,ecx
       ja @@not_forwarded
      @@get_forwarded:
        pop ebp
         add eax,ebx
         xchg esi,eax
         call @@strlen
         push ecx
         push GMEM_FIXED
         call dword ptr [ebp + delta(f_globalalloc)]
         xchg eax,edi
         push edi ; there could be a bug: if someone makes a fwd api without a dot, the host will crash
         @@:
           lodsb
           stosb
           cmp al,'.'
           jne @@not_dot
            mov eax,'lld'
            stosd
      jmp @@match_dot  
         @@not_dot:
         loop @B
         @@match_dot:
         call dword ptr [ebp + delta(f_loadlibrary)] ; I know the program won't be able to free the library (i don't know yet how ms loader does it)
         push esi
         push eax
         call dword ptr [ebp + delta(f_getprocaddress)]
         push eax
          push edi
          call dword ptr [ebp + delta(f_globalfree)]
         pop eax
         jmp @@fwd_api_found
      @@not_forwarded:
      add eax,ebx
      jmp @@api_found
     @@not_api_hash:
     inc ecx
     cmp ecx,ebp ; I need ecx as a counter
     jbe @@apiname_loop
 @@not_found:
   xor eax,eax
 @@api_found:
   pop ebp
 @@fwd_api_found:
pop esi
   pop edi
   ret

Código:

@@strlen:
; [OnEntry]
; esi => [StringA]
; [OnExit]
; eax => Length
xchg esi,edi
xor eax,eax
xor ecx,ecx
dec ecx
push edi
repnz scasb
pop edi
inc ecx
not ecx
xchg eax,ecx
xchg esi,edi
ret


.const
POLYNOM equ 0edb88320h
.code
@@crc32:
; [OnEntry]
; esi => [Mem]
; ecx => count
; [OnExit]
; eax => crc32
xor edx,edx
dec edx
@@crc_loop:
mov eax,edx
and eax,0ffh
xor al,byte ptr [esi]
push ecx
 mov ecx,8h
 @@:
 test al,1h
 jz @@bit_not_set
  shr eax,1h
  xor eax,POLYNOM
  jmp @@bit_continue
 @@bit_not_set:
  shr eax,1h
 @@bit_continue:
 loop @B
pop ecx
inc esi
shr edx,8h
xor edx,eax
loop @@crc_loop
xchg eax,edx
not eax
ret

Tras tracear un poco veo que las llamadas van así:

- LoadLibraryA -> LoadLibraryExA -> KernelBase.749B6DEF -> ntdll.RtlAnsiStringToUnicodeString -> ...



Les agradezco cualquier ayuda/opinión/orientación sobre el tema

PD: Acabo de comprobar que en XP funciona perfectamente, puede ser por algo relacionado con WOW32? O tal vez es por Win7?

Ah, y perdon por un tema/post tan largo, es que no quiero que falte nada de info
6  Seguridad Informática / Hacking / Win32 API Hooking en: 9 Febrero 2012, 23:54 pm
Hola a todos. Bueno, hace mucho que no me pasaba por el foro y puesto que la última  vez que lo hice solo provoque una extraña guerra relacionada con las BotNet's (BOTNETS sí, BOTNETS no) ;D he decidido compensar eso.

Bueno, aqui os traigo una implementacion MUY sencilla del tema del API hooking en Win32 (por lo que he leído, es parecida a la librería Detours de MS), pero esta bajo licencia GPL XD

Utiliza la técnica de la inyeccion DLL (en realidad la DLL debe inyectarse en el proceso que convenga) e inserta un FAR JMP al inicio de la API, por lo que afecta tambien a todo aquel proceso que se intente pasar de listo y llame a la API mediante GetProcAddress (al contrario que con la técnica del IAT).

Por el momento es facilmente detectable, pero tengo pensado:
--> Mejorar la forma en que se inyecta la DLL con GetThreadContext() y SetThreadContext() (en lugar de CreateRemoteThread())
--> Ocultar la DLL desde DllMain() modificando la PEB
--> Lo que se os ocurra XD

Código fuente: http://dl.dropbox.com/u/47594913/HookThemAll.rar

Como crear un rootkit by e0n: http://foro.elhacker.net/analisis_y_diseno_de_malware/querias_tutos_de_programacion_de_malware_pues_toma-t196251.0.html
Hooking HowTo: http://vx.netlux.org/29a/29a-7/Articles/29A-7.019

Nota: no sabía si ponerlo aqui, en el subforo de programacion en C, el de malware,...

Nota2: Acabo de leer la técnica VEH... brillante, aunque como todo, igualmente detectable (mediante VirtualQueryEx), menos conocida pero genial
7  Seguridad Informática / Hacking / Creación de pc's zombies: botnets en: 5 Julio 2010, 02:16 am
Hace poco me encontré con una noticia relacionada con tres hackers españoles que habían creado la mayor red de pc's zombies de la historia. ¿Alguien me puede ayudar con este tema? Los que esteis interesados en la dominación del mundo (igual se ma ido la pinza) ayuda  ;D
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines