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

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

缺陷编号:wooyun-2014-088669

漏洞标题:某政府网站公开信息导致可爆破出公民姓名和身份证号码

相关厂商:cncert国家互联网应急中心

漏洞作者: 路人甲

提交时间:2014-12-26 18:18

修复时间:2015-02-09 18:20

公开时间:2015-02-09 18:20

漏洞类型:重要敏感信息泄露

危害等级:低

自评Rank:1

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

姓名是可以直接看到的,对应的身份证号码需要进行20-40次爆破,对该网站是没什么影响的,但是在某些通过姓名和身份证号码验证用户的网站就可能导致这70W+用户的账号被盗什么的。

详细说明:

我本来只是在上网查快递,然后百度就给我推荐了个网站。
http://shixin.court.gov.cn
在该网站上有大量公民姓名和身份证号码等信息,但是身份证号码都是打码的。
http://shixin.court.gov.cn/personMore.do

1.png


共709252条。
在以下网址可以直接看到姓名和打码后的身份证号码。
http://shixin.court.gov.cn/detail?id=921384

2.png


身份证号码的出生日月被打码了,但是校检位没有打码,通过校检位对出生日月进行爆破,得到可能的出生日月,一般有20-40个可能结果。
需要进一步结合其它信息泄露或者在某些通过姓名和身份证号码验证用户的网站进行爆破。
例如: WooYun: 学信网验证不足导致未注册学生个人信息可被盗取

漏洞证明:

例如这个打码后的身份证号码:6101031970****2512
通过校检位得到出生日月35个可能结果,对应着35个身份证号码。通过在某网站进行爆破我们最终得知他的生日是十月四日。

#include <string>
#include <sstream>
#include <iostream>
using namespace std;
std::stringstream ss;
string source="6101031970****2512";
char xishu_source[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char mod_source[11]={'1','0','X','9','8','7','6','5','4','3','2'};
int temp_int=0,xishu=0,all=0,mod_int=0;
bool check()
{
for(int i=0;i<17;i++)
{
all +=source[i]*xishu_source[i];
}
temp_int=0;
mod_int=all %11;
all=0;
if(mod_source[mod_int]==source[17])
{
mod_int=0;
return true;
}else{
mod_int=0;
return false;
}
}
void main(int argc, char* argv[])
{
source[10]='0';
source[11]='1';
source[12]='0';
source[13]='1';
for(int i=0;i<17;i++)
{
ss<<source[i];
ss>>temp_int;
ss.clear();
ss.str("");
source[i]=temp_int;
}
char source_10[12]={0,0,0,0,0,0,0,0,0,1,1,1};
char source_11[12]={1,2,3,4,5,6,7,8,9,0,1,2};
char source_12[31]={0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3};
char source_13[31]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1};
for(int m=0;m<12;m++)
{
for(int d=0;d<31;d++)
{
source[10]=source_10[m];
source[11]=source_11[m];
source[12]=source_12[d];
source[13]=source_13[d];
if(check())
{
cout<<m+1<<"月"<<d+1<<"日"<<endl;
}
}
}
system("pause");
}


3.png

修复方案:

校检位打码

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:3

确认时间:2014-12-29 14:45

厂商回复:

CNVD认定所述情况非漏洞,暂不列入处置流程。

最新状态:

暂无