php文件包含漏洞总结

前言

一:什么是文件包含漏洞?
服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我可以构造这个恶意文件来达到攻击的目的。
漏洞产生的根本原因就是,在通过php的函数引入文件时,没有对传入的文件名经过合理的校验,从而操作了预想 之外的文件(也就是恶意文件)。

二:是不是只有php才有文件包含漏洞?
当然不是的,只是文件包含漏洞比较常出现在PHP中,而且文件包含漏洞在PHP web Application中居多。当然了机会所有的脚本语言都会提供文件包含的功能,只是在JSP,ASP,ASP.NET中非常少见。

三:PHP常见的文件包含函数:

Include()Require()Include_once()Require_once()

文件包含漏洞的类型

本地文件包含漏洞(LFI)
利用条件:
(1):allow_url_fopen=ON
(2):用户可以控制变量
远程文件包含漏洞(RFL)
利用条件:
(1):allow_url_fopen=ON
(2):allow_url_include=ON
(3):用户可以控制变量
当然了,通过在Web中我们是无法知道allow_url_fopen和allow_url_include开启或者关闭的情况的,除非有phpinfo()但是通过经验得知本地文件包含通常是开启的,也就是allow_url_fopen=On的,通常远程文件包含是关闭的,因为从PHP5.2以后开始allow_url_include是默认关闭的,也就是Off,并且很少有人去修改他。

文件包含漏洞的利用方式

  • php://input(接收POST过来的值)
    利用条件:
    allow_url_fopen = ON
    allow_url_include = ON
    php版本小于等于5.3.0
    利用方式:
    php://input
  • php://filter
    利用条件:
    allow_url_fopen= ON
    allow_url_include 不做要求
    利用方式:
    php://filter/read=convert.base64-encode/resource=./robots.txt
    读取经过base64加密后的文件源码,将读取出来的文件内容通过base64解码即可。
    在这里插入图片描述
  • phar://
    利用条件:
    php版本大于等于5.3.0
    利用方式:
    将内容为<?php phpinfo();?>的123.txt文件压缩为123.zip
    phar://绝对路径\123.zip\123.txt
    在这里插入图片描述
  • data:text/plain
    利用条件:
    allow_url_fopen=ON
    allow_url_include=ON
    php版本大于5.2
    利用方式:
    data:text/plain,<?php phpinfo();?>
    data:text/plain,<?php system("whoami");?>
    在这里插入图片描述data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
    这里需要注意的是text/plain后面是;base64,后面接的base64加密后的内容 %2b 是加号 + 的URl编码为%20
    在这里插入图片描述
  • file://
    利用条件:
    对allow_url_fopen和allow_url_include不做要求
    利用方式:
    file://D:/phpStudy/PHPTutorial/WWW/BlueCMS v1.6 sp1/robots.txt
    在这里插入图片描述

总结:

本人目前总结的就这么多,如有不足,还请大家多多指教。

猜你喜欢

转载自blog.csdn.net/cj_Allen/article/details/104515258
今日推荐