[Exploit] Hook Overwrite
·
Hacking/Pwnable
Hook원래 동장을 가로채서, 사용자 정의 동작을 실행하도록 끼워넣는 기법가장 대표적으로 malloc, alloc이 존재한다.mallocglibc 2.23 버전의 malloc 코드이다.__libc_malloc (size_t bytes){ mstate ar_ptr; void *victim; void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); arena_get (ar_ptr, bytes); victim = _int_malloc (ar_ptr, bytes); ..
[Mitigation] RELRO | RELocation Read-Only
·
Hacking/Pwnable
쓰기 권한이 불필요한 데이터 세그먼트에 쓰기 권한을 제거함데이터가 배치된 메모리의 특정 부분에 읽기 전용 속성을 부여함 https://m-in-zu.tistory.com/77 Static Link vs Dynamic LinkCompile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로 변환하는 작업이다. (기계어)Pre-Processing : 전처리기 (Prem-in-zu.tistory.com PLT, GOT의 Lazy Binding의 경우, GOT가 존재하는 영역에 쓰기 권한이 부여된다. 또한, ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료를 진행하는 .init_array, .fini_array가 존재한다..
[Mitigation] PIE | Position Independent Executable
·
Hacking/Pwnable
PIE : Position-Independent Executable무작위 주소에 매필되도 실행 가능한 실행 파일을 의미함 즉, 코드 영역이 무작위 주소에 배치되는 바이너리 ASLR이 코드 영역에 적용되는 것ALSR이 적용되지 않으면, PIE도 적용되지 않음PICPosition-Independent Code 리눅스에는 ELF, 공유 오브젝트(Shared Object, so) 두 가지가 존재함그 중 공유 오브젝트는 재배치(Relocation)이 가능하도록 설계되어있음 재배치가 가능하다는 것은, 메모리의 어느 주소에 코드가 배치되어도 코드의 의미가 훼손되지 않음을 의미한다.이러한 코드를 PIC라고 함 push rbpmov rbp,rspmov rax,QWORD PTR [rip+0x200b3e..
[Exploit] Return Oriented Programming (ROP chain)
·
Hacking/Pwnable
Return Gadgetret로 끝나는 어셈블리 조각원하는 명령어 + ret으로 이루어진 가젯들이다가젯(gadgets) : 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어 ROP chain리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는데, 이를 통해 ret2libc, ret2dl-reslove, GOT overwiret 등 payload를 구성할 수 있다.원하는 가젯들을 조합하여 원하는 흐름으로 이어지게 하기 때문에, 한번에 실행 흐름을 제어할 수 없을 때 주로 사용한다.따라서 보통은 ret2libc 등과 조합하여, NX를 bypass 하기 위해 많이 사용된다 * 보통은 pie가 걸려있지 않아야 주소가 code, data segment의 주소가 변경되지 않기에 해당 보호기법이 없어야 사용하기..
[Exploit] Return to Library
·
Hacking/Pwnable
Library자주 사용하는 소스코드를 미리 작성하여 프로그래머가 원할 때 빠르게 사용할 수 있게 가공된 형태컴파일 시간 단축소스 코드를 쉽게 사용 가능소스 코드의 일부를 보호 및 비공개 가능PLT & GOTPLT (procedure linkage table) : 외부 라이브러리에서 함수가 plt에 매핑되어 있다.GOT (golbal offset table) : 함수의 주소를 담고 있는 테이블로 plt가 got를 참조한다.PLT와 GOT에 대한 자세한 설명 : https://m-in-zu.tistory.com/77 Static Link vs Dynamic LinkCompile | 컴파일컴파일은 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업즉, 바이너리 형태로..
[Mitigation] ASLR
·
Hacking/Pwnable
Definition | 정의Address Space Layout Randomization바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 기법 커널에서 지원하는 보호기법으로, 운영체제마다 ASLR이 구현되어 있는 방식이 다르다리눅스를 기반으로 설명할 예정ASLR 확인하기명령어cat /proc/sys/kernel/randomize_va_space0 : No ASLR1 : Conservative Randomization - Stack, Library, vdso등 2 : Conservative Randomization + brk : brk로 할당한 영역까지checksec리눅스의 경우, checksec로 확인할 수 있음대부분의 보호 기법은 checksec로 확인 가능하다 (win..
[Mitigation] NX
·
Hacking/Pwnable
Definition | 정의No-eXecute의 약자로, 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호기법 코드 영역에 쓰기 권한이 있으면 공격자가 코드르 수정하여 원하는 코드가 실행되게 할 수 있음스택, 데이터1 영역에 실행권한이 있으면 스택에 쉘 코드를 넣어 코드가 실행될 수 있음이러한 상황을 막기 위해 NX가 적용됨 보호기법들마다, 적용되는 단계가 다르다NX bit의 경우 CPU에서 지원해줌NX 확인하기gdb의 vmmappwndbg> vmmapLEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA Start End Perm Size Offset File 0x40000..
[Mitigation] Stack Canary
·
Hacking/Pwnable
Definition | 정의스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하여 함수의 에필로그에서 해당 값의 변조를 확인하는 보호기법만약, 스택 카나리의 값이 변조되었다면 프로세스는 강제 종료됨 스택 버퍼오버플로우로 반환 주소를 덮으면서, 스택 카나리의 값을 덮는 것을 피할 수 없음→ 에필로그에서 변조가 확인되며 해커가 실행 흐름을 가져올 수 없음 카나리를 잘못 덮어쓰면 stack smashing detected라는 경고와 함께 종료된다 카나리 정적 분석스택 카나리를 만드는 과정이 프롤로그에, 변조를 확인하는 과정이 에필로그에 추가됨프롤로그mov rax,QWORD PTR fs:0x28mov QWORD PTR [rbp-0x8],raxxor eax,eaxlea rax,[rbp-0x10]..
gdb를 pwntools와 디버깅하기
·
Hacking/Pwnable
pwntools의 입력 값을 해당 프로세스 (혹은 서버)에 준 채로 디버깅을 하고 싶을 때 사용한다작성한 payload가 이상해서 사용해보려고 한다 gdb (process 이름) -p (pwntools로 작성한 코드의 pid) 이런식으로 작성해도 됨 나는 안됨 gdb attach   payload를 보내기 전에 gdb.attech(process 변수 이름)코드를 추가해준다  현재 오류를 살펴보면zombie 프로세스를 연결했다는 점이 가장 중요하다 즉, 해당 프로세스가 gdb랑 연결된 후에 그냥 종료되었기 때문이라는 것그래서 pause() 명령어를 추가해주었다 gdb.attach(p)pause() 이렇게 하면이렇게 하면 디버거가 정상적으로 붙어 payload를 확인할 수 있다. 디버거 무한로딩이상하게 c를..
[ Domato ] 사용법
·
Hacking/Pwnable
https://github.com/googleprojectzero/domato GitHub - googleprojectzero/domato: DOM fuzzerDOM fuzzer. Contribute to googleprojectzero/domato development by creating an account on GitHub.github.com 문법 퍼징문맥 자유 문법(Context-Free Grammar, CFG)을 사용하여 테스트 데이터를 자동으로 생성하고, 이를 통해 소프트웨어의 결함을 찾아내는 기법 대상으로 하는 것domainprograminputwhat needs to be tested문법 퍼징의 과정Grammer Definitionspecify a languageExpansion rule ..