天天看點

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

DVWA實戰篇-sql injection(工具篇)

SQL Injection(SQL注入)

一.漏洞描述

當應用程式使用輸入内容來構造動态SQL語句以通路資料庫時,如果對輸入的參數沒有進行嚴格的過濾或者過濾不完整将會導緻SQL注入攻擊的産生。惡意使用者通過構造特殊的SQL查詢語句把SQL指令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL指令。進而可以擷取到資料庫的相關資訊,包括資料庫賬号密碼資訊,甚至可上傳木馬,進而控制伺服器。

二.漏洞驗證

Low

1.輸入1' or  1=2 # 判斷發現存在注入點
           
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

2.使用sqlmap 直接探測,可以發現資料庫的版本

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

3.使用sqlmap 探測資料庫

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

4.使用sqlmap 跑目前資料庫和表

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

5.使用sqlmap直接拖庫到本地

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

Medium

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

送出方式變成post

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

Medium 在Low的基礎上加了

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

mysql_real_escape_string() 函數轉義 SQL 語句中使用的字元串中的特殊字元。

下列字元受影響:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,則該函數傳回被轉義的字元串。如果失敗,則傳回 false。

1.使用sqlmap –r 讀取請求頭和form  直接探測資料庫版本

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

2.直接加參數跑表名,拖庫

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

High

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

加上LIMIT 1,隻要找到了對應的一條記錄,就不會繼續向下掃描了,效率會大大提高。 LIMIT 1适用于查詢結果為1條(也可能為0)會導緻全表掃描的的SQL語句。 

如果id是索引的話,就不需要加上LIMIT 1,如果是根據主鍵查詢一條記錄也不需要LIMIT 1,主鍵也是索引。 

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

1.發現送出頁面和響應頁面不在一個頁面 使用—second-order +”響應URL”

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

2.使用sqlmap 直接+參數 拖庫

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

三.漏洞進階

-smart   啟發式快速判斷,節約時間

--sql-shell  執行指定sql指令 (尋找檔案絕對路徑)

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

--is-dba 檢視目前注入點資料庫權限是否為dba:True

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)
DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

--os-shell 擷取系統互動shell

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

提權後,執行系統指令

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

建立使用者名為789密碼為789的使用者

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

檢視使用者組,尋找管理者組

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

為789使用者提權

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

檢查使用者

DVWA實戰篇-sql injection(SQL注入工具篇)SQL Injection(SQL注入)

四.修複建議

  1. 建議使用統一的規則庫對使用者的所有輸入進行安全性驗證,驗證不通過的應直接拒絕;
  2. 建議所有應用與資料庫互動處均使用參數化查詢,嚴禁将使用者輸入直接與SQL查詢語句進行拼接;
  3. 對進入資料庫的特殊字元('"\尖括号&*;等)進行轉義或編碼轉換;
  4. 嚴格限制變量類型,資料庫中的存儲字段必須對應為int型;
  5. 資料長度應該嚴格限制,這能在一定程度上防禦比較長的SQL注入語句;
  6. 網站每個資料層的編碼統一,建議全部使用UTF-8編碼,上下層編碼不一緻有可能導緻一些過濾模型被繞過;
  7. 嚴格限制網站使用者的資料庫的操作權限,給此使用者提供僅僅能夠滿足其工作的權限,進而最大限度的減少注入攻擊對資料庫的危害;避免網站顯示SQL錯誤資訊,比如類型錯誤、字段不比對等,防止攻擊者利用這些錯誤資訊進行一些判斷。