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
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SY3QWOwQWNxgzNiJGZhFTNyQTZhVTOwYzYwIGZ1cTOl9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
修改 gdm-password
sudo gedit /etc/pam.d/gdm-password
注釋掉 auth required pam_success_if.so user!=root quiet_success
修改 .profile
sudo gedit /root/.profile
最後一行改為以下:
tty -s && mesg n || true
修改 custom.conf
sudo gedit /etc/gdm3/custom.conf
把 [daemon] 改為:
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=root
部分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
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-glibc
libc源碼線上閱讀
https://elixir.bootlin.com/glibc/glibc-2.27/source
下載下傳指定 libc
glibc-all-in_one
進入 glibc-all-in-one 目錄
更新最新版本的 glibc:
./update_list
檢視可下載下傳的 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/ 即可