튜기's blogggg

FC3 dark_eyes -> hell_fire

by St1tch




문제를 보면 sfp를 수정할 수 없게 되어있다.

이전 문제와 비교했을때 거의 똑같지만 차이점이 있다면 이 문제는 Remote BOF문제이다.

따라서 ret sleding방법을 사용하더라도 심볼릭 링크를 걸어줄 수 없기 때문에 불가능하다.


힌트를 보면 fake ebp와 got overwriting이 있다.


나는 먼저 got overwriting으로 접근을 했다.

strcpy함수를 이용해 memcpy의 got를 system이나 execl같은 함수의 주소로 덮어 씌우고, 

bss섹션에 '/bin/sh'문자열을 저장시키려고 했다.


그런데 필요한 가젯을 몇개 찾을 수 없었다.


따라서 fake ebp방법으로 다시 공격을 시도했다.


일단 main함수의 sfp로는 ebp를 바꿀 수 없기 때문에, main함수가 종료되고 난 후에 되돌아가는 함수의 sfp를 이용해서 공격을 시도했다.

  



코드를 보면 fgets에서 stdin을 이용해서 입력을 받는다.

stdin의 버퍼에 mprotect함수로 실행 권한을 주고 난 후 stdin버퍼로 eip를 바꿔 공격을 하면 된다.




strace함수를 이용해서 stdin의 버퍼주소를 확인을 했다.





그리고 main함수가 종료 된 후부터 main함수 종료후 함수의 sfp까지의 크기를 확인했다.(dummy크기)






이제 필요한 것들은 다 구했다.

페이로드의 구조는 위와 같이 구성된다.


leaveret1이 실행이 되면 위의 표에서 ebp는 fakeebp와 ret사이를 가리키게 되고, 

leaveret2가 실행이 되면 eip가 mprotect로 된다.

mprotect함수에 의해 stdin 영역의 권한을 rwx로 바뀌게 되고, 

mprotect가 종료된후 &stdin이 실행이 되는데 여기에는 shellcode가 있기 때문에 쉘이 따지게 된다.




그냥 일반 쉘코드로 해도되는데 나는 그냥 리모트쉘코드를 이용해서 9999포트로 쉘을 열어주었다.




nc를 이용해서 9999포트로 대기를 하며, 위의 파이썬 공격코드를 실행하면 쉘이 따진다.











블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기