CTF之web学习记录 -- 文件包含

概述

  后端编程人员一般会把重复使用的函数写到单个文件中,需要使用时再直接调用此文件即可,该过程也就被称为文件包含。文件包含的存在使得开发变得更加灵活和方便,但同时也带了安全问题,导致客户端可以远程调用文件,造成文件包含漏洞。这个漏洞在php中十分常见,其他语言也有。

常见文件包含函数和原理

# php

include()  // 执行到include时才包含文件,找不到文件产生警告,脚本继续执行
require()  // 程序运行就包含文件,找不到文件产生错误,脚本停止

include_once()
require_once()
// 和前面注解一样,_once()后缀表明只会包含一次,已包含则不会再包含

  文件包含漏洞的原理在于用文件包含函数引入的文件,不管其扩展名如何,都会被当作php代码解析,如何无法解析,就会展示其文件内容。

本地文件包含

  本地文件包含,Local File Inclusion,LFI。以下面的php代码为例子,将会展示本地文件包含漏洞的利用。

<?php
    $file = $_GET['file'];
    include $file;
?>

  我们将file的参数设置为../../../../../../../../../flag,其中../代表回退到上一级目录,这里回退多了没关系,到根目录后就不会再走了。所以在网页中输入这样的payload会将根目录下flag文件的内容回显出来。

flag
  但一般php代码不会这么好心,会存在一些限制,大家可以在做题过程中逐渐积累经验,以下面的php代码为例,介绍一些基本的绕过技巧。

<?php
    $file = $_GET['file'];
    include $file.'.php';
?>

  上面的代码会将传进来的file名加上php后缀,所以直接输入flag是无法获取到文件内容,因为本地并不存在flag.php。这里可以用下面的方式进行绕过:

# %00绕过
# 需要 magic_quotes_gpc=off,PHP小于5.3.4有效
?file=../../../../../../../../../flag%00

# 路径长度截断
# Linux 需要文件名长于 4096,Windows 需要长于 256
?file=../../../../../../../../../flag/././././././.[]/./././././.

# 点号截断
# 只适用 Windows,点号需要长于 256
?file=../.
  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值