带有恶意负载的SQL注入以十六进制值伪装

时间:2015-11-14 07:23:27

标签: mysql sql hex sql-injection

我正在调查SQL注入并且难以将有效负载隐藏在十六进制中,希望有人可以提供建议。

例如,注射: 从用户中选择id =? - >这是我要注入的地方

我想进行如下查询:(仅举例) 从用户中选择名称,其中id = 1 union select 1,2,3

为了隐藏我的有效载荷,我想转换" 1 union选择1,2,3"十六进制如下: 从产品中选择ID = X' 3120756E696F6E2073656C65637420313233'; 从产品中选择名称,其中id = 0x3120756E696F6E2073656C65637420313233;

然而,某种程度上,mysql并没有将我的十六进制解释为原始字符串,而是将其视为一个在我看来不是逻辑的数字。有人可以帮我这个吗? 感谢。

1 个答案:

答案 0 :(得分:0)

MySQL在两种情况下都将0x3120...X'3120...'解释为十六进制文字表达式,并将其解释为数字,字符串或blob,这是完全符合逻辑的语境决定。

解析器在任何情况下都不会模糊地解释这些表达式,只不过它会误解为这样的东西:

WHERE id = '1 UNION ALL SELECT ...'

它明确地是一个文字字符串表达式,与提供的两个示例相同。

https://dev.mysql.com/doc/refman/5.6/en/hexadecimal-literals.html

我不倾向于帮助任何人就如何利用SQL注入漏洞提出建议。使用urlencoding将允许你传递像%31%20%75%6E...这样的东西,这实际上根本不是一个聪明的利用,只是一种不同的编码URL的方式,用于在已经很脆弱的界面上进行呈现,并且没有用于高级目的。无论是正确编写,还是在没有这种策略的情况下它已经很脆弱,并且这种编码不会改变,除非在极少数情况下。