전체 글

전체 글

    [Dreamhack] hook - Write Up

    보호되어 있는 글입니다.

    [Dreamhack] oneshot - Write Up

    보호되어 있는 글입니다.

    [System][Dreamhack] Exploit Tech: Hook Overwrite - one_gadget

    [System][Dreamhack] Exploit Tech: Hook Overwrite - one_gadget

    one_gadget(magic_gadget)은 실행하면 쉘이 획득되는 코드 뭉치를 말한다. 여러 gadget의 조합없이, 하나의 gadget만으로도 쉘을 실행할 수 있는 gadget이다. HITCON, 217 CTF팀의 david942j가 만든 one_gadget을 사용하면 쉽게 찾을 수 있다. one_gadget은 libc 버전마다 다르게 존재하고, 제약 조건도 모두 다르다. Glibc의 버전이 높아질수록 제약 조건을 만족시키기 어렵기 때문에, 상황에 따라 맞는 gadget을 사용하거나 제약조건을 만족하도록 조작해야한다. one_gadget은 함수에 인자를 전달하기 어려울 때 활용할 수 있다. __malloc_hock을 overwrite하는 것은 가능하지만 malloc의 인자에 "/bin/sh"을 전달..

    [System][Dreamhack] Exploit Tech: Hook Overwrite(2/2)

    [System][Dreamhack] Exploit Tech: Hook Overwrite(2/2)

    드림핵 RELRO 강의, 드림핵 wargame fho 문제에 대한 글이다. Free Hook Overwrite 실습 코드 // Name: fho.c // Compile: gcc -o fho fho.c #include #include #include int main() { char buf[0x30]; unsigned long long *addr; unsigned long long value; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); puts("[1] Stack buffer overflow"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf); puts("[2] Arbitrar..

    [System][Dreamhack] Exploit Tech: Hook Overwrite(1/2)

    [System][Dreamhack] Exploit Tech: Hook Overwrite(1/2)

    후킹(hooking)은 코드 실행을 낚아채 다른 코드가 샐행되게 하는 것을 말하고, 이때 실행되는 코드를 훅(hook)이라고 한다. 후킹은 다양한 용도로 사용된다. 예를 들어 malloc과 free에 hook을 설치하면 소프트웨어에서 할당하고, 해제하는 메모리를 모니터링 할 수 있다. 이를 응용하면 함수 도입부에 모니터링 함수를 hook으로 설치하여 모든 호출 함수를 tracing 할 수 있다. 여기서는 hook overwrite와 one-gadget에 대해 공부할 것이다. Hook Overwrite는 Full RELRO가 적용되더라도 libc의 데이터 영역에 쓰는 것이라 Full RELRO를 우회할 수 있는 기법이다. Glibc 2.33이하에선 libc 데이터 영역에 malloc()과 free()를 호..

    [System][Dreamhack] RELRO - RELocation Read-Only

    [System][Dreamhack] RELRO - RELocation Read-Only

    Lazy binding은 ELF 바이너리에서 라이브러리 함수의 시작주소를 구하지 않다가, 함수를 처음 호출할 때 해당 주소를 구해 GOT에 저장하는 것을 말한다. Lazy binding을 하는 바이너리는 실행 중 GOT를 업데이트 해야하므로, GOT에 쓰기 권한이 부여된다. 이로 인해 GOT Overwrite 공격이 가능한 것이다. GOT 영역 외에도, ELF의 데이터 세그먼트에는 프로세스 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 해당 영역들은 프로세스 시작과 종료에 실행할 함수의 주소를 저장하고 있는데, 여기에 임의의 값을 쓸 수 있다면 프로세스 흐름 조작이 가능하다. 이런 overwrite로부터 데이터 세그먼트를 보호하고자 RELocation Read-Only(R..

    [System][Dreamhack] PIE - Position-Independent Executable

    [System][Dreamhack] PIE - Position-Independent Executable

    PIE(Position-Independent Executable)은 ASLR이 코드 영역에도 적용되게 하는 기술이다. PIC & PIE PIC 리눅스 ELF 파일은 실행파일(Executable)과 공유 오브젝트(Shared Object, so)로 2가지가 존재한다. 공유 오브젝트는 재배치(relocation)가 가능하다. Relocation이 가능하다는 것은 메모리의 어디에 적재되어도 코드의 의미가 훼손되지 않음을 의미한다. 이런 코드를 Position-Independent Code(PIC)라고 부른다. PIC 코드 분석 PIC가 적용된 바이너리와 그렇지 않은 바이너리를 비교하기 위해 아래의 코드를 컴파일하였다. // Name: pic.c // Compile: gcc -o pic pic.c // : gc..

    [System][Dreamhack] Exploit Tech : Return Oriented Programming(ROP)

    [System][Dreamhack] Exploit Tech : Return Oriented Programming(ROP)

    이전 실습은 system 함수를 호출하도록 하여 PLT에 system함수가 포함되어 있다. 하지만 실제로 system함수가 PLT에 포함될 가능성은 거의 없다. [system][hacking] Exploit Tech : Return to Library(RTL) NX를 우회하는 공격기법인 RTL에 대해 공부한 내용이다. RTL을 공부하기 전 NX가 무엇인지, PLT가 무엇인지 알아야 한다. 이에 대한 내용은 아래의 글에 정리되어 있다. [system][hacking] 메모리 보호기 3omh4.tistory.com 그래서 라이브러리 함수의 실행과 리턴가젯을 연결해 사용하는 ROP(Return Oriented Programming)와 GOT overwrite에 대해 드림핵으로 공부한 내용이다. ROP ROP는..

    [Dreamhack] rev-basic-8 - Write Up

    보호되어 있는 글입니다.