环境准备
1、下载ubuntu
https://cn.ubuntu.com/download/alternative-downloads
2、安装参考
https://blog.csdn.net/qq_54218833/article/details/125241618
2、安装WMwareTool
https://blog.csdn.net/MR_lihaonan/article/details/125479384
4、安装Oh-My-Zsh
https://blog.csdn.net/weixin_43658578/article/details/126802982
安装工具
安装pwntools
apt install python3-pip
sudo apt install python3-pwntools
安装pwndbg(运行gdb下有pwndbg标识即表示安装成功)
git clone https://gitee.com/Z3R3F/pwndbg.git
cd pwndbg
./setup.sh
安装checksec(运行pwndbg时自动检测)
git clone https://github.com/slimm609/checksec.sh.git
cd checksec.sh
sudo ln -s /xx/xx/checksec /usr/local/bin/checksec #绝对路径
安装LibcSearcher-ng(联网可用)
git clone https://github.com/dev2ero/LibcSearcher.git
cd LibcSearcher
python3 setup.py develop
安装LibcSearcher(推荐LibcSearcher-ng)
sudo apt install python3-capstone
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
python3 setup.py develop
安装ropgadget
sudo apt install python3-ropgadget
使用:OPgadget --binary ./ciscn_2019_c_1 --only "pop|ret"
安装one_gadget
sudo apt -y install ruby
sudo gem install one_gadget
使用:one_gadget libc.so.6
指定libc执行:p= process(['./ld-2.23.so','./pwn'], env = {'LD_PRELOAD' : './libc-2.23.so'})
其它技巧
1、ida
1. ida 查看反编译成代码 F5
2. ida 查看字符串Shift+F12
3. n:修改函数名
4. ctrl + s:查看各段地址
2、调试程序、查看内存、栈
EIP 下条指令执行的位置
stack 50
x\16x 0x482054
x\s 0x482054
x \gx rsp
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
continue(或c):从当前位置开始连续而非单步执行程序
break(b) 行号:在某一行设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值
quit:退出gdb
pwn保护机制
1、PIE随机地址保护
解释:
顾名思义,就是地址每次运行时随机的,因为我们覆盖返回地址,那你得知道我们要执行的代码要去哪对吧,所以你要知道shellcode的地址,那你开地址随机化,你不就没办法知道了吗。
绕过:
我们可以有两个思路,第一个就是我们一旦泄露出一个变量的地址,那这不就稍微加减计算一下就可以得到所有的地址了吗,第二个就是我们覆盖地址只覆盖2字节,也就是4个数字,也就是说我们第4个数字不知道,1个数字那不就10种可能嘛,一个个试,不过呢这个方法只适合小端序的程序
2、Canary保护
栈溢出保护是一种缓冲区溢出攻击缓解手段,在ebp的上面,会压入一个Canary的值,在子函数验证完之后,对比Canary的值,看看是否相等。不相等,代表程序被修改,产生了异常
3、NX保护机制
No-eXecute(不可执行),基本原理是将数据所在内存页标识为不可执行,其实就是让我们不能直接利用程序中的某一段代码或者自己填写代码来获得 shell
网友评论