常用符号
注释符
| 注释符 | 说明 | 
|---|---|
#(%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'; | 
