跳到主要内容

常用符号:函数:语句归类

常用符号

注释符

注释符说明
#(%23)单行注释
在URL中#表示锚点,也就是hash路由,带上#不会请求后端路由,而是刷新前端路由,所以测试一般用URL编码后的%23
--
-- -
+--+
单行注释
注意--后还有一个空格;其中+号会被URL解码为空格
/**/多行(内联)注释
一般用于绕过WAF、代替空格等

运算符

运算符说明
&&与,同 and
||或,同 or
!非,同 not
^异或,同xor
\转义符
~一元比特反转
<<左移
>>右移
+加,URL解码后可替代空格
-减法
*乘法
/div除法
%mod取余
=等于
<>, !=不等于
>大于
<小于
<=小于等于
>=大于等于
BETWEEN在两值之间
NOT BETWEEN不在两值之间
IN在集合中
NOT IN不在集合中
<=>严格比较两个NULL值是否相等
LIKE模糊匹配
REGEXP 或 RLIKE正则式匹配
IS NULL为空
IS NOT NULL不为空

全局变量

所有全局变量可通过如下语句查看:

SHOW GLOBAL VARIABLES;
SHOW VARIABLES;
变量说明
@@VERSION返回版本信息
@@GLOBAL.VERSION同@@VERSION
@@HOSTNAME返回安装的计算机名称
@@BASEDIR返回MYSQL绝对路径
@@DATADIR数据路径

常用函数

完整的各种函数可以参考:https://www.runoob.com/mysql/mysql-functions.html

数据库信息

函数说明
USER()获取当前操作句柄的用户名,同SESSION_USER()CURRENT_USER(),有时也用SYSTEM_USER()
DATABASE()获取当前选择的数据库名,同SCHEMA()
VERSION()获取当前版本信息

数据类型转换

函数说明
ASCII(str)返回字符串第一个字符的ASCII值
ORD(str)ORD(str)
HEX(N_S)参数为字符串时,返回 N or S 的16进制字符串形式;为数字时,返回其16进制数形式
UNHEX(str)HEX(str) 的逆向函数将参数中的每一对16进制数字都转换为10进制数字,然后再转换成 ASCII 码所对应的字符
BIN(N)返回十进制数值 N 的二进制数值的字符串表现形式N 是一个BIGINT型数值,作用相当于CONV(N,10,2)
OCT(N)返回十进制数值 N 的八进制数值的字符串表现形式
CONV(N,from_base,to_base)将数值型参数 N 由初始进制 from_base 转换为目标进制 to_base 的形式并返回
CHAR(N,... [USING charset_name])将每一个参数 N 都解释为整数,返回由这些整数在 ASCII 码中所对应字符所组成的字符串

字符串截取

函数说明
SUBSTR(str,N_start,N_length)对指定字符串进行截取,为SUBSTRING的简单版
str : 截取的字符串
N_start : 截取起始位置 ( mysql中的start是从1开始的 )
N_length : 截取长度
SUBSTRING(str,start)
SUBSTRING(str,start,len)
SUBSTRING(str FROM start)
SUBSTRING(str FROM start FOR len)
对指定字符串进行截取,有多种形式
str : 截取的字符串
start : 截取起始位置 ( mysql中的start是从1开始的 )
len : 截取长度
MID(str,pos,len)同于 SUBSTRING(str,pos,len)
RIGHT(str,len)对指定字符串从最右边截取指定长度
LEFT(str,len)对指定字符串从最左边截取指定长度
RPAD(str,len,padstr)在 str 右方补齐 len 位的字符串 padstr,返回新字符串如果 str 长度大于 len,则返回值的长度将缩减到 len 所指定的长度
LPAD(str,len,padstr)与RPAD相似,在str左边补齐
INSERT(str,pos,len,newstr)在原始字符串 str 中,将自左数第 pos 位开始,长度为 len 个字符的字符串替换为新字符串 newstr,然后返回经过替换后的字符串INSERT(str,len,1,0x0)可当做截取函数

字符串拼接

函数说明
CONCAT(str1,str2...)函数用于将多个字符串合并为一个字符串
CONCAT_WS(separator,str1,str2...)和concat函数类似,只是通过分隔符separator将字符串连接在一起
GROUP_CONCAT(...)返回一个字符串结果,该结果由分组中的值通过逗号连接组合而成
MAKE_SET(bits,str1,str2,...)返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串可用作布尔盲注,如:EXP(MAKE_SET((LENGTH(DATABASE())>8)+1,'1','710'))

数据匹配

函数说明
= statement全匹配
LIKE "statement"匹配数据,%代表任意内容
REGEXP "statement"正则匹配数据
RLIKE "statement"与regexp相同,正则匹配数据

条件函数

函数说明
IF(exp,state1,state2)条件语句,exp为true,执行state1,否则执行state2
CASE...WHEN exp THEN state1 ELSE state2 END同IF,...可直接省略
NULLIF(expr1,expr2)若expr1与expr2相同,则返回expr1,否则返回NULL

其他

函数/语句说明
SLEEP(N)休眠N秒
BENCHMARK(count,expr):将表达式expr重复运行count次(消耗CPU),可以达到sleep()的效果
ORDER BY用于对结果集进行排序,默认按照升序对记录进行排序
EXISTS(sql)判断SQL语句执行后是否有结果;存在的话返回结果为:1(true),不存在的话返回结果:0(false)
LIMIT m,n查询结果从 m 开始取 n 个
LENGTH(str)返回字符串的长度
LOAD_FILE(filePath)读取文件内容,可以将文件名转换成ASCII码或者十六进制的形式;secure_file_priv默认情况下为null不允许读文件
ASCII码需要用char()函数,char(96,97)
十六进制前面要加上 0x
读取内容不显示的情况下,可以用hex()函数:hex(load_file())
PI()返回π的具体数值
LOCATE(substr,str,[pos])返回子字符串第一次出现的位置
POSITION(substr IN str)等同于 LOCATE()
LOWER(str)将字符串的大写字母全部转成小写同:LCASE(str)
UPPER(str)将字符串的小写字母全部转成大写同:UCASE(str)
ELT(N,str1,str2,str3,...)MAKE_SET(bit,str1,str2...)类似,根据N返回参数值
CHARSET(str)返回字符串使用的字符集
DECODE(crypt_str,pass_str)使用 pass_str 作为密码,解密加密字符串 crypt_str加密函数:ENCODE(str,pass_str)

常用语句

可以自己去看一下数据库里面每个系统表存放的啥信息,就明白为啥很多语句要这样写了

更多参考:https://bak.gm7.org/sqlwiki.netspi.com/attackQueries/informationGathering/index.html#mysql

说明语句
基础信息获取数据库版本信息
select version();

select @@innodb_version;
获取当前用户
select user();
获取当前数据库
select database();
数据路径
select @@datadir;
获取所有数据库select schema_name from information_schema.schemata;
获取所有用户查看表结构
desc mysql.user
获取所有用户信息
select * from mysql.user
获取当前数据库的表名desc information_schema.tables;

select table_name from information_schema.tables where table_schema = database();

select group_concat(table_name) from information_schema.tables where table_schema = database();
获取当前数据库的某表的列名select column_name from information_schema.columns where table_name = '表名';
select group_concat(column_name) from information_schema.columns where table_name = '表名';
获取当前数据库中某列的值select id ,username,password from users;
查询DBA账户(一般root)select host, user from mysql.user where super_priv = 'y';