目录
补充:数据库注入 -> mysql低版本 -> 暴力查询或结合文件读取
在上一讲中, 首先通过order by获取注入字段数,再通过管道判断前端通过哪几条管道输出,替换可以输出信息的管道为注入语句,通过以下方法获取到相关信息:
数据库版本:version() 5.7.22-0ubuntu0.16.04.1 数据库名字:database() mozhe_Discuz_StormGroup 数据库用户:user() root@localhost 操作系统:@@version_compile_os Linux
user() 获取当前注入点的用户权限。靶场返回的root权限是mySQL数据库里的最高权限。
一般网站采用独立式搭建,互不干扰:(这是最基础的数据库模型,现在大网站都是分布式数据库)
数据库A=网站A=数据库用户A ——>表名——>列名——>数据 数据库B=网站B=数据库用户B ——>表名——>列名——>数据 数据库C=网站C=数据库用户C ——>表名——>列名——>数据
root权限可以跨库查询。跨库查询的前提条件是必须高权限的用户才能执行跨库查询。
案例演示
一. 普通用户 & root用户操作权限
跨库查询及对应思路
本机 127.0.0.1 启动了不止一个网站,网站“淡然图标系统”源码存于 D:\phpstudy\phpTutorial\WWW\sqqyw 下,对应数据库在mysql中为qqyw。
通过 root 身份登陆 mysql,查看 databases:
那么 root 权限下,可以通过 Sqlilab 的注入点,跨库查询 qqyw。
同一个服务器,一般用的同一个数据库,某数据库对应的网站若有 root 型注入点,就存在被跨库攻击/查询的风险。
Mysql5.0 及以上的版本存在一个 information_schema 数据库,存储记录所有的数据库名、表名、列名,可以通过这个数据库获取数据库下面的表名和列名。
有了 root 型注入点,就可以通过 information_schema 查询别的数据库。
information_schema 的 SCHEMATA 表存储当前 mysql 实例中所有数据库的信息,show tables; 即可查看当前所有数据库的信息。
mysql> select * from SCHEMATA; +--------------+--------------------+----------------------------+------------------------+----------+ | CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_