BOF 원정대의 succubus를 잡아보자!

* 소스코드


(succubus.c)



succubus의 main함수이다. 특징을 보면 ret주소에 DO라는 함수 주소가 적혀야한다는 점이다.

위에 보면 도 개 걸 윷 모 라는 함수들이 정의되어있다.




(도개걸윷모)



즉 도->개->걸->윷->모 를 차례대로 호출하고 마지막 모의 인자로 "/bin/sh"의 문자열을 전달 하면 쉘을 획득 할 수 있다.

각각의 함수들의 시작 주소를 찾았다.
DO : 0x80487ec 
GYE : 0x80487bc 
GUL : 0x804878c 
YUT : 0x804875c 
MO : 0x8048724

ret주소에 차례대로 넣어주고 마지막 MO의 인자로는 "/bin/sh"의 주소를 넣어주어야하는데 라이브러리 함수를 못쓰니 직접 넣어줄 것이다. 지금은 이 주소를 모르니 C로 채워넣고 뒤에 /bin/sh 주소를 넣어 메모리를 확인해보겠다.



(gdb 실행)




(메모리 상황)



0xbffffa78 주소에 /bin/sh 문자열이 들어가 있는 것을 확인 할 수 있다.

이제 C로 채웠던 부분에 이 문자열 주소를 넣고 공격을 해보자!



(공격 실패)



여기서 스택영역의 주소라 0x10바이트 간격으로 오차가 있다.
core 덤프파일을 확인하여 정확한 주소를 찾아보자.



(core 덤프파일)



파일을 보니 0xbffffa98 부터 /bin/sh 문자열이 들어가있는 것을 확인 할 수 있다.

문자열 주소에 0xbffffa98 주소를 입력하여 다시 공격!



(공격 성공)



쉘을 획득하였다. :)

+ Recent posts