call plt -> jmp got -> jmp _dl_runtime_resolve -> call _dl_fixup
메모리에 올려진 동적 C 라이브러리에서 특정 함수에 주소를 가지고 올 때의 루틴이다.
dynamic section에 존재하는 strtap 주소를 참고하여, strtap 내부에 있는 함수명의 문자열을 갖고 온다.
dynamic section + ? : strtap
strtap + offset(?) : "puts"
puts got = puts함수의 주소가 저장됨
이런 식이다.
그래서 만약 strtap에 쓰기 권한이 있어서 puts를 system으로 변경 한다면 system 함수의 주소가 puts got에 저장 된다.
하지만 strtap에 권한은 READ ONLY, 그래서 우리가 Overflow 할 부분은 dynamic section + ? 이다.
64bit 환경에서 strtap에 주소를 가지고 있는 부분은, dynamic+136 이다.
만약 dynamic+136 부분을 bss 영역으로 하고, bss+offset(for puts) 위치에 system이란 문자열을 두면 된다.
dynamic section + 136 : bss address
bss+0xb : "system"
(내 환경에서의 puts 문자열을 strtap+0xb에 있었다.)
puts got = system함수의 주소가 저장
'Pwnable' 카테고리의 다른 글
canary leak python code (0) | 2015.11.17 |
---|---|
TUM CTF Teaser 2015: greeter writeup (0) | 2015.11.03 |
tum ctf 2015 teaser - c0unter (0) | 2015.11.03 |
stdin@@GLIBC_2.0 (2) | 2015.10.06 |
pwnable.kr uaf (0) | 2015.09.29 |