|
Mostrar Mensajes
|
Páginas: [1] 2 3
|
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
|
|
|
3
|
Seguridad Informática / Análisis y Diseño de Malware / Re: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT
|
en: 5 Junio 2012, 01:14 am
|
Ok, después de unas cuantas (muchas) horas lo encontré: resulta que los de Microsoft todavía no han solucionado el famoso bug de CreateProcessW, y al intentar escribir sobre mi string directamente (es decir, sin buffer intermedio, el string estaría en una pagina de solo lectura) el programa petaba (por eso CreateProcessA sí que iba), y a veces petaba y a veces daba error porque al intentarlo en la de x86, no me dejaba inyectarme en sysprep.exe, saltarme el UAC, conseguir el SeDebugPrivilege y claro, el handle a winlogon.exe era inválido (por algo lo he puesto en la sección de malware) xD
En fin, gracias Karcrack por la ayuda. TEMA SOLUCIONADO
|
|
|
4
|
Seguridad Informática / Análisis y Diseño de Malware / Re: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT
|
en: 4 Junio 2012, 20:09 pm
|
Ya, el problema es que no se trata de un ejecutable sino de una DLL, y quiero poder usar ambas versiones (como la api de windows) de manera que exporto dos funciones tal que: extern "C" { /* ... */ BOOL SysCreateProcessByParentA(const PSTR pszExePath, HANDLE hParent); BOOL SysCreateProcessByParentW(const PWSTR pwzExePath, HANDLE hParent); /* ... */ }
#ifdef _UNICODE # define SysCreateProcessByParent SysCreateProcessByParentW #else # define SysCreateProcessByParent SysCreateProcessByParentA #endif
La version anterior era la UNICODE. La versión ANSI solo convierte los parametros a UNICODE y llama a la version UNICODE. De todas formas, gracias
|
|
|
5
|
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
|
|
|
7
|
Seguridad Informática / Hacking / Re: Libro Negro de el Hacker Toda informacion
|
en: 23 Abril 2012, 00:41 am
|
Wow, muxisimas gracias, por fin algo novedoso!!! xk claro, quien no tiene todavía ese windows 98 cuyos PWL se le resisten? y que me dicen del BO, BO2000 o BO2K,... lo que se dice el último grito. "Apodérate de ICQ", puede que por ser el único en entrar te den "las llaves del reino" directamente.
Mira, no se si lo que querías era compartir información que considerabas interesante (ahí yo no me meto, y me parece respetable), pero definitivamente "Hacking avanzado" tal vez no sea el mejor sitio, un poco de criterio.
PD: no te lo tomes a mal, no era mi intención ofender a nadie, pero ya es de por sí bastante difícil encontrar información de calidad, no lo pongamos más dificil, vale?
|
|
|
9
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Borrar ejecutable en ejecucion
|
en: 26 Marzo 2012, 11:51 am
|
La verdad es que es justo lo que estoy buscando. Y a quien pertenece el handle? Podría usar para ello NtQuerySystemInformation con SystemHandleInformation y duplicarlo con DuplicateHandle? Y luego como los cierro? (no digo en mi proceso, sino en el proceso que lo posee)
PD: Si el proceso dueño no está protegido, supongo que con un CreateRemoteThread en CloseHandle sobraría, no?
Gracias
|
|
|
10
|
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
|
|
|
|
|
|
|