
背景:
團隊內一位資深同事在去年給大家share了最新的OWASP Top 10 的變化以及內容,并結合了OWASP的Juice Shop進行講解,內容非常簡潔易懂,讓我以最簡單的方式了解到了安全測驗是什么,希望通過整理,讓更多的人有所了解
環境準備:
1、Juice Shop Github 地址 請按照其中Docker Container 部分搭建環境,我采用的是 v7.5.1這個版本,所以第2,3步相應的變為
docker pull bkimminich/juice-shop:v7.5.1
docker run --rm -p 3000:3000 bkimminich/juice-shop:v7.5.1
安裝成功并啟動后

網頁中打開localhost:3000,即可看到Juice Shop的首頁
2、Charles,下載安裝,免費試用一個月
實踐 - OWASP Top 10
首先 OWASP 是 Open Web Application Security Project 的縮寫,一個非盈利性組織, 詳情請自行Google
下圖為2013年和2017年的對比版本:

A1:2017 - 注入

練習1 預定圣誕節特供(已洗掉的商品):
步驟1: 打開Juice Shop的首頁
步驟2:打開DevTools -> Network, 用delete按鈕清除請求
步驟3:在Search的地方什么都不用輸入,點擊search搜索,并在Network中找到發送的請求 http://localhost:3000/rest/product/search?q=,看Response中有回傳資料,一共有28條資料
步驟4:在search的輸入框里輸入 '; 然后點search,會在Network里看到發出去另一條請求并且報錯,檢查后找到報錯內容
sql: "SELECT * FROM Products WHERE ((name LIKE '%';%' OR description LIKE '%';%') AND
deletedAt IS NULL) ORDER BY name”
步驟5:找到輸入內容拼接的地方,進行修改,在search的輸入框里輸入 '))-- 然后再點擊Search按鈕,查看Response里的回傳資料有32條
視頻:

練習2 登錄管理員用戶
步驟1:進入Login 頁面
步驟2:輸入任意賬戶和密碼得到一個錯誤
步驟3:試試 '# 就會看到報錯資訊,找到其中的SQL陳述句
"sql":"SELECT * FROM Users WHERE email = ''#' AND password = 'e855b45052de9a85655f584589edd0f9'"
步驟4:根據出錯點,重新輸入 ’ or 1=1-- 成功登錄管理員賬戶了
練習3 找到管理員頁面
步驟1:在DevTools里點Source Tab,找到dist目錄,點juice-shop.min.js,搜索 ‘administr’ 這個字串,會找到一個頁面url ‘/administration’
步驟2:在上一個賬戶里,將URL中的search替換成administration,
http://localhost:3000/#/search
http://localhost:3000/#/administration
步驟3:你就會見到用戶和Comments
A2:2017 - 失效的身份認證
練習4 更改Bender的密碼
步驟1:在A1的練習2中的管理員頁面,找到Bender的Email
步驟2:利用SQL注入的方式,即在login的賬戶中輸入 bender@juice-sh.op’-- 進入到Bender的賬戶,可以點擊Contact Us驗證,會看到Author的地方有Bender的顯示
步驟3:打開DevTools -> Network, 清空請求,點上邊的 Change Password, 分別在當前密碼,新密碼,重復新密碼三個輸入框輸入任意字串,觀察請求
步驟4:打開新Tab,在新Tab中分別進行以下3中嘗試
http://localhost:3000/rest/user/change-password?current=A # 401Password cannot be empty
http://localhost:3000/rest/user/change-password?current=A&new=B # New and repeated password do not match.
http://localhost:3000/rest/user/change-password?current=A&new=B&repeat=C # New and repeated password do not match.
步驟5:猜測是否可以不給默認密碼,進行第4次嘗試,成功,
http://localhost:3000/rest/user/change-password?new=B&repeat=B # 200 success
A3:2017 - 敏感資料泄露
例子5 上個例子中修改密碼時,密碼是MD5加密的,非常容易反解密
例子6 非技術上,請不要把你的密碼曝光到網上
A4:2017 - XML 外部物體 (XXE)
參考參考:XML外部物體(XXE)注入詳解
A5:2017 - 失效的訪問控制
練習7 0星評價
步驟1: 進入 Contact Us
步驟2:其他內容都填好,不給 星星 好評
步驟3:Submit 按鈕是不讓點的
步驟4:點上3星好評,但立馬點掉
步驟5:可以Submit了,成功
例子8 之前例子中提到的/administration頁面,理論上是只有管理員可以訪問這個頁面的,但是可以通過掃描源檔案或暴力破解的方式查到
例子9 掃描同時可以找到一個被程式員遺忘了的備份檔案夾
網上有很多開源掃描工具可以用,作為練習,可以使用owasp zap
練習10 獲取其他人購物車資料
步驟1:用 ‘admin@ juice-sh.op/admin123’ 登錄
步驟2:打開Charles, 為了使用Charles,需要把URL替換成以下的URL,這樣就不需要配置代理了
http://localhost.charlesproxy.com:3000/#/search
步驟3:點購物車,DevTools中會看到發出去的請求http://localhost.charlesproxy.com:3000/rest/basket/1

步驟4:basketid就是userid,在Charles中修改這個URL,改為http://localhost.charlesproxy.com:3000/rest/basket/3,意味著我期望在我的賬戶中請求Bender的購物車資料,然后執行,就會看到自己的購物車里顯示的是Bender購物車里的資料

練習11 更改訂單讓自己錢包鼓起來
步驟1:在購物車中點增加商品數量,截獲請求http://localhost.charlesproxy.com:3000/rest/basket/3
步驟2:修改回傳的response,就可以看到總價變成了負數

練習12 重定向到指定網址
步驟1:將滑鼠滑動到右上角的Fork me on Github, 在DevTools的頁面中可以看到,a標簽的href屬性有個重定向地址

步驟2:將href的鏈接改為 redirect?to=https://google.ie, 然后點擊頁面的Fork me
步驟3:你會得到一個錯誤頁面,但是如果你將值改為redirect?to=https://google.ie/?https://github.com/bkimminich/juice-shop,就會成功將網頁帶到Google去,成功
A6:2017 - 安全配置 錯誤
暫無
A7:2017 - 跨站腳本攻擊
反射性XSS:APP和API都有未經過濾的用戶輸入作為網頁的一部分輸出
存盤型XSS:APP或API會存盤未經過任何處理的用戶輸入,這些資料在未來會被查看
DOM型XSS:JS框架或SPA會動態引入攻擊者可操縱的資料
練習13 反射型XSS攻擊
反射型攻擊意思就是惡意的query直接來自受害者發送出去的請求,
步驟1:在啟動了Juice Shop的網站,直接訪問http://localhost:3000/#/search?q=%3Cscript%3Ealert(%22XSS1%22)%3C%2Fscript%3E,點擊回車后會發現后邊的部分已經變成
練習14 反射型XSS攻擊
步驟1:
嘗試訪問下面的鏈接
http://localhost:3000/#/search?q=%3Cscript%3Edocument%2EquerySelector%28%22%2Enavbar%2Dlogo%22%29%2EsetAttribute%28%22src%22%2C%22%2Fpublic%2Fimages%2Fproducts%2Fapple_juice%2Ejpg%22%29%3B%3C%2Fscript%3E
其實它其中真正想表達的意思是執行這段code
document.querySelector(".navbar-logo").setAttribute("src", "/public/images/products/apple_juice.jpg");
它將你的主站logo改成了杯子和櫻桃的圖片,左上角

練習15 反射型XSS攻擊
步驟1: 嘗試下面的鏈接
http://localhost:3000/#/search?q=%3Cspan%3Ea%3C%2Fspan%3E
會發現 Search Results旁邊多了一個a,這意味著不僅惡意的payload會被執行,同時頁面中還有可能試圖顯示未經過任何處理的輸入

練習16 持久化的XSS攻擊
步驟1: 打開charles
步驟2:在注冊界面,注冊一個賬號,charles中會看到一個API

步驟3:選中users下/,點擊上邊灰色的六邊形框,Enable Breakpoints
步驟4:在注冊頁面再填寫一個注冊用戶的資訊,然后點擊Register,Charles會捕捉到這個請求,然后斷點在那里,這時,已經繞過了前端對Email的校驗,準備發請求了

步驟5:在charles的斷點中選擇Edit Request Tab,以及底部的JSON Text,注意是JSON Text,如果你選了JSON會發現,在那里邊編輯Email,會進行字符截斷,但是選擇JSON Text不會,將其中Email的值改為,然后點擊底部的Execute,這個請求就會發出去,然后Response回來還會進到這里,繼續點擊Execute就行,這樣注入資訊就會被記錄到資料庫中持久化下來
步驟6:不知道大家還記得之前的/administration頁面嗎,嘗試用任意一個賬戶登錄,然后訪問這個頁面,就會看到有XSS2的彈窗,持久化XSS攻擊成功

步驟7:因為在管理員頁面,有顯示所有賬戶的Email,當我們的注入被讀取時,就會產生影響
練習17 持久化的XSS攻擊
步驟1 - 步驟4 同上
步驟5:同樣的方法,將Email 改為,其他相同
步驟6:仍然是訪問/administration頁面,就會看到頁面背景色變為粉色

練習18 根本不用前端的持久化XSS攻擊
步驟1:在search頁面里,點擊某一個商品的logo,注意查看DevTools里有會有這樣一個請求

步驟2:截取其中一部分,直接打開另一個Tab,粘貼進去
http://localhost.charlesproxy.com:3000/api/Products/1
步驟3:會看到如下的Response,而且這是一個Get請求
{
"status": "success",
"data": {
"id": 1,
"name": "Apple Juice (1000ml)",
"description": "test",
"price": 1.99,
"image": "apple_juice.jpg",
"createdAt": "2019-04-09T08:19:13.430Z",
"updatedAt": "2019-04-09T10:09:58.409Z",
"deletedAt": null
}
}
步驟4:猜測這個API也接受Post請求,那我們接下來用Curl命令在命令列里發一個Put請求
curl -X PUT "http://localhost:3000/api/Products/1" -H "Content-Type:application/json" --data-binary '{"description":"<script>alert(\"XSS3\")</script>"}'
步驟5:會看到Response 成功了,在search頁面任何用戶訪問Products頁面都會看到XSS3彈窗,攻擊成功
A8:2017 - 不安全的反序列化
練習19 執行一個DoS攻擊
步驟1:用人工檢查或自動化URL發現工具,會找到一個Swagger API 檔案,
http://localhost:3000/api-docs/#/Order/post_orders
步驟2:會看到一個Orders的Post請求,看到其中的Example中orderLinesData欄位可以是任意的Json資料
步驟3:打開DevTools后點擊Swagger中Try it Out,以及Execute,看到"No Authorization header was found"的Error
步驟4:回到剛才的search頁面,打開DevTools,用任意賬號登錄,查看whoami這個API,找到Authorization

步驟5:將剛才找到的Authorization內容放到Swagger里右上角有一個Authorize的輸入框里
步驟6:再Execute一下,看到正確的Response
步驟7:接下來我們執行一個DoS攻擊,DoS即拒絕服務
步驟8:在Value中將orderLinesData那一行改為并Execute
“orderLinesData”: “(function dos() { while(true); })()”
步驟9:看Response就發現死回圈的代碼已經在server里執行了,攻擊成功
A9:2017 - 使用含有已知漏洞的組件
練習20 找到軟體中使用的組件
步驟1:點選單中About Us,在點擊文字中唯一的鏈接,注意觀察這個URL的地址,其中含有 /ftp/legal.md?md_debug=true
步驟2:截斷ftp后邊的部分,回車,會看到被程式員遺忘了的備份檔案,點擊其中的package.json.bak下載,看到Error提示,只有以md和pdf結尾的檔案可以下載
步驟3:將package.json.bak改為package.json.bak%2500.pdf試一下,下載成功,檢查這個json檔案中有
“sanitize-html”: “1.4.2”
接下來就可以利用1.4.2版本的sanitize-html中已知的安全漏洞去攻擊網站了,查找成功
A10:2017 - 不足的日志記錄和監控
練習21 記錄不安全的嘗試
步驟1:回想之前的下載嘗試,如果有充分的Log記錄,這樣的行為是應該被記錄的
步驟2:打開另一個命令列視窗,執行
docker ps
步驟3:找到你正在運行的Container, bkimminich/juice-shop:v7.5.1,執行
docker exec -it container_id sh
ls
步驟4:看到一個類似access.log.2018-10-25的檔案
步驟5:執行
tail -f access.log.2018-10-25
步驟6:當你進入search頁面的時候,記了很多Log,但再嘗試下載上邊的檔案時,并沒有相應的Log記錄,其實有很多資訊都是可以記錄在Log里的,但結合之前的A3,又不應該記錄太多敏感資訊
總結
至此,大部分的情況都已經通過例子或練習share給大家了,這些只是我淺顯的理解,但就這些東西如果我們能舉一反三,也是可以發現不少問題或者預防不少問題的
參考:
https://www.owasp.org/images/6/67/OWASP_AppSec_Research_2010_OWASP_Top_10_by_Wichers.pdf
最后: 可以關注公眾號:傷心的辣條 ! 進去有許多資料共享!資料都是面試時面試官必問的知識點,也包括了很多測驗行業常見知識,其中包括了有基礎知識、Linux必備、Shell、互聯網程式原理、Mysql資料庫、抓包工具專題、介面測驗工具、測驗進階-Python編程、Web自動化測驗、APP自動化測驗、介面自動化測驗、測驗高級持續集成、測驗架構開發測驗框架、性能測驗、安全測驗等,
在這里我向大家推薦一個自動化學習交流群,交流學習群號:914172719 里面會分享一些資深架構師錄制的測驗有關視頻錄像…
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
好文推薦
轉行面試,跳槽面試,軟體測驗人員都必須知道的這幾種面試技巧!
面試經:一線城市搬磚!又面軟體測驗崗,5000就知足了…
面試官:作業三年,還來面初級測驗?恐怕你的軟體測驗工程師的頭銜要加雙引號…
什么樣的人適合從事軟體測驗作業?
那個準點下班的人,比我先升職了…
測驗崗反復跳槽,跳著跳著就跳沒了…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296489.html
標籤:其他
