zoukankan      html  css  js  c++  java
  • [SUCTF 2019]EasySQL

    之前看了看 

    感觉和前面一题有点像 

    不好做

    进去就这样

     先判断是否存在sql
    输入 1

    输入 1'

     应该是存在 了

    然后这里 试试 联合注入

     fuzz可以测出来 输个or 都不行

    很大可能是用正则表达式过滤了 意味着常规操作 双写 大小写 注释 几乎都不行了

    根据之前的题 这里就该用到堆叠注入了

    payload : 1; show tables# 

    查看

     存在一张Flag表

     查看下元素

    payload: 1;show columns from Flag#

    也是报nono  试了一下 它把Flag也过滤了

    看别人wp 出现 了 一个 意外解答 *,1              咱们不知道源码的  不敢说 也不敢问  害怕~·

     只要 像这样的 都行*,1,2,3,4   

     可能源码里 有直接查的吧

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

    怪不得  这句话是关键      就是把flag表中 flag字段全部dump出来  
    这样没学啥东西  不行

    常规操作为: 1;set sql_mode=PIPES_AS_CONCAT;select 1

    在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接。

    但在mysql 缺省不支持。需要调整mysql 的sql_mode模式:pipes_as_concat 来实现oracle 的一些功能。

    意思就是要在mysql中调 sql_mode 查询模式   改成 pipes_as_concat 才能实现oracle 这样的拼接功能 

    1代入语句就是

    select 1;set sql_mode=PIPES_AS_CONCAT;select 1                    大概是设置完sql_mode后再进行查找 

     最后数字改成了5   也只是flag前面多了个5   

    其实 设置完查询模式后  就能通过||实现拼接

    这样 语句其实是                      select 1 || flag from flag  

    把flag和 查询数字进行拼接 

    主要致死点 : sql_mode的设置    这他妈  又不知道源码 鬼知道 源码里用||拼接的

    1.sql_mode

    sql_mode是一组语法校验规则

    设置sql_mode
    ①命令:SET GLOBAL sql_mode=‘mode’;或者SET SESSION sql_mode=‘mode’;(mode替换为实际配置)。           不加global 也行
    ②修改my.sql,加入如下行(可替换为实际配置)
    在这里插入图片描述

    2 为防止 再碰到这种鬼题   

    所以 sql_mode 都在这了:

    常用sql_mode
    ①ONLY_FULL_GROUP_BY
    对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
    ②NO_AUTO_VALUE_ON_ZERO
    该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
    ③STRICT_TRANS_TABLES
    如果一个值不能插入到一个事务中,则中断当前的操作,对非事务表不做限制
    ④NO_ZERO_IN_DATE
    不允许日期和月份为零
    ⑤NO_ZERO_DATE
    mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
    ⑥ERROR_FOR_DIVISION_BY_ZERO
    在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL
    ⑦NO_AUTO_CREATE_USER
    禁止GRANT创建密码为空的用户
    ⑧NO_ENGINE_SUBSTITUTION
    如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
    ⑨PIPES_AS_CONCAT                 //这题考点
    将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat想类似
    ⑩ANSI_QUOTES
    不能用双引号来引用字符串,因为它被解释为识别符

  • 相关阅读:
    数据结构之树和二叉树的一些基本概念
    面向对象的三大特点
    WOJ 1020
    C++ STL copy函数效率分析
    局部特化和类模板成员特化
    局部特化 & 特化
    back_inserter 与 iterator
    new期间的异常
    数组分配
    placement new和delete
  • 原文地址:https://www.cnblogs.com/Sabia/p/14080623.html
Copyright © 2011-2022 走看看