文件包含漏洞——练习靶场lfi-labs

目录

 

原理

lfi-labs1

lfi-labs2

lfi-labs3

lfi-labs4

lfi-labs5

lfi-lab6


 

原理

文件包含:为了更好地使用代码重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码

原因:在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞。通常文件包含漏洞出现在PHP语言中。

文件包含函数:

include
include_once     //_once 在于重复调用同一文件时,程序只会调用一次
require
require_once
include和require区别:
发生错误时,include会发出警告后继续执行,而require会直接终止程序
hightlight_file         //读取文件
show_source             //查看文件隐式代码信息
readfile                //读取文件
file_get_contents       //读取文件
fopen                   //读取文件
file                    //读取文件

文件包含漏洞类型:

本地文件包含

远程文件包含:同过url包含文件

两个重要参数:

allow_url_fopen:为on时,能读取远程文件,例如:file_get_contents()就能读远程文件
allow_url_include:为on时,就可使用include和require等方式包含远程文件 

文件包含漏洞地利用方式——伪协议

协议php版本要求allow_url_fopenallow_url_include用法
file://>=5.2off/onoff/on?file=file://D:/soft/phpStudy/WWW/phpcode.txt
php://filter>=5.2off/onoff/on?file=php://filter/read=convert.base64-encode/resource=./index.php
php://input>=5.2off/onon?file=php://input [POST DATA] <?php phpinfo()?>
zip://>=5.2off/onoff/on?file=php://D://soft/phpStudy/WWW/file.zip%23phpcode.txt
compress.bzip2://>=5.2off/onoff/on?file=compress.bzip2://D:/soft/phpStudy/WWW/file.bz2或者?file=compress.zlib://.file.bz2
compress.zlib://>=5.2off/onoff/on?file=compress.zlib://D://soft/phpStudy/WWW/file.gz或者?file=compress.zlib://./file.gz
data://>=5.2onon?file=data://text/plain,<?php phpinfo()?>或者?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=或者?file=data:text/plain,<?php phpinfo()?>或者?file=data:text/plain:base64,PD9waHAgcGhwaW5mbygpPz4=
phar://>=5.2off/onoff/on?file=phar://xxx.png/shell.php

 

其他方式:

  • %00截断,“ ”字符,可以注释掉后面地内容

例如:

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

这里文件包含限制了文件格式,只能是.php文件,可以通过%00截断:?file.txt%00

lfi-labs1

查看页面源代码,这个的参数是pagee64d454d6a6f49a588af2593710d429b.png

 查看index.php代码

1e1a4ef960404335ab72b5759c1f4b97.png

并没有进行任何过滤。我们可以通过通过对变量page进行传参,查询想要的文件

例如:82ab657858694944a8e330ca4da2ca01.png

这里查询的是C盘下的flag.txt文件(自己创建的)

lfi-labs2

和lfi-labs1同理,要先确定参数,library

查看源代码:fa02755f61654d44bdb2031cf800a36c.png

源代码显示查询的是includes下的文件,且带有文件后缀.php只能查询php文件。

解决方法:

1.使用相对路径

2.用%00截断,注释掉.php。但是%00截断仅用在php版本低于5.3.4,magic_quotes_gpc=off环境下。

c9c46b29bd2d429e99d27b51f0796793.png

这里查询的c盘下的flag.php文件。

lfi-labs3

试一下2关的方法

c56ade7328414e96b1fb2be3e2c7e8ff.png

题目进行了过滤,查看源代码:

6b2dfbef4dfe4e5ea423806517ee56a8.png

根据源代码了解,对输入的参数进行了判断,参数的后4个字符不能是.php,否则会显示“You are not allowed to see source files!”。

解决办法:

在flag.php后面加"."或者"%00"。

这样substr截取时,截取的时php.或php 而不是.php。而.和 在查询时会被自动剔除(不符合命名规则)

77bc9b3cdf704f29a054a55fd6374f98.png

查看页面源代码(包含文件函数不同):

b8c1c3cc1aff403c9f4982ee2fceea0b.png

lfi-labs4

源代码:

a172b24a36934c978f9e31b22fdbf58f.png

addslashes()函数:返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

单引号(')

双引号(")

反斜杠(\)

NULL

解决方法:

ee939d88d5cc4c55afdfd10e1a3f3290.png

lfi-labs5

源代码:75db7f8567d04a2d86e5e3838b3e466f.png

根据源代码,这题是过滤"../"。

str_replace('../',' ',$_GET['file'])将变量中的"../"用” “替代。

解决方法:

通过双写绕过

例如:"../"双写:”..././“或者”....//“

3bfea9e3a81a467fb54ddb3f30e861ff.png

lfi-lab6

f570f6c34a5543f986f429b48128ad32.png

第六关只是把请求方式换成post而已

bfe1c1bf3e0d4e2ca208434b923bf5e1.png

009541996b5c4b728af04dbab4ceff67.png

后几关同理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值