Pwnable/FTZ

FTZ - level18 [Buffer Overflow 𝜽]

2020. 8. 28. 13:14
목차
  1. LEVEL 18

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(100) |

——————————

| check(4) |

——————————

| x(4) |

——————————

| count(4) |

——————————

| dummy(140) |

——————————

| fds(4) |

—————————— Low Address

 

  1. 먼저 데이터를 입력할 때에는 낮은 주소부터 들어간다.
  2. 기존의 문제에서는 buf가 제일 낮은 주소에 존재하여 선언된 배열의 크기기를 초과하여 데이터를 입력해 그 윗주소에 있는 변수들까지 덮는 과정으로 해결하였다.
  3. level18에서는 string이 제일 윗주소에 존재하기 때문에 기존의 방법으로는 해결할 수 없다.
  4. 따라서 string[n] 에서 n < 0 일 때, check로 넘어갈 것이다. (아래 그림 참고)

—————————————— High Address

| string[-4] = check[0] |

——————————————

| string[-3] = check[1] |

——————————————

| string[-2] = check[2] |

——————————————

| string[-1] = check[3] |

——————————————

| string[0] |

——————————————

| string[1] |

——————————————

| string[2] |

——————————————

| … |

——————————————

| string[100] |

—————————————— Low Address

 

이를 염두해두고 다시 소스코드로 넘어가보자.

 

switch(x)
{
	case '\r': //입력받은 x가 \r 일 때
  case '\n': //입력받은 x가 \n 일 때
	  printf("\a"); //출력하고 break
	  break;
  case 0x08: //입력받은 x가 \n 일 때
    count--; //count = count - 1
    printf("\b \b"); //출력하고 break
    break;
  default: //입력받은 x가 \n 일 때
    string[count] = x;
    count++; //count = count + 1, break
    break;
}

 

이 swtich-case 문에서 보면, 입력값, 즉 x가 0x08 이면 count - 1 이 되기 때문에 count = 0 인 초기 상태에서 0x08을 4번 입력해주면 count = -4가 된다.

 

이때 여기부터 0xdeadbeef를 리틀 엔디언 방식(\xef\xbe\xad\xde)으로 입력해준다면 차례대로 check[3], check[2], check[1], check[0]에 저장되어 결국 shellout 함수가 호출될 것이다.

 

따라서 payload는 다음과 같다.

→ “\x08”*4+”\xef\xbe\xad\xde”

 

이제 쉘을 따보자.


[level19] : swimming in pink

저작자표시 (새창열림)

'Pwnable > FTZ' 카테고리의 다른 글

FTZ - level20 [Format String Bug]  (0) 2020.08.28
FTZ - level19 [Buffer Overflow 𝜇]  (0) 2020.08.28
FTZ - level17 [Buffer Overflow 𝜼]  (0) 2020.08.28
FTZ - level16 [Buffer Overflow 𝜻]  (0) 2020.08.28
FTZ - level15 [Buffer Overflow 𝜺]  (0) 2020.08.28
  1. LEVEL 18
'Pwnable/FTZ' 카테고리의 다른 글
  • FTZ - level20 [Format String Bug]
  • FTZ - level19 [Buffer Overflow 𝜇]
  • FTZ - level17 [Buffer Overflow 𝜼]
  • FTZ - level16 [Buffer Overflow 𝜻]
Lucvs
Lucvs
Department of Computer Science and Engineering, 21th, Sungkyunkwan University
Lucvs
Lucvs
Lucvs
전체
오늘
어제
  • 분류 전체보기
    • Lucvs
      • 훈련소 일기
      • 寿司
      • 영국 여행기
    • Pwnable
      • Techniques
      • FTZ
      • LOB
      • HackCTF
      • Dreamhack
      • pwnable.kr
      • CTF
    • Web Hacking
      • Techniques
      • Webhacking.kr
      • HackCTF
      • Dreamhack
      • LOS
    • Reversing
      • Dreamhack
    • Cryptography
      • Modern Cryptography
      • Algorithm
      • Differential Attack (차분 공격)
      • Linear Attack (선형 공격)
    • Forensic
      • Dreamhack
    • Programming
      • C
      • Python
      • Java
    • Deep Learning
    • Network
    • Project
    • Hardware
      • Raspberry Pi
      • Arduino

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 일기
  • Lord of SQL Injeciton
  • dreamhack.io
  • 웹해킹
  • dreamhack
  • 여행기
  • 군대
  • 군대 일기
  • SQL INJECTION
  • 기훈단
  • 효전화
  • rev-basic
  • Web Hacking
  • lord of sql injection
  • 차분 분석
  • 차분 공격
  • 훈련소
  • 훈련소 일기
  • 런던
  • 기본군사훈련단
  • J
  • 공군 훈련소
  • blind sql injection
  • Los
  • 드림핵
  • 공군
  • Differential Attack
  • 영국
  • 잉글랜드
  • Error-Based SQL Injection

최근 댓글

최근 글

hELLO · Designed By 정상우.
Lucvs
FTZ - level18 [Buffer Overflow 𝜽]
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.