首页 > 解决方案 > 为什么 MYSQL HEX 函数行为异常?

问题描述

select hex(user())的输出是726F6F74406C6F63616C686F7374select unhex('726F6F74406C6F63616C686F7374')将产生root@localhost

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

查询: select unhex('73656C656374202A2066726F6D20746573742E6163636F756E7473')

输出:从账户中选择 *

标签: mysqlhex

解决方案


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

十六进制(十六进制(用户())

十六进制(十六进制(数据库())

unhex(hex(group_concat+table_name())

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

根@localhost

然后将计算十六进制值:

726F6F74406C6F63616C686F7374

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

根@localhost

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

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


推荐阅读