Эксплуатирование переполнения буффера

Discussion in 'Реверсинг' started by wanttoask, 18 Oct 2015.

  1. wanttoask

    wanttoask New Member

    Joined:
    30 Sep 2012
    Messages:
    81
    Likes Received:
    1
    Reputations:
    0
    Есть такой вот код

    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    // Compilation parameters
    // gcc -m32 -fno-stack-protector -Wl,-z,norelro -z execstack binary_exploitation.c -o binary_exploitation
    
    int main(int argc, char * argv[]) {
        char buf[128];
        char s[1024];
    
        if (read(0, s, 1024) != 0) {
            strcpy(buf, s);
            printf("%s", buf);
        }
    
        return 0;
    }
    
    И есть два бинарника, которые были скомпилированы с указанными параметрами. В одном из них(binary) я могу провести атаку, а в другом(binary_exploitation) нет. В чем может быть проблема? Вот бинарники rghost.net/62vQGbqph
     
  2. xivi00

    xivi00 Banned

    Joined:
    23 Nov 2013
    Messages:
    49
    Likes Received:
    1
    Reputations:
    0
    return 0 нужно
    return 2
     
  3. wanttoask

    wanttoask New Member

    Joined:
    30 Sep 2012
    Messages:
    81
    Likes Received:
    1
    Reputations:
    0
    почему 2?
     
  4. wanttoask

    wanttoask New Member

    Joined:
    30 Sep 2012
    Messages:
    81
    Likes Received:
    1
    Reputations:
    0
    И почему бинарники отличаются? Вот два дампа
    (gdb) disas main
    Dump of assembler code for function main:
    0x0804845b <+0>: lea 0x4(%esp),%ecx
    0x0804845f <+4>: and $0xfffffff0,%esp
    0x08048462 <+7>: pushl -0x4(%ecx)
    0x08048465 <+10>: push %ebp
    0x08048466 <+11>: mov %esp,%ebp
    0x08048468 <+13>: push %ecx
    0x08048469 <+14>: sub $0x484,%esp
    0x0804846f <+20>: sub $0x4,%esp
    0x08048472 <+23>: push $0x400
    0x08048477 <+28>: lea -0x488(%ebp),%eax
    0x0804847d <+34>: push %eax
    0x0804847e <+35>: push $0x0
    0x08048480 <+37>: call 0x8048310 <read@plt>
    0x08048485 <+42>: add $0x10,%esp
    0x08048488 <+45>: test %eax,%eax
    0x0804848a <+47>: je 0x80484bc <main+97>
    0x0804848c <+49>: sub $0x8,%esp
    0x0804848f <+52>: lea -0x488(%ebp),%eax
    0x08048495 <+58>: push %eax
    0x08048496 <+59>: lea -0x88(%ebp),%eax
    0x0804849c <+65>: push %eax
    0x0804849d <+66>: call 0x8048330 <strcpy@plt>
    0x080484a2 <+71>: add $0x10,%esp
    0x080484a5 <+74>: sub $0x8,%esp
    0x080484a8 <+77>: lea -0x88(%ebp),%eax
    0x080484ae <+83>: push %eax
    0x080484af <+84>: push $0x8048560
    0x080484b4 <+89>: call 0x8048320 <printf@plt>
    0x080484b9 <+94>: add $0x10,%esp
    0x080484bc <+97>: mov $0x0,%eax
    0x080484c1 <+102>: mov -0x4(%ebp),%ecx
    0x080484c4 <+105>: leave
    0x080484c5 <+106>: lea -0x4(%ecx),%esp
    0x080484c8 <+109>: ret

    (gdb) disas main
    Dump of assembler code for function main:
    0x0804847c <+0>: push %ebp
    0x0804847d <+1>: mov %esp,%ebp
    0x0804847f <+3>: and $0xfffffff0,%esp
    0x08048482 <+6>: sub $0x490,%esp
    0x08048488 <+12>: movl $0x400,0x8(%esp)
    0x08048490 <+20>: lea 0x10(%esp),%eax
    0x08048494 <+24>: mov %eax,0x4(%esp)
    0x08048498 <+28>: movl $0x0,(%esp)
    0x0804849f <+35>: call 0x8048340 <read@plt>
    0x080484a4 <+40>: test %eax,%eax
    0x080484a6 <+42>: je 0x80484d6 <main+90>
    0x080484a8 <+44>: lea 0x10(%esp),%eax
    0x080484ac <+48>: mov %eax,0x4(%esp)
    0x080484b0 <+52>: lea 0x410(%esp),%eax
    0x080484b7 <+59>: mov %eax,(%esp)
    0x080484ba <+62>: call 0x8048360 <strcpy@plt>
    0x080484bf <+67>: lea 0x410(%esp),%eax
    0x080484c6 <+74>: mov %eax,0x4(%esp)
    0x080484ca <+78>: movl $0x8048570,(%esp)
    0x080484d1 <+85>: call 0x8048350 <printf@plt>
    0x080484d6 <+90>: mov $0x0,%eax
    0x080484db <+95>: leave
    0x080484dc <+96>: ret

    Снизу я компилировал, сверху уже дан был и его надо экслойтировать