看板娘加载中
295 字
1 分钟
ctfshow Format String Vulnerability pwn92

shot 1

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

shot 2 shot 3

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

shot 4

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

shot 5

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 中。

shot 6

ctfshow Format String Vulnerability pwn92
https://alf-ovo.cn/posts/ctfshow-format-string-vulnerability-pwn92/
作者
AlF
发布于
2026-06-05
许可协议
CC BY-NC-SA 4.0