【网络安全】-sql 注入进阶

仅学会1' or 1='1  ,就有不少小菜鸟认为自己已经掌握了sql注入,迫不及待的拿着它去实战,却发现除新手入门级靶场-pikachu-master,没有那个网站搭理我们。

 原来1' or 1='1  准确的说是sql注入万能公式,是一种最常见的注入模式,学会它在十年前还能碰运气,到现在早就补丁上加补丁,别想学会它能怎么样,最多当成判断sql注入测试字符串使用

不想转行只能继续学习。。。

 

1.union联合注入:

它利用 sql语句中的 union操作符来合并两个或多个 SELECT 语句的结果集,并返回给应用程序,用来绕过应用程序的正常查询逻辑来执行未授权的查询。

步骤:

1.1    判断注入点,构造传参值           

->  ?id=1

  • SQL数据库查询语句: selecft * from users where id = ?   
  • ?是一个参数占位符,用于防止SQL注入
  • ? id = 1:这里的?被替换为1',目的是关闭原始SQL语句中的字符串字面量,从而允许后续注入sql代码。

 

Get:注入点在IP地址处。

post注入点在数据提交框内,需抓包

1.1.1

->  ?id=1'  报错

      ?id=1' --+  正常

      字符型sql注入,闭合方式'

1.1.2

->  ?id=1"  报错

      ?id=1 " --+  正常

      字符型sql注入,闭合方式"

1.1.3

->  ?id=1"  报错

      ?id=1 --+  正常

      数字型sql注入.

特殊类:"(","=","+"具体方式具体判断。

-- +是一个get传参时的 sql 注释,用于忽略原始查询中剩余的部分。

#是一个post传参时的 sql 注释,用于忽略原始查询中剩余的部分。

1.2   ?id=1' order by 1--+ 

猜测行数,有返回信息,没有报错。

1.3    union联合注入

       1.3.1 爆库(database)

                ? id = 1'  union select database(), user() ,version()--+;

                union select database(), user() ,version()检索数据库的名称(database())、当前数据             库用户的名称(user())、以及MySQL的版本(version())。

          1.3.2   爆表(table)

        ?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='数据库名' -- +

  •   原始查询:id = '-1'   错误的执行语句,用来输出'后的语句。
  •   union 合并两个或多个SELECT语句的结果集,这里它被用来添加一个新的查询,试图从information_schema.tables表中检索数据库名下所有表的名称,    并使用group_concat函数将它们连接成一个单一的字符串输出,由于union要求每个select语句中的列数必须相同,且相应列的数据类型也必须兼容,因此通过在新查询中选择两个虚拟值(1,2)来匹配可能的原始查询结果集中的列数。
  •   group_concat()函数用于将多个表名合并为一个字符串返回。
  •     information_schema是MySQL的一个特殊数据库,包含了所有其他数据库的信息,如表名、列名等
      1.3.3  爆列

              ?id=-1' union select 1,2,group_concat(column_name) from          information_schema.columns where table_schema='数据库名' and table_name='表名' -- +

  • 原始查询:id = '-1'   错误的执行语句,用来输出'后的语句。
  •   union 合并两个或多个SELECT语句的结果集,这里它被用来添加一个新的查询,

这个查询从information_schema.columns表中检索指定数据库(table_schema)和表(table_name)中的所有列名,并使用group_concat函数将这些列名连接成一个单独的字符串输出,由于union要求每个select语句中的列数必须相同,且相应列的数据类型也必须兼容,因此通过在新查询中选择两个虚拟值(1,2)来匹配可能的原始查询结果集中的列数。

  •   group_concat()函数用于将多个表名合并为一个字符串返回。
  •     information_schema是MySQL的一个特殊数据库,包含了所有其他数据库的信息,如表名、列名等
      1.3.4   爆数据

           ?id=-1' union select 1,2,group_concat(列1, 列2 )from 表名 -- +

  • 原始查询:id = '-1'   错误的执行语句,用来输出'后的语句。
  •  通过union操作符,绕过正常的查询逻辑,添加一个新的SELECT语句,指定了要从表名中选择的列1,列2中匹配数据并输出。

 2.函数报错注入  (不常用)

      updatexml()函数

在sql注入中updatexml函数经常被用来触发错误消息

通过构造恶意的SQL查询,使得UPDATEXML函数接收到格式不正确的XML数据,它会返回一个错误,这个错误通常包含了触发错误的XML表达式的一部分。可以利用这一点,并在这个错误消息中捕捉到数据库的敏感信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值