今天的比赛中的一道代码审计的题目。
step 1 初步审计
发现所有的数据库操作都是 PDO操作,这也就意味着不可能是SQL注入了。查找flag出现的位置
do_changepass.php
user.php
发现如果是要获取flag 那么必须要更改userinfo数组的值····
step 2 代码回溯
我们发现在上述两个页面userinfo的值就是session的值,所以目标转化为更改session值,找到登录后的操作
在这里发现了$_session[userinfo]
的赋值操作$userinfo,本来userinfo是数组,我们在这里有个变量覆盖
common.php
我们如果传入?userinfo=a
那么就是一个字符串这时
$userinfo["id"]=$userinfo[0]=a
我们看register.php
role = 1
所以$_session[userinfo]='1'
session是字符串1
这时再次访问do_changepass.php即可