一、环境

ubuntu16.04虚拟机
pwntools
gdb-peda
LibcSearcher
pattern.py

安装git

  1. sudo apt-get install git

安装 pip

sudo apt-get install python-pip
sudo apt-get install python3-pip

pip 换源

vim ~/.pip/pip.conf

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

安装 pwntools

pip install pwntools

安装peda

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py">> ~/.gdbinit

安装pwndbg

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

./setup.sh

安装 one_gadget

sudo apt-get install ruby -y
sudo apt-get install gem -y
sudo gem install one_gadget

安装 32 位的库

sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1

安装 LibcSearcher

git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
python setup.py develop

main_arena_offset

用来计算 main_arena 的偏移

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

安装seccomp-tools

用来读取 seccomp 沙箱规则

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

如果ruby版本不对

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
gem install seccomp-tools

二、寄存器相关知识:

EIP:主要用于存放当前代码段即将被执行的下一条指令的偏移,但其本质上并不能直接被指令直接访问。
最典型的栈溢出利用是覆盖程序的返回地址为攻击者所控制的地址,也就是覆盖EIP
ESP:栈顶指针,始终指向栈顶
EBP:栈底指针,通常叫栈基址

三、软件保护机制:

CANARY(栈保护)

栈溢出保护是一种缓冲区溢出攻击缓解手段,当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary。

NX(DEP)(数据执行保护 Data Execution Prevention)

NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。

PIE(ASLR)

内存地址随机化机制(address space layout randomization),有以下三种情况:
0 - 表示关闭进程地址空间随机化
1 - 表示将mmap的基址,stack和vdso页面随机化
2 - 表示在1的基础上增加堆(heap)的随机化