SQLI LABS | Less-38 GET-Stacked Query Injection-String

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

0x01:过关流程

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

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

从本关开始,就进入了堆叠注入的部分了。我们的目标也从发掘注入点、获取数据库信息变为了 篡改数据库信息。那么首先明确一下目标吧,使用堆叠注入篡改任意用户的密码:

首先,用 BP 抓包,然后用时间盲注的字典去爆破后端 SQL 模板:

如下,是一个可以使用的 Payload 模板:

sql 复制代码
 0' | sleep(3) | '1

通过上面的模板,我们可以推测出其后端的 SQL 模板为:

sql 复制代码
 select * from users where id='$_GET["id"]';

我们可以使用如下 Payload 做一个测试,进行校验:

sql 复制代码
 1' and 1='1   => 若页面回显内容,则证明存在漏洞
 1' and 1='0   => 若页面回显为空,则证明存在漏洞

明确了漏洞存在,且知道 Payload 该怎么写后,就是收集数据库信息、收集数据表信息 。。。 这些笔者在这里节省时间就不说了,直接当作已知条件,下面直接开始上堆叠注入的 Payload:

sql 复制代码
 -- 修改 id = 1 的用户密码为 HACKER (那些表啥的都是靠信息收集,收集来的)
 1';update users set password='HACKER' where id=1;#

如上,我们已经能够随意篡改用户密码了。至此,SQLI LABS Less-38 GET-Stacked Query Injection-String 成功过关。

0x02:源码分析

下面是 SQLI LABS Less-38 GET-Stacked Query Injection-String 后端的部分源码,以及笔者做的笔记:

php 复制代码
 <?php
 // take the variables 
 if (isset($_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
     //mysql connections for stacked query examples.
     $con1 = mysqli_connect($host, $dbuser, $dbpass, $dbname);
     // Check connection
     if (mysqli_connect_errno($con1)) {
         echo "Failed to connect to MySQL: " . mysqli_connect_error();
     } else {
         @mysqli_select_db($con1, $dbname) or die("Unable to connect to the database: $dbname");
     }
 ​
     // 直接拼接进 SQL 模板中
     $sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";
     /* execute multi query */
     // mysqli_multi_query => 执行一个或多个针对数据库的查询,多个查询用分号进行分隔。
     if (mysqli_multi_query($con1, $sql)) {
 ​
         /* store first result set */
         // mysqli_stroe_result => 转移将上一次查询返回的结果集(多个结果)
         if ($result = mysqli_store_result($con1)) {
             // 返回第一个结果????不过后面还是执行了
             if ($row = mysqli_fetch_row($result)) {
                 echo '<font size = "5" color= "#00FF00">';
                 printf("Your Username is : %s", $row[1]);
                 echo "<br>";
                 printf("Your Password is : %s", $row[2]);
                 echo "<br>";
                 echo "</font>";
             }
             //            mysqli_free_result($result);
         }
         /* print divider */
         // mysqli_more_results => 如果当前执行的查询存在多个结果,返回 "真",否则返回 "假"
         if (mysqli_more_results($con1)) {
             //printf("-----------------\n");
         }
         //while (mysqli_next_result($con1));
     } else {
         echo '<font size="5" color= "#FFFF00">';
         print_r(mysqli_error($con1));
         echo "</font>";
     }
     /* close connection */
     mysqli_close($con1);
 } else {
     echo "Please input the ID as parameter with numeric value";
 }
 ​
 ?>
相关推荐
PBitW14 分钟前
2025,菜鸟的「Vibe Coding」时刻
前端·年终总结
qingtian!18 分钟前
vulnhub靶场DC-1靶机渗透
网络安全·渗透测试·靶机复现
mwq3012337 分钟前
不再混淆:导数 (Derivative) 与微分 (Differential) 的本质对决
前端
小二·1 小时前
Vue 3 组件通信全方案详解:Props/Emit、provide/inject、事件总线替代与组合式函数封装
前端·javascript·vue.js
研☆香1 小时前
html框架页面介绍及制作
前端·html
be or not to be2 小时前
CSS 定位机制与图标字体
前端·css
DevUI团队2 小时前
🔥Angular高效开发秘籍:掌握这些新特性,项目交付速度翻倍
前端·typescript·angular.js
Moment2 小时前
如何在前端编辑器中实现像 Ctrl + Z 一样的撤销和重做
前端·javascript·面试
小白勇闯网安圈2 小时前
[极客大挑战 2019]Http、[极客大挑战 2019]Upload、[ACTF2020 新生赛]Upload
网络安全
宠..2 小时前
优化文件结构
java·服务器·开发语言·前端·c++·qt