云EC电商系统是由一套基于php+mysql开源的、免费的电商系统软件。支付整合了支付宝三端支付(PC、手机、APP),微信三端支付(PC扫码、微信公众号、APP),银联支付。
模块化设计,可方便快捷的接入其它第三方功能。
支持微信与QQ第三方登陆
支持阿里短信、腾讯短信、创蓝短信等多个接口
物流查询,批量打印快递单和发货单,运费计算设置
销售统计、排行榜、会员统计等
拥有限时抢购(秒杀)、分销、优惠券和拼团等丰富的营销工具
Cms官网地址:https://www.yunec.cn/
Demo地址:http://demo.yunec.cn/
代码下载地址:http://down.chinaz.com/soft/38561.htm
0x01 代码审计 ①前台无限制sql注入漏洞漏洞代码位于inc/module/news.php第42行
这里存在漏洞的参数为pageid
这里13行有一处sql语句,但是这里的sql语句会经过转义,因此这里不存在漏洞
41行cids参数是由pageid参数加上child_ids参数拼接而成,然后cids参数进入到42行的get_news_count函数
这里可以看到cids参数在in语句里面,没有任何的单引号包裹,因此这里存在注入漏洞
这里where参数也是直接拼接,因此判定这里的cids参数为直接拼接
这里直接拿官网demo验证
可以看到数据库用户名为yec_demo
②前台用户收藏商品处sql注入漏洞这里共有两处sql注入,不过是同一个参数,先来分析第一个漏洞
漏洞代码位于inc/module/user.php第473行开始
这里可以看到gid参数我们可控,并且没有做intval处理,然后进行foreach循环查询
其中的值传给$v这个参数,在第495行中带入进get_fav参数,跟进!
这里$v参数对应的为$goods_id参数,但是我们看到在584行这里的goods_id参数为直接拼接,也就造成了最终的sql注入漏洞
$where语句在590行里也是直接拼接,并没有做任何处理,因此这里存在sql注入漏洞
第二处漏洞代码位于inc/module/cart.php第180行
这里同样是gid参数传值给gid_list,然后最终利用foreach遍历取值到$v当中
在208行可以看到$v参数也是直接进行了拼接,导致了最终的sql注入漏洞!
这里直接拿官网demo验证
第一处漏洞
可以看到数据库用户名为yec_demo
③订单处存储型xss漏洞漏洞代码位于inc/module/order.php第137行
这里发票的参数为invoice_title和invoice_con
这里前面是发票抬头,后一个是发票内容
这里没有进行实体化操作,然后我们跟进这两个参数的传递过程
这里可以看到直接赋值给了data里参数
然后可以看到这里的data直接insert进了数据库,从头到尾发票的两个参数都没有进行实体化处理,因此判定存在存储型xss漏洞
这里直接拿官网demo验证
这里模拟购物流程,然后抓包修改发票参数
这里的发票参数出现了问题
这里的invoice_title和invoice_con参数存在xss漏洞
然后我们使用管理员账号查看订单信息
可以看到这里的确存在存储型xss漏洞
④订单评论处sql注入漏洞这里漏洞代码位于inc/module/comment.php第7行开始
这里itemid参数可以看到没有任何过滤,然后跟踪这个参数
这里重要研究item_id参数,46行利用foreach循环遍历
这里看54行有一个sql语句,这里$item_id[$k],$k为键值,因此这个$item_id[$k]即为$item_id的值可以看到这里的sql语句是双引号进行包裹,因此存在sql注入漏洞
这里可以看到sql语句为直接拼接,因此也就验证了此处存在sql注入漏洞
⑤用户订单评论处sql注入漏洞漏洞代码位于inc/module/user.php第118行
这里是用户评论的功能,首先我们需要输入pid和content参数,即为对应的订单id和评价内容,这里由于没有先对订单进行查询,因此这里随便输入订单id即可
接下来检查用户是否登录,这个前台是开放注册的,因此没有任何限制
接下里进入到118行的漏洞代码,这里功能是检查用户是否评论过于频繁,我们跟进这个check_comment_reply函数
这里重点关注ip参数,在807行这里ip参数是由单引号包裹,并且这个cms是有全局过滤的
但是全局过滤是针对GET、POST、COOKIE类型,但是跟进我们的getip参数
可以看到可以由X-Forwarded-For获取,也就是说不受全局过滤的影响,可以直接引入单引号,并且没有数字类型的限制,因此可以插入任意sql语句
这里直接拿官网demo验证
可以看到数据库用户名为yec_demo
0x02 总结后台getshell方法是用文件包含的形式,做法就是先上传一个jpg文件,jpg文件里写进php的webshell,然后在后台寻找require或者include的功能,然后包含进文件即可,这里当时怎么找都没找到,,具体方法在水泡泡师傅的博客里(https://www.cnblogs.com/r00tuser/p/9014869.html)
这个cms整体使用了360webscan,但是不知怎么,,这个过滤脚本没有起到一丁点作用。。实在是迷。。
在没有360webscan的保护下,寻找漏洞还是非常轻松的。。sql注入的话就是直接拼接,或者像order by后面的参数或者in语句里面的参数,往往这里在除去常见的漏洞点之后也会出现非常多的问题~
至于其他漏洞,这个就看功能函数具体怎么写的,需要再根据可控的条件数和函数提供的功能来组合判断!
总的来说,,这套cms比较适合一些已经入门的人来审计,,漏洞也不是那么显而易见,,但是又不会很难。。
上述如有不当之处,敬请指正~