NSS [SWPUCTF 2021 新生赛]PseudoProtocols

NSS [SWPUCTF 2021 新生赛]PseudoProtocols

先看题目,题目要求我们先找到hint.php。

NSS [SWPUCTF 2021 新生赛]PseudoProtocols_第1张图片

看这个get请求头,我们先用php://filter协议读一波

NSS [SWPUCTF 2021 新生赛]PseudoProtocols_第2张图片

得到提示,让我们前往/test2222222222222.php

NSS [SWPUCTF 2021 新生赛]PseudoProtocols_第3张图片

源码如下

NSS [SWPUCTF 2021 新生赛]PseudoProtocols_第4张图片


ini_set("max_execution_time", "180");
show_source(__FILE__);
include('flag.php');
$a= $_GET["a"];
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){
    echo "success\n";
    echo $flag;
}
?>

代码分析:
ini_set("max_execution_time", "180");

将PHP脚本的最大执行时间设置为180秒。

if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag')

如果“a”变量被设置,并且读取“a”变量的【文件】内容等于“I want flag”,则输出“success”和flag的值。

接下来有两种解法

1、php://input

此方法需要条件,即开启allow_url_include=On。

实际上这相当于一个远程包含的利用。

php://打开文件流后,我们直接在流里面写入我们的恶意代码,此时包含既可执行代码。

?a=php://input
 
// 然后在POST里传入I want flag,则成功读取Flag

2、data://

data://本身是数据流封装器,其原理和用法跟php://input类似,但是是发送GET请求参数。

?a=data://text/plain,I want flag

data协议:data协议是一种特殊的URL协议,可以将数据直接嵌入到URL中,而无需使用外部文件或数据源。data协议的语法如下:

data:[][;base64],;前两个变量可以不要

HASKELL

具体用法就如下payload

payload=?a=data://text/666,I want flag
//正确用法text/后面跟的是plain我这里用的666,但flag也出来了。

NSS [SWPUCTF 2021 新生赛]PseudoProtocols_第5张图片

你可能感兴趣的:(CTF-web(零散wp合集),1024程序员节,PHP,伪协议)