[BUUCTF-Web]学习笔记-题目1【SUCTF2019】Easy SQL

1,题目来源:CTF平台:BUUCTF Web部分 https://buuoj.cn/challenges
题目:[SUCTF 2019]EasySQL
2,Flag以及解答后题目截图:

flag{4c1665f4-353b-4077-8ef7-c864bdba482b}

在这里插入图片描述

3,解题思考过程及分析:
1,经过一系列的输入测试发现,输入数字时会显示 Array ( [0] => 1 )
在这里插入图片描述

而输入0则不显示
在这里插入图片描述

但输入flag会提示 Nonono. 那么它内部到底是一个怎么样的sql语句呢?
在这里插入图片描述

我们猜测它有一个 ||符号,因为当我们输入数字时被当成常量一直输出1,当我们输入带有字母时会被当做一个变量(列)而又无法找到,所以报错(没有回显),而输入带有”flag“的字符串都会弹出 Nonono. 说明过滤了“flag”这几个字符(后面发现,不区分大小写都过滤了)
2,我们尝试使用,堆叠注入,可以显示出有flag字段,但是因为过滤了“flag”几个字符所以行不通。
在这里插入图片描述

3,最后查看网上wp发现后台的语法可能是

select.POST['参数'] || flag from flag

因此可以输入*,1 来显示全部内容:
在这里插入图片描述

由此得出flag{4c1665f4-353b-4077-8ef7-c864bdba482b}
4,考核的知识点描述:
1,此题我们需要运用堆叠注入,和mysql中的 || 符号的意思及如何改变,还有mysql中的sql_mode模式的概念了解。
2,mysql服务器可以在不同的sql_mode模式下运行,并且可以根据sql_mode系统变量的值,为不同的客户机应用不同的模式。sql_mode会影响mysql支持的sql语法,并且会执行数据验证检查;
3,在Oracle,用 || 连接字符串的,而在mysql,是用CONCAT来实现的。mysql为了兼容这一个特性,设置了PIPES_AS_CONCAT模式,mysql会将 || 视为字符串的连接操作符而非 或 运算符。具体命令为:set sql_mode=PIPES_AS_CONCAT;

参考链接:
参考文章1
参考文章2

posted @ 2021-03-31 17:23  羊柳树  阅读(37)  评论(0编辑  收藏  举报  来源