代码审计| yxcms app 1.4.6 漏洞集合
作者:网友投稿 时间:2018-02-25 21:00
之前有挖了yxcms app的一些漏洞,基本是后台的,打后台的知识也就发现了前台的存储XSS,然后前几天看到先知上有师傅发了前台的存储XSS结合固定会话的利用方式,我的方式不大一样,我是通过数组结合绕过正则的方法,然后使得可以无限制的进行XSS的注入,再结合CSRF进行GetShell,也一并发出来一起学习交流,另外后台的洞比较多,本文就以前发现的洞再次分析整理,还有一些洞主要用来学习的,没有实际利用作用,比如后台SQL注入,因为后台本就有执行SQL的功能。期待和师傅们的各种交流:-)
0×01 存储型XSS 0×00 相关环境源码信息:YXcmsApp1.4.6
问题文件: \YXcmsApp1.4.6\protected\apps\default\controller\columnController.php
漏洞类型:存储型XSS
站点地址:
0×01 漏洞分析首先分析下输入过程
在文件\YXcmsApp1.4.6\protected\apps\default\controller\columnController.php中发现如下代码块,通过在该文件的第12行中加入如下代码后,可以判断当进行留言操作的时候调用的是case 6。

跟入extend方法,在\YXcmsApp1.4.6\protected\apps\default\controller\columnController.php文件中的第377-384行中发现如下输入数据的处理过程,把SQL库查询得到guestbook对应的tableinfo的数据作为POST请求接收的参数名,然后把接收到的数据,如果是数组便拆分数组然后进行先后两次的in方法和deletehtml方法的数据处理操作,如果是字符便丢进html_in方法进行处理 。

guestbook的tableinfo等数据的获取方式是这样的,首先yxcms会先进行如下请求,获取guestbook对应的extendid等数据信息。
SELECT id,name,ename,path,url,type,deep,method,tplist,keywords,description,extendid FROM yx_sort WHERE ename=’guestbook’ LIMIT 1

然后会根据extendid执行SELECT id,tableinfo,name,type,defvalue FROM yx_extend WHERE id=’12′ OR pid=’12′ ORDER BY pid,norder DESC取出表单的tableinfo等信息。

这里我的绕过方式是使用数组的操作绕过先是跟入deletehtml方法,在\YXcmsApp1.4.6\protected\include\lib\common.function.php发现该方法,通过分析如下由正则写的替换规则,可以知道会将script标签和完整闭合的<>标签替换为空,然后会将一些实体化的字符替换为原本的字符。因此可以利用类似alert(1)然后经过in方法中的htmlspecialchars进行处理,虽然把字符实体化了,但是保留了整个语句的完整性。

如,进行如下请求,便会将完整的JS代码进行实体化的存储在数据库中,我在\YXcmsApp1.4.6\protected\include\lib\common.function.php文件的deletehtml方法中,在数据处理前打印一次,数据处理后打印一次,方便查看现象。

现在分析下输出过程
在\YXcmsApp1.4.6\protected\apps\admin\controller\extendfieldController.php 文件中,看到如下获取留言信息的代码块。




