为什么 MYSQL HEX 函数运行异常?
why MYSQL HEX function is acting strangely?
selecthex(user())的输出是726F6F74406C6F63616C686F7374
select unhex('726F6F74406C6F63616C686F7374') 将产生 root@localhost.
但是如果 select('select * from accounts') 将给出 73656C656374202A2066726F6D20746573742E6163636F756E7473,下面的查询不是执行并打印相应的字符串!!!!!!!!
查询: select unhex('73656C656374202A2066726F6D20746573742E6163636F756E7473')
输出:select * 来自账户
命令在数据库中的执行顺序如下:
unhex(hex(user())
unhex(hex(数据库())
unhex(十六进制(group_concat+table_name())
首先,数据库对user()函数求值:
root@localhost
然后计算十六进制值:
726F6F74406C6F63616C686F7374
然后unhex() returns 726F6F74406C6F63616C686F7374的值:
root@localhost
因此最终输出将是以下值:root@localhost
这些方法以前用于绕过 Web 应用程序防火墙。
selecthex(user())的输出是726F6F74406C6F63616C686F7374 select unhex('726F6F74406C6F63616C686F7374') 将产生 root@localhost.
但是如果 select('select * from accounts') 将给出 73656C656374202A2066726F6D20746573742E6163636F756E7473,下面的查询不是执行并打印相应的字符串!!!!!!!!
查询: select unhex('73656C656374202A2066726F6D20746573742E6163636F756E7473')
输出:select * 来自账户
命令在数据库中的执行顺序如下:
unhex(hex(user())
unhex(hex(数据库())
unhex(十六进制(group_concat+table_name())
首先,数据库对user()函数求值:
root@localhost
然后计算十六进制值:
726F6F74406C6F63616C686F7374
然后unhex() returns 726F6F74406C6F63616C686F7374的值:
root@localhost
因此最终输出将是以下值:root@localhost
这些方法以前用于绕过 Web 应用程序防火墙。