rtld overwrite
·
PWN/TIP
exit함수로 실행흐름을 바꾸는 방법이있다. FULL RELRO거나 PIE base는 모르지만 libc base는 알때 사용하기 좋은 공격 기법인 것 같다! main함수에서 ret를 하게 되면 __libc_start_main+231 로 간다. 그리고 exit함수를 호출하게 되는데 exit함수는 내부적으로 __run_exit_handlers -> _dl_fini -> _rtld_lock_lock_recursive(_dl_load_lock) 이런 실행 흐름을 가지고 있다. 따라서 _rtld_lock_lock_recursive를 system으로 바꾸고 _dl_load_lock을 sh로 바꾸면 쉘이 실행될 것이다. exit가 뭔가 하기에 참 좋은 함수인거 같다
Linux command
·
PWN/TIP
보호되어 있는 글입니다.
FMT
·
PWN/TIP
보호되어 있는 글입니다.
malloc_hook을 one_shot으로 덮었을 때
·
PWN/TIP
단순히 malloc_hook 덮고 원샷가젯 넣고 malloc 해도 쉘이 안 따질때가 있다!! malloc_hook을 덮었을 때 시도할만한 것 1. 그냥 malloc(1)같은걸 해본다. 2. double free를 트리거 시켜본다. malloc_printerr 가 내부적으로 strdup 함수를 실행 시키는데 이 strdup 함수는 malloc(3)를 진행하기 때문에 malloc_hook을 덮으면 hook이 실행된다는 것!!!
입력 함수 입력받지 못하는 값 정리
·
PWN/TIP
- scanf() * \x09, \x0a, \x0b, \x0c, \x0d, \x20 전까지만 받음 - gets * \x0a 전까지만 받음 * \x0a는 버퍼에도 들어가지 않는다. - fgets() * \x0a까지 입력받음. - read() * \x0a까지 입력받음 * 모든값 입력 가능
environ 으로 stack leak 하기!
·
PWN/TIP
pwnable.tw applestore를 풀때 얻었던 지식인데 까먹어서 다시 올린다! ㅠ 함수의 got 주소를 박아서 실제주소를 leak 할 때 마냥 leak을 하면 된다. 1. libc_base 주소를 구한다. 2. environ = libc_base + libc.symbols['environ'] 로 environ 의 실제주소를 구한다. 3. 구한 environ 을 libc leak 하듯이 출력함수의 인자값으로 줘 satck leak을 한다.