peda와 cgdb를 사용할 것.
```bash
set env LD_PRELOAD=./libc.so.6
set {void*}0x80dfff7a = 0xff
set $rdx=0x98583
```
```bash
x/4x &main_arena
x/4x &__malloc_hook
find [/size-char] [/max-count] start_addr, +len, val1 [, val2, ...]
find [/size-char] [/max-count] start_addr, end_addr, val1 [, val2, ...]
```
```bash
watch $eax //eax가 변경될 때 마다 중단
d [num] // bp 지우는 것과 똑같다.
display $eax //중단될 때 마다 eax값 출력
```
```bash
p [수식 또는 변수] //변수의 value 출력. 수식 입력 시 계산기 처럼 사용하기 좋음.
p/d 16
(gdb) r < <(python -c 'print "123\x0045\x0167"') // stdin
bt // backtrace. 죽기 직전 호출했던 call stack 확인.
! // vi처럼 임시 shell 실행
```
Useful
```bash
u //현재 반복문을 빠져나감
finish //현재 함수를 수행하고 return
return [retval] //현재 함수를 수행하지 않고 return. retval을 지정할 수 있음.
call [func(arg...)] //함수 호출
jump [*addr | linenum | func] //강제 분기
```
show
```bash
info reg [register]
info b //bp 출력
info args //arguments 출력
info locals //지역변수 출력
info variable //전역변수 출력
show env //env는 info가 아니라 show다.
disas [func] [func+n 또는 주소] //그 주소까지만 disas 출력
print funcname //함수 주소 확인. run하고 수행시 GOT 확인 가능.
```
break
```bash
b *0xaddr
b *func [+n] // n은 func로부터의 상대위치
b +n // 현재 행 기준 +2행에 bp. -도 동일.
b 10 if var ==0 // 조건부 break
cl //bp 지우기. b와 동일한 옵션으로 사용 ??? d가 대체.
d idx //idx bp 삭제.
tb //일회용 break. b와 동일한 옵션으로 사용
```
```
c //다음 bp까지 진행
ni [6] //assembly 기준 6행 수행. 함수 진입하지 않음
si [5] //assembly 기준 5행 수행. 함수 in
n, s //source code 기준
```
stack frame
f [num] //해당 stack frame으로 이동
up [num] //상위 스택프레임으로 이동
down [num] //하위 스택프레임으로 이동
```
signal
info signal //signal 종류 출력
signal [signalname] //디버깅 중인 프로세스에 시그널 전달
```
x/FMT addr
FMT : 숫자+단위+format letter
ex) `` x/12bx`` ( b : byte, x : hex )
format letter
o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instructuion), c(char), s(strig), z(hex, zero padding)
source code
```bash
directory (path) //소스파일 탐색 경로 지정
objectdir (path) //오브젝트파일 경로 지정
```
gcc -g 옵션을 주어 컴파일 했을 때 사용 가능한 명령어
```bash
step //한줄 씩 실행
watch var
list //소스코드 출력
info local //지역변수 출력
```
기타 실행
```bash
$ gdb filename coredump
$ gdb processname pid
```
`` pid``로 ATTACH하는 경우, ctrl+Z등으로 stop 걸고 해서는 안되고, ``c getchar()`` 등으로 stop이 아닌 돌아가고 있는 상태에서 새로 쉘 띄워서 거기서 접근해야한다.
자식 프로세스 디버깅
- 일단 자식 프로세스를 실행하도록 하고 attach
- 그냥 gdb 위에서 run
'Security > Reversing & Dbg' 카테고리의 다른 글
[Linux] injection (0) | 2017.08.07 |
---|---|
gdb peda / gdb-multiarch (0) | 2017.07.13 |
x64/x32 dbg (0) | 2017.07.01 |
LD_PRELOAD를 이용한 so injection과 hooking. + wrapping function (2) | 2016.12.19 |
ptrace - Linux injection ( code injection / so injection ) (0) | 2016.12.12 |