목록Security/01 System Hacking (18)
tmxklab
checksec스크립트나 peda-gdb, pwndbg를 이용하면 mitigation확인할 수 있음 1. ASLR(Address Space Layout Randomization) 메모리 상의 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리 등의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써 실행할 때마다 데이터의 주소가 바뀌게 하는 기법 현재 실행되고 있는 프로세스 주소 매핑 확인 cat /proc/self/maps → 주소가 랜덤하게 바뀌는 것 확인 ASLR 활성화 및 비활성화 echo [0, 1, 2] > /proc/sys/kernel/randomize_va_space [0] : ASLR 비활성화 [1] : 랜덤 Stack, Library 활성화 [2] : 랜덤 Stack, Library, He..
1. RTC(Return to csu) ROP를 해야하는데 가젯 제한으로 rdi, rsi, rdx를 구성하기 힘들 때 유용하게 사용할 수 있는 기법으로 __libc_csu_init()을 이용한다. csu & __libc_csu_init() 참고 자료) Linux Binary Execution Flow(main함수 호출 및 종료 과정) main()가 호출되고 종료되는 과정에 대한 지식이 필요하여 이번에 정리하게 되었다. 우리가 흔히 .c파일을 작성하여 컴파일 과정을 마치면 결과물로 linux실행파일인 elf파일이 생성된다. 이제 elf파 rninche01.tistory.com 위 참고 자료를 보면 알 수 있듯이 __libc_csu_init()에서는 __init_array에 설정된 함수 포인터를 읽어서 호출..
FSOP기법을 사용하기 위해서는 file stream을 사용하는 함수가 존재해야하고 file stream을 변조할 수 있으면 가능하다. FSOP를 통해서 할 수 있는 거는 libc주소를 릭하거나 file stream의 vtable주소를 변조하여 원하는 함수로 이동할 수 있다. 이거를 이해하기 위해서 먼저 _IO_FILE struct, _IO_FILE_plus struct를 이해해야 한다. 참고 : stdout flag를 이용한 libc leak stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak &...
_IO_FILE struct, _flags, _IO_FILE_plus struct, vtable 등에 관한 개념은 다음 링크를 참고하길 바란다. stdout flag를 이용한 libc leak stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak &.. rninche01.tistory.com 1. fclose() 내부 루틴 fclose에 대한 코드는 glibc/libio/iofclose.c에 있으며 함수 이름은 _IO_new_fclose이다. 1.1 _IO_new_fclose() int _IO_new_..
stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak & fastbin dup 1. 문제 nc ctf.j0n9hyun.xyz 3033 1) mitigation 확인 2) 문제 확인 3) 코드 흐름 확인 3-1) main() int __cdecl __noreturn main(int argc, const char **argv.. rninche01.tistory.com 1. 프로세스 _IO_FILE struct의 멤버 변수 _flags를 특정한 값(하위 2byte를 0x1800)으로 변경하고 _flags부터..
1. tcache란? tcache(Thread local Caching)란 멀티 스레드 환경에서 메모리 할당속도를 높이기 위해 glibc 2.26버젼 이상부터 생겨난 기술이다. 이전에 멀티 스레드 환경에서 Arena라는 개념을 도입하여 각 스레드당 힙 메모리를 제공하여 서로 간섭없이 힙 작업을 빠르게 수행할 수 있도록 도와준다고 하였다. tcache라는 개념 또한 멀티 스레드 환경에서 힙 작업을 빠르게 수행할 수 있도록 도와주는 기술이다. tcache는 작은 단위의 메모리 할당이 필요할 경우 arena를 참조하지 않고 바로 메모리를 할당할 수 있도록 각 스레드 당 thread cache라는 영역을 제공함으로써 메모리 할당 속도를 높일 수 있는 기술이다. 이제부터 tcache에 대해 자세히 설명하도록 하겠..
어셈블리어로 쉘 코드를 작성할 때 종종 system call table을 찾아보는 일이 있어서 간략하게 정리하도록 하였다. system call 이란? 운영체제에서 커널 모드와 유저 모드로 나뉘게 되는데 유저 단에서 커널 영역의 기능을 사용하고자 할 때 system call을 통해 필요한 기능을 수행할 수 있게 도와준다. 커널은 운영체제의 핵심으로 프로세스, 하드웨어, 등등 컴퓨터 자원을 효율적으로 관리하는 역할을 가진다. 가끔 유저단에서 파일을 읽거나 쓰거나 또는 화면에 출력하거나 이러한 기능들은 커널에서 담당하므로 시스템 콜을 통해 유저 단에서 커널의 기능을 사용할 수 있도록 도와준다.(ex) read(), write(), open()) 참고 자료 : books.gigatux.nl/mirror/ker..
1. unsorted bin attack unsorted bin에 등록된 chunk가 다시 재할당될 때 리스트에서 삭제하면서 발생한다. 이를 통해 특정 영역에 큰 수를 저장하거나 라이브러리 leak이 가능하다. 사용조건: Unsorted Chunk를 생성할 수 있어야 한다. Unsorted bin에 등록된 Free Chunk의 값을 변경할 수 있어야 한다. Free Chunk와 동일한 크기의 Chunk를 요청할 수 있어야 한다. Unsorted bin에 대한 내용 참고) heap(4) - glibc malloc(3) (feat. bin) 참고 : GNU C Library의 Memory Allocator인 ptmalloc2(glibc 2.23)를 대상으로 설명 이번에는 Free된 Chunk들을 다시 재활용..
1. Unsafe Unlink Unsafe Unlink는 헤더 값이 조작된 fake chunk와 다른 인접한 chunk간에 병합이 일어나면서 비정상적으로 unlink되어 발생하는 취약점이다. 이를 통해 원하는 공간에 값을 작성하거나 Leak할 수 있다. 사용 조건 : 힙 영역을 전역 변수에서 관리 2개의 Allocated Chunk가 필요하며 한 개는 Fake Chunk를 생성할 수 있어야 함 첫 번째 Chunk를 통해 두 번째 Chunk의 헤더를 조작할 수 있어야 함 Unlink가 발생하는 이유 이전에 glibc malloc bin을 공부하면서 잠깐 Unlink가 한 번 언급되었던 적이 있었다. heap(4) - glibc malloc(3) (feat. bin) 참고 : GNU C Library의 Me..
1. House Of Force House Of XXX 시리즈 중 하나이며 힙 기반 취약점을 기반으로 사용된다.(Top Chunk를 이용) 사용조건 : Overflow 등을 통해 Top Chunk의 size를 제어할 수 있어야 한다. 공격자는 Malloc 요청의 크기를 제어할 수 있어야 한다. House Of Force가 발생하는 이유는 glibc에서 malloc요청시 메모리 할당을 Top Chunk에서 처리해주기 때문이다. 만일, Top Chunk의 size를 악용하여 다른 값으로 덮어씌울 수 있고(보통 -1) 원하는 크기의 malloc요청을 할 수 있다면 공격자가 원하는 위치에 Top Chunk를 옮길 수 있다. [할당 받기 원하는 주소] - [ Chunk Header size(0x10 or 0x8)..