Hallo,
ich versuche mit einem 3.2.0er Kernel und GCC 4.6.3 diesen code zu analysieren.
wenn ich die stack-protecion ausmache und stack-exec klappt das exploiten, aber darum geht es hier nicht mir geht es um die beiden D*Word's bei folgender ausgabe:
Break ans ende der Funktion oeffentlichsetzen (line 16)
disas main
x/20x buff
um die zwei roten geht es das zweite könnte das Canary sein aber wo kommt es her?
Bei dem ersten wundert mich die ausgabe
x/s 0x080486b6
vielleicht kann mir hier jemand helfen
ich versuche mit einem 3.2.0er Kernel und GCC 4.6.3 diesen code zu analysieren.
Code:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void geheim (void) {
printf ("GEHEIM !!!\n");
exit (0);
}
void oeffentlich (char *args) {
char buff[12];
memset (buff, 'B', sizeof (buff));
strcpy (buff,args);
printf ("\nbuff: [%s] (%p)(%d)\n\n", &buff, buff, sizeof (buff));
}
int main (int argc, char *argv []) {
int uid;
uid =getuid ();
if (uid == 0)
geheim ();
if (argc > 1) {
printf ("\n\n\n\n");
printf ("geheim() --> (%p)\n",geheim);
printf ("oeffentlich() --> (%p)\n",oeffentlich);
oeffentlich (argv[1]);
printf ("geheim() --> (%p)\n", geheim);
printf ("oeffentlich() --Y (%p)\n", oeffentlich);
} else
printf ("Kein Argument\n");
return 0;
}
wenn ich die stack-protecion ausmache und stack-exec klappt das exploiten, aber darum geht es hier nicht mir geht es um die beiden D*Word's bei folgender ausgabe:
Break ans ende der Funktion oeffentlichsetzen (line 16)
disas main
Code:
0x08048516 <+0>: push %ebp
0x08048517 <+1>: mov %esp,%ebp
0x08048519 <+3>: and $0xfffffff0,%esp
0x0804851c <+6>: sub $0x20,%esp
0x0804851f <+9>: call 0x8048390 <getuid@plt>
0x08048524 <+14>: mov %eax,0x1c(%esp)
0x08048528 <+18>: cmpl $0x0,0x1c(%esp)
0x0804852d <+23>: jne 0x8048534 <main+30>
0x0804852f <+25>: call 0x80484a4 <geheim>
0x08048534 <+30>: cmpl $0x1,0x8(%ebp)
0x08048538 <+34>: jle 0x80485ac <main+150>
0x0804853a <+36>: movl $0x80486b2,(%esp)
0x08048541 <+43>: call 0x80483b0 <puts@plt>
0x08048546 <+48>: mov $0x80486b6,%eax
0x0804854b <+53>: movl $0x80484a4,0x4(%esp)
0x08048553 <+61>: mov %eax,(%esp)
0x08048556 <+64>: call 0x8048380 <printf@plt>
0x0804855b <+69>: mov $0x80486c9,%eax
0x08048560 <+74>: movl $0x80484c2,0x4(%esp)
0x08048568 <+82>: mov %eax,(%esp)
0x0804856b <+85>: call 0x8048380 <printf@plt>
0x08048570 <+90>: mov 0xc(%ebp),%eax
0x08048573 <+93>: add $0x4,%eax
0x08048576 <+96>: mov (%eax),%eax
0x08048578 <+98>: mov %eax,(%esp)
0x0804857b <+101>: call 0x80484c2 <oeffentlich>
0x08048580 <+106>: mov $0x80486b6,%eax
0x08048585 <+111>: movl $0x80484a4,0x4(%esp)
0x0804858d <+119>: mov %eax,(%esp)
0x08048590 <+122>: call 0x8048380 <printf@plt>
0x08048595 <+127>: mov $0x80486e1,%eax
0x0804859a <+132>: movl $0x80484c2,0x4(%esp)
0x080485a2 <+140>: mov %eax,(%esp)
0x080485a5 <+143>: call 0x8048380 <printf@plt>
0x080485aa <+148>: jmp 0x80485b8 <main+162>
0x080485ac <+150>: movl $0x80486f9,(%esp)
0x080485b3 <+157>: call 0x80483b0 <puts@plt>
0x080485b8 <+162>: mov $0x0,%eax
0x080485bd <+167>: leave
0x080485be <+168>: ret
x/20x buff
Code:
0xbffff344: 0x42420041 0x42424242 0x42424242 [COLOR=Red] 0x080486b6[/COLOR]
0xbffff354: [COLOR=Red]0x00131918[/COLOR] 0xbffff388 0x08048580 0xbffff5b0
0xbffff364: 0x080484c2 0x002d3ff4
um die zwei roten geht es das zweite könnte das Canary sein aber wo kommt es her?
Bei dem ersten wundert mich die ausgabe
x/s 0x080486b6
Code:
0x80486b6: "geheim() --> (%p)\n"
vielleicht kann mir hier jemand helfen