ctf 및 여러가지 문제들/기타등등

HackingcampCTF - bofforeverfluw

ddanss 2019. 8. 28. 22:37
728x90

누군가의 도움을 받아서 했습니다 ㅠㅠㅠ 포너블 초반이라 너무어렵네요...

 

구조를 보면

이렇습니다.

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

반응형