我正在玩 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应该报错。
谢谢!
最佳答案
原因是因为tool_id
是一个整数,所以比较的是数值。
MySQL 会将字符串转换为数字上下文中的数字。当它这样做时,它确实
“静默”转换,因此不会报告错误。它根据前导数字转换字符串,因此该字符串变为 2
。如果没有前导数字(或前导空格后的减号或加号),则值为 0
。
关于mysql - 为什么此 MySQL 查询成功执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23750037/