您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何利用泄露的NPM_TOKEN訪問項(xiàng)目私有倉庫,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
下面講述了作者在目標(biāo)站點(diǎn)的JS腳本中發(fā)現(xiàn)了NPM_TOKEN和私有倉庫鏈接,然后利用該NPM_TOKEN,結(jié)合.npmrc格式請(qǐng)求,訪問到了目標(biāo)站點(diǎn)相關(guān)的NPM項(xiàng)目私有倉庫。
最近,我選擇了一個(gè)處理效率和支付獎(jiǎng)勵(lì)相對(duì)較高的漏洞測試項(xiàng)目,寄希望于能從其中發(fā)現(xiàn)一些高危漏洞。我先是在目標(biāo)站點(diǎn)中嘗試了模板注入(template injection),之后又測了一遍IDOR,都一無所獲。于是,我就下載目標(biāo)站點(diǎn)中的JS文件看看能否發(fā)現(xiàn)一些信息泄露問題。
首先,我用BURP Suite pro來把目標(biāo)站點(diǎn)的JS文件提取下載為一個(gè)文件,這樣的方式不算太直觀友好,然后我又用以下腳本來把它們分隔成單獨(dú)文件:
cat urls.txt | xargs -I{} wget "{}" # Assuming urls are clean i.e. they don't have any extra parameters in the end # if the url is like this : https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-cacheable-response.prod.js?v=123122 # Then you need to cut the part after '?' like the following cat urls.txt | cut -d"?" -f1 | xargs -I{} wget "{}"
Tomnomnom的代碼模式轉(zhuǎn)化工具gf在此就派上用場了,使用gf加文件路徑的方式,我從上述JS腳本中發(fā)現(xiàn)了一個(gè)泄露IP地址:http://172.x.x.x,在其上下文信息中我又找到了一個(gè)NPM_TOKEN值,但這個(gè)NPM_TOKEN怎么來利用呢?我有點(diǎn)不懂。平時(shí)很少用到NMP,只知道它是Node package manager。
經(jīng)過一番研究,我對(duì)NPM_TOKEN值有了以下了解:
1、在一些持續(xù)集成的開發(fā)系統(tǒng)(Continuous Integration systems)中,如Jenkins pipelines或Travis CI等,會(huì)在自動(dòng)化模式的Web應(yīng)用開發(fā)部署中用到NPM_TOKEN值,用NPM_TOKEN可以訪問到項(xiàng)目的一些NPM私有倉庫(Npm private repository);
2、不同類型的NPM_TOKEN具備不同的權(quán)限,如有僅限讀+發(fā)布的Read and publish only、只讀的Readonly以及指定特定IP范圍的CIDR白名單化等等;
3、用以下.npmrc格式來使用NPM_TOKEN:
registry=https://registry_link_here //registry_link_here/:_authToken=auth_token_here
于是,我就嘗試用以下 .npmrc格式來測試:
registry=https://registry.npmjs.org //registry.npmjs.org/:_authToken=auth_token_here
測試第一天-在該利用方式中,如果NPM_TOKEN有效的話,執(zhí)行npm whoami命令,會(huì)收到響應(yīng)。但很可惜,沒有任何響應(yīng)。另外,有一些文章說 .npmrc格式中的NPM_TOKEN是加密串。
測試第二天-工作到家將近晚上8點(diǎn)了,我又繼續(xù)測試這個(gè)NPM_TOKEN。我想到在年初我讀了一些跨站W(wǎng)ebSocket劫持(CSWH)的文章,Cross Site Websocket Hijacking,所以我結(jié)合其進(jìn)行了一些分析。CSWH利用的條件是,websocket只使用cookie進(jìn)行通信交流,這有點(diǎn)像跨站請(qǐng)求偽造(CSRF)攻擊。在BURP練習(xí)中對(duì)CSWH也有所涉及:
接著,我想看看能不能在前述獲得的JS腳本中發(fā)現(xiàn)一些websocket信息,但一無所獲。之后,我從中發(fā)現(xiàn)了客戶端請(qǐng)求時(shí),服務(wù)端產(chǎn)生分配的一個(gè)nonce值,經(jīng)測試發(fā)現(xiàn)可以用它實(shí)現(xiàn)CSRF攻擊,就這樣在尋找CSWH漏洞的過程中發(fā)現(xiàn)了CSRF漏洞。于是我進(jìn)行了上報(bào),在另外的博文中我會(huì)作講解。
測試第三天-經(jīng)過兩小時(shí)的分析,我發(fā)現(xiàn)其中一個(gè)JS腳本文件有點(diǎn)意思,可以用以下三步操作使其代碼規(guī)則化。Firefox下的代碼規(guī)則化:
Chrome下的代碼規(guī)則化:
該文件將近有17k數(shù)量的行數(shù),大多是webpack類代碼,經(jīng)過仔細(xì)分析,在其中又發(fā)現(xiàn)了一個(gè)NPM_TOKEN值:
并且,在其附近還存在一個(gè)私有注冊(cè)鏈接(private registry link):
我就想,那這個(gè)注冊(cè)鏈接會(huì)不會(huì)是其私有倉庫的鏈接呢,于是,我就加入了發(fā)現(xiàn)的NPM_TOKEN值,用下.npmrc方法進(jìn)行了請(qǐng)求:
registry=https://private_registry_link_here //private_registry_link_here/:_authToken=auth_token_here
執(zhí)行npm whoami命令,竟然有了成功響應(yīng):srv-npm-registry-ci。
然后,我想列出它的所有NPM包信息,不行。于是,我在其JS文件中的打包信息中發(fā)現(xiàn)了一些私有倉庫的線索,如以下這個(gè):
因此,我用下述命令對(duì)其私有倉庫進(jìn)行了請(qǐng)求:
npm view private_repo
npm get private_repo
響應(yīng)如下:
使用這種方法,我可以下載一些目標(biāo)項(xiàng)目的私有倉庫,從中發(fā)現(xiàn)了一些配置類JS腳本和大量的源代碼。開發(fā)者在項(xiàng)目中明顯未做權(quán)限設(shè)置。沒有做深入測試,我就把漏洞上報(bào)了。漏洞在當(dāng)天就被分類處理了,7天之后,我收到了$8000的獎(jiǎng)勵(lì)。
1、可以從一些JS腳本文件中發(fā)現(xiàn)隱藏信息;
2、要學(xué)會(huì)使用瀏覽器的開發(fā)者工具,它們的功能超乎想像;
3、保持測試工具更新;
4、堅(jiān)持不懈是關(guān)鍵。
上述內(nèi)容就是如何利用泄露的NPM_TOKEN訪問項(xiàng)目私有倉庫,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。