1. 程式人生 > >BugkuCTF(2)變數1

BugkuCTF(2)變數1

flag In the variable ! <?php 
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

程式碼審計:檢查原始碼中的缺點和錯誤資訊,分析並找到這些問題引發的安全漏洞 對程式碼進行分析: 第一點:

var_dump():列印變數的相關資訊 正則表達函式:preg_match():用於進行正則表示式匹配,成功返回 1 ,否則返回 0 。

語法:    preg_match (pattern , subject, matches);
			pattern:正則;	
			subject:需要匹配檢索物件;
			match: 可選,儲存匹配結果的陣列,

error_reporting(0);// 關閉錯誤報告 PHP 有諸多錯誤級別,使用erro_reporting()函式可以設定在指令碼執行時的級別。如果沒有設定可選引數 level,error_reporting() 僅會返回當前的錯誤報告級別。 highlight_file()

函式對檔案進行語法高亮顯示。

語法:highlight_file(filename,return)
   			  filename 	必需。要進行高亮處理的 PHP 檔案的路徑。
  			  return 	可選。如果設定 true,則本函式返回高亮處理的程式碼。

第三點

/^\w+/i///i 兩個/ / 表明正則表示式的開始與結束; ^ 表示開始字元,結束字元 \w 包含【a-z,A-Z,,0-9】中的字 符,+代表可以有一個,或多個\w 後面的一個i是不區分大小寫,其實放在這裡沒用了,因為\w包含著 大小寫 總的加起來意思是 以[a-z,A-Z,

,0-9]中的其中一個字元開始,中間可以有任意個[a-z,A-Z,,0-9] 字元,最後再以[a-z,A-Z,,0-9]中的一個字元結束 比如適合的有:a,a09,a_01,001 不適合的有a- 5,@12,¥12,中文字元,這些都不在[a-z,A-Z,_,0-9]範圍裡面 i表示不區分大小寫

對writeup:

?args=GLOBALS

可變變數:兩個$$一個可變變數獲取了一個普通變數的值作為這個可變變數的變數名。 全域性陣列,可以在函式內部呼叫全域性變數,

$GLOBALS[];

$GLOBALS[] 包含正在執行指令碼所有超級全域性變數的引用內容