vlambda博客
学习文章列表

[代码审计] LvyeCms CSRF漏洞分析


一、Cms初识:

LvyeCMS 基于ThinkPHP框架开发,采用独立分组的方式开发的内容管理系统。支持模块安装/卸载,模型自定义,整合UCenter通行证等。同时系统对扩展方面也支持比较大,可以使用内置的行为控制,对现有功能进行扩展。


-目录结构:

[代码审计] LvyeCms CSRF漏洞分析



二、漏洞简介:

后台添加、删除、修改管理员的功能,没有进行csrf的防护,例如验证referer、添加token等处理,导致可以进行csrf漏洞攻击,利用其添加、删除或者修改管理员。



三、漏洞分析过程:

首先查看控制器方法:            \lvyecms\Application\Admin\Controller\ManagementController.class.php

添加管理员访问的是adminadd()方法:

[代码审计] LvyeCms CSRF漏洞分析



首先判断是否为POST请求,如果是则进行添加管理员的操作,这里首先使用D()方法实例化模型类,然后调用了createManager()方法进行添加操作:

[代码审计] LvyeCms CSRF漏洞分析


跟进createManager()方法:直接进行了添加操作,也是没有任何验证的

[代码审计] LvyeCms CSRF漏洞分析


删除功能:

[代码审计] LvyeCms CSRF漏洞分析


修改功能:

[代码审计] LvyeCms CSRF漏洞分析


都是一样,没有任何验证,所以最终可以进行CSRF漏洞攻击,构造请求伪造的页面,让管理员在登陆状态下点击,即可攻击成功。



四、漏洞利用:

以添加操作为例:

[代码审计] LvyeCms CSRF漏洞分析

填好创建的管理员信息,在点击添加时抓包

[代码审计] LvyeCms CSRF漏洞分析


POST数据包内容:可以看到没有任何token等验证

POST /Lvyecms3.1/admin.php?m=Management&a=adminadd HTTP/1.1Host: 192.168.136.137User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0Accept: application/json, text/javascript, */*; q=0.01Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateDNT: 1Content-Type: application/x-www-form-urlencoded; charset=UTF-8X-Requested-With: XMLHttpRequestReferer: http://192.168.136.137/Lvyecms3.1/admin.php?m=Management&a=adminadd&menuid=22Content-Length: 110Cookie: UM_distinctid=175fe32e682524-0570e16459db8-13676d4a-144000-175fe32e68355f; CNZZDATA5760804=cnzz_eid%3D1456830227-1606287309-%26ntime%3D1606305680; PHPSESSID=okgritblkcbg4ra256sh5u5me3; __tins__14834816=%7B%22sid%22%3A%201606620965420%2C%20%22vd%22%3A%204%2C%20%22expires%22%3A%201606624174754%7D; __51cke__=; __51laig__=4; menuid=22X-Forwarded-For: 127.0.0.1Connection: close
username=test&password=test&pwdconfirm=test&email=test%40test.com&nickname=test&remark=test&role_id=1&status=0


然后利用burp生成csrf_poc,大概就这样子,这里我用js自动提交(burp本身的太粗糙了),当然实际中可以弄得更加完美,更具有迷惑性就更好了

[代码审计] LvyeCms CSRF漏洞分析


然后当管理员登陆状态下点击页面链接,即可添加成功:

[代码审计] LvyeCms CSRF漏洞分析