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

    [SUCTF 2019]EasySQL_____ wp from Kuller_Yan

    原理:堆叠注入原理

    在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句
    后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。
    而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?
    区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,
    而堆叠注入可以执行的是任意的语句。例如以下这个例子。
    用户输入:1; DELETE FROM products服务器端生成的sql语句为:
    (因未对输入的参数进行过滤)Select * from products where productid=1;
    DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
    
    

    这一题其实我在尝试出堆叠注入之后就下不了手了,就只能弄个表名,弄个列名,

    由官方wp的解释来看,这道题目需要我们去对后端语句进行猜测,有点矛盾的地方在于其描述的功能和实际的功能似乎并不相符,通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名 from 表名,进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用。
    解法1
    输入的内容为*,1
    内置的sql语句为sql=“select”.
    sql=“select”.post[‘query’]."||flag from Flag";
    如果$post[‘query’]的数据为*,1,sql语句就变成了select *,1||flag from Flag,也就是select *,1 from Flag,也就是直接查询出了Flag表中的所有内容
    解法2
    输入的内容为1;set sql_mode=pipes_as_concat;select 1
    其中set sql_mode=pipes_as_concat;的作用为将||的作用由or变为拼接字符串,这是我在本地做的测试,我们执行的语句分别为select 1和set sql_mode=pipes_as_concat和select 1||flag from Flag,读出flag

  • 相关阅读:
    Danny_Su的devexpress 9.3.3的注册插件在vs2010RC中无法使用的解决办法
    EntitySpaces2009中的关系
    EntitySpaces2009的开发文档地址
    EntitySpaces2009支持事务
    EntitySpaces2009中连接Access的连接设置
    基于matlab的视频测速处理
    图像拼接与融合
    某图像分析系统
    黑子数与开盘指数相关性分析
    另类的图像处理
  • 原文地址:https://www.cnblogs.com/Kuller-Yan/p/12914113.html
Copyright © 2011-2022 走看看