《Metasploit滲透測試魔鬼訓練營》 之 命令注入

命令注入漏洞就是讓WEB應用執行原來沒有的命令,該命令可以是操作系統命令,也可能是一段自定義的腳本程序。在《Metasploit滲透測試魔鬼訓練營》書中,作者對wordpress插件Zingiri存在的一個命令注入漏洞進行了分析,但對漏洞的成因講解的不是特別明確。

一、漏洞觸發交互過程

在觸發漏洞的過程中,用wireshark進行截獲數據包,發現該漏洞的觸發先後調用了Zingiri插件的四個文件:ajaxfilemanager.php, ajax_file_cut.php, ajax_create_folder.php, ajax_save_name.php

二、關鍵函數講解

(一)SessionAction

該類的定義在class.sessionaction.php中,和漏洞相關的兩個函數定義如下:

 

其中$selectedDocIndex是該類定義的一個變量,值爲 'ajax_selected_doc'

可以看到,sessionaction類的sethget函數是對$_SESSION[‘ajax_selected_doc’]變量的存取功能。

(二)displayArray函數

該函數定義在function.base.php中,如下:

 

該函數是主要是打印傳遞進來的$array數組。

(三)writeInfo函數

該函數同樣定義在function.base.php中,如下:

    

該函數主要功能是將傳遞進來的$data變量內容寫入data.php文件中。

(四)ob_start()ob_get_clean()函數機制

下面通過代碼示例說明該函數的作用:

 

將第四行代碼註釋時,沒有輸出”Hello World”;將註釋去除後,輸出”Hello World”。

三、漏洞觸發位置

通過wireshark截獲的交互過程分析,先後分析了調用的四個文件。發現漏洞觸發的關鍵代碼位於ajax_file_cut.phpajax_save_name.php,兩個文件關鍵代碼如下所示:

 

ajax_file_cut.php關鍵代碼

 

ajax_save_name.php關鍵代碼

調用ajax_file_cut.php,該腳本通過$sessionAction->set()函數,將$_SESSION[‘ajax_sel

ected_doc’]賦值爲$_POST[‘selectedDoc’],並且沒有對該POST變量做任何限制和校驗。

調用ajax_save_name.php,通過“1”將$_SESSION[‘ajax_selected_doc’]取出,通過“2”“3”將$_SESSION[‘ajax_selected_doc’]輸出到data.php文件中。

由於沒有對$_POST[‘selectedDoc’]做檢查,所以將$_POST[‘selectedDoc’]構造成一個webshell,隨後該webshell會被寫入data.php文件中。

 

拜了個拜!

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章