首页 > 其他分享 >ciscn_2019_es_2

ciscn_2019_es_2

时间:2022-10-26 15:12:08浏览次数:96  
标签:addr ret leave ebp pg 2019 payload es ciscn

【栈迁移例题解析】【Write-up】BUUCTF ciscn_2019_es_2

原题链接

checksec查看程序架构

$ checksec --file ciscn_2019_es_2
[*] '/home/peterl/security/workspace/ciscn_2019_es_2/ciscn_2019_es_2'
    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x8048000)

没啥特殊的,注意一下32位就可

ida查看程序伪代码

202209251439012022-09-25-14-39-01

202209251439252022-09-25-14-39-26

看起来像是栈溢出,但是read函数限制了读入的字节数,我们看一下栈:

202209251440452022-09-25-14-40-46
202209251441052022-09-25-14-41-06

我们发现这时候到return的位置只能溢出一个字,如果这时候程序有一个backdoor函数那就万事大吉。

我们可以找一下,发现了一个hack函数,但这个hack函数完全就是糊弄人的,从中唯一得到的有用信息是system确乎存在于plt表中,这样就不用ret2libc了:

202209251443562022-09-25-14-43-56

看一下源程序也没有格式化字符串漏洞,我们可以考虑栈迁移

我们只要泄露出ebp,然后再通过第二次leave;ret就可以将esp更改到我们希望的地方

构建exp

栈迁移的基本思路

我们知道,在call一个函数的时候,我们会先将下一条指令的地址进栈,再将当前的ebp进栈,然后将当前esp的值赋给ebp,这样就实现了备份下一条指令的地址、ebp原本的值、esp原本的值的作用

然后等到函数结束时,程序会执行leave指令和ret指令。leave指令相当于mov esp, ebp; pop ebp,意思就是从备份中先恢复esp再恢复ebp;ret指令相当于pop eip,意思就是恢复备份的指令地址,这样就能执行函数调用的下一条语句了

那么如果我们更改栈中备份的ebp数据的同时,在程序执行过一次leave; ret后再执行一遍,那么因为ebp的备份已被更改,所以ebp恢复的就是我们希望的数据,而再执行一遍leave; ret时,程序是假定ebp中保存的是esp的备份,那么通过这种方法,我们就可以成功地更改esp。

这时我们已经让栈顶指针指向了我们希望的位置,这时由于leave指令,程序会将我们伪造的栈顶的第一个数据pop进ebp,然后由于ret指令再将第二个数据弹进eip中,那么我们就应该在伪造的栈的第二个数据放入system函数的地址

然后我们就可以当普通的栈溢出构造栈了。

system后面跟个0,再跟/bin/sh的地址就

标签:addr,ret,leave,ebp,pg,2019,payload,es,ciscn
From: https://www.cnblogs.com/peterliuall/p/16828441.html

相关文章

  • 找回消失的密钥 --- DFA分析白盒AES算法
    一、目标李老板:什么叫白盒AES算法?奋飞:将密钥进行白盒化处理,融入到整个加密过程中,使密钥无法跟踪还原,保障密钥安全。简单的说,就是你可以明明白白的调试整个算法过程,怎么看都......
  • 文章资源下载小程序的基础配置(以Serverless WordPress为后端)
    引言WordPress的配置。小程序资讯相关类目暂不对个人开放,导致大批个体小程序被暂停服务的解决方案IWordPress的基础配置涉及的相关插件:Pods是一个用于创建,管理和部署自定义......
  • 阿里云实时计算 Flink 版 x Hologres: 构建企业级一站式实时数仓
    作者|徐榜江余文兵赵红梅编辑|伍翀随着大数据的迅猛发展,企业越来越重视数据的价值,这就意味着需要数据尽快到达企业分析决策人员,以最大化发挥数据价值。企业最常见的做法就......
  • 实验7:基于REST API的SDN北向应用实践
    (一)基本要求1.编写Python程序,调用OpenDaylight的北向接口实现以下功能(1)利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight;(2)下发指令删除s1上的流表数据。1-2......
  • 【Serverless】云函数微信小程序
    简介什么是AppGalleryConnect云函数云函数是一项Serverless计算服务,提供FaaS(FunctionasaService)能力,可以帮助开发者大幅简化应用开发与运维相关事务,降低应用功能的实......
  • Codeforces Round #715 (Div. 2) C
    C.TheSportsFestival观察发现我们显然选择一个数字开始后我们拿周围的数字显然存在最优解(sort过)这样就很金典了n=2000我们显然可以暴力区间dp然后将转移只用从拿......
  • Nodejs:ESModule和commonjs,傻傻分不清
    最近写nodejs脚本的时候遇到了commonjs和ESModule的问题,正好之前用得稀里糊涂的,这次好好学习一下。ESModule导出仅导出namedexports:命名导出,每次可以导出一个或......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......
  • Deployment took more than 60 seconds, Please check if the requested resources ar
    在zookeeper正常启动后,运行hadoop,并启动flink发现报错:2022-10-2613:24:49,145INFOorg.apache.flink.yarn.YarnClusterDescriptor[]-Deploymenttookmorethan60......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、......