變量覆蓋漏洞
經(jīng)常引發(fā)變量覆蓋漏洞的函數(shù)有:extract(),parsestr()和importrequestvariables()和$$(可變變量)
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了施甸免費(fèi)建站歡迎大家使用!
$$可變變量引起的變量覆蓋漏洞
一、我們先來(lái)查看源代碼進(jìn)行分析
1、Include 調(diào)用了flag.php文件
2、$_200,$403 定義兩個(gè)參數(shù),以及參數(shù)值。
3、接著是兩個(gè)判斷語(yǔ)句,判斷訪問(wèn)頁(yè)面的方法是否為post方法和有沒(méi)有參數(shù)flag。
4、再接著兩個(gè)foreach函數(shù)遍歷數(shù)組函數(shù),這里就是把我們用get方法傳輸?shù)臄?shù)據(jù)當(dāng)做數(shù)組進(jìn)行遍歷,并將遍歷的參數(shù)賦值給key,將參數(shù)值復(fù)制給value。
5、還有一個(gè)if判斷語(yǔ)句,判斷用post方法傳輸?shù)臄?shù)據(jù)是不是和$flag的值相同,如果相同,輸出flag。
6、最后輸出$200的內(nèi)容。
二、從源碼文件中可以看出,要想獲得flag,你必須知道原來(lái)的flag,那是不可能的。
這個(gè)時(shí)候我們就可以利用變量覆蓋漏洞。
1、我們可以看到在第一個(gè)數(shù)組
foreach ($_GET as $key => $value)
$$key = $$value
這個(gè)遍歷中出現(xiàn)$$key = $$value,這里將鍵和值又當(dāng)做變量來(lái)使用。就這個(gè)題目來(lái)說(shuō),我們用get方法傳遞:_200=flag,經(jīng)過(guò)$$key = $$value的處理后,就會(huì)變?yōu)?_200=$flag,這樣就會(huì)將原來(lái)的$_200的值覆蓋掉,換成$flag的值
3、第二個(gè)數(shù)組遍歷
foreach ($_POST as $key => $value)
$$key = $value;
這個(gè)遍歷中出現(xiàn)$$key = $value,這里將只是將數(shù)組鍵當(dāng)做下一個(gè)變量,將數(shù)組的值當(dāng)做這個(gè)$$key的值。例如post方法傳入flag=abc,則處理后變成$flag=abc。這樣就造成將我們需要獲取的flag的值給覆蓋掉了。
三、通過(guò)多重分析,我們可先將$flag的值通過(guò)第一個(gè)數(shù)組遍歷賦值給$_200,然后通過(guò)die($_200)輸出出來(lái),不過(guò)同時(shí)我們應(yīng)該滿足源碼的判斷條件,通過(guò)post方法傳遞flag的值。這里我們已經(jīng)將flag的值給了$_200所以不用再擔(dān)心將flag的值覆蓋掉,可以隨便輸入。
四、所以我們的payload是:
Get方法傳輸:?_200=flag
Post方法傳輸:flag=abcde
五、驗(yàn)證結(jié)果:
因?yàn)槭菑?fù)現(xiàn)題目,flag有所差別。