黑掉俄克拉荷馬州立大學的學生卡

wyzsk發表於2020-08-19
作者: light · 2015/03/01 11:40

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

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章