0x00 磁條基礎知識科普


文中所有內容僅供學習研究使用,用于非法用途者,一切后果自負!

注:文中磁卡沒有特別說明都是指磁條卡,而非IC卡。

磁卡是一種卡片狀的磁性記錄介質,利用磁性載體記錄字符與數字信息,用來標識身份或其它用途。磁條是一層薄薄的由排列定向的鐵性氧化粒子組成的材料(也稱之為顏料)。用樹脂粘合劑嚴密地粘合在一起,并粘合在諸如紙或塑料這樣的非磁基片媒介上。

磁條一般分為高矯頑力(簡稱HiCo)和低矯頑力(簡稱LoCo)兩種。HiCo的磁條磁量大,較難擦除,適用于使用頻率較高的場景,如信用卡。LoCo的磁條磁量小,制作成本低,但缺點就是更容易擦除且壽命較短。

磁感矯頑力:使磁化至技術飽和的永磁體的磁感應強度降低至零所需要的反向磁場強度稱。

讀卡器通常可以兼容HiCo和LoCo兩種磁條,并且HiCo寫卡器一般可以兼容寫入HiCo和LoCo兩種磁卡,而LoCo寫卡器只能寫入LoCo磁卡中。現實生活中的LoCo磁條一般是淺棕色,而HiCo磁條是深黑色。

目前已知磁卡上有三條磁道,常用的是第一磁道和第二磁道。

第一磁道上的信息有兩種格式:格式A,發卡方使用,格式B,如下:

起始標志——1個字符(通常是“%”) 格式代碼=“B”——1個字符(只能使用字母) 主賬號——最多19個字符 字段分隔符——1個字符 國家/地區代碼——三個字符 持卡人姓名——2~26個字符 失效日期或字段分隔符——4個字符或1個字符 服務代碼——3個字符 自由數據——可變,不超過最大記錄長度(79個字符),通常含有PIN驗證相關數據;(PVKI, 1個字符), PIN校驗值 (PVV, 4個字符), 卡校驗值或校驗碼 (CVV or CVC, 3個字符) 結束標志——1個字符(通常是“?”) 縱向冗余校驗字符(LRC)——1個字符

第二磁道:

起始標志——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/)

enter image description here

該卡就長這樣,注意右下角的卡號,目測每張卡都有唯一的16位卡號)

0x02 說干就干


首先發現每張卡的ID都是以數字“60383800”開頭的,這一段之后的兩位經過分析只有“05”、“06”、“11”三種情況。

最后六位,我們把他成為尾數,是0~9的隨機數。也就是說總共有100萬種可能的卡號,加上前面的三種前綴,總共就是300萬種可能性。

而這個地址可以供我們查看ID是否有效:https://app.it.okstate.edu/idcard/

enter image description here

這個網頁允許任何人輸入16位的ID號來查詢該卡號是否合法。

一個合法的ID查詢后將顯示如下結果:

enter image description here

如果卡號不合法,顯示結果是這樣:

enter image description here

卡號查詢返回的內容有:

卡號:輸入的ID號碼
ID卡狀態:有效或無效
就業狀況:持證人當前的就業情況
學生狀態:持證人目前的報名情況
其他:備注及銀行卡信息等

這個查詢頁面有一個免責聲明:“使用這項查詢功能的IP將被記錄”,設計的本意是防止其他地區的用戶未授權訪問,但是IP地址是可以通過代理來偽裝的,這是連小學生都知道的常識。

從這里http://www.rakuten.com/prod/usb-3-track-magnetic-credit-card-reader/240738725.html 花25美元購買一個USB的磁條閱讀器就可以對ID卡進行解碼。

將我們的學生卡解碼后,得到如下信息:

%B6038380006514029^SNELLING/SAMUEL R      ^491212000000000    000   ?;6038380006514029=49121200000000000000?

對照我們之前講的磁道結構,可以得出:

第一磁道:

%B
ID卡號
^
持卡人姓名
^
過期時間: 49/12
服務代碼: 120
自由數據: 000000000    000   
? 

第二磁道:

;
ID 卡號
=
過期時間:49/12
服務代碼: 120
自由數據: 0000000000000
?

最有趣的兩項是:所有人的過期日期都是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軟件 點擊軟件右側的“讀取”按鈕 將源卡刷卡,獲取其經過編碼的數據 點擊軟件右側的“寫入”按鈕 將空白卡刷卡,寫入數據

源卡數據:

%B6038380006514029^SNELLING/SAMUEL R      ^491212000000000    000   ?;6038380006514029=49121200000000000000?

復制到空白卡的數據:

%B6038380006514029^SNELLING/SAMUEL R      ^491212000000000    000   ?;6038380006514029=49121200000000000000?

修改持卡人姓名后復制到空白卡的數據:

%B6038380006514029^PETE/PISTOL           ^491212000000000    000 ?;6038380006514029=49121200000000000000?

對比一下:

%B6038380006514029^SNELLING/SAMUEL R      ^491212000000000    000   ?;6038380006514029=49121200000000000000?

%B6038380006514029^PETE/PISTOL                 ^491212000000000    000 ?;6038380006514029=49121200000000000000?

這里有個注意點:我們修改了持卡人姓名,但是卡號沒有改。

enter image description here

左上方為刷入了修改姓名后數據的復制卡,右上方為源卡數據直接復制的復制卡,左下方是源卡,右下方同右上。

背面照:

enter image description here

0x05 提槍上陣


我們的猥瑣團隊開始在各種場合使用這些復制的空白卡。

首先,我們讓團隊的老三辦理了一張新卡(學校官方發的)去圖書館使用,結果那里的管理員說這個ID不在系統中,如果的卡是新辦的,那么一般需要幾天時間來等待服務器的同步。從這個行動中我們了解到學校圖書館每次在使用ID卡時并不是實時和服務器進行驗證,而是每隔幾天從服務器同步新的內容保存在本地使用。

接下來,我們又派團隊的老皮拿著復制卡在校園里到處鋪張浪費,大家可以翻墻看我們錄制的演示視頻:http://youtu.be/Bw2Ugezb7Fs

enter image description here

以上的測試中我們得到幾點經驗:

雖然復制卡看起來比較奇怪,但是在我們帥氣的隊友色誘下,工作人員還是接受了白卡。 復制卡的持卡人姓名修改后,消費時的單據上看到的依然是源卡持卡人姓名,這就說明在校園銷售系統中,消費時數據與服務器實時核驗,確保ID卡的有效性。但是持卡人姓名并沒有做檢測。

0x06 整裝待發


有了上面的試驗和經驗,我們再次總結一下現在掌握的信息:

該校所有的老師和學生都有這種ID卡 所有卡的前八位都是60383800 所有卡的第九第十位只有三種:05、06、11 有大約300萬種可能的卡號 有一個現成的網站可以查詢ID卡號的有效性,這個站可能會記錄我們的IP 所有卡的過期時間一致,都是49/12 所有卡的自由數據部門都是空的(0填充) Unitec的MSRC206可以讀取、編輯和重新編碼磁條 圖書館驗證ID卡時并不是實時連接服務器的 白卡(復制卡)拿去消費也是會被工作人員接受的 銷售系統是與服務器實時通信驗證的 銷售系統不進行持卡人身份驗證

0x07 擴大戰果


現在所掌握的信息已經足夠我們進行大規模行動了。

首先,我們寫了個基于node.js的網絡小腳本,不用說你也猜到了,我們將對校園里的有效卡號進行爆破!

代碼:

#!javascript
var cheerio = require('cheerio'), 
request = require('request'), 
fs = require('fs'), 
headnumber = '06';

for (var i=1; i <= 100; i += 1){
    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卡的所有系統 所有系統對驗證事務進行嚴格檢查 添加雙重驗證

參考文檔:http://en.wikipedia.org/wiki/Magnetic_stripe_card 原文地址:http://snelling.io/hacking-oklahoma-state-university-student-id

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞