首页 > 数据库 >SQLI LABS | Less-49 GET-Error Based-String-Blind-ORDER BY CLAUSE

SQLI LABS | Less-49 GET-Error Based-String-Blind-ORDER BY CLAUSE

时间:2024-11-17 09:15:51浏览次数:3  
标签:Blind Based String Less echo SQLI Payload nbsp ORDER

关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客

0x01:过关流程

输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):

 http://localhost/sqli-labs/Less-49/

本关考察的其实是 ORDER BY 后的注入(虽然它被归结到了堆叠注入中,但其实它并不是)。

本关的注入点很好测试:

 Payload 01: 1         => 页面会正常返回排序后的数据
 Payload 02: 1'        => 页面会返回空值(证明后端出错了,也证明 ' 与其后端模板拼接成功)
 Payload 03: 1' and '1 => 页面会返回正常排序后的数据

根据上面的返回结果我们就可以推测出,其后端模板如下:

 select * from users order by '$_GET["sort"]';

那么现在的问题就是,如何构造盲注 Payload 来获取其后端数据?由于 ORDER BY 后的传参被 ' 号包裹了,所以我们现在传数字也不是,传字段也不是,都起不了什么用:

那我们转换个思路,听说过多字段排序吗,我们尝试传入以 , 号分隔的多个字段:

那么,根据上面的原理,我们结合一下布尔盲注,就可以获取其后端数据啦,下面是 Payload:

 -- 推测其后端数据库名称的第一个字符是 's',如果是则按 username 排序,否则按 id 字段排序
 2',if(mid(database(),1,1)='s',username,id),'2

如上,我们已经能够获取目标后端数据库信息了。至此,SQLI LABS Less-49 GET-Error Based-String-Blind-ORDER BY CLAUSE 成功过关。

0x02:源码分析

下面是 SQLI LABS Less-49 GET-Error Based-String-Blind-ORDER BY CLAUSE 后端的部分源码,以及笔者做的笔记:

 <?php
 include("../sql-connections/sqli-connect.php");
 $id = $_GET['sort'];
 if (isset($id)) {
     //logging the connection parameters to a file for analysis.
     $fp = fopen('result.txt', 'a');
     fwrite($fp, 'SORT:' . $id . "\n");
     fclose($fp);
 ​
     // 本关的难点在这里,被引号包裹的 ORDER BY 参数如何利用,话又说回来,你被引号包裹了,你自己传 id 也没用啊,就很迷惑
     $sql = "SELECT * FROM users ORDER BY '$id'";
     $result = mysqli_query($con1, $sql);
     if ($result) {
 ?>
         <center>
             <font color="#00FF00" size="4">
 ​
                 <table border=1'>
                     <tr>
                         <th>&nbsp;ID&nbsp;</th>
                         <th>&nbsp;USERNAME&nbsp; </th>
                         <th>&nbsp;PASSWORD&nbsp; </th>
                     </tr>
             </font>
 </font>
 <?php
         while ($row = mysqli_fetch_assoc($result)) {
             echo '<font color= "#00FF11" size="3">';
             echo "<tr>";
             echo "<td>" . $row['id'] . "</td>";
             echo "<td>" . $row['username'] . "</td>";
             echo "<td>" . $row['password'] . "</td>";
             echo "</tr>";
             echo "</font>";
         }
         echo "</table>";
     }
 } else {
     echo "Please input parameter as SORT with numeric value<br><br><br><br>";
     echo "<br><br><br>";
     echo '<img src="../images/Less-47.jpg" /><br>';
     echo "Lesson Concept and code by <b>D4rk</b>";
 }
 ?>

标签:Blind,Based,String,Less,echo,SQLI,Payload,nbsp,ORDER
From: https://blog.csdn.net/m0_73360524/article/details/143681895

相关文章

  • streamstring类介绍
    std::stringstream是C++标准库中提供的一个类,定义在头文件<sstream>中。它是基于字符串的流(stream),允许像操作输入流(std::cin)或输出流(std::cout)那样,操作字符串内容。std::stringstream是std::iostream的派生类,支持同时进行字符串解析(输入)和字符串构造(输出)。核心概念std:......
  • 构造方法,static,final关键字,字符串拼接,基本数据类型、包装类转String,String转基本
    1.构造方法的特点1.每一个类都至少有一个构造方法,默认是无参的构造方法。一旦写了有参的构造方法,那么无参的构造方法就丢失了,需要自己显式的写出无参构造方法。一般只要是显式写出构造方法,无参的构造方法是必须要构造的。2、构造方法,方法名必须和类名保持一致,并且没有返回值,......
  • [perl] perl string substitution
     require5.013002;#orbetter:useSyntax::Constructqw(/r);print"bla:",$myvar=~s/a/b/r,"\n";See perl5132delta:Thesubstitutionoperatornowsupportsa /r optionthatcopiestheinputvariable,carriesoutthesubstitu......
  • 调用Exe程序并且出现界面 CreateProc(ProcessName:String)
    FunctionGetProcessHandleAsName(Name:String):THandle;VarHd,Hs:THandle;dExit:Cardinal;Tmp,Tmp1:String;Lp:TProcessEntry32;beginResult:=0;Lp.dwSize:=sizeof(TProcessEntry32);Hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);ifProcess32First(Hd,Lp)thenRepea......
  • stringRedisTemplate 异步操作的问题记录
    一、问题背景StringRedisTemplate使用stringRedisTemplate.opsForValue().set时,会出现set之后立马get获取值,发现获取不到set进去的值。二、问题原因1、在使用redisson的情况下,stringRedisTemplate.opsForValue().set操作会是异步操作,造成。你在set之后,立马get获取值的时候会......
  • C++学习笔记之string容器、vector容器
    我们读过的书,说过的话,见过的山水,见到的人和事,最终都会变成我们脚下的的路。1.string容器string是C++风格的字符串,而string本质上是一个类。#include<iostream>usingnamespacestd;#include<string>//以下参数为constchar*类型与string类型的函数参数可以......
  • # StringBoot项目配置SSL证书及配置Nginx ##
    一、证书相关命令1.key转换成.pemopensslrsa-inexample.key-outexample.pem2.crt转换成.pemopensslx509-inexample.crt-outexample.pem二、配置流程1.在nginx目录下创建cert文件夹,导入证书文件及对应的key文件2.修改application.yml配置文件server:port:910......
  • fio:选择基于size与基于time的测试,还是即基于size又基于time?其中关键的测试方向参数:-ti
    默认是基于size的(当指定-filename时,如果该文件或裸设备存在,则fio默认使用其文件或设备的size大小;如果不存在,fio会报错并提示你)。此时,如果你【未指定】-runtime,如果-filename的文件或裸设备以及io完了,测试即结束。      如果你指定了-runtime,如果-filename的文件或裸......
  • C++基础语法实现写时复制CowString
    前言: CowString写时复制设计思路难点:通过下标访问字符串元素的基本思路重载[]运算符,在函数中直接返回该位置指针的解引用,但此时返回值为char类型,对于进行单个字符串修改的操作,如:str[1]='H';,无法处理赋值时的写时复制操作,只能通过输出流运算符输出char。解决方法:可以在Cow......
  • JavaScript常用对象方法一:字符串(string)
    string对象有很多方法,但一般开发里,一些方法很少用到,比如concat(),他的作用似乎将两个字符串拼接起来,但开发时,使用加号也能实现字符串拼接效果,所以这种方法就不介绍了。这里只介绍一些开发常用的方法,不多,但都很重要,属于必须掌握的方法1.indexOf()返回某个指定的字符串值在字符串......