-
-
[原创]看雪.纽盾 KCTF晋级赛2019 Q2 第三题 金字塔的诅咒
-
发表于:
2019-6-23 02:51
5048
-
[原创]看雪.纽盾 KCTF晋级赛2019 Q2 第三题 金字塔的诅咒
先checksec
看下main的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | int __cdecl main( int argc, const char **argv, const char **envp)
{
int v3;
char buf;
unsigned int v6;
int *v7;
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处有格式化字符串漏洞,可以用来读写堆栈。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | int __cdecl main( int argc, const char **argv, const char **envp)
{
int v3;
char buf;
unsigned int v6;
int *v7;
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
被梦游枪手编辑
,原因: