为什么MySQL查询成功执行?

时间:2014-05-20 02:22:54

标签: mysql sql xss

我正在玩Multilldae的XSS练习,并且在其中一个练习(OWASP 2013-> A3-> Reflected-> Pen Test Tool Lookup)中,我精心设计的输入导致以下查询。 where子句的形式非常奇怪。而tool_id是一个int字段。

SELECT tool_id, tool_name, phase_to_use, tool_type, comment FROM pen_test_tools 
WHERE tool_id = '2\", \"good\":\"haha';

令我惊讶的是,此查询成功执行并返回正确的结果。你能告诉我为什么吗?在我看来,where子句完全是无意义的,MySQL应该报告错误。

谢谢!

1 个答案:

答案 0 :(得分:2)

原因是因为tool_id是一个整数,所以比较是用数字完成的。

MySQL会将字符串转换为数字上下文中的数字。当它这样做时,确实如此 “无声”转换,因此不报告错误。它根据前导数字转换字符串,因此该字符串变为2。如果没有前导数字(或前导空格后面的减号或加号),则值为0