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

  • 相关阅读:
    试着把.net的GC讲清楚(2)
    试着把.net的GC讲清楚(1)
    【特性】select语句中使用字符串链接获取字段值失败
    twemproxy分片处理原理--剖析twemproxy代码正编
    robot framework的使用说明
    网络故障模拟,cpu高压以及docker中的实现
    我眼中的robot framework
    twemproxyMemcache协议解析探索——剖析twemproxy代码正编补充
    twemproxy代理主干流程——剖析twemproxy代码正编
    Leetcode 617 Merge Two Binary Trees 二叉树
  • 原文地址:https://www.cnblogs.com/Kuller-Yan/p/12914113.html
Copyright © 2011-2022 走看看