Pwnable/FTZ

Pwnable/FTZ

FTZ - level20 [Format String Bug]

LEVEL 20 [level20] passcode : we are just regular guys (NO DRAG, NO PASSCODE) hint 의 코드를 분석해보자. 우선 메모리 구조를 살펴보자. main 함수 부분의 symbol 이 날라가서 gdb로 분석을 할 수 없다. 코드 마지막 줄에서 printf(bleh) 라는 형식으로 출력을 하게 하는데, printf 함수는 원래 printf("%d", a) 처럼 %d 라는 서식 문자를 사용하여야 한다. 여기서 발생하는 취약점이 바로 포맷 스트링 버그(FSB) 이다. printf(bleh) -> bleh에서 bleh라는 배열에 일반 문자열이 있다면 아무 문제 없이 출력 되지만, 배열 안에 서식문자(%x, %c, %s 등)가 있다면 buf 배열의 시작 주소..

Pwnable/FTZ

FTZ - level19 [Buffer Overflow 𝜇]

LEVEL 19 [level19] passcode : swimming in pink (NO DRAG, NO PASSCODE) hint의 소스코드를 분석해보자. 그리 어렵지 않은 소스코드이다. 이 문제는 level11과 아주 유사한 구성을 가지고 있지만 setreuid 함수가 존재하지 않아 쉘코드만 삽입하여 실행하면 그저 level18 권한의 쉘만 따질 것이다. 우선 tmp 디렉토리에 attackme 프로그램을 복제해주고, gdb를 통하여 attackme 프로그램의 메모리 구조를 살펴보자. 메모리 구조는 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ← ebp | dummy(20) | —————————— | buf(2..

Pwnable/FTZ

FTZ - level18 [Buffer Overflow 𝜽]

LEVEL 18 [level18] passcode : why did you do it (NO DRAG, NO PASSCODE) 이전 문제들과 동일하다. hint의 코드를 분석해보자. gdb를 이용하여 attackme의 메모리 구조를 분석해보자. 상당히 길다. 하지만 우리는 필요한 정보만 얻으면 된다. 할당된 메모리 → (0x100 + 0x8) = 264 예상되는 메모리 구조 → fds(4) + dummy(140) + count(4) + x(4) + check(4) + string(100) + SFP(4) + RET(4) = 264 메모리 구조는 다음과 같다. —————————— High Address | ret(4) | —————————— | sfp(4) | —————————— ← ebp | string..

Pwnable/FTZ

FTZ - level17 [Buffer Overflow 𝜼]

LEVEL 17 [level17] passcode : king poetic (NO DRAG, NO PASSCODE) 이 문제에서는 level16과는 다르게 shell 함수가 선언되어 있지 않다. 따라서 shellcode를 export 해주고 이 주소를 call에 덮어야 할 것 같다. 우선 attackme 프로그램을 tmp 디렉토리에 복사해주고, gdb를 이용하여 메모리 구조를 살펴보자. 할당된 메모리 → (0x38 + 0x8) = 64 예상되는 메모리 구조 → *buf(20) + dummy(20) + call(4) + dummy(4) + crap(4) + dummy(4) + SFP(4) + RET(4) = 64 메모리 구조는 level16과 동일하다. buf + dummy = 40 만큼 NOP로 덮어주고..

Lucvs
'Pwnable/FTZ' 카테고리의 글 목록