RELRO

    [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..