作者:震靈
注入環境:DVWA
探測步驟:
1、首先探測是否可以注入以及注入方式

原SQL語句為
SELECT * FROM xxx WHERE a='';
注入后為
SELECT * FROM xxx WHERE a='' or '1'='1' --;
這樣注入有常見情況有兩種用途
第一種用途是用於登錄,可以用作萬能密碼直接進入后台
第二種用途是用於查詢,若查詢出所有內容則代表可以進行注入
此處展示的是第二種用途
2、探測列數
由於接下來要采用union探測內容,而union的規則是必須要列數相同才能正常展示,因此必須要探測列數,保證構造的注入查詢結果與元查詢結果列數與數據類型相同

探測采用order by
SELECT * FROM xxx WHERE a='' ORDER BY 1;
order by 1代表按第一列升序排序,若數字代表的列不存在,則會報錯,由此可以探測出有多少列
3、探測展示位置
SELECT * FROM xxx WHERE a='' UNION SELECT 1,2 ;

並不是所有的查詢結果都會展示在頁面中,因此需要探測頁面中展示的查詢結果是哪一列的結果。上述SQL語句在本示例中展示了1,2,代表1,2列被展示在了頁面中。因此可以利用1,2列進行注入查詢。
4、探測數據庫名、表名、列名
SELECT * FROM xxx WHERE a='' UNION SELECT 1,schema_name from information_schema.schemata;
上述SQL語句是查詢數據庫名的SQL語句,查詢表名和列名的語句很類似,翻閱文檔即可。

在探測數據庫名、表名、列名的時候需要一些經驗,經驗不會影響最后的結果,但是經驗會影響注入時間。名字如Admin,User的一般有可能是與用戶有關的數據庫,可以特別關注。
5、探測用戶信息
最后一步,探測用戶信息。其實有了以前的鋪墊,探測用戶信息是一個很簡單的事情。
SELECT * FROM xxx WHERE a='' UNION SELECT User,Password FROM users ;
通過這一條數據便可以探測出所有用戶的信息

部分數據使用了MD5加密,可以復制到MD5解密網站進行解密
6、更高級的SQL注入
對於有防護措施的程序,需要采用更高級的SQL注入手段進行諸如,比如替換SQL關鍵字大小寫等手段。對於十分優秀的程序,SQL注入的意義就不大了,需要采用更高級的手段進行滲透測試。
