0x1 虚拟机安装
以经典款ubuntu18为例。
略
0x2 ubuntu换源
对于ubuntu18:
备份并编辑sources.list文件
cp /etc/apt/sources.list /etc/apt/sources.list.bck
gedit /etc/apt/sources.list
以下是各镜像源sources.list的参考配置:(内容均来自官网,任选其一即可)
中科大镜像源:
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
清华镜像源
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
阿里镜像源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src 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-backports main restricted universe multiverse
如要用于其他版本,把 bionic 换成其他版本代号即可: 22.04:jammy;20.04:focal;18.04:bionic;16.04:xenial;14.04:trusty
更改完 sources.list 文件后,运行 sudo apt-get update
更新索引以生效。
0x3 安装pwn基本组件
python-pwntools
python2.7环境下的pwntools:
sudo apt-get install python
sudo apt-get install python-pip
pip install pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple
ROPgadget
一款好用的查找ROP代码段的小工具
sudo apt install git
git clone https://github.com/JonathanSalwan/ROPgadget.git #r如果太慢的话,可以克隆到gitee仓库,再用git下载
cd ROPgadget
sudo python setup.py install
Or:
pip install ropgadget
ROPgadget
使用:
查找可存储寄存器的代码
ROPgadget --binary [pro] --only 'pop|ret' | grep 'eax'
ROPgadget --binary [pro] | grep 'rdi'
查找字符串
ROPgadget --binary rop --string "/bin/sh"
查找有int 0x80的地址
ROPgadget --binary rop --only 'int'
one_gadget
用来查找大型可执行文件里面是否可以有直接获得shell的代码段
安装:
git clone https://github.com/david942j/one_gadget.git
sudo apt-get install ruby
sudo gem install one_gadget
使用:
one_gadget libc.xxx.so
gdb插件
peda/pwndbg: 可以让gdb变得更强。
#创建文件夹
mkdir ~/gdbtools
cd ~/gdbtools
#peda:
cd ~/gdbtools
git clone https://github.com/longld/peda.git
echo "source ~/gdbtools/peda/peda.py" >> ~/.gdbinit
#pwndbg
cd ~/gdbtools
git clone https://github.com/pwndbg/pwndbg.git
cd pwndbg
./setup.sh
#gef
#下载 `gef.sh` 并执行
cd ~/gdbtools
wget -q -O- https://github.com/hugsy/gef/raw/master/gef.sh | sh
# 下载 `gef.py`, 并将其 `source` 写入 `.gdbinit`
wget -q -O ~/gdbtools/.gdbinit-gef.py https://github.com/hugsy/gef/raw/master/gef.py
echo source ~/gdbtools/.gdbinit-gef.py >> ~/.gdbinit
gdb相关指令
显示命令:
x/Ni (N是显示数量,i指的是在此反汇编)
gdb更改内存值:
# set 一次设置4字节
set $rsp=0x123
set *0x7fff58b531c0=0x123
控制程序流:
使用call/jump
1.jump命令
一般来说,被调试程序会按照程序代码的运行顺序依次执行,但是GDB也可以修改程序的执行顺序,从而让程序随意跳跃。这个功能可以由GDB的jump命令:jump 来指定下一条语句的运行点。 注意,jump命令不会改变当前的程序栈中的内容,所以,如果使用jump从一个函数跳转到另一个函数,当跳转到的函数运行完返回,进行出栈操作时必然会发生错误,这可能导致意想不到的结果,所以最好只用jump在同一个函数中进行跳转。
2.return命令
如果在函数中设置了调试断点,在断点后还有语句没有执行完,这时候我们可以使用return命令强制函数忽略还没有执行的语句并返回。
return命令用于取消当前函数的执行,并立即返回,如果return后面指定了表达式,那么该表达式的值会被作为函数的返回值。
3.call命令call命令用于强制调用某函数,它会显示函数的返回值(如果函数返回值不是void)。
call (void)main()+0x123
4.disassemble命令
disassemble用于反汇编,它可被用来查看当前执行时的源代码的机器码,其实际上只是把目前内存中的指令dump出来