代码审计之文件上传漏洞
in Code audit with 0 comment

代码审计之文件上传漏洞

in Code audit with 0 comment

本人技术渣,基础不牢,且费力审计

class Challenge {
    const UPLOAD_DIRECTORY = './solutions/';
    private $file;
    private $whitelist;

    public function __construct($file) {
        $this->file = $file;
        $this->whitelist = range(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']);



----------


第13行中的任意文件上传漏洞。第in_array()12行使用该操作来检查文件名是否为数字。但是,它是类型不安全的,因为第三个参数未设置为“true”。因此,在将数据与数组$ whitelist(第8行)进行比较时,PHP将尝试将文件名转换为整数值。因此,可以通过在文件名前加上1和24范围内的值来绕过白名单,例如“5backdoor.php”(代码的意图上是想让我们只传数字名称的文件的)。然后,上载的PHP文件将导致Web服务器上的代码执行		
	
Responses