unset(MOCTF)

題目直接給出了源碼
在這裏插入圖片描述

  1. waf
    在這裏插入圖片描述
    我們看到waf函數使得變量a中不得出現‘flag’,但預計flag存在於flag.php當中,出現了矛盾。

  2. foreach函數
    foreach函數是php中對於數組進行處理的常用函數。
    foreach (array_expression as $value)
      statement
      foreach (array_expression as $key => $value)
       statement
       在這裏插入圖片描述
    有幾點需要注意的,首先是if()中的內容,兩個符號表示括號中的內容其實不是_post,_get和_cookie而是_post,_get和_cookie中的內容,在確保有效傳入值後會進入下一個foreach中。
    在下一個foreach當中如果_post,_get和_cookie的key值的值及value值相同的話,會把key值的值直接消除掉,也就爲我們繞過waf提供了條件。

  3. extract
    在這裏插入圖片描述
    extract的對象內的鍵名會成爲一個新的變量,而這個新變量的值就是這個鍵名的值,後面的參數EXTR_SKIP避免了變量覆蓋。extract函數會恢復我們unset的值,這樣便可以實現對waf的完全繞過。

  4. 實現
    題目需要我們傳入三個值,分別爲flag,daiker和file,其中file是需要對waf進行繞過的,這裏到了解決問題的關鍵,首先我們修改url爲:http://119.23.73.3:5101/index.php?flag=s878926199a&daiker=s155964671a&file=php://filter/read=convert.base64-encode/resource=flag.php (其中flag和daiker不能相同,但flag和daiker的md5值需要相等,注意到判斷md5值時使用了==的方式,可以利用php的弱類型判斷。file利用php://filter僞協議進行讀取)
    然後,我們還需要post一系列數據,payload:_GET[flag]=s878926199a&_GET[daiker]=s155964671a&_GET[file]=php://filter/read=convert.base64-encode/resource=flag.php。此時我們對情況進行分析在進行_POST的foreach時,_k的值爲_GET[flag],其值的值爲我們在url中get進去的flag的值,這與我們post進去的值相同。unset()起作用,_GET[flag]的值消失,waf失效。
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章