一、环境
ubuntu16.04虚拟机
pwntools
gdb-peda
LibcSearcher
pattern.py
安装git
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)的随机化