passcode : no place to hide
(NO DRAG, NO PASSCODE)
RTL Chaining 애 관련된 문제인 것 같다. RTL Chaining은 기존의 RTL 기법에서 RET + 4 영역을 다음 실행할 함수의 주소로 덮는 방법이다. 이 방법을 연속으로 사용하게 되면 RTL Chaining이 되는 것이다. 여러개의 sub 함수가 존재하고 check 라는 변수의 값이 각 함수를 지나쳐가면서 변화된다. 우선 이 문제를 해결하기 위하여 필요한 조건은 다음과 같다.
- RET 부분에 DO 함수의 주소를 넣을 것
- 라이브러리 함수 이용 불가
- MO 함수에 system 함수가 있으므로 RTL Chaining 으로 DO 함수에서 MO 함수까지 이동할 것
- MO 함수의 인자로 “/bin/sh”를 전달해줄 것
따라서 payload는 다음과 같이 구성한다.
NOP(44) + &(DO) + &(GYE) + &(GUL) + &(YUT) + &(MO) + dummy(4) + &(“/bin/sh”) + “/bin/sh”
RTL Chaining 을 사용하기 위하여 필요한 함수들의 주소를 구해보자.
DO -> 0x80487ec
GYE -> 0x80487bc
GUL -> 0x804878c
YUT -> 0x804875c
MO -> 0x8048724
또한 MO 함수의 인자가 포인터기 떄문에 “/bin/sh” 문자열이 존재하는 주소값을 전달해주어야. 라이브러리 함수인 system 에 존재하는 “/bin/sh” 의 주소값은 “\x40” 영역이기 때문에 사용할 수 없다. 따라서 “/bin/sh” 문자열을 스택에 넣어주고 그 주소를 사용하면 될 것 같다.
우선 임시로 “/bin/sh” 의 주소를 AAAA로 넣어주어 core dump를 일으켜야겠다.
/bin/sh -> 0xbffffa98
이제 정확한 주소를 이용하여 쉘을 따보자.
[succubus] : here to stay
'Pwnable > LOB' 카테고리의 다른 글
[LOB] 18. NIGHTMARE (0) | 2020.08.28 |
---|---|
[LOB] 17. SUCCUBUS (0) | 2020.08.28 |
[LOB] 15. ASSASSIN (0) | 2020.08.28 |
[LOB] 14. GIANT (0) | 2020.08.28 |
[LOB] 13. BUGBEAR (0) | 2020.08.28 |