본문 바로가기
Linux

[Linux] CTF 풀이를 위한 리눅스 설정 (ubuntu 18)

by snwo 2020. 10. 8.

1. 미러서버 변경

apt 으로 패키지를 다운받을때 쓰이는 서버입니다. 속도증가를 위해 카카오 미러서버로 바꿔줍시다.

sudo vi /etc/apt/sources.list

들어가서 :%s/archive.ubuntu.com/mirror.kakao.com 명령모드로 입력한 뒤, :wq 입력해서 저장하고 나오기.

archive.ubuntu.com <- 이 부분은 다를수도있으니, 각자 확인해보자.

sudo apt-get update

업데이트해준다.

 

2. 디버거 세팅

바이너리파일 동적 디버깅할때 주로 pwndbg, peda, gef 등 gdb 의 업그레이드 버전을 사용한다.

콘솔기반으로 제작되었는데, GUI 로 된것도 있으니 원한다면 찾아보길 바란다.

 

gdb 가 없다면 설치

sudo apt-get install gdb

원래는 하나만 설치해서 쓰는데, 세개를 구분해서 쓰는 방법도 있다.

medium.com/bugbountywriteup/pwndbg-gef-peda-one-for-all-and-all-for-one-714d71bf36b8

 

Pwndbg + GEF + Peda — One for all, and all for one

Install all plugins at the same time and switch with a simple command.

medium.com

pwndbg 설치

더보기
#git 이 없으면 -> sudo apt-get install -y git

git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
cd ~
mv pwndbg ~/pwndbg-src
echo "source ~/pwndbg-src/gdbinit.py" > ~/.gdbinit_pwndbg

peda 설치

더보기
#git 이 없으면 -> sudo apt-get install -y git

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

gef 설치

더보기
#git 이 없으면 -> sudo apt-get install -y git

wget -q -O ~/.gdbinit-gef.py https://github.com/hugsy/gef/raw/master/gef.py
echo source ~/.gdbinit-gef.py >> ~/.gdbinit

구별해서 사용하기위한 세팅

더보기
define init-peda
source ~/peda/peda.py
end
document init-peda
Initializes the PEDA (Python Exploit Development Assistant for GDB) framework
end

define init-pwndbg
source ~/.gdbinit_pwndbg
end
document init-pwndbg
Initializes PwnDBG
end

define init-gef
source ~/.gdbinit-gef.py
end
document init-gef
Initializes GEF (GDB Enhanced Features)
end

이 내용을 ~/.gdbinit 에 입력한다.

 

sudo nano /usr/bin/gdb-peda

#!/bin/sh

exec gdb -q -ex init-peda "$@" 

 

sudo nano /usr/bin/gdb-pwndbg

#!/bin/sh 
exec gdb -q -ex init-pwndbg "$@" 


sudo nano /usr/bin/gdb-gef

#!/bin/sh 
exec gdb -q -ex init-gef "$@" 

 

/usrbin/gdb-gef,gdb-pwn,gdb-peda 에 각각 내용을 써준다. (nano 말고 편한 텍스트에디터로 써도된다)

 

sudo chmod +x /usr/bin/gdb-* 

실행권한을 준다.

 

gdb-peda
gdb-pwndbg
gdb-gef

 

위 3가지명령어로 gdb 를 구별해서 실행시킬수 있다. (명령어 이름은 바꿀 수 있다.)

근데 나는 명령어하나를 안썼는지 pwndbg 에서 에러가 난다. pwndbg 는 잘 쓰지도 않고,

source ~/peda/peda.py
source ~/.gdbinit-gef.py

그래서 ~/.gdbinit 에 저 내용을 써서 gef 랑 peda 랑 같이 사용하고있다. 아직까진 별다른 오류가 나타나진 않는다.

3. python & pip 세팅

sudo apt-get install python3
sudo apt-get install python3-pip

python 버전 3 의 pip 를 다운받는다. python 2 버전 써도 상관없지만 3이 더 좋다고 한다.

 

추후 업로드..

pip3 install pwntools

4. 유용한 pwnable 툴

ROPgadget

pip3 install ropgadget

ROPgadget --binary [바이너리 이름] | grep 'pop rdi'

 

이런식으로 가젯을찾을때 사용한다.

 

one_gadget

sudo apt install ruby
gem install one_gadget

one_gdaget [바이너리 or libc]

원샷가젯 목록을 찾아준다.

sudo apt install binutils-multiarch

i386 아키텍쳐 라이브러리에서 찾을땐, 저걸로 설치해야한다.

5. 32bit 라이브러리 설치

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libstdc++6:i386

출처: https://techlog.gurucat.net/322 [하얀쿠아의 이것저것 만들기 Blog]

64bit 운영체제에서 32bit 바이너리를 실행하려면 i386 arch 를 활성화시키고 라이브러리를 설치해야한다.

 

추후 업로드...