pwnkidhn.github.io

고정 헤더 영역

글 제목

메뉴 레이어

pwnkidhn.github.io

메뉴 리스트

    • 분류 전체보기 (194)
      • memo (0)
      • Pwnable Exploitation (19)
        • 01.Shellcode (4)
        • 02.Return to Shellcode (1)
        • 03.RTL(Return to libc) (2)
        • 04.Frame faking(Fake ebp) (1)
        • 05.Frame Pointer Overwrite (2)
        • 06.ROP(Return Oriented Prog.. (3)
        • 07.SROP(Sigreturn-oriented .. (2)
        • 08.JOP(Jump-Oriented Progra.. (1)
        • 09.Return-to-csu(__libc_csu.. (0)
        • Malloc - glibc(ptmalloc2) (3)
      • Pwnable Write-Up (54)
        • 00.CTF (0)
        • 01.hackerschool F.T.Z (20)
        • 02.hackerschool L.O.B (21)
        • 03.dreamHack (13)
        • 04.HackCTF (0)
      • Reversing Write-Up (38)
        • 01.Abex's crackme (5)
        • 02.CodeEngn Basic (20)
        • 03.CodeEngn Advance (13)
      • Fuzzing (1)
        • Theory (1)
      • Programming (22)
        • Data Structure (0)
        • Windows System (22)
      • Computer Science (60)
        • Computer Architecture (18)
        • OS Concepts (29)
        • Linux System (5)
        • Reverse Core (8)

    검색 레이어

    pwnkidhn.github.io

    검색 영역

    컨텐츠 검색

    Pwnable Exploitation

    • Malloc - glibc(ptmalloc2)

      2020.06.30 by RACC8N

    • 02.Frame Pointer Overwrite(One-byte Overflow) - x64

      2020.06.29 by RACC8N

    • 01.Frame Pointer Overwrite(One-byte Overflow) - x86

      2020.06.26 by RACC8N

    • Frame faking(Fake ebp)

      2020.05.06 by RACC8N

    • 02.RTL(Return to Libc) - x64

      2020.05.05 by RACC8N

    • 01.RTL(Return to Libc) - x86

      2020.05.05 by RACC8N

    • Return to Shellcode

      2020.05.04 by RACC8N

    • 04.Pwntools Shellcode(Shellcraft)

      2020.05.04 by RACC8N

    Malloc - glibc(ptmalloc2)

    보호되어 있는 글입니다.

    보호글 2020. 6. 30. 17:42

    02.Frame Pointer Overwrite(One-byte Overflow) - x64

    BackGround 해당 취약성은 다음과 같은 구조에서 발생한다. vuln() 함수에서 Overflow로 인해 main() 함수의 Frame Pointer를 1 byte 변경 할 수 있다. vuln() 함수가 종료 될 때 변경된 Frame Pointer는 leave 명령어에 의해 RBP 레지스터에 저장된다. main() 함수가 종료 될 때 RBP 레지스터에 저장된 Frame Pointer는 leave 명령어에 의해 RSP 레지스터에 저장된다. 즉, 이로 인해 ret 명령어에 의해 이동할 영역을 변경 할 수 있다. 공격하는 형태는 Frame faking과 동일 하다. 단, Frame faking은 Return Address 영역까지 Overflow 했으나, FPO는 Frame Pointer의 1 byte를..

    Pwnable Exploitation/05.Frame Pointer Overwrite 2020. 6. 29. 21:18

    01.Frame Pointer Overwrite(One-byte Overflow) - x86

    BackGround 32 bit Binary의 경우 64bit와 달리 스택을 16 바이트 경계에 정렬하는 코드가 추가된다. x86-64 ABI는 16 바이트 스택 정렬이 필요하다. ABI와 호환되지 않는 환경에서 스택 공간을 제한해서 사용하기 위해서다. 펜티엄 III에서 SSE(Streaming SIMD Extension) 데이터 유형 __m128이 16 바이트 정렬되지 않으면 올바르게 작동하지 않을 수 있다. Stack alignment at 16-byte boundary 다음과 같이 16byte 경계에 스택을 정렬하기 위한 코드는 다음과 같이 동작한다. main() 함수가 시작 되는 부분에서는 이전 함수에서 사용하던 Frame Pointer를 Stack에 저장하기 전에 Stack alignment을 ..

    Pwnable Exploitation/05.Frame Pointer Overwrite 2020. 6. 26. 17:05

    Frame faking(Fake ebp)

    Frame faking이란 ? - 가짜 스택 프레임 포인터(Stack Frame Pointer)를 만들어 프로그램의 실행 흐름을 제어하는 것이다. Return Address영역 까지만 덮어쓸수 있을 경우 사용 가능하다. leave-ret Gadget을 사용하여 IP(Instruction Pointer)를 조작한다. LEAVE & RET instruction LEAVE 명령어는 다음과 같이 동작한다. RBP(EBP) 레지스터에 저장된 값을 RSP(ESP) 레지스터에 저장한다. RSP(ESP) 레지스터가 가리키는 Stack영역에 값을 RBP(EBP) 레지스터에 저장한다. RET 명령어는 다음과 같이 동작한다. RSP(ESP) 레지스터가 가리키는 Stack영역에 값을 RIP(EIP) 레지스터에 저장한다. JM..

    Pwnable Exploitation/04.Frame faking(Fake ebp) 2020. 5. 6. 21:27

    02.RTL(Return to Libc) - x64

    RTL이란 ? - Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 해당 기법을 이용해 NX bit(DEP)를 우회 할 수 있다. Calling Convention System V AMD64 ABI Solaris, Linux, FreeBSD, macOS 에서 "System V AMD64 ABI" 호출 규약을 사용하기 때문이다. Unix, Unix계열 운영체제의 표준이라고 할 수있다. 해당 호출 규약은 다음과 같은 특징이 있다. 레지스터 RDI, RSI, RDX, RCX, R8 및 R9는 정수 및 메모리 주소 인수가 전달된다. 레지스터 XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6 및 XMM7은 부동 소수점 인수가 전달된다...

    Pwnable Exploitation/03.RTL(Return to libc) 2020. 5. 5. 23:17

    01.RTL(Return to Libc) - x86

    RTL이란 ? - Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 해당 기법을 이용해 NX bit(DEP)를 우회 할 수 있다. Calling Convention Cdecl(C declaration) 해당 호출 규약(Calling Convention)은 인텔 x86 기반 시스템의 C/C ++ 에서 사용되는 경우가 많다. 기본적으로 Linux kernel에서는 Cdecl 호출 규약(Calling Convention)을 사용한다. 다음과 같은 특징이 있다. 함수의 인자 값을 Stack에 저장하며, 오른쪽에서 왼쪽 순서로 스택에 저장한다. 함수의 Return 값은 EAX 레지스터에 저장된다. 사용된 Stack 정리는 해당 함수를 호출한 함수가 정리한다...

    Pwnable Exploitation/03.RTL(Return to libc) 2020. 5. 5. 14:40

    Return to Shellcode

    Return to Shellcode란 ? - Return address 영역에 Shellcode가 저장된 주소로 변경해, Shellcode를 호출하는 방식이다. CALL & RET instruction - Return to Shellcode를 이해하기 위해 CALL,RET 명령어에 대한 이해가 필요하다. CALL 명령어는 Return address(CALL 명령어 다음 명령어의 위치(주소 값))를 Stack에 저장하고, 피연산자 주소로 이동한다. RET 명령어는 POP 명령어를 이용해 RSP 레지스터가 가리키는 Stack영역에 저장된 값을 RIP(EIP)에 저장 후, 해당 주소로 이동한다. 즉, Stack영역에 저장된 Return address 값을 변경할 수 있다면 프로그램의 흐름을 변경 할 수 있다...

    Pwnable Exploitation/02.Return to Shellcode 2020. 5. 4. 23:56

    04.Pwntools Shellcode(Shellcraft)

    Local Shellcode - shellcraft 모듈에서는 sh() 함수를 이용해 간단하게 "/bin/sh" 를 실행하는 shellcode를 생성할 수 있다. 해당 함수는 aarch64,amd64,arm,i386,mips,thumb 아키텍처의 linux, freebsd 운영체제에 맞는 shellocode를 생성 할 수 있다. 다음과 같이 아키텍처와 운영체제를 선택한 후 sh() 함수를 호출하면, 해당 조건에 맞는 shellcode를 리턴한다. shellcraft.i386.linux.sh() [EXAMPLE] Bind Shellcode - shellcraft 모듈에서는 bindsh() 함수를 이용해 간단하게 bind shellcode를 생성 할 수 있다. 해당 함수는 amd64,mips,thumb 아키..

    Pwnable Exploitation/01.Shellcode 2020. 5. 4. 20:37

    추가 정보

    페이징

    이전
    1 2 3
    다음
    TISTORY
    pwnkidhn.github.io © rvkhun
    페이스북 트위터 인스타그램 유투브 메일

    티스토리툴바