• 2020/2/1 PHP代码审计之任意文件读取及删除漏洞


    在开始学习之前先简单记录一下自己现在的思路吧。。现在接触的基本都是无防护的漏洞也就是最简单的一些漏洞。我的想法就是以代审思路为主,之前一直在打CTF,白盒的思维我觉得和CTF这种黑盒有很大区别。自己的思考方式应该在某处转变。
    在实际中,真正的业务也是基于这种最简单的功能,无非是给他穿了很多层衣服,而我们在审计时要做的就是去掉他的保护,脱掉他的衣服。

    0x00 任意文件读取

    通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件,正常读取的文件没有经过校验或者不合格,用户可以控制这个变量读取任意文件。

    思路可以参考前面的文件包含,目录穿越等文件操作,区别就是我们使用的函数不同,要学会举一反三嘛。

    0x01 文件读取-漏洞危害

    任意文件读取漏洞,是Web安全里高位的漏洞,它可以泄露源码,数据库配置文件等等,导致网站处于极度不安全的状态。

    漏洞验证:

    Index.php?f=../../../../../../../../etc/passwd Index.php?f=../index.php
    Index.php?f=file:///etc/passwd

    参数f的参数值为PHP文件时:
    1.文件被解析,则是文件包含漏洞     
    2.显示源代码,则是文件查看漏洞   
    3.提示下载,则是文件下载漏洞

    0x02 文件读取挖掘经验

    fopen()
    file_get_contents()
    fread
    fgets
    fgetss
    file
    fpassthru
    parse_ini_file
    readfile

    allow_url_fopen选项激活了URL形式的fopen封装协议使得可以访问URL对象例如文件。默认的封装协议提供用ftp和http协议来访问远程文件,一些扩展库例如zlib可能会注册更多的封装协议。

    0x03 文件读取代码

    <?php
       
       $filename = $_GET['file'];
       if(isset($filename)){
           readfile($filename);
       }
    ?>
    
    <?php
    $filename=”test.txt”;
    Echo fiile_get_contents($filename);
    ?>
    

    漏洞之所以会发生是因为攻击者可以将路径遍历序列放入文件夹内,从当前位置向上回溯,从而浏览整个浏览器的任何文件。

    0x04 任意文件删除

    攻击者从寻找删除的功能,正常删除功能的文件没有经过校验或者不严格,攻击者控制这个可操作的变量配合目录遍历进行删除其他文件。

    0x05 代码

    unlink()函数

    <?php
    header(string "Content-type:text/html;charset=utf-8");
    $filename = $_GET['file'];
    if(file_exists($filename)){
        unlink($filename);
        echo "<script>alert("删除成功")</script>";
    }else{
        echo "<script>alert("删除失败")</script>";
    }
    ?>
    

    上述没有任何防护,我们可以删除任意敏感文件
    例如:

    ./config/admin.php
    

    0x06 修复方案

    过滤 . 点,使用户在url中不能回溯上级目录
    正则严格判断用户输入的参数
    php.ini配置open_basedir限定文件访问范围

  • 相关阅读:
    【未完成】【oracle】add_months与add_days
    【java】[null]的问题
    PID控制算法研究
    matlab函数:residue和residuez的用法
    Windows入门基础:2.vs2013中Icon显示
    关于for()循环使用过程中遇到的问题(俄罗斯方块游戏中遇到的问题)
    Windows入门基础:1.关于CreateWindow()函数使用中遇到的问题
    error C4996: 'swprintf': swprintf has been changed to conform with the ISO C standard,set _CRT_NON_CONFORMING_SWPRINT
    QT5.3.2与VS2013 fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突_(解决方案)
    Java如何访问private变量
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/12247820.html
Copyright © 2020-2023  润新知