[代码审计Day1] in_array代码审计

 简介

1

 简介

[代码审计Day1] in_array代码审计_第1张图片

 

 in_array()

函数搜索数组中是否存在指定的值。

语法:in_array(search,array,type)

参数 描述
search 必需。规定要在数组搜索的值。
array 必需。规定要搜索的数组。
type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
class Challenge {
//设置图片上传目录
  const UPLOAD_DIRECTORY = './solutions/';  
  
  private $file;
  private $whitelist;

 //当对创建时调用的函数
  public function __construct($file) {
     //将外部上传的图片内容信息赋值给$this->_file
    $this->file = $file;
    //设置1-24的值分别赋值给whitelist白名单 
    $this->whitelist = range(1, 24);
  }
//当对象销毁时使用
  public function __destruct() {
    //判断传进来的图片名称是否符合白名单里面的信息 
    //这段代码的主要漏洞就在这里in_array()判断不严格 没加true 此时判断是不会判断类型的
    //所以我们可以上传1-24数字开头的值即可绕过导致图片任意上传
    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']);

 

 

 

 

 简介

1

 简介

1

你可能感兴趣的:([代码审计Day1] in_array代码审计)