sql注入中常用的函数

SQL注入中常用的函数

字符串相关函数

  • length(str)
    获取字符串 str 的长度
  • substr(str, index, length)
    截取 str ,从 index 开始,截取长度为 length
  • substring(str, index, length)
    截取 str ,从 index 开始,截取长度为 length
  • mid(str, index, length)
    截取 str ,从 index 开始,截取长度为 length
  • insert(str, pos, length, newstr)
    在原始字符串 str 中,将自左第 pos 位开始,长度为 length 的字符串替换成新的字符串 newstr
    substr(str, 1, length) <==> insert(str, length+1, 100, '')
    其中的 100 可换为为大于等于 str 字符串长度的数字
  • left(str, length)
    截取 str ,从左边第一位开始,截取长度为 length
    等价于:substr(str, 1, length)
  • right(str, length)
    截取 str ,从右边第一位开始,截取长度为 length
    等价于:substr(str, -1, length)
  • lpad(str, length, padstr)rpad(str, length, padstr)
    在 str 的左(右)方填充 padstr ,直到字符串长度为 length;
    如果 str 长度大于 length ,则将返回的字符串的长度缩减到 length 的长度
    lpad(str, length, 0) <==> substr(str, 1, length)
  • trim(A from B)
    将字符串 B 中的 A 部分删去,返回剩余部分
    例如:select trim('12' from '1234'); ==> '34'
    Trick: from前后的空格可以不要,即select trim('12'from'1234');
  • lower(str)/lcase(str)upper(str)/ucase(str)
    将 str 转换成小/大写
  • reverse(str)
    将 str 倒序返回
  • ascii(str)ord(str)
    将单个字符转换成ascii码
    注意:这两个函数都只能转换单个字符,如果传入字符串,则对字符串的第一个字符进行转换
  • char(num)
    将ascii码转换成字符
    Trick: char 函数可以使用逗号,将多个ascii码同时转换成为字符串
    select char(97,98,99); ==> 'abc'
  • hex(str)unhex(str)
    字符串16进制的相互转换
  • bin(num)oct(num)
    数字转2进制、8进制
  • conv(N,A,B)
    将数字 N 从 A 进制转换成 B 进制
    Trick: 可以使用 conv(i,10,36) 配合大小写转换函数生成任意字母
    select conv(10,10,36); ==> 'A'
    select lower(conv(10,10,36)); ==> 'a'
  • binary value/binary(value)
    将 value 转换成二进制字符串
    应用: 区分大小写
    select ('A'='a') ==> 1
    select (binary 'A'='a') ==> 0
    Trick: binary和’A’之间可以不要空格:select(binary'A'='a')
  • concat(str1, str2)
    将 str1 和 str2 拼接
  • group_concat(comumn1, column2)
    将 column1 和 column2 两列数据进行拼接,不同行之间用逗号连接。

  • strcmp(str1, str2)
    将 str1 和 str2 进行比较
    如果 str1 = str2,返回 0
    如果 str1 < str2,返回 -1
    如果 str1 > str2,返回 1
  • find_in_set(str, list)
    分析逗号分隔的 list 列表,如果发现 str ,返回 str 在 list 中的位置
    应用:find_in_set(str1, str2) 判断 str1 和 str2 是否相等,如果相等,返回 1 ,否则返回 0 (str2中不能有逗号)
  • field(value, val1, val2, val3, ...)
    返回 value 在 val 中的位置
    应用:field(str1, str2) 判断 str1 和 str2 是否相等,如果相等,返回 1 ,否则返回 0
  • position(substr IN str)
    返回子串 substr 在字符串 str 首次出现的位置,如果没有找到则返回 0
  • locate(substr, str)
    返回子串 substr 在字符串 str 首次出现的位置,如果没有找到则返回 0
    此函数和 position 等价

数学相关函数

  • exp(num)
    返回 e 的 num 次方
  • x div y
    返回 x 除以 y 的整数部分
  • pow(x, y)/power(x, y)
    返回 x 的 y 次方
  • rand()
    返回 0~1 之间的随机小数
  • floor(num)
    返回 num 的向下取整
  • ceil(num)
    返回 num 的向上取整
  • greatest(a, b, c)
    返回 a,b,c 中较大的那个
    greageest(A, B)=B <==> B≥A
  • least(a, b, c)
    返回 a,b,c 中较小的那个
    least(A, B)=B <==> B≤A

系统信息函数

  • database()/schema()
    获取当前数据库名
  • user()
    获取用户名
  • version()
    获取数据库版本
  • load_file(path)
    读取文件
  • into outfile 'path'
    写入文件

流程控制函数

  • CASE WHEN [test] THEN [result] ELSE [default] END
    如果 test 为真,则返回 result 否则返回 default
  • CASE [test] WHEN [val] THEN [result] ELSE [default] END
    如果 test 和 val 相等,则返回 result ,否则返回 default
  • if(test, a, b)
    如果 test 是真,返回 a ,否则返回 b
  • ifnull(arg1, arg2)
    如果 arg1 不是空,返回 arg1 ,否则返回 arg2
  • nullif(arg1, arg2)
    如果 arg1 和 arg2 相等,返回 null,否则返回 arg1

其他函数

  • sleep(num)
    停止等待 num 秒钟
  • benchmark(count, expr)
    执行 expr 表达式 count 次

一些系统变量

  • @@datadir
    数据库数据路径
  • @@basedir
    数据库安装路径变量
  • @@version
    数据库版本变量
  • @@version_compile_os
    操作系统变量version_compile_os
文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/07/31/web安全/sql注入常用函数/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog