SQL注入之堆叠注入(sql-lab第38关)

2023-10-30

什么是堆叠注入

在SQL中,分号(;)是用来表示一条SQL语句结束的。试想一下我们在分号结束一个SQL语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而堆叠注入可以执行的是任意语句(增删改查)。
在这里插入图片描述

例如以下这个例子:
用户输入:1; delete from products服务器端生成的SQL语句为:select * from products where productid=1; delete from products当执行查询之后,第一条显示查询信息,第二条则是将整个表删除。

适用条件
用户采用PDO编程( POD(PHP Data Object))且没有对参数进行过滤
mysqli_multi_query()函数也可以造成堆叠注入
在这里插入图片描述

堆叠注入的过程

1、找到注入点(确定是否存在堆叠注入)
2、开始注入

我们本次尝试的语句:
1’;insert into users(id,username,password) values(‘100’,‘abc’,‘abc’) --+

这里以sql-lab第38关为例

http://192.168.3.10/sqli/Less-38/?id=1——》有回显
http://192.168.3.10/sqli/Less-38/?id=1’ --+ ——》仍然有回显
基本可以判断它是一个字符型

在没有插入之前,利用phpstudy后台的命令行先查看表中有哪些数据
在这里插入图片描述

尝试堆叠注入:
http://192.168.3.10/sqli/Less-38/?id=1’;insert into users(id,username,password) values(‘10000’,‘abcd’,‘abcd’) --+

插入后再查看一下:发现插入了id=10000的数据
在这里插入图片描述
当把insert into 语句 改成delete语句就可以把users表删掉,所以堆叠注入危害很大。

堆叠注入代码分析

<?php
error_reporting(0);
include("../sql-connections/db-creds.inc");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-38 **stacked Query**</title>
</head>

<body bgcolor="#000000">
<div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">


<?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="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
/* execute multi query */
if (mysqli_multi_query($con1, $sql))
{
    
    
    /* store first result set */
    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 */
    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";}

?>
</font> </div></br></br></br><center>
<img src="../images/Less-38.jpg" /></center>
</body>
</html>


在这里插入图片描述
这个函数造成了堆叠注入

防御:对参数进行一定的过滤
尽量避免使用mysqli_multi_query()函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入之堆叠注入(sql-lab第38关) 的相关文章

  • 1-Linux_虚拟机VMware 15安装教程

    虚拟机VMware 15安装教程 https www onlinedown net soft 2062 htm 1 由上面的网址下载VMware 15后双击运行安装程序点击下一步 进行安装 2 在最终用户许可协议界面选中 我接受许可协议中的
  • 为什么要用TSubClassOf

    2019独角兽企业重金招聘Python工程师标准 gt gt gt TSubclassOf 是提供 UClass 类型安全性的模板类 例如您在创建一个投射物类 允许设计者指定伤害类型 您可只创建一个 UClass 类型的 UPROPERTY
  • vsocde vue snippet 设置

    vue snippt 设置 建议下在一个 vetur extensions 1 首先打开 vue json 文件 ctrl p 搜索 vue json 文件 enter File gt preferences gt User sneppts
  • MSBuild入门

    MSBuild是什么 MSBuild全称 Microsoft Build Engine 是用于构建应用程序的平台 您可能不知道它 但是如果您在使用VS做开发 那么一定时时刻刻在使用它 因为是它在背后为你管理生成你的项目文件 当新建一个项目时
  • ARM汇编指令集·带例题

    目录 32位ARM汇编指令集 32位数据操作指令 32位存储器数据传送指令 32位转移指令 其它32位指令 指令具体用法 数据处理指令 MOV指令 ADD指令 SUB指令 MUL指令 CMP指令 ORR逻辑或 BIC指令 转移指令 B指令
  • Maven进阶-配置私服(Nexus 的使用)

    Maven进阶 配置私服 Nexus 的使用 引言 一 Nexus 的下载 二 Nexus 启动服务器 三 首次配置 Nexus 四 新建仓库 五 设置仓库组 六 仓库的 URL 七 Maven 的配置 1 配置 mirror 2 配置 s
  • mysql select into 新表_SELECT INTO 语句数据表全表复制备份

    select into 语句数据表全表复制备份 select into 语句常用于创建表的备份复件或者用于对记录进行存档 sql select into 语法 您可以把所有的列插入新表 select into new table name
  • C++replace_all strip函数

    replace all occurance of t in s to w void replace all std string s std string const t std string const w string size typ
  • python语言需要注意的几点

    keyword kwlist可以打印出python所有关键字 import keyword print keyword kwlist 不需要使用大括号 但必须对齐 if True print Answer print True else p
  • 接口测试的标准和规范性

    一 接口测试测试点 1 要考虑接口的正常调用 1 按照接口定义 传递正确的接口信息 包括地址 方法 传输数据 然后查看接口返回的响应结果是否正确 数据库的数据是否正确 2 传递的请求数据需要覆盖有效类 边界值 3 返回的响应结果的每个字段都
  • Nginx简介及配置文件详解

    一 Nginx简介 Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器 同时支持IMAP POP3 SMTP代理服务 1 Nginx工作原理 Nginx由内核和模块组成 完成工作是通过查找配置文件将客户端请求映射到一个locat

随机推荐