Home Sqli Mysql Waf绕过 在mysql中的一种类型 16进制字符串 Hexadecimalliteral
Post
Cancel

Sqli Mysql Waf绕过 在mysql中的一种类型 16进制字符串 Hexadecimalliteral

参考:

官方文档: MYSQL 5.7 https://dev.mysql.com/doc/refman/5.7/en/hexadecimal-literals.html

在线转换:https://stool.chinaz.com/hex

选择Hex编码,解码。

Table -> %54%61%62%6c%65

刚好对应官方文档中的:  select 0x5461626c65    # => Table

( 注意:在windows的Heidi MySQL客户端上该结果仍然显示0x... ,这个不是你的问题,是该软件的问题。

在正常的client或者php返回结果的页面中,仍然会正常显示Table这个文字结果的)

奇怪。 不过我在另外一篇绕过WAF的文章中看到过这个。

在MySQL中,可以这样用:

# SELECT 0x00 # -> 0x00
# SELECT X'' + 0 # => 0
# SELECT CHARSET(X''), LENGTH(X'') # => binary, 0
# SELECT X'20' + 88; # => 120, = 32 + 88 , = 0x20 + 88 , 0x20 = 2 x 16 = 32
# SELECT X'20' # => 0x20
# SELECT X'20' + 1 # => 33 = 0x20 +1 = 32 + 1

所以,有一个例子:

SELECT GROUP_CONCAT(username, PASSWORD SEPARATOR '<br>') FROM users;
SELECT GROUP_CONCAT(username, PASSWORD SEPARATOR 0x3c62723e) FROM users;

上面的  '<br>'  与下面的 0x3c62723e 是等价的。都会返回以下结果;

GROUP_CONCAT(username, PASSWORD SEPARATOR 0x3c62723e)
DumbDumb<br>AngelinaI-kill-you<br>Dummyp@ssword<br>securecrappy

在Mysql中,可以使用HEX函数来转换

select hex('Banana'),  # =>  42616E616E61

也可以把一个 hex转换成字符串:

select CAST(unhex('42616E616E61') AS CHAR(100))   # => Banana

This post is licensed under CC BY 4.0 by the author.