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

    검색 영역

    컨텐츠 검색

    03.ROP(Return Oriented Programming) - mmap, mprotect

    ROP(Return Oriented Programming) - mmap, mprotect ROP를 이용하여 메모리 영역을 할당(mmap)하거나 할당된 메모리 영역의 권한을 변경(mprotect)하는 방법에 대해 설명하겠다. 이외에도 ROP를 이용하여 공격자가 원하는 다양한 코드를 작성할 수 있다. 일부에서는 mmap(), mprotect()를 이용하여 메모리를 다루는 것을 ROP Stager라고 표기하고 있다. mmap - 32bit(feat. POPAD, PUSHAD) Proof of concept 다음과 같이 Overflow를 확인할 수 있다. Return address - buf 변수의 시작 주소 = 66 즉, 66개 이상의 문자를 입력함으로써 Return address 영역을 덮어 쓸 수 있다. ..

    JOP(Jump-Oriented Programming)

    JOP(Jump-Oriented Programming) JOP는 JMP 명령어를 이용하여 프로그램의 흐름을 제어하는 Exploit 기술 이다. JOP의 Gadget은 "Exploit에 필요한 코드 + JMP 명령어" 이와 같은 형태이며, 예를 들어 다음과 같은 Gadgets 이 사용된다. x64환경에서 함수의 첫번째 인자 값에 0을 저장 : "mov rdi, 0; jmp [R9]" x64환경에서 함수의 두번째 인자 값에 RSP에 저장된 값을 저장 : "mov rsi, [rsp]; jmp [R9]" JOP는 여러개의 Gadget들을 실행하기 위해 별도의 Gadget과 구조가 필요하다. "Example of JOP" 설명. JOP Gadget들의 주소 값은 0x1000 ~ 0x1018 영역에 저장되어 있다...

    02.SROP(Sigreturn-oriented programming) - x64

    SROP(Sigreturn-oriented programming) SROP는 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장할 수 있다. 해당 기법을 이용하여 원하는 시스템 함수를 호출할 수 있다. Signal & Signal handler x86과 x64의 Signal & Signal handler 동작은 동일하다. https://racc8n.kr/197 01.SROP(Sigreturn-oriented programming) - x86 SROP(Sigreturn-oriented programming) SROP는 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장할 수 있다. 해당 기법을 이용하여 원하는 시스템 함수를 호출할 수 있다. Signal signal은 프로세..

    01.SROP(Sigreturn-oriented programming) - x86

    SROP(Sigreturn-oriented programming) SROP는 sigreturn 시스템 콜을 이용하여 레지스터에 원하는 값을 저장할 수 있다. 해당 기법을 이용하여 원하는 시스템 함수를 호출할 수 있다. Signal signal은 프로세스에게 이벤트가 발생했음을 알린다. signal은 다른 프로세스에게 시그널을 전송 할 수 있다. signal은 원시적인 형태의 IPC(interprocess communication)로 사용 할 수 있다. signal은 자기 자신에게 시그널을 보낼수도 있다. signal은 일반적으로 커널이 송신하며, 다음과 같은 이벤트 종류가 있다. 하드웨어 예외가 발생한 경우 사용자가 시그널을 발생시키는 터미널 특수 문자 중 하나를 입력한 경우 Interrupt chara..

    02.ROP(Return Oriented Programming)-x64

    ROP( Return-oriented programming )는 공격자가 실행 공간 보호(NXbit) 및 코드 서명(Code signing)과 같은 보안 방어가있는 상태에서 코드를 실행할 수있게 해주는 기술이다. RTL + Gadgets 이 기법에서 공격자는 프로그램의 흐름을 변경하기 위해 Stack Overflow 취약성이 필요하고, "가젯(Gadgets)"이라고 하는 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어가 필요하다. 각 가젯은 일반적으로 반환 명령어(ret)로 끝이나며, 기존 프로그램 또는 공유 라이브러리 코드 내의 서브 루틴에 있다. 가젯과 취약성을 사용하면 공격자가 임의의 작업을 수행 할 수 있다. Gadgets - POP; POP; POP; RET x86의 경우 pop 명령어..

    01.ROP(Return Oriented Programming)-x86

    ROP( Return-oriented programming )는 공격자가 실행 공간 보호(NXbit) 및 코드 서명(Code signing)과 같은 보안 방어가있는 상태에서 코드를 실행할 수있게 해주는 기술이다. RTL + Gadgets 이 기법에서 공격자는 프로그램의 흐름을 변경하기 위해 Stack Overflow 취약성이 필요하고, "가젯(Gadgets)"이라고 하는 해당 프로그램이 사용하는 메모리에 이미 있는 기계 명령어가 필요하다. 각 가젯은 일반적으로 반환 명령어(ret)로 끝이나며, 기존 프로그램 또는 공유 라이브러리 코드 내의 서브 루틴에 있다. 가젯과 취약성을 사용하면 공격자가 임의의 작업을 수행 할 수 있다. Gadgets - POP; POP; POP; RET ROP는 기본적으로 RTL ..

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

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

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

    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은 부동 소수점 인수가 전달된다...

    추가 정보

    TISTORY
    pwnkidhn.github.io © rvkhun
    페이스북 트위터 인스타그램 유투브 메일

    티스토리툴바