天天看點

PWN 基礎環境配置

Ubuntu 虛拟機鏡像下載下傳

中科大鏡像

https://mirrors.ustc.edu.cn/

前期準備

安裝 vm-tools

sudo apt-get install open-vm-tools-desktop
           

安裝 git

sudo apt-get install git
           

安裝 vim

sudo apt-get install vim
           

安裝 gedit

sudo apt-get install gedit
           

安裝 curl

sudo apt-get install curl
           

安裝 net-tools

sudo apt-get install net-tools
           

Kali root+免密登入

顔色配置檔案複制到 root 使用者下

非 root 使用者下指令行是有配色的,切換到 root 使用者就沒有顔色

sudo cp -f ~/.bashrc /root
           

給 root 設定初始密碼

sudo passwd root
           

root 免密登入(不确定有沒有用)

sudo gedit /etc/lightdm/lightdm.conf
           

找到 [Seat:*] 那一行,取消注釋或者添加如下内容:

autologin-user=root
autologin-user-timeout=0
           

Ubuntu root+免密登入

顔色配置檔案複制到 root 使用者下

sudo cp ~/.bashrc /root/.bashrc
           

給 root 設定初始密碼

sudo passwd root
           

修改 gdm-autologin

sudo gedit /etc/pam.d/gdm-autologin
           

注釋掉 auth required pam_success_if.so user!=root quiet_success

PWN 基礎環境配置

修改 gdm-password

sudo gedit /etc/pam.d/gdm-password
           

注釋掉 auth required pam_success_if.so user!=root quiet_success

PWN 基礎環境配置

修改 .profile

sudo gedit /root/.profile
           

最後一行改為以下:

tty -s && mesg n || true
           
PWN 基礎環境配置

修改 custom.conf

sudo gedit /etc/gdm3/custom.conf
           

把 [daemon] 改為:

[daemon]
AutomaticLoginEnable=true
AutomaticLogin=root
           
PWN 基礎環境配置

部分Ubuntu系統代号

lsb_release -a
           

Ubuntu 16.04 代号為: xenial

Ubuntu 17.04 代号為: zesty

Ubuntu 18.04 代号為: bionic

Ubuntu 19.04 代号為: disco

Ubuntu 20.04 代号為: focal

Ubuntu 22.04 代号為: jammy

Ubuntu 22.10 代号為: kinetic

更新鏡像源

清華大學鏡像(選擇版本複制即可)

https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

Ubuntu22更新源

sudo gedit /etc/apt/sources.list
           
#華為源
deb https://repo.huaweicloud.com/ubuntu/ jammy main restricted
deb https://repo.huaweicloud.com/ubuntu/ jammy-updates main restricted
deb https://repo.huaweicloud.com/ubuntu/ jammy universe
deb https://repo.huaweicloud.com/ubuntu/ jammy-updates universe
deb https://repo.huaweicloud.com/ubuntu/ jammy-backports main restricted universe
deb https://repo.huaweicloud.com/ubuntu/ jammy-security main restricted
deb https://repo.huaweicloud.com/ubuntu/ jammy-security universe
#阿裡源
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
           

一些安裝優化

更新

apt update
apt upgrade
apt clean
           

虛拟機共享檔案夾路徑

cd /mnt/hgfs/
           

kali 和 Ubuntu22.10 虛拟機共享檔案夾挂載

檢視共享檔案夾:

vmware-hgfsclient
           

這裡我的共享檔案夾名字是:Ubuntu22.10Share

挂載:

/usr/bin/vmhgfs-fuse .host:/Ubuntu22.10Share /mnt/hgfs -o allow_other -o uid=0 -o gid=0 -o umask=022
           

這裡 uid gid 都是 0,即 root 使用者,具體的值根據自己情況修改。

開機自動挂載:

gedit /etc/fstab
           

加入以下内容:

.host:/Ubuntu22.10Share /mnt/hgfs/ fuse.vmhgfs-fuse allow_other,uid=0,gid=0,umask=022 0 0
           

Ubuntu 右鍵顯示建立文檔

把空白文本檔案放模闆檔案夾即可

建立連結,讓 python 預設連結 python3

ln -s /usr/bin/python3 /usr/bin/python
           

安裝 pip3

apt-get install python3-pip
           

安裝 python2

apt-get install python2
           

Python 版本切換

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.10 2
           

選擇要切換版本:

update-alternatives --config python
           

python3 存在多版本時的切換,以 python3.10 和 python3.8 為例:

update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
           

選擇要切換版本:

update-alternatives --config python3
           

後面數字代表了優先級,數字越大優先級越高。

安裝 pip2

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2 get-pip.py
           

pip 下載下傳加速

臨時:

pip install -i https://mirrors.aliyun.com/pypi/simple 包名
           

永久:

gedit  ~/.pip/pip.conf
           

如果 .pip 檔案夾不存在就在根目錄建立一個,. 開頭的檔案是隐藏檔案,建立 .pip 檔案夾并且在檔案夾下建立pip.conf 檔案即可

加入内容:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = mirrors.aliyun.com
           
PWN 基礎環境配置

pip 更新

(python3更新,pip 21 已經取消對 Python 2.7 的支援了)

pip3 install --upgrade pip
           

或者:

python3 -m pip install --upgrade pip
           

建議

用python3 -m pip來代替pip3

用python2 -m pip來代替pip2

PWN工具安裝

pwntools

安裝相關依賴:

apt-get install python3-dev python-dev libssl-dev libffi-dev build-essential
           

python3:

python3 -m pip install --upgrade virtualenv
python3 -m pip install -U pip setuptool
python3 -m pip install --upgrade pwntools
           

python2:

python2 -m pip install pathlib2
python2 -m pip install pwntools
           

pwncli

git clone https://github.com/RoderickChan/pwncli.git
cd ./pwncli
python3 -m pip install --editable
           

LibcSearcher

git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
python3 setup.py develo
           

建議用這個(需要聯網使用)

python3 -m pip install LibcSearcher
           

libc-database(年久失修)

git clone https://github.com/niklasb/libc-database.git
           

加入 libc-database 資料庫:

本地 32bit:

./add /lib/i386-linux-gnu/libc.so.6
           

本地 64bit:

./add /lib/x86_64-linux-gnu/libc.so.6
           

one_gadget

apt -y install ruby
gem install one_gadget
           

ROPgadget

git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
python3 setup.py install
           

如果報錯(這是 python3.10 版本的,其他版本對應修改就行了)

pkg_resources.ResolutionError: Script 'scripts/ROPgadget' not found in metadata at '/usr/local/lib/python3.10/dist-packages/ROPGadget-7.2.dist-info'

就進入 ROPgadget 目錄再輸入:

cp -r scripts /usr/local/lib/python3.10/dist-packages/ROPGadget-7.2.dist-info
           

ropper

python3 -m pip install capstone
python3 -m pip install filebytes
git clone https://github.com/sashs/ropper.git
cd ./ropper
python3 setup.py install
           

或者:

python3 -m pip install ropper
           

seccomp-tools

apt-get install gcc ruby-dev
gem install seccomp-tools
           

seccomp 庫函數(編譯沙盒程式需要用到)

apt-get install libseccomp-dev libseccomp2 seccomp
           

glibc-all-in_one(下載下傳指定 libc 時需要)

git clone https://github.com/matrix1001/glibc-all-in-one.git
           

patchelf(讓檔案加載指定 libc 時需要)

git clone https://github.com/NixOS/patchelf.git
apt-get install autoconf automake libtool
cd patchelf
./bootstrap.sh
./configure
make
make install
           

或者:

apt-get install patchelf
           

roputils

git clone https://github.com/inaz2/roputils.git
           

main_arena

git clone https://github.com/bash-c/main_arena_offset.git
           

ae64

git clone https://github.com/veritas501/ae64.git
           

alpha3

git clone https://github.com/SkyLined/alpha3.git
           

推薦這個:

git clone https://github.com/TaQini/alpha3.git
           

gdb-multiarch

apt-get install gdb-multiarch
           

gcc-multilib

apt-get install gcc-multilib
apt-get install libc6:i386
           

GDB 插件

pwndbg

git clone https://github.com/pwndbg/pwndbg.git
cd pwndbg
./setup.sh
           

gef

git clone https://github.com/hugsy/gef.git
python3 -m pip install keystone-engine
python3 -m pip install ropper
python3 -m pip install unicorn
python3 -m pip install capstone
           

peda

git clone https://github.com/longld/peda.git
           

peda-heap

git clone https://github.com/Mipu94/peda-heap.git
           

更換 gdb 插件

gedit ~/.gdbinit
           

如果把插件都放到根目錄下的 GdbPlugins 檔案夾,配置檔案 .gdbinit 内容:

#source ~/GdbPlugins/gef/gef.py
source ~/GdbPlugins/pwndbg/gdbinit.py
#source ~/GdbPlugins/peda-heap/peda.py
#source ~/GdbPlugins/peda/peda.py
           

#源碼調試:

(需要安裝 libc 源碼:

apt-get install glibc-source
           

安裝完可以在 /usr/src/glibc/ 中找到源碼壓縮包,解壓到任意目錄即可)

dir /usr/src/glibc-2.35/stdlib
           

#輸出到 1 号終端,tty 指令可以檢視終端号:

set context-output /dev/pts/1
           

要想使用哪一個取消注釋即可

PWN 基礎環境配置

PWN-glibc

libc源碼線上閱讀

https://elixir.bootlin.com/glibc/glibc-2.27/source

下載下傳指定 libc

glibc-all-in_one

進入 glibc-all-in-one 目錄

更新最新版本的 glibc:

./update_list
           
PWN 基礎環境配置

檢視可下載下傳的 glibc:

cat list
           

如果是舊版本 gibc:

cat list_old
           

下載下傳 glibc(glibc_name 為你想要下載下傳 glibc 的名字)

./download glibc_name
           

舊版本用:

./download_old glibc_name
           

運作時加載指定 libc

Patchelf

添加可執行程式所在路徑為依賴庫搜尋路徑:

patchelf --set-rpath '$ORIGIN/' my-program
           

更改可執行檔案的動态加載器(“ELF 解釋器”):

patchelf --set-interpreter /lib/my-ld-linux.so.2 my-program
           

更改 RPATH可執行檔案和庫:

patchelf --set-rpath /opt/my-libs/lib:/other-libs my-program
           

删除對動态庫的聲明依賴( DT_NEEDED條目):

patchelf --remove-needed libfoo.so.1 my-program
           

例如,如果需要加載指定的 2.27 版本:

patchelf --set-interpreter /root/libcbase/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/ld-2.27.so ./pwn
patchelf --replace-needed libc.so.6 /root/libcbase/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/libc-2.27.so ./pwn
           

glibc-all-in-one 的路徑根據自己路徑更改,./pwn 是需要指定的檔案

pwntools

p = process(['./pwn'],env={"LD_PRELOAD":"./libc-2.27.so"})
           

不過讓程式強行加載特定版本 glibc可能會導緻運作異常。通過 LD_LIBRARY_PATH 或者 LD_PRELOAD,因為 ld.so 和 libc.so 不比對的原因,是以直接設定 LD_PRELOAD 程式可能會爆炸。

正确寫法應該是:

p = process(["ld-2.27.so", "./pwn"],env={"LD_PRELOAD":"./libc-2.27.so"})
           

Glibc 調試符号加載

先得到 libc 的 Build ID(glibc 2.35為例)

readelf -n libc.so.6 | grep 'Build ID:'
readelf -n ld-linux-x86-64.so.2 | grep 'Build ID:'
           

分别得到:

Build ID: 89c3cb85f9e55046776471fed05ec441581d1969
Build ID: aa1b0b998999c397062e1016f0c95dc0e8820117
           

因為 GDB 會從

/usr/lib/debug/.build-id/89/c3cb85f9e55046776471fed05ec441581d1969.debug 和

/usr/lib/debug/.build-id/aa/1b0b998999c397062e1016f0c95dc0e8820117.debug

檔案中讀取調試資訊。(注意 .build-id 是隐藏檔案夾,需要取消隐藏才可以看到)

是以把 /glibc-all-in-one/libs/2.35-0ubuntu3_amd64/.debug/.build-id/ 下對應的檔案複制去 /usr/lib/debug/.build-id/ 即可

繼續閱讀