728x90

1. Pwnable

Pwnable(시스템 해킹)

  • 운영체제 또는 프로그램 취약점을 찾아 공격하고, 관리자의 권한 등을 얻어 시스템을 장악하거나 의도치 않은 행동을 하게 하는 것
  • 컴퓨터 프로그램의 행위를 조작하여 공격자가 원하는 행동을 실행하도록 하는 공격
  • 궁극적으로 관리자 권한 탈취가 공격의 목표

취약점 종류

  • Memory Corruption : Buffer Overflow, Out-Of-Boundary, Off-by-one, Format String Bug, Double Free/User-After-Free
  • Logical Bug : Command Injection, Race Condition, Path Traversal(경로 탐색)

해킹 과정

  • 취약점 발견 -> 공격 시나리오 작성 -> 필요 정보 수집 및 공격 -> 권한 탈취

Pwntools

  • 리눅스 환경에서 Exploit(공격)을 보다 편리하게 할 수 있게 여러가지 함수와 기능을 제공하는 파이썬 라이브러리
  • 주요 함수
    • remote, process, ssh : 통신할 때 사용
    • send, sendline, sendafter, sendlineafter : 데이터 송신
    • recv, recvline, recvuntill: 데이터 수신
    • p32 : 32비트 리틀 엔디안으로 패킹

Shellcode

  • 시스템의 특징 명령(shell)을 실행하는 작은 사이즈의 프로그램
  • 기계어로 작성되며, 메모리에 올리면 바로 실행됨
  • 주로 BOF, FSB 공격에 사용

2. Buffer Overflow

Buffer Overflow(=Buffer Overrun)

  • 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점
  • 지정된 버퍼를 벗어난 데이터를 다른 데이터로 덮어쓸 수 있음
  • Buffer : 지정된 크기의 메모리 공간
  • Stack Buffer Overflow : 스택에 위치한 버퍼에 할당된 것보다 많은 데이터를 쓸 때 발생, 함수의 return 주소를 조작하는 것이 일반적
  • Heap Buffer Overflow : 동적 메모리 할당 연결을 덮어써 프로그램의 함수 포인터 조작, 포인터가 가리키는 값을 조작하여 임의의 파일 또는 코드에 접근

3. Stack Frame

Stack Frame 레지스터 : 스택 오버플로우와 관련된 x86(32bit) 레지스터

  • 범용 레지스터 : EAX, EBX, ECX, EDX
  • 스택 포인터 레지스터 : 실제 메모리상의 주소를 참조할 때 SS(Stack Segmaent) 레지스터와 함께 사용
    • ESP : 현재 스택 영역에서 가장 하위 주소를 저장
    • EBP : 스택 세그먼트에서 현재 호출되어 사용되는 함수의 시작 주소 값 지정
  • 명령어 포인터 레지스터 : EIP 또는 PC, 유효주소를 계산하는데 필요한 주소 저장
  • 상태 레지스터 : EFLAGS, x86 프로레서의 상태를 저장하기 위해 사용
  • 세그먼트 레지스터 : 각 세그먼트의 위치를 가리킴, 물리 주소 변환에 사용
    • 코드 세그먼트 (CS) : 실행 가능한 명령어 코드가 존재하는 세그먼트의 시작 주소
    • 스택 세그먼트 (SS) : 스택이 존재하는 세그먼트의 시작 주소
    • 데이터 세그먼트 (DS) : 사용되는 데이터가 존재하는 세그먼트의 시작 주소
    • ES, FS, GS : 추가 세그먼트의 시작주소로, FS는 통상 스레드 관리용도로 사용

Stack Frame

  • 스택의 데이터 : 높은 주소에서 낮은 주소로
  • 데이터 작성 : 낮은 주소에서 높은 주소로
  • Buffer Overflow : 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것

+ Recent posts