RIPS –代码审计靶场(第一关)

华盟原创文章投稿奖励计划

靶场代码:

class Challenge {
  const UPLOAD_DIRECTORY = './solutions/';
  private $file;
  private $whitelist;
  public function __construct($file) {
    $this->file = $file;
    $this->whitelist = range(1, 24);    //生成包含1-24的数组
  }
  public function __destruct() {
    if (in_array($this->file['name'], $this->whitelist)) {    //验证邮箱的名字但是并没有验证上传文件的文件类型
      move_uploaded_file(
        $this->file['tmp_name'],
        self::UPLOAD_DIRECTORY . $this->file['name']
      );
    }
  }
}
$challenge = new Challenge($_FILES['solution']);

该代码在第10行中包含一个任意文件上传漏洞。in_array()在第10行中使用该操作 来检查文件名是否为数字。但是,它是类型不安全的,因为第三个参数未设置为“ true”。因此,PHP将文件名与数组$ whitelist进行比较时,将尝试将文件名强制转换为整数值(第7行)。结果,可以通过在文件名之前添加介于1和24之间的值来绕过白名单,例如“ 5xxx.php”。然后,上传的PHP文件将导致在Web服务器上执行代码。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容