字符串截取函数
left(str,index)//从左边第index开始截取
right(str,index) //从右边第index开始截取
substring(str,index)//从左边index开始截取
substr(str,index,len)//截取str,index开始,截取len的长度
mid(str,index,ken)//截取str 从index开始,截取len的长度(mysql特有)
locate()//返回一个字符串在另一个字符串中第一次出现的位置,可尝试配合上面的字符串截取函数在读取文件时用
mysql> select locate(username,'lshackadminsec') from admin limit 0,1;
字符串截取函数,在报错注入,盲注中经常使用到,例如mid函数。
正常用法mid(str,pos,len)功能是从str字符串中从pos开始,截取len长度的字字符串。
而mid(from(1)),这里的from(1)表示的是从1这个位置开始截取剩下的字符串.
mysql> select mid('abc'from(3));
+-------------------+
| mid('abc'from(3)) |
+-------------------+
| c |
+-------------------+
for(1)表示从改位置起一次就截取一个字符,示例如下:
mysql> select mid('abc'from(1)for(1));
+-------------------------+
| mid('abc'from(1)for(1)) |
+-------------------------+
| a |
+-------------------------+
1 row in set (0.04 sec)
字符串比较函数
strcmp(expr1,expr2) //如果两个字符串是一样则返回0,如果第一个小于第二个则返回-1
find_in_set(str,strlist) //如果相同则返回1不同则返回0
字符串连接函数
concat(str1,str2) //将字符串首尾相连
concat_ws(separator,str1,str2) //将字符串用指定连接符连接
group_concat()//利用分组的方式连接所有字符串,通俗点儿讲,其实就是把某个字段下的所有数据全部连接成一个字符串,注意有长度限制,默认1024
tips:在使用字符串拼接函数时,尽量使用拼接符号进行拼接,便于后续读取数据。
例如:group_concat( distinct(要连接的字段)order by (排序字段) asc/desc separator (分隔符) )
mysql中一些基础函数
当前数据库名
database()
schema()
数据库用户名
USER()
CURRENT_USER()
SYSTEM_USER()
SESSION_USER()
数据库版本
VERSION()
@@VERSION
@@GLOBAL.VERSION
路径相关函数
@@BASEDIR : mysql安装路径
@@SLAVE_LOAD_TMPDIR : 临时文件夹路径
@@DATADIR : 数据存储路径
@@CHARACTER_SETS_DIR : 字符集设置文件路径
@@LOG_ERROR : 错误日志文件路径
@@PID_FILE : pid-file文件路径
@@BASEDIR : mysql安装路径
@@SLAVE_LOAD_TMPDIR : 临时文件夹路径
注释符号
#
/**/ /*/**/这样是等效于/**/
-- + 用这个符号注意是--空格任意字符很多人搞混了
;%00
`
/*!*/ /*!/*!*/是等效于/*!*/的
操作符号
:=
||, OR, XOR
&&, AND
NOT
BETWEEN, CASE, WHEN, THEN, ELSE
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
|
&
<<, >>
-, +
*, /, DIV, %, MOD
^
- (一元减号), ~ (一元比特反转)
!
BINARY, COLLATE
比较运算符
=
>
<
!=
<> 不等于的意思
like (模糊匹配 select '12345' like '12%' => true)
in(select '123' in ('12') => false)
between (select database() between 0x61 and 0x7a;//select database() between 'a' and 'z';)
regexp / rlike(正则匹配select '123455' regexp '^12' => true)
逻辑运算符
not / !
and / &&
or / ||
xor / ^
位运算符
& 按位与
| 按位或
^ 按位异或
! 取反
<< 左移
>>右移
延时函数
sleep()
benchmark(1000000,sha(1))
编码函数
hex()
ascii()
文件操作函数
load_file() //读文件路径可以用0x,char转换的字符
outfile select * into outfile '/tmp/test.txt'
dumpfile //用法同上但是只能写入一行数据,常用于udf提权写dll
类型转换
1=1
1='1'
1="1"
1=true
1=1+'a'
1=1+"a"
1=0+true
information_schema
information_schema这这个数据库中保存了MySQL服务器所有数据库的信息。 如数据库名,数据库的表,表栏的数据类型与访问权限等。
表名 | 列名 | 内容 |
---|---|---|
schemata | schema_name | 所有数据库的名字 |
tables | table_name | 所有数据库的表的名字 |
tables | table_schema | 所有数据库的名字 |
columns | table_schema | 所有数据库的名字 |
columns | table_name | 所有数据库的表的名字 |
columns | column_name | 所有数据库的表的列的名字 |
查看当前数据库的表名
select table_name from information_schema.tables where table_schema=database()limit 0,1;
查看字段名
select column_name from information_schema.columns where table_name='user' and table_schema=database() limit 0,1;
查数据
select 字段名 from 表名;
mysql中的空白字符
%20 %09 %0a %0b %0c %0d %a0 /**/ tab
%a0 这个不会被php的\s进行匹配
/*!*/ 内敛注释 #这个也可以用来做分隔