# OWASP Juice Shop [TOC] # 介紹 OWASP Juice Shop 是一個可以自行架設,用來學習攻擊手法的網站。 為了方便,我這邊是使用Docker架設,會有幾個題目無法做。 ![image](https://hackmd.io/_uploads/Skw3zmIcT.png) OWASP Juice Shop 長這樣↑ 右上角由左至右分別是 "search" -> "account" -> "language" ![image](https://hackmd.io/_uploads/rywj4QL5p.png) 點擊"account"會出現"Login",看到帳密我當然先injection啊,結果我都還沒找到計分表就先打了一個題目XD ![image](https://hackmd.io/_uploads/rJ2RVmUca.png) 頁面的左上角展開長這樣 ![image](https://hackmd.io/_uploads/S1DaXXLqa.png) # 1星 ## Score Board 點擊左上角裡面的"新手教學" ![image](https://hackmd.io/_uploads/HJGrcGJiT.png) 它告訴我要先找到"Score Board"的URL,可以透過 "F12"來找 ![image](https://hackmd.io/_uploads/By2_SXI5p.png) ![image](https://hackmd.io/_uploads/rkITHQ896.png) ![image](https://hackmd.io/_uploads/SkDCBXIqT.png) ![image](https://hackmd.io/_uploads/r1_JU7Lqa.png) 在新手教學中提示,可以透過"F12"來找到 Score Board 的頁面,所以我們直接"Ctrl+F"收尋 ![image](https://hackmd.io/_uploads/r1lFu7L9T.png) 在上圖中可以看到有一行```path: "score-board",```,因此我們將 "score-board" 打在網址後面,成功出現 Score Board啦!! ![image](https://hackmd.io/_uploads/BkfyKGJoa.png) ## DOM XSS(還沒寫完) 此題直接告訴我們透過注入 ```<iframe src="javascript:alart('xss')">``` 進行攻擊 ![image](https://hackmd.io/_uploads/r1YyaM1oa.png) 在 ![image](https://hackmd.io/_uploads/ByeHJdyi6.png)輸入 ```123``` 來看看頁面上會有什麼變化,可以看到網址的部分多了 ```search?q=123``` 123的部分是我們輸入的 ![image](https://hackmd.io/_uploads/rkyXJ_1j6.png) 將輸入改成 ```<h1>123``` 後,可以發現收尋結果換了一行 ![image](https://hackmd.io/_uploads/HJ3Zgdksp.png) 將輸入改成 ```<h1>123 <h2>2``` 後,可以發現收尋結果中出現了第二行比較小的2,由此可以確認輸入並無過濾可以注入 ![image](https://hackmd.io/_uploads/HJ5jlOJj6.png) 將題目敘述給我們的 ```<iframe src="javascript:alart('xss')">``` 輸入後,成功跳出 alert 視窗 ![image](https://hackmd.io/_uploads/BJklGu1oa.png) ## Confidential Document 這題要我們存取機密檔案,首先我會想到的是藉由 ```robots.txt``` 來看看有什麼不想被看到的東西 ![image](https://hackmd.io/_uploads/B13dezj2T.png) 我們可以看到 ```robots.txt```提示我們有一個 ```/ftp```的路徑 ![image](https://hackmd.io/_uploads/SkTg-zohp.png) 在 ```ftp``` 的路徑下可以看到有很多檔案,都點開來康康 ![image](https://hackmd.io/_uploads/S1av-Mon6.png) 可以發現在 ```acquisitions.md``` 的檔案裡面寫到 ```This document is confidential!```,成功解題 ![image](https://hackmd.io/_uploads/rJTyzzohT.png) # 2星 ## Login Admin ![image](https://hackmd.io/_uploads/Hy7MJ7yj6.png) 最簡單 Injection 的方式來登入,在帳號的部分輸入 ```'OR TURE --'```,密碼就隨便輸入了 ![image](https://hackmd.io/_uploads/ByRd17yoa.png) 成功登入 ![image](https://hackmd.io/_uploads/BJ1TgQJip.png) ## Admin Section 題目敘述看起來是要找到 Admin 的管理頁面 ![image](https://hackmd.io/_uploads/Sk0MBDyi6.png) 所以利用開發者工具,收尋"admin",可以看到有個路徑是 administration ![image](https://hackmd.io/_uploads/SkbsHwki6.png) 成功找到啦 ![image](https://hackmd.io/_uploads/S1dJIPys6.png) ## Five-Star Feedback 這題要刪除所有5星的回饋 ![image](https://hackmd.io/_uploads/HJnBIDyjT.png) 承接上一題我們拿到的後台頁面 ![image](https://hackmd.io/_uploads/S1dJIPys6.png) 直接刪除5星的回饋就可以了 ![image](https://hackmd.io/_uploads/H1ya8wyjp.png) # 3星 ## Forged Review ![image](https://hackmd.io/_uploads/rksvCUysT.png) 首先隨意找一個商品撰寫評論,並用 BurpSuite 攔截 ![image](https://hackmd.io/_uploads/HyH9CUyj6.png) 可以看到內文中 ```"author":"admin@juice-sh.op"``` 是評論者的帳號 ![image](https://hackmd.io/_uploads/rkKb1wyj6.png) 所以我們隨意改帳號,然後送出 ![image](https://hackmd.io/_uploads/H1KcJDJo6.png) 在評論中可以看到修改評論者的評論 ![image](https://hackmd.io/_uploads/HJYTJwyja.png) ## Forged Feedback 跟上一題的解題方式差不多,只是改成 feedback ![image](https://hackmd.io/_uploads/Sy-jmP1oa.png) 點擊"客戶意見" ![image](https://hackmd.io/_uploads/r1swwv1ia.png) 輸入意見,然後用 BurpSuite 攔截 ![image](https://hackmd.io/_uploads/rkmEFPJia.png) 可以發現改 ```UserId``` 這個欄位就可以了 ![image](https://hackmd.io/_uploads/BJ7stwkiT.png) 為什麼是改 ```UserId``` 這個欄位呢?反覆送出意見中,發現紅框圈的是 ```UserId``` ,而 ```UserId 1``` 是誰呢?跟左邊已註冊用戶比對,可以發現是 ```admin@juice-sh.op``` 也就是現在我使用的帳號 ![image](https://hackmd.io/_uploads/BJ683DJja.png) 所已改 ```UserId``` 送出就成功啦 ![image](https://hackmd.io/_uploads/B1FH6DJsp.png) ![image](https://hackmd.io/_uploads/S1V_pwkja.png) ## Payback Time 這個敘述一看,感覺就是要靠買負數個商品來賺錢(ex.-1、-2......) ![image](https://hackmd.io/_uploads/SkuYlKyi6.png) 所以挑一個貴的加入購物車,用 BurpSuite 攔截封包 ![image](https://hackmd.io/_uploads/HJYhrRS26.png) 可以發現 Context 中有一個欄位 ```quantity``` 為購買的數量 ![image](https://hackmd.io/_uploads/SkKm8CBnp.png) 所以將 ```quantity``` 的欄位改為負數 ![image](https://hackmd.io/_uploads/HJUEI0HhT.png) 送出 request 後,可以看到在購物籃中顯示購買了 ```-999``` 個,總價的部分為負數 ![image](https://hackmd.io/_uploads/r12II0Hna.png) 將訂單送出完成結帳,這一題就解完啦 ![image](https://hackmd.io/_uploads/rkrtLRH36.png) ## Admin Registration 要註冊有管理員權限的帳號,直覺上在註冊帳號時,應該會有能更改權限的欄位,例如:isAdmin、role......等 ![image](https://hackmd.io/_uploads/S1bFJYFhp.png) 所以我們就註冊一個帳號 ![image](https://hackmd.io/_uploads/B1F8gFKna.png) 用 BurpSuite 看一下封包內容,但沒有看到跟權限相關的欄位,這邊猜測可能要自己新增權限相關的欄位,先不急,可以觀察看看有在其他的 request 中有沒有藏跟權限相關的欄位 ![image](https://hackmd.io/_uploads/SyRObtYhp.png) 先用剛註冊的帳號登入,接著到處亂點觀察封包的內容 ![image](https://hackmd.io/_uploads/S1TSLYYn6.png) 在購物籃的封包中,可以看到有一個欄位 ```token``` 很長,因此懷疑可能會有我們所需的資訊 ![image](https://hackmd.io/_uploads/ryF4Pttn6.png) 用 base64 decode 後,可以看到有個欄位是 ```"role":"customer"```,看來只要在註冊時新增 ```role``` 這個欄位 ![image](https://hackmd.io/_uploads/Sywg_FK2T.png) 為了確定管理員權限的 ```role``` 欄位要如何填寫,特別登入 admin 帳號抓 token 來看,可以確認新增欄位 ```"role":"admin"``` ![image](https://hackmd.io/_uploads/HkQiuFK2T.png) 所以在註冊的封包中加入 ```role``` 的欄位 ![image](https://hackmd.io/_uploads/Sy-8FFYnT.png) 用新註冊的帳號登入後,查看是否能看到管理者頁面,成功解題 ![image](https://hackmd.io/_uploads/ByknYYY2p.png) ## Database Schema(尚未完成) ![image](https://hackmd.io/_uploads/S1-P3V_a6.png) # 4星 ## Easter Egg 這題要我們找一個藏起來的 Easter Egg ![image](https://hackmd.io/_uploads/HJ2VlGo3p.png) 還記得 ```ftp``` 這個路徑嗎?當中有一個檔案叫做 ```eastere.gg``` 看起來就跟這一題有關係 ![image](https://hackmd.io/_uploads/rymjZMs3T.png) 然而點進去後,卻告訴我們只允許 ```.md``` 和 ```.pdf``` 的副檔名 ![image](https://hackmd.io/_uploads/BkjAzzs3a.png) 我們先在後面加上 ```.pdf``` 後,發現回應的訊息告訴我們沒有 ```eastere.gg.pdf``` 這個檔案,看來要想辦法讓它讀名稱為 ```eastere.gg``` 的 pdf 檔案 ![image](https://hackmd.io/_uploads/rJSSXGihp.png) 因為我們要的副檔名是 pdf,因此我們要塞一些東西在 ```.pdf``` 之前,讓 URL 有辦法辨識我們要的 pdf 副檔名,透過 URL 編碼,我們可以知道 ```%``` 的 URL 編碼是 ```%25```,```NULL``` 的 URL 編碼是 ```%00```,故塞入 ```%2500``` ![image](https://hackmd.io/_uploads/B1h5c7snp.png) ![image](https://hackmd.io/_uploads/Sy4s0Yraa.png) 成功解題,為什麼塞入 ```%2500``` 就可以了呢?首先 URL 編碼本身就是以 ```%數字``` 作為編碼,因此在讀 ```%2500``` 時,會將 ```%25``` 轉換為 ```%```,就變成 ```%00``` 在 URL 編碼中為 ```NULL``` ,於是 ```eastere.gg%00```這個檔案名稱就能被成功辨識。 ![image](https://hackmd.io/_uploads/SJ0mPGinT.png) ## Nested Easter Egg 續接上一題 ![image](https://hackmd.io/_uploads/S1NIxfi3T.png) 我們將 ```eastere.gg%00.pdf``` 的檔案打開,可以看到下面這一段文字 ``` "Congratulations, you found the easter egg!" - The incredibly funny developers ... ... ... Oh' wait, this isn't an easter egg at all! It's just a boring text file! The real easter egg can be found here: L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA== Good luck, egg hunter! ``` 當中 ```L2d1ci9xcmlmL25lci9mYi9zaGFhbC9ndXJsL3V2cS9uYS9ybmZncmUvcnR0L2p2Z3V2YS9ndXIvcm5mZ3JlL3J0dA==``` 這一串文字一看就是經過 md5 加密過的,所以解密後會得到 ```/gur/qrif/ner/fb/shaal/gurl/uvq/na/rnfgre/rtt/jvguva/gur/rnfgre/rtt``` 這樣的訊息 ![image](https://hackmd.io/_uploads/BJjJQcHTT.png) 剛才得到的訊息看起來就像是目錄,然而並無任何訊息,故懷疑因該還需要其他的解密 ![image](https://hackmd.io/_uploads/S1p6XcHpp.png) 首先懷疑是否跟凱薩加密有關係,透過程式去跑凱薩機密,根據結果來猜測紅框處才是真正的目錄 ![image](https://hackmd.io/_uploads/ryTOvqHTT.png) 成功解題!! ![image](https://hackmd.io/_uploads/B15rucH6a.png) ###### 待編輯 ![image](https://hackmd.io/_uploads/rJFVVvyja.png) ![image](https://hackmd.io/_uploads/HkG5EDyi6.png) ![image](https://hackmd.io/_uploads/HkknND1oa.png)