LEVEL 12
[level12] passcode : it is like this
(NO DRAG, NO PASSCODE)
level11과 유사한 문제이다. 바로 힌트를 뜯어보자.
level11과 버퍼의 크기도 같으므로 메모리 구조도 다음과 같을 것이다. 정확성을 위하여 gdb를 이용하여 프로그램을 살펴보자. original attackme는 gdb 권한이 거부되어 있으니 프로그램을 tmp로 복사하여 뜯어보자.
역시나 동일했다. 메모리 구조는 다음과 같다.
- 할당된 메모리 → (0x108 + 0x8) = 272
- 예상되는 메모리 구조 → str(256) + dummy(8) + SFP(4) + RET(4) = 272
따라서 똑같이 str의 주소를 구하고 NOP를 이용하여 쉘을 따면 될 것 같다.
str의 시작 주소를 구해보자.
0xbfffe250 부터 0x41, 즉 A가 채워진 것을 보아 이것이 str의 시작 주소이다. 이제 문제를 해결하자.
- \x90을 계속 입력할 수는 없기 때문에 python 명령어를 통해 출력되게 한다. 그러나 이는 표준 출력이 아니다.
- cat 명령어는 입력을 받고 이를 표준 출력으로 출력 → python 명령어로 출력된 문자열을 cat 명령어의 입력으로 사용 → 다시 cat 명령어로 이를 표준 출력으로 출력
- 1과 2를 괄호로 묶어서 한번에 파이프를 통하여 오른쪽으로 넘겨주도록 한다. 여기서 파이프(' | ')는 왼쪽의 출력을 오른쪽의 입력으로 전해주는 기능을 한다.
level12에도 ASLR이 걸려있다. 한번에 쉘이 뜨지 않는다. 따라서 str의 주소값을 계속 증감시켜 쉘이 뜰 때까지 반복한다. 이 역시 나중에 RTL을 이용하여 ASLR을 우회할 것이다.
성공적으로 쉘을 얻었다. my-pass를 입력하여 passcode를 얻자.
[level13] : have no clue
'Pwnable > FTZ' 카테고리의 다른 글
FTZ - level14 [Buffer Overflow 𝜹] (0) | 2020.08.28 |
---|---|
FTZ - level13 [Buffer Overflow 𝜸] (0) | 2020.08.28 |
FTZ - level11 [Buffer Overflow 𝛼] (0) | 2020.08.28 |
FTZ - level10 [Wiretapping] (0) | 2020.08.28 |
FTZ - level9 [Buffer Overflow] (0) | 2020.08.28 |