我的博客:http://blog.striveforfreedom.net
1 簡介
最近在看一個開源網站的代碼,發現如果登錄頁面是通過http協議請求的,會重定向到使用https協議的url,這樣可以保證登錄安全。今天心血來潮,想看看京東有沒有這樣處理,意外發現京東在這方面存在安全漏洞。
2 檢查過程
先運行Wireshark,Filter用http contains jd.com。京東登錄頁面地址是https://passport.jd.com/new/login.aspx, 把https改成http,在瀏覽器地址欄里輸入http://passport.jd.com/new/login.aspx, 回車,然后查看Wireshark的抓包,並沒有發現重定向響應。然后在登錄頁面的用戶名和密碼輸入框處分別填上faked_user和faked_password,點擊登錄。再查看Wireshark,發現一個post請求,傳輸的數據是uuid=4b72722f-58a1-4c4c-9364-db663ca9e8a4&loginname=faked_user&nloginpwd=faked_password&loginpwd=faked_password&machineNet=&machineCpu=&machineDisk=&authcode=&ZWprDUvAGW=sNKhf,里面赫然可以發現loginname=faked_user&nloginpwd=faked_password&loginpwd=faked_password,這說明在這種情況下京東是以明文傳輸密碼的。這就存在一個安全漏洞,如果攻擊者把使用http協議的登錄地址發布在網絡上,誘使受害者點擊,攻擊者就有機會截取受害者的用戶名和密碼了。
發現京東存在這樣的問題之后,好奇心驅使我又試了其他幾家電商的登錄頁面。我首先試了亞馬遜的登錄頁面,發現亞馬遜沒有這種問題,如果用戶是使用http協議訪問登錄頁面,亞馬遜會返回一個HTTP/1.1 302 Moved Temporarily響應,Location響應頭字段里會包含使用https協議的url,瀏覽器則會被重定向到訪問安全的登錄地址。淘寶/蘇寧/易迅也一樣,都重定向到了https地址,新蛋直接禁止了以http方式訪問登錄頁面(客戶端TCP SYN包發出之后,收到了服務器的RST包,應該是登錄服務器上的80端口沒有打開),1號店使用iframe來嵌入登錄頁面,在iframe的src屬性里找到登錄頁面的url,把https改成http然后訪問,沒有重定向,但在提交登錄的javascript函數里明確使用了https來發送登錄請求,這種攻擊方式也用不上。
3 小結
這種問題很容易修復,只要在登錄頁面里檢查協議,如果發現訪問登錄頁面使用的是http協議,則重定向到使用https協議的地址。相對來說,京東這個還是小問題,購書網站互動出版網 竟然是直接用明文傳輸用戶名和密碼的,實在讓人無語。