SQL手動注入解析

做者:震靈

注入環境:DVWA

探測步驟:

一、首先探測是否能夠注入以及注入方式


原SQL語句爲sql

SELECT * FROM xxx WHERE a='';

注入後爲數據庫

SELECT * FROM xxx WHERE a='' or '1'='1' --;

這樣注入有常見狀況有兩種用途
第一種用途是用於登陸,能夠用做萬能密碼直接進入後臺
第二種用途是用於查詢,若查詢出全部內容則表明能夠進行注入
此處展現的是第二種用途測試

二、探測列數

因爲接下來要採用union探測內容,而union的規則是必需要列數相同才能正常展現,所以必需要探測列數,保證構造的注入查詢結果與元查詢結果列數與數據類型相同

探測採用order by網站

SELECT * FROM xxx WHERE a='' ORDER BY 1;

order by 1表明按第一列升序排序,若數字表明的列不存在,則會報錯,由此能夠探測出有多少列加密

三、探測展現位置

SELECT * FROM xxx WHERE a='' UNION SELECT 1,2 ;


並非全部的查詢結果都會展現在頁面中,所以須要探測頁面中展現的查詢結果是哪一列的結果。上述SQL語句在本示例中展現了1,2,表明1,2列被展現在了頁面中。所以能夠利用1,2列進行注入查詢。code

四、探測數據庫名、表名、列名

SELECT * FROM xxx WHERE a='' UNION SELECT 1,schema_name from information_schema.schemata;

上述SQL語句是查詢數據庫名的SQL語句,查詢表名和列名的語句很相似,翻閱文檔便可。

在探測數據庫名、表名、列名的時候須要一些經驗,經驗不會影響最後的結果,可是經驗會影響注入時間。名字如Admin,User的通常有多是與用戶有關的數據庫,能夠特別關注。orm

五、探測用戶信息

最後一步,探測用戶信息。其實有了之前的鋪墊,探測用戶信息是一個很簡單的事情。blog

SELECT * FROM xxx WHERE a='' UNION SELECT User,Password FROM users ;

經過這一條數據即可以探測出全部用戶的信息

部分數據使用了MD5加密,能夠複製到MD5解密網站進行解密排序

六、更高級的SQL注入

對於有防禦措施的程序,須要採用更高級的SQL注入手段進行諸如,好比替換SQL關鍵字大小寫等手段。對於十分優秀的程序,SQL注入的意義就不大了,須要採用更高級的手段進行滲透測試。文檔

相關文章
相關標籤/搜索