NSSCTF | [SWPUCTF 2021 新生赛]jicao

server/2024/9/22 18:30:32/

https://img-blog.csdnimg.cn/direct/d72b29b0d69e471ca7f450de21ce387d.png" width="1200" />

打开题目,发现高亮显示了一个 php 脚本

https://img-blog.csdnimg.cn/direct/ddf551a7a9bf43d391827c6114c95af2.png" width="1200" />

这是脚本的内容

<?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

https://img-blog.csdnimg.cn/direct/c94a49ce360a4ba9ba2bc00132a3cad5.png" width="1200" />

得到flag

本题完。


http://www.ppmy.cn/server/39224.html

相关文章

Goland开发者软件激活使用教程

Goland开发者工具&#xff1a; Goland是由JetBrains公司推出的专门针对Go语言设计的集成开发环境&#xff08;IDE&#xff09;。这款工具具有智能的代码补全、强大的代码导航和重构功能&#xff0c;同时提供了丰富的调试工具&#xff0c;能够满足Golang开发者的各种需求。 Gol…

汽车EDI:IAC Elmdon EDI 对接指南

近期收到客户C公司的需求&#xff0c;需要与其合作伙伴IAC Elmdon建立EDI连接&#xff0c;本文将主要为大家介绍IAC Elmdon EDI 对接指南&#xff0c;了解EDI项目的对接流程。 项目需求 传输协议&#xff1a;OFTP2 IAC Elmdon 与其供应商之间使用的传输协议为OFTP2。OFTP2是…

【mysql】主从同步时出错,如何恢复同步

mysql主从同步出错&#xff0c;这个时候从服务器会停止同步服务&#xff0c;等待人工恢复&#xff0c;此时有多种方法来解决。 一、查看状态 在从服务器&#xff0c;登陆mysql&#xff0c;查询从服务器的状态&#xff1a; 从服务器mysql> show slave status\G 图1 可以看…

探索利用 LineageLogger 获取hive的字段级血缘关系

apache hive 源码中有 org.apache.hadoop.hive.ql.hooks.LineageLogger 类可以获取 insert hql 的字段之间的关系。但是又由于 org.apache.hadoop.hive.ql.optimizer.Optimizer的原因&#xff0c;使我们重写 hook 类无法实现字段级血缘。 if (hiveConf.getBoolVar(HiveConf.Con…

Python学习——环境搭建

Python 介绍 Python&#xff08;英国发音&#xff1a;/ˈpaɪθən/ 美国发音&#xff1a;/ˈpaɪθɑːn/&#xff09;是一种广泛使用的解释型、高级编程、通用型编程语言&#xff0c;由吉多范罗苏姆创造&#xff0c;第一版发布于1991年。可以视之为一种改良&#xff08;加入…

如何把公章盖在电子档文件上?

将公章盖在电子档文件上&#xff0c;尤其是确保其法律效力和安全性&#xff0c;通常涉及以下步骤&#xff1a; 准备工作 获取合法的电子公章&#xff1a;确保你拥有公司或机构正式授权的电子公章图像&#xff0c;且该图像经过了必要的加密或数字签名处理&#xff0c;以确保其…

Java 变量类型

Java 变量类型 在 Java 语言中&#xff0c;所有的变量在使用前必须声明。 声明变量的基本格式如下&#xff1a; type identifier [ value][, identifier [ value] …] ; 格式说明&#xff1a; type – 数据类型。 identifier – 是变量名&#xff0c;可以使用逗号 , 隔开来…

牛客NC85 拼接所有的字符串产生字典序最小的字符串【中等 排序 Java/Go/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/f1f6a1a1b6f6409b944f869dc8fd3381 思路 排序后直接拼接结果Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…