ghkdtlwns987

[시스템] dl_fini 본문

시스템

[시스템] dl_fini

2020/03/31 2020. 11. 18. 22:44

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
Comments