본문 바로가기

시스템해킹

[드림핵] Format String Bug 풀이

 

checksec으로 확인해보니 64bit

Full relro, nx, aslr, pie가 존재한다

 

 

 

 

 

 

문제코드

 

문제코드를 보면 반복문으로 buf를 0x20만큼 무한반복으로 값을 받아

printf함수로 buf원형을 출력한다 그리고

changeme변수가 1337일시 flag를 획득할 수 있다

printf부분에서 fsb이 발생할 수 있고 이를 활용해 changeme를 1337로 변환시키면 되겠다

이를 위해서 changeme주소 변환시킬 구역 그리고 pie_base가 필요하다

 

 

 

 

 

 

 

문제 풀이 과정

1. 디버깅

2. pie_base주소 구하기

3. payload 작성

4. 실행

 

 

 

 

 

1. 디버깅

printf부분(b* main+76)에 bp걸고 다른부분들 확인하면 되겠다

 

 

 

 

 

 

2. 주소 구하기

우선 함수 호출 규약을 보면 저렇게 나오는데 vmmap으로 바이너리 시작부분값을 보고 rsp값을 확인해보자

 

 

 

vmmap으로 확인했을 때 rsp+0x48쪽에 값이 vmmap사이에있는 값인것을 알았다

따라서 이값들로 pie_base값을 구할 수 있겠다.

그러면 전역변수 changeme 주소도 구할 수 있다.

 

 

 

 

3. payload 작성

 

rsp+0x48값은 호출규약으로 15번째에 있어 %15$p로 읽어온다

payload는 change주소에 값을 1337로 변환하는 것이다

공백을 1337만든뒤 %n으로 넘겨주면 되는데 8$ 사용한 이유는 

payload에 있는 changeme주소를 가르켜주기 위함이다.

ljust는 길이를 맞추기 위해 해준것이다.

 

 

 

 

4. 실행

 

 

 

 

 

 

 

 

풀이 실패과정

1. pie관련해 자세하게 생각하지 못했다 libc개념을 생각했으면 빨랐을텐데..

2. payload넣는 부분에서 8$로 changeme 주소를 가르켜주는 부분이 헷갈려서 문제가 생겼다.

'시스템해킹' 카테고리의 다른 글

[드림핵] basic_exploitation_003 풀이  (0) 2024.05.27
[드림핵] basic_exploitation_002 풀이  (0) 2024.05.27
[드림핵] out_of_bound 풀이  (0) 2024.05.20
[드림핵] hook 풀이  (0) 2024.05.19
[드림핵] oneshot 풀이  (0) 2024.05.19