F.T.Z - Level9

2019. 8. 20. 17:05·해킹 실습/해커스쿨 - F.T.Z

ID : level9

password : apple

 

1) 역시나 hint 내용을 읽어보니 소스 코드가 나왔다.

2) 역시나 setuid 가 걸려있는 파일도 해당 파일이다.

그럼 

/usr/bin/bof

파일에 대한 내용을 확인해보자 

 

3) it can be overflow : 

라는 문구가 나왔다. 그 전에, 해당 소스 코드를 분석하도록 하자

 

1. 입력받은 문자열의 40 만 받아 온다.

2. 여기서 10 크기만큼만 buf[버퍼] 에 내용이 담긴다

3. buf2[버퍼2] 의 처음 2글자가 "go" 라면, 사용자와 그룹권한을 level10 으로 바꾸고, 프롬프트와 쉘을 출력하게 한다

 

 

코드를 해석해보니 어떻게 풀면 되겠는지 느낌이 왔다.

BOF - 버퍼오버플로우 공격이다.

 

buf 는 10글자만 받아 들이지만, 이를 초과할경우 흘러 넘쳐

자연스레 buf2에 들어가게 될것이고, 처음 두 글자가 go 가 되면 말그대로 권한이 뚫리게 되는 문제이다.

 

해당 코드가 공개되어 있으니 해당 코드를 복사하여 새로운 파일을 만들어 보자 

4) 관리자 권한으로 파일 생성이 막혀있다.

그럼 임시파일을 저장하는 cd tmp 로 이동하여 파일을 생성해 보자

 

5) 프로그램 코드 작성을 완료 했으면 Ctrl + d 를 동시에 입력하여 저장한후 컴파일을 한다.

 

6) 프로그램 컴파일이 완료 되었다. 

버퍼 오버플로 공격을 이행하기 위하여, 해당 코드를 어셈블리어를 확인하기위해

gdb 명령어를 사용하여 어셈블리어로 변환해 보자

 

7) gdb 프로그램명 

을 입력한후 , disas main 을 추가 입력하여 

main 함수에 대한 내용을 살펴보도록 하자.

 

8) 빨간색 박스를 보면 buf , buf2 의 변수가 할당되는 것을 볼수있고, 

이러한 변수가 저장되는 주소인

0x0804844e  - Buf

0x08048464 - buf2

임을 알수 있다. 16진수의 표현이기 때문에 이를 변환하여 그 차이를 계산하면

16이 된다.

중간에 표시된 파란 박스는 예측하건데 dummy가 들어가는 공간으로 추측할수 있을것이다.

즉, 쓰레기값이 들어가는 공간이므로 무시하고 buf2 와 buf1 의 차이인 16자리를 채우고, 

buf2 가 시작되는 주소부터 go 를 입력되게 하면 

level10의 권한을 얻을수 있을것이다.

 

9) 16자리를 아무 문자나 채우고 go 를 입력하니

Good Skill! 이라는 문구와 함께

level10의 권한을 획득 하게 되었다.

 

비밀번호를 알아내기 위해 my-pass 를 입력하면

 

10) level10의 비밀번호가 출력되었다

"interesting to hack!"

 

BOF 공격에 대한 문제이므로 

달고나문서의 버퍼 오버플로우 공격 문서를 참조하면 이해가 쉽게 될것이다.

 

저작자표시 (새창열림)
'해킹 실습/해커스쿨 - F.T.Z' 카테고리의 다른 글
  • F.T.Z - level11
  • F.T.Z - level10
  • F.T.Z - level8
  • F.T.Z - level7
Jeohong
Jeohong
기억 보단 기록을
  • Jeohong
    Chikong Devlog
    Jeohong
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • ---- 개발 컨텐츠 ---- (0)
      • iOS (30)
        • Swift 문법 (1)
        • iOS 개념 (12)
        • HIG (5)
        • SwiftUI (7)
        • UIKit (4)
      • Side Project (0)
      • 개발서적 (4)
        • 객체지향 사실과 오해 (4)
      • 알고리즘 (74)
        • 자료구조 개념 (2)
        • Swift (25)
        • JavaScript (47)
      • ---- 회고 계획 컨텐츠 ---- (0)
      • 계획 및 일기 (10)
      • 회고록 (1)
      • 컨퍼런스 탐방 (1)
      • 미드로 영린이 탈출하기 (1)
      • ---- Previous content ---- (0)
      • Frontend (2)
        • HTML & CSS (2)
      • KITRI 수업 (17)
        • 리눅스 (14)
        • 네트워크 (2)
      • 42seoul (17)
        • Bonr2code (9)
        • 넋두리 (7)
        • 멘토특강 (1)
      • 해킹 실습 (20)
        • 해커스쿨 - F.T.Z (19)
        • WebGoat (1)
      • Tensorflow로 시작하는 NLP (1)
        • 예제 (1)
      • 자연어처리 입문 (1)
        • 이론 (1)
      • 텐서플로로 배우는 딥러닝 (7)
        • 이론 (2)
        • 예제 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javascript
    본과정
    SwiftUI
    코딩
    프로그래머스
    IOS
    hig
    swift
    네트워크
    라피신
    스위프트
    1서클
    boj
    알고리즘
    백준
    개발자
    42서울
    자료구조
    Algorithm
    42seoul
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jeohong
F.T.Z - Level9
상단으로

티스토리툴바