打开题目,发现高亮显示了一个 php 脚本
这是脚本的内容
<?php
highlight_file('index.php');
include("flag.php");
$id=$_POST['id'];
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
?>
这段PHP脚本的核心功能是用来接收提交的数据,并在满足特定条件时返回一些敏感信息(如flag)。下面是逐行分析:
第1行:加载当前脚本的源码
highlight_file('index.php');
这行调用 highlight_file
函数,作用是将 index.php
文件的内容以高亮语法显示在浏览器上。这通常用于帮助理解代码逻辑或用于教学目的。
第2行:包含外部文件
include("flag.php");
这行代码使用 include
函数引入一个名为 flag.php
的文件。我们可以假设这个文件定义了一个名为 $flag
的变量,该变量存储着需要被保护并在满足特定条件下才显示的信息(通常在CTF(Capture The Flag)比赛中,这种信息称为“flag”,为参赛者需要获取的目标)。
第3行:获取POST请求中的id
值
$id=$_POST['id'];
这行代码从HTTP POST请求中获取名为 id
的参数,并将其值存储在 $id
变量中。POST请求用于提交数据给服务器,例如填写表单。
第4行:解析GET请求中的json
参数为PHP数组
$json=json_decode($_GET['json'],true);
这行代码取自HTTP GET请求中名为json
的参数,尝试将其作为JSON字符串解析成PHP数组,并赋值给$json
变量。true
参数确保解析后的结果是关联数组形式。
第5-6行:条件判断并返回结果
if ($id=="wllmNB"&&$json['x']=="wllm")
{
echo $flag;
}
这个条件判断检查两个条件是否同时满足:
$id
变量的值是否等于“wllmNB”。$json
数组中键为x
的值是否等于“wllm”。
如果上述两个条件同时满足,那么脚本会输出$flag
变量的内容。
总结
整个脚本的逻辑是:首先展示index.php
的源代码,然后检查从用户提交的数据中是否包含特定的id
值和JSON字符串。如果这些用户输入的数据符合特定条件,则返回一个所谓的“flag”。
所以,当一个HTTP请求同时满足:
- POST方式提交的
id
参数值为“wllmNB”。 - GET方式提交的
json
参数可以解码为一个包含{"x":"wllm"}
的数组。
则会执行echo $flag;
语句,服务器会返回$flag
变量中存储的信息。
GET请求方式可以直接构造payload,POST请求方式可以使用HackBar这个浏览器插件。
payload:?json={"x":"wllm"}
Hackbar:
id=wllmNB
得到flag
本题完。