drupal7 cve-2018-7600任意程式碼執行利用
阿新 • • 發佈:2018-12-30
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
裡面的資料是比較乾淨的.
最後驗證: