您的位置:首页 > 编程语言 > ASP

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

2015-10-07 12:55 417 查看
命令注入漏洞就是让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类的seth和get函数是对$_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.php、ajax_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文件中。

拜了个拜!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: