본문 바로가기

드림핵

[드림핵 System Hacking Fundamental] Stage3

이전 포스팅에 이어 계속 공부한 내용을 정리해본다.

 

 

Stage3. Tool Installation

시스템 해킹을 할 때 자주 쓰는 툴로 디버거인 gdb와 익스플로잇 코드를 짤 때 활용하기 좋은 pwntools가 있다. 각각에 대해 설치방법부터 사용법까지 다루는 매우 유익한 강좌였다. 이 강좌에서도 설명이 아주 친절하게 되어있지만 gdb의 기능을 익히기에는 조금 부족한 느낌이 있어서 BombLab을 풀면서 툴 사용법을 익히는 과정을 거쳤다. pwntools는 아직 제대로 써본 적이 없어서 익숙해지지 않은 상태인데, 다음 Stage를 풀면서 차차 익숙해져가길 기대하고 있다.

 

Stage3-1. Tool:gdb

  • gdb: 리눅스의 대표적인 디버거로, 실행 프로그램을 어셈블리 명령어 단위로 실행해주는 프로그램.
  • pwndbg: gdb에 설치할 수 있는 플러그인들 중 하나로, 바이너리 분석 용도로 사용함. gdb의 기능을 보완하여 더 쓰기 편리하게 추가 기능을 제공하며 가독성이 좋음.
  • context:  [REGISTERS], [DISASM], [STACK], [BACKTRACE] 4개의 영역을 통해  프로그램이 실행되고 있는 맥락을 보여줌. 주요 메모리들의 상태를 알 수 있음.
  • gdb 명령어
    • entry: 프로그램이 시작되는 지점까지 rip 이동
    • start: 프로그램을 main함수 지점까지 실행
    • run: 프로그램을 중단점까지 실행. 중단점이 없으면 끝까지 실행.
    • break *main: main 심볼에 중단점 설정
    • continue: 현 시점에서부터 프로그램을 계속 실행.
    • disassemble main: main 함수 전체를 디스어셈블한 코드 출력
    • ni: 프로그램을 한 줄 실행
    • si: 프로그램을 한 줄 실행(call 명령어에서 함수 내부로 들어감)
    • finish: si 로 들어간 함수에서 다시 밖으로 나옴
    • 이 외에도 examine, telescope, vmmap 명령어 등이 있음. examine 명령어는 하다보니 꽤 자주 유용하게 쓰이는 명령어로, 숙달해놓으면 디버깅 실력 향상에 많이 도움이 될 것 같음.
    • 디버깅할 때 간단한 파이썬 코드를 이용할 수 있음

 

Stage3-2. Tool: pwntools

  • pwntools: 익스플로잇할 때 자주 구현하게 되는 기능들을 파이썬 모듈로 만든 것
  • pwntools의 주요 객체 및 함수
    • process(): 로컬 바이너리를 대상으로 객체 생성. 테스트 및 디버깅용으로 사용
    • remote(): 원격 서버를 대상으로 객체 생성. 실제 공격용으로 사용
    • send(): 데이터 보내기
    • recv(): 데이터 받기
    • packing&unpacking함수: 바이트배열을 리틀엔디언으로 변경 혹은 그 반대
    • interactive(): 터미널에서 프로세스에 데이터 입출력하기
    • ELF(): 헤더에 기록된 각종 정보 보기
    • asm(): 주어진 코드를 기계어로 어셈블
    • context 객체: 로그 출력, 공격대상의 아키텍처 정보 설정 등을 할 수 있는 객체
    • shellcraft 객체: 자주 사용되는 셸코드를 모아놓은 객체. 그러나 주로 셸코드는 환경에 맞게 스스로 만들거나 따로 찾아야 함.