DVWA實驗--SQL手工注入(Low)


什么是SQL注入?

SQL Injection,即SQL注入,是指攻擊者通過注入惡意的SQL命令,破壞SQL查詢語句的結構,從而達到執行惡意SQL語句的目的。

Sql 注入帶來的威脅主要有如下幾點

  • 猜解后台數據庫,這是利用最多的方式,盜取網站的敏感信息。
  • 繞過認證,列如繞過驗證登錄網站后台。
  • 注入可以借助數據庫的存儲過程進行提權等操作

自動化的注入神器sqlmap固然好用,但還是要掌握一些手工注入的思路,下面簡要介紹手工注入(非盲注)的步驟。

1.判斷是否存在注入,注入是字符型還是數字型

2.猜解SQL查詢語句中的字段數

3.確定顯示的字段順序

4.獲取當前數據庫

5.獲取數據庫中的表

6.獲取表中的字段名

7.下載數據

我們使用有現成漏洞的dvwa實驗環境來進行注入,選擇安全級別為LOW

image

查看SQL注入測試頁面的源碼:

image

image

通過源碼我們發現它對參數沒有任何的過濾  直接帶入數據庫進行查詢  我們猜測肯定給存在字符型sql注入

開始工作:

1. 判斷是否存在注入,注入是字符型還是數字型

輸入1,

image

查詢成功。

輸入1’and ‘1’ =’2,查詢失敗,返回結果為空:

image


輸入1’or ‘1234 ’=’1234,查詢成功:

image

說明存在字符型注入

接下來我們猜解sql查詢語句中的字段數 (逐漸增加order by后面的數字的大小進行猜測)

image

image

image

當輸入3#時就出現了錯誤,說明只有兩列的數據   查詢的表的字段數是2

union 運算符可以將兩個或兩個以上 select 語句的查詢結果集合合並成一個結果集合顯示,即執行聯合查詢。需要注意在使用 union 查詢的時候需要和主查詢的列數相同,而我們之前已經知道了主查詢列數為 2,接下來就好辦了。
輸入1' union select database(),user()#進行查詢 :

  • database()將會返回當前網站所使用的數據庫名字.
  • user()將會返回執行當前查詢的用戶名.

image

同理我們再輸入 1' union select version(),@@version_compile_os#進行查詢:

version() 獲取當前數據庫版本.

@@version_compile_os 獲取當前操作系統

image

進行回顯:

image

接下來我們嘗試獲取 dvwa 數據庫中的表名。
information_schema 是 mysql 自帶的一張表,這張數據表保存了 Mysql 服務器所有數據庫的信息,如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。該數據庫擁有一個名為 tables 的數據表,該表包含兩個字段 table_name 和 table_schema,分別記錄 DBMS 中的存儲的表名和表名所在的數據庫。

我們輸入1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#進行查詢:

image

通過上圖返回信息,我們再獲取到:dvwa 數據庫有兩個數據表,分別是 guestbook 和 users .

接下來我們獲取表中的字段名     1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'# 

image

其中,user和password正是我們想要的

下面我們獲得字段中的數據         1' union select user,password from users#

image
爆出來的一長串16進制字符就是md5加密的密碼

通過md5解密即可得到密碼

image

image

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM