CVE-2024-34982分析

lylme_spage六零导航页,未授权webshell上传。php 的文件上传的漏洞,使用$_FILE['type']来判断文件类型是否在白名单内,该值是由浏览器提供的,不是可靠的文件类型验证方法。

概况与复现

lylme_spage,六零导航页,“六零导航页 (LyLme Spage) 致力于简洁高效无广告的上网导航和搜索入口,支持后台添加链接、自定义搜索引擎,沉淀最具价值链接,全站无商业推广,简约而不简单。”,项目地址:https://github.com/LyLme/lylme_spage。影响版本v1.9.5。

漏洞页面

申请收录页面 /apply,有一个上传网站图标的功能。修改文件名称与内容,上传一句话木马。

bp复现截图1

bp复现截图2

分析

找到漏洞文件,位于/include/file.php,

源码

源码2

可以看到,当上传网站图标时,将会调用upload_img函数,该函数读取$_FILES["file"]变量的type属性进行校验,且只通过该type值校验上传文件的类型。type属性包含上传文件的MIME类型,但是客户端可控的。校验代码如下,匹配是否在白名单中。类型校验通过后,会对提供的文件名按点号分割,取最后一个作为文件后缀名,与以img_开头的随机名称组合后存放在upload/路径下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function validate_file_type($type)
{
    switch ($type) {
        case 'jpeg':
            $type = 'image/jpeg';
            break;
        case 'jpg':
            $type = 'image/jpeg';
            break;
        case 'png':
            $type = 'image/png';
            break;
        case 'gif':
            $type = 'image/gif';
            break;
        case 'ico':
            $type = 'image/x-icon';
            break;
    }

    $allowed_types = array("image/jpeg", "image/png", "image/gif", "image/x-icon");
    return in_array($type, $allowed_types);
}

于是只需保证上传的mime值在白名单内,文件名称为xx.php即可触发该文件上传漏洞,原理比较简单,利用难度低,危害大。

Reference

NVD:https://nvd.nist.gov/vuln/detail/CVE-2024-34982

首次披露:https://github.com/n2ryx/CVE/blob/main/Lylme_pagev1.9.5.md

使用 Hugo 构建
主题 StackJimmy 设计