【Web】Ctfshow Thinkphp3.2.3代码审计(3)

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

猜你喜欢

转载自blog.csdn.net/uuzeray/article/details/135215017