zoukankan      html  css  js  c++  java
  • 【文件包含技巧拓展】————3、文件包含漏洞(上)

    导语:

    当程序员在编写代码的过程中,由于使用PHP文件包含函数过滤不严,从而导致了文件包含漏洞。在PHP中用于文件包含的函数有四个:

    • require
    • require_once
    • include
    • include_once

    include和require区别主要是include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。

    文件包含漏洞主要的危害有这些:

    • PHP包含漏洞结合上传漏洞;
    • PHP包含读文件;
    • PHP包含写文件;
    • PHP包含日志文件;
    • PHP截断包含;
    • PHP内置伪协议利用。

    这些是文件包含漏洞的常见使用方法,有效的结合能够起到巨大的作用。

    正文

    0x01 包含上传文件

    以DVWA为例演示一下PHP文件包含漏洞,代码如下:

    <?php $file = $_GET['page']; include $file; ?>

    我们可以先利用上传漏洞,上传我们要包含的文件在利用包含漏洞执行代码,来包含我们在../../目录下上传的含有phpinfo()的文本文件,我们发现即使是.txt文件也可以正常解析,这就是文件包含的强大之处。

    0x02 PHP包含读文件

    在PHP中还内置了一些类似于URL中的PHP伪协议,我们可以利用这些伪协议来帮助我们实现更加高级的文件包含功能,常见的PHP伪协议:

    • File:// 访问本地文件系统
    • http:// 访问HTTP(S)网址
    • php:// 访问各个输入/输出流
    • data:// 数据

    通常情况下,当我们去包含PHP源码的时候,源码会被解析我们就都不到源代码了,这时候就可以利用读文件的方式读取到PHP源码,我们可以使用:php://filter/read = convert.base64-encode/resource=xxx.php的方式,将PHP源码以Base64编码的形式读出来:

    我们成功的将PHP源码读了出来,代码还没有解析。

    0x03 PHP包含写文件

    既然能读文件,肯定还能写文件,但是要是想利用包含写文件,必须开启PHP的url_allow_include远程URL功能,但是这个功能经过测试在5.3.0的时候已经用不了了,5.4.0直接废除了,因此在PHP 5.3.0一下版本才能实现。

    利用php://input post提交我们要执行的代码

    直接可以执行系统命令,太可怕了 ~~~ 但是条件很苛刻,需要开启远程加载URL选项,比较难见

    0x04 PHP包含日志

    当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件,思路也比较简单,当我们访问网站时,服务器的日志中都会记录我们的行为,当我们访问链接中包含PHP一句话木马时,也会被记录到日志中

    这时候我们如果知道服务器的日志位置,我们可以去包含这个文件从而拿到shell

    0x05 截断包含

    当PHP源码对于文件包含做出一定过滤的时候:

    <?php if(isset($_GET['page'])){
     include $_GET['page'].'.php';
    }else{ 
     include 'index.php'; 
    } 
    ​​​​​​​?>

    这时,当我们直接包含文件的时候就会爆出错误

    告诉我们文件打开失败,这个时候我们要想办法过滤到后面的.php,我们就可以利用%00截断来绕过过滤

    OK了,成功包含了目标文件,但是这个功能也仅在5.3.0下的版本可用,高于此版本便不行了。

    ?file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.

    (php版本小于5.2.8(?)可以成功

    ?file=../../../../../../../../../boot.ini/………[…]…………

    (php版本小于5.2.8(?)可以成功,只适用windows

    0x06 其他绕过

    我在讲讲其他的绕过方法吧

    dvwa中级难度的包含,这个主要是过滤了远程文件包含和我们目录的跳转,大小写混合输入就可以绕过远程文件包含的过滤
    目录跳转的过滤我们可以构造….//….//xxx.php,方式绕过,由于他只过滤一次,我们可以利用他的过滤动态拼接目录跳转,从而绕过过滤

    成功绕过。

    0x07 防御和安全编码

    接下来我们讲讲如何避免文件包含漏洞,其实只要我们把包含的文件写死,不要利用变量来构造包含的文件,自然就可以避免漏洞的发生,dvwa的high里用的就是没办法包含的源码

    直接将文件写死,只要不是白名单里的这几个文件,一律不执行,很容易就避免了漏洞

    结语

    其实这个漏洞的避免并不难,只要在编写的过程中注意一下代码的编写,过滤好包含的文件就可以避免漏洞的发生,还有PHP文件的安全配置,我们就能避免远程文件包含。

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    数据库主从同步相关问题
    前端使用node.js的http-server开启一个本地服务器
    css中height 100vh的应用场景,动态高度百分比布局,浏览器视区大小单位
    通过浏览器F12开发工具快速获取别的网站前端代码的方法
    vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接
    vue实现验证码倒计时60秒的具体代码
    vue用hbuilderX打包app嵌入h5方式云打包和遇到的问题
    Cookie写不进去问题深入调查 https Secure Cookie
    vue配置手机通过IP访问电脑开发环境
    区块链名词解析:ICO、IFO、IEO和IMO,分别是什么呢?
  • 原文地址:https://www.cnblogs.com/devi1/p/13486351.html
Copyright © 2011-2022 走看看