Skip to content

Latest commit

 

History

History
156 lines (96 loc) · 3.14 KB

4.md

File metadata and controls

156 lines (96 loc) · 3.14 KB

초보 탈출 시스템 해킹

김도현(H3X0R) 발표자님

시작하기에 앞서

  • 맥북에어 추모

  • cat profile.txt

cat /etc/passwd

  • 시스템 해킹을 시작하고 싶으신 분

  • 이미 시스템 해킹 공부를 하고 있지만 아직 여러가지 공격기법들이 완벽하게 이해 X

  • CTF에서 한문제라도 풀고 싶으신 분

  • C, Asm 알아보기

Register

이건 알고 가자

  • IP(or PC) : Instruction Pointer, Program Counter (인스트럭션 포인터 -> 다음 실행할 명령을 가리킴)

  • BP : Base Pointer

  • SP : Stack Pointer (스택주소 연산에 사용)

봐두시면 좋아요

Flags, Segment Register

Stack

  • 함수의 지역 변수, 복귀 주소등을 저장

  • 함수의 실행이 끝나면 사라짐

  • LIFO 구조

LIFO(Last In First Out) 구조

크레인, 쌓인 컨테이너, 사람 그림으로 알아보자.

  • SP: 크레인 -> 스택의 맨 위를 가리킴

  • BP: 작업하는 사람

  • 위로 자라는 스택(스택의 위로 올라갈수록 주소값은 낮아짐, 아래로 내려갈수록 주소값은 높아짐)

  • 컨테이너를 뺄 때는 위에 있는 컨테이너부터

BP

함수가 데이터를 사용할 때 기준이 되는 레지스터

call me_baby

call 인스트럭션은 아래 두 명령어를 한꺼번에!

  • push EIP+인스트럭션마다 가지고 있는 값(call의 경우 1바이트)+(실행할 함수의 주소값)
    -> EIP값을 저장

  • jmp me_baby(실행할 함수로 이동)

cdecl, fastcall

함수 호출규약

  • CDECL
  • FASTCALL
push ebp
mov ebp, esp

함수 프롤로그

mov eax, [ebp+8]
mov ebx, [ebp+c]

함수에서 인자값을 가져올 때는 EBP를 기준으로 인자를 가져옴

leave
ret

EIP 저장한 값으로 복구, EBP 복구

x86_64 fastcall 레지스터 내 매개변수

  • RSI

  • RDI

  • RDS

  • RCS

So many ROP Techniques

핵심은 인자를 잘 구성해주고 (못들음)

plt(Processer Linkage Table), got

  • 라이브러리를 사용하기 위해 메모리에 덤핑

  • 리턴 투 다이내믹 링크 등의 공격에 응용 가능

let's talk about mmap

void *mmap(void *adder, //어디에?
  size_t length, //길이값
  int prot, //권한
  int flags,
  int fd,
  off_t offset
);

Execute Shellcode With NXbit

mprotect(void *adder,
  size_t len
  int prot //어떻게?
);

shellcoding with your hands

When You Don't Have Libc For Attack

  1. 정말 LIBC를 사용해야 하는지 바이너리를 살펴보고 확인해본다.

  2. libcdb를 이용한다.

  3. 위 방법을 써본다.

이번 코드게이트 CTF 문제에서도... http://314hack.tistory.com/entry/Codegate-2018-Write-up-melong-BaskinRobins31-RedVelvet-ImpelDown

The Most Important - DEBUGGING

  • strace, ltrace : 익스플로잇에 문제가 생겼을 시 붙여서 원하는 방향으로 잘 가는지

  • pwntools : 포너들에게 필수인 파이썬 라이브러리(시스템 해킹계의 스위스 아미나이프)

  • pwndbg : heap 관련 명령어가 편함

  • qira

  • qemu : x86, x86-64가 아닌 바이너리 같은 경우 애뮬레이팅하기 좋음

  • ida

CTF

Real World