profile image

L o a d i n g . . .

팀원분들이 직접 제작하신 포너블 문제를 풀어보는 시간이다.

(한수님이 제작하신 문제들에 대한 롸업이다.)

 

1번 문제)

문제

보호기법 확인

 

바이너리를 실행한 모습

이름을 입력받고, 멘트를 출력한다.

플래그를 찾아야 될 듯 싶다.

 

ida로 까본 모습이다.

gets() 를 통해 입력을 받는데, bof 가 발생한다.

 

 

살펴보니 flag() 함수가 존재한다.

bof 를 통해서 ret 를 flag() 함수 시작주소로 변경해주면 될 것 같다!

 

 

문제 해결 과정

필요한 것들을 구해보자!

 

버퍼와 ret 간 offset : 108 byte

flag() 시작주소 : 0x8049182

 

페이로는 다음과 같을 것이다.

"A"*108 + 0x8049182

"A"*108 + 0x8049182

 

 

익스플로잇

"Hi! This is the first problem I made" 라는 플래그를 획득하였다!

 

 

2번 문제)

 

보호기법 확인

 

바이너리를 실행시킨 모습이다.

이번에도 flag 를 찾아야될 듯 싶다.

 

ida 를 통해 까본 모습이다.

 

data 영역에 전역변수로 선언된 flag 를 찾았다.

 

raw string 형태로 저장된 flag 의 멘트? string?을 찾았다.

 

데이터를 string 형태로 보니 flag 였다!!

 

 

3번 문제)

문제

보호기법 확인

 

바이너리를 실행하니 segmentaino falut 가 발생한다..!

 

ida 로 까본 모습이다.

1. getenv 를 통해 "FLAG" 라는 환경 변수 주소를 src(포인터)에 넣는다.

2. strcpy를 통해 dest에 src 를 복사한다. -> 이때 bof 가 터진다.

3. v5 값이 -559038737일 때 getFlag() 함수가 실행된다.

 

getFlag() 함수

우리 목표는 getFlag() 함수를 실행하는 것으로, bof 를 통해 v5 값을 변경하면 될 것이다.

-> "FLAG" 라는 환경변수를 만들어서 "A"*100 + -559038737 을 등록해주면 될 듯함.

 

 

문제 해결 과정

dest 의 위치 : ebp - 116

v5의 위치 : ebp - 16

-> offset : 100 byte

 

-559038737은 16진수로 0xdeadbeef 이다.

따라서 다음과 같이 환경변수를 등록해주면 된다.

환경변수 FLAG 등록

 

env 명령어를 통해 잘 등록되었는지 확인

 

 

익스플로잇

"Good!! You know env" 이라는 플래그를 성공적으로 획득하였다!!

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

[P4C] pwnable problem writeup3  (0) 2021.04.29
[P4C] pwnable problem writeup2  (0) 2021.04.29
[P4C] Pwnable problem 3 - writeup  (0) 2021.04.27
[P4C] Pwnable problem 3  (0) 2021.04.27
[P4C] Pwnable problem 1 - writeup  (0) 2021.04.10
복사했습니다!