ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

buuctf-[SUCTF 2019]EasySQL 1 堆叠注入

2021-11-14 16:03:58  阅读:327  来源: 互联网

标签:SUCTF 语句 buuctf flag EasySQL Flag mode sql select


SQL堆叠注入

  这个就不再写原理了,之前也遇到很多了,就是一个sql语句";"后面可以继续执行sql查询语句。

试一下堆叠注入查询数据库

1;show databases;

 

 



查询表名

1;show tables;


 

 



按着思路往下走查字段的时候就不行了

1;show columns from Flag;

 

 




山穷水尽,百度wp,发现大佬居然可以从报错中猜出查询语句是:

select $_GET['query'] || flag from Flag

这里的"||"是啥意思,查了一下mysql中表示或,如果前一个操作数为真,则不看后面的语句

然后构造payload

*,1

这啥意思,我来解释一下

sql=select.post['query']."||flag from Flag";
如果$post['query']的数据为*,1,sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,执行这条查询语句会将表中的所有数据查询出来并且在后面增加一列列名和内容都是1的列,如下:

 

 后端是只有一个Flag表,表里只有一个字段flag,也只有一行数据,所以显示的结果就应该是下面这样:

 

 
另外一种解法

思想是把"||"变成字符串连接符,而不是或。
这里就涉及到修改mysql中sql_mode参数设置,设置 sql_mode=pipes_as_concat字符就可以了。


    在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接。
    但在mysql 缺省不支持。需要调整mysql 的sql_mode
    模式:pipes_as_concat 来实现oracle 的一些功能。

payload: 1;set sql_mode=PIPES_AS_CONCAT;select 1

 

 

这里在后端的查询代码其实是 select  1;set sql_mode=PIPES_AS_CONCAT;select 1|| flag from Flag

当修改了sql_mode参数后,此时的 || 已经是链接符的意思了,这个语句会把表中所有的数据查询出来并且在后面加一行数据列明为 1|| flag 的数据,重点都在select 1 这,如下:

没修改参数前:拿本地环境举例,select 1|| flag from Flag

 

更改参数后:

 

 

 

 会将表中的password字段内容带出来,列名是1||password;

这题就学到了 MySQL修改sql_mode=pipes_as_concat的用法和适用场景和oracle与MySQL " || " 符号的区别,至于猜测后端代码还是需要经验的累积。

大佬时时刻刻提醒我是个菜鸡。

 

标签:SUCTF,语句,buuctf,flag,EasySQL,Flag,mode,sql,select
来源: https://www.cnblogs.com/xuzixin/p/15552119.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有