-
-
[原创]看雪.纽盾 KCTF晋级赛2019 Q2 第三题 金字塔的诅咒
-
发表于:
2019-6-23 02:51
4881
-
[原创]看雪.纽盾 KCTF晋级赛2019 Q2 第三题 金字塔的诅咒
先checksec
看下main的代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax
char buf; // [esp+0h] [ebp-10h]
unsigned int v6; // [esp+4h] [ebp-Ch]
int *v7; // [esp+8h] [ebp-8h]
v7 = &argc;
v6 = __readgsdword(0x14u);
setvbuf(stdin, 0, 2, 0);
setvbuf(stdout, 0, 2, 0);
puts("Welcome to kanxue 2019, your pwn like cxk");
do
{
while ( 1 )
{
menu();
read(0, &buf, 4u);
v3 = atoi(&buf);
if ( v3 != 1 )
break;
printf("What do tou want to say:");
read_input((int)&echo, 24);
printf((const char *)&echo); // 存在格式化字符串漏洞
puts((const char *)&unk_A97);
}
}
while ( v3 != 2 );
return 0;
}
printf处有格式化字符串漏洞,可以用来读写堆栈。
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // eax
char buf; // [esp+0h] [ebp-10h]
unsigned int v6; // [esp+4h] [ebp-Ch]
int *v7; // [esp+8h] [ebp-8h]
v7 = &argc;
v6 = __readgsdword(0x14u);
setvbuf(stdin, 0, 2, 0);
setvbuf(stdout, 0, 2, 0);
puts("Welcome to kanxue 2019, your pwn like cxk");
do
{
while ( 1 )
{
menu();
read(0, &buf, 4u);
v3 = atoi(&buf);
if ( v3 != 1 )
break;
printf("What do tou want to say:");
read_input((int)&echo, 24);
printf((const char *)&echo); // 存在格式化字符串漏洞
puts((const char *)&unk_A97);
}
}
while ( v3 != 2 );
return 0;
}
printf处有格式化字符串漏洞,可以用来读写堆栈。
用gdb分别在printf(*main+203)和return(*main+264)处下断并查看堆栈。
printf
return
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-6-24 00:57
被梦游枪手编辑
,原因: