SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

在弄SQL的时候碰到了"Illegal mix of collations for operation 'UNION'"这个报错信息,原来没太注意这个报错,结果看了半天没发现语句有什么错误,顺手去查了下基本上都说是字符编码的问题,瞎折腾了一番来验证结果。


起因

做SQL注入时,发现回显点有比较多,随便找了一个查询。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

比如第7个回显点,用来查database()正常。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

继续查表,这次显示就不正常了。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因


证实

搜了下说是因为字符编码的问题,来验证下,首先去确认下第4个回显点是显示什么内容的。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

然后去数据库中查source这个字段是什么编码,当然在数据库中直接去看第7个字段也可以。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

发现source和id的字符编码确实不一样,而第12个字段也就是hits和id的编码一致,测试后发现确实可以正确回显。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

alert table cms_article character set utf8;可以用来修改整表的编码,但是似乎没有办法将int型的编码进行转换。那么将hits类型改成字符型,然后再将编码改成utf8测试。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因

猜想证实结束,over。 SQL注入时"Illegal mix of collations for operation 'UNION'"出现的原因