记一次小有成就的代码审计

一 前言

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

二 反射型XSS漏洞

其实像这样小众的CMS出现XSS漏洞是比较常见的,而他出现XSS的地方也算是经常遇到的地方,报错时直接把输入的记一次小有成就的代码审计

定义了一些常量,在最后调用了load类中的module函数, 该函数位于coreclassload.class.php中
记一次小有成就的代码审计

然后调用相关函数,该函数会查看传入的文件是否存在
记一次小有成就的代码审计

如果文件不存在会将错误信息传入类LCMS的X函数,该函数位于coreclasslcms.class.php中,该函数会调用template函数生成模板进行错误的输出
记一次小有成就的代码审计

然后生成报错信息模板
记一次小有成就的代码审计

在进行输出的时候并没有看到对错误进行的任何过滤行为,直接进行了输出,触发了反射型XSS
记一次小有成就的代码审计

记一次小有成就的代码审计

基本上涉及到的这种错误输出都没有过滤,都存在反射型xss漏洞

三 存储型XSS漏洞

在通过Seay代码审计工具自动扫描的时候发现了该CMS获取客户端IP的方式存在漏洞,可以进行伪造,并且后台记录了登录成功的IP,但是只会记住登录成功的用户的IP,所以只能通过拿下一个低权限的账号的时候才有可能触发该存储XSS。
注册一个低权限的账号,然后在登录的时候进行客户端IP伪造,发现可以触发存储型XSS。
记一次小有成就的代码审计

管理员登录系统,点击用户中心—用户管理处即可触发储存型XSS漏洞
记一次小有成就的代码审计

定位到IP伪造的相关函数,函数位于appsysloginadminindex.class.php中,获取客户端的IP然后进行数据库的更新
记一次小有成就的代码审计

而CLIENT_IP,根据全局变量可知为LCMS::IP(),跟进到相关函数,函数位于coreclasslcms.class.php中,根据函数可知攻击者可以在客户端伪造IP
记一次小有成就的代码审计

最后将从客户端获取到的IP更新到了数据库中
记一次小有成就的代码审计

当我们点击用户中心的时候,查看调用的函数appsysuseradminadmin.class.php
记一次小有成就的代码审计

从数据库中取数据然后进行模板的渲染输出,触发XSS漏洞

四 任意文件删除

在删除备份SQL文件的时候
记一次小有成就的代码审计

跟进到相关函数,函数位于appsysb记一次小有成就的代码审计

五 任意文件上传

很少看到有这么干的CMS了,看到的时候还是有些吃惊,有人说这是正常功能,看了写这个CMS的上传他的本意应该还是上传非执行性脚本的意思,初衷并不是希望你可以上传php文件。
在设置中心—>安全性能—>格式白名单添加php
记一次小有成就的代码审计

然后在设置中心—>后台设置—>后台LOGO直接上传php文件即可
记一次小有成就的代码审计

记一次小有成就的代码审计

上传函数位于coreclassupload.class.php中,只要php是允许的后缀名即可实现文件上传getshell
记一次小有成就的代码审计

打印下保存的文件白名单
记一次小有成就的代码审计

跟进下相关函数,位于appsysconfigadminadmin.class.php中的dosafe函数,该函数会将用户添加的白名单保存在全局变量中,在校验白名单时从全局变量中取值导致触发任意文件上传漏洞
记一次小有成就的代码审计

记一次小有成就的代码审计

六 SQL注入漏洞

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

payload: admin1'and(select*from(select+sleep(1))a)=' 
记一次小有成就的代码审计 记一次小有成就的代码审计

通过更改sleep时间可以看到sleep函数生效了,执行时间相差了大概1倍,通过查看SQL语句执行记录可知,sleep函数被拼接到了sql语句中,并执行了sql语句
记一次小有成就的代码审计

根据url跟进到漏洞函数,函数位于appsysuseradminadmin.class.php中的doiframe。具体代码如下,在没有经过过滤的情况下直接获取了数据
记一次小有成就的代码审计

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

记一次小有成就的代码审计 记一次小有成就的代码审计

name值为拼接了恶意sql语句的内容,该值直接拼接到了SQL语句中去执行从而触发了sql注入漏洞
记一次小有成就的代码审计

我是一名网安渗透工程师,不仅仅研究渗透,当然,你想学习【资料领取】

七 总结

也没啥亮点吧,很平常的cms流程跟踪一下就得了

版权声明:玥玥 发表于 2021-07-29 23:28:25。
转载请注明:记一次小有成就的代码审计 | 女黑客导航