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

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

缺陷编号:wooyun-2015-0158178

漏洞标题:全国英语等级考试网两处SQL注入漏洞

相关厂商:全国英语等级考试

漏洞作者: 阿星

提交时间:2015-12-05 00:50

修复时间:2016-01-21 18:22

公开时间:2016-01-21 18:22

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:5

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-12-05: 细节已通知厂商并且等待厂商处理中
2015-12-09: 厂商已经确认,细节仅向厂商公开
2015-12-19: 细节向核心白帽子及相关领域专家公开
2015-12-29: 细节向普通白帽子公开
2016-01-08: 细节向实习白帽子公开
2016-01-21: 细节向公众公开

简要描述:

存在两处sql注射漏洞。

详细说明:

实际开发过程中验证用户输入如果使用SQL语句实现,则代码如下:
string user = txtUser.getText();
string password = txtPassword.getText();
rs = ExuecueQuery("select(FPassword ='"+password+"'") as PwdCorrect from T_User where FUser = '"+user +"'");
if(rs.getBool ("PwdCorrect") == true)
{
ShowMessage("Password Correct");
}
else
{
ShowMessage("Password Wrong");
}
这种采用拼接字符串的方式根据用户输入的用户名和密码来构建SQL语句,如果用户名为“Guest”, 密码为“12345 6”,那么拼接出来的SQL语句如下:
select (FPassword = "123456" ) as PwdCorrect from T_User where FUser = 'Guest'
这看起来似乎是没有任何问题的,但是如果恶意攻击者在用户名输入框中随意输入一个“abc”,在密码数据框中输入“1‘ or '1'='1 ”,那么拼接出来的SQL语句如下:
select (FPassword = '1' or '1' = '1') as PwdCorrect from T_User where FUser = 'abc'
由于 “'1' = '1'”这个表达式永远返回true,而true与任何Bool值得Or运算的结果永远是True。那么无论正确的密码是什么, FPassword = '1' or '1' = '1' 这个计算值都为真,这样恶意攻击者就可以用任何账号登录系统了。这样的漏洞被称为 “SQL注入漏洞(SQL Injection)”。

漏洞证明:

QQ图片20151203192208.png

QQ图片20151204073442.jpg

QQ图片20151204073521.png

QQ图片20151204073538.jpg


http://**.**.**.**/center/news_show.asp?id=781

修复方案:

漏洞修护可上传大马删除漏洞程序,但这站点貌似重要,所以还是不去上马了。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:11

确认时间:2015-12-09 18:43

厂商回复:

CNVD确认并复现所述情况,已由CNVD通过网站管理方公开联系渠道向其邮件通报,由其后续提供解决方案。

最新状态:

2015-12-10:更正处置情况:CNVD确认并复现所述情况,已经转由CNCERT向国家上级信息安全协调机构上报,由其后续协调网站管理单位处置。

2015-12-10:修正:CNVD确认并复现所述情况,已由CNVD通过网站管理方公开联系渠道向其邮件通报,由其后续提供解决方案。