-
|Lord Of Bufferoverflow| #17 zombie_assassin - succubusWargame Site/BOF 2019. 6. 29. 21:55
우선 main 함수를 보면 RET 부분부터 104 개의 문자를 수용하고 있다.
그렇다! Chaining 에 관련된 개념을 사용하는 문제이다.
check 라는 변수를 조절하는 함수를 모두 거쳐야 문제가 해결되는 것이다.
DO - GYE - GUL - YUT - MO 순서로 실행하는 바이너리를 작성해보자.
우선, RET 를 DO 로 맞추어주어야한다. 인자가 없기 때문에 DO 의 주소만 맞춰주면 될 것이다.
[ DO 의 주소 ] + [ ret 에서 pop eip 로 인해 생긴 공간 = DO 가 실행되고 난 뒤 실행되는 위치 ] + [ DO 의 프롤로그 에필로그 과정 ]
다음과 같이 동작할 것이다.
따라서 !!
[ DO 의 주소 ] + [ 제2의 함수 주소 ] + [ 제3의 함수 주소 ] + ....
다음과 같은 현상이 발생한다.
그렇다면 도, 개, 걸, 윷, 모의 주소를 파악해보자.
objdump 를 통해 금방 쉽게 파악할 수 있다
DO : 0x080487ec
GYE : 0x080487bc
GUL : 0x0804878c
YUT : 0x0804875c
MO : 0x08048724
주소를 잘 연결해주었다면, 다음과 같은 문구를 볼 수 있다.
그럼 이제 "/bin/sh" 를 담고 있는 주소를 넘겨주면 되는데,
이 때 라이브러리 영역 사용을 막고있기 때문에 "\xf9\xbf\x0f\x40" 을 사용할 수 없다.
물론 ebp 역할을 해주는 AAAA 를 넣어준다는 것을 놓치지 않도록 한다!
BBBB 자리에 /bin/sh 의 주소를 넣는 방식으로 접근해보도록 하자.
BBBB 자리에 \x68\xfc\xff\xbf 를 넣어주면 될 것이다.
깰끔하게 클리어할 수 있다.
'Wargame Site > BOF' 카테고리의 다른 글
|Lord Of Bufferoverflow| #19 nightmare - xavius (0) 2019.07.10 |Lord Of Bufferoverflow| #18 succubus - nightmare (0) 2019.07.09 |Lord Of Bufferoverflow| #16 assassin - zombie_assassin (0) 2019.06.29 |Lord Of Bufferoverflow| #15 giant - assassin (0) 2019.06.23 |Lord Of Bufferoverflow| #14 bugbear - giant (0) 2019.06.23 댓글