Pwnable

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로 덮어주고..

Pwnable/FTZ

FTZ - level16 [Buffer Overflow 𝜻]

LEVEL 16 [level16] passcode : about to cause mass (NO DRAG, NO PASSCODE) attackme.c 이라는 파일이 있지만 읽기 권한이 거부되어 있다. 그냥 attackme의 소스 코드인 것 같다. hint의 코드를 살펴보자. 새로운 오버플로우 문제이다. 문제 해결은 다음과 같다. fgets 함수에서 입력 받는다. 앞의 버퍼들을 다 채우고 fgets 함수가 종료되면 다음 call 함수가 호출되는데, 이는 printit 함수의 주소가 들어가 있다.(함수의 이름 = 그 함수의 주소) 따라서 *call의 메모리 영역을 shell 함수의 주소로 덮으면 마지막에 쉘이 실행될 것이다. 따라서 우리는 메모리 구조를 분석하고 shell 함수의 주소를 찾아야 한다. 먼저 ..

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