技术分享-硬编码导致的前台上传漏洞

admin 2025年4月7日11:46:12评论2 views字数 1763阅读5分52秒阅读模式

 

原文链接:https://xz.aliyun.com/news/17589

作者:xiaoQ

0x1 前言
对于用户身份校验不全面,导致的前台文件上传漏洞。分享一下挖掘过程。

0x2 代码分析
技术分享-硬编码导致的前台上传漏洞

很明显的ThinkPhp架构,针对TP的路由,一般就是/index.php/cpntroller/method,这里我们可以抓一下登录的数据包,来确定一下路由。

技术分享-硬编码导致的前台上传漏洞

大概也就猜出来了,account控制器,login方法

技术分享-硬编码导致的前台上传漏洞

0x3 漏洞分析
漏洞文件在app/controller/Api.php文件的upload方法中

技术分享-硬编码导致的前台上传漏洞

$key = $request->param("key");
        if (!$key || $key == 'undefined' || $key == null) {
            return $this->create([], '未登陆或密钥key为空', 400);
        }
        if ($_FILES["file"]["error"] > 0) return $this->create([], '上传出错', 400);
        $max_size = SystemModel::where('key', "upload_max")->value("value");
        if ($_FILES["file"]['size'] > $max_size * 1024 * 1024) {
            return $this->create(null, '图片大小超出限制', 400);
        }
        $user = UserModel::where("Secret_key", $key)->find();
        if (!isset($user) || $user['state'] == 0) return $this->create(null, '用户不存在或被停用', 400);


        $allSize = ImagesModel::where('user_id', $user['id'])->sum('size');
        if ($allSize + $_FILES["file"]['size'] > $user['capacity']) {
            return $this->create(null, '您的存储配额不足', 400);
        }

第一个if语句判断传参数key是不是为空,第二第三个if语句正常上传不会引起报错

$user = UserModel::where("Secret_key", $key)->find();
        if (!isset($user) || $user['state'] == 0) return $this->create(null, '用户不存在或被停用', 400);

第四个if语句来判断$user是否存在并且state为不为0,要是不存在并且等于0,直接退出。$user又是把key带入到sql语句查询之后的结果。

之后发现这个key是写在admin管理员下的,也就是说他这个key就是默认的值,相当于硬编码(写在数据库里的硬编码)。

技术分享-硬编码导致的前台上传漏洞

有了key我们往下走

$role = RoleModel::find($user['role_id']);
$UploadCLass = new UploadCLass;
$result = $UploadCLass->create($_FILES["file"], $role['storage_id']);

从数据库里头我们可以看到$user['role_id']的值是1,然后实例化UploadCLass,之后调用UploadCLass类里的create方法,传入$_FILES["file"], $role['storage_id'],此时$role['storage_id']的值为1000。跟进create方法。

技术分享-硬编码导致的前台上传漏洞技术分享-硬编码导致的前台上传漏洞

当sid的值为1000的时,查询SQL语句,$this->storage['type']的值为local

技术分享-硬编码导致的前台上传漏洞

switch ($this->storage['type']) {
            case 'local':
                return $this->location_upload($file);
                break;

跟进location_upload方法。

技术分享-硬编码导致的前台上传漏洞

直接上传文件。

0x4 漏洞复现
技术分享-硬编码导致的前台上传漏洞

技术分享-硬编码导致的前台上传漏洞

0x5

原文始发于微信公众号(神农Sec):技术分享-硬编码导致的前台上传漏洞

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月7日11:46:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   技术分享-硬编码导致的前台上传漏洞http://cn-sec.com/archives/3923154.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息