主页 > 网络知识 > 浅谈利用mysql8新特性进行SQL注入

浅谈利用mysql8新特性进行SQL注入

 

浅谈利用mysql8新特性进行SQL注入

 

0x00 前言

前段时间遇到一个题考查的是mysql8的table注入。当时没有做出来。之前有了解过mysql8的table注入,但做题的时候没有想到。这里简单总结复现一下mysql8新特性的sql注入。

0x01 MySQL8介绍

在ubuntu20 apt源中集成了mysql 8.0.20。官方表示MySQL8要比MySQL5.7快2倍,支持json,nosql,修改了默认身份验证等其他改进。

0x02 基本环境配置 1、搭建MySQL8环境

最简单的方法,就是使用docker拉取镜像搭建

docker pull mysql:8.0.21 docker run -d --name=mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.21 2、搭建SQL注入环境

1.下载vulstudy综合环境:https://github.com/c0ny1/vulstudy
2.启动vulstudy综合环境里的sql注入的靶场
3.进入容器修改sqli-lab的配置文件:

#安装vim sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list apt-get clean && apt-get update && apt-get install vim #修改sqli-lab的配置文件 vim /app/sql-connections/db-creds.inc

填写mysql相关连接信息,数据库的IP填宿主机IP(我这里是172.30.102.102)

 

浅谈利用mysql8新特性进行SQL注入

 

4.然后在mysql8容器里通过下面sql语句修改默认认证方式(因为mysql8.0默认认证方式和5不一样):

ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '123456';

5.重新配置数据库,环境搭建完成。

0x03 MySQL8语法新特性

在MySQL 8.0.19之后,MySQL推出几种新语法

1、TABLE statement

TABLE statement
作用:列出表中全部内容

TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]

TABLE是MySQL 8.0.19中引入的DML语句,它返回命名表的行和列,类似于SELECT。
支持UNION联合查询、ORDER BY排序、LIMIT子句限制产生的行数。
例子
首先选择mysql数据库:use security;

mysql> TABLE users; +----+----------+------------+ | id | username | password | +----+----------+------------+ | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | +----+----------+------------+ 13 rows in set (0.01 sec)

加上order by排序或LIMIT限制后

table users order by password; table users limit 1; table users limit 0,1; table users limit 1,1;

 

浅谈利用mysql8新特性进行SQL注入

 

 

浅谈利用mysql8新特性进行SQL注入

 

与SELECT的区别

1.TABLE始终显示表的所有列
2.TABLE不允许对行进行任意过滤,即TABLE 不支持任何WHERE子句

2、VALUES statement

VALUES statement
作用:列出一行的值

VALUES row_constructor_list [ORDER BY column_designator] [LIMIT BY number] row_constructor_list: ROW(value_list)[, ROW(value_list)][, ...] value_list: value[, value][, ...] column_designator: column_index

VALUES是把一组一个或多个行作为表展示出来,返回的也是一个表数据。
ROW()返回的是一个行数据,VALUES将ROW()返回的行数据加上字段整理为一个表,然后展示
例子

mysql> TABLE emails; +----+------------------------+ | id | email_id | +----+------------------------+ | 1 | Dumb@dhakkan.com | | 2 | Angel@iloveu.com | | 3 | Dummy@dhakkan.local | | 4 | secure@dhakkan.local | | 5 | stupid@dhakkan.local | | 6 | superman@dhakkan.local | | 7 | batman@dhakkan.local | | 8 | admin@dhakkan.com | +----+------------------------+ 8 rows in set (0.00 sec) mysql> VALUES ROW(1, 2, 3) UNION SELECT * FROM users; +----------+----------+------------+ | column_0 | column_1 | column_2 | +----------+----------+------------+ | 1 | 2 | 3 | | 1 | Dumb | Dumb | | 2 | Angelina | I-kill-you | | 3 | Dummy | p@ssword | | 4 | secure | crappy | | 5 | stupid | stupidity | | 6 | superman | genious | | 7 | batman | mob!le | | 8 | admin | admin | | 9 | admin1 | admin1 | | 10 | admin2 | admin2 | | 11 | admin3 | admin3 | | 12 | dhakkan | dumbo | | 14 | admin4 | admin4 | +----------+----------+------------+ 14 rows in set (0.00 sec) 0x04 利用MySQL8新特性绕过select
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!