농소

The Lord Of The BOF // giant -> assasin 본문

Wargame/The Lord Of The BOF

The Lord Of The BOF // giant -> assasin

농소 2018. 2. 21. 03:38

이어서 다음 문제를 진행해 보겠습니다.




전 단계에서는 RTL을 이용하여 문제를 풀었다면

이번에는 RTL을 막아놨네요

스택메모리 영역("\xbf")과 라이브러리 영역("\x40") 을 못 쓴다면 이제 남은건 data, text영역이 있네요

그러나 data은 사용할 수 없으니 text segment("\x08)를 이용하도록 합시다




c파일에서 확인했듯이 eip를 제외한 buf+ebp영역을 전부 0으로 초기화 되어있습니다.

환경변수를 충분히 변조하여 이용 가능하지만 stack메모리 영역도 이용할 수 없고.

이런경우 ret 슬레이딩 기법을 이용하면 해결 가능하겠네요



eip(=ret ) 에 main문의 에필로그 ret을 넣어준다면 pop eip, jmp eip가 실행되므로 스택포인터가 증가하게되어

결과적으로 eip가 4바이트 밀리게 됩니다. 즉 eip위치가 변조되는 것인데요

이를 이용하여 쉘코드의 주소를 삽입해 준다면 쉘이 떨어질 것입니다.


우선 환경변수에 쉘을 넣도록 합시다



우선 쉘을 넣어주고



eip에 ret주소를 넣으면 결과적으로 dddd 위치가 eip로 바뀌게 됩니다

이제 이 위치에 쉘코드를 넣어주면 되겠네요



nop코드중 하나의 영역을 사용하겠습니다.



dddd에 nop영역중 하나를 넣어 실제로 실행했더니 쉘이 잘 떨어졌습니다.