平平无奇的代码审计 - 爱吃猫的闲鱼

admin 2021年12月31日15:59:30评论152 views字数 2543阅读8分28秒阅读模式

一 前言

前不久逛cnvd的时候看到一款小众CMS,大型CMS咱也审计不出啥漏洞呀,复盘了下上面的漏洞,仔细看了下,又发现了一些其他的问题,小众cms可以跟一下具体的流程,了解下漏洞发生的原因,用来练手还是可以的。

二 反射型XSS漏洞

其实像这样小众的CMS出现XSS漏洞是比较常见的,而他出现XSS的地方也算是经常遇到的地方,报错时直接把输入的信息在没有任何安全措施的情况下进行了原样输出从而触发了XSS漏洞。
拿到该CMS的第一步首先简单看下看下该CMS的URL路由情况,方便定位相关函数

$t = @$_GET['t'] ? $_GET['t'] : "sys";
$n = @$_GET['n'] ? $_GET['n'] : "index";
$c = @$_GET['c'] ? $_GET['c'] : "index";
$a = @$_GET['a'] ? $_GET['a'] : "index";
define("L_TYPE", $t);
define("L_NAME", $n);
define("L_CLASS", $c);
define("L_MODULE", "admin");
define("L_ACTION", "do{$a}");
require_once '../core/route.php';

包含了/core/route.php函数,跟进去看一下
平平无奇的代码审计 -  爱吃猫的闲鱼
定义了一些常量,在最后调用了load类中的module函数, 该函数位于\core\class\load.class.php中
平平无奇的代码审计 -  爱吃猫的闲鱼
然后调用相关函数,该函数会查看传入的文件是否存在
平平无奇的代码审计 -  爱吃猫的闲鱼
如果文件不存在会将错误信息传入类LCMS的X函数,该函数位于\core\class\lcms.class.php中,该函数会调用template函数生成模板进行错误的输出
平平无奇的代码审计 -  爱吃猫的闲鱼
然后生成报错信息模板
平平无奇的代码审计 -  爱吃猫的闲鱼
在进行输出的时候并没有看到对错误进行的任何过滤行为,直接进行了输出,触发了反射型XSS
平平无奇的代码审计 -  爱吃猫的闲鱼
平平无奇的代码审计 -  爱吃猫的闲鱼
基本上涉及到的这种错误输出都没有过滤,都存在反射型xss漏洞

三 存储型XSS漏洞

在通过Seay代码审计工具自动扫描的时候发现了该CMS获取客户端IP的方式存在漏洞,可以进行伪造,并且后台记录了登录成功的IP,但是只会记住登录成功的用户的IP,所以只能通过拿下一个低权限的账号的时候才有可能触发该存储XSS。
注册一个低权限的账号,然后在登录的时候进行客户端IP伪造,发现可以触发存储型XSS。
平平无奇的代码审计 -  爱吃猫的闲鱼
管理员登录系统,点击用户中心—用户管理处即可触发储存型XSS漏洞
平平无奇的代码审计 -  爱吃猫的闲鱼
定位到IP伪造的相关函数,函数位于\app\sys\login\admin\index.class.php中,获取客户端的IP然后进行数据库的更新
平平无奇的代码审计 -  爱吃猫的闲鱼
而CLIENT_IP,根据全局变量可知为LCMS::IP(),跟进到相关函数,函数位于\core\class\lcms.class.php中,根据函数可知攻击者可以在客户端伪造IP
平平无奇的代码审计 -  爱吃猫的闲鱼
最后将从客户端获取到的IP更新到了数据库中
平平无奇的代码审计 -  爱吃猫的闲鱼
当我们点击用户中心的时候,查看调用的函数\app\sys\user\admin\admin.class.php
平平无奇的代码审计 -  爱吃猫的闲鱼
从数据库中取数据然后进行模板的渲染输出,触发XSS漏洞

四 任意文件删除

在删除备份SQL文件的时候
平平无奇的代码审计 -  爱吃猫的闲鱼
跟进到相关函数,函数位于\app\sys\backup\admin\database.class.php中

case 'del':
    $file = PATH_WEB . "backup/data/{$_L['form']['name']}";
    if (is_file($file)) {
        delfile($file);
        ajaxout(1, "删除成功");
    } else {
        ajaxout(0, "文件不存在");
    }
    break;

跟进到delfile函数,该函数会调用path_absolute函数,该函数在 \core\function\file.func.php中存在过滤

function path_absolute($path)
{
    $path = PATH_WEB . str_replace([
        "../", "./", PATH_WEB,
    ], "", $path);
    $path = str_replace("\/", "\\", $path);
    return is_dir($path) ? path_standard($path) : $path;
}

过滤为../ ./,在windows系统下可以通过..\绕过

五 任意文件上传

很少看到有这么干的CMS了,看到的时候还是有些吃惊,有人说这是正常功能,看了写这个CMS的上传他的本意应该还是上传非执行性脚本的意思,初衷并不是希望你可以上传php文件。
在设置中心—>安全性能—>格式白名单添加php
平平无奇的代码审计 -  爱吃猫的闲鱼
然后在设置中心—>后台设置—>后台LOGO直接上传php文件即可
平平无奇的代码审计 -  爱吃猫的闲鱼
平平无奇的代码审计 -  爱吃猫的闲鱼
上传函数位于\core\class\upload.class.php中,只要php是允许的后缀名即可实现文件上传getshell
平平无奇的代码审计 -  爱吃猫的闲鱼
打印下保存的文件白名单
平平无奇的代码审计 -  爱吃猫的闲鱼
跟进下相关函数,位于app\sys\config\admin\admin.class.php中的dosafe函数,该函数会将用户添加的白名单保存在全局变量中,在校验白名单时从全局变量中取值导致触发任意文件上传漏洞
平平无奇的代码审计 -  爱吃猫的闲鱼

六 SQL注入漏洞

这个CMS应该是全部都没有进行安全检测的,基本上和数据库交互的地方都存在SQL注入吧,举一个例子吧,多了都是同类。
在用户管理—>添加用户处

payload: admin1'and(select*from(select+sleep(1))a)='

平平无奇的代码审计 -  爱吃猫的闲鱼
平平无奇的代码审计 -  爱吃猫的闲鱼
通过更改sleep时间可以看到sleep函数生效了,执行时间相差了大概1倍,通过查看SQL语句执行记录可知,sleep函数被拼接到了sql语句中,并执行了sql语句
平平无奇的代码审计 -  爱吃猫的闲鱼
根据url跟进到漏洞函数,函数位于\app\sys\user\admin\admin.class.php中的doiframe。具体代码如下,在没有经过过滤的情况下直接获取了数据

$_L 是全局的变量,包含系统所有的变量数据,打印下可以看到输出了网站的所有参数,可以看到$_L包含了系统所有的变量数据

平平无奇的代码审计 -  爱吃猫的闲鱼
平平无奇的代码审计 -  爱吃猫的闲鱼
name值为拼接了恶意sql语句的内容,该值直接拼接到了SQL语句中去执行从而触发了sql注入漏洞

七 总结

也没啥亮点吧,很平常的cms流程跟踪一下就得了,如有师傅需要cms可以留下联系邮箱。

BY:先知论坛

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日15:59:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   平平无奇的代码审计 - 爱吃猫的闲鱼https://cn-sec.com/archives/713296.html

发表评论

匿名网友 填写信息