基於Ubuntu搭建Pwn除錯環境
Pwn環境配置
本文演示使用乾淨的Vmware下安裝的的 Ubuntu 18.04 LTS映象 配置以下Pwn環境:
- OS(系統)配置
- VMware Tools
- net-tools
- open-vm-tools
- 更換軟體源
- vim
- 開啟root賬戶許可權
- 其它環境配置
- git
- gcc
- python3-pip
- python3
- qemu
- gdb-multiarch
- Pwn工具
- pwn-tools
- pwndbg、peda、gef
- seccomp-tools
- LibcSearcher
- patchelf
- ARM PWN
- gcc-arm-linux-gnueabi
- gcc-aarch64-linux-gnu
- MIPS PWN
- gcc-mips-linux-gnu
- gcc-mipsel-linux-gnu
- gcc-mips64-linux-gnuabi64
- gcc-mips64el-linux-gnuabi64
為了一些命令可以讓大家通用,所以都會加上sudo等許可權語句,這樣即便你不使用root賬戶或挑選任何一個小節直接觀看和執行命令都是沒有問題的
Ubuntu 18.04是一個常用的版本,即便是更高的版本以下安裝方式都是可用的。
我當前用的是Ubuntu18.04.6目前使用的是glibc2.27版本,還是主流的PWN Pwn題中的版本,所以選了這個
# 檢視glibc版本 ldd --version
Ubuntu OS配置
需要下載作業系統和虛擬機器的小夥伴一定要認準官網啊,畢竟大家可是搞安全的,要專業!(๑•̀ㅂ•́)و✧
Ubuntu官網:https://ubuntu.com/
VMware Workstation:https://www.vmware.com/
安裝Vmware Tools
VMware Tools是VMware虛擬機器中自帶的一種增強工具,相當於VirtualBox中的增強功能(Sun VirtualBox Guest Additions),是VMware提供的增強虛擬顯示卡和硬碟效能、以及同步虛擬機器與主機時鐘的驅動程式。
選中當前操Ubuntu虛擬機器,點選選單欄虛擬機器-> 安裝 Vmware Tools
然後開啟一個終端,將當前使用者臨時切換為root賬戶
# 臨時切換root使用者許可權
sudo su
# vmware-tools被放在/media/使用者/VMware Tools目錄下,使用命令將其進行解壓,然後輸出到/tmp目錄下,因為media目錄下是隻讀的
tar -zxvf /media/使用者名稱/VMware\ Tools/VMwareTools-xx.x.xx-xxxxx.tar.gz -C /tmp
# 切換到解壓後的vmware-tools目錄下
cd /tmp/vmware-tools-distrib/
# 執行vmware-install.pl檔案
./vmware-install.pl
# 提示是否要安裝open-vm-tools[Do you still want to proceed with this installation?] 這裡選擇yes
yes
# 安裝完成後重啟系統
reboot
安裝net-tools
Linux網路基礎工具。構成Linux作業系統NET-3網路分佈的基礎程式集。
net-tools提供了基本的網路相關操作,如ifconfig,而Ubuntu預設沒有安裝net-tools,所以這裡安裝一下
# 臨時切換到root許可權
sudo su
# 更新軟體索引並安裝net-tools工具
apt update && apt install net-tools
安裝完成後,可以執行一下ifconfig命令來驗證是否安裝成功
安裝open-vm-tools
open-vm-tools 是VMwareTools 的開源實現,由一套虛擬化實用程式組成,這些程式可增強虛擬機器在 VMware 環境中的功能。
open-vm-tools提供VMware 虛擬機器檔案複製、複製貼上功能
# 更新軟體索引並移除系統中安裝過的open-vm-tools
sudo apt update && apt autoremove open-vm-tools
# 安裝open-vm-tools --安裝過程中一路預設回車即可
sudo apt install open-vm-tools-desktop
# 安裝完成後,重啟系統
reboot
重啟後,可自由 宿主機<->虛擬機器 拖拽檔案、複製貼上等快捷鍵
替換軟體源
軟體源是指linux系統線上安裝的軟體包的來源,是作業系統官方釋出的軟體安裝包的一個集合,即應用程式安裝倉庫。
這裡官方源真的太慢了老是安裝軟體失敗,還是換成阿里雲的Ubuntu軟體源吧
# 臨時切換root許可權
sudo su
# 備份apt軟體源
cp /etc/apt/sources.list /etc/apt/sources.list.old
# 編輯sources.list檔案
vi /etc/apt/sources.list
命令模式下使用dG即可清空檔案中的所有內容,然後將以下內容複製到vi中,Ubuntu中貼上快捷鍵為ctrl + shift + v
# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
然後使用:wq進行儲存並退出操作
# 執行該命令驗證一下源更換是否成功
apt update
可以看到包含阿里雲的地址,表示更換源成功
安裝vim
Vim是一個類似於Vi的著名的功能強大、高度可定製的文字編輯器,在Vi的基礎上改進和增加了很多特性。
Ubuntu系統預設帶了vi編輯器,但是vim更好用所以安裝vim
# 臨時切換到root許可權
sudo su
# 安裝
apt update && apt install vim
選擇Y即可
開啟root賬戶
Root,也稱為根使用者,是Unix(如Solaris、AIX、BSD)和類UNIX系統(如Linux、QNX等),及Android和iOS移動裝置系統中的唯一的超級使用者,
開啟Ubuntu root許可權 -> Ubuntu預設禁用root賬戶,只能臨時使用root許可權,這樣不方便我們個人使用所以開啟root賬戶
首先重置root密碼
# 重置root賬戶密碼
sudo passwd root
# 輸入當前使用者密碼
# [sudo] password for xxx:
# 輸入要設定的root賬戶密碼
# Enter new UNIX password:
# 重新輸入root賬戶密碼
# Retype new UNIX password:
提示passwd: password updated successfully 表示密碼修改完成
開啟/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf檔案,檔案末尾增加兩行:
# 臨時切換root許可權
sudo su
# 使用vim編輯器開啟該檔案
vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
# 將以下內容追加到檔案中
greeter-show-manual-login=true
all-guest=false
然後:wq 退出即可
# 編輯gdm-autologin檔案 然後把標紅的那一行註釋掉
vim /etc/pam.d/gdm-autologin
然後:wq儲存退出即可
# 編輯gdm-password 然後把標紅的那一行註釋掉
vim /etc/pam.d/gdm-password
然後:wq儲存退出即可
# 編輯.profile檔案
vim /root/.profile
# 將原來的 mesg n || true註釋掉,然後替換成tty -s&&mesg n || true
# 如果沒有mesg n || true,那麼就在檔案末尾新增tty -s&&mesg n || true
tty -s&&mesg n || true
然後:wq儲存退出即可
重啟系統,即可使用root賬戶登入,點Not listed,Username 輸入 root,Password輸入賬戶密碼即可
此時再次開啟的終端就是root許可權的了,這是因為我們當前登入的使用者是root
其它環境配置
安裝git
Git是一個免費的、開源的分散式版本控制系統,旨在快速高效地處理從小型到大型專案的一切事務。
平常使用的最多的功能是可以拉取github、gitee等開源社群的專案
# 更新軟體索引並安裝git工具
sudo apt update && apt install git
檢查以下安裝是否成功
# git檢查版本命令 用來驗證安裝是否成功
git --version
有類似這樣的輸出表示安裝成功
安裝gcc
GCC(GNU Compiler Collection,GNU編譯器套件)是由GNU開發的程式語言譯器。
對於個人使用者或開發者而言主要可以用來編譯一些c語言程式碼,自己想要編寫一些demo的時候需要gcc進行編譯
# 使用root許可權安裝gcc
sudo apt update && apt install gcc
# 安裝完成後使用命令驗證安裝是否成功
gcc --version
安裝python3-pip
pip 是一個現代的,通用的 Python 包管理工具。提供了對 Python 包的查詢、下載、安裝、解除安裝的功能。
python包管理工具
# 安裝pip
sudo apt update && apt install python3-pip
# 安裝完成後使用命令驗證安裝是否成功
pip3 --version
安裝python3
Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麵向物件的指令碼語言。
python執行環境,這就不用解釋了吧,執行python程式碼的
# 安裝python
sudo apt update && apt install python3
# 安裝完成後使用命令驗證安裝是否成功
python3 --version
安裝qemu
Qemu可以看成一款虛擬機器,他可以模擬很多CPU架構。
QEMU是一套由法布里斯·貝拉(Fabrice Bellard)所編寫的以GPL許可證分發原始碼的模擬處理器,在GNU/Linux平臺上使用廣泛
# 安裝qemu
sudo apt update && sudo apt install qemu-user qemu-system
# 安裝完成後使用命令驗證安裝是否成功
qemu-system-x86_64 --version
安裝gdb-multiarch
用作gdb客戶端進行除錯,是任何架構的通用客戶端
# 安裝gdb-multiarch
sudo apt update && sudo apt install gdb-multiarch
# 安裝完成後使用命令驗證安裝是否成功
gdb-multiarch --version
Pwn工具
在主目錄下建立一個存放pwn工具的目錄,如env,這樣就能將工具檔案統一進行管理
# 在主目錄下建立Env(envirment)資料夾
mkdir ~/Env
安裝pwntools
pwntools是一個CTF框架和漏洞利用開發庫,用Python開發,旨在讓使用者簡單快速的編寫exploit。
pwntools有兩種安裝方法,一種是git專案後安裝,另一種是pip直接安裝。這裡我們把pwntools git下來,但是用pip安裝,因為後續的工具需要pwntools專案包裡的指令碼,pip安裝不會出錯。安裝過程時間較長,保持網路狀態良好
# clone git倉庫原始碼
git clone https://github.com/Gallopsled/pwntools.git
sudo apt update && apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwntools
pip3 list | grep pwntools
安裝pwndbg、peda、gef
pwndbg是一個gdb的外掛,在ctf中pwn題目中使用非常方便,尤其是對堆的檢視,有很多獨有的指令。
peda一款實用的GDB外掛 增強gdb的顯示:在除錯過程中著色並顯示反彙編程式碼,暫存器和記憶體資訊。
gdb是GNU開源組織釋出的一個強大的Linux下的程式除錯工具。gef做為gdb的一個外掛,方便快速除錯使用。
# 拉取程式碼 -> 如果拉取不下來的話,可以先把這三個專案frok到自己的github倉庫,然後使用ssh拉取即可
# -> 或者使用代理網路等
git clone https://github.com/pwndbg/pwndbg.git
git clone https://github.com/longld/peda.git
git clone https://github.com/hugsy/gef.git
# 切換到pwndbg目錄下
cd ~/tools/pwndbg
# 安裝
./setup.sh
# 安裝依賴外掛
pip3 install keystone-engine ropper keystone-engine
# 可以通過編輯gdbinit掛載外掛
vim ~/.gdbinit
# 這個根據自己的目錄來就可以了
source /root/Env/pwndbg/gdbinit.py
#source /root/Env/peda/peda.py
#source /root/Env/gef/gef.py
#選中任意一個指令碼後,輸入gdb即可使用
gdb
選擇其中任何一個外掛後,然後將其它兩個外掛註釋掉就好了,比如想使用pwndbg的時候:
使用peda:
使用gef:
安裝seccomp-tools
seccomp-tools可以分析程式的seccomp狀態,哪些被系統被禁用了安裝
該專案旨在(但不限於)分析CTF pwn挑戰中的seccomp沙盒。有些特性可能是特定於ctf的,但對於分析真實情況下的seccomp仍然有用
# 安裝seccomp-tools
gem install seccomp-tools
# 安裝完成後檢查安裝是否成功
seccomp-tools --version
安裝LibcSearcher
LibcSearcher是針對pwn做的python庫,在做pwn題時尋找libc版本非常好用,使用方式也非常簡單
這是針對CTF比賽所做的小工具,在洩露了Libc中的某一個函式地址後,常常為不知道對方所使用的作業系統及libc的版本而苦惱,常規方法就是挨個把常見的Libc.so從系統裡拿出來,與洩露的地址對比一下最後12位(LibcSearcher自帶libc-database)
# 克隆程式碼
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
# 安裝
python3 setup.py develop
# 檢視是否安裝成功
pip3 list | grep LibcSearcher
安裝patchelf
patchelf 是一個用來修改elf格式的動態庫和可執行程式的小工具,可以修改動態連結庫的庫名字,以及連結庫的RPATH
這個真的是非常滴好用,因為在做題的時候無法避免會出現多版本libc題的情況,但是如果按照libc版本重灌多個虛擬機器的話實在是太費勁了,patchelf就可以直接修改題目所需的libc
# 更新索引並安裝patchelf
sudo apt update && apt install patchelf
# 驗證安裝是否成功
patchelf --version
安裝ARM PWN
基於ARM架構的PWN
ARM軟體包 -> 具備ARM交叉編譯gcc與ARM程式動態連結庫
安裝gcc-arm-linux-gnueabi
適用於 Arm Cortex-A 系列晶片,針對 32 位晶片,使用的是 glibc 庫。可以用來編譯 u-boot、linux kernel 以及應用程式。
# 安裝gcc-arm-linux-gnueabi
sudo apt update && apt install gcc-arm-linux-gnueabi
# 輸入Y繼續安裝
Y
# 輸入以下內容然後按下tab鍵盤進行補全
arm-linux-gnueabi
有以下內容說明安裝成功
安裝gcc-aarch64-linux-gnu
適用於 Arm Cortex-A 系列晶片,針對 64 位晶片,使用的是 glibc 庫。可以用來編譯 u-boot、linux kernel 以及應用程式。
# 安裝gcc-aarch64-linux-gnu
sudo apt update && apt install gcc-aarch64-linux-gnu
# 輸入Y繼續安裝
Y
# 輸入以下內容然後按下tab鍵盤進行補全
aarch64-linux-gnu
有以下內容說明安裝成功
安裝MIPS PWN
基於MIPS架構的PWN
具備MIPS交叉編譯gcc與MIPS程式動態連結庫
安裝gcc-mips-linux-gnu
這是一個依賴包,為mips架構提供預設的GNU C交叉編譯器。
# 安裝gcc-mips-linux-gnu
sudo apt update && apt install gcc-mips-linux-gnu
# 輸入Y繼續安裝
Y
# 輸入以下內容然後按下tab鍵盤進行補全
mips-linux-gnu-
有以下內容說明安裝成功
安裝gcc-mipsel-linux-gnu
這是一個為mipsel架構提供預設GNU C交叉編譯器的依賴包。
# 安裝gcc-mipsel-linux-gnu
sudo apt update && apt install gcc-mipsel-linux-gnu
# 輸入Y繼續安裝
Y
# 輸入以下內容然後按下tab鍵盤進行補全
mipsel-linux-gnu
有以下內容說明安裝成功
安裝gcc-mips64-linux-gnuabi64
這是一個依賴包,為mips64架構提供預設的GNU C交叉編譯器。
# 安裝gcc-mips64-linux-gnuabi64
sudo apt update && apt install gcc-mips64-linux-gnuabi64
# 輸入Y繼續安裝
Y
# 輸入以下內容然後按下tab鍵盤進行補全
mips64-linux-gnuabi64
有以下內容說明安裝成功
安裝gcc-mips64el-linux-gnuabi64
這是一個依賴包,為mips64el架構提供預設的GNU C交叉編譯器。
# 安裝gcc-mips64el-linux-gnuabi64
sudo apt update && apt install gcc-mips64el-linux-gnuabi64
# 輸入Y繼續安裝
Y
# 輸入以下內容然後按下tab鍵盤進行補全
mips64el-linux-gnuabi64
有以下內容說明安裝成功