格式化字符串修改将非栈上地址修改

buuoj [第六章 CTF之PWN章]fsb 非栈上的格式化字符串漏洞 + 劫持GOT表 瞅瞅检查 开了NX、canary跟PIE。 RELRO没有开,可以考虑劫持GOT表。 进去是个循环 里面是个格式化字符串漏洞。 因为它开的空间是堆上的,所以常规栈上的格式化字符串漏洞不能用。 非栈上的格式化字符串漏洞 非栈上的格式化字符串漏洞的话,先在printf处下断点。 总体思路 满足利用要求的三个指针分别在printf第10、16、20个参数的位置。该程序在循环执行20次输入、输出前申请了一个内存块,用于存放输入的字符串,循环结束后会释放掉这个内存 阅读详情

前提: 最近遇到一个使用read函数但是buff段有字数限制无法进行栈溢出得题目,但是题目中有printf函数,我们可以使用格式化字符串将len值修改,从而进行栈溢出使用libc从而获取shell.

首先我们先看一下程序: 

先checksec一下

在看一下file

没有任何保护并且是动态链接

我们发现了格式化字符串漏洞,同时我们在点进buf段与len里看看

我们发现想要栈溢出的话,buf的长度是远远不够的。这时候我们就想用格式化字符串来对len地址所指向的值进行修改了,先记录一下len的地址,0x404020.

接着我们就可以开始愉快gdb调试了。现在printf出下个断点,然后往里面输入一点数据、

我们发现他是从第一行就开是输入数据了,所以加上前面的寄存器,我们可以计算出栈的位置是从第6个参数开始进行的即%6$,

所以利用格式化字符串,我们写出%99c%x$n这个可以帮我们把第x的参数地址所指向的值改为99.这里我们还需要注意的是,因为小序端,且地址很短,所以用n输入即可,无需hhn,并且len的后面会用0x00补全,而printf遇到0x00就会停止输出自动截断。所以我们需要把len的地址放后面传,这也就导致了第六个参数的位置被我们的%99c%x$n所占据了,所以我们需要修改的是第七个参数,即被我们传输的len的地址。

我们用gdb联动看看

修改成功了,接下来就可以开心的re2libc了,便不过多阐述,看wp即可。

如果re2libc没学过的话,可以看看我之前的脚本概括理解,或者其他师傅的文章。

PWN--非栈上格式化字符串漏洞 最近刷题碰到了非栈上的格式化字符串漏洞。这类题的特点是格式化字符串不在栈上,那么就不能用fmt_str工具来任意地址写了,而是必须要自己手搓。那么如何手搓呢?主要是利用%kc和%k$hn(双字节)或者%k$hhn(单字节)。%kc(k是一个整数)的作用是打印k个空字符,这样的话可以控制%k$n写入的值。%k$n的作用是对于第k个参数(必须是指针类型),往其指向的地址写入已打印的字符个数。具体如何操作,请看例题。 阅读详情

相关推荐

【vLLM-性能洞察】基于Ascend Profiler的端到端推理瓶颈定位与优化实践

本文详细介绍了如何利用Ascend Profiler对vLLM-Ascend大模型推理服务进行端到端的性能瓶颈定位与优化。通过实战案例,阐述了从数据采集、可视化分析到诊断低效算子、内存管理、计算通信重叠及框架调度等常见瓶颈的全过程,为基于昇腾NPU的AI推理性能调优提供了系统性的方法论和实用工具指南。

cc789的博客 522

应用安全系列之三十五:格式化字符串

在使用格式化字符串函数时,通常会以printf([格式化字符串],参数)的形式进行调用,如果攻击者可以控制格式化字符串的值,或者不正确的以printf(参数)的形式进行调用,并且参数的值攻击者可控,攻击者可以通过使用特定的格式化字符获取系统内存信息或者修改系统的内存数据。 格式化字符串漏洞所造成的危害包括: 泄露系统内存信息,造成系统的信息泄露 可用于修改内存数据,当修改内存中的函数返回地址时,攻击者就可以控制代码执行逻辑,注入Shellcode,造成远程代码执行。 发起DOS攻击 格式化字..

jimmyleeee的专栏 1156

Spine动画在Unity里卡顿、闪烁、排序错乱?这些性能优化与渲染问题一次讲清

本文深入解析了Spine动画在Unity中常见的卡顿、闪烁和排序错乱问题,提供了全面的性能优化与渲染解决方案。从性能瓶颈诊断到材质合并、动态合批优化,再到层级错乱与Alpha闪烁的处理,帮助开发者提升动画表现和运行效率。特别针对Unity和Spine的协同工作进行了详细的技术探讨。

weixin_29967445的博客 381

一篇文章搞懂格式化字符串漏洞

文章目录0x00 序言0x01 格式化字符串0x02 printf()函数0x03 格式化字符串漏洞利用任意内存读取任意内存修改 0x00 序言 刚学pwn,做了两道攻防世界的pwn新手训练,真的是啥也不会,第一道题是连上就有flag我都不知道咋连,就菜到这种地步。一个格式化字符串漏洞看了一天。看了很多博客,最后终于弄明白了,感觉很多博客都对新手不是那么友好,刚学完,总结梳理一下,便于复习。也希望自己写的能帮到其他像我一样刚开始学的小白更快更清楚的明白格式化字符串漏洞。 0x01 格式化字符串 格式化字符串

qq_42988973的博客 4440

ADS2020实战:村田电感.s2p与.mod文件导入全流程对比(附仿真结果差异分析)

本文详细对比了ADS2020中村田电感的.s2p与.mod文件导入流程及仿真结果差异,重点分析了两种模型在低频段和高频段的精度表现。通过实际案例展示.s2p文件在高频仿真中的优势,以及.mod文件在低频和非线性特性模拟中的准确性,为射频电路设计提供模型选择策略和混合仿真技巧。

weixin_29289821的博客 519

Polardb训练营-本地部署 PolarDB-X

PolarDB-X是阿里巴巴自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。云原生+MySQL生态PolarDB-X已作为标准云产品在世界范围内的13个地区提供服务。依托云资源和容器化部署能力,PolarDB-X可以在数分钟内完成集群创建和变配,整个过程中用...

yangjunfeng0604的博客 2473

[CTF]PWN--非栈上格式化字符串漏洞

一般来说,栈上的格式化字符串漏洞利用步骤是先泄露地址,包括ELF程序地址和libc地址;然后将需要改写的GOT表地址直接传到栈上,同时利用%c%n的方法改写入地址,最后就是劫持流程。但是对于BSS段或是堆上格式化字符串,也就是非栈上格式化字符串漏洞,无法直接将想要改写的地址指针放置在栈上,也就没办法实现任意地址写。本文主要为大家介绍BSS段上的格式化字符串漏洞的解法。

2301_79880752的博客 3307

手把手教学:利用AutoDL与vLLM快速部署DeepSeek-R1大模型实战指南

本文详细介绍了如何利用AutoDL平台和vLLM框架快速部署DeepSeek-R1大模型的实战指南。从服务器配置、vLLM安装优化到模型部署的两种方案,再到性能调优和生产环境建议,手把手教你高效完成大模型部署。特别针对国内开发者遇到的网络问题提供了稳定解决方案,并分享了显存优化、磁盘清理等实用技巧。

weixin_42531779的博客 327

非栈上格式化字符串漏洞(BSS段上)

3.关于泄露rbp+8地址的选择,只要能得出固定偏移即可,在这题中,使用fmt偏移为8的栈地址同样能打通,只是离rbp+8的距离会改为0x150。1.在动态调试的时候,出现了没有16字节对齐的情况,这个时候需要按照栈对齐的方法,把后门函数地址+1来保证栈对齐。2.再利用fmt找到一个带有指向链条的栈地址并且得出这些地址的fmt偏移(addr1->addr2)这样,就能让RBP+8(返回地址)的位置指向了后门函数,从而get shell。这里使用fmt偏移为10的栈地址,和rbp+8的地址距离为0x38。

qq_33348179的博客 603

SpringBoot 系列教程(二):SpringBoot使用Devtools实现热部署

1.devtools   spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。 2.项目搭建   本文是采用IDEA搭建的Spring Boot应用,通过spring-boot-devtools配置,可以支持修改java文件会自动重启程序,一些资源无需触发重启,...

Thinkingcao的专栏 1216

手把手教你学Simulink——基于Simulink的无位置传感器PMSM滑模观测器(SMO)控制

本文基于Simulink平台实现无位置传感器PMSM滑模观测器(SMO)控制,解决了传统机械位置传感器存在的成本高、体积大、抗干扰差等问题。SMO通过滑模切换函数估算反电动势,进而获得转子位置和速度,具有强鲁棒性(参数变化20%误差仅0.4°)和良好低速性能(50rpm转矩衰减<5%)。文章详细介绍了PMSM数学模型、SMO算法设计、Simulink建模步骤及参数优化方法,提供了可直接工程应用的MATLAB代码和仿真模型,为电动汽车驱动、工业机器人等高精度控制场景提供了有效解决方案。

MHD0815的博客 229

非栈上格式化字符串漏洞

这样之后如果继续按照原来的方式就会发现错误,第三个指针依然指的是返回地址的栈地址的尾两字节,而我们要修改前两个字节了,那就需要把上面构造的方式再用一次,让原来的返回地址栈地址加2就可以,与修改尾两字节相同的方式,再写一次,,那么随便输入几个%p,再根据gdb中内容,来观察泄露的位置,再不断修改得到正确的libc start main +243的地址,以及一个随便的栈地址,做完这些前置条件,重点就来了。每个pay最后的p64()是写栈上格式化字符串漏洞时栈对齐时需要的,由于这里不在栈上,那么这里不加就可以。

weixin_66751120的博客 726

实战交易策略 篇二十二:情绪流龙头交易策略

在股票市场中,机构主导趋势,游资驱动热点,散户易被情绪裹挟,形成“金字塔”式生态链,并存在情绪传递、强者恒强、物极必反的规律特点。股市是资金驱动的情绪博弈场,价格波动由群体心理、资金博弈和预期差共同驱动,核心是资本逐利性与人性贪婪恐惧的交织,兼具资源配置、财富再分配与风险定价功能。涨停加速与逃逸缺口(主升强化)凹字板/平台突破(趋势延续)天量弱转强(分歧买点)不参与首波(二波策略)情绪周期(道术合一)主线思维(聚焦核心)开盘抢筹(竞价博弈)一字助攻(情绪强化)分批进出(滚动操作)

生活在别处 1499

手搓payload+非栈上格式化字符串

在格式化字符串漏洞类型题中我们可以利用payload = fmtstr_payload(offset,{printf_got:system_plt})这个工具去修改地址,但是这个工具产生的字节数是很大的,有时候我们是无法去正常利用的,我们需要去自己构造payload修改地址。

2301_79880074的博客 1788

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

非栈上的格式化字符串漏洞利用

对于常规的栈上格式化字符串漏洞,可以直接构造(%c %n 指针)的方式来实现任意地址写,但是对于非栈上变量来说,就无法直接给出目的地址的指针,因为printf的参数保存在寄存器和栈上面。对于非栈上变量,格式化字符串漏洞依然存在,可以考虑借助已有的栈上指针来实现间接地利用。

qq_52877079的博客 617

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

BUU-SWPUCTF_2019_login

非栈上格式化字符串漏洞 具体原理:由于不在栈上,所以我们可控数据没法写到栈上,也就没有办法变成printf的某个参数 例(buu-SWPUCTF_2019_login) 检查保护,没pie,got可被修改 IDA查看程序,存在格式化字符串漏洞 思路:由于不存在栈溢出,且没有给libc,那么我们的思路就有限了,修改printf的got 问题分析: 首先这是一道32位的非栈上格式化字符串漏洞,那么与普通格式化字符串漏洞相比较有什么区别呢? 首先栈信息泄露是相同的,但是找偏移的话较为不

m0_46204503的博客 2345

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

swpuctf2019 Login pwn详细题解

Login 这是swpuctf2019的第二道pwn题,主要考点就是非栈上的字符串格式化漏洞利用。 首先,我们检查一下程序的保护机制 PIE和RELRO没有开启,那么我们可以轻易的利用漏洞修改GOT表 我们用IDA分析一下 在这里,有一个明显的格式化字符串漏洞,由于s1不是在栈上,而是在bss段里,所以漏洞利用起来会比栈上的字符串格式化漏洞稍微繁琐一些。由于外层是一个死循环,所以...

seaaseesa的博客 1951

Playfmt

找这种三条栈地址的地址链,通过修改0xffdba828(偏移6处)指向0xffdba82c,此时该链条上最末端为0x80485ea,这时再改0xffdba82c指向的地址为printf got表即可,此时栈上可通过栈地址为0xffdba82c处修改got表!注意一点是每次输入要补齐200字节,避免read时将两次发送的读到一起.提供本地打通exp,环境不一样,远程就不想调了qaq!非栈上格式化字符串攻击。

m0_55906008的博客 223

SWPUCTF_2019_login

SWPUCTF_2019_login 查看保护 格式化字符串漏洞,但是s1和正常的栈上格式化不一样,这里是非栈上。 攻击思路:因为是非栈上,所以需要借助ebp这里的链子来实现将printf_got改为system_addr。 1.首先借助这个格式化漏洞拿到libc和ebp的地址。 2.接下来就是借助ebp这条链子将printf_got改到这个链子上,最后的结构为下图 用%6$hhn来修改%10$处的数据然后%10$hhn来修改%14$处的数据最后使得使得%14$处为printf的GOT表地址,同样的

z1r0的博客 820

栈上的格式化字符串漏洞利用

在 PWN 相关领域中,栈上的格式化字符串漏洞利用是一个重要的技术点。格式化字符串漏洞是由于程序在处理格式化函数(如 printf 等)时,没有正确限制用户输入的格式化字符串,从而导致攻击者可以利用此漏洞来控制程序流程、泄露内存信息或修改内存内容等。当这种漏洞出现在栈上时,攻击者可以利用栈的特性来进行攻击。非栈上格式化字符串漏洞利用是信息安全领域中,特别是在漏洞分析与利用方面的一个关键技术。

m0_57836225的博客 1092

非栈上的格式化字符串利用例题讲解

具体来说,就是用%n,把如图的0x7fffffffdda0所指向的0x7fffffffddb0改成0xfffffffdd98,这样的话,我们用%n作用在第八个参数就可以修改第七个参数所储存的内容了!%n 和 %s一样,都是类似于指针的东西,比如我对第7个参数进行%n ,那么实际上修改的并不是第七个参数里的数据,而是把第七个参数里存的数据当成。改got只能一次成型,因为如果分多次,导致printf的got表改变,就不会再执行pirntf函数了,因此需要一次性修改,否则将会失败。,然后修改指针指向的对应内容。

fzucaicai的博客 967

非栈上格式化字符串

非栈上格式化字符串,BeginCTF,Bad_cat_CTF 的两道例题

Chuang__的博客 996

格式化字符串任意地址写与非栈上格式化字符串

本文主要基于师傅_sky123_的文章。把一些地方自己理解写了下,学知识还是看师傅的原文章吧。写的初衷是之前遇到的格式化字符串基本就是用来泄露数据,然后最近发现还是有必要学习下利用格式化字符串写的方法。原文链接https://blog.youkuaiyun.com/qq_45323960/article/details/122785431?%k$n这个参数的作用是printf将已经成功输出的字符数(一个整数)写入到指定的地址。这里指定的地址指的是%k$处存储的数值(这个值需要是可写的,不然程序会崩溃)。

2402_87166154的博客 2599

非栈上的格式化字符串漏洞

利用1处栈地址,也就是将0xffffcfa8地址处内容0xffffcfb8修改为0xffffcfac,由于开启pie保护,0xffffcfac处所存内容是elf文件所存地址+pie基址生成的,got表也在elf文件的数据区,也是有地址+pie基地址生成,所以我们只需要利用%$hn修改其低四位即可(小端序),buf地址可以利用%$p泄露,这样我们就可以输入buf为printf_got+payload,修改其got为system地址。(目标文件该节在磁盘不占空间,在运行时,内存分配,初始化0))

Grxer的博客 1276

格式化字符串漏洞和非栈上格式化字符串漏洞

int printf("格式化字符串",参量...)参数的返回值是正确输出的字符的个数,如果输出失败,返回负值参量表中的参数的个数是不定的(参数的个数可以是一个,两个,三个...)格式化字符串函数有很多,例如输入:scanf;printf输出到 stdoutfprintf输出到指定 FILE 流vprintf根据参数列表格式化输出到 stdoutvfprintf根据参数列表格式化输出到指定 FILE 流sprintf输出到字符串snprintf输出指定字节数到字符串。

2301_79879963的博客 2081
上一篇: ret2csu
下一篇: ISCC-easyshell
T_Fire_of_Square
博客等级 码龄3年 110粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值