题目自取
链接:https://pan.baidu.com/s/1Il9rHDzfIloLQfx_bSw0ow?pwd=w1h1
提取码:w1h1
开始
提前在文件夹里创建一个flag文本文件
bug出在case6
,这里的 sub_400ACD(s, 32LL);函数的意思是从标准输入中读入最多32个字节的数据,从标准输入读取一个字节,如果小于等于 0 则说明读取失败,返回 -1(0xFFFFFFFF).如果读取到换行符 ,将换行符替换为字符串0,则返回-1,就会停止。
这里的sprintf函数,sprintf(command, "echo %s", s);
是将一个格式化的字符串存储到 command
变量中。具体来说,它将格式化的字符串 "echo %s"
和 s
变量中的字符串作为参数,将它们合并成一个新的字符串,最后将结果存储到 command
变量中。(也就是拼接起来,并输出)
但是这里没有栈溢出,漏洞在于最后
sprintf(command, "echo %s", s);
system(command);
这段代码,command的控制权教给了我们来控制,这是一个很大的bug。
如果使用了 '&&' 或者 ' ; ' 意思就是分两次执行,如输入 echo hello world && cat flag,它的意思就是执行system('echo hello world') system('cat flag')
由此我们就可以拿到flag啦
拿到flag!