《Metasploit渗透测试魔鬼训练营》 之 命令注入

命令注入漏洞就是让WEB应用执行原来没有的命令,该命令可以是操作系统命令,也可能是一段自定义的脚本程序。在《Metasploit渗透测试魔鬼训练营》书中,作者对wordpress插件Zingiri存在的一个命令注入漏洞进行了分析,但对漏洞的成因讲解的不是特别明确。

一、漏洞触发交互过程

《Metasploit渗透测试魔鬼训练营》 之 命令注入_第1张图片在触发漏洞的过程中,用wireshark进行截获数据包,发现该漏洞的触发先后调用了Zingiri插件的四个文件:ajaxfilemanager.php, ajax_file_cut.php, ajax_create_folder.php, ajax_save_name.php

二、关键函数讲解

(一)SessionAction

该类的定义在class.sessionaction.php中,和漏洞相关的两个函数定义如下:

 《Metasploit渗透测试魔鬼训练营》 之 命令注入_第2张图片

其中$selectedDocIndex是该类定义的一个变量,值为 'ajax_selected_doc'

可以看到,sessionaction类的sethget函数是对$_SESSION[‘ajax_selected_doc’]变量的存取功能。

(二)displayArray函数

该函数定义在function.base.php中,如下:

 《Metasploit渗透测试魔鬼训练营》 之 命令注入_第3张图片

该函数是主要是打印传递进来的$array数组。

(三)writeInfo函数

该函数同样定义在function.base.php中,如下:

    《Metasploit渗透测试魔鬼训练营》 之 命令注入_第4张图片

该函数主要功能是将传递进来的$data变量内容写入data.php文件中。

(四)ob_start()ob_get_clean()函数机制

下面通过代码示例说明该函数的作用:

 

将第四行代码注释时,没有输出”Hello World”;将注释去除后,输出”Hello World”。

三、漏洞触发位置

通过wireshark截获的交互过程分析,先后分析了调用的四个文件。发现漏洞触发的关键代码位于ajax_file_cut.phpajax_save_name.php,两个文件关键代码如下所示:

 《Metasploit渗透测试魔鬼训练营》 之 命令注入_第5张图片

ajax_file_cut.php关键代码

 《Metasploit渗透测试魔鬼训练营》 之 命令注入_第6张图片

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文件中。

 

拜了个拜!

你可能感兴趣的:(《Metasploit渗透测试魔鬼训练营》 之 命令注入)