1. 程式人生 > >關於METINFO5.3漏洞引發的變量覆蓋漏洞

關於METINFO5.3漏洞引發的變量覆蓋漏洞

strong 判斷 value info 使用 說了 include reac 相同

一.$$引起的變量覆蓋漏洞,

技術分享圖片

1、Include 調用了flag.php文件(調用文件還可以有require_once()或者require());
2、$_200,$_403 定義兩個參數,以及參數值。
3、判斷訪問頁面的方法是否為post方法和有沒有參數flag。
4、再接著兩個foreach函數遍歷數組函數,然後再將獲取到的數組鍵名作為變量,數組中的鍵值作為變量的值。
5、還有一個if判斷語句,判斷用post方法傳輸的數據是不是和$flag的值相同,如果相同,輸出flag。
6、最後輸出$_200的內容。

我們可以看到第一個foreach遍歷中,

foreach ($_GET as $key => $value
) $$key = $$value

這裏出現了$$key = $$value,傳入的鍵值$會當做變量,例如,我們傳入_200=flag,經過處理後變成$_200=$flag,則$_200的值被覆蓋為$flag的值。

第二個foreach遍歷,

foreach ($_POST as $key => $value)
    $$key = $value;

出現了$$key = $value;如post方法傳入flag=abc,則處理後變成$flag=abc。這樣就造成將我們需要獲取的flag的值給覆蓋掉了。

所以如果在CTF中獲得flag,我們需要先將$flag的值覆蓋$_200或$_403的值,然後輸出$_200或$_403。

二,Extract()函數引起的變量覆蓋漏洞

該函數使用鍵名當做變量名,鍵值當做變量值,如果有相同的變量名,則默認覆蓋原有的變量值。

技術分享圖片

1、文件將get方法傳輸進來的值通過extrace()函數處理。
2、通過兩個if語句分別判斷是否存在gift變量,和變量gift的值和變量content的值是否相等。變量content的值是通過讀取變量test的值獲取到的。如果兩個變量相等輸出flag。如果不相等,輸出錯誤。

$GET[‘test’]=’a’,處理後$test=a,覆蓋了原來的空,即$test="",此時只需$gift=a,可以實現$gift=$content;成功拿到flag。

三,Parse_str()函數引起的變量覆蓋漏洞

parse_str() 函數用於把查詢字符串解析到變量中,如果沒有array 參數,則由該函數設置的變量將覆蓋已存在的同名變量。 極度不建議 在沒有 array參數的情況下使用此函數,並且在 PHP 7.2 中將廢棄不設置參數的行為。此函數沒有返回值
<?php

       error_reporting(0);

       if (empty($_GET[‘id‘])) 
      {
            show_source(__FILE__);
            die();
      } 
      else 
     {
            include (‘flag.php’);
            $a = “www.OPENCTF.com 
            $id = $_GET[‘id‘];
            @parse_str($id);
            if ($a[0] != ‘QNKCDZO’ && md5($a[0]) == md5(‘QNKCDZO’)) 
           {
                 echo $flag;
           } 
           else 
           {
                 exit(‘其實很簡單其實並不難!’);
           }

       }

?> 
 

[email protected]_str($id)把查詢字符串解析到變量中,沒有使用array選項,若有同名變量,將原來的覆蓋。我們可以用?id=a[0]將原來的$a的值給覆蓋掉。

2.$a[0] != ‘QNKCDZO‘ && md5($a[0]) == md5(‘QNKCDZO‘)判斷$a[0]的值不是QNKCDZO並且$a[0]的MD5值要和QNKCDZO的MD5值相同。

因為主要介紹變量覆蓋,所以接下來的解題方法就不說了。核心思路就是用?id=a[0]=********覆蓋$a的值滿足後續要求。

學習自:https://www.cnblogs.com/bmjoker/p/9025351.html

關於METINFO5.3漏洞引發的變量覆蓋漏洞