基礎軟件安裝
-
大佬@giantbranch 配置的虛擬機,如果覺得自己用搭建環境比較麻煩,可以在他的github中直接下載虛擬機(提取碼: kypa),個人感覺是非常適合新手入門時使用的一套工具,也可以從github上獲取腳本進行安裝(最近爲了安裝新環境重新測試了一下github中的腳本,在Ubuntu16下測試失敗了,建議直接下載虛擬機)。下載的虛擬機搭建瞭如下環境:
-
apt源修改爲清華源, pip 修改爲豆瓣源
-
爲64位系統提供32位運行環境支撐
-
下載了libc6的源碼,方便源碼調試( 調試方法看這裏 )
-
給gdb裝上pwndbg和peda插件(./gdbinit 需要調整一下)
-
安裝pwntools
-
安裝one_gadget
-
下載libc-database
wget https://raw.githubusercontent.com/giantbranch/pwn-env-init/master/pwn_init_py2.sh chmod +x pwn_init_py2.sh sudo ./pwn_init_py2.sh
-
如果直接下載虛擬機,可以跳過下面的 2-10
-
從Ubuntu官網下載鏡像Ubuntu 16.04.6 LTS後安裝虛擬機,在啓動後將更新源修改爲國內的更新源。
-
基礎軟件安裝
sudo apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential sudo apt-get install git gdb gdb-multiarch "binfmt*" -y
GCC的全稱爲GNU CompilerCollection
, 是 Linux 系統下重要的編譯工具。默認Ubuntu
5. pwndbg
使用 gdb 調試 pwn 題時非常常見的一款插件。和下面的peda有很多地方有重合,可以選擇一款插件進行安裝。
shell git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh
6. Peda
Peda (Python Exploit Development Assistance for GDB) 和 pwntools 一樣屬於gdb的插件,用於對題目的動態調試。關於peda的使用,推薦一篇博客:@killshadow 師傅的一篇博客,關於各種命令講的都非常詳細,同時也介紹了ida和gdb的使用,非常的實用且易懂。
git clone https://github.com/longld/peda.git ~/peda
sudo gedit ~/.gdbinit
# 在./gdbinit 中新添加行:source ~/peda/peda.py
# 保存並退出 gedit
- Pwntools
Pwntools是一個CTF框架和漏洞利用開發庫。它是用Python編寫的,旨在用於快速開發,使漏洞利用程序編寫儘可能簡單。sudo -H pip install pwntools
- 安裝multilib,以支持32位程序
sudo apt install gcc-multilib
- Libcdatabase
建立libc偏移量數據庫以簡化開發。
- 安裝:
git clone https://github.com/niklasb/libc-database cd libc-database ./get
- 命令說明:
命令 | 作用 | 示例 |
---|---|---|
./get | 獲取所有已配置的libc版本並提取符號偏移量。也可以使用它來更新數據庫。不會重複下載 | |
./add | 將指定的libc添加到數據庫中。 | ./add /usr/lib/libc-2.21.so |
./find | 在數據庫中找到在給定地址上具有給定名稱的所有libc。因爲基址隨機化的原因,僅檢查最後12位。 | ./find printf 260 puts f30 |
從泄漏的返回地址中找到指定的libc對應__libc_start_main函數的地址。 | ./find __libc_start_main_ret a83 | |
./dump | 給定一個libc版本,查詢偏移量。也可以查詢指定的函數名。 | ./dump libc6_2.19-0ubuntu6.6_i386 |
./identify | 檢查數據庫中是否已存在對應的libc庫。 | ./identify /usr/lib/libc.so.6 |
./download | 下載與libc ID對應的整個庫。 | ./download libc6_2.23-0ubuntu10_amd64 |
- one_gadget
one_gadget 通過符號執行來查找可以成功執行execve命令的代碼片段,並輸出其需要的約束。
# 可以通過 ruby 直接安裝,所以我們首先安裝一下 ruby
sudo apt install ruby
sudo gem install one_gadget
- github上可以查看英文文檔,看英語比較喫力的小朋友們可以看一下這篇翻譯的介紹來上手
其他軟件
-
pwngdb
pwngdb 同屬於gdb的一個插件,對查看堆之類的操作比較友好。git clone https://github.com/scwuaptx/Pwngdb.git cat /Pwngdb/.gdbinit :' cat 命令顯示內容如下: source ~/Pwngdb/pwngdb.py source ~/Pwngdb/angelheap/gdbinit.py define hook-run python import angelheap angelheap.init_angelheap() end end 這裏去掉了peda的安裝路徑, 因爲pwngdb不需要peda作爲前置軟件 peda的安裝方式在前面有提到 將內容添加到 ~/.gdbinit 中 如果安裝路徑不爲$home, 則需將前三行中的安裝路徑修改爲自定義安裝路徑 ' sudo gedit ~/.gdbinit
.gdbinit 文件中的配置如下圖所示
-
LibcSearcher
基於前面的libc-database
開發的一款python小工具,可以直接在python腳本中執行以下命令查找對應的libc庫和函數偏移。
- 安裝
git clone https://github.com/lieanu/LibcSearcher.git cd LibcSearcher sudo -H python setup.py develop
- 使用:
from LibcSearcher import * #第二個參數,爲已泄露的實際地址,或最後12位(比如:d90),int類型 obj = LibcSearcher("fgets", 0X7ff39014bd90) obj.dump("system") #system 偏移 obj.dump("str_bin_sh") #/bin/sh 偏移 obj.dump("__libc_start_main_ret")
-
Sublime
一款輕量級的代碼編輯器,當然VSCode也很香,PyCharm也很香,gedit也很香,根據個人喜好去使用就ok。wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list sudo apt-get update sudo apt-get install sublime-text
-
gdb attach 調試
有一些情況會需要從腳本附加進行調試,這時候需要修改一下Ubuntu本身的調試權限:sudo su # 進入root權限 gedit /etc/sysctl.d/10-ptrace.conf # 將 kernel.yama.ptrace_scope = 1 # 修改爲 kernel.yama.ptrace_scope = 0
同時建議直接使用 root 賬戶進行調試,這時候需要爲我們的root賬戶重新設置一下我們的gdb環境:
# 下面的USER爲自己的用戶名 cp /home/USER/.gdbinit ~/.gdbinit # 打開 .gdbinit 文件,將裏面所有的 ~ 替換爲 /home/USER gedit ~/.gdbinit