字符型SQL注入


字符型SQL注入

很早就基於DVWA實現了字符型的SQL注入,但是一直感覺自己沒有理解的特別清楚,這次又看了一下網上的一些講解,試着總結一下。以下是我的一寫淺薄見解,請大家批判着看。

基本原理

看看這條SQL語句

  1. $query="select first_name from users where id='$_GET['id']'";

這句SQL的語句就是基於用戶輸入的id在users表中找到相應的first_name,正常用戶當然會輸入例如1,2等等。但是如果有人輸入這樣的內容呢?

  1. 1' union select database() #;

這樣的話這句SQL語句就變成了這樣

  1. select first_name from users where id='1'unionselect database()#'

這樣的話,我們不僅可以得到id=1的first_name,還可以得到當前數據庫的相關信息,這是開發人員所沒有想到的。以上只是一個簡單的SQL注入的例子。
從根本上講,當開發人員對用戶的輸入過濾不嚴,造成了用戶可以通過輸入SQL語句控制數據庫,就會產生SQL注入漏洞。

SQL注入的幾個基本步驟

  1. 確定注入漏洞的類型和存在問題的參數
  2. 確定字段數
  3. 分析數據庫和數據表的相關信息
  4. 實施具體攻擊

字符型SQL注入

將DVWA安全等級調為low

(1)確定問題參數和漏洞類型
可以看到,在URL中,參數為id,當輸入1’時報錯,當輸入1”時正常顯示 ,可以判斷問題參數為id,漏洞類型為字符型。
(2)確定字段數
只有確定了字段數,才可以使用union這個關鍵詞連接我們自己的查詢語句。可以采用order by來確定字段數
例如:
輸入1’ order by 1 #
表示通過第一字段的順序進行排序,當輸入order by x報錯時,就說明沒有這個字段,就可以得到輸出的字段數了。在這個系統中,經過測試,輸出字段數為2.

(3)確定數據庫和數據表
現在我們已經知道了輸出的字段數了,可以使用union這個關鍵詞了。首先試試確定數據得名字,設計如下payload
1’ union select database(),2 #
得到了想要的內容

這個數據庫名字就是dvwa。
有了數據庫下一步就是確定其中有哪些數據表,我們可以通過mySQL數據庫自帶的information_schema來知道,這個information_schema就是用來存儲mySQL數據庫所有信息的數據庫。可以看到數據庫中有一些數據表
其中有tables數據庫,用來存放數據表的信息。插入以下的payload
1’ union select table_name,1 from information_schema.tables where table_schema=’dvwa’ #
得到了數據表

那個users表一看就知道放了不少好東西。。。但是 我們還不知道這個數據表里有哪些字段,這就要用到其中columns這個數據庫了。插入如下的payload
1’ union select column_name,2 from information_schema.columns where table_name=’users’ and table_schema=’dvwa’ #
這下得到了好多數據

(4)具體實施攻擊手段
user和password這兩個字段我們都知道了,那就看看吧
插入如下payload
1’ union select user,password from users #
OK ,get it!

但是不好意思,密碼都被md5加密過了,而且md5加密是不可逆的,一些軟件可能破解md5值,是做了很大一張數據表,將這么多字符串的md5值和本身列成一條條記錄,然后一個個枚舉,如果運氣不錯,你輸入的md5值正好在這個表中,那就輸出相應的字符串,若果不存在,那就破譯失敗。這就告訴我們密碼不要設那么簡單,如果你賬戶所在的數據庫被脫庫了,密碼設的復雜一點,至少黑客無法直接獲取你的密碼。






免責聲明!

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



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