1. 程式人生 > >web / 爆破-1

web / 爆破-1

題目內容: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 也存在在這些變數中。

參考:PHP 全域性變數 - 超全域性變數
 超全域性變數
$GLOBALS
百度杯-二月場(Misc-Web)爆破-1

轉載自簡書:https://www.jianshu.com/p/f7055d3f3bb0