Reference

    [Pwn] gdb offset Tip

    이번 글은 _rtld_global overwrtie를 하기 위해 문제를 진행하다 막혀 리서칭하다알게된 Tip아닌 Tip을 정리했기에 _rtld_global overwrtie를 예시로 설명한 글입니다. gdb-peda, pwndbg지금까지는 pwndbg를 이용해 대부분의 문제를 해결했습니다.하지만 관련 디버깅툴을 알아보니 gdb-peda 뿐 아니라 몇가지에 특화된 디버깅툴이 많이 존재했습니다.그중에서도 gdb-peda는 offset을 계산하거나 찾는데 특화가 되어 있다고 합니다.해서 이러한 좋은 툴을 매번 선택적으로 쓰기 위해서 파일을 갈아엎어야 하는게불편해서 자료를 찾아보니 이를 해결한 방안이 있었습니다. https://flash-ctf.tistory.com/91 [디버거] PEDA, PWNDBG,gef..

    [Pwn] Overwrite _rtld_global

    드림핵의 Overwrite _rtld_global 를 좀 더 이해하기 위해 정리하고자 작성한 글입니다. (틀린 내용이 있다면 댓글로 지적해주시면 감사드립니다.) _rtld_global 개념 _rtld_global 이 무엇인지 부터 알아보겠습니다. pwn이나 여러 바이너리 파일을 분석해보면 개발자가 main이라는 함수를 작성해서 실행했을때 main함수가 바로 실행되지 않는 다는 점은 디버깅을 하면 가장먼저 알게되는 구조입니다. 그러면 이후에 종료되는 과정이 정확하게 어떻게 되는가? gdb-peda$ disas main Dump of assembler code for function main: 0x00000000000005fa :push rbp 0x00000000000005fb :mov rbp,rsp 0x0..

    tcache double free bypass

    드림핵 워게임 문제를 풀다가 막혀 강의자료를 정리한 글로 잘못된 내용이 있을 수 있습니다. 1. GLIBC 2.26과 2.29 버전 차이이전 double free bug에 대해 정리하면서 2.29버전에서는 이를 막기위한 코드가 추가되었다고 언급했었습니다.추가된 코드 부분은 tcache를 관리하는 tcache_entry 구조체 부분과tcache_put, tcache_get 함수를 보면 알 수 있습니다. 먼저 tcache_entry 부분을 비교해보면key라는 멤버 변수가 추가되었고 이는 duble free 발생여부를 확인하기 위해 존재한다고 합니다. tcache_put 부분에서 변경된점은 e->key=tcache 입니다.e->key에 tcache를 삽입하는데 이 의미는 tcache_entry 구조체 주소를k..

    Linux tmux 사용법

    리눅스를 사용해서 포너블, 웹해킹, 리버싱등 여러 작업을 하다보면 터미널을 여러개 띄워놓고 작업해야 할때가 많습니다. 하지만 gdb를 이용해 코드를 분석하면서 소스코드를 수정하는게 필요할때 이러한 작업이 어렵습니다. 이러한 대안으로 tmux라는 소프트웨어가 있다고 합니다. 1. Tmux Tmux는 Terminal Multiplexer SW로 Unix 계열에서 사용가능하며 session(세션)과 window(윈도우), pane(팬)을 구조로 나뉩니다. session은 tmux를 실행하면 가장먼서 생성되며 tmux가 관리하는 가장큰 실행단위로 tmux는 생성된 세션에 attach / detach 할 수 있습니다. tmux의 특징중 하나로 detach한 세션은 종료되는 것이 아닌 백그라운드에서 계속 실행이 가..

    DFB(Double Free Bug) 취약점

    본 글은 드림핵로드맵을 진행하면서 공부 이해를 돕기 위해 작성한 문서입니다. Double Free Bug 이전 Heap 이해에 대한 글을 작성하면서 free 함수로 청크를 해제한다면 (리눅스의 경우) ptmalloc2가 tcache나 bins에 추가하여 관리한다고 학습했고 이후 malloc 함수로 비슷한 크기의 동적할당이 발생하면 연결리스트를 참고해 재할당해준다는 것까지 확인했습니다. 이러한 매커니즘을 기반으로 free를 두번 시도할 경우 발생하는 취약점이 DFG( Double Free Bug )입니다. 언뜻 생각한다면 두번 free를 한다고 어떠한 문제가 생기는가 할텐데 heap 메모리의 할당과 해제시 할당한 영역의 크기는 요청한 사이즈보다 크다는 것과 그 이유가 청크 사이즈와 이전, 다음 청크를 가르..

    (Linux) Heap 구조 이해하기 1

    드림핵 시스템해킹 로드맵을 진행하던중 heap에 대한 배경지식 부족으로Exploit Code이해에 어려움이 있어 이해하고자 여러 자료를 참고삼아 작성한 글입니다.( 잘못 이해하거나 틀린점에 대한 조언은 언제나 환영입니다!  ) Heap먼저 heap 영역이란, malloc(), calloc() 같은 함수를 통해동적으로 할당받는 메모리가 위치하는 영역을 말합니다. 보통 지역변수나 전역변수는 변수의 사이즈가 컴파일 시에 결정됩니다.이렇게 선언된 변수의 사이즈는 고정값으로 변경하지 못하는데 컴파일 시 정해지지 않고런타임 시에 변수의 사이즈가 정해지는 구조가 있는데 이런경우 힙 영역에 할당이 되는 것입니다. 즉 정리하면 heap 영역은 런타임때 할당메모리 크기가 결정되는메모리가 위치하는 영역이라 볼 수 있습니다...

    OOB(Out of Bounds) 취약점

    본 글은 드림핵 시스템해킹 로드맵 Stage 9를 학습하고개인적으로 정리한 글입니다. OBB (Out of Bounds)지금까지 여러 워게임 및 CTF문제, 개발등을 하면서 자연스레 배열을 사용해왔습니다.배열 내부 자료를 요소, 요소의 위치를 인덱스라고 하며 파이썬 같은 인덱스 슬라이싱 같은 배열을 다뤄왔습니다.이러한 배열에 인덱스를 이용해 임의의 주소로 접근이 가능한 취약점이 존재합니다.이는 개발자가 설정한 배열의 경계를 넘어서 값을 읽거나 쓸수 있어 코스를 벗어났다는 의미로Out Of Bounds라고 하여 OBB라고 합니다. 보통 배열의 길이는 array[n] = sizeof(요소) * n 으로 결정됩니다.그렇다면 array[n]에 들어가는 n 즉, 인덱스 값이 음수 이거나 배열의 길이를 벗어나면 어..

    Pwndocker와 LD_PRELOAD, patchelf (libc 제공된 바이너리 문제)

    이전 글에서 RELRO과 Hook Overwrite에 대하여 작성한 적이 있습니다.Exploit Code를 구성하는 과정은 워게임혹은 예시문제에서 설명한다고 했으나환경셋팅에 대한 문제에 가로막혀 Pwndocker를 통한 해결책에 대해 작성하게 되었습니다. PwndockerHook Overwrite 문제들 처럼 라이브러리를 사용해 문제를 해결하는 워게임들은대부분 라이브러리 영역의 주소를 찾기 위해 아래처럼 라이브러리 파일을 제공합니다.하지만 이렇게 제공되는 라이브러리는 현재 본인이 사용하고 있는 커널 버전과 환경의 문제로라이브러리를 제대로 로드할수 없게 되는 경우가 생깁니다. 예전 방식의 해결방법은위의 버전과 같은2.27을 가진 리눅스 가상환경을 따로 준비하고해당환경에서 풀어나가는 방법을 사용했습니다.문제..