0x01-SQL注入-JuiceShop開篇

這是什麼?

OWASP Juice Shop 是一個練習網頁應用測試的工具。

這是 Github 鏈接

本篇是 OWASP Top 10 系列的起始篇。

對於不清楚 OWASP 是什麼的同學,看這裏

簡單說 OWASP 是一套網頁應用的測試列表,你可以按照它的指示一項一項地對網頁應用進行測試,

它會告訴你該漏洞的原理,測試方式以及應對策略,十分詳細,是行業標杆。

在這裏插入圖片描述

部署 Juice Shop

可以在 Juice Shop 的 Github 頁面看到,Juice Shop 可以被一鍵部署到 Heroku(是免費的),你只需要註冊一個賬號即可。同時也可以下載到本地,部署到虛擬機。

Heroku很方便,註冊個賬號,點一下 Github 上的部署,就搞定了。

部署完成之後,在個人帳號的 Settings 一欄,往下拉可以看到自己的應用的 Heroku 域名。

在這裏插入圖片描述

在這裏插入圖片描述

直接訪問即可。

在這裏插入圖片描述

其他部署方式見文檔。

幫助文檔

幫助文檔在這裏,這裏有所有你需要的資料。

另外,在瀏覽器,訪問 https://example.herokuapp.com/#/score-board,將看到一個計分板,這裏按照漏洞的類型做了分類,並且每個分類中用難度係數(1-6星)對每一個挑戰做了評估,可以選擇適合自己的開始。

在這裏插入圖片描述

在這裏插入圖片描述

第一個挑戰

排在 OWASP Top 10 第一位的是 Injection

在 score-board 把 1-2 星都選上,然後選擇 Injection,之後我就按順序往下走了。

在這裏插入圖片描述

點擊右上角 Account,找到 Login 界面。隨意輸入用戶名密碼,報錯了。

在這裏插入圖片描述

這個練習是一個經典 SQL 注入。首先在 Burp Suite 中攔截一個請求,然後右鍵 Send to Repeater (Ctrl + R 也行)。

在這裏插入圖片描述

這裏有什麼漏洞?

這裏的漏洞是 Bypass Login Authentication,繞過登陸驗證。

攻擊者只需要在用戶名處,構造一個恆爲 true 的表達式,然後註釋掉接着的部分,即使不輸入密碼,也可以成功繞過登錄驗證。

OWASP 關於 Injection 的解釋在這裏

Example Attack Scenarios 裏面,有對於原理的詳細講解。

在這裏插入圖片描述

漏洞是怎麼造成的?

在 OWASP 的解釋中可以看到,正式程序員在開發註冊流程的時候,手動拼接 SQL 請求,沒有對用戶的輸入做出篩選,過濾和驗證,導致的漏洞。

怎麼這樣的注入漏洞是否存在?

舉個例子,某程序員在代碼中拼接瞭如下的 SQL 語句。

query = "SELECT * FROM user 
where username =' + $username + 
'and password=' + 
hash_func($password) + 
"';""

這裏,在拼接的時候,程序員選擇了使用單引號,',當然也有可能選擇使用雙引號,",只需要轉義一下。

所以,測試這樣的注入是否存在,只需要在用戶名處輸入一個單引號,或者雙引號,如果網頁報出了服務器端或者數據庫端的錯誤,那麼注入漏洞就存在。

輸入 test:test 或者 ":test 的時候,點擊提交報的是 Invalid email or password.

在這裏插入圖片描述

在這裏插入圖片描述

而如果我輸入一個單引號,頁面報錯是一個奇怪的 [object Object]

在這裏插入圖片描述

初步可以斷定,登錄驗證可繞過。

在 Repeater 裏面查看一下服務端的返回,是這樣的。

在這裏插入圖片描述

後端的錯誤展示了很多信息,如使用的是 SQLite 數據庫,具體的 SQL 語句以及密碼。

利用漏洞

原理知道了,那麼只需要構造一個 SQL 表達式,結果恆爲 true 即可繞過驗證。

在用戶名處輸入

' or 1 = 1 -- 

即可繞過驗證。

解釋:

  • 第一個單引號與 email 的單引號配對,相當於 email = ''
  • or 是邏輯表達式,說 email = '' 或者 1 = 1
  • 1 = 1 是恆爲 true 的,所以整個表達式恆爲 true
  • 最後的 --,將剩下的 SQL 部分註釋掉,也就是忽略密碼部分驗證。注意,-- 後面一定要加上一個空格,不然後面的註釋不生效。
    最後的 SQL 表達式會是
"SELECT * FROM Users WHERE email = '' or 1 =1 -- AND password = ...

執行一下,成功繞過登錄驗證。

在這裏插入圖片描述

預防措施

見 OWASP How to Prevent 部分,比我講的好多了。


參考鏈接:

  • https://github.com/bkimminich/juice-shop
  • https://owasp.org/
  • https://pwning.owasp-juice.shop/
  • https://owasp.org/www-project-top-ten/OWASP_Top_Ten_2017/Top_10-2017_A1-Injection
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章