Pwnable/LOB

[LOB] 16. ZOMBIE_ASSASSIN

Lucvs 2020. 8. 28. 16:20

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