gdb 사용법
break point
info b (i b): 현재 브레이크 포인트 보기 d : 모든 브레이크 포인트 지우기 d n : n번 브레이크 포인트 지우기 enable/disable (브레이크 포인트 번호) : 활성화/비활성화
변수 출력
info locals : 현재 스택의 로컬변수 모두를 출력 info variables : 전역변수 모두 출력 p [변수명] : 해당변수 value 출력 p $[레지스터명] : 레지스터값 출력 p [변수명] = [value] : 특정 변수의 값을 설정 p 함수명 = 함수의 주소 출력 info registers (i r): 레지스터 전체 출력
스택 상태
info f (i f): 스택 프레임 내용 출력 info args : 함수 호출시 인자를 출력 info locals : 함수의 지역변수를 출력
메모리 상태
x/[범위][출력형식][범위의단위] [메모리주소나 함수명]
범위
범위는 기본 4byte
출력형식
t : 2진수 o : 8진수 x : 16진수 s: 문자열로 출력 i : 어셈블리 형식으로 출력
범위의 단위
b : 1 byte h : 2 byte w : 4 byte g : 8 byte
기타
c : break point까지 실행 stepi(si)/nexti(ni) : 코드 한줄 실행, si는 함수 안으로 들어가고 ni는 들어가지 않음. set {타입}[주소] = [값] : 특정 메모리에 값을 지정 ( set {int}0x8048300 = 100 )
peda 사용법
pdisas
context
코드, 레지스터, 스택 영역을 볼 수 있음. 인자 생략 시에는 context all 과 같음. gdb-peda$ context "code/register/stack/all"
session
기존과 달리 break point와 같은 설정들을 저장하고 불러오는게 가능 gdb-peda$ session save "파일이름", 파일이름 생략시엔 peda-session-"실행파일이름".txt 로 저장 gdb-peda$ session restore "파일이름", 파일이름 생략시엔 peda-session-"실행파일이름".txt 로드
vmmap
현재 디버깅 중인 프로세스의 Virtual Memory MAP을 보여줌 인자를 생략할 시에는 vmmap all 과 같음. gdb-peda$ vmmap "all/binary/libc/stack 등"
checksec
현재 바이너리에 걸려있는 보안 기법들을 보여줌 단, NX 기법에 대해선 vmmap stack, nxtest을 이용하는 것이 더 좋다고 함. gdb-peda$ checksec
nxtest
NX 가 걸려있는지 테스트 해주는 명령어로 스택에 실행권한이 있는지 체크 gdb-peda$ nxtest
procinfo / getpid
procinfo -> 현재 디버깅중인 프로세스의 정보를 표시 getpid -> pid 값을 출력 gdb-peda$ procinfo gdb-peda$ getpid
elfsymbol
현재 디버깅 중인 바이너리의 plt, got 주소 등을 표시 인자를 생략하면 symbol들을 모두 보여줌. gdb-peda$ elfsymbol "symbol"
elfheader
현재 디버깅 중인 바이너리의 헤더 정보 출력 gdb-peda$ elfheader
find / searchmem
같은 기능의 명령어, 메모리 영역에서 특정 패턴을 찾아줌. gdb-peda$ find/searchmem "pattern" "범위" 범위부분을 생략하면 binary 영역으로 세팅됨.
ropgadget / ropsearch / dumprop
ROP 공격 시 필요한 가젯들을 쉽게 찾을 수 있도록 하는 명령어 ropgadget -> pop-ret, leave-ret, add esp 등 자주 쓰이는 가젯 찾아줌 ropsearch -> 원하는 특정 가젯 찾아줌. dumprop -> 특정 메모리 영역에 있는 가젯들을 찾아줌. gdb-peda$ ropgadget binary/libc/vdso/all ... 인자를 생략하면 ropgadget binary 와 같음. gdb-peda$ ropsearch "gadget" "범위" gadget 부분을 '' 로 빈 상태로 보내면 모든 가젯을 찾음. gdb-peda$ dumprop "범위" 인자를 생략하면 dumprop binary 와 같음. Example gdb-peda$ ropgadget gdb-peda$ ropgadget libc gdb-peda$ ropsearch "add esp, ?" binary gdb-peda$ ropsearch "int 0x80" libc gdb-peda$ ropsearch "" binary ( binary 범위에서 모든 가젯을 찾습니다. ) gdb-peda$ ropsearch "pop ?" 0x08048000 0x0804b000 gdb-peda$ dumprop binary gdb-peda$ dumprop 0x08048000 0x0804b000
jmpcall
ROP 시 jmp, call 가젯들을 찾아줌. gdb-peda$ jmpcall "register" "범위" 인자들을 모두 생략하면 바이너리 영영 내 모든 jmp, call 가젯들을 찾아줌. gdb-peda$ jmpcall gdb-peda$ jmpcall "" libc gdb-peda$ jmpcall esp libc gdb-peda$ jmpcall [eax] libc gdb-peda$ jmpcall eax
shellcode
peda에서 제공하는 쉘코드라고 함. shellcode generate 명령어로 현재 가능한 쉘 코드 종류 확인 및 생성 가능 gdb-peda$ shellcode generate x86/linux exec
pwngdb
heapinfo
heap 정보를 출력 gdb-peda$ heapinfo [Address of arena]
magic
glibc(GNU C Library)에서 유용한 함수 주소를 출력 gdb-peda$ magic
###parseheap
힙 메모리를 구조에 맞게 분석 gdb-peda$ parseheap