• PHP代码审计——文件操作漏洞


    梦想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文件,如下所示,文件被成功删除
    1
    http://localhost:8081/admin.php?m=backdb&a=delbackdb&filename=../../test.txt

     


    7. 若网站的install目录在完成安装后没有删除,则利用该文件删除漏洞删除install目录下的install_ok.txt文件,则可实现对网站的重新覆盖安装

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

    1. php文件读取的函数
    1
    2
    3
    4
    5
    6
    7
    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,访问一下看拼接的是什么
    1
    admin.php?m=template&a=editfile&dir=1
     

    6. 如下所示,拼接的是E:/phpstudy/phpstudy_pro/WWW/localhost/lmxcms1.4/template/,也就是模板文件所在的目录
     

    7. 尝试一下读取网站配置文件,如下所示,成功读取到配置文件
    1
    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. 如图所示,成功读取到配置文件

     

       

    __EOF__

  • 本文作者: Security菜鸟
  • 本文链接: https://www.cnblogs.com/SecurityHacker/p/16652065.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    中间件 | Redis - [安装 & 基本信息]
    php练习06
    代码随想录算法训练营第四十四天丨 动态规划part07
    【PHP实现微信公众平台开发—基础篇】第2章 微信公众账号及申请流程详解
    【Verilog基础】【总线协议】AXI、AHB、APB总线对比
    NX二次开发UF_CAM_ask_tool_matl_db_object 函数介绍
    C语言文件操作
    简单聊聊copy on write(写时复制)技术
    统一异常的处理方法
    AI在创造还是毁掉音乐?
  • 原文地址:https://www.cnblogs.com/SecurityHacker/p/16652065.html