background

    FSOP(File Stream Oriented Programming)

    Source code (bootlin)_IO_FILE_plus & _IO_FILE_complete_plusstruct _IO_FILE_plus{ FILE file; const struct _IO_jump_t *vtable;};#ifdef _IO_USE_OLD_IO_FILE/* This structure is used by the compatibility code as if it were an _IO_FILE_plus, but has enough space to initialize the _mode argument of an _IO_FILE_complete. */struct _IO_FILE_complete_plus{ struct _IO_FILE_complete file; const stru..

    [논문 읽어보기] Binary Security of WebAssembly

    [논문 읽어보기] Binary Security of WebAssembly

    웹 어셈블리 바이너리 보안에 논문 내용 중 C나 C++ 기반의 웹 어셈블리 바이너리에 대한 내용들 위주로 정리해봤다. (javascript 쪽은 나중에 해보는 걸로) 상대적으로 이해가 쉬운 부분은 생략을 많이 했고 이해가 어려운 부분은 본문 내용을 거의 다 적었다. (영어 문서를 번역기 돌리면서 봐서 오역이 있을 예정..) 1. Introduction web assembly (이하 wasm)은 점점 더 대중화되는 바이트코드 언어이다. 이는 컴팩트하고 이식 가능한 표현, 빠른 실행 및 저수준 메모리 모델을 제공한다. 컴파일 타겟으로 설계되었으며 널리 사용되는 여러 컴파일러(예: C 및 C++용 Emscripten 또는 Rust 컴파일러)가 존재한다. 둘 다 LLVM을 기반으로 한다. wasm은 보안을 굉장..

    [how2heap] Tcache Poisoning (glibc 2.31/2.35)

    glibc 2.31 https://github.com/shellphish/how2heap/blob/master/glibc_2.31/tcache_poisoning.c #include #include #include #include int main() { // 버퍼링 비활성화 setbuf(stdin, NULL); setbuf(stdout, NULL); printf("이 파일은 malloc을 속여 임의의 위치(이 경우 스택)를 가리키는 포인터를 반환하도록 하는 간단한 tcache 독립성 공격을 보여줍니다.\n" "이 공격은 fastbin 손상 공격과 매우 유사합니다.\n"); printf("패치 후 https://sourceware.org/git/?p=glibc.git;a=commit;h=77dc0d8643a..

    [Linux Kernel Exploit] ROP (with ret2usr)

    ROP를 활용해서 ret2usr를 하는 방법에 대해 알아보려고 한다. 익스플로잇 순서는 다음과 같다. (ret2usr과 동일)prepare_kernel_cred(0); 수행 ("root"의 자격 증명 준비)prepare_kernel_cred() 함수의 리턴 값("root"의 자격 증명)을 commit_creds() 함수에 전달system("/bin/sh"); 예제로는 [QWB CTF 2018] core 문제를 보기로 했다. https://github.com/ctf-wiki/ctf-challenges/blob/master/pwn/kernel/QWB2018-core/rop.c trap frame을 만들고 ret2usr기법을 활용하는 것은 동일하다. 다만, LPE를 함수로 하는 것이 아니라 가젯으로 하기 때문..

    [fuzzing101] Exercise 3 - TCPdump (CVE-2017-13028) (2)

    [fuzzing101] Exercise 3 - TCPdump (CVE-2017-13028) (2)

    bootp 관련 크래시를 못 찾았기 때문에 다른 분들의 글을 보면서 분석하겠습니다. 먼저 콜 스택은 다음과 같다. print-bootp.c:325 ND_PRINT((ndo, ", Flags [%s]", bittok2str(bootp_flag_values, "none", EXTRACT_16BITS(&bp->bp_flags)))); EXTRACT_16BITS는 다음과 같다. ntohs를 수행하는 그냥 엔디안 변환 함수인 듯 하다. extract.h:150 static inline uint16_t EXTRACT_16BITS(const void *p) { return ((uint16_t)ntohs(*(const uint16_t *)(p))); } bootp_flag_values는 다음과 같다. 브로드캐스트와 관..