Post

gdb peda / gdb-multiarch

nxtest

1
2
3
4
print main\_arena    // main\_arena 구조체를 정리해서 출력.
patch 0x555555757000 "/bin/sh"         // set 대체. hex나 dex를 입력해도 잘 동작.
dumpargs -- Display arguments passed to a function when stopped at a call instruction
strings
1
2
3
find "/bin/sh" libc
find 0xdeadbeef all
find "..\x04\x08" 0x08048000 0x08049000
바이너리 정보 출력
1
2
3
4
5
6
info shared
info auxv
vmmap [binary || libc || stack || all || ...]    // procfs
elfsymbol [func]                             // func@plt, func@got 주소.
readelf                                // section header.
procinfo                                         // fd와 socket이 어디와 연결되어 있는지.
python code 실행
1
2
3
4
5
6
gdb-peda$ python
>print("123")
>peda.execute(“continue”)
>end
123
gdb-peda$ pyhelp peda
ropgadget

ropgadget/ropsearch가 제대로 동작하지 않을 수 있기 때문에, 안나오면 find로도 검색해봐야 한다.

1
2
3
4
ropgadget                // 자주쓰는 pop-pop-ret gadget 등
ropsearch ["add esp,?"] [range]    // instruction을 포함한 gadget을 찾아준다.
ropsearch "syscall; ret"    // 띄어쓰기 해야함.
jmpcall [eax] [range]
shellcode
1
2
shellcode    // 이것만 입력하면 Usage가 출력되니 참고.
shellcode generate x86/linux exec
pattern
1
2
pattern create 100
pattern\_search
snapshot

snapshot이 아주 유용한게, 실행중인 프로세스에 attach하고 snapshot 찍어놓고 되돌리면서 하면 실제 런타임에 메모리가 어떻게 되는지 알 수 있다.

1
2
3
4
snapshot save [file\_name]
snapshot restore [file\_name]
session save [file\_name]      // bp, watch point만 저장
session restore [file\_name]
etc key feature
1
2
3
4
5
6
7
8
9
aslr -- Show/set ASLR setting of GDB
lookup -- Search for all addresses/references to addresses which belong to a memory range
skeleton -- Generate python exploit code template
xormem -- XOR a memory region with a key

  
pshow    -- show options
pset option clearscr off

Install

https://github.com/longld/peda

peda를 다운로드 받고 압축을 해제한 다음, peda를 사용할 사용자의 $HOME디렉토리에 ` .gdbinit`파일을 다음과 같이 작성한다.

1
echo "source ($peda\_install\_path)/peda.py" >> .gdbinit
Exception이 발생하는 경우
1
(gdb) python print(sys.version)

출력되는 버전이 3.x이라면, peda는 python 2.x를 기반으로 동작하기 때문에 peda를 설치해도 Exception이 발생한다. 해서, gdb를 python 2.x로 새로 컴파일 해야 한다.

#1 gdb 삭제하고 필요한 라이브러리 설치

1
2
3
4
sudo apt-get remove gdb
sudo apt-get install python2.7-dev
sudo apt-get install libcurses5-dev
sudo apt-get install texinfo

#2 http://ftp.gnu.org/gnu/gdb/에서 gdb를 다운로드 받고 압축 해제

1
wget http://ftp.gnu.org/gnu/gdb/gdb-8.0.tar.gz

#3 python2를 사용하도록 install

1
2
3
4
./configure --with-python=python2
make
sudo make install
mv ./gdb/gdb /usr/bin/gdb
This post is licensed under CC BY 4.0 by the author.