-
-
[分享]pwnable.kr cmd1 day12
-
发表于:
2021-1-14 21:37
9069
-
[分享]pwnable.kr cmd1 day12
root 和 cmd1_pwn 用户对 flag 有读权限,cmd1 用户对 flag 无读权限,对 文件 cmd1 有执行权限,且文件 cmd1 组权限中有个 s,意味着当 cmd1 用户执行文件 cmd1 时,会临时拥有 cmd1_pwn 用户的权限。
程序会调用 system() 执行我们输入的 argv[1].
argv[1] 不能包含 flag、sh、tmp,所以考虑编写一个读取 flag 的 bash 脚本,直接在对应目录下用 ./ 执行脚本。
编写后记得赋予该文件可执行权限
/home/cmd1/cmd1 ./cmd1_21
int
filter
(char
*
cmd){
/
/
过滤
"flag"
,
"sh"
,
"tmp"
字符串
int
r
=
0
;
r
+
=
strstr(cmd,
"flag"
)!
=
0
;
/
/
该函数返回在 cmd 中第一次出现
"flag"
字符串的位置,如果未找到则返回 null
r
+
=
strstr(cmd,
"sh"
)!
=
0
;
r
+
=
strstr(cmd,
"tmp"
)!
=
0
;
return
r;
}
int
main(
int
argc, char
*
argv[], char
*
*
envp){
putenv(
"PATH=/thankyouverymuch"
);
/
/
int
putenv(const char
*
string); 改变或增加环境变量的内容.返回值:执行成功则返回
0
, 有错误发生则返回
-
1.
if
(
filter
(argv[
1
]))
return
0
;
system( argv[
1
] );
return
0
;
}
int
filter
(char
*
cmd){
/
/
过滤
"flag"
,
"sh"
,
"tmp"
字符串
int
r
=
0
;
r
+
=
strstr(cmd,
"flag"
)!
=
0
;
/
/
该函数返回在 cmd 中第一次出现
"flag"
字符串的位置,如果未找到则返回 null
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-1-15 19:48
被cease2e编辑
,原因: