Web_Bugku_WriteUp | 變數1

Guanz發表於2024-03-17

題目

分析

<?php  

error_reporting(0);  // 不顯示報錯資訊
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){  // get傳入的args值非空
    $args = $_GET['args'];  // 將傳入的值賦給args
    if(!preg_match("/^\w+$/",$args)){  // 如果args從開頭到結尾匹配到非字母或非數字或非下劃線
        die("args error!");  // 輸出"args error!"並退出指令碼
    }
    eval("var_dump($$args);");  // 將與arge值同名變數的相關資訊作為php程式碼執行
}
?> 

根據程式碼內容能夠獲得的資訊主要有:

  1. 傳入 args 的字串引數只能包含字母數字下劃線。
  2. 以 args 值為變數名的變數被格式化後將作為 php 程式碼被執行後輸出。

顯然我們需要向 arge 傳入一個已經存在的變數以獲得變數內容。


先嚐試輸入 “flag” 但沒有輸出 flag 內容,遂 WP 解法:BugKu 變數1-雨落洛-部落格園


瞭解到 php 存在九大全域性變數,分別是 $_POST $_GET $_FILES $_COOKIE $_SESSION $_REQUEST SERVER $GLOBALS$_ENV。其中 $GLOBALS 是一個包含了全部變數的全域性組合陣列,透過向 args 傳入 GLOBALS 即可獲得包括 flag 的所有變數的名稱及內容。payload:?args=GLOBALS


輸出 flag 的變數名為 ZFkwe3。

參考

BugKu 變數1-雨落洛-部落格園

相關文章