1. 程式人生 > >drupal7 cve-2018-7600任意程式碼執行利用

drupal7 cve-2018-7600任意程式碼執行利用

Author: [email protected]

對於cve-2018-7600的利用,比較出名的應該是Drupalgeddon2,其中對7的利用是使用了passthru函式執行命令,但是有一個問題便是,你會發現除了能執行命令,好像做不了其他的。下面將剖析這個問題,另外如果disable_functions下將命令函式全部禁用時,又該如何,所以如果能有一個無限制的任意程式碼執行將會更棒。

首先分析一下最終漏洞觸發原因:

includes/common.inc:6084

可以看到exec進入了$function($elements['#children'], $elements);,然後執行了命令,但是這裡面有一個問題就是第二個引數不可控,並且是一個數組,導致沒法執行。

看一下passthru的原型:

void passthru ( string $command [, int &$return_var ] )

第二引數是一個引用型別,傳入什麼都會被改變 (感謝Ph師傅的解答) ,所以不受影響。

當傳入assert去執行程式碼,便就執行失敗,返回的為null

所以需要找一個新的利用,翻了一下drupal的檔案,發現一處挺適合.

includes/common.inc:4677

foreach ($elements['#attached'] as $callback => $options) {
    if (function_exists($callback)) {
      foreach ($elements['#attached'][$callback] as $args) {
        call_user_func_array($callback, $args);
      }
    }
}

首先向#attached注入一段資料.

可以看到最後傳入call_user_func_array裡面的資料是比較乾淨的.

最後驗證: