PHPYun_v4.3 CMS重装到Getshell

01

前言

PHPYun是一款国内流行的人才网站管理系统,做了一些测试,发现了一点问题,做个记录,未深入。

02

环境搭建

03

CMS重装漏洞

代码分析:

1、漏洞文件位置:/install/index.php

在index.php中,根据PHP版本来选择包含目录,我们的环境包含的PHP5目录,进一步跟进PHP5目录查看代码

2、漏洞文件位置:/install/php5/install.php

可以看到,这边是有有做lock文件判断的,那么问题出在哪呢? 我们再来看一下常量S_ROOT的定义:

define('S_ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);

也就是S_ROOT等价于 \install\,而不是根目录\;所以这边的判断是判断/install//data/phpyun.lock文件是否存在。

我们再来看一下同文件install.php下的第357-368行:

代码逻辑上,/install/index.php文件包含/install/php5/install.php文件,这边使用相对路径,那么生成的phpyun.lock文件在根目录下/data/phpyun.lock。

综上,在php5/install.php中判断/install/data/phpyun.lock文件是否存在,然而实际上phpyun.lock在/data/phpyun.lock中,导致程序在实现上存在CMS重装漏洞。

漏洞利用:

代码分析主要在代码逻辑上,利用却很简单,直接访问http://127.0.0.1/install/index.php 直接进入重装界面。

04

后台Getshell

代码分析:

漏洞文件位置:/admin/model/config.class.php 第88-114行中:

save_action函数对用户提交的参数写入数据库中,并调用web_config()函数进行写入到配置文件,我们继续跟进web_config()函数

漏洞文件位置:/app/public/common.php 第513-529行:

这段代码从数据库中读取数据,并写入到配置文件config.php中,并未经任何处理,导致攻击者可以构造脚本代码写入配置文件,从而导致程序在实现上存在代码执行漏洞。

漏洞利用:

登录系统--网站设置--安全设置--填写Payload:

5.2版本: \");phpinfo();$config=array(\"

5.4版本:\");phpinfo();/*

通过直接访问http://127.0.0.1/data/plus/config.php,成功触发代码执行漏洞

05

总结

像PHPYun这样的人才网站管理系统,相对功能会复杂些,但仍有很多可以挖掘的点,黑盒结合白盒进行测试,发现的两个问题,并未深入,欢迎志同道合的朋友来相互探讨,交流。

Bypass

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180225G0PEBW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券