pwn做题环境搭建
多libc环境
这个项目可以下载多个编译好的libc.so以及ld.so
git clone https://github.com/matrix1001/glibc-all-in-one
cd glibc-all-in-one
./update_list #获取可以更新的glibc的版本
cat list #查看可下载的glibc
./download glibc #glibc为要下载glibc的名字
exp调试时这样写即可
elf_addr = "./roarctf_2019_easyheap"
ld_path="/home/wangpei/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so"
libc_path="/home/wangpei/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc.so.6"
sh = process([ld_path,elf_addr],env={"LD_PRELOAD":libc_path})
在这里插入图片描述
系统 Ubuntu16.04 x64
装python2
卸载自带的python2,然后用下面的命令来安装新的
sudo apt-get install python-minimal python-dev
安装pip2
wget https://files.pythonhosted.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz
tar -zxvf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install #我这里只装了python2
如果上一步安装时提示缺少setuptools就按下面步骤安装setuptools
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar -xvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py build
python setup.py install
安装其他依赖
apt install gcc-4.8-multilib g++-4.8-multilib #编译32位程序需要
apt install python-dev #安装pwntools需要
apt-get install libc6:i386 #安装32位库
安装Seccomp Tools
升级ruby
添加 PPA 源:
sudo add-apt-repository ppa:brightbox/ruby-ng
sudo apt-get update
先删除旧版本:
sudo apt-get purge --auto-remove ruby
然后安装新版本:
sudo apt-get install ruby2.6 ruby2.6-dev
安装 Seccomp Tools
gem install seccomp-tools
安装one_gadget
sudo gem install one_gadget
安装Ropgadget
pip install ropgadget
Ropgadget #使用的时候是ROPgadget
pwndbg安装
1 git clone https://github.com/pwndbg/pwndbg
2 cd pwndbg
3 ./setup.sh
安装pwngdb,增加heap相关的插件
cd ~/
git clone https://github.com/scwuaptx/Pwngdb.git
cp ~/Pwngdb/.gdbinit ~/
gdb-peda安装
1 git clone https://github.com/longld/peda.git ~/peda
2 echo "source ~/peda/peda.py" >> ~/.gdbinit
gef安装
# via the install script
#下载 `gef.sh` 并执行
wget -q -O- https://github.com/hugsy/gef/raw/master/gef.sh | sh
# manually
# 下载 `gef.py`, 并将其 `source` 写入 `.gdbinit`
wget -q -O ~/.gdbinit-gef.py https://github.com/hugsy/gef/raw/master/gef.py
echo source ~/.gdbinit-gef.py >> ~/.gdbinit
修改.bashrc 自定义命令,来轻松切换gef和gdb-peda
修改.basrc,将下面两行代码插入到.bashrc里
alias gef="echo 'source ~/.gdbinit-gef.py' > ~/.gdbinit"
alias peda="echo 'source ~/peda/peda.py'> ~/.gdbinit"
执行
source .bashrc
调试的时候想使用gef插件,启动gdb之前,在终端输入gef
想使用gdb-peda时
libcsearcher安装
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
python setup.py develop
pwntools安装
python -m pip --timeout=100 install pwntools
gdb 调试技巧
layout asm //查看反汇编
si //单步执行进入
ni //单步执行跳过
run //运行
r < code //将code作为输入运行
x/100i addr // 从addr地址开始,反汇编100条指令
bt 查看栈帧
编写shellcode
这是在网上找的
1、在shellcode数据库网站找一个shellcode,http://shell-storm.org/shellcode/
2、使用kali的msfvenon生成shellcode,如命令msfvenon -p linux/x86/exec CMD=/bin/sh -f python
3、使用pwntools自带的函数如asm(shellcraft.sh())