梦想CMS(lmxcms)任意文件删除

1. 漏洞详情——CNVD-2020-59469
 
2. 漏洞描述称后台Ba***.cl***.php文件存在任意文件删除,查看cms源码,只有BackdbAction.class.php和BasicAction.class.php这两个类文件符合名字要求
 
3. 查看源代码,代码中的注释显示只有BackdbAction.class.php有文件删除功能。php中的文件删除函数是unlink(),搜索一下该函数,发现BackdbAction.class.php文件存在该函数,且有变量传入,那么应该就是这个文件存在文件删除漏洞了
 
 
4. 类文件最下方的delOne()方法中传入了filename的变量,并且与`file/back`进行拼接组成文件路径,也就是说只能删除file/back这个目录下的文件,但只要能绕过路径,就能实现任意文件删除
 
5. 可以看到文件中的delbackdb()和delmorebackdb()都调用了delOne()方法,delbackdb()中支队文件名进行了首尾两端的空格去除,而且只校验了文件名。
 
6. 使用../../即可绕过目录限制,在根目录下新建一个test.txt文件,尝试删除test.txt文件,如下所示,文件被成功删除
http://localhost:8081/admin.php?m=backdb&a=delbackdb&filename=../../test.txt
7. 若网站的install目录在完成安装后没有删除,则利用该文件删除漏洞删除install目录下的install_ok.txt文件,则可实现对网站的重新覆盖安装

梦想CMS(lmxcms)任意文件读取

1. php文件读取的函数
fread()
fgets()
fgetss()
file()
readfile()
file_get_contents()
fpassthru()
2. 漏洞详情————CNVD-2020-51412
 
3. 漏洞详情中没有给出任何提示,但是只给了低危,说明漏洞在后台,在项目中搜索file_get_contents

4. 只有file.class.php文件中的file_get_contents存在变量传入,该函数被getcon函数调用,查看getcon函数被哪些方法调用了,双击进入该文件,选择getcon右键查找使用,如下,可以看到getcon被TemplateAction.class.php文件的TemplateAction类的editfile方法调用了,并且传入了dir变量
5. dir变量传入editfile方法后,与$this->config['template']进行拼接,echo输出一下$this->config['template'].$dir,访问一下看拼接的是什么
admin.php?m=template&a=editfile&dir=1
 
6. 如下所示,拼接的是E:/phpstudy/phpstudy_pro/WWW/localhost/lmxcms1.4/template/,也就是模板文件所在的目录
 
7. 尝试一下读取网站配置文件,如下所示,成功读取到配置文件
 http://localhost:8081/admin.php?m=Template&a=editfile&dir=../inc/db.inc.php

梦想CMS(lmxcms)任意文件文件写入

1. 如上所示,成功读取到文件后,可以直接编辑读取到的文件并提交,我们可以直接在读取到的文件中写入webshell,这样就能直接上线了
2. 既然可以修改文件,说明一定还有修改文件的方法,查看源码,发现还是在editfile方法中,存在一个file::put(),先判断POST数据里面是否设置了settemcontent,然后再进行写入操作
3. 搜索fileput,方法介绍如下,有两个参数,file参数规定要写入数据的文件,文件不存在则创建新文件,data参数规定要写入的数据
4. 尝试写入一个webshell,可以看到成功在template目录下写入了shell.php,也可以加上../写入到根目录下
5. 使用蚁剑连接成功
 

earmusicCMS任意文件下载

1. 文件下载没有关键函数,只能从功能点入手,对文件下载的功能点进行抓包,从抓包数据中找到对应的功能点文件。
   
2. 这里我们选择earmusicCMS进行审计,搭建好环境后先登录,上传一个test,然后打开这个test,可以看到页面中有一个下载选项

3. 点击下载选项,使用BurpSuite进行抓包,可以看到下载功能点指向的地址是/template/default/source/auth.php。
4. 转到该文件,查看代码,发现有一个SafeRequest(),转到该函数声明,是一个设置请求方式的函数,函数过滤了一些魔术符号
 
5. auth.php文件的下方存在header设置,将请求回显的数据转化成下载,最后使用readfile()读取file文件内容
 
6. 在文件内查找file的第一次出现,发现是在header的上面,通过geturl的值来确定file的值,转到geturl()声明,geturl()定义了两个参数file和type,type参数默认为空,也就是没有设置类型,file参数使用了正则表达式进行过滤,然后将file与网站地址组合成一个url并返回
7. geturl的file参数为$row['in_audio'],这个就是file的地址,查找row第一次出现的位置,发现出现在auth.php文件的前面,有一个sql执行语句,id变量被传入sql语句,sql语句被传入了getrow()函数,查找该函数的声明,发现有两处声明
8. 分别转到两处声明看一下,都是返回sql执行结果的
 

9.  getrow()将id变量的sql语句执行结果赋值给row,然后从row中取出in_audio,查找谁能够控制in_audio,发现在source\user\music\add.php中可以控制in_audio,转到该文件查看,像是上传音乐的地方,打开浏览器看一下

10. 如下图所示,对比一下,确实是网站上传音乐的功能点,这个地方的音频地址可以控制in_audio,控制下载的文件
11. 在template\default\source\1.php\目录下新建一个1.php文件,文件内容写入phpinfo(),尝试一下能不能下载该文件

12. 成功下载到1.php文件。尝试下载`source/system/config.inc.php`文件。将音频地址改为`../../../source/system/config.inc.php`,结果发现被过滤了

13. 再次提交,抓包,看一下提交的时候被传递给了谁,如下所示,传递到了source/user/music/ajax.php,有两个重要的参数ac=edit audio=Sfaty filter,
14. 转到这个文件,找到ac=edit,逐个查看audio的方法,发现checkname()中对file进行了过滤,过滤了./,一旦匹配到关键词直接变为Safety filter

15. 没有过滤`/`,使用绝对路径尝试绕过
16. 如图所示,成功读取到配置文件

   

PHP代码审计——文件操作漏洞的更多相关文章

  1. Java审计之文件操作漏洞

    Java审计之文件操作漏洞篇 0x00 前言 本篇内容打算把Java审计中会遇到的一些文件操作的漏洞,都给叙述一遍.比如一些任意文件上传,文件下载,文件读取,文件删除,这些操作文件的漏洞. 0x01 ...

  2. 安全测试5_服务端的安全漏洞(SQL注入、命令注入、文件操作类)

    前面大致讲解了下客户端的安全漏洞,现在来讲解下服务端的安全漏洞. 1.SQL注入(SQL Injection),是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库 ...

  3. 【代码审计】XIAOCMS_后台database.php页面存在任意文件删除漏洞

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

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

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

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

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

  6. 代码审计-凡诺CMS 2.1文件包含漏洞

    0x01代码审计 后台账号密码: admin admin 安装好了是这样的 漏洞文件:/channel.php if (ism()) { include($dir.$t_mpath.$c_mcmode ...

  7. 2020/1/31 PHP代码审计之文件包含漏洞

    0x00 文件包含简介 文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校检,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意 ...

  8. 【代码审计】大米CMS_V5.5.3 任意文件读取漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  9. 【代码审计】YzmCMS_PHP_v3.6 任意文件删除漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

随机推荐

  1. 2.1 动为进程,静为程序 -进程概论 -《zobolの操作系统学习札记》

    2.1 动为进程,静为程序 -进程概论 目录 2.1 动为进程,静为程序 -进程概论 问1:发明进程的原因? 问2:现在计算机中的进程的定义是什么? 问3:为什么进程跟处理器的联系更密切? 问4:进程 ...

  2. BUUCTF-大白

    大白 使用16进制打开没发现什么异常的,根据提示来看图片可能没有显示完整 将第七位修改为02即可正常查看图片.

  3. python基础知识-day9(库学习)

    1.os学习 1 print(os.name) #获取操作系统 2 print(os.path.exists("D:\soft\python")) #判断路径是否存在 3 prin ...

  4. SAP Web Dynpro - 教程

    SAP Web Dynpro是一种标准的SAP UI技术,用于使用图形工具和与ABAP工作台集成的开发环境来开发Web应用程序. 图形工具的使用减少了实施工作,并有助于维护ABAP工作台中的组件. 本 ...

  5. TopoLVM: 基于LVM的Kubernetes本地持久化方案,容量感知,动态创建PV,轻松使用本地磁盘

    正文 研发测试场景下,一般追求的是一键快速起环境,横向动态复制,一人一套,随起随用,用完即走.作为使用方,其不用关心实际的物理资源是怎样的,环境起在哪里,只要声明自己的使用需求即可.但作为方案构建者以 ...

  6. CF1042E Vasya and Magic Matrix 题解

    题目链接 思路分析 看到题目中 \(n,m \leq 1000\) ,故直接考虑 \(O(n^2)\) 级别做法. 我们先把所有的点按照 \(val\) 值从小到大排序,这样的话二维问题变成序列问题. ...

  7. 什么是好的 API 设计?【eolink翻译】

    对于试图完善其 API 策略的团队来说,良好的 API 设计是一个经常出现的话题. API 设计的重要性相信不需要赘述,精心设计的 API 的好处包括:更好开发人员体验.更快的文档编制以及更高的 AP ...

  8. for循环和while循环dowhile循环

    第四章 循环语句 4.1循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段代码被重复执行的代码被称为循环体语句,当反复执行这个循环体的时候,需要在核实的时候吧循环判断条件修改为fa ...

  9. Java学习第五周

    这周学习了异常与多线程,线程使用 Exception异常的分类: 1.编译时异常:继承自Exception的异常或者其子类,编译阶段就会报错 2.运行时异常:继承自RuntimeException的异 ...

  10. css基础04

    所有浮动都是贴着浮动的.一左一右的话就毫无联系了. 浮动元素和标准流是两个级别了,浮起来了,后面的人会补上空缺的位置,让其他标准流的盒子占有. 很容易形成叠加效果,(蓝色的标准流会上去补上浮动的位置, ...