SQL注入 ---04

1 简单的sql注入

要求:

要有sql注入:

1,变量 2,变量要带入数据库进行查询 3,没有对变量进行过滤或者过滤不严谨

mysql> select * from users where id=2 limit 0,1;


当我的语句这样写时查寻到的结果

当我修改为:

 select * from users where id=-1 union select 1,2,3;

查询到的结果为1,2,3

原因:

因为当id=-2时会返回一个空值,就会把union后面的查询结果补充上来,然后我们就可以去看在那个字段有回显了,然后在我们回显的字段上面去,进行关键字段的回显

2 基础巩固

假设在我的x参数处有注入点,以下那个注入是正确的

www.xfy.com/index.php?y=1 and 1=1 & x=2

www.xfy.com/index.php?y=1& x=2 and 1=1

www.xfy.com/index.php?y=1 and 1=1 & x=2 and 1 =1 

www.xfy.com/index.php?xx=1 and 1=1 & xxxx=2 and 1 =1 

正确答案应该是bc,第一个他的测试语句在y这个参数里面,不在x很好理解;而最后一个将参数名都过滤了

注意:如果网站为www.xfy.com/index.php id=1 & page=1 如果你直接在后面注入或者说用工具sqlmap来注入的时候应该将参数的位置进行一个调换,因为sqlmap会自动对后面的参数进行注入测试(也可以加个*)

3 注入流程

数据库--》表--》列--》数据

1,判断注入

2,猜解列名数量(字段数)

--order by x,x--+

3,使用联合查询,看报错在那几个字段,接着用4的操作收集信息

4,信息收集:

数据库版本(version())

 数据库:(database())

 数据库用户:(user())

操作系统:@@version_compile_os 

5,版本

低版本:5.0以下

高版本:5.0以上 information_schema来查流程在:SQL注入之information_schema表_schemata在sql-优快云博客

6,limit,group_concat

limit x,1 限制 变动进行拆解

为什么查表名的时候加group_concat可以出现多个表名,而不加则只有一个呢?

6.1 数据库会返回多行结果,每行包含一个表名。但在SQL注入场景中:

  • 通常只能看到查询返回的第一行结果

  • 应用可能只处理或显示单行结果

  • 因此你只能看到一个表名

6.2 它可以将多行结果合并为一个字符串:

  • 将所有表名连接成一个字符串

  • 默认用逗号分隔

  • 结果作为单行单列返回,因此在SQL注入中可以看到所有表名

需要注意的是,GROUP_CONCAT有长度限制(默认1024字节),对于大量表可能需要调整或使用其他技术。

如何判断注入点?

1   

SELECT * FROM users where id = 1 and 1=1 LIMIT 0,1 页面正常

SELECT * FROM users where id = 1 and 1=2 LIMIT 0,1 页面错误

and就是且 当id=1 和 1=1都为真时就返回正确页面,反之则返回的是不正确的页面

2

可以在可控参数后面乱输,如果页面发生了变化说明可能存在注入点,但是当出现404或者说是页面跳转说明一般没有漏洞

<think>首先,用户的问题是:我想了解SQL注入中 '--+' 的含义。用户提供了几个引用,我必须参考这些引用来回答。 回顾系统级指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式。 - 使用中文回答。 - 生成相关问题。 - 引用段落末尾添加引用标识,如[^1]。 用户提到的引用: - 引用[1]:字符型注入示例。 - 引用[2]:测试语句解释。 - 引用[3]:详细介绍 '--+' 和 '#' 的区别。 - 引用[4]:关于Cookie的定义,不相关。 关键引用是引用[3],因为它直接解释 '--+' 的含义。 从引用[3],我可以总结: - '--+' 用于注释掉SQL语句的后续部分。 -SQL注入中,它用于避免语法错误,使注入的恶意代码生效。 - '+' 代替空格,因为空格可能被过滤或需要编码。 - 它类似于 '%23'(#的编码),但 '--+' 有更好的兼容性。 用户的问题具体是:'--+' 的含义。 结构回答: - 解释 '--+' 是什么。 - 说明其在SQL注入中的作用。 - 提供示例。 - 末尾添加引用。 - 最后,生成相关问题。 使用中文回答。 回答结构: 1. 清晰定义:'--+' 是SQL注入中的一种注释符号。 2. 功能:用于注释掉SQL语句剩余部分,使注入的条件生效。 3. 为什么用 '+':'+' 编码为空格,避免空格被过滤。 4. 示例:如引用[3]中的。 5. 引用添加:在相关段落末尾。 6. 生成相关问题。 生成相关问题: - 基于主题:SQL注入、注释技术、防范措施等。 - 参考系统示例:快速排序相关问题类似。 最终回答结构: - 先回答用户问题。 - 然后列出相关问题。 </think>### SQL注入中 '--+' 的含义 在SQL注入攻击中,'--+' 是一种用于**注释掉SQL语句后续部分**的特殊符号组合。它主要用于绕过应用程序的输入验证,使攻击者注入的恶意代码生效而不引起语法错误。以下是详细解释: 1. **基本功能**: - SQL注入时,攻击者需要在合法SQL查询中插入额外条件(如 `OR 1=1`),但原始查询可能有后续代码(如 `AND password='xxx'`)。 - '--' 是SQL的标准单行注释符(表示忽略其后的所有内容),但空格字符(` `)常被Web应用程序过滤或编码。"+" 在这里被用作空格的替代(URL编码中,"+" 等同于空格),因此 '--+' 组合起来等同于 `-- `(一个注释符后紧跟空格)。 - 例如,在引用[3]的示例中,注入 `--+` 后,SQL查询变为: ```sql SELECT * FROM users WHERE id='1' OR 1=1 -- +' AND password='xxx' ``` 其中 `-- +` 注释掉了 `' AND password='xxx'` 部分,使整个查询仅执行 `id='1' OR 1=1`(永真条件,绕过认证)[^3]。 2. **为什么使用 '+' 而不是空格**: - 在实际注入中,空格字符可能被Web应用防火墙(WAF)或输入过滤器拦截。"+" 是一种绕过机制,因为URL编码规则中,"+" 会被服务器解码为空格(例如,`%20` 是空格的编码,但 '+' 更常用于简化)。 - 这提高了注入的相容性,适用于多种数据库(如MySQL、Oracle、SQL Server),而其他注释符如 "#"(仅MySQL原生支持)可能受限[^3]。 3. **典型应用场景**: - 用于测试注入点是否存在(如引用[2]所示)。例如,输入 `?id=1' AND 1=1 --+`,如果页面正常返回,表明注入点有效且注释生效[^2]。 - 在字符型注入中(如引用[1]的后台SQL语句 `WHERE id=('$id')`),注入 '--+' 可闭合单引号并注释剩余部分,防止语法错误[^1]。 4. **注意事项**: - '--+' 不是唯一选择;在MySQL环境中,可使用 "#"(需编码为 `%23`),但 '--+' 通用性更强。 - 实际中,攻击者可能调整符号顺序(如 `--%20`)以适应不同过滤规则。 总之,'--+' 是SQL注入的一种关键注释技术,通过模拟空格确保注释生效,从而操控SQL逻辑。防范措施包括使用参数化查询和输入过滤[^3]。 如果您的查询涉及其他细节(如数据库类型或实战示例),请补充说明!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fatsheep洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值