什么是堆叠注入

在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()函数

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

  1. sql注入之堆叠注入

    一.堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在 ...

  2. 07_SQL注入_堆叠注入绕过注入

    07_SQL注入_堆叠注入&绕过注入 1.堆叠注入 1.1 注入理论 谈及堆叠,顾名思义:就是多条语句一同执行.实际开发中,部分数据库支持多条SQL语句同时执行,在这样的场景下进行SQL注入, ...

  3. 盲注、报错注入、宽字节注入、堆叠注入学习笔记

    文章目录 一.盲注 二.报错注入 什么是报错注入 报错注入原理 报错注入的场景 常用报错函数 1.updatexml()(是mysql对xml文档数据进行查询和修改的xpath函数) 2.extrac ...

  4. mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入

    盲注 关键点是 根据页面返回内容分析 Payload 中的问题是否为真,然后通过多次测试遍历出想要的数据 布尔盲注 目标地址:http://newspaper.com/items.php?id=2 对 ...

  5. (17)网络安全:cookie注入、二次注入、DNSlog注入、中转注入、堆叠注入的原理及注入过程

    目录 cookie注入 sqli-lasb-master less-21 方法一:用burpsuite进行抓包后修改 方法二:安装火狐的cookie manager等插件进行修改cookie 第一步: ...

  6. Web安全之SQL注入漏洞学习(七)-堆叠注入

    堆叠注入简介 堆叠注入是指注入的多条SQL语句可以一起执行.MySQL命令行中, 每一条语句结尾加; 表示语句结束.这样是不是可以多句一起使用.这个叫做 stacked injection. 堆叠注入 ...

  7. SQL注入之MYSQL注入总结

    简介 information_schema是用于存储数据库元数据的表,它保存了数据库名,表名,列名等信息. 让我们从爆破表名到了可以直接查询. information_schema是MySQL5.0以 ...

  8. 【SQL注入07】堆叠注入基础及实操(基于sqli-labs-less38)

    目录 1 堆叠注入概述 1.1 定义 1.2 与union联合查询注入的对比 1.3 局限性 2 堆叠注入实验简介 2.1 实验平台 2.2 实验目标 3 堆叠注入实验步骤 3.1 前戏 3.2 判断 ...

  9. SQL注入——堆叠注入

    一.堆叠注入的原理 1.介绍 在 SQL 中,分号(;)是用来表示一条 sql 语句的结束.试想一下我们在 ; 结束一个 sql 语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注 ...

最新文章

  1. 循环输入正整数,求其平均值
  2. k8s集群配置使用coredns代替kube-dns
  3. mac10.12 安装mysql_在mac os10.12上安装mysql5.7.18
  4. python os库使用
  5. Java JDK下载与安装教程
  6. 创建自己的uboot-基于IMX6
  7. TranslateAnimation详解
  8. IntelliJ IDEA 记学习笔《Patch 创建补丁》
  9. 基于Opencv实现的简易汉字识别
  10. 计算机管理用户拒绝访问,win10系统管理员账户拒绝访问怎么办
  11. 我的世界java旁观者模式_我的世界怎么开旁观者模式-我的世界切换模式攻略
  12. xp系统开启wlan服务器,XP系统笔记本怎么设置无线网络?
  13. 优化命令之top——实时显示进程动态/查看进程信息
  14. 如何用photoshop做24色环_Photoshop绘制超逼真的色轮/色环配色表效果图
  15. lay和lied_lie-lie-lay三个动词的区别
  16. 创意、实现和合作:一次原创H5的尝试
  17. RabbitMQ topics
  18. putty下载linux文件到本地windows
  19. idea自动生成bean实体对象
  20. 举个栗子!Tableau 技巧(116):做一个有趣的锥状柱形图

热门文章

  1. “error LNK1169: 找到一个或多个多重定义的符号”的解决方法
  2. java 求最长子串
  3. linux read命令用法
  4. 最短路之 SPFA(判环+负权)
  5. Java按照时间顺序从hbase中读出数据
  6. 用JPA在测试的时候无法创建EntityManager Factory无法创建的几个可能因素!
  7. Chrome浏览器密码框自动填充的bug
  8. css 用direction来改变元素水平方向,价值研究。
  9. BS版代码生成器 简介
  10. Android:sqlite问题小结