(C) the end of the address space check
if (\_\_builtin\_expect ((uintptr\_t) p > (uintptr\_t) -size, 0) * size is p’s size type(x) = uintptr\_t일 때, x + ~x = uintptr_t's MAX (111...11) 이므로 p + x = MAX이면 c p = ~x다. -x = ~x + 1이므로 p...
if (\_\_builtin\_expect ((uintptr\_t) p > (uintptr\_t) -size, 0) * size is p’s size type(x) = uintptr\_t일 때, x + ~x = uintptr_t's MAX (111...11) 이므로 p + x = MAX이면 c p = ~x다. -x = ~x + 1이므로 p...
http://shell-storm.org/shellcode/ NOP-like NOP는 다음과 같은 방식으로도 만들 수 있다. mov %eax, %eax #1 peda #2 pwntools #3 msf x86 void main(){ \_\_asm\_\_ \_\_volatile\_\_( "xor %eax, %eax \n\t" 3...
UML 협업을 위해 UML을 그릴 때는 API(public 필드, 메소드)만 명시하는 버전이 있으면 좋다. 클래스의 모든 멤버를 명시하면 복잡하고, 결국 협업하는데 중요한건 내부 구현이 아니라 외부로 공개한 API이기 때문 UML Tool plant UML 은 source code 작성하듯이 쓰면 된...
* Integer overflow와 연계해 reference counter를 overflow시켜 0으로 만들어 강제로 free()시키는 방법으로 사용할 수도 있다. #1 free()된 영역을 참조하는 경우. 보통 free()하면 fd/bk/last_size 부분만 초기화되고 나머지 영역은 그대로 남아있기 때문에 나머지 영역에 있는 데이터를 leak할...
gdb-peda$ x/4wx &\_\_free\_hook 0xf7fd08b0 <\_\_free\_hook>: 0x00000000 gdb-peda$ patch 0xf7fd08b0 one\_gadget\_addr 32bit libc.so의 경우 다음과 같이 unsorted_bin에서 0x10 단위로 조회하면 없는 것 처럼 ...
libc.so 파일을 실행하면 버전, 컴파일 시스템 등등 정보가 출력된다. * glibc source는 하나지만, 컴파일 환경(OS, Compiler)에 따라 같은 버전의 다른 libc.so가 컴파일된다. * libc 버전에 따라 에러가 발생하는 경우는 확인했는데, 같은 버전에 시스템이 다른 경우(e.g., Debian과 Ubuntu) 에러가 발생하는...
[malloc] fastbins size check [malloc] smallbins bk check & unlink [malloc] unsorted bin size check [malloc] unsorted bin unlink [free] MINSIZE check [free] invalid next size (fast) [free]...
* ASLR is disabled application’s initial heap 프로그램이 malloc()등 직접 heap을 할당받는 코드를 실행하지 않더라도, 기본적으로 ` 0x21000`(132KB) 크기의 initial heap을 가지고 있으며 이 heap은 main_arena에 해당한다. 00400000-00401000 r-xp 0...
malloc sequence 너무 큰 heap memory 할당을 요청하는 경우, mmap()을 사용해 아예 다른 곳에 공간을 할당한다. * mmap’ing threshold 값은 따로 설정되지 않은 경우 dynamic하게 결정된다. 보통은 대략 0x20800 이상일 때. 요청에 맞는 fastbin에 chunk가 있는 경우 반환한다. 요...
circular doubly linked list fastbin을 제외한 나머지 bins는 circular doubly linked list 구조를 사용한다. fastbin range에 속하지 않는 chunk일 경우, chunk 하나만 free()해도 <main_arena+88>(unsorted bin-8)을 가리키는 fd/bk가 생성된다...