Mommy! what is PATH environment in Linux?
ssh cmd1@pwnable.kr -p2222 (pw:guest)
沒(méi)搞懂這題和環(huán)境變量有什么關(guān)聯(lián)瞎嬉,不過(guò)還是要珍惜這最后一道水題涮瞻。
先看源碼 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",就可以讓系統(tǒng)執(zhí)行 argv[1] 所含字串表示的命令。
注 1. strstr( str1, str2 ) 函數(shù)功能為判斷 str2 是否為 str1 的子串,是則返回 str2 在 str1 中首次出現(xiàn)的地址冗美;否則返回 NULL 。
注 2. putenv(char *envvar) 用來(lái)改變或增加環(huán)境變量的內(nèi)容析二。參數(shù)envvar的格式為envvar=value粉洼,如果該環(huán)境變量原先存在节预,則變量?jī)?nèi)容會(huì)依參數(shù)envvar改變,否則此參數(shù)內(nèi)容會(huì)成為新的環(huán)境變量属韧。參數(shù)envvar指定的字符串會(huì)變成環(huán)境變量的一部分安拟,如果修改這個(gè)字符串,環(huán)境變量也會(huì)跟著被修改宵喂。
這里調(diào)用 putenv 的作用大概只是讓我們不能直接打命令而已糠赦?...(例如 'cat xxx' 要變成 '/bin/cat xxx')
我們期望執(zhí)行的命令是 /bin/cat flag
,因?yàn)閭鬟f的參數(shù)中不能出現(xiàn) "flag" 锅棕,所以我們可以用通配符拙泽, 構(gòu)造命令:
cmd1@ubuntu:~$ ./cmd1 "/bin/cat fla?"
mommy now I get what PATH environment is for :)