web574
这题与web573的区别在于进find()前先进了where()处理
跟进where()
我们假设传个1,和'id='拼接
发现会进到is_string的判断里,让$options['where']=array("_string"=>"1")
之后传入到find(),和web573一样也是以数组形式传参,只不过传入的参数也是数组,我们跟一下代码。
(这里我认为数据库id字段类型为varchar,这样数组条件判断进_parseType()就不会受到数字型或布尔型强制类型转化干扰)
跟select进入parseWhere()
键'_string'的首字符为'_',跟进parseThinkWhere()
发现就是把传入的数组解析成键值对,将值赋给$whereStr,最后返回一个($val),并拼接到sql语句中进行查询。
只要让$val=-1) xxx #就可以闭合括号,进行sql注入
最终payload:
?id=-1) union select 1,flag4s ,3,4 from flags%23