您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何利用泄露的NPM_TOKEN訪問項目私有倉庫,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
下面講述了作者在目標站點的JS腳本中發現了NPM_TOKEN和私有倉庫鏈接,然后利用該NPM_TOKEN,結合.npmrc格式請求,訪問到了目標站點相關的NPM項目私有倉庫。
最近,我選擇了一個處理效率和支付獎勵相對較高的漏洞測試項目,寄希望于能從其中發現一些高危漏洞。我先是在目標站點中嘗試了模板注入(template injection),之后又測了一遍IDOR,都一無所獲。于是,我就下載目標站點中的JS文件看看能否發現一些信息泄露問題。
首先,我用BURP Suite pro來把目標站點的JS文件提取下載為一個文件,這樣的方式不算太直觀友好,然后我又用以下腳本來把它們分隔成單獨文件:
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的代碼模式轉化工具gf在此就派上用場了,使用gf加文件路徑的方式,我從上述JS腳本中發現了一個泄露IP地址:http://172.x.x.x,在其上下文信息中我又找到了一個NPM_TOKEN值,但這個NPM_TOKEN怎么來利用呢?我有點不懂。平時很少用到NMP,只知道它是Node package manager。
經過一番研究,我對NPM_TOKEN值有了以下了解:
1、在一些持續集成的開發系統(Continuous Integration systems)中,如Jenkins pipelines或Travis CI等,會在自動化模式的Web應用開發部署中用到NPM_TOKEN值,用NPM_TOKEN可以訪問到項目的一些NPM私有倉庫(Npm private repository);
2、不同類型的NPM_TOKEN具備不同的權限,如有僅限讀+發布的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有效的話,執行npm whoami命令,會收到響應。但很可惜,沒有任何響應。另外,有一些文章說 .npmrc格式中的NPM_TOKEN是加密串。
測試第二天-工作到家將近晚上8點了,我又繼續測試這個NPM_TOKEN。我想到在年初我讀了一些跨站WebSocket劫持(CSWH)的文章,Cross Site Websocket Hijacking,所以我結合其進行了一些分析。CSWH利用的條件是,websocket只使用cookie進行通信交流,這有點像跨站請求偽造(CSRF)攻擊。在BURP練習中對CSWH也有所涉及:
接著,我想看看能不能在前述獲得的JS腳本中發現一些websocket信息,但一無所獲。之后,我從中發現了客戶端請求時,服務端產生分配的一個nonce值,經測試發現可以用它實現CSRF攻擊,就這樣在尋找CSWH漏洞的過程中發現了CSRF漏洞。于是我進行了上報,在另外的博文中我會作講解。
測試第三天-經過兩小時的分析,我發現其中一個JS腳本文件有點意思,可以用以下三步操作使其代碼規則化。Firefox下的代碼規則化:
Chrome下的代碼規則化:
該文件將近有17k數量的行數,大多是webpack類代碼,經過仔細分析,在其中又發現了一個NPM_TOKEN值:
并且,在其附近還存在一個私有注冊鏈接(private registry link):
我就想,那這個注冊鏈接會不會是其私有倉庫的鏈接呢,于是,我就加入了發現的NPM_TOKEN值,用下.npmrc方法進行了請求:
registry=https://private_registry_link_here //private_registry_link_here/:_authToken=auth_token_here
執行npm whoami命令,竟然有了成功響應:srv-npm-registry-ci。
然后,我想列出它的所有NPM包信息,不行。于是,我在其JS文件中的打包信息中發現了一些私有倉庫的線索,如以下這個:
因此,我用下述命令對其私有倉庫進行了請求:
npm view private_repo
npm get private_repo
響應如下:
使用這種方法,我可以下載一些目標項目的私有倉庫,從中發現了一些配置類JS腳本和大量的源代碼。開發者在項目中明顯未做權限設置。沒有做深入測試,我就把漏洞上報了。漏洞在當天就被分類處理了,7天之后,我收到了$8000的獎勵。
1、可以從一些JS腳本文件中發現隱藏信息;
2、要學會使用瀏覽器的開發者工具,它們的功能超乎想像;
3、保持測試工具更新;
4、堅持不懈是關鍵。
上述內容就是如何利用泄露的NPM_TOKEN訪問項目私有倉庫,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。