这是经常讨论的问题,我知道,但我最近发现this vulnerability并且我正在测试我是否对这种注射有抵抗力,但是我无法模拟这种行为。可能,我不理解他们正在使用的查询。
我感兴趣的部分:
第一个漏洞影响mysql_real_escape_string() 函数系列,不拒绝无效的多字节字符。 例如,在UTF-8中,“0xC8”'attackersql'或“0xC8” attackersql“字符串转换为”one_character“attackersql” (忽略空格)。所以,查询:
SELECT ... WHERE v ='mysql_real_escape_string(“0xC8' attackersql”)'
成为:
SELECT ... WHERE v ='0xC8'' attackersql'
SELECT ... WHERE v ='one_character'toarversersql'
攻击者因此可以注入attackersql命令。
这个问题听起来很蹩脚,但是我怎样才能使注射工作?
注意(编辑):我正在使用PHP 5.2.6,MySQL 5.0.51a(更正)和charset'utf8'在数据库连接上设置。