-
-
[分享]pwnable.kr cmd1 day12
-
2021-1-14 21:37
8074
-
[分享]pwnable.kr cmd1 day12
cmd1
题目
解题过程
1. 查看文件列表
root 和 cmd1_pwn 用户对 flag 有读权限,cmd1 用户对 flag 无读权限,对 文件 cmd1 有执行权限,且文件 cmd1 组权限中有个 s,意味着当 cmd1 用户执行文件 cmd1 时,会临时拥有 cmd1_pwn 用户的权限。
2. 查看 cmd1.c 源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 ;
}
|
程序会调用 system() 执行我们输入的 argv[1].
argv[1] 不能包含 flag、sh、tmp,所以考虑编写一个读取 flag 的 bash 脚本,直接在对应目录下用 ./ 执行脚本。
3. exp
编写后记得赋予该文件可执行权限
4. pwm
/home/cmd1/cmd1 ./cmd1_21
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2021-1-15 19:48
被cease2e编辑
,原因: