본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 17: zombie_assassin -> succubus

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"의 주소가 약간 달라져있다.

 

 

 

수정한 후, 다시 공격하니 먹혔다.

 

 

 

원본으로 링크를 다시 걸고 공격하면 쉘을 딸 수 있다.