295 字
1 分钟
ctfshow Format String Vulnerability pwn92
2026-06-05
ctfshow
/ Format String Vulnerability

不是哥们,合着意思是先放了道难一点的在前头劝退嘛:0

想拿 flag 简单,在 scanf 处输入 %s。

这题的目的是让我们学习理解一下格式化字符串的基础。

example 中的这些使用案例,一个个分析一下:
printf("Hello CTFshow \%%\n");% 会将后面的东西当标识符读出,而面对同一类型的替身时,似乎会把其中之一放出来:0
puts("Hello CTFshow!");直接输出,puts 会自带 "\n"。
printf("Num : %d\n", 114514);%d 输入后方的 int 类型。
printf("%s %s\n", "Format", "Strings");%s 读出 string 类型,连续的 %s 会读取后续的第 1、2 个参数。
printf("%12c\n", 65);右对齐一共输出 12 个字符,c 代表把后面输入的内容当 char 类型看。
printf("%16s\n", "Hello");同样,右对齐 16 输出 string 类型。
printf("%12c%n\n", 65, &v1);%n 是写入,这里往 v1 写入了 12。
printf("%16s%n\n", "Hello!", &v1);这里往 v1 写入了 16。
printf("%2$s %1$s\n", "Format", "Strings");用 2$ 指定读取第二个参数,用 1$ 指定读取第一个参数。
printf("%42c%1$n\n", &v1);这里把 42 个字符写入(读第一个参数 v1 的值作为 char 类型引用),然后再把 42 写入 v1 中。

ctfshow Format String Vulnerability pwn92
https://alf-ovo.cn/posts/ctfshow-format-string-vulnerability-pwn92/