0x01 前言
前两天在CNVD上看到该建站系统存在远程代码执行漏洞,遂下载下来审计了一番,代码编写风格有些混乱,代码量不多,稍微看了看就发现了几个比较严重的问题,撰写此文记录一下。
0x02 介绍
Laysns是一款轻量级建站系统,使用thinkphp 5.0框架开发。
【官 网】https://www.laysns.com/
【下载地址】LaySNS内容社区综合系统V2.55正式版全网首发 - 让建站更简单 - LaySNS
【测试环境】php 5.6.27、mysql5.0.11、apache2.2
【测试版本】Laysns V 2.55
0x03 漏洞统计
0x04 漏洞分析
任意用户登录
由于管理员salt 泄漏或可被爆破,从而导致可以伪造任意前台用户身份信息进行登录。
当用户登录的时候,commom\controller\HomeBase.php function systemlogin() 对用户身份信息进行检查,如果检查到用户未登录则进入user\controller\login.php index() 判断用户登录密码是否正确,核对成功则调用systemSetKey($cookie)设置cookie信息;在这里检查用户登录状态存在问题,可以被我们利用。
通过以上代码我们知道:
Cookie = encrypt(serialize(userinfo))
调试分析代码,userinfo 是这样一个数组:
$userinfo = array('id' => 1, 'status' => 1, 'point' => 2, 'username' => 'admin', 'userhead' => '/public/images/default.png', 'grades' => 1);
其中userinfo[‘id’] 和userinfo[‘username’]是身份验证的关键值,经过调试测试,userinfo[‘id’]是身份验证的唯一值,只要我们知道用户id就可以伪造任意用户身份,userid是一个等差数列,首项是adminid=1,公差为1,所以所有用户的userid理论上都可以遍历获取。用户cookie使用encrypt 函数进行加密,理解了encrypt函数的实现我们就可以伪造用户cookie了。encrypt函数在加密的过程中使用了adminsalt作为计算因子,而adminsalt在安装的时候生成,是一个固定的字符串+cookpre[5]前缀构成。cookiepre[5]有两种方法获取,一是前台用户登录成功的时候查看 cookie信息直接获取,二是根据生成算法[a-zA-Z]**5爆破,时间复杂度log52(5)应该很快。
漏洞利用:
反序列化漏洞
分析前文任意用户登录漏洞的时候,我们知道存在cookie信息的反序列化操作,而该建站系统使用了thinkphp框架,可以利用它的反序列化链进行任意文件删除和远程代码执行(linux),这里说一下远程代码执行的利用,不再做重复分析具体参考网上其他文章。ThinkPHP v5.0.x 反序列化利用链挖掘-安全客 - 安全资讯平台
复现步骤和任意用户登录相同,只需要把反序列化要利用的对象添加到用户信息数组中,重新生成cookie即可。
POC:
生成文件名由以下构成:
rot13(shellcontent)+md5("tag_"+md5(File.tag))
假如poc 中File类这样初始化:
生成的shell文件为:
http://test.com/uploads/nn<?cuc cucvasb();?>342c486abc21b67e04718bdecce120f1.php
Md5(‘tag_’.md5(‘good’))=342c486abc21b67e04718bdecce120f1
SQL注入
该建站系统风格代码混乱,开发并没有按照thinkphp官方文档标准写法来写,由此导致SQL注入漏洞,三个漏洞全都出自user/controller/index控制器中,漏洞比较简单,一眼就可以看出,没什么好分析,详情参考截图和 poc。
SQL注入漏洞一
`
http://test.com/LaySNS/home/2 and updatexml(1,concat(0x7e,user(),0x7e),1) #
SQL注入漏洞二:
http://test.com/LaySNS/user/index/getartcollect?ctype=updatexml(1,concat(0x7e,user()),1))-- -&limit=1&page=2
SQL注入漏洞三:
http://test.com/LaySNS/user/index/getmycollect?ctype=updatexml(1,concat(0x7e,user()),1))-- -&limit=1&page=2