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 |