HackingcampCTF - bofforeverfluw
누군가의 도움을 받아서 했습니다 ㅠㅠㅠ 포너블 초반이라 너무어렵네요...
구조를 보면
이렇습니다.
read함수로 800h(2048)bytes를 읽고 ..에라이 핵스레이!
이렇게나온다.
2048개를 읽고 retaddr가 &system하고 같으면 no hack..?
retaddr가 최소한 &system하고 같으면 안되는건 알겠다..
코드상으로 system에 관한게 없으니 결국 system함수를 써야할것같긴한데..뭐 없을까~~ 하다가
일단 p system으로 system함수 주소를 알아보면
&system 함수의 주소는 0804A040으로 두개가 다르다.
이제 system 함수를 사용하면 될건 알겠고..
/bin/sh를 찾아봤는데
이렇게 있다. 맨위에 그림에서 노란부분 클릭하면 나온다!!
그래서 payload는
[buf][sfp][ret][dummy][/bin/sh주소]
하면 된다.
저 사이에 dummy 4가 생기는 이유!
왜 ret뒤에 dummy가 있나?
ret -> system()'s address -> dummy[4] -> /bin/sh address
ret(pop eip)를 통해 system 함수의 주소가 eip로 들어감.
push ebp, mov ebp, esp를 하면
sfp -> dummy[4] -> "bin/sh" address 가 됨.
dummy[4]는 system함수가 끝난 후의 return 주소가 들어감.
보통 프로그램의 정상적인 종료를 위해 dummy부분에 exit()함수의 주소를 넣어주기도함.
buffer->sfp->system's address -> dummy -> /bin/sh address