【ctf】文件包含漏洞(一)

文件包含
开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含

文件包含漏洞
开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞

相关函数:
include()
include_once()
require()
require_once()

include()函数当遇到错误的信息时,会进行报错,但仍然会继续执行下面的代码
include_once()函数与include()函数功能类似,但所包含的信息只执行一次
require()函数当遇到错误的信息时,会进行报错,并且不会再继续执行下面的代码
require_once()函数与require()函数功能类似,但所包含的信息只执行一次

这里我们进行测试:

先将两个文件写好
在这里插入图片描述
在这里插入图片描述
这里发现phpinfo.php中的代码被运行两次,对应代码被包含的次数
在这里插入图片描述
这里可以看出include()函数和include_once()函数的区别:
include()函数只能包含一次

在这里插入图片描述
这里可以看到,当包含的文件不存在时,include()函数会报错,但仍然会继续运行下面的代码
在这里插入图片描述
在这里我们可以看出include()函数与require()函数的区别:
当包含文件不存在时,require()函数会报错,也不会继续运行下面的代码了

在这里插入图片描述

包含的实现:
包含的时候,并不一定去包含php文件
类似于文件1.phps、1.xxx、1.txt等等
只要内容中有php代码,则可以直接包含并解析执行
如果不能解析代码,则会在页面返回源代码
在这里插入图片描述
远程包含比较危险,使用的需要开启许多条件,一般不会开启
在这里插入图片描述
在这里插入图片描述

这里我们拿一题bugku的题目进行讲解:
http://114.67.246.176:10978
打开页面
在这里插入图片描述
发现file可控
在这里插入图片描述
打开网页源代码发现upload.php
在这里插入图片描述
打开发现是文件上传,且可以控制file,那么考虑文件包含
发现有文件后缀的校验,之前提到过
在这里插入图片描述
直接上马,将后缀改为.jpg
在这里插入图片描述
打开发现:
在这里插入图片描述
之前提到过,如果内容可以解析则解析并执行代码,如果内容不能解析则返回源码
这里看到,返回了_ eval(@$_POST['a']); _
考虑后端可能进行了过滤
试一下script的马
在这里插入图片描述
执行成功,使用蚁🗡连接,已经可以拿到flag
在这里插入图片描述

这里我们查看一下源码,为什么不能使用<?php eval(@$_POST['a']); ?> 来连接?
在这里插入图片描述
这里看出,将<?php ?> 替换成了 _ ,我们才看到之前的_ eval(@$_POST['a']); _

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值