明:
1、文章中使用的指紋考勤機(jī)只針對(duì)某個(gè)廠商生產(chǎn)的考勤機(jī),對(duì)于其他類型的機(jī)器未測(cè)。
2、請(qǐng)大牛多多指教,求輕噴。
3、本文只作思路分享,請(qǐng)勿用于非法用途。
指紋考勤機(jī)被越來越多的使用在企業(yè)中, 實(shí)現(xiàn)了人、地、時(shí)三者合一,為企業(yè)職員的出勤考察提供了極大的方便。在考勤機(jī)驗(yàn)證指紋成功的一瞬間,會(huì)向服務(wù)器發(fā)送一條職員打卡請(qǐng)求,然后服務(wù)器將打卡信息存入數(shù)據(jù)庫,這時(shí)人們通過瀏覽器就能瀏覽到你的考勤信息。那么,如果我們能把考勤機(jī)發(fā)送的這條“打卡請(qǐng)求”通過抓包的方式捕獲,然后在“適宜”的時(shí)間發(fā)送出去,是不是就可以實(shí)現(xiàn)打卡了。本文根據(jù)這個(gè)思路,進(jìn)行了一系列實(shí)驗(yàn)。
我們的最終目的就是獲取考勤機(jī)發(fā)送的數(shù)據(jù)包。為此我們進(jìn)行了如下實(shí)驗(yàn)。
首先考勤機(jī)沒有設(shè)置代理的功能,如果想捕獲考勤機(jī)發(fā)出的請(qǐng)求,首先想到的是ARP欺騙,但是既然我們能直接接觸到考勤機(jī),所以這里直接采取一個(gè)暴力的方法:先保證電腦和考勤機(jī)在同一個(gè)網(wǎng)段,使用USB網(wǎng)卡和一根網(wǎng)線將電腦和考勤機(jī)連接,為了保證考勤機(jī)能正常聯(lián)網(wǎng),還需要將USB網(wǎng)卡和能上網(wǎng)的網(wǎng)卡進(jìn)行橋接,此時(shí)考勤機(jī)可以正常聯(lián)網(wǎng)并且所有流量都會(huì)經(jīng)過電腦端。最后,電腦端開啟wireshark,選中USB網(wǎng)卡開始抓包,這樣考勤機(jī)發(fā)送的數(shù)據(jù)就會(huì)一目了然。現(xiàn)在的網(wǎng)絡(luò)拓?fù)淙缦拢?/p>
捕獲到的網(wǎng)絡(luò)流量如下,沒錯(cuò),使用了TLS(傳輸層安全協(xié)議),加密了所有的數(shù)據(jù)。目前大多數(shù)證書都使用1024位或2048位密鑰。2048位密鑰非常可靠,要想通過暴力的方式破解,這幾乎是不可能的。
通過查閱資料,找到兩種突破SSL的工具:SSLStrip和SSLSplit。SSLStrip很強(qiáng)大,它的核心原理是將HTTPS強(qiáng)制降級(jí)為HTTP。SSLSplit的原理是以中間人的身份將偽造的證書插入到服務(wù)器和客戶端中間,從而截?cái)嗫蛻舳撕头?wù)器之間的流量。這里我們使用SSLStrip。(希望考勤機(jī)沒有校驗(yàn)證書的真?zhèn)危?=
同時(shí)我們注意到考勤機(jī)的IP位于4網(wǎng)段,網(wǎng)關(guān)為192.168.4.1。
接下來我們需要搭建一個(gè)虛假的網(wǎng)關(guān),來截?cái)嗫记跈C(jī)發(fā)出的所有流量。
將之前的USB網(wǎng)卡(eth2)接入Kali系統(tǒng),Kali使用NAT方式進(jìn)行聯(lián)網(wǎng),IP:192.168.127.134,子網(wǎng)掩碼:255.255.255.0
命令如下:
//配置USB網(wǎng)卡的IP為192.168.4.1,子網(wǎng)掩碼255.255.255.0root@bogon:~# ifconfig eth2 192.168.4.1 netmask 255.255.255.0//使能USB網(wǎng)卡root@bogon:~# ifconfig eth2 up//開啟IP轉(zhuǎn)發(fā)root@bogon:~# echo 1 > /proc/sys/net/ipv4/ip_forward//為了保證這個(gè)虛假網(wǎng)關(guān)能聯(lián)網(wǎng),將eth2和eth0進(jìn)行關(guān)聯(lián)root@bogon:~# iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT//開啟地址偽裝root@bogon:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
同時(shí)我們還要搭建一個(gè)DHCP服務(wù)為考勤機(jī)分配IP,這里使用dnsmasq,配置如下,并啟動(dòng)服務(wù)。
root@bogon:~# service dnsmasq start
此時(shí)一個(gè)4網(wǎng)段的網(wǎng)關(guān)已經(jīng)設(shè)置好,USB網(wǎng)卡模擬網(wǎng)關(guān)并分配IP地址。這時(shí)將考勤機(jī)連接應(yīng)該可以正常聯(lián)網(wǎng)。
網(wǎng)絡(luò)拓?fù)淙缦拢?/p>
下面請(qǐng)SSLSplit登場。
先生成一個(gè)key文件:
openssl genrsa -out ca.key 2048
然后自簽名用生成的key生成公鑰證書:
openssl req -new -x509 -days 1096 -key ca.key -out ca.crt
這樣我們就把根證書建好了。
接著是用iptables進(jìn)行流量轉(zhuǎn)發(fā),把我們需要的端口進(jìn)行轉(zhuǎn)發(fā):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
接著啟動(dòng)SSLSplit
sslsplit -D -l connect.log -j /root -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
連接考勤機(jī)并進(jìn)行打卡,會(huì)發(fā)現(xiàn)生產(chǎn)日志文件,里面應(yīng)該就是我們想要的明文數(shù)據(jù)包。
打開一看,部分亂碼。好吧,這又是什么加密?不慌,我們距離成功僅差一步。
仔細(xì)觀察,我們可以得到服務(wù)器的IP,并且知道考勤機(jī)使用了websocket。簡單來說websocket是一種網(wǎng)絡(luò)協(xié)議,實(shí)現(xiàn)了全雙工,客戶端和服務(wù)器可以相互主動(dòng)發(fā)送信息給對(duì)方。數(shù)據(jù)傳輸使用的是一系列數(shù)據(jù)幀,出于安全考慮,客戶端發(fā)送的數(shù)據(jù)幀必須進(jìn)行掩碼處理后才能發(fā)送到服務(wù)器,不論是否是在TLS安全協(xié)議上都要進(jìn)行掩碼處理。WebSocket協(xié)議已經(jīng)設(shè)計(jì)了心跳,這個(gè)功能可以到達(dá)檢測(cè)鏈接是否可用。一個(gè)數(shù)據(jù)幀的結(jié)構(gòu)如下:
廢話不多說,既然數(shù)據(jù)幀進(jìn)行了掩碼處理,我們?cè)趺唇饷苣兀W(wǎng)上解密代碼很多,我寫了一個(gè)Java版的,部分代碼如下:
運(yùn)行程序,終于終于看到了明文===
第一部分代表考勤機(jī)發(fā)出的登陸請(qǐng)求,包含考勤機(jī)的一些信息:設(shè)備ID,token
第二部分為websocket的心跳包。
第三部分,在校驗(yàn)指紋時(shí)捕獲到的,所以應(yīng)該就是我們想要的打卡請(qǐng)求。包含userCode(工號(hào)),checkTime(打卡時(shí)間)
目前為止,我們已經(jīng)可以成功解析這個(gè)亂碼的文件:
開始擼代碼。現(xiàn)在已經(jīng)知道了考勤機(jī)與服務(wù)器之間的通信內(nèi)容,現(xiàn)在需要寫一個(gè)支持SSL的websocket客戶端將打卡信息發(fā)送給服務(wù)器。代碼參考這位大神寫的:
https://github.com/palmerc/SecureWebSockets
稍加修改,一個(gè)具有打卡功能的安卓客戶端誕生。
下面是打卡后服務(wù)器返回的數(shù)據(jù),type=”result”時(shí)表示成功。通過查閱考勤記錄,確實(shí)成功打卡。
修改了一哈界面,是不是很帥呢===
自從有了它,媽媽再也不用擔(dān)心我上班遲到了===
總的來說:
1、實(shí)現(xiàn)遠(yuǎn)程打卡的思路可以簡單概括為四個(gè)字:抓包重放。原理雖然簡單,但是我們?cè)谧グ倪^程中遇到了很多困難。
2、考勤機(jī)的核心問題在于,沒有檢測(cè)SSL證書的真?zhèn)危瑢?dǎo)致我們可以偽造證書,獲取考勤機(jī)與服務(wù)器通信的明文數(shù)據(jù)包,最終我們寫了一個(gè)APP來發(fā)送打卡信息,實(shí)現(xiàn)了遠(yuǎn)程打卡。
*本文原創(chuàng)作者:番茄test,
*本文原文地址:FreeBuf
勤管理系統(tǒng)簡介:
考勤管理系統(tǒng):針對(duì)學(xué)校管理系統(tǒng)開發(fā),它采用感應(yīng)卡考勤機(jī),速度快、成本低、與老師和學(xué)生ID卡可一卡多用,并可同人事工資管理系統(tǒng)連接起來,降低學(xué)校和企業(yè)成本,提高學(xué)校和企業(yè)效率。先知考勤管理系統(tǒng)支持手機(jī)打卡考勤、手機(jī)打卡簽到,考勤打卡輕松完成,點(diǎn)擊簽到,簽退按鈕即可輕松實(shí)現(xiàn)上下班考勤打卡
考勤管理系統(tǒng):配置界面簡潔,操作簡便,使用方便。
數(shù)據(jù)即時(shí)查詢,系統(tǒng)自動(dòng)生成及打印各種不同內(nèi)容的統(tǒng)計(jì)表。
靈活地設(shè)定不同的班次、假期、休息、加班等。
系統(tǒng)維護(hù):授權(quán)用戶可以為每位員工發(fā)行ID卡,每個(gè)人擁有為不同的ID卡號(hào),用戶進(jìn)行驗(yàn)證時(shí)使用ID卡,卡號(hào)的添加維護(hù)只有授權(quán)用戶管理員才可以執(zhí)行。
網(wǎng)絡(luò)應(yīng)用:考勤機(jī)可通過RS485線纜同計(jì)算機(jī)遠(yuǎn)程連接,并可同人事工資系統(tǒng)無縫結(jié)合,配置為網(wǎng)絡(luò)應(yīng)用,接受網(wǎng)絡(luò)監(jiān)控或遠(yuǎn)端啟動(dòng),并可完成本地配置的遠(yuǎn)端操控。
紋考勤一體機(jī) 操作指南
考勤一體機(jī)定義:
考勤軟件集成在機(jī)器中,不需要連接電腦,通過U盤直接輸出考勤報(bào)表的機(jī)器。
1.新增用戶
按鍵盤"MENU"鍵進(jìn)入"操作菜單"
2.T9中文輸入法說明
鍵盤功能說明如下:
在進(jìn)入"輸入姓名"或"修改名稱"時(shí),下方提示"拼"則為拼音輸入狀態(tài),如輸入"張三"可按以上新增用戶時(shí)的步驟輸出"張三"。如要輸入"TOM",可在進(jìn)入"輸入姓名"或"修改名稱"時(shí),按鍵盤"POWER"改變輸入狀態(tài)為"ABC",并鍵盤輸入"8""1"(T)、"6""3"(O)、"6""1"(M)"OK"完成輸入。其它名字可依此類推。
3.增加班次
按鍵盤"MENU"鍵進(jìn)入"操作菜單"
4.部門設(shè)置
按鍵盤"MENU"鍵進(jìn)入"操作菜單"
5.考勤規(guī)則
按鍵盤"MENU"鍵進(jìn)入"操作菜單"
6.用戶管理
按鍵盤"MENU"鍵進(jìn)入"操作菜單"
7.輸出報(bào)表
U盤連接機(jī)器USB接口,按鍵盤"MENU"鍵進(jìn)入"操作菜單"
注:
U盤上生成XML數(shù)據(jù)可以用IE瀏覽器打開。
XML數(shù)據(jù)可以用Excel修改編輯。
建議用戶一個(gè)月導(dǎo)出一次報(bào)表,如發(fā)現(xiàn)考勤機(jī)數(shù)據(jù)溢出報(bào)警,用戶可先用U盤導(dǎo)出數(shù)據(jù)后,通過按鍵盤"MENU"鍵進(jìn)入"操作菜單" "設(shè)置" "其它設(shè)置" "機(jī)器設(shè)置(一般情況下用戶請(qǐng)不要隨便更改"機(jī)器設(shè)置"里面的內(nèi)容)" "刪除全部記錄"