-
level11war game Write up/ FTZ 2018. 10. 28. 00:57
음,, 이 문제는 FTZ를 하면서 버퍼오버플로우에 대한 기초를 알려주기 위한 문제라고 보고 풀었다.
먼저 ls를 한 후에 파일들을 살펴본다.
attackme라는 프로그램이 존재하고, hint파일이 존재한다.
위의 코드를 간단하게 분석해보면
setuid가 걸려있고 str이라는 string 변수는 256byte를 가진다.
argv[1]을 str에 카피하고 그것을 출력해준다.
attackme를 실행할 때 인자값을 함께 넣어줬을 때 정상적으로 스택에 들어가는 것을 확인할 수 있다.
이 파일을 먼저 tmp/ 폴터에 카피한 후 gdb로 분석을 해보자.
main+3까지는 str 이 스택에 들어가는 값이다. 0x100은 256이고 0x8은 8 따라서 더미값은 8byte이다.
strcpy 함수 밑에 main+53을 브포로 잡고 값이 들어가는 주소를 확인한다.
들어가는 주소는 0xbfffec70 이다.
이것을 보면 268byte의 값을 넣어주면 RET 주소까지 건들수 있다.
또 여기서 한번 더 스택에 관해 보면 스택위에 몇 가지가 더 있습니다
여기서 봐야 할 곳은 env 즉 환경변수 부분입니다.
바로 환경변수에 쉘코드를 입력해주면 바로 스택에서 환경변수로 올라가게 됩니다.
getenv라는 함수를 사용해 주소값을 출력해주고 EGG라는 환경변수를 설정해준다.(여기서는 환경변수를 정하는 부분을 못찍어서 ..사실 못찍고 넘겼는데 다시 찍기 싫어서 /..죄송합니다._)
EGG라는 환경변수가 존재하는지 다시 확인해보고 path를 실행시키면 주소가 나타납니다.
이것을
요렇게 인자로 넘겨주면 짜잔!!!!!