很多汽車保險(xiǎn)公司為你提供衛(wèi)星定位設(shè)備,用戶可以把衛(wèi)星定位設(shè)備安裝到私家車上,那在任何時(shí)間和地點(diǎn),都可以追蹤你的私家車位置。
當(dāng)安裝了衛(wèi)星定位設(shè)備,汽車保險(xiǎn)公司可隨時(shí)知道你的車到過什麼地方。當(dāng)然,如果你的私家車被賊人偷了,警方可通過衛(wèi)星定位更有效找回你的私家車。
汽車保險(xiǎn)公司還會提供專門的APP,即使你看不到你的私家車,也能透過手機(jī)上的APP知道你的私家車狀況。
接著,我下載了汽車保險(xiǎn)公司的安卓版APP,不幸地,APP需要Google Play服務(wù)才可以正常運(yùn)行。我是一個(gè)自由及開放源代碼軟件傳播人,我嘗試使用開放源代碼APP來運(yùn)行保險(xiǎn)公司的APP,而不使用Google Play服務(wù)。
幸然,我還是一個(gè)軟件開發(fā)者,F(xiàn)在,我開始分析保險(xiǎn)公司APP的APIs,然後使用mitmproxy中間人代理軟件,來開發(fā)一個(gè)適用于保險(xiǎn)公司APP的客戶端代碼。
授權(quán)
當(dāng)運(yùn)行保險(xiǎn)公司APP時(shí),用戶需要授權(quán)APP存取你的衛(wèi)星定位設(shè)備位置。
當(dāng)一開始授權(quán)時(shí),APP會要求輸入你的身份證號碼。我填寫了我的身份證號碼,APP就運(yùn)行以下的代碼:
curl -X POST -d 'BLUCS§§-1' http:///BICServices/BICService.svc/restpostcheckpicf
接著,網(wǎng)頁伺服器端作出請求響應(yīng),并存取了你的手機(jī)號碼:
2§§§-1
當(dāng)看到這些凌亂的代碼,得知APP是使用HTTP請求響應(yīng),代碼的第一個(gè)和最後一個(gè)叁數(shù)是常量,而這代碼只需要兩個(gè)叁數(shù)就獲得我的手機(jī)號碼。假如我輸入不存在的身份證號碼,會得到以下代碼:
-1§§§-100%
然後,我需要確認(rèn)手機(jī)號碼是否正確。接著,我需要輸入密碼。在之前,我已經(jīng)透過電郵,向保險(xiǎn)公司發(fā)送了我預(yù)設(shè)的密碼。輸入密碼后,APP就運(yùn)行以下代碼:
curl -X POST -d 'BLUCS§§§§-_unknown---§§2§
§§-1' http:///BICServices/BICService.svc/restpostsmartphoneactivation
接著網(wǎng)頁伺服器端作出以下響應(yīng):
0§§
這叁數(shù)每次都會改變,這看來是用作識別客戶端的ID。當(dāng)完成這階段操作,APP就得到授權(quán),全面存取私家車的所有數(shù)據(jù)。
追蹤私家車位置
我開始實(shí)現(xiàn)追蹤汽車的功能,這功能可以存取20個(gè)私家車最近到訪過的地點(diǎn),F(xiàn)在開始分析APP是怎樣存取數(shù)據(jù):
curl -X POST -d 'ASS_NEW§§2§-1' http:///BICServices/BICService.svc/restpostlastnpositions
網(wǎng)頁伺服器端作出以下響應(yīng):
0§20§§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1---§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----§DD/MM/YYYY HH:mm:SS###0#1#1#1----
沒有header頭,沒有cookie,沒有授權(quán)認(rèn)證?!
沒錯(cuò),你的猜想是對的。你只要有私家車的license許可證,就可以存取該私家車的20個(gè)最近到訪地點(diǎn)。那有什麼用途,我將會在下文解譯。
我一開始以為,伺服器儲存了我的IP地址,并授權(quán)了我的IP地址可儲存該私家車的地點(diǎn)數(shù)據(jù)。但是,我嘗試使用VPN連接伺服器,居然也能成功存該私家車的地點(diǎn)數(shù)據(jù)。
然後,我嘗試輸入不存在的私家車license許可證,得到以下響應(yīng):
-2§TARGA NON ASSOCIATA%
這表示:數(shù)據(jù)庫沒有該私家車的license許可證
那麼我們?nèi)绾潍@得其他私家車的license許可證,這很容易實(shí)現(xiàn)。所有的私家車license許可證都儲存在保險(xiǎn)公司的數(shù)據(jù)庫,而且這些數(shù)據(jù)還包括了該車最近到訪過的20個(gè)地點(diǎn)。
網(wǎng)頁客戶端
汽車保險(xiǎn)公司還提供了網(wǎng)頁端,這網(wǎng)頁端提供了更多功能給用戶。我登入了網(wǎng)頁并開始分析,發(fā)現(xiàn)網(wǎng)頁有幾個(gè)不同的域名,并且在任何請求響應(yīng)中,都會使用到用戶的cookie。有一個(gè)請求響應(yīng)值得我關(guān)注的,是該請求響應(yīng)不需要任何認(rèn)證
curl http:////(S())/NewRemoteAuthentication.aspx?RUOLO=CL&ID=&TARGA=&CONTRATTO=&VOUCHER=
在伺服器請求響應(yīng)後,網(wǎng)頁客戶端顯示的HTML頁面:
NewRemoteAuthentication
-->
/(S())/NewRemoteAuthentication.aspx?RUOLO=CL&ID=&TARGA=" id="Form1">
self.close
// -->
這里包含一個(gè)iframe,而且該iframe還是外部鏈接的!

透過這頁面你可以得到:
關(guān)注了該保險(xiǎn)公司網(wǎng)站的用戶全名
私家車的品牌和型號
私家車的總行駛里數(shù)
私家車的行駛次數(shù)
私家車每月行駛了多少次
存取每月行駛的詳細(xì)數(shù)據(jù)
存取每日行駛的詳細(xì)數(shù)據(jù)(經(jīng)緯度、時(shí)間、日期)
存取每月行駛數(shù)據(jù)(駕駛私家車的頻率)



這里有大量數(shù)據(jù),而且這些數(shù)據(jù),是從安裝衛(wèi)星定位設(shè)備那刻就開始記錄。
保險(xiǎn)公司APP不需要任何認(rèn)證就可以存取數(shù)據(jù)庫資料,因此我可以把剛剛已知的叁數(shù)填進(jìn)去,向數(shù)據(jù)庫請求資料。通常地,數(shù)據(jù)庫請求不需要知道所有叁數(shù),我只需要刪除一些不必要的叁數(shù),剩下的叁數(shù)是我需要的。因此,我可以把代碼簡化成這樣:
curl http:////(S())/NewRemoteAuthentication.aspx?RUOLO=CL&ID=&TARGA=
可這里仍然有。這看來是個(gè)數(shù)字叁數(shù),我把之前的到得數(shù)字叁數(shù)填進(jìn)行,最後可以成功運(yùn)行。
所以,http:////(S())/NewRicerca.aspx這頁面顯示了所有我想要的數(shù)據(jù)。但是我們怎樣得到這叁數(shù)?
我嘗試刪除這叁數(shù),可是最終只得出一個(gè)空白的頁面。
接著,我認(rèn)為NewRemoteAuthentication.aspx這頁面是負(fù)責(zé)這個(gè)叁數(shù)。我嘗試在這頁面刪除這叁數(shù),令我驚喜的是,這頁面跳轉(zhuǎn)回NewRicerca.aspx這個(gè)頁面,而且還自動填寫了這叁數(shù)。現(xiàn)在,我可以調(diào)用NewRicerca.aspx這頁面來看所有數(shù)據(jù)庫資料。
結(jié)論
你只需要知道私家車的license許可證,就可以存取到該私家車的行駛資料,車主全名,私家車的位置。
我把這漏洞提交給了CERT Nazionale。
該汽車保險(xiǎn)公司在這三星期內(nèi),已經(jīng)更新了網(wǎng)頁端的邏輯漏洞。該公司還透過電郵向用戶表示,已經(jīng)修復(fù)了APP手機(jī)端的漏洞。而在我向CERT Nazionale提交了漏洞後,舊的網(wǎng)頁端服務(wù)在一個(gè)半月後已經(jīng)關(guān)閉了。
這是我的猜測,這個(gè)漏洞可能已經(jīng)存在了三年,因?yàn)榈谝淮沧堪鍭PP的APIs仍然是使用至今。
|