導致的變數覆蓋問題

2021-09-24 05:33:09 字數 2299 閱讀 5474

話不多說直接上**:

使用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 可以發...