我正在调查SQL注入并且难以将有效负载隐藏在十六进制中,希望有人可以提供建议。
例如,注射: 从用户中选择id =? - >这是我要注入的地方
我想进行如下查询:(仅举例) 从用户中选择名称,其中id = 1 union select 1,2,3
为了隐藏我的有效载荷,我想转换" 1 union选择1,2,3"十六进制如下: 从产品中选择ID = X' 3120756E696F6E2073656C65637420313233'; 从产品中选择名称,其中id = 0x3120756E696F6E2073656C65637420313233;
然而,某种程度上,mysql并没有将我的十六进制解释为原始字符串,而是将其视为一个在我看来不是逻辑的数字。有人可以帮我这个吗? 感谢。
答案 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的方式,用于在已经很脆弱的界面上进行呈现,并且没有用于高级目的。无论是正确编写,还是在没有这种策略的情况下它已经很脆弱,并且这种编码不会改变,除非在极少数情况下。