打開題目,發現高亮顯示了一個 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
本題完。