美文网首页
关于PHP文件包含

关于PHP文件包含

作者: Aluvion | 来源:发表于2018-09-29 00:23 被阅读0次

    菜鸡随笔

    本地文件包含漏洞基础看这里:http://www.freebuf.com/column/148886.html

    (其中phar是个很神奇的协议,能解析很多后缀名,例如

    似乎是因为phar在解析时会自动寻找stub部分

    相关wp https://www.jianshu.com/p/e6adc2fcc705

    http://php.net/manual/en/phar.fileformat.phar.php


    关于文件包含,之前说到过的session和日志就不提了,怎么控制服务端的文件使得我们能够包含get shell也有各种各样的姿势,这里提几个很神奇的操作

    文件包含+phpinfo=getshell(需要条件竞争)

    一张图片解释

    众所周知,在Linux系统下,php会将上传的临时文件放在/tmp目录下,如果不进行移动保存,在php生命周期结束后就会将其删除,而且该临时文件名一般是php和6个随机字符组成的,所以我们一般难以利用

    但是当我们给phpinfo页面上传文件的时候,该临时文件名的会出现在页面中,利用这个点进行条件竞争就有可能直接get shell

    文件包含=getshell?(需要爆破且不太可行)

    链接:https://www.anquanke.com/post/id/153376

    利用自包含,使得php上传后的临时文件得以保留下来

    实测在我的公网VPS上可行,但是在docker上不可行

    不推荐

    利用软链接进行文件读取

    链接:https://xz.aliyun.com/t/2589


    当然,一般来说文件包含都不会那么好用,能够直接get shell,我们利用这个漏洞一般都是使用php://filter伪协议来读取源码进行审计或者读取文件内容的

    对于php://filter,官方解说见这里http://php.net/manual/zh/wrappers.php.php

    不过说的有点散,就让我们自己潜下去看看php实现代码吧,主要代码如下:

    前面关于读写mode的不提,我们从下面开始看,句式类似这样:

    php://filter//resource=文件路径

    后面调用了 php_stream_apply_filter_list 函数,这里传入了用resource的文件路径打开的文件流和过滤器,我们追过去看看:

    这里将过滤器用|分割,然后URL解码一次,句式类似这样:

    php://filter/ (url_decode(过滤器)) | (url_decode(过滤器)) /resource=文件路径

    并依次创建过滤器实例

    跟入 php_stream_filter_create

    这里从已经注册好了的哈希表中查找过滤器工厂,如果查找不到就做一些处理再查找

    那有什么过滤器呢?

    在filters.c中,我所看到的过滤器主要有:

    string.rot13

    string.toupper

    string.tolower

    string.strip_tags

    convert.base64-encode

    convert.base64-decode

    convert.quoted-printable-encode

    convert.quoted-printable-decode

    在实际中,可以使用这些过滤器对流进行编码/解码


    Orz

    相关文章

      网友评论

          本文标题:关于PHP文件包含

          本文链接:https://www.haomeiwen.com/subject/gsqmoftx.html