문제를 보면 64bit relro, canary, nx 보호기법이 걸려있다
문제파일
문제를 보면 stdout 주소를 출력하는데 이를 활용해 libc offset을 구할 수 있겠다
이문제는 free(ptr)이 있기에 free_hook을 사용할 것이다
35 라인을 보면 ptr주소안에 값을 ptr에서 8바이트 다음 8바이트로 덮는것을 알 수 있다
따라서 ptr에 순서대로 free_hook과 원가젯을 넣는다면 free가 실행될 때
원가젯이 실행될 것이다.
문제 풀이 과정
1. hook 디버깅
2. main stack frame 작성
3. 원가젯 찾기
4. payload 작성
5. 실행
1. 디버깅
디버깅에서 start 후 print한것이다
symbols[]안에 저 stdout을 넣으면 되겠다.
disassemble main
2. main stack frame 작성
디버깅한것을 보고
3. 원가젯 찾기
one_gadget ./libc-2.23.so
이를 다 넣어볼 것이다
4. payload
문제파일에서 설명한것과 똑같이 만들었다
stdout 주소를 받아 offset을 구한뒤 free hook과 원가젯을 구하고
str에 순서대로 8바이트씩 free hook과 원가젯을 보낸다
p64와 u64는 안에 값이 8바이트 씩 있어야 실행한다
5. 실행
풀이 실패 과정
1. free가 나와있어 hook을 사용해야할 것 같긴 했는데
문제파일 34라인이 좀 헷갈렸다
2. 전에도 했던 실수인데 size입력을 하는 부분에서 문자열로 안보내고 이상하게
보내서 문제가 생겼다. 이걸로 좀 고생한듯
'시스템해킹' 카테고리의 다른 글
[드림핵] Format String Bug 풀이 (0) | 2024.05.27 |
---|---|
[드림핵] out_of_bound 풀이 (0) | 2024.05.20 |
[드림핵] oneshot 풀이 (0) | 2024.05.19 |
[드림핵] fho 풀이 (0) | 2024.05.19 |
[드림핵] basic_rop_x86 풀이 (0) | 2024.05.13 |