其他
任意账号密码重置的6种方法
1、原理
2、案例
3、修复建议
二、修改用户名、用户ID或手机号重置任意账号密码
1、原理
2、案例
POST /user/info_do HTTP/1.1Host: www.XXX.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0Accept: */*Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateReferer: http://www.XXX.com/user/info_viewContent-Type: application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With: XMLHttpRequestContent-Length: 211Cookie: yunsuo_session_verify=9341a54b945886e9485ff54a17650468; PHPSESSID=sgbibaqe7f8f6okerps8jip916; sdrcUserlockcount=1; sdrcUseruserid=14943Connection: keep-alivepassword=A123456&email=1%40qq.com&address=1&postcode=1&mobile=13888888888&sex=man&birthday=0000-00-00°ree=collegeLT&testsite=1&post=1&__hash__=b0b15b067dea00bd34fd39421b7ef684_efc2399e5c4b2071f261e75fe3362d4fa
3、修复建议
用户操作个人信息(读取、修改)时,服务端要对当前用户身份进行验证,防止越权操作; 用来标识用户身份的名称或ID可以使用自定义加密,也可以隐藏这些参数,直接从cookie中获取用户信息; 用户修改密码时应该先对旧密码进行验证,或者使用手机短信验证; 用户修改手机号时需要先对原手机号进行验证。
三、修改响应包重置任意账号密码
1、原理
2、案例
3、修复建议
服务端对验证码进行验证,结果为true时直接跳到下一步,无需向客户端单独返回验证结果; 输入新的密码,然后提交到服务端,服务端应对当前用户名、手机号、短信验证码进行二次匹配验证,都为true时,才可以修改成功。
四、跳过验证步骤重置任意账号密码
1、原理
2、案例
<html><head><title>object moved</title></head><body><h2>object moved to <a href="/Personal/sys/getpasswordreset">here</a>.</h2></body></html>
3、修复建议
每一个步骤都要对前一个步骤进行验证; 最后提交新密码时应对当前用户名或ID、手机号、短信验证码进行二次匹配验证。
五、重置密码链接中token值未验证或不失效导致任意账号密码重置
1、原理
2、案例
http://www.xxx.com/GetPwd.aspx?q=0x0531387a5a6c1227e4d6ba0ce16dc72e&r=3244166
3、修复建议
服务端对客户端提交的token值进行验证; 保证token值使用一次后即失效,防止重复使用; 对用户ID进行自定义加密; 使用根据用户ID生成的token值来标识用户,链接中不携带用户ID。
六、找回密码的短信验证码可被爆破导致任意账号密码重置
1、原理
2、案例
Code=5000&u=13888888888&Check=dc5b94101cb4f23a9ce6ae71197fc5de&a=5
3、修复建议
验证码满足一定复杂度,且限制验证码生效时间; 验证短信验证码的数据包使用token值并验证,防止自动化工具爆破
热文推荐