FTZ (Free Training Zone) level13
1. 환경 : window10
2. VM, Red Hat Linux 9.0, putty
id : level13
pw : have no clue
1. cat hint 를 사용하여 힌트를 확인합니다.
2. 코드를 분석해보면 long I =1234567 이 저장되어 있고
Char형 buf[1024]가 저장되어있고 argc>1일 때 버퍼에 argv[1]가 버퍼에 복사됩니다.
i가 0x1234567값이 아니면 경고를 띄우고 프로그램을 종료시킵니다. (0,11)
3. Gdb를 확인하여 stack구조를 확인합니다.
분석을 해보면 스텍의 총 크기는 1048byte 이다. + ebp 4 = 1052 이다.
리턴 어드레스를 덮어야 하지만 덮는 과정중에 i 를 침범한다. 그러면 프로그램이 종료 되는데 그것을 방지하기 위하여 i의 값이 침범될 때 i의 값을 넣어주면 된다.
그럼 i의 값이 들어있는 스텍 위치를 알아야하는데 그것은 (GDB에서 cmp)if 문에서 비교할 때 확인 할 수 있습니다. 즉 , cmp가 적힌 곳을 보면 ebp-12의 위치로부터 위? 칸과 0x1234567을 비교하라 라고 적혀있다 이것으로 i의 위치를 찾을 수 있었습니다.
4. 환경변수를 만드는 것은 11번과 12번 과 동일합니다.
5. 계산 법
리턴 어드레스 전까지 덮어야 하는 버퍼의 총 크기는 1052
Ret(4byte)
Ebp (4byte)
어떤 값 (12byte)
Ebp -12 (i) (4byte)
어떤 값 (1036byte)
i 전 까지의 stack =1048-12 =1036 + i (4byte)+ 12stack =1052
+환경변수의 주솟값
'Study > ftz' 카테고리의 다른 글
FTZ level14 (0) | 2016.07.12 |
---|---|
buffer over flow 필독 자료 (0) | 2016.07.12 |
FTZ level12 (0) | 2016.07.12 |
FTZ level11 (0) | 2016.07.12 |
FTZ level10 (0) | 2016.06.23 |
댓글