抄的太多了类型写转载了
原因
include、include_once、require、require_once等函数未被正确、安全地使用
特征
遇到一个网站,后面跟着file=文件名
、filename=文件名
的情况,多半是文件包含
分类
直接粗暴的文件包含
- 想办法找到flag所在的文件,可以先试试
phpinfo.php
之类的文件能不能显示,能的话多半是啥过滤都没加
本地文件包含
- 本地应该是针对于服务器来说的,flag就藏在本来就在服务器上的文件中
- 这种题目的flag会藏在php文件当中,但是因为文件包含在执行文件内容时是不会输出echo、print等函数以外的部分的,因此需要通过php的伪协议来读取文件全部内容,如:
index.php?file=php://filter/convert.base64-encode/resource=index.php
,就可以将index.php文件的内容以base64形式输出 - 例题:CGCTF的文件包含题目
远程文件包含
- 当php的一些权限没有配置好,就可以自己上传一些一句话木马等尝试获取webshell,详见下面的部分
和其他方法联系起来进行攻击
和伪协议联系
文件包含可以和以下的伪协议联系起来进行利用:
1、php://filter
有一些敏感信息会保存在php文件中,如果我们直接利用文件包含去打开一个php文件,php代码是不会显示在页面上的,例如打开data目录下的config.php:
这时候我们可以以base64编码的方式读取指定文件的源码:
输入:php://filter/convert.base64-encode/resource=文件路径
得到config.php加密后的源码:
再进行base64解码,获取到数据库账号等敏感信息:
2、data://
利用data:// 伪协议可以直接达到执行php代码的效果,例如执行phpinfo()函数:
如果此处对特殊字符进行了过滤,我们还可以通过base64编码后再输入:
3、zip:// 执行压缩文件
如果网站允许我们上传压缩文件,我们也可以将php文件压缩后进行上传,再通过zip://协议执行。
以DVWA平台为例,我们将phpinfo.php文件进行压缩后上传:
通过zip://协议执行zip压缩包中的phpinfo.php文件:
4、php://input
利用该方法,我们可以直接写入php文件,输入file=php://input,然后使用burp抓包,写入php代码:
发送报文,可以看到本地生成了一句话木马:
5、伪协议利用条件
伪协议的利用方法还有很多,这里就不一一举例了。
伪协议的用法小结:
和绕过字符过滤的方法联系
https://blog.csdn.net/Vansnc/article/details/82528395
sorry但是不想写了