web / 爆破-1
阿新 • • 發佈:2018-11-19
題目內容:flag就在某六位變數中。
題目
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a )){//正則表示式^匹配一行的開頭,$表示結束。\w表示匹配包括下劃線的任何單詞字元,等價於'[A-Za-z0-9_]'。*號:匹配前面的子表示式零次或多次。
die('ERROR');
}
eval("var_dump($$a);");//var_dump — 列印變數的相關資訊
show_source(__FILE__);//__FILE__當前執行檔案的完整路徑和檔名。
?>
這個程式碼的作用是如果匹配正則表示式/^\w*$/
$$a
$a
是hello,$$a
是六位變數$hello
由於
$a
在函式中,所以函式之外無法訪問。如果要訪問,將hello修改為超全域性變數GLOBALS。在URL後加
?hello=GLOBALS
,將引數hello修改為Globals實際執行語句:
eval("var_dump($$a);")
eval("var_dump($hello);")
eval("var_dump($GLOBALS);")
$GLOBALS的作用:引用全域性作用域中可用的全部變數。就可以匯出所有的變數
這樣就會打印出當前定義的所有變數,也包括 include 的檔案中的變數,flag 也存在在這些變數中。