話不多說直接上**:
使用foreach來遍歷陣列中的值,然後再將獲取到的陣列鍵名作為變數,陣列中的鍵值作為變數的值。因此就產生了變數覆蓋漏洞。請求?name=test 會將$name的值覆蓋,變為test。
1.<?php
2.//?name=test
3.//output:string(4) 「name」 string(4) 「test」 string(4) 「test」 test
4.$name=』thinking』;
5.foreach ($_get as $key => $value)
6. $$key = $value;
7. var_dump($key);
8. var_dump($value);
9. var_dump($$key);
10.echo $name;
11.?>
ctf中$$導致的變數覆蓋問題的例題1:
題目原始碼:
1.<?php
2.include 「flag.php」;
3.$_403 = 「access denied」;
4.$_200 = 「welcome admin」;
5.if ($_server["request_method"] != 「post」)
6. die(「bugsbunnyctf is here :p…」);
7.if ( !isset($_post["flag"]) )
8. die($_403);
9.foreach ($_get as $key => $value)
10. $$key = $$value;
11.foreach ($_post as $key => $value)
12. $$key = $value;
13.if ( $_post["flag"] !== $flag )
14. die($_403);
15.echo 「this is your flag : 「. $flag . 「\n」;
16.die($_200);
17.?>
**分析:
1、include 呼叫了flag.php檔案
2、_200,_403 定義兩個引數,以及引數值。
3、接著是兩個判斷語句,判斷訪問頁面的方法是否為post方法和有沒有引數flag。
4、再接著兩個foreach函式遍歷陣列函式,這裡就是把我們用get方法傳輸的資料當做陣列進行遍歷,並將遍歷的引數賦值給key,將引數值複製給value。
5、還有乙個if判斷語句,判斷用post方法傳輸的資料是不是和$flag的值相同,如果相同,輸出flag。
6、最後輸出$200的內容。
二、從原始碼檔案中可以看出,要想獲得flag,你必須知道原來的flag,那是不可能的。
這個時候我們就可以利用變數覆蓋漏洞。
1、我們可以看到在第乙個陣列
foreach ($_get as $key => $value)
$$key = $$value
這個遍歷**現$$key = $$value
,這裡將鍵和值又當做變數來使用。就這個題目來說,我們用get方法傳遞:_200=flag,經過$$key = $$value
的處理後,就會變為$_200=$flag
,這樣就會將原來的$_200
的值覆蓋掉,換成$flag的值
3、第二個陣列遍歷
foreach ($_post as $key => $value)
$$key = $value;
這個遍歷**現$$key = $value
,這裡將只是將陣列鍵當做下乙個變數,將陣列的值當做這個$$key
的值。例如post方法傳入flag=abc,則處理後變成$flag=abc。這樣就造成將我們需要獲取的flag的值給覆蓋掉了。
三、通過多重分析,我們可先將$flag
的值通過第乙個陣列遍歷賦值給$_200
,然後通過die($_200)
輸出出來,不過同時我們應該滿足原始碼的判斷條件,通過post方法傳遞flag的值。這裡我們已經將flag的值給了$_200所以不用再擔心將flag的值覆蓋掉(即使覆蓋掉了我們輸出的是_200的值),可以隨便輸入。
四、所以我們的payload是:
get方法傳輸:?_200=flag
post方法傳輸:flag=abcde
變數提公升所導致的問題
var tmp new date function f f undefined上面 的原意是,if 塊的外部使用外層的tmp變數,內部使用內層的tmp變數。但是,函式f執行後,輸出結果為undefined,原因在於變數提公升,導致內層的tmp變數覆蓋了外層的tmp變數。let tmp new dat...
linux之alias導致覆蓋提示問題
最近對一些機器進行版本公升級,由於以往公升級是習慣了備份用mv im im.bak然後再解乙個im包出來,而目前這個公升級面臨的是部分檔案的覆蓋,但部分卻也不少,有上百個檔案,在使用用cp rf home im im usr local 出現大量是否覆蓋?於是man cp f,force if an...
php中 變數覆蓋問題
乙個小的知識點。這裡主要是乙個關於 變數覆蓋問題和eval var dump x 中繞過var dump造成命令執行漏洞的分析 我將php 寫在test.php檔案裡了 root kali var www html vi test.php 內容 x get x eval var dump x 可以發...