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 - nts94

#1
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
Tengo entendido que lo que se desactivó fue el autorun.inf en usb, pero no en cd's (aunque no lo he comprobado por mi mismo).
De cualquier manera, el autorun es un metodo que todavia está de actualidad (quiza ahora menos pero...), tanto es así que el mismísimo StuxNet en sus inicios lo utilizaba para propagarse (de una manera muy ingeniosa, mirad el análisis del 2o url)

De todas formas, por lo que cuentas, lo más probable es que se trate del Conficker (la mejor forma de practicar ingenieria inversa de malware es poner un pendrive en cualquier ordenador del ciber de la esquina, ya vereis que contento se pone el AV)  :D

http://web17.webbpro.de/index.php?page=analysis-of-conficker
http://www.symantec.com/connect/blogs/stuxnet-lnk-file-vulnerability
http://tuts4you.com/download.php?view.3011
#3
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
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  :D
#5
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
#6
No sé si a estas alturas ya lo habrás solucionado, pero aquí tienes la... mmm, pues eso, la solución

http://files.ngohq.com/ngo/dseo/dseo13b.exe

Espero que te sirva para acabar el tute, es muy bueno
#7
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?
#8
Hacking / PHRACK #68 is out there!
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)
#9
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
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