LEVEL 17: function calls
코드가 꽤 길다. 공유 라이브러리 함수를 통한 RTL을 사용할 수 없으며, 주어진 함수 5개를 Chaining한 후, 작업해야 한다.
Chaining을 하기 위해, 5개 함수의 주소를 확인하자.
buffer+sfp는 dummy 값으로 덮고, ret 공간부터 시작해 DO, GYE, GUL, YUT, MO의 주소로 덮어준 후 실행하면
아래와 같이 정상 작동하는 것을 볼 수 있다. cmd 인자로 쓰레기 값이 들어가, command not found가 표시되고 있다.
공유 라이브러리 영역을 사용할 수 없으므로, MO 다음으로 dummy 값 4바이트, &"/bin/sh"(스택 영역 주소)+"/bin/sh"로
임의 부여한 후 실행토록 한다.
main의 leave에 BP를 걸고
스택을 확인해보면, 아래처럼 /bin/sh 문자열이 있는 영역은 NULL로 지워지는 작업이 수행되지 않는 것을 알 수 있다.
정확한 "/bin/sh"의 주소를 알아두고
공격해보자. (사전에 별도의 디렉터리를 만든 후, 복사본으로 심볼릭 링크를 걸어놨다.)
core 파일이 dump되고, 공격이 먹히진 않았다.
core 파일을 분석해보자. "/bin/sh"의 주소가 약간 달라져있다.
수정한 후, 다시 공격하니 먹혔다.
원본으로 링크를 다시 걸고 공격하면 쉘을 딸 수 있다.
'[Wargame Write-up] > Lord of Buffer Overflow' 카테고리의 다른 글
| [LoB RedHat 6.2] LEVEL 19: nightmare -> xavius (0) | 2018.08.25 |
|---|---|
| [LoB RedHat 6.2] LEVEL 18: succubus -> nightmare (0) | 2018.08.21 |
| [LoB RedHat 6.2] LEVEL 16: assassin -> zombie_assassin (0) | 2016.10.22 |
| [LoB RedHat 6.2] LEVEL 15: giant -> assassin (0) | 2016.10.19 |
| [LoB RedHat 6.2] LEVEL 14: bugbear -> giant (0) | 2016.10.19 |