指紋考勤機實現遠程打卡測試
聲明:
1、文章中使用的指紋考勤機只針對某個廠商生產的考勤機,對於其他類型的機器未測。
2、請大牛多多指教,求輕噴。
3、本文只作思路分享,請勿用於非法用途。
0x00
指紋考勤機被越來越多的使用在企業中, 實現了人、地、時三者合一,為企業職員的出勤考察提供了極大的方便。在考勤機驗證指紋成功的一瞬間,會向伺服器發送一條職員打卡請求,然後伺服器將打卡信息存入資料庫,這時人們通過瀏覽器就能瀏覽到你的考勤信息。那麼,如果我們能把考勤機發送的這條「打卡請求」通過抓包的方式捕獲,然後在「適宜」的時間發送出去,是不是就可以實現打卡了。本文根據這個思路,進行了一系列實驗。
0x01
我們的最終目的就是獲取考勤機發送的數據包。為此我們進行了如下實驗。
首先考勤機沒有設置代理的功能,如果想捕獲考勤機發出的請求,首先想到的是ARP欺騙,但是既然我們能直接接觸到考勤機,所以這裡直接採取一個暴力的方法:先保證電腦和考勤機在同一個網段,使用USB網卡和一根網線將電腦和考勤機連接,為了保證考勤機能正常聯網,還需要將USB網卡和能上網的網卡進行橋接,此時考勤機可以正常聯網並且所有流量都會經過電腦端。最後,電腦端開啟wireshark,選中USB網卡開始抓包,這樣考勤機發送的數據就會一目了然。現在的網路拓撲如下:
0x02
捕獲到的網路流量如下,沒錯,使用了TLS(傳輸層安全協議),加密了所有的數據。目前大多數證書都使用1024位或2048位密鑰。2048位密鑰非常可靠,要想通過暴力的方式破解,這幾乎是不可能的。
通過查閱資料,找到兩種突破SSL的工具:SSLStrip和SSLSplit。SSLStrip很強大,它的核心原理是將HTTPS強制降級為HTTP。SSLSplit的原理是以中間人的身份將偽造的證書插入到伺服器和客戶端中間,從而截斷客戶端和伺服器之間的流量。這裡我們使用SSLStrip。(希望考勤機沒有校驗證書的真偽)==
同時我們注意到考勤機的IP位於4網段,網關為192.168.4.1。
0x03
接下來我們需要搭建一個虛假的網關,來截斷考勤機發出的所有流量。
將之前的USB網卡(eth2)接入Kali系統,Kali使用NAT方式進行聯網,IP:192.168.127.134,子網掩碼:255.255.255.0
命令如下:
同時我們還要搭建一個DHCP服務為考勤機分配IP,這裡使用dnsmasq,配置如下,並啟動服務。
此時一個4網段的網關已經設置好,USB網卡模擬網關並分配IP地址。這時將考勤機連接應該可以正常聯網。
網路拓撲如下:
0x04
下面請SSLSplit登場。
先生成一個key文件:
然後自簽名用生成的key生成公鑰證書:
這樣我們就把根證書建好了。
接著是用iptables進行流量轉發,把我們需要的埠進行轉發:
接著啟動SSLSplit
連接考勤機並進行打卡,會發現生產日誌文件,裡面應該就是我們想要的明文數據包。
0x05
打開一看,部分亂碼。好吧,這又是什麼加密?不慌,我們距離成功僅差一步。
仔細觀察,我們可以得到伺服器的IP,並且知道考勤機使用了websocket。簡單來說websocket是一種網路協議,實現了全雙工,客戶端和伺服器可以相互主動發送信息給對方。數據傳輸使用的是一系列數據幀,出於安全考慮,客戶端發送的數據幀必須進行掩碼處理後才能發送到伺服器,不論是否是在TLS安全協議上都要進行掩碼處理。WebSocket協議已經設計了心跳,這個功能可以到達檢測鏈接是否可用。一個數據幀的結構如下:
廢話不多說,既然數據幀進行了掩碼處理,我們怎麼解密呢,網上解密代碼很多,我寫了一個Java版的,部分代碼如下:
0x06
運行程序,終於終於看到了明文===
第一部分代表考勤機發出的登陸請求,包含考勤機的一些信息:設備ID,token
第二部分為websocket的心跳包。
第三部分,在校驗指紋時捕獲到的,所以應該就是我們想要的打卡請求。包含userCode(工號),checkTime(打卡時間)
目前為止,我們已經可以成功解析這個亂碼的文件:
0x07
開始擼代碼。現在已經知道了考勤機與伺服器之間的通信內容,現在需要寫一個支持SSL的websocket客戶端將打卡信息發送給伺服器。代碼參考這位大神寫的:
https://github.com/palmerc/SecureWebSockets
稍加修改,一個具有打卡功能的安卓客戶端誕生。
下面是打卡後伺服器返回的數據,type=」result」時表示成功。通過查閱考勤記錄,確實成功打卡。
修改了一哈界面,是不是很帥呢===
自從有了它,媽媽再也不用擔心我上班遲到了===
0x08
總的來說:
1、實現遠程打卡的思路可以簡單概括為四個字:抓包重放。原理雖然簡單,但是我們在抓包的過程中遇到了很多困難。
2、考勤機的核心問題在於,沒有檢測SSL證書的真偽,導致我們可以偽造證書,獲取考勤機與伺服器通信的明文數據包,最終我們寫了一個APP來發送打卡信息,實現了遠程打卡。
*本文原創作者:番茄test,屬於FreeBuf原創獎勵計劃,禁止轉載
TAG:FreeBuf |