Format String Bug 정리
나중에 사용할 때를 위해 정리
링크
https://holinder4s.tistory.com/29
https://shayete.tistory.com/entry/5-Format-String-Attack-FSB
기본적인 내용
printf(buf)
같은 코드에서 buf에 포맷 스트링 형식을 넣었을 때 메모리 값이 출력되거나 특정 값이 들어가는 것을 의미
- 기본적으로 32-bit에서는 %x, 64-bit에서는 %lx를 통해 memory leak
- 다만, 64-bit는 일부 함수 파라미터를 레지스터를 통해 전달하기 때문에 7번째 부터가 stack의 값이 됨. => $rdi, $rsi, $rdx, $rcs, $r8, $r9 이후에 stack
- Memory write는 %hn, %n, %ln을 사용하며, 특정 주소에 앞까지 출력된 문자열의 길이만큼을 삽입함.
PAYLOAD 작성
- 주솟값이 들어가 있는 곳이 k번째라면, “%k$n”과 같이 작성가능 (32-bit의 경우)
- 출력한 문자열의 길이가 k라면, “%kx”와 같이 작성가능
ex) 32-bit에서 stack의 20번째 위치한 곳의 주소에 2000을 넣고 싶은 경우,
%2000x%20$n
과 같이 써주면 된다.
기타
- 64-bit에서
%s
로 메모리 leak을 시도해 보았는데, 왜인지 잘 되지 않음.. (다시 시도해보자.)