参考例题 https://blog.csdn.net/weixin_45556441/article/details/115091036

引子

随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是
ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段
(gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。所谓 gadgets 就是以 ret
结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。

之所以称之为 ROP,是因为核心在于利用了指令集中的 ret 指令,改变了指令流的执行顺序。ROP 攻击一般得满足如下条件

程序存在溢出,并且可以控制返回地址。

可以找到满足条件的 gadgets 以及相应 gadgets 的地址。

如果 gadgets 每次的地址是不固定的,那我们就需要想办法动态获取对应的地址了。

解法利用思路:

第一次触发漏洞,通过ROP泄漏libc的address(如puts_got),计算system地址,然后返回到一个可以重现触发漏洞的位置(如main),再次触发漏洞,通过ROP调用system(“/bin/sh”)

1.利用一个程序已经执行过的函数去泄露它在程序中的地址,然后取末尾3个字节,去找到这个程序所使
用的libc的版本。2.程序里的函数的地址跟它所使用的libc里的函数地址不一样,程序里函数地址=libc里的函数地址+偏移
量,在1中找到了libc的版本,用同一个程序里函数的地址-libc里的函数地址即可得到偏移量3.得到偏移量后就可以推算出程序中其他函数的地址,知道其他函数的地址之后我们就可以构造rop去执
行system(’/bin/sh‘)这样的命令
————————————————

常用的 EXP 格式 语句

libc=LibcSearcher('puts',puts_addr)     #找到libc版本
offset=puts_addr-libc.dump('puts')     #算出偏移量
binsh=offset+libc.dump('str_bin_sh')   #偏移量+libc函数地址=实际函数地址
system=offset+libc.dump('system')

32位程序运行执行指令的时候直接去内存地址寻址执行

64位程序则是通过寄存器来传址,寄存器去内存寻址,找到地址返回给程序



查找 rdi, ret 地址的语句:ROPgadget --binary 文件名 --only "pop|ret"

ROPgadget --binary 文件名 --only "pop|ret" | grep rdi

CTF(Pwn) Rop + ret2libc 题型 常规解法思路 (初级)相关推荐

  1. CTF|pwn栈溢出入门题level3解题思路及个人总结

    CTF|pwn栈溢出入门题level3解题思路及个人总结 解题思路 拿到题目将文件下载下来拖入ubuntu 发现这一次的文件比较特殊:是一个linux环境下的压缩包,自然而然想到的是解压它 通过命令行 ...

  2. 函数与导数题目类型和解法思路的总结

    函数与导数类题型及解法思路总结 1.已知$\underline{函数不等式}$恒成立,求参数的取值范围: 模型:$A\leq f(x)$恒成立,等价于$A\leq f(x)_{min}$:$A\ge ...

  3. 导数中的题型和破解思路【三轮总结】

    前言 导数章节中的题型总结,编辑中... 知识储备 本节用到的数学思想:分类讨论:转化划归:数形结合:函数与方程: 本节用到的数学方法:导数法,多项式除法,试商法,分组分解法,分离参数法, 恒成立.能 ...

  4. [Bugku CTF——Pwn] pwn4

    [Bugku CTF--Pwn] pwn4 题目地址:https://ctf.bugku.com/ 给的提示很清楚,绕过canary保护 那就绕过就好 题目当中有system函数 利用ROPgadge ...

  5. 阅读理解常规解题思路

    阅读理解常规解题思路: 首先第一步,通用引擎首先会通过问题分析获取到文本相关的内容,然后根据问句中各个词离"()"的距离计算出问句中每个关键词的重要性,得到关键词表. 第二步,是提 ...

  6. TAMU ctf pwn部分wp+赛后

    TAMU ctf pwn部分wp 国外的题目,终端连不上就很gan ga...... Tr*vial 大水题,栈溢出,ret2text exp from pwn import *context(arc ...

  7. CTF流量分析常见题型(二)-USB流量

    0x00 前言 在学习Wireshark常见使用时,对常见CTF流量分析题型和铁人三项流量分析题的部分问题进行了简单总结.由于篇幅过长,于是另起一篇总结USB流量包分析,包括键盘流量和鼠标流量. 0x ...

  8. [Bugku CTF——Pwn] pwn2

    [Bugku CTF--Pwn] pwn2 题目地址:https://ctf.bugku.com/ 额,好久不写这么简单的题目了 利用栈溢出修改返回地址就好, 如果不会就去看看什么是栈溢出 explo ...

  9. [Bugku CTF——Pwn] pwn1

    [Bugku CTF--Pwn] pwn1 题目地址:https://ctf.bugku.com/ 额, 直接nc连接上,就可以直接得到shell 好水哦,新手玩玩就好,老鸟勿喷 无语凝噎 cat f ...

最新文章

  1. centos vnc配置笔记
  2. BZOJ 3566: [SHOI2014]概率充电器
  3. [Linux] 使用openssl实现RSA非对称加密
  4. 深入理解函数式编程之柯里化
  5. thuderbird接收qq邮箱设置
  6. can connect mysql not server_MySQL -- 配置文件my.cnf 的详细说明
  7. Linux下的高级文件权限ACL
  8. oracle占位符怎么打,PL/SQL Challenge 每日一题:2018-7-11 动态SQL中的占位符
  9. get 和 post的区别
  10. 10562:Undraw the Trees
  11. 网络安全实验 缓冲区栈溢出实验 Ollydbg
  12. QT utf8编码转gb2312编码,互相转换的源代码
  13. VS2012,发布时出现“不支持此接口”错误的解决办法……
  14. Attention机制原理
  15. React---什么是受控组件、非受控组件
  16. 信用卡号码的解析(转)
  17. Linux之磁盘信息查看
  18. 自习室的泡利不相容定律(C语言实现)
  19. HDU 1234 开门人和关门人
  20. 小程序底部导航iphoneX判断

热门文章

  1. Angular Filter实现页面搜索
  2. 以太坊智能合约简介(Solidity)
  3. dedecms教程:搜索页显示条数更改
  4. 异常org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 11; 注释中不允许出现字符串 --。的原因...
  5. 【原创】如何组织好一个学习小组
  6. Linux重启网络服务
  7. cmake 生成vc 项目文件
  8. mysql varchar char text
  9. linux tac sed,Day08 - 一些常用 Linux 指令 - 3-7 (cat、tac、head、tail、vi、sed)
  10. 图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究