LEVEL 13
[level13] passcode : have no clue
(NO DRAG, NO PASSCODE)
또다시 attackme 프로그램이 존재한다. 힌트 가보자.
다시 오버플로우 문제인 것 같다. 코드를 살펴보자.
또다시 오버플로우 문제인 것 같다. gdb로 뜯기 전에 tmp 디렉토리에 attackme 프로그램을 복사해주자.
바로 메모리 구조를 살펴보자.
- 할당된 메모리 → (0x418 + 0x8) = 1056
- 예상되는 메모리 구조 → buf(1024) + dummy(12) + i(4) + dummy(8) + SFP(4) + RET(4) = 1056
buf의 시작 주소를 구해야 하므로, 우선 strcpy 함수가 호출된 다음인 main + 66 부분에 break point 를 걸어준다.
그리고 간단한 값을 넣어서 프로그램을 돌리고 buf의 주소를 찾아보자.
buf의 시작 주소는 0xbfffe4b0 임을 확인하였다.
또한 i의 값이 0x1234567 이어야 프로그램이 kill(0, 11) 함수를 포함한 반복문을 실행하지 않으므로 i 위치에 리틀 엔디언 방식으로 0x1234567 값을 넣어주면 된다.
- kill(pid_t pid, int sig)
- pid_t pid(시그널을 받을 프로세스 id) : 0(함수를 호출하는 프로세스와 같은 그룹에 있는 모든 프로세스에 시그널을 전송
- int sig(시그널 번호) : 여러가지가 존재, 보통 9(SIGKILL)를 사용, 이 문제에서는 11번인 SIGSEGV(segmentation 위반)
프로그램을 실행시키는 명령어 뒤에 적절한 인자를 넣어주면 되겠다. 다 비슷한 문제들이다.
이 문제도 역시 ASLR이 걸려 있어 buf의 주소를 적절히 증감시켜주면 머지않아 쉘이 따진다. my-pass를 입력하여 passcode를 얻자.
[level14] : what that nigga want?
'Pwnable > FTZ' 카테고리의 다른 글
FTZ - level15 [Buffer Overflow 𝜺] (0) | 2020.08.28 |
---|---|
FTZ - level14 [Buffer Overflow 𝜹] (0) | 2020.08.28 |
FTZ - level12 [Buffer Overflow 𝜷] (0) | 2020.08.28 |
FTZ - level11 [Buffer Overflow 𝛼] (0) | 2020.08.28 |
FTZ - level10 [Wiretapping] (0) | 2020.08.28 |