본문 바로가기

Bomb Lab

[Bomb Lab]Bomb Lab이란?

Bomb Lab은 컴퓨터 사이언스로 유명한 카네기 멜론 대학교에서 만든 실습 프로그램이다.

이 프로그램을 통해 디버거 사용법을 익히고 바이너리 분석을 연습해볼 수 있다.

 

폭탄을 터뜨리지 않고 안전하게 해체하는 컨셉으로, 총 6단계로 이루어져 있다.

각 단계에서 적절한 문자열을 입력하면 폭탄이 해체되고 다음 단계로 넘어간다.

적절한 문자열을 찾기 위해서는 디버거를 이용해 바이너리를 분석해야 한다.

 

아래 링크에서 프로그램을 다운받을 수 있다.

http://csapp.cs.cmu.edu/3e/labs.html

 

CS:APP3e, Bryant and O'Hallaron

Lab Assignments This page contains a complete set of turnkey labs for the CS:APP3e text. The labs all share some common features. Each lab is distributed in a self-contained tar file. You will need a CS:APP account to download the code. To untar foo.tar, t

csapp.cs.cmu.edu

표시한 부분을 클릭하면 bomb.tar 압축파일이 다운로드된다.

실습할 리눅스 환경에 해당 압축 파일을 다운로드한 뒤 압축을 푼다.

 

압축을 풀면

bomb, bomb.c, README 3개의 파일이 있다.

 

먼저 bomb.c를 열어보았다.

우리가 분석할 bomb의 원본 소스파일인데, 주석을 읽어보면서 문제가 어떻게 진행되는지에 대한 힌트를 얻을 수 있다.

6개의 phase함수가 있는 것을 확인할 수 있고,

각 phase마다 read_line(), phase(), phase_defused()가 반복되는 것을 확인할 수 있다.

read_line() 함수를 통해 해당 사용자에게 문자열을 입력받고, 입력받은 값은 phase함수에 전달된다.

phase함수를 무사히 종료하면 phase_defused() 함수가 실행되어 폭탄이 해체되는 것 같다.

 

파일이 들어있는 경로에서 터미널을 열고 gdb bomb을 입력해서 디버깅을 시작한다.

우선 disassemble main을 입력해서 main함수의 어셈블리 코드를 확인해보았다.

<main+141>지점부터 <main+299> 지점까지가 6단계의 폭탄 해체와 직접적으로 관련된 부분인 것 같다.

앞서 C코드에서 살펴본 바와 유사하게 <puts@plt>, <read_line>, <phase_n>, <phase_defused>가 반복되는 것을 볼 수 있다.

 

여기까지 bomb lab 프로그램의 전체적인 구조를 살펴보았다.

 

이제 본격적으로 phase_1부터 disassemble해서 바이너리를 분석하고 문자열을 찾아 폭탄을 해체해보자.

 

 

 

<실습 환경 참고>

가상머신: virtualbox

GuestOS: Ubuntu 22.04

디버거: pwndbg 플러그인 설치한 gdb

'Bomb Lab' 카테고리의 다른 글

[Bomb Lab] phase4  (0) 2024.05.10
[Bomb Lab] Phase3  (0) 2024.03.24
[Bomb Lab] Phase2  (0) 2024.03.24
[Bomb Lab] Phase1  (0) 2024.03.24