본문으로 바로가기

level11부터는 홈에 다음 레벨의 setuid가 걸려있고 취약점이 있는 attackme 파일이 주어진다.

이 프로그램의 취약점은 strcpy함수에서 터진다. 

str 변수는 char 형으로 256만큼 선언되어있다. 하지만 입력받을때 256을 넘어가는 수를 입력하면 strcpy 함수로 문자열을 복사할때 256을 넘어가서 복사해버린다. 즉, 잘못된 메모리 공간을 변조 시킬 수 있는것이다.


쉘코드를 실행시켜주는 eggshell의 소스를 복사해서 컴파일시키고, 실행시킨다. 그러면 환경변수에 EGG라는 이름의 환경변수가 등록된다

하지만, eggshell을 실행시킬때마다 eggshell의 주소는 달라지게 된다. 따라서, 정확한 환경변수의 주소를 알아오기 위해, 코딩을 해준다. getenv함수는 환경변수의 주소를 가져오는 함수이다.

실행을 시켜보았을때, eggshell이 잘 작동 하는것을 볼 수 있다. 그리고 getenv로 제대로된 환경변수의 주소를 가져왔다.


그리고 gdb로 attackme 파일을 분석해보았는데, 함수프롤로그가 끝나고 sub esp 0x108을 해준다. 

이 프로그램에서 변수는 str 단 하나이므로, 0x108은 str변수 + dummy data 라는것을 추측 해 볼 수 있다.

 우리는 스택프레임의 마지막 부분에 함수에필로그가 있다는 것을 알고있다. 또한, 그 함수 에필로그는 leave, ret과정으로 이루어져 있다는 것을 알고있을것이고, 32bit의 SFP는 ebp+0, RET는 ebp+4에 각각 위치하고 있다는 것을 알 수 있다.

그렇기때문에, SFP를 4byte 모두 변조하려면 0x108+0x4 일것이고, RET을 변조하려면 0x108+0x8 만큼의 dummy data를 전달 해 주어야 할것이다.



SFP까지 Dummy data를 입력시키고, ret를 환경변수 EGG의 주소로 덮는데, 바이트 오더를 고려하여 리틀엔디안으로 값을 전달 해 주어야 한다는 점에 유의하자.

이렇게하면 쉘을 딸 수 있다.


확실히 level10까지의 문제랑은 느낌이 다르다. 이제 본격적인 BOF 문제가 나오기 시작한다.


'System Hacking ( pwnable ) > hackerschool FTZ Write-up' 카테고리의 다른 글

[FTZ] level13 ( write - up )  (0) 2019.05.28
[FTZ] level12 ( write - up )  (0) 2019.05.28
[FTZ] level10 ( write - up )  (0) 2019.05.21
[FTZ] level9 ( write - up )  (0) 2019.05.21
[FTZ] level8 ( wirte - up )  (0) 2019.05.21