리턴 가젯과 Got overwrite을 이용해 푸는 문제이다
코드를 보면 buf에서 BOF가 발생한다.
코드 내 특정 함수에 got값에 system함수 주소를 overwrite하는 방법으로 풀이를 정리해보겠다
원래 puts함수에 got값을 overwrite하려 했으나 우분투 새 버전 부터 뭐가 바껴서 puts으로는 안 된다는 댓글을 봄..
write함수 이용
** 필요한 것들
1. 카나리 -> 생략
2. system 주소 -> libc주소와 libc내 system의 offset을 이용
3. libc 주소 -> 코드 내 함수들의 got, plt 값을 이용
4. 필요한 가젯들
*시나리오*
- 카나리 릭 -> buf에 특정값 대입
- libc주소 -> read의 got값을 인자로 write 함수의 plt 값을 이용해서 호출한 후 libc내 read의 주소를 출력하여 변수에 저장
-> 저장된 변수와 offset 차이를 이용
- system주소 -> libc주소와 system의 offset 이용
- 필요한 가젯들 : write, read함수 호출 하므로 pop_rdi, pop_rsi, pop_rdx 필요
카니리 릭
write함수 이용, read주소 릭
read의 got에 system함수 overwrite
read 재호출로 system함수 실행
전체 exploit
감격스럽다..
'System Hacking' 카테고리의 다른 글
[드림핵] basic_rop_x86 풀이 - 티스토리 (0) | 2023.07.22 |
---|---|
[드림핵] basic_rop_x64 풀이 - 티스토리 (0) | 2023.07.22 |
[드림핵] Return to Library 풀이 - 티스토리 (0) | 2023.07.19 |
[드림핵] ssp_001 풀이 - 티스토리 (0) | 2023.07.16 |
[드림핵] Return to Shellcode 풀이 - 티스토리 (0) | 2023.07.12 |