ghkdtlwns987
[시스템] dl_fini 본문
pwnable.tw 문제를 푸는데, .fini 는 따로 정리를 안해서 정리만 간단히? 하도록 하겠다.
gdb로 프로그렘을 분석하다 본 사람들이면 __libc_csu_init() , .fini, .init 과 같은 함수들을 자주 봤을 것이다.
하지만 이게 무슨 함수인지 모르는 사람이 있다.
__libc_csu_init 은 rtc 로 exploit 할 수 있고 ,
.init 또한 주소를 변경해 exploit 할 수 있는데,
이번엔 dl_fini로 exploit 하는 방법을 언급하고자 한다.
dl_fini 를 보면 call 하는 부분이 있다.
call 하는 명령에서 r12의 주소가 스택상에 존재한다. -> bof 나 fsb 로도 exploit 할 수 있다.
코드를 따로 가져오긴 좀 귀찮으니 pwnable.tw, 3x17 파일을 가져오겠다.
다음을 보면 .fini 를 가져왔는데, 0x402960 -> 이 부분이 dl_fini 함수의 주소이다.
그리고 FUN_0x4b40f0 -> 이 주소가 fini 의 주소이다.
그런데, 여기서 중요한 점이 한가지 존재한다.
dl_fini 함수를 보면 do_while 문을 사용하고 있다.
코드를 보면 fini 에 인자로 2개의 값이 들어가는데,
첫번째 주소에 fini_array 를 내가 호출하고자 하는 주소를 넣어주고, 두 번째 주소에 main() 함수를 넣어주면
main 함수가 종료 된, 후, 내가 호출하고자 하는 주소가 호출이 되고, 다시 main() 으로 돌아간다.
이게 계속 도르마무 되므로 exploit 이 가능해진다.
=> 이를 통해 pwnable.tw 의 3x17문제를 풀 수 있다.
'시스템' 카테고리의 다른 글
[Vmware] 하드용량 늘리기 (0) | 2020.12.27 |
---|---|
RTL 원리 (Dummy 를 넣어주는 이유?) (0) | 2020.12.11 |
[시스템] 쉘 코드 모음 (0) | 2020.11.16 |
stdout 으로 libc leak (3) | 2020.11.10 |
FSOB(_IO_flush_all_lockp ) (0) | 2020.10.10 |