FTZ (Free Training Zone) level11
1. 환경 : window10
2. VM, Red Hat Linux 9.0, putty
id : level11
pw : what!@#$?
ftz 11번 부터는 stack bof문제입니다.
저는 환경변수를 사용 할 것입니다. 왜냐하면 lob에서
인자 값에 쉘코드를 넣는 것이 나오기 때문에 ftz에서는
환경변수를 다루겠습니다.
1. Cat hint 를 사용하여 힌트를 확인합니다
2. 코드를 분석한다.
Attackme 라는 프로그램에 인자를 전달 합니다
캐릭터형 str[256]의 크기는 256
Setreuid
Strcpy (str,argv[1])); argv[1]의 값을 str에 복사합니다
3. Strcpy의 글자수를 제한해서 받지못하는 취약점을 이용해봅시다
4. Gdb를 이용하여 attackme를 확인한다.
일단 스텍의 총 크기는 0x108 == 264byte 입니다
그러면 ret를 덮어씌어야 하는데 일단 264바이트를 채우고 그 위에 ebp (4byte)공간을 채우고 바로 위에 있는 ret를 덮어씌워야 합니다.
스텍의 구조
Ret
Ebp공간 (4byte)
나머지 스택 (264byte)
즉, ret까지 도달하기 위한 버퍼의 길이 268이다
5. 쉘코드를 실행시키는 환경변수를 만들어줍니다.
(환경변수 만들기 export (이름)=(파이썬사용)
"\x90"은 뒤에아무것도 실행하지 않고 마지막에 있는 쉘코드를 실행합니다. 사용하는 이유는 주솟값의 오차가 있기 때문에 오차를 무시하기 위해서 사용합니다.
6. 환경변수의 주솟값을 찾아야하므로 주소를 출력해주는 프로그램을 만든다.
(/home/level11에서 만들 수 없으므로 cd /tmp로 이동하여
프로그램을 만들었습니다.)
gcc 를 이용하여 컴파일 한후 프로그램을 실행한다.
7. Stack 을 268까지 채우고 쉘코드를 실행하는 환경변수의 주솟값을 넣 어준다. (환경변수의 주솟값 bfffe6f)
'Study > ftz' 카테고리의 다른 글
FTZ level13 (0) | 2016.07.12 |
---|---|
FTZ level12 (0) | 2016.07.12 |
FTZ level10 (0) | 2016.06.23 |
FTZ level9 (0) | 2016.06.22 |
FTZ level8 (0) | 2016.06.22 |
댓글