禅知Pro 1.6 前台任意文件读取 | 代码审计
禅知 Pro v1.6 前台任意文件读取 | 代码审计
蝉知专业版是基于蝉知企业门户系统开源版开发,继承了蝉知本身的优秀功能。相对于蝉知开源版增强了商品的属性自定义、属性价格定制、物流跟踪、微信支付、微信登录、手机短信等功能。蝉知专业更加注重企业网站的营销推广。
文件读取漏洞好好分析下。禅知Pro 1.6.1 已经修复了这个漏洞。
首先安装,安装成功,文末分享源码。
接下来开始代码审计,漏洞分析。
路径:D:\wamp\www\test\chanzhiPro1.6.php5\chanzhieps\www\file.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),转载请注明!
禅知Pro 1.6 前台任意文件读取 | 代码审计的更多相关文章
- 蓝凌OA前台任意文件读取漏洞利用
近期CNVD爆出漏洞编号:CNVD-2021-28277,首次公开日期为2021-04-15,蓝凌oa存在多个漏洞,攻击者可利用该漏洞获取服务器控制权.今天挑选一个蓝凌OA前台任意文件读取漏洞进行分析 ...
- Discuz!X 3.4 前台任意文件删除漏洞复现
Discuz!X 3.4 前台任意文件删除漏洞复现 参考链接: http://www.freebuf.com/vuls/149904.html http://www.freebuf.com/artic ...
- feifeicms后台任意文件读取
前台大略看了下,本身内容比较简单,经过“洗礼”后以及没什么问题了,基本上输入都过滤了. 这次审计找到了一个后台的任意文件读取,可以读取数据库配置文件. 在DataAction.class.php文件中 ...
- PHPMailer命令执行及任意文件读取漏洞
今天在thinkphp官网闲逛,无意下载了一套eduaskcms,查看了一下libs目录中居然存在PHPMailer-5.2.13,想起了之前看到的PHPMailer的漏洞,可惜这套CMS只提供了一个 ...
- 应用服务器Glassfish任意文件读取漏洞
catalogue . 前言和技术背景 . Glassfish安装配置 . 漏洞利用 . 漏洞缓解(修复) 1. 前言和技术背景 0x1: GlassFish是什么 GlassFish 是用于构建 J ...
- 安全研究 | Jenkins 任意文件读取漏洞分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...
- python从任意文件读取邮件地址输出的代码
如下的资料是关于python从任意文件读取邮件地址输出的代码. # This script takes whatever you throw at stdin and outputs email ad ...
- 【代码审计】大米CMS_V5.5.3 任意文件读取漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- 【代码审计】XYHCMS V3.5任意文件读取漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
随机推荐
- SQL字符串处理!
一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CHA ...
- 虚拟机VMware显示“内部错误”的解决方法
很有可能是VM服务没有启动,win+R services.msc 进入 “服务”,将VM相关的5个服务全部启动即可.
- Apache HTTP 服务器 2.4(又名httpd)安装\配置 \启动
Apache HTTP 服务器 2.4 源文档
- 锋利的jQuery初学(1)
引包: 1,首先将文件放进项目里面: 2,再在项目里面进行引用jQuery; (书写方式:<script src="jquery-x.xx.1.min.js">< ...
- 爬虫模块介绍--selenium (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)
selenium主要的用途就是控制浏览器,模仿真人操作浏览器的行为 模块安装:pip3 install selenium 需要控制的浏览器 from selenium import webdriver ...
- Centos7.4下安装Jumpserver 1.0.0(支持windows组件)
0)系统环境CentOS 7.4 IP: 192.168.100.10 [root@jumpserver-server ~]# cat /etc/redhat-release CentOS Linux ...
- Linux 开(关) ICMP 回应(防止被ping)
临时生效的办法 关闭回应: [root@host ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all // 客户端测试 ➜ ~ ping 0 ...
- Python每日练习汇总
练习1 2019-3-19# 写一个函数实现99乘法表 def x99(x): if x >=1 and x <=9: line = 1 while line <= x: start ...
- Devexpress之LayoutControl的使用及其控件布局设计
引言 Devexpress给我们提供了更加美观.更加丰富控件,但在学习和使用的同时经常会遇到诸多麻烦.今天在使用Devexpress的LayoutControl控件进行界面控件的布局设计时遇到了如下的 ...
- Dart 语法
Dart 语法 说明 var 类似于JavaScript中的var:最大的不同是Dart中var变量一旦赋值,类型便会确定,则不能再改变其类型 Object Object 是dart所有对象的根基类, ...