[SUCTF 2019]EasySQL

本题考查SQL注入

在输入框中随便输入数字(如 1)提交,页面返回正常。

尝试输入分号 ; 测试是否存在堆叠注入

发现页面没有报错,且可以正常执行,说明后端支持多语句执行(堆叠注入)。接着查看数据库中的表:

发现存在列名为flag,尝试读取这个列

1;show columns from Flag

说明存在过滤

这道题的后端源码逻辑大致类似于

php 复制代码
$sql = "select " . $_POST['query'] . " from Flag;";
$result = mysqli_query($conn, $sql);

payload:

*,1

将输入代入后端的 SQL 语句中,整条语句会变成:

select *,1 from Flag;

因为* 在 SQL 中代表查询表中的所有列。

,1 表示在所有列后面额外拼接一个常量列 1。

因为后端本身已经自带了 from Flag,你通过输入 *,1 直接闭合或补全了 select 子句,强制让数据库把 Flag 表里的所有列(包括藏有 Flag 的那一列)全部原封不动地查询并展示出来,从而绕过了对 select 或列名的过滤限制

解法二:堆叠注入修改 sql_mode

通过堆叠注入修改 MySQL 的 sql_mode,将 || 运算符由"逻辑或"变为"字符串连接符"

原语句变为:SELECT CONCAT(输入, flag) FROM Flag

payload:

1;set sql_mode=PIPES_AS_CONCAT;select 1

select 1触发查询 → 因||转为连接符,返回1与flag拼接的结果

相关推荐
希和20278 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研
一个人旅程~11 小时前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
心祭丫丫11 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
派大猩猩_13 小时前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
叼烟扛炮18 小时前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮18 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
Rabitebla19 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
叼烟扛炮20 小时前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain
景煜拾年20 小时前
InnoAI SQL 助手
运维·数据库·笔记·sql
旖旎夜光20 小时前
【C++ 基础入门】类和对象(下):初始化列表、static 成员、友元与内部类
c++·笔记·学习