본문 바로가기

Pwnable

strtap address overflow


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