• 禅知Pro 1.6 前台任意文件读取 | 代码审计


    禅知 Pro v1.6 前台任意文件读取 | 代码审计

    蝉知专业版是基于蝉知企业门户系统开源版开发,继承了蝉知本身的优秀功能。相对于蝉知开源版增强了商品的属性自定义、属性价格定制、物流跟踪、微信支付、微信登录、手机短信等功能。蝉知专业更加注重企业网站的营销推广。

    文件读取漏洞好好分析下。禅知Pro 1.6.1 已经修复了这个漏洞。

    首先安装,安装成功,文末分享源码。

    接下来开始代码审计,漏洞分析。

    路径:D:wampwww	estchanzhiPro1.6.php5chanzhiepswwwfile.php

    首先是初始化了一些配置,定义我们传进来的参数。

    第19行,dirname() 函数返回路径中的目录部分。rtrim() 函数移除字符串右侧的空白字符或其他预定义字符。

    $dataRoot 是我们可读取文件的路径

    接着走到了 21--32 行,可以看到这段代码中我们可控的参数有 $objectType 和 $pathname 

    $objectType 传入字符串 source 或者 slide 后,$savePath = $dataRoot  ,$dataRoot 会赋值给 $savePath

    接下来跳出 if 判断语句,$realPath = $savePath . $pathname; 传入的 $savePath . $pathname 拼接给了 $realPath

    再接着往下看,33--56行

    判断 $realPath 是否存在,然后再经过 php 的三元运算。把 $realPath 变量再次赋值给 $filePath ;

    strpos() 函数查找字符串在另一字符串中第一次出现的位置。

    接着又是一些判断,直接来看第53行。

    来到 $mime 这里,进入 getMimetype() 函数

    这个函数特别长,从125行到最后。函数定义了 http mime 头,这里没什么要分析的,接着上面的往下分析

    在代码开头第14行,$objectType 变量被定义为$_GET['o'] ,

    在代码开头第16行,$extension 变量被定义为$_GET['t'] ,

    我们读文件的话自然以txt的格式读。

    然后再接着往下走,走到了第56行。fopen() 函数打开文件或者 URL。

    fopen() 函数直接读取了我们的文件路径。到这里就够了,就可以直接读取文件了。下面的57行--123行是对 $handle 和 $mime 做一些判断和操作。就不分析了。

    这里我们直接构造文件读取的 payload :

    http://127.0.0.1/chanzhiPro1.6.php5/chanzhieps/www/file.php?pathname=../file.php&t=txt&o=source

    读取 system/config/config.php

    http://127.0.0.1/test/chanzhiPro1.6.php5/chanzhieps/www/file.php?pathname=../../system/config/config.php&t=txt&o=source

    数据库的账号密码在 system/config/my.php 文件里,所以读取下数据库账号密码。

    http://127.0.0.1/test/chanzhiPro1.6.php5/chanzhieps/www/file.php?pathname=../../system/config/my.php&t=txt&o=source

    至此,任意文件读取漏洞分析结束!

    漏洞修复:

    在最新版拼接路径处加入 realpath() 函数去除目录跳跃的操作

    并使用 strpos() 函数判断我们传入的路径 $realPath 是否在可读取的路径 $dataRoot

    源码分享(链接: https://pan.baidu.com/s/1X-9zfSZk05B0OTvJoUytKA 密码: w5tp)

    本文链接(http://www.cnblogs.com/Oran9e/p/9055004.html),转载请注明!

  • 相关阅读:
    查找mysql数据库中所有包含特定名字的字段所在的表
    redis在windows下安装和PHP中使用
    CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境
    telnet: connect to address 127.0.0.1: Connection refused
    [Java]局域网五子棋
    springboot-web进阶(三)——统一异常处理
    springboot-web进阶(二)——AOP统一处理请求
    springboot-web进阶(一)——表单验证
    springboot快速入门(五)——事务管理
    springboot快速入门(四)——数据库操作
  • 原文地址:https://www.cnblogs.com/Oran9e/p/9055004.html
Copyright © 2020-2023  润新知