[SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

                       [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode


前言

       个人观点,若有误请指教


预备知识

当 sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数
当 sql_mode 没有设置 PIPES_AS_CONCAT 时 (默认没有设置),|| 就是逻辑或,相当于OR函数
废话不多说,来看一下例子就懂了!


  • [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • set sql_mode=’’;
    select 0||name from test; 或者 select name||0 from test;
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    注:||只会返回0或者1。因为name为字符串,其数值为0。这时返回结果就由数字确定。若数字等于0,则返回为0,;若数字不等于0,则值都为1。||与or的执行结果是一样的,有兴趣的可以自己去尝试。

  • set sql_mode=PIPES_AS_CONCAT;
    select 1||name from test; 或者 select name||1 from test;
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    注: 数字是什么值,结果就是拼接什么值。


解题思路及步骤

  • 直接上’引号,结果什么都没有。
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 上数字(不加#)。但什么数字的结果都是一样的。。。
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 上数字(加#)。结果是什么数字就显示什么结果
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 查看表有多少列,出现过滤了,经尝试后发现过滤关键词为order。
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    注:这里加#是因为本人之前见过的题目(输入参数为数字),其返回的结果与该参数匹配,而不是一致的。而且不管三七二十一直接加上它不香嘛?加上它就不用考虑后面有没有什么东西了。
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 尝试union、select是否被过滤。union被过滤,select没有,但没有union,我要select干嘛?
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 这时想到了堆叠注入(因为本人最近遇到了堆叠注入的题)

  • 查询所有数据库名,太开心了,找到注入模式了
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 查询当前数据库的表,发现只有一个Flag表,那么flag应该就在里面
    [SUCTF 2019]EasySQL 1——堆叠注入+sql_mode

  • 想着既然select没有过滤,那我直接堆叠查询好吧,没想到

上一篇:zookeeper集群搭建


下一篇:学习markdown语法