1 minute read

  • pwndbggdb의 플러그인

ELF

Excutable and Linkable Format의 약자이며 리눅스의 실행파일 형식임
헤더와 섹션들로 이루어져 있음

  • 헤더에는 실행에 필요한 정보가 있음
  • 섹션에는 컴파일된 기계어 코드, 프로그램 문자열등 데이터가 포함됨

EP

Entry Point의 약자
ELF 헤더의 필드에 존재, OS에서 ELF를 실행할때 이 값부터 프로그램을 실행함

readelf 명령어로 EP의 주소를 알 수 있음

start

gdb에서 EP부터 프로그램을 분석할 수 있게 해주는 명령어
문자가 가리키고 있는곳이 현재 rip 레지스터가 가지고 있는 값

context

pwndbg에서 프로그램이 실행되고 있을때 주요 메모리들의 상태를 나타내주는것
4가지의 영역으로 구분됨

  1. REGISTER: 레지스터의 상태를 보여줌
  2. DISASM: 어셈블리어로 번역된 기계어 코드를 보여줌
  3. STACK: 현재 메모리상의 스택영역을 보여줌
  4. BACKTRACE: 현재 상태까지 호출된 함수들의 목록을 보여줌

breakpoint / continue

breakpoint set

  • b *함수명

함수 내의 코드에 breakpoint를 지정하려면 함수명+비트수

pwndbg> b *main

continue code

  • c
pwndbg> c

disassembly

gdb에서 기본 지원하는 명령어임

disassembly 함수명으로 해당 함수만 어셈블리어로 번역된 결과를 받아올 수 있음

pwndbg> u 사용하면 색도 입혀서 보여줌

ni / si / finish

  • ni: next instruction

다음 코드 한 줄 실행시켜줌 다만 서브루틴 내로 들어가지는 않음

  • si: step into

마찬가지로 다음 코드 한 줄 실행시키는데 서브루틴이라면 거기 내부로 들어감

  • finish

해당 함수를 끝까지 실행시켜줌
si 같은걸로 들어갔다가 빠져나올때 주로 사용한다고 함

examine

특정 주소에서 지정한 만큼의 데이터를 지정한 데이터 형식으로 보여줌 gdb 기본명령이며 x 를 사용 x/[진법][데이터형식]
당연히 []는 빼고 실행해야함괄호 없이 붙여쓰면 뭔가 보기 힘들었음 ㅎ..

Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char), s(string) and z(hex, zero padded on the left). Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
  • pwndbg> x/5i $rsp

rsp 레지스터에 지정된 주소부터 명령어를 5줄 출력 머 이런식임

telescope

pwndbg명령어, 특정 메모리 값들과 해당 메모리가 참조하고 있는 주소를 재귀적으로 탐색하여 보여줌

pwndbg> tele

vmmap

가상 메모리의 레이아웃을 보여줌.. 이라는데 잘 몰겠음

파일이 매핑된 영역일 경우 해당 파일의 경로까지 보여준다고 함

  • 파일 매핑: 어떤 파일을 메모리에 적재하는것

gdb에 사용자가 직접 값을 입력할 수 없을때

python 인라인 코드를 사용하여 직접 데이터를 넘겨주면 됨
16진수 값을 넣어주거나 할때 사용하는듯

r명령어 사용시 파라미터로 $()의 괄호 안에 인라인 코드를 작성하면 됨

  • 실행시 파라미터를 넘겨줄때

pwndbg> r $(python -c 'print "\xff"*100')

  • 실행 후 입력값을 넘겨줄때

r명령 입력시 <<< 쓴 뒤에 $()에 코드 작성

pwndbg> r <<< $(python -c 'print "\xff"*100'

실행시 파라미터와 입력값 넘기는거 동시에 가능