微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 MYSQL HEX 函数的行为很奇怪?

如何解决为什么 MYSQL HEX 函数的行为很奇怪?

select hex(user())输出726F6F74406C6F63616C686F7374选择 unhex('726F6F74406C6F63616C686F7374') 将产生 root@localhost

但是如果 select('select * from accounts') 将给出 73656C656374202A2066726F6D20746573742E6163636F756E7473,下面的查询不会被执行!只打印相应的字符串! !!!!

查询 选择 unhex('73656C656374202A2066726F6D20746573742E6163636F756E7473')

输出:从帐户中选择 *

解决方法

数据库中命令的执行顺序如下:

unhex(hex(user())

unhex(hex(database())

unhex(hex(group_concat+table_name())

首先,数据库评估 user() 函数:

root@localhost

然后计算十六进制值:

726F6F74406C6F63616C686F7374

然后 unhex() 返回 726F6F74406C6F63616C686F7374 的值:

root@localhost

所以最终输出将是以下值:root@localhost

这些方法以前用于绕过 Web 应用程序防火墙。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。