NSSCTF | [SWPUCTF 2021 新生赛]jicao

打开题目,发现高亮显示了一个 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"}

Hackbarid=wllmNB

得到flag

本题完。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值