一.首先看到这些php代码后,第一步便是审计,理解它需要我们干些什么。
代码审计:
-
highlight_file('index.php');
这行代码调用highlight_file()
函数,它用于高亮显示index.php
文件的内容。这通常是用于调试或展示代码用的,它不会影响代码的执行。不过,直接在生产环境中这样做通常不是一个好习惯,因为它可能会暴露敏感信息。 -
include("flag.php");
这行代码包含了一个名为flag.php
的文件。这个文件通常会包含一些敏感信息,比如一个标志(flag),它可能用于验证或其他目的。包含这个文件之前,代码会检查一些条件。 -
$id=$_POST['id'];
这行代码从POST
请求中获取一个名为id
的变量,并将其存储在$id
变量中。 -
$json=json_decode($_GET['json'],true);
这行代码从GET
请求中获取一个名为json
的变量,并尝试将其解码为JSON对象。json_decode
函数的第二个参数设置为true
意味着解码后的JSON将被转换为关联数组。 -
if ($id=="wllmNB"&&$json['x']=="wllm")
这是一个条件判断,检查两个条件是否同时满足:$id
的值是否等于"wllmNB"
。$json
数组中'x'
键的值是否等于"wllm"
。
这两个条件都是硬编码在代码中的,这意味着为了使条件成立,必须通过HTTP请求POST一个名为
id
且值为"wllmNB"
的变量,以及GET一个名为json
且包含键'x'
值为"wllm"
的JSON编码字符串。 -
{echo $flag;}
如果上面的条件都满足,则输出变量$flag
的值。但是,这段代码中没有显示$flag
是如何被设置的。如果flag.php
文件中的某个地方设置了$flag
,那么这个值就会被输出。
二.理解代码后便可按照他的要求来使条件成立,以便得出我们想要的flag.
题目这两个条件都是硬编码在代码中的,这意味着为了使条件成立,必须通过HTTP请求POST一个名为id
且值为"wllmNB"
的变量,以及GET一个名为json
且包含键'x'
值为"wllm"
的JSON编码字符串。
解题方法:
用post方式传参 id=wllmNB
用get方式传一个名为json
且包含键'x'
值为"wllm"
的JSON编码字符串。(?json={"x":"wllm"})
---{"x":"wllm"}
是一个JSON格式的数据对象,它包含一个键x
和对应的值"wllm"
。---
得到flag
NSSCTF{ef9462cd-7c8d-4350-a501-ff2df001b8e8}