Pwnable

Pwnable/FTZ

FTZ - level15 [Buffer Overflow 𝜺]

LEVEL 15 [level15] passcode : guess what? (NO DRAG, NO PASSCODE) hint의 코드를 분석해보자. 이번 문제는 level14와 아주 유사하지만 check 변수가 포인터 변수로 바뀐 것을 볼 수 있다. level15 에서는 다음과 같이 해결한다. check 부분에 0xdeadbeef 값을 직접 입력해주는 것이 아니라 0xdeadbeef 값이 들어있는 주소 자체를 넣어주어야 한다. if 문 조건식의 check → check에 주소를 넣어주게 되면 간접참조연산자(*)가 이 주소값 안에 있는 값을 읽어올 것이다. 이 주소에는 0xdeadbeef 가 들어있기 때문에 if 문을 pass 한다. attackme 프로그램을 tmp로 복사하고 gdb를 이용하여 뜯어보자. ..

Pwnable/FTZ

FTZ - level14 [Buffer Overflow 𝜹]

LEVEL 14 [level14] passcode : what the nigga want? (NO DRAG, NO PASSCODE} hint의 코드를 분석해보자. 일반적인 버퍼 오버플로우 문제이다. 바로 gdb를 이용하여 attackme 프로그램을 뜯어보자. 할당된 메모리 → (0x38 + 0x8) = 64 예상되는 메모리 구조 → buf(20) + dummy(20) + check(4) + dummy(8) + crap(4)+ SFP(4) + RET(4) = 64 그러나 이 문제는 ret을 덮을 필요는 없다. 그냥 check = 0xdeadbeef 이면 system 함수로 쉘이 실행되기 때문에 check의 위치에 0xdeadbeef 를 넣어주면 된다. 바로 쉘이 따졌다. my-pass 를 입력하여 pass..

Pwnable/FTZ

FTZ - level13 [Buffer Overflow 𝜸]

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 를 걸어준다. 그리고..

Pwnable/FTZ

FTZ - level12 [Buffer Overflow 𝜷]

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의 시작..

Lucvs
'Pwnable' 카테고리의 글 목록 (12 Page)