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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Temas
Páginas: [1] 2
1  Programación / ASM / Shellcode no imprime caracter(64 bits) en: 10 Noviembre 2012, 04:37 am
Hola, estaba haciendo una shellcode de prueba. Simplemente debe de imprimir el carácter 'w'.
He usado el gdb para comprobar todas la instrucciones y el programa acaba correctamente pero no se por que no imprime el carácter.

Código
  1. #include <stdio.h>
  2. #include <sys/mman.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. int (*sc)();
  7. /****************************************************************
  8. 0000000000000000 <main>:                                         /
  9.   0: 48 31 c9             xor    %rcx,%rcx                  /
  10.   3: 48 31 c0             xor    %rax,%rax                  /
  11.   6: eb 11                 jmp    19 <n>                     /
  12.                                                                  /
  13. 0000000000000008 <et>:                                            /
  14.   8: 59                   pop    %rcx                       /
  15.   9: b0 04                 mov    $0x4,%al                   /
  16.   b: b3 01                 mov    $0x1,%bl                   /
  17.   d: b2 01                 mov    $0x1,%dl                   /
  18.   f: cd 80                 int    $0x80                      /
  19.  11: 48 31 c0             xor    %rax,%rax                  /
  20.  14: 48 ff c0             inc    %rax                       /
  21.  17: cd 80                 int    $0x80                      /
  22.                                                                  /
  23. 0000000000000019 <n>:                                             /
  24.  19: e8 ea ff ff ff       callq  8 <et>                     /
  25.                                                                  /
  26. 000000000000001e <abc>:                                           /
  27. ...                                                           /
  28. ******************************************************************/
  29.  
  30.  
  31.  
  32. char shellcode[] = "\x48\x31\xc9\x48\x31\xc0\xeb\x11\x59\xb0\x04\xb3\x01\xb2\x01\xcd\x80\x48\x31\xc0\x48\xff\xc0\xcd\x80\xe8\xea\xff\xff\xffw";
  33.  
  34. int main(int argc, char **argv) {
  35.  
  36.    char *ptr = mmap(0, sizeof(shellcode),
  37.            PROT_EXEC | PROT_WRITE | PROT_READ, MAP_ANON
  38.            | MAP_PRIVATE, -1, 0);
  39.  
  40.    if (ptr == MAP_FAILED) {
  41.        perror("mmap");
  42.        exit(-1);
  43.    }
  44.  
  45.    memcpy(ptr, shellcode, sizeof(shellcode));
  46.    sc = ptr;
  47.  
  48.    (void)((void(*)())ptr)();
  49.  
  50.    return 0;
  51. }

EI: juntando mensajes.

He corregido algunos posibles errores. Pero sigue sin funcionar.
Tengo que decir que que el código ensamblador(en nasm) funciona pero la shellcode insertada en c no funciona.
Lo que he hecho es añadir los xor por si quedaba basura en los registros y cambiar la llamada a exit() por un ret para que después de la función continúe.

Código
  1. #include <stdio.h>
  2. #include <sys/mman.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. int (*sc)();
  7. /****************************************************************
  8. 0000000000000000 <main>:                                      /
  9.   0: 48 31 c9             xor    %rcx,%rcx              /
  10.   3: 48 31 c0             xor    %rax,%rax              /
  11.   6: eb 13                 jmp    1b <n>                 /
  12.                                                                   /
  13. 0000000000000008 <et>:                                        /
  14.   8: 59                   pop    %rcx                   /
  15.   9: 48 31 c0             xor    %rax,%rax              /
  16.   c: 48 31 db             xor    %rbx,%rbx              /
  17.   f: 48 31 d2             xor    %rdx,%rdx              /
  18.  12: b0 04                 mov    $0x4,%al               /
  19.  14: b3 01                 mov    $0x1,%bl               /
  20.  16: b2 01                 mov    $0x1,%dl               /
  21.  18: cd 80                 int    $0x80                  /
  22.  1a: c3                   retq                          /
  23.                                                              /
  24. 000000000000001b <n>:                                         /
  25.  1b: e8 e8 ff ff ff       callq  8 <et>                 /
  26.                                                              /
  27. 0000000000000020 <abc>:                                       /
  28.  20: 77                   .byte 0x77                    /
  29. ...                                                       /
  30. ******************************************************************/
  31.  
  32.  
  33.  
  34. char shellcode[] = "\x48\x31\xc9\x48\x31\xc0\xeb\x13\x59\x48\x31\xc0\x48\x31\xdb\x48\x31\xd2\xb0\x04\xb3\x01\xb2\x01\xcd\x80\xc3\xe8\xe8\xff\xff\xffw";
  35. //char shellcode[] = "\x48\x31\xc9\x48\x31\xc0\xeb\x11\x59\xb0\x04\xb3\x01\xb2\x01\xcd\x80\x48\x31\xc0\x48\xff\xc0\xcd\x80\xe8\xea\xff\xff\xffw";
  36.  
  37. int main(int argc, char **argv) {
  38.  
  39.    char *ptr = mmap(0, sizeof(shellcode),
  40.            PROT_EXEC | PROT_WRITE | PROT_READ, MAP_ANON
  41.            | MAP_PRIVATE, -1, 0);
  42.  
  43.    if (ptr == MAP_FAILED) {
  44.        perror("mmap");
  45.        exit(-1);
  46.    }
  47.  
  48.    memcpy(ptr, shellcode, sizeof(shellcode));
  49.    sc = ptr;
  50.  
  51.    (void)((void(*)())ptr)();
  52.    printf("\n");
  53.  
  54.    return 0;
  55. }

El código de nasm es el siguiente:
Código
  1. ;EXAMPLE VARIABLES IN LINUX
  2.  
  3.  
  4. global main
  5.  
  6. main:                           ; main
  7.  
  8. xor rcx, rcx            ; eficient way turning register to 0
  9. xor rax, rax            ; exclusive or
  10.  
  11. jmp n            
  12. et:
  13. pop rcx
  14.  
  15. xor rax, rax
  16. xor rbx, rbx
  17. xor rdx, rdx
  18. mov al, 4                      ; Number of system call (write)
  19. mov bl, 1                      ; argument(1=stdout)
  20. mov dl, 1                      ; number of characters
  21. int 0x80
  22.  
  23. ret
  24.  
  25. n:
  26. call et
  27. abc: db 'w'            ; declaring one variable(size 8 bytes)

EI: juntando mensajes.

Bueno, resulta que también pregunté en stackoverflow y al final me contesto a mi mismo.
Podeis ver la respuesta en este hilo: http://stackoverflow.com/questions/13323379/shell-code-print-character64bits
2  Programación / Java / Ejecutar .class en windows. en: 6 Octubre 2011, 23:41 pm
Hola, estuve programando en java en linux.
Pero ahora en windows no se como, una vez compilado el código, puedo ejecutar el archivo.class
En linux era muy fácil porque con solo poner: java programax   en la linea de comandos ya funcionaba.
3  Seguridad Informática / Bugs y Exploits / Intentando hacer shellcode 64 bits en: 25 Julio 2011, 01:36 am
Hola estoy empezando a escribir shellcodes. Estaba leyendo un manual que encontre en esta misma página: Shellcodes linux de Raise.
He llegado ala parte en donde pone este código:

Código
  1. jmp    0x1f
  2.        popl   %esi
  3.        xorl   %eax,%eax
  4.        movb   %al,0x7(%esi)
  5.        movl   %esi,0x8(%esi)
  6.        movl   %eax,0xc(%esi)
  7.        movb   $0xb,%al
  8.        movl   %esi,%ebx
  9.        leal   0x8(%esi),%ecx
  10.        leal   0xc(%esi),%edx
  11.        int    $0x80
  12.        xorl   %eax,%eax
  13.        xorl   %ebx,%ebx
  14.        inc    %eax
  15.        int    $0x80
  16.        call   -0x24
  17.        .string \"/bin/sh\"

Como podrán comprobar es ensamblador de 32 bit y al compilarlo me da error.
Entonces decidí hacer una modificaciones:

Código
  1. void funcion();
  2. int main(){
  3.  
  4. funcion();
  5.  
  6.  
  7.  
  8. }
  9.  
  10. void funcion(){
  11.    asm("jmp    0x2e(%rip);"
  12.        "popq   %rsi;"
  13.        "xorq   %rax,%rax;"
  14.        "movb   %al,0x7(%rsi);"
  15.        "movq   %rsi,0x8(%rsi);"
  16.        "movq   %rax,0xc(%rsi);"
  17.        "movb   $0xb,%al;"
  18.        "movq   %rsi,%rbx;"
  19.        "leaq   0x8(%rsi),%rcx;"
  20.        "leaq   0xc(%rsi),%rdx;"
  21.        "int    $0x80;"
  22.        "xorq   %rax,%rax;"
  23.        "xorq   %rbx,%rbx;"
  24.        "inc    %rax;"
  25.        "int    $0x80;"
  26.        "call   -0x29;"
  27.        ".string \"/bin/sh\";");
  28. }

Luego el problema es que me da segmentation fault.

Les pongo un pequeño analisis en gdb para que lo vean más claro:
Código:
(gdb) disassemble funcion
Dump of assembler code for function _Z7funcionv:
   0x00000000004005c4 <+0>: push   %rbp
   0x00000000004005c5 <+1>: mov    %rsp,%rbp
   0x00000000004005c8 <+4>: jmpq   *0x2e(%rip)        # 0x4005fc <_Z7funcionv+56>
   0x00000000004005ce <+10>: pop    %rsi
   0x00000000004005cf <+11>: xor    %rax,%rax
   0x00000000004005d2 <+14>: mov    %al,0x7(%rsi)
   0x00000000004005d5 <+17>: mov    %rsi,0x8(%rsi)
   0x00000000004005d9 <+21>: mov    %rax,0xc(%rsi)
   0x00000000004005dd <+25>: mov    $0xb,%al
   0x00000000004005df <+27>: mov    %rsi,%rbx
   0x00000000004005e2 <+30>: lea    0x8(%rsi),%rcx
   0x00000000004005e6 <+34>: lea    0xc(%rsi),%rdx
   0x00000000004005ea <+38>: int    $0x80
   0x00000000004005ec <+40>: xor    %rax,%rax
   0x00000000004005ef <+43>: xor    %rbx,%rbx
   0x00000000004005f2 <+46>: inc    %rax
   0x00000000004005f5 <+49>: int    $0x80
   0x00000000004005f7 <+51>: callq  0xffffffffffffffd7
   0x00000000004005fc <+56>: (bad) 
   0x00000000004005fd <+57>: (bad) 
   0x00000000004005fe <+58>: imul   $0xc9006873,0x2f(%rsi),%ebp
---Type <return> to continue, or q <return> to quit---
   0x0000000000400605 <+65>: retq   
End of assembler dump.
(gdb) run
Starting program: /home/tuket/a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000000004005c8 in funcion() ()
(gdb)

Ah por cierto al compilar el codigo me daba un warning en el jmp que dicia que no se habia indicado el signo *. Sin embargo en el codigo desemsamblado vemos que lo ha puesto solo.
Aver si me podeis ayudar :)
4  Informática / Hardware / Drivers Pavilion Elite m9075.es en: 22 Junio 2011, 23:43 pm
Hola tengo un "Pavilion Elite m9075.es" me ha costada encontrar los drivers para xp  pero me queda uno muy importante que es el de red.
En la pagina oficial solo se encuentran los de windows vista.
He buscado en google pero me resulta imposible
http://h10025.www1.hp.com/ewfrf/wc/product?lc=es&dlc=es&cc=es&lang=es&product=3605248&

En esta pagina tienes para descargar los drivers y ver las especificaciones. Parece que el adaptador de red es Intel 82566DC-2 Gigabit.
Pero aun sabiendo el nombre no he encontrado el driver necesario.
Gracias por adelantado y espero que puedan ayudar.  ;D
5  Programación / Programación General / Imperfeccion en la transmisión con sockets de flujo. en: 4 Enero 2011, 14:18 pm
He hecho 2 programas de sockets en C++.
Consiste enviar la cadena "hola" desde un ordenador a otro y hacer que lo muestre en la pantalla del otro ordenador.
Lo he conseguido hacer pero el problema es que el 80% de las veces los datos llegan corruptos. Esto me extraña por que según tengo yo entendido los sockets de flujo usan el protocolo TCP y en este protocolo es el mismo el que se encarga de que lleguen los resultados adecuadamente.
¿Por que sucede esto?¿Como se puede evitar?

Datos: un ordenador es linux y el otro es windows. No estoy usando datagramas.
6  Programación / Bases de Datos / cual es mi error: sentencia SQL en: 23 Octubre 2010, 00:04 am
CREATE DATABASE IF EXISTS videoteca;

Pues eso a ver si podéis encontrar el error por que yo no.
Meda un error 1064 y que me lea el manual de sintaxis.

edito:
Vale que tonto xD
CREATE DATABASE IF NOT EXISTS videoteca;
7  Foros Generales / Dudas Generales / reparacion windows 7 en: 18 Octubre 2010, 22:47 pm
hola resulta que una prima se le ha escoñao el ordenador, es windows 7.
El problema es que al iniciar se queda la pantalla en negro sale el cursor y ahí se queda no puedo ejecutar el administrador de tareas con ctr+alt+supr.
Desde un live cd linux intente acceder al disco duro de diversas formas: mediante nautilus, mount y munt force, de todas las maneras me daba error(supongo que debe ser lo típico de que cerraste mal windows y tienes que iniciar y apagar correctamente). Luego también probé con un live Cd de windows xp llamado Ultimate boot CD for Windows aqui me indicaba que el tamaño de tal partición en la que estaba windows 7 es de -1 Mb xD y cuando intentaba acceder mediante el gestor de carpetas de windows se quedaba trabado (No responde)  también lo intente con el interprete de comandos cmd y simplemente entraba y salia .
Asi que... esto tiene remedio ?? puede ser que haya algún sector del disco dañado?? hay alguna alternativa??

PD: en realidad no tengo ninguna necesidad de salvar datos puesto que tengo copia de seguridad, es simplemente para saber que podría hacer en tal apuro.
Gracias por adelantado.
8  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Duda llamadas móvil y telecomunicaciones en: 22 Septiembre 2010, 21:48 pm
Hola resulta que tengo una serie de dudas sobre telecomunicaciones en móviles, es sólo por curiosidad no tengo intenciones maliciosas ni nada xD

Bueno ahí va mi problema.
Imaginemos que un amigo me llama desde su teléfono móvil y emite unas ondas a la torre de comunicaciones, entonces yo contesto la llamada y nos ponemos a hablar, pero las ondas que emite la torre llegan a todos los teléfonos moviles aunque supuestamente sólo mi teléfono móvil capta la señal que emitió mi amigo y emite el sonido correspondiente.
Total mis preguntas son las siguientes:¿Como sabe mi teléfono móvil que esa señal que emite mi amigo es la que debe captar? ¿Otal vez es la torre la que verifica una identidad?(yo creo que esto no debe ser por que aunque verificase una identidad la torre seguiría emitiendo datos sin saber quien los capta)¿Podría algún dispositivo captar la señal que envía mi amigo, y escuchar lo que debería de estar diciéndome sólo a mi? ¿Tiene cada número de teléfono una señal espacial y supuestamente única?
Graciassss
9  Programación / Ingeniería Inversa / Ollydbg me engaña en: 3 Septiembre 2010, 17:42 pm
Resulta que en dump en la direccion 7C800000h me pone 4D5Ah('MZ') pero resulta que si hago MOV WORD AX, [7C800000] me pone en AX otra cosa ¿Por que pasa esto? ¿Me esta olly siendo infiel? :(
10  Seguridad Informática / Bugs y Exploits / Alguien sabe que ha pasado con milworm? en: 1 Septiembre 2010, 14:07 pm
Hace bastante tiempo que no encuentro milworm en la web. es que se ha caído? para siempre?
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines