代码审计之任意文件下载漏洞案例分享

0×00概述

继上次审计HDWiki之后,最近拿到一套新的源码Ear_Music_20180510_UTF8最新版进行审计,发现这套cms还是比较安全的,而当我审计遇到一处下载点的时候发现存在安全问题,也就是任意文件下载漏洞,任意文件下载漏洞php最常见的函数就是readfile()这个函数,当里面的参数我们可以控制的话就会存在任意文件下载风险。

0×01 白盒审计

源码信息:Ear_Music_20180510_UTF8

问题文件: \template\default\source\down.php

漏洞类型:任意文件下载

站点地址:http://www.erduo.in/index.php/download/

首先进行安装之后主界面如下;

由于我是习惯跟着功能点走的,个人习惯吧,有些人通读全文,有些人跟踪数据流等,各有各的利弊吧,这个cms发现功能点比较多,各种编辑上传什么的,当审计遇到一个“下载LRC歌词”功能点的时候发现是使用readfile()函数的,具体页面以及代码段如下:

代码段为\template\default\source\down.php

看到readfile()函数了,这里$file参数是通过geturl和getfield两个函数生成的,分别跟进,首先geturl()函数路为/source/system/function_common.php。

getfield()函数从函数名称就能看出来是用来获取数据库信息的所以此处没有写出来,重点看geturl()函数。可以看到通过一些正则来打出最后$file参数不符合正则的时候直接$url即你上传的什么就读取什么,读取下载的时候未作任何过滤操作,好这时候我们就转向上传的地方看看。

具体路径为\source\user\music\ajax.php,这边是歌词上传。

可以看到$lyric就是歌词参数,但是看到有checkrename(),unescape(),SafeRequest()三个函数过滤一个一个看,首先SafeRequest()函数,路径为\source\system\function_common.php。

可以看到有addslashes过滤和’\’替换为空,一般这种替换成空的方法往往存在绕过可能。来看下一个函数unescape(),路径还是上面那个。

可以看到里面还有SafeSql()函数,通过追踪发现也是过滤’\’的,这里就不截图了。

最后来看下最重要的函数checkrename()函数,路径为\source\system\function_common.php。

可以看到这里主要是使用正则来进行过滤,当匹配到”./“,”iframe”,”.php”这3个任何一个的时候直接显示’Safety filter’字段进行过滤,还有上面几个函数是过滤”\”这个的,综合看来由于读取的时候未作任何过滤所以可以通过输入物理路径进行任意文件的下载读取。

0×02 漏洞利用

比如config.inc.php文件的物理路径为:

D:\phpStudy\WWW\Ear_Music_20180510_UTF8\source\system\config.inc.php

由于”\”会被过滤可使用”/“替换绕过,”.php”会被过滤可通过后面加点进行绕过,综合起来最终的payload为:

D:/phpStudy/WWW/Ear_Music_20180510_UTF8/source/system/config.inc.php

首先注册一个账号进去之后到上传音乐页面。

歌词位置填写上面的payload之后保存编辑,然后到待审音乐点击刚上传的音乐。

跳到下面页面之后点击下面的”下载LRC歌词”,即可下载我们的配置文件了。

*本文原创作者:davichi8282,属于FreeBuf漏洞奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

Linux中系统整体性能监控工具详细介绍

 mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。

1172
来自专栏Web项目聚集地

Javascript中的异步

832
来自专栏谭广健的专栏

【小程序-云开发】手把手教你使用云开发(数据库开发)

继上一次程序员哥哥简单开发了一个照片储存小程序后,感觉还是有些小小缺陷,就是没办法对上传照片进行文字描述。因为主要都是文字,如果将文字描述再保...

4.9K1
来自专栏FreeBuf

Angr:一个具有动态符号执行和静态分析的二进制分析工具

什么是angr: angr是一个二进制代码分析工具,能够自动化完成二进制文件的分析,并找出漏洞。在二进制代码中寻找并且利用漏洞是一项非常具有挑战性的工作,它的挑...

6875
来自专栏大内老A

WCF 4.0一个鲜为人知的改变

本篇文章介绍可以算是WCF 4.0基于限流(Throttling)的新特性,是在修订《WCF技术剖析(卷1)》的时候编写演示实例的时候发现的。这个特性没有出现在...

2889
来自专栏公有云大数据平台弹性 MapReduce

EMR上Zeppelin入门

简而言之,就是一个大数据分析平台。用户可以利用提供好的WEB UI,在线编写分析逻辑代码,输出结果,并且能够利用可视化工具,形象生动的在线展示结果。

1871
来自专栏程序员宝库

从零开始写 PHP 扩展

PHP 是用 C 语言写的。对于每个 PHPer 来说,都有着内心的一种希望写扩展的冲动了吧。然而,缺乏一个很好的切入点。Google 上搜 PHP 扩展开发,...

3497
来自专栏北京马哥教育

一万两千字长文,六大问题为你解读计算机

1描述计算机的组成及其功能 电子计算机,亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具 计算机及其组成 计算机是什么       电子计...

37910
来自专栏Kirito的技术分享

深入理解 RPC 之集群篇

上一篇文章分析了服务的注册与发现,这一篇文章着重分析下 RPC 框架都会用到的集群的相关知识。 集群(Cluster)本身并不具备太多知识点,在分布式系统中,...

3819
来自专栏开发 & 算法杂谈

并行化的动态数据竞争验证和检测方法

之前系列提到的动态数据竞争验证和检测方法是结合了验证和检测两部分。这篇文章主要介绍一下并行化的动态数据竞争验证和检测方法。

2334

扫码关注云+社区

领取腾讯云代金券