Pwnable/Tech

Pwnable/Tech

poison_null_byte

먼저 Poison NULL Byte 의 경우 Off by one 에 기원을 둔 heap 취약점이다. 간략하게 이 취약점에 대해 정리하자면, 이미 할당된 heap chunk 를 새로 할당받는 heap 의 공간에 포함시켜 새로운 값으로 덮여 쓸 수 있는 취약점이다. #include #include #include #include #include int main() { printf("Welcome to poison null byte 2.0!\\n"); printf("Tested in Ubuntu 14.04 64bit.\\n"); printf("This technique can be used when you have an off-by-one into a malloc'ed region with a null byt..

Pwnable/Tech

house_of_spirit

house_of_spirit #include #include int main() { printf("This file demonstrates the house of spirit attack.n"); printf("Calling malloc() once so that it sets up its memory.n"); malloc(1); printf("We will now overwrite a pointer to point to a fake 'fastbin' region.n"); unsigned long long *a; // This has nothing to do with fastbinsY (do not be fooled by the 10) - fake_chunks is just a piece of memor..

Pwnable/Tech

FSOP - glibc 2.35 에서 FSOP 하는 법(feat. House of apple )

제목처럼 glibc 2.27 일부 라이브러리 부터 생긴 IO_str_overflow, finish 등에서 callback 포인터를 없애서 FSOP 를 못하고 있었는데, 찾아보니 매우 다양한 시각으로 FILE 구조체를 접근하여 FSOP를 시도할 수 있다는 것을 알게되었다. 그 중 House of apple 이라는 녀석이 매우 매력적이였는데, 이는 잘만 FILE 구조체를 수정하면 한번의 수정만으로 (하나의 읽기 쓰기가 가능한 메모리 공간, 주소만 있으면 됨) 익스가 되기때문이다. --> 이에 대한 내용으로 제 26회 해킹캠프에서 포너에게 조금이나마 도움이 되기위해 발표했었기 때문에 이 기법에 대한 자세한 설명은 생략하도록 하겠다. (궁금한게 있는 사람은 댓글 달아주시면 보충 설명해주는 글을 포스팅 하겠습니다..

Pwnable/Tech

.init_array && .fini_array

배경지식 ELF는 GOT를 활용하여 반복되는 라이브러리 함수의 호출 비용을 줄인다. 이때 GOT에 값을 쓰게 되는데, 그 중 처음 호출 될떄 함수의 주소를 구하고, 이를 got에 적는 Lazy Binding 방식이 있다. 이때 Lazy Binding의 특성 상 GOT를 실시간 업데이트(실행 중) 해야하므로, GOT에 쓰기 권한이 부여되는데, 이는 GOT를 변조 시킬 수 있는 취약점으로 연계될 수 있다. .init_array && .fini_array ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array, .fini_array가 존재하고 이 영역들은 프로세스의 시작과 종료에 실행할 함수의 주소를 저장하고 있다. 이때 이 주소값을 임의의 값을로 덮어 쓴다면 어떻게 될까? 답은..

Pwnable/Tech

Tcache dup / glibc 2.26

Tcache dup / glibc 2.26 tcache는 Double Free와 같은 버그의 검증이 존재하지 않아 fastbin 등과 같은 다른 bin에서의 공격의 난이도가 훨씬 낮다. tcache dup은 Double Free 버그를 이용하여 tcache_entry 를 조작해 이미 할당된 메모리에 다시 힙 청크를 할당하는 공격기법이다. #if USE_TCACHE { size_t tc_idx = csize2tidx (size); if (tcache && tc_idx counts[tc_idx] < mp_.tcache_count) { tcache_put (p, tc_idx); return; } } fastbin dup 에서는 이전에 해제된 청크인 old 와..

Pwnable/Tech

_IO_FILE AAR

_IO_FILE AAR 파일 쓰기 함수는 대표적으로 fwrite, fputs가 있다. 해당 함수들은 라이브러리 내부에서 _IO_sputn 함수를 호출한다. _IO_sputn 은 _IO_XSPUTN 의 매크로이며 실질적으로 _IO_new_file_xsputn 함수를 실행한다. _IO_new_file_xsputn code #define _IO_sputn(__fp, __s, __n) _IO_XSPUTN (__fp, __s, __n) _IO_size_t _IO_new_file_xsputn (_IO_FILE *f, const void *data, _IO_size_t n) { ... if (to_do + must_flush > 0) { _IO_size_t block_size, do_write; /* Next flu..

Pwnable/Tech

no longer existing hook

no longer existing hook --- man3/malloc_hook.3 | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/man3/malloc_hook.3 b/man3/malloc_hook.3 index 6d944003b..7b76bbc9b 100644 --- a/man3/malloc_hook.3 +++ b/man3/malloc_hook.3 @@ -11,7 +11,7 @@ .SH NAME __malloc_hook, __malloc_initialize_hook, __memalign_hook, __free_hook, __realloc_hook, -__after_morecore_hook \\- mallo..

Pwnable/Tech

Stack pivoting

스택 피보팅이란 특정 영역에 값을 쓸 수 있거나 값이 있는 경우 SFP를 족쳐서 스택을 옮기고 해당 부분의 코드를 실행하는 기법이다. leave_ret 을 이용한 stack pivoting을 하기 위한 전제 조건 페이로드가 저장되어 있는 영역이 존재할 경우 ret까지만 overflow 가 발생 페이로드가 저장되어 있는 영역이 없는 경우 입력함수 + leave_ret을 넣을 수 있는 만큼 overflow 발생 일반적으로 stack pivoting을 사용하는 경우 overflow가 많이 나지 않ㄴ는 경우 main으로 돌아갈 수 없는 경우(seccomp 등) 익스 시나리오 SFP 부분에 실행을 원하는 주소 -8을 넣는다. (chain을 할 경우 예제 참고) 입력 함수를 RTL로 호출해서 bss영역에 값을 입력..

Kon4
'Pwnable/Tech' 카테고리의 글 목록