hacking/pwnable

hacking/pwnable

hook overwrite

hook overwrite 기법은 malloc, free, realloc 함수가 호출될 때 사용되는 변수인 hook 변수를 이용해 exploit을 하는 기법이다. // __malloc_hook void *__libc_malloc (size_t bytes) { mstate ar_ptr; void *victim; void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook); // malloc hook read if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); // call hook #if USE_TCACHE /* int_free also c..

hacking/pwnable

patchelf

wargame을 풀다가 libc.so.6 파일도 같이 받은 적이 있을 것이다. 해당 파일은 서버에 있는 라이브러리 파일로 서버마다 해당 파일이 달라서 offset이 다른 경우가 있어 exploit할 때 어려움이 생긴다. 또한 libc.so.6 파일의 버전에 따라 취약점도 달라지게 된다. 그렇기 때문에 다운로드한 binary에 libc.so.6을 새로 연결해야 된다. pwntools 연결하는 방법은 원래는 pwntools를 이용하면 코드 한 줄로 간단하게 사용이 가능했다. 이는 환경변수인 LD_PRELOAD를 이용한 방법인데 만약 libc.so.6과 loader의 버전이 차이가 많이 나면 아래와 같은 에러가 출력되면서 실행이 되지 않는 문제가 발생했다. Inconsistency detected by ld...

hacking/pwnable

x64 stack alignment

dreamhack에 있는 CTF 문제를 풀다가 아래와 같은 부분에서 코드가 터졌다. movaps XMMWORD PTR [rsp+0x50], xmm0 이유를 살펴보니 ubuntu 18.04부터 do_system()에 위와 같은 코드가 추가되어서 stack alignment를 지켜주지않으면 코드가 터지는 것이였다. x64 Stack Alignment stack alignment란 stack의 top이 16의 배수로 유지된 상태이다. 메모리의 access cycle을 최소한으로 줄이기 위해 사용한다. 여기서 stack의 top은 rsp 레지스터를 뜻하고 stack alignment를 유지하기 위해 rsp의 위치가 정해진다. 간단하게 말하자면 아래와 같다. call 실행 직전 rsp는 16의 배수 ( stack..

hacking/pwnable

GLIBC 2.29

해당 페이지는 dreamhack.io 사이트의 강의를 참고해 정리하고 이해못한 내용을 추가로 작성해둔것이니 참고사이트의 사이트를 참고하시기바랍니다. glibc 2.26 버전에서는 tcache에 대한 검증이 제대로 이루어지지 않았기 때문에 보안에 취약했다. 하지만 glibc 2.29 버전 이후로 tcache에 대한 검증이 이루어지면서 보안이 강화되었다. 또한 그 외에도 다양한 취약점을 개선하였다. tcache_put & tcache_get tcache를 관리하는 tcache_entry 구조체와 tcache_put, tcache_get 함수에 Double Free 검증에 사용될 코드가 추가되었다. // GLIBC 2.29 typedef struct tcache_entry { struct tcache_entr..

hacking/pwnable

tcache

해당 페이지는 dreamhack.io 사이트의 강의를 참고해 정리하고 이해못한 내용을 추가로 작성해둔것이니 참고사이트의 사이트를 참고하시기바랍니다. glibc는 계속해서 업데이트가되고 있다 아래의 내용은 glibc 2.26 버전의 내용이고 glibc 2.29부터는 달라지게 된다. tcache는 glibc 2.26 버전 이상부터 적용된 기술이다. tcache는 Thread local caching)의 약자로 멀티 스레드 환경에서 메모리 할당 속도를 높이기 위해 적용되었다. 그렇기 때문에 보안이 취약하다. 우선 malloc 함수를 통해 동적 할당 요청이 들어오면 __libc_malloc 함수가 호출된다.__libc_malloc 함수는 MAYBE_INIT_TCACHE 매크로를 호출하여 tcache_init 함..

hogbal
'hacking/pwnable' 카테고리의 글 목록 (3 Page)