Profile

머리정리하는곳

c2w2m2

malloc_hook => free get shell

개쩔었다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


secret of my heart 풀면서 운으로 발견했는데 ㄹㅇ루다가 어리둥절 하면서 중간에 호출된 memset 과 free 를 분석해봤다.


memset 은 딱히 뭔가 없었다.


문제는 바로 free 였다.


엔터만 진짜 몇백번 친거 같은데, 중간에 _dl_catch_error 라는 함수로 들어갔다. ( pwntw 64bit libc 기준 offset : 0x142a6e )


함수명으로 보아서 free 상 에러가 뜨면 들어가는 함수인거 같았다. 실제로 free 인자를 보았을때 에러가 났을 인자이다.


이 함수의 108 번째 줄을 보면 r9 를 call 한다.


이때 r9 를 따라가 보면 또 [rax + 0x140] 을 call 하는데


이때는 _dl_open 이라는것이 call 된다.


여기서 골때리는게 이 함수 중간에 _dl_catch_error 가 한번 더 call 된다ㅋㅋㅋㅋ....


따라 들어가 주자.


여기서 call r9 지점을 다시 가주면, 이번엔 _dl_open_worker 라는게 call 된다.


이안에서 _dl_check_caller 가 call 되는데 이건 무시.


그다음 call 되는 strchr 도 무시.


_dl_find_dso_for_object 도 무시.


_dl_debug_initialize 까지 무시하고 나면,


_dl_map_object 가 나오게 된다.


이 안으로 들어가 주자.


_dl_name_match_p는 무시하고,


이안에 또 _dl_load_cache_lookup 가 있다. 들어가 주자.


_dl_sysdep_read_whole_file, _dl_cache_libcmp 를 무시해주면


strdup 이 나온다... 이거 때문에 쉘이 따인다.....


결국 이 장황한 결과는 strdup 이 쓰이기 때문에 일어난다. 뭔가 멋지게 _dl 머시기 에서 할줄 알았는데 아니였다.


그래도 malloc_hook 덮고 free 로 쉘딸수 있다는거의 중점을 두자,,,, 윽 허무해



요약 :


free => _dl_catch_error => _dl_open => _dl_catch_error => _dl_open_worker => _dl_map_object => _dl_load_cache_lookup => strdup => malloc => get shell




'Today' 카테고리의 다른 글

게스트북을 만들고있따  (0) 2018.03.17
Github page 도메인  (0) 2018.03.15
House of spirit & fastbin dup  (0) 2018.02.21
문제  (0) 2018.02.19
pop rbp => leave ret  (1) 2018.02.11