首先我们注册两个用户
第一个叫jkgh006
第二个叫test123
那么我们下来分析一下代码:
member.php:
这里有一个逻辑缺陷 ,如果输入密码,则才对密码相关的做检测
第一步 我们把密码置空
然后一路小跑到
@$sql .= "question='$question', answer='$answer', cnname='$cnname', enname='$enname', sex='$sex', birthtype='$birthtype', birth_year='$birth_year', birth_month='$birth_month', birth_day='$birth_day', astro='$astro', bloodtype='$bloodtype', trade='$trade', live_prov='$live_prov', live_city='$live_city', live_country='$live_country', home_prov='$home_prov', home_city='$home_city', home_country='$home_country', cardtype='$cardtype', cardnum='$cardnum', intro='$intro', email='$email', qqnum='$qqnum', mobile='$mobile', telephone='$telephone', address_prov='$address_prov', address_city='$address_city', address_country='$address_country', address='$address', zipcode='$zipcode' WHERE id=$id";
看见问题了没有后面直接是id=$id也就是说我们可以越权修改别人信息了,这里我讲的不是越权问题
通过这个我们修改两个字段
第一个 question
第二个 answer
下来我们要分析为什么要修改这两个字段,直接到找回密码处,看看代码怎么写的
member.php:
这里只是通过问题答案一路存储到session里面 session里面的这个东西正好就只是找回密码下一次的凭证
if($_SESSION['fid_'.$_POST['uname']] != $_POST['uname']) 这一句提交相同 那就ok了