# **OWASP Juice Shop Writeup**
## 1. 一星題目 ✩
* Score Board
* 果汁店最基本的一個題目,畢竟要先找到題目才能的解題...
* ~~我絕對不會說我當初這題丟網掃機才解出來~~
* 應用領域:程式碼分析
* Payload:
`score-board`
* 攻擊畫面:<br>

* 結果畫面:<br>

* DOM XSS
* 簡單的XSS,題目直接給答案能不會嗎?
* 應用領域:Cross-site Scripting
* 針對[DOM XSS](https://portswigger.net/web-security/cross-site-scripting/dom-based)的攻擊(並非攻擊後端,主要為網頁前端的漏洞)
* Payload:
`<iframe src="javascript:alert(`xss`)">`
* 攻擊畫面:<br>

* 結果畫面:<br>

* Bonus Payload
* 上一題的延伸,也是直接給答案。
* 應用領域:XSS
* 這邊主要是針對Juice Shop 在設計搜尋功能時未針對使用者的輸入進行驗證,以至於使用者能透過搜尋功能注入程式碼。
* Payload:
`<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/771984076&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>`
* 攻擊畫面:<br>

* 結果畫面:<br>

* Bully Chatbot
* 顧名思義,針對網站中聊天機器人的攻擊,並讓其交出優惠卷。
* 應用領域:天馬行空的想像。
* 打就對了,像平時煩好朋友一樣,~~刷到別人回你想要的答案為止~~
* 此挑戰須先建立帳號。
* Payload:
`Coupon code`
* 攻擊畫面:<br>

* 結果畫面:<br>

* Confidential Document
* 一個網頁,背後一定又各式各樣的資料,若沒有做好機密權限管控或是檔案的路徑洩漏,後果不堪設想。
* 身為一個一星題目,就要有一個一星題目的自覺,所以題目很好心地提供了提示:)
* 應用領域:機敏資訊洩漏
* Hint:
```javascript=
app.use('/ftp', serveIndexMiddleware, serveIndex('ftp', { icons: true }))
app.use('/ftp(?!/quarantine)/:file', fileServer())
app.use('/ftp/quarantine/:file', quarantineServer())
/* /encryptionkeys directory browsing */
app.use('/encryptionkeys', serveIndexMiddleware, serveIndex('encryptionkeys', { icons: true, view: 'details' }))
app.use('/encryptionkeys/:file', keyServer())
/* /logs directory browsing */
app.use('/support/logs', serveIndexMiddleware, serveIndex('logs', { icons: true, view: 'details' }))
app.use('/support/logs/:file', logFileServer())
/* Swagger documentation for B2B v2 endpoints */
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument))
app.use(express.static(path.resolve('frontend/dist/frontend')))
app.use(cookieParser('kekse'))
```
*
* 說到檔案,自然會想到檔案傳輸協定([ftp](https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE))
* Payload:
`ftp`
* 攻擊畫面:<br>

* 結果畫面:<br>

* Error Handling
* 某些網頁在處理使用者輸入的內容時未進行驗證或是沒有防範使用者異常的輸入,讓攻擊者可以利用此漏洞執行注入或是跨站腳本等攻擊。
* 注入或是跨站腳本的攻擊相當重要一步即是Error Handling了,攻擊者在有漏洞的系統中輸入有錯誤的程式碼,使系統返回錯誤碼,藉此取得系統資訊(ex:資料庫結構...),並組織接下來的攻擊行為。
* 應用領域:系統資訊搜集,[SQL Ingection](https://portswigger.net/web-security/sql-injection)
* Payload(可以有很多方式,這邊只舉例SQL Injection的例子):
`'`
* 你沒看錯,就只有一個符號,這符號的意義是SQL語言的括號,針對有漏洞的系統會去處理這個括號使原本正確的SQL語言發生錯誤。
* 攻擊畫面:<br>

* 結果畫面:<br>

* Privacy Policy
* 很多人會忽略這一塊,但這也是資訊收集中相當重要的一環,能夠得知攻陷網站後所能獲得的各式機敏資訊,甚至能找到一些系統如何處理使用者資訊的蛛絲馬跡。
* 應用領域:資訊蒐集
* 結果畫面:<br>

* Zero Star
* 這邊就會開始用到鼎鼎大名的神器:[Burp Suite](https://portswigger.net/burp/communitydownload)([教學](https://www.hackercat.org/burp-suite-tutorial/web-pentesting-burp-suite-total-tutorial))
* Burp的原理:
> 利用Proxy Server的特性(HTTP封包的轉送以及修改)HTTP封包在送出以前會先經過Proxy Server,使用者可以看到封包的內容並對其近行修改。在這邊最重要的特性為:**可以繞過前端的輸入驗證**,並對網站送出不合法的參數。
* 應用領域:不適當的輸入驗證
* 攻擊畫面:(將rating欄位改成0)<br>


* 結果畫面:
> 嗯沒有
* Repetitive Registration
* 小知識:
> Dry原則(Don't repeat yourself):程式設計的一個原則,簡單來說就是寫程式的時候不要做一些不必要的重複。
* 但是,註冊賬號時怎麼遵循DRY原則呢?註冊帳號時的確認密碼肯定會重複的吧?
* 是的!又是Burp Suite!在送出註冊資訊時利用Burp修改密碼確認欄位,將其更改為不同的數值。
* 應用領域:不適當的輸入驗證
* 使用工具:Burp suite
* 攻擊畫面:(修改passwordRepeat欄位)<br>


* 結果畫面:

## 2. 二星題目 ✩✩
* Login Admin
* 這邊就要提到注入攻擊中相當重要的手法-SQL Injection:
> 透過注入SQL資料庫指令的方式對不安全資料庫進行讀取、影響系統的邏輯、查詢資料庫結構。
* 此題為針對影響系統邏輯的SQL注入攻擊方式
> 假設有一個登入係統,他在近行身分驗證使用茲料庫的查詢,查詢方式如下:
> `SELECT * FROM users WHERE username = 'cat' AND password = 'cute'`
> username、password 皆為使用者的輸入,當使用者名稱(cat)AND(和)密碼(cute)皆為資料庫所記錄的數值時才能登入
> 若系統未針對使用者的輸入進行驗證,使用者可以輕易的修改此SQL指令:
> `cat '-- (-- 代表SQL的註解)`
> 被修改後的SQL變為:
> `SELECT * FROM users WHERE username = 'cat'--' AND password = 'cute'`
> 註解後面的SQL指令皆無法執行,嚴重影響登入程序,若進一步修改則能繞過登入驗證:
> `cat ' OR 1 = 1 --`
> 被修改後的SQL變為:
> `SELECT * FROM users WHERE username = 'cat' OR 1 = 1 --' AND password = 'cute'`
> 註解後面的SQL指令同樣無法執行,而此SQL指令變為:當使用者名稱(cat)OR(或)1=1的時候使用者能進行登入。
> 可想而知1絕對等於1所以使用者成功繞過驗證,並使用cat的身份登入。
* 應用領域:SQL Injection
* Payload:(密碼隨便輸入)
`admin ' OR 1=1--`
* 攻擊畫面:<br>

* 結果畫面:<br>

* Admin Section
* 得到admin的權限之後接下來就要尋找管理員專用的介面了,而題目也很好心地給提示:
` {
path: 'administration',
component: AdministrationComponent,
canActivate: [AdminGuard]
},`
* 應用領域:無
* 結果畫面:

* Five-Star Feedback
* 應用領域:惡作劇
* 進入管理介面後,我們會發現有兩個介面,分別是用戶管理以及客人的評分管理:<br>

* 身為一個攻擊者當然要把所有的5星評論刪除,讓果汁店的評價跌入谷底:<br>

* Meta Geo Stalking
* 各位肯定有拍照的經驗,但有想過一張圖片會儲存什麼資訊嗎?
> Exif(Exchangeable image file format):是專門為數位相機的相片設定的檔案格式,可以記錄數位相片的屬性資訊和拍攝資料。
* 許多照片裡都會有Exif的資料,可記錄如拍攝地點、拍攝時間等資訊。
* 這時候就需運用能分析Exif檔案的工具來提取圖片資訊([網頁工具](http://exif.regex.info/exif.cgi))。
* 應用領域:圖片分析、資訊蒐集。
* 攻擊畫面:(已先將John在圖片牆上的圖片下載下來)<br>


* 利用工具可得知,圖片的定位位於一個叫做Daniel Boone National Forest的地方
* 結果畫面:(利用忘記密碼功能修改密碼)<br>

* View Basket
* 在某些情況,我們可能會想要知道別人購物車都塞了啥東西(別問為什麼)。
* 使用工具:Burp Suite
* 應用領域:資訊蒐集、不當的權限控管。
* 攻擊畫面:(商店畫面點擊購物車、並利用Burp攔截HTTP封包)<br>


* 結果畫面:<br>

* 漏洞分析:
> 系統處理進入購物車的請求時是利用數字去認證使用者的身份,此方法及容易被攻擊者看穿,藉由修改購物車的數字去瀏覽其他使用者的購物車,且系統未針對購物車的訪問進行session的認證以至於攻擊者能隨意地瀏覽其他人的購物資訊。
* Visual Geo Stalking
* 這題完美的演示了何為看圖說故事,Emma的忘記密碼題目:我的第一個工作地為?
* Emma放在圖片牆的圖片為:我的第一個工作地...(相當有資安意識)。
* Emma的圖片:<br>

* 拉近一看:<br>

* Payload:
`ITsec`
* 再次使用忘記密碼功能輸入ITsec即可解題。
* Weird Crypto
* 再利用Burp攔截封包的時候發現有一段亂碼令人好奇:<br>

* 稍微碰過網路的都知道Cookie為儲存用戶Session的地方,讓系統能夠確認使用者的身份,也是權限控管中相當重要的一部份。
* 在token欄位中,系統使用了Base64編碼法將原本是明文的部分編碼起來,經過解碼後能得到使用者的詳細資料:<br>

* 由此可知,果汁店用了相當危險的方式管理客戶的資訊,身為一個頂級的奧客,必須將此荒謬的錯誤通報給客服:<br>

## 3. 三星題目 ✩✩✩
* 前情提要
> 這邊開始題目會較複雜,所以不會再像前面單單貼出攻擊畫面,而會較詳細的解釋原理以及流程。
* Admin Registration
* 在得知Cookie的token欄位是使用Base64去做編碼後,我們可以仔細觀察系統是如何進行權限控管。
* Admin:(注意role欄位)<br>

* Customer:(注意role欄位)<br>

* 藉由此可推斷,系統適用role欄位判斷使用者的身份,藉此決定使用者的權限。
* 應用領域:不適當的權限控管、不當的輸入驗證。
* 在解**Repetitive Registration**這題時我們得知了帳號創建所送出的封包:<br>

* 經過觀察此系統token的產生方式很有可能是透過創建帳號時所送出的封包,而在題目給的程式碼中:
```javascript=28
if (name === 'User') {
resource.create.send.before((req, res, context) => {
models.Wallet.create({ UserId: context.instance.id }).catch((err) => {
console.log(err)
})
return context.continue
})
```
*
* 藉由程式碼可知道,系統會依據封包的內容建立使用者資料,**且不會進行驗證**。
* 在創建帳號的封包中加入role的項目:<br>

* 登入建立好的帳號,並訪問administration頁面確認成果:<br>

* Bjoern's Favorite Pet
* 主要在考驗使用者資訊蒐集的能力...
* Payload:
`zaya`
* CAPTCHA Bypass
* 小知識:
> CAPTCHA:全自動分類電腦或人類的圖靈測試,司服器自動產生一個問題給使用者回答,通常問題僅有人類可以回答,目的是防止機器人任意使用網站資源,常見的有扭曲的文字或是圖片中有無特殊的物件等。
* 很明顯這個網站CAPTCHA是來亂的,此種問題明顯無法針對機器人做防護。<br>

* 應用領域:不適當的反自動化。
* 使用工具:Burp Suite Intruder、Burp Suite Repeater。
* 藉由攔截**客戶意見**的封包,並使用Repeater將封包重複發送,發現重新送出的封包中原CAPTCHA值仍能夠通過系統檢查:<br>

* 利用Burp Suite中的Intruder工具快速重新送出封包(題目要求10秒內送出10個反饋):<br>

* Database Schema
* 這邊就要介紹另一個實用工具:[sqlmap](https://tw511.com/a/01/7684.html)
> 屬於針對SQL injection漏洞的自動化測試工具,可自動偵測網頁GET送出的請求中,裡面的參數是否有SQL injection的漏洞>
* 前面已介紹過SQL Injection漏洞中影響系統邏輯的攻擊方式,此題則是查詢資料庫中的其他資料,屬於敏感資訊洩漏的弱點。
> SQL資料庫敏感資訊洩漏有分兩種,一種為查詢相同資料表的,另一種則是利用UNION函數去對另一個資料表進行查詢,詳細教學請見:[Port Swigger SQL Injection Lab](https://portswigger.net/web-security/sql-injection)。
* 應用領域:SQL Injection、不適當的輸入驗證
* Payload:
`sqlmap -u http://這邊是果汁店的網址/reset/products/search?q= --dbs --level=3 --risk=3`
`sqlmap -u http://這邊是果汁店的網址/reset/products/search?q= --schema`
`sqlmap -u http://這邊是果汁店的網址/reset/products/search?q= --tables`
* 執行成果:(會找出所有的資料表)<br>

* 漏洞分析:
> 在網站提供的程式碼中,系統並未對輸入進行驗證,所以使用者能夠透過單引號並在後續輸入SQL資料庫指令來影響資料庫系統,使其輸出本不應該輸出的資料(使用者資訊或是商店機密資訊),防範手法可使用字元替代或是限制使用者不能輸入特殊字元的方式。
* Product Tampering
* 應用領域:不適當的輸入驗證。
* 從上面利用sqlmap所得的結果可以發現User的Table中有一種身份(role)為accounting(會計):<br>

* 出於好奇,所以利用與創建admin的帳號相同的方法建立一個acounting的帳號:<br>

* 登入後,發現會計有一個**核算**的功能,經觀察後,發現會計具有**調整商品數量及價格**的權限。<br>

* 再次使用Burp Suite 攔截封包,發現網站使用與創立帳號相同的方式更動商品資訊。<br>

* 使用sqlmap 找出產品資訊的命名方式:
`sqlmap -u "http://這邊是果汁店網址/rest/products/search?q=" -T Products --columns`

* 利用Burp Suite修改封包,更改**OWASP SSL高級鑑識工具(O-Saft)**的商品說明:<br>

* 結果畫面:<br>


* Payback Time
* 在這個商店花那麼多錢,是時候賺點錢回來了。
* 應用領域:不適當的輸入驗證。
* 隨便買一個東西,利用Burp Suite攔截封包:<br>

* 更改quantity欄位成負數,讓商店要給我們錢錢:<br>

* 送出訂單,等待財富自由的到來:<br>

* Login Jim,Bender
* 簡單的SQL Injection。
* SQL Injection、不適當的輸入驗證。
* Payload:
`jim@juice-sh.op '--`
`bender@juice-sh.op '--`
* Forged Feedback
* 應用領域:不適當的權限控管。
* 填寫客戶意見,並在送出時利用Burp Suite抓包:<br>

* 觀察封包內容,可見網站是用UserID進行權限的控管,所以在封包中更改UserId欄位:<br>

* 送出後於管理者頁面查看結果:<br>

* Forged Review
* 應用領域:不適當的權限控管。
* 填寫商品評論,並利用Burp Suite進行抓包:<br>

* 觀察封包內容,可見網站是利用author欄位進行權限控管,所以在封包中更改author欄位:<br>

* 送出後再商品評論頁面查看結果:<br>

* Upload Type
* 屬於相當常見的漏洞,許多網頁在製作上傳檔案功能時會對檔案類型進行驗證,目的是防止使用者上傳惡意檔案(惡意程式或網馬等等)
> 網馬(webshell)就是一種可以在web伺服器上執行的後臺指令碼或者命令執行環境。
* 若網站未針對使用者的上傳進行驗證,使用者非常有可能藉由此漏洞得到網站的後台管理權限,進而對網站造成破壞或是偷取使用者機密資料。
* 此網站的檔案上傳點是於投訴功能中,上傳發票的地方:

* 有些網站防護僅會針對網站前端做(亦即網站會在使用者選擇檔案時進行驗證,例如:過濾掉非pdf或是zip的副檔名的檔案):<br>


* 使用者可透過更改檔案副檔名的方式繞過驗證:


* 最後使用Burp Suite攔截封包,並再次將副檔名改回來:<br>

* 成功將非pdf,zip檔案上傳至系統:<br>

*