mysql 注释入侵

我们在碰到字符型注入点时,要想办法把原查询SQL语句后面的单引号消掉才能让注入语句执行成功,我所知道常用的办法有以下几种(也许还有其他办法,望高手指教),假设查询字段数为两个且只用到一个字符型条件参数:
1、加注释,如:show
我们在碰到字符型注入点时,要想办法把原查询SQL语句后面的单引号消掉才能让注入语句执行成功,我所知道常用的办法有以下几种(也许还有其他办法,望高手指教),假设查询字段数为两个且只用到一个字符型条件参数:
1、加注释,如:showtopic.php?key=abc' and 1<> 1 union   select 1, 2 #
2、union方式,如:showtopic.php?key=abc' and 1<> 1 union   select 1, 2  union   select 1, 1 from information_schema.tables where '1' <> '1
3、特殊情况,如:showtopic.php?key=abc' and 1<> 1 union   select 1, 2 from user where id=5 and '1' <> '1
以上几种方式中最简单的就是加注释了,这样就不用管原SQL后面是不是还有其他条件了。mysql的注释有三种方式:
1、块注释:/*  ..... */
2、行注释:#
3、行注释:-- (--%20,注意后面有一个空格,与SQL标准稍有差别)
最先学习注入时看到很多文章都是说加后面加 /* ,但是我测试始终不成功,直接在mysql的终端试也不行,会提示输入结束符 */。用mssql测试同样失败,提示缺少匹配的注释结事符 */。我想块注释应该是要成对匹配的,否则执行会失败。如果是这样的话/*注释符对于我们注入来说是没有作用的。
使用#行注释符时要注意了,因为#在URI里面表示锚链接,所以要对它进行编码转义才行,输入 %23 即可。
--%20可以直接使用,但切记后面要有%20,直接输空格的话会被截断,只有URL中间的空间才会自动进行编码。
 
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0405/21625.php

### 绕过 SQL 注入中的注释符号方法 在某些情况下,开发者可能会通过过滤特定字符来防止 SQL 注入攻击。例如,常见的 `--` 和 `/* */` 被用于标记 SQL 查询中的注释部分[^1]。然而,攻击者可以通过多种技术绕过这些限制。 #### 使用替代编码方式 一种常见的方式是利用数据库支持的不同编码形式。例如,在 MySQL 中可以使用十六进制或二进制字符串表示特殊字符。这使得即使注释符号被过滤掉,也可以通过其他手段实现相同的效果。例如: ```sql SELECT * FROM users WHERE id = 0x31 OR 'a'='a'; ``` 这里 `0x31` 是十六进制表示的数字 `1`,从而规避了可能针对常规数字输入的验证逻辑。 #### 利用联合查询 (UNION SELECT) 当标准的注释符不可用时,尝试构造基于 UNION 的查询语句可能是有效的策略之一。这种方法不需要依赖于传统的单行或多行注释语法,而是直接拼接额外的数据检索命令。如下所示: ```sql ' UNION ALL SELECT null, username || ':' || password FROM users -- ``` 此例子假设存在两个字段(null 值填充),并试图从另一个表中提取用户名和密码组合信息。 #### 替代字符集与转义序列 如果目标环境严格阻止了明显的分隔标志如 '--', '#', 或 '/**/' ,那么考虑采用更隐蔽的技术就显得尤为重要。比如替换原本预期会触发防护机制的关键字为它们对应的 ASCII 数值或者 URL 编码版本: - 将 '#' 变成 '%23' - 把 '/' 替换成它的 HTML 实体 &sol; 最终形成这样的请求参数: ```plaintext http://example.com/vuln?input=1%27+union+%2F*select*/+version()+-- ``` 以上实例展示了如何巧妙运用合法但不常使用的表达式结构来完成任务的同时避开简单的模式匹配防御措施[^1]。 #### 结合存储过程或其他高级特性 对于更加复杂的场景,则可探索调用预定义好的函数或者是创建临时性的子程序来进行间接操作。这类手法往往能够突破单纯依靠文本分析所建立起来的安全屏障。 请注意,所有的讨论均出于学术研究目的,并提醒读者不要非法入侵任何系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值