본문 바로가기

시스템해킹

[드림핵] hook 풀이

문제를 보면 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