【編按】:目前遠通電收已經把驗證碼機制換成Session-based驗證機制,安全性比較高一些了。
我來幫忙補完好了。
MouseMs 的文章指出,遠通eTag的驗證碼產生方式,是使用Authentication Code + Plaintext 的方式來做驗證。
看樣子沒什麼問題。
但是它最大的敗筆在於三個部分:
1. 把Authentication Code的圖片檔及其相關驗證碼資訊「存到伺服器」 (也就是把輸入的驗證碼存起來的意思)。
【小實驗】:
各位可以輸入 https://css.fetc.net.tw/CS/Ajax/GetAuthImage/ohMt1pFQ0is1 ,會得到一個VCode.png1,把這個檔案副檔名改為.png,
看看是不是都是「XR8DJ」?
2. 把驗證碼的「密文」交給使用者的瀏覽器網頁表單保管(見下圖)。
3. 每次驗證碼產生的「密文」與驗證碼「輸入值」都是一對一對應,產生方式都是固定不變的。
而在伺服器端的驗證碼驗證工作就是:
1. 拿到使用者手動輸入的「驗證碼」以及使用者瀏覽器網頁表單的「密文」
2. 把上面的「驗證碼」與「密文」進行比對;若比對正確,則驗證碼驗證成功。若比對失敗,則驗證碼輸入無效。
但如前所述,它產生的「驗證碼」與「密文」都是一對一對應,無論輸入多少次驗證碼,產生結果都一樣。 亦即無法抵擋「重送攻擊」。
所以黑客只要在驗證碼中輸入「XR8DJ」,密文則填入「ohMt1pFQ0is1」。
按照上面的驗證碼處理工作,就一定破解掉驗證碼。
既然驗證碼可以被破解,黑客的工作就只剩下怎麼破解「車牌號碼」與「車牌證號」了。
提示:用最暴力的做法「字典攻擊法」應該可以破得掉。