buuctf-pwn mrctf2020_easy_equation(64位fmt)题解(学习过程持续更新)

本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题

此处我将文件命名为pwn

checksec pwn 查看一下保护机制

可以看到这是一个64-bit的文件,NX保护开启

将文件拖入ida64,按F5将汇编代码转换成c语言代码,得到

可以看到存在printf(&s)格式化字符串漏洞,并且经计算得到:当judge=2时if语句成立,得到shell。所以我们可以利用格式化字符串漏洞来将judge的值改写成2

双击judge

得到judge_addr = 0x60105c

返回虚拟机

./pwn

aaaaaa.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p

可以看到第一个a在第7个参数里,剩余的五个a在第8个参数里,所以我们在输入judge_addr之前需要先输入一个a来占位。

并且这是一个64位的格式化字符串漏洞,我们需要将地址写在payload的最后。在地址前先输入9字节的内容,占据第七个参数的一部分和第八个参数,那么地址就在第9个参数。讲的有点乱,直接看exp,就懂了。

nano exp.py

两个a是让judge等于2,三个A是用来占位的,aa%9$nAAA总共9字节

保存退出

python3 exp.py

cat flag

此题完

相关推荐
xier_ran17 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名17 小时前
ai应用开发的学习笔记
服务器·笔记·学习
爱读书的小胖17 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
xier_ran17 小时前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
燕落南枝17 小时前
HTML 学习:辅助标签 label 与字符实体
前端·学习·html
Code_Solitude18 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
hackchen18 小时前
LangChain 学习第 3 课 - 输出解析器(Output Parser)
数据库·学习·langchain
醒醒11118 小时前
从微信小程序到全端:一个安全扫描器的演进之路(v0.5.0 → v0.6.0)
前端·安全
鸽鸽程序猿18 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言
萧瑟余晖18 小时前
Spring Security综合实战与安全加固详解
java·安全·spring