freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

一处代码执行引发的思考
FreeBuf_266193 2018-09-16 09:00:53 494752

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

*本文作者:sjy93812,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

前言

YCCMS是一款PHP版轻量级CMS建站系统,程序页面设计简洁,生成静态html,后台功能强大,利于优化、超强收录、超强排名,适合做关键词排名、淘宝客程序,是个人、企业建站的理想选择。最近偶然间在互联网上看到了一个关于YCCMS代码执行的漏洞,详情并没有公开,因为有前段时间Echsop代码执行的事件,让我对代码执行的成因很感兴趣,所以我就下载了代码看了看。因为这个cms比较小众影响并不会大,所以这里直接把漏洞详情就写出来了。

漏洞解构

如果想做实验请在网上自行下载YCCMS3.3也就是最新版。

搭建好环境之后,访问一下首页看看它加载了哪些页面顺便看一下入口。

看一下入口

在这里可以看到你访问首页的时候,其实直接跳到了count.php文件中执行代码了,这里我们直接去看这个文件。

看这个文件

这个文件起到了一个中转站的作用,按照指引进入run.inc.php文件中。

进入run.inc.php文件

这里使用了魔术方法,在运行文件的时候自动将项目中的类进行了加载,并且执行了圆圈中的类里的方法,进入这个文件中看一下。

查看文件

这里首先调用了一个内部函数,看一下这个函数的作用。

调用了一个内部函数

这里再回到上一个函数中。

再回到上一个函数中

圈中的部分作用不是很大,唯一的作用就是将这个漏洞限制在了admin这里面,不然的话a这个参数将变成不可控的。

再接下来,就到了重点了,这里使用了file_exists这个函数判断一个文件存不存在,不存在的话就执行a=index的操作,接下来就直接将用户可控的变量传入了eval函数中。这里没有进行过滤,如果能绕过file_exists函数就能达到命令执行的效果了。看一下file_exists函数:

看一下file_exists函数

返回值是布尔值。这个函数允许传入的路径中含有特殊符号。具体来看一下。

查看文件

这里在ceshi1目录下有一个文件:

查看目录

访问测试路径,证明文件存在。

访问测试路径

http://127.0.0.1/test.php?a=ceshi1/1;/../2449.html这里加入特殊字符依然可以识别。

加入特殊字符依然可以识别

再加入一点符号:

再加入一点符号

再加入一点符号

这里证明这个函数会识别一个规则就是遇到类似/../这种结构时,会将第一个斜线前面的内容当作一个目录名来处理。

这里也就是说分号、斜线这种是可以在这个函数中逃逸出来的。

在这个函数中逃逸出来

也就是说这里可以任意构造类似于xxx/../bbb这种结构的路径,这里bbb可以是圆圈中任意一个单词。

接下来就是进入了eval这个函数。

进入了eval这个函数

可以看到这个函数可以直接执行php代码,还一个隐藏属性就是可以执行多条语句只要以分号间隔开就可以了,那么这里就出现问题了。

本地测试:

本地测试

本地测试

本地测试

回到这个cms中我们将a构造成这种形式factory();echo%201;//../。

回到这个cms中

那么就可以执行任意的语句了,这里解释一下:

执行任意的语句

Factory()这个是用来闭合前面的实例化对象用的,不闭合的话这里会直接报错,导致后面的语句无法执行。分号结束然后就是执行了我们自定义的代码,然后再以分号结束。然后就是返回上级目录为了满足文件存在的要求。

最终的执行效果:

最终的执行效果

*本文作者:sjy93812,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

# web安全 # YCCMS
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_266193 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf_266193 LV.4
这家伙太懒了,还未填写个人描述!
  • 4 文章数
  • 3 关注者
某CMS从CSRF到Getshell
2020-06-30
某CMS注入分析及注入点总结
2018-01-02
网站后台“空降”了一个管理员
2018-01-01
文章目录