记录一个非常坑的题,考的是RCE的编码绕过(可能也有别的做法)
先题目界面
一眼就可以看出是RCE,但是过滤了很多东西,比如空格,可以用$IFS$9绕过;ls、cat等可以用\绕过,如l\s,过滤了/,这就有点麻烦了,以为这样就无法看到根目录下的文件(其实不用看),本来打算利用linux的字符截取,如:
利用${PATH:0:1}就可以得到 / 了,但是他把 { } 也过滤了
这就让我想到了利用编码绕过
echo$IFS$9bHMgLw==$IFS$9|base64$IFS$9-d|sh 相当于执行 ls /
可是发现并没有flag
找了半天也没有,想到了用env打印环境变量
本以为结束了,但是。。。很遗憾,flag是错的
又经过很长时间考虑,想到可以看看index.php源码,看看会不会有提示,但是题目过滤了index,老规矩,编码绕过
最终payload
127.0.0.1;echo$IFS$9Y2F0IGluZGV4LnBocA==$IFS$9|base64$IFS$9-d|sh
//Y2F0IGluZGV4LnBocA==就是cat index.php的base64编码
ctrl+u看源码
拿到最终flag(随便可以看看做了哪些过滤)